aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rwxr-xr-x.webpull20
-rw-r--r--README.md2
-rw-r--r--package-lock.json528
-rw-r--r--package.json21
-rw-r--r--render.js172
-rw-r--r--src/Documentation/Association/index.md28
-rw-r--r--src/Documentation/Technique/index.md0
-rw-r--r--src/Documentation/_markdown.pug22
-rw-r--r--src/Documentation/index.md1
-rw-r--r--src/_layout.pug13
-rw-r--r--src/administratif/2020-01-13-pv-ag.css122
-rw-r--r--src/administratif/2020-01-13-pv-ag.html86
-rw-r--r--src/administratif/2020-01-13-statuts.css121
-rw-r--r--src/administratif/2020-01-13-statuts.html136
-rw-r--r--src/association.pug42
-rw-r--r--src/css/main.css2
-rw-r--r--src/documentation.pug9
18 files changed, 782 insertions, 546 deletions
diff --git a/.gitignore b/.gitignore
index 5551fd0..e5322a6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-static/*
+static/
+node_modules/
diff --git a/.webpull b/.webpull
index 4fa75c1..4df1cf1 100755
--- a/.webpull
+++ b/.webpull
@@ -1,19 +1,3 @@
#!/bin/bash
-
-set -e
-
-mkdir -p ./static
-COPYFILES=$(find src -type f | egrep -v '\.(pug|md)$')
-
-for CF in $COPYFILES; do
- CF_TO=static/${CF#"src/"}
- if [ ! -d $(dirname $CF_TO) ]; then
- mkdir -vp $(dirname $CF_TO)
- fi
- if [ ! -e $CF_TO ]; then
- ln -srv $CF $CF_TO
- fi
-done
-
-pug ./src --out ./static
-
+npm install
+node render.js
diff --git a/README.md b/README.md
index e23f8ae..ba95963 100644
--- a/README.md
+++ b/README.md
@@ -5,8 +5,6 @@ deuxfleurs.fr
## Building
```
-sudo npm install -g pug-cli
-sudo npm install -g jstransformer-markdown-it
./.webpull
```
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..6ab16d6
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,528 @@
+{
+ "name": "site",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/babel-types": {
+ "version": "7.0.7",
+ "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz",
+ "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ=="
+ },
+ "@types/babylon": {
+ "version": "6.16.5",
+ "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
+ "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
+ "requires": {
+ "@types/babel-types": "*"
+ }
+ },
+ "acorn": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
+ "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
+ },
+ "acorn-globals": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
+ "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
+ "requires": {
+ "acorn": "^4.0.4"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ }
+ }
+ },
+ "align-text": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
+ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
+ "requires": {
+ "kind-of": "^3.0.2",
+ "longest": "^1.0.1",
+ "repeat-string": "^1.5.2"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+ },
+ "babel-runtime": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+ "requires": {
+ "core-js": "^2.4.0",
+ "regenerator-runtime": "^0.11.0"
+ }
+ },
+ "babel-types": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
+ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
+ "requires": {
+ "babel-runtime": "^6.26.0",
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.4",
+ "to-fast-properties": "^1.0.3"
+ }
+ },
+ "babylon": {
+ "version": "6.18.0",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
+ "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
+ },
+ "camelcase": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
+ "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
+ },
+ "center-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
+ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
+ "requires": {
+ "align-text": "^0.1.3",
+ "lazy-cache": "^1.0.3"
+ }
+ },
+ "character-parser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
+ "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
+ "requires": {
+ "is-regex": "^1.0.3"
+ }
+ },
+ "clean-css": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
+ "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
+ "requires": {
+ "source-map": "~0.6.0"
+ }
+ },
+ "cliui": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
+ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
+ "requires": {
+ "center-align": "^0.1.1",
+ "right-align": "^0.1.1",
+ "wordwrap": "0.0.2"
+ }
+ },
+ "constantinople": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
+ "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
+ "requires": {
+ "@types/babel-types": "^7.0.0",
+ "@types/babylon": "^6.16.2",
+ "babel-types": "^6.26.0",
+ "babylon": "^6.18.0"
+ }
+ },
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "doctypes": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
+ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
+ },
+ "entities": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
+ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
+ "is-expression": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
+ "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
+ "requires": {
+ "acorn": "~4.0.2",
+ "object-assign": "^4.0.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "4.0.13",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
+ "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
+ }
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-regex": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
+ "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "js-stringify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
+ "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
+ },
+ "jstransformer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
+ "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
+ "requires": {
+ "is-promise": "^2.0.0",
+ "promise": "^7.0.1"
+ }
+ },
+ "jstransformer-markdown-it": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/jstransformer-markdown-it/-/jstransformer-markdown-it-2.1.0.tgz",
+ "integrity": "sha1-aewwzkUYvtWZezjwJ2SOjChekvc=",
+ "requires": {
+ "markdown-it": "^8.0.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ },
+ "lazy-cache": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
+ "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
+ },
+ "linkify-it": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
+ "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
+ "requires": {
+ "uc.micro": "^1.0.1"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "longest": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
+ "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
+ },
+ "markdown-it": {
+ "version": "8.4.2",
+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
+ "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "entities": "~1.1.1",
+ "linkify-it": "^2.0.0",
+ "mdurl": "^1.0.1",
+ "uc.micro": "^1.0.5"
+ }
+ },
+ "marked": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.0.tgz",
+ "integrity": "sha512-MyUe+T/Pw4TZufHkzAfDj6HarCBWia2y27/bhuYkTaiUnfDYFnCP3KUN+9oM7Wi6JA2rymtVYbQu3spE0GCmxQ=="
+ },
+ "mdurl": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ },
+ "promise": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
+ "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
+ "requires": {
+ "asap": "~2.0.3"
+ }
+ },
+ "pug": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz",
+ "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==",
+ "requires": {
+ "pug-code-gen": "^2.0.2",
+ "pug-filters": "^3.1.1",
+ "pug-lexer": "^4.1.0",
+ "pug-linker": "^3.0.6",
+ "pug-load": "^2.0.12",
+ "pug-parser": "^5.0.1",
+ "pug-runtime": "^2.0.5",
+ "pug-strip-comments": "^1.0.4"
+ }
+ },
+ "pug-attrs": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz",
+ "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==",
+ "requires": {
+ "constantinople": "^3.0.1",
+ "js-stringify": "^1.0.1",
+ "pug-runtime": "^2.0.5"
+ }
+ },
+ "pug-code-gen": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz",
+ "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==",
+ "requires": {
+ "constantinople": "^3.1.2",
+ "doctypes": "^1.1.0",
+ "js-stringify": "^1.0.1",
+ "pug-attrs": "^2.0.4",
+ "pug-error": "^1.3.3",
+ "pug-runtime": "^2.0.5",
+ "void-elements": "^2.0.1",
+ "with": "^5.0.0"
+ }
+ },
+ "pug-error": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz",
+ "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ=="
+ },
+ "pug-filters": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz",
+ "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==",
+ "requires": {
+ "clean-css": "^4.1.11",
+ "constantinople": "^3.0.1",
+ "jstransformer": "1.0.0",
+ "pug-error": "^1.3.3",
+ "pug-walk": "^1.1.8",
+ "resolve": "^1.1.6",
+ "uglify-js": "^2.6.1"
+ }
+ },
+ "pug-lexer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz",
+ "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==",
+ "requires": {
+ "character-parser": "^2.1.1",
+ "is-expression": "^3.0.0",
+ "pug-error": "^1.3.3"
+ }
+ },
+ "pug-linker": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz",
+ "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==",
+ "requires": {
+ "pug-error": "^1.3.3",
+ "pug-walk": "^1.1.8"
+ }
+ },
+ "pug-load": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz",
+ "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==",
+ "requires": {
+ "object-assign": "^4.1.0",
+ "pug-walk": "^1.1.8"
+ }
+ },
+ "pug-parser": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz",
+ "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==",
+ "requires": {
+ "pug-error": "^1.3.3",
+ "token-stream": "0.0.1"
+ }
+ },
+ "pug-runtime": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz",
+ "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw=="
+ },
+ "pug-strip-comments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz",
+ "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==",
+ "requires": {
+ "pug-error": "^1.3.3"
+ }
+ },
+ "pug-walk": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
+ "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA=="
+ },
+ "regenerator-runtime": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+ "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
+ },
+ "resolve": {
+ "version": "1.15.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
+ "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "right-align": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
+ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
+ "requires": {
+ "align-text": "^0.1.1"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "to-fast-properties": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
+ "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
+ },
+ "token-stream": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
+ "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
+ },
+ "uc.micro": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
+ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
+ },
+ "uglify-js": {
+ "version": "2.8.29",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
+ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
+ "requires": {
+ "source-map": "~0.5.1",
+ "uglify-to-browserify": "~1.0.0",
+ "yargs": "~3.10.0"
+ },
+ "dependencies": {
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
+ }
+ }
+ },
+ "uglify-to-browserify": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
+ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
+ "optional": true
+ },
+ "void-elements": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
+ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
+ },
+ "window-size": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
+ "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
+ },
+ "with": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
+ "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
+ "requires": {
+ "acorn": "^3.1.0",
+ "acorn-globals": "^3.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
+ "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
+ },
+ "yargs": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
+ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
+ "requires": {
+ "camelcase": "^1.0.2",
+ "cliui": "^2.1.0",
+ "decamelize": "^1.0.0",
+ "window-size": "0.1.0"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..7d5e20f
--- /dev/null
+++ b/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "site",
+ "version": "1.0.0",
+ "description": "deuxfleurs.fr",
+ "main": "render.js",
+ "dependencies": {
+ "jstransformer-markdown-it": "^2.1.0",
+ "marked": "^0.8.0",
+ "pug": "^2.0.4"
+ },
+ "devDependencies": {},
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@git.deuxfleurs.fr:Deuxfleurs/site.git"
+ },
+ "author": "",
+ "license": "ISC"
+}
diff --git a/render.js b/render.js
new file mode 100644
index 0000000..e394400
--- /dev/null
+++ b/render.js
@@ -0,0 +1,172 @@
+'use strict'
+
+const pug = require('pug')
+const marked = require('marked')
+const fs = require('fs').promises
+
+const walk = async (path, filename) => {
+ const type = await fs.lstat(path)
+ if (type.isFile()) return {type: 'file', path: path, name: filename || path}
+ if (!type.isDirectory()) return null
+
+ const files = await fs.readdir(path)
+ return {
+ type: 'folder',
+ path: path,
+ name: filename || path,
+ children: await Promise.all(files.map(file => walk(`${path}/${file}`, file)))
+ }
+}
+
+const ext_static = ['.css', '.js', '.otf', '.png', '.svg', '.txt', 'client', 'server']
+const ext_md = ['.md', '.markdown']
+const ext_pug = ['.pug', '.jade']
+
+const suffix = file => ext => file.substring(file.length - ext.length) == ext ? ext : null
+const suffixl = (...l) => file => l.find(suffix(file))
+const is_static = suffixl(...ext_static)
+const is_md = suffixl(...ext_md)
+const is_pug = suffixl(...ext_pug)
+
+const prefix = file => ext => file.substring(0, ext.length) == ext ? ext : null
+const prefixl = (...l) => file => l.find(prefix(file))
+
+const rm_prefix = (...l) => file => file.substring(prefixl(...l)(file).length)
+const rm_suffix = (...l) => file => file.substring(0, file.length - suffixl(...l)(file).length)
+
+const propagate_md_layout = (tree, markdown_template) => {
+ if (tree.type == 'file' && is_md(tree.name)) {
+ tree.template = markdown_template
+ } else if (tree.type == 'folder') {
+ const find_md_tpl = tree.children.filter(c => c.type == 'file' && c.name == '_markdown.pug')
+ const new_md_tpl = find_md_tpl.length > 0 ? find_md_tpl[0] : markdown_template
+ tree.children.forEach(c => propagate_md_layout(c, new_md_tpl))
+ }
+ return tree
+}
+
+const elagate_templates = tree => {
+ if (tree.type != 'folder') return tree
+
+ tree.children = tree.children.filter(e => !(e.type == 'file' && e.name[0] == '_'))
+ tree.children.forEach(elagate_templates)
+ return tree
+}
+
+const propagate_nice_name = prefix => tree => {
+ const without_prefix = tree.path.substring(prefix.length)
+ const splitted = without_prefix.split('/').filter(v => v.length > 0)
+ if (splitted.length > 0) {
+ tree.nice_path = splitted.slice(0, -1)
+ tree.nice_name = splitted[splitted.length - 1].split('.')[0]
+ tree.url = without_prefix
+ }
+
+ if (tree.type == 'folder') tree.children.forEach(propagate_nice_name(prefix))
+ return tree
+}
+
+const prepare_copy = (old_prefix, new_prefix, exts) => tree => {
+ if (tree.type == 'file' && is_static(tree.name)) {
+ tree.generate = {
+ cmd: 'copy',
+ src: tree.path,
+ out: new_prefix + rm_prefix(old_prefix)(tree.path)
+ }
+ } else if (tree.type == 'folder') {
+ tree.children.forEach(prepare_copy(old_prefix, new_prefix, exts))
+ }
+ return tree
+}
+
+const prepare_pug = (old_prefix, new_prefix) => tree => {
+ if (tree.type == 'file' && is_pug(tree.name)) {
+ tree.generate = {
+ cmd: 'pug',
+ src: tree.path,
+ out: new_prefix + rm_prefix(old_prefix)(rm_suffix(...ext_pug)(tree.path)) + '.html'
+ }
+ }
+ else if (tree.type == 'folder') {
+ tree.children.forEach(prepare_pug(old_prefix, new_prefix))
+ }
+
+ return tree
+}
+
+const prepare_md = (old_prefix, new_prefix) => tree => {
+ if (tree.type == 'file' && is_md(tree.name)) {
+ tree.generate = {
+ cmd: 'pug',
+ src: tree.template.path,
+ markdown: tree.path,
+ out: new_prefix + rm_prefix(old_prefix)(rm_suffix(...ext_md)(tree.path)) + '.html'
+ }
+ }
+ else if (tree.type == 'folder') {
+ tree.children.forEach(prepare_md(old_prefix, new_prefix))
+ }
+
+ return tree
+}
+
+const prepare_folder = (old_prefix, new_prefix) => tree => {
+ if (tree.type == 'folder') {
+ tree.generate = {
+ cmd: 'mkdir',
+ out: new_prefix + rm_prefix(old_prefix)(tree.path)
+ }
+ tree.children.forEach(prepare_folder(old_prefix, new_prefix))
+ }
+
+ return tree
+}
+
+const do_folder = async tree => {
+ if (!tree.generate || tree.generate.cmd != 'mkdir') return tree
+ await fs.mkdir(tree.generate.out, { recursive: true })
+ await Promise.all(tree.children.map(do_folder))
+ return tree
+}
+
+const do_copy = async tree => {
+ if (tree.generate && tree.generate.cmd == 'copy')
+ await fs.copyFile(tree.generate.src, tree.generate.out)
+ else if (tree.type == 'folder')
+ await Promise.all(tree.children.map(do_copy))
+
+ return tree
+}
+
+const do_pug = (prt, root) => async tree => {
+ prt = prt || tree
+ root = root || tree
+ if (tree.generate && tree.generate.cmd == 'pug') {
+ const html = pug.renderFile(tree.generate.src, {
+ markdown: tree.generate.markdown ? marked(await fs.readFile(tree.generate.markdown, 'utf-8')) : null,
+ prt: prt,
+ root: root,
+ element: tree
+ })
+ await fs.writeFile(tree.generate.out, html)
+ } else if (tree.type == 'folder')
+ await Promise.all(tree.children.map(do_pug(tree,root)))
+
+ return tree
+}
+
+
+const conf = { src: './src', dest: './static'}
+walk(conf.src)
+ .then(propagate_md_layout)
+ .then(elagate_templates)
+ .then(propagate_nice_name(conf.src))
+ .then(prepare_copy(conf.src, conf.dest))
+ .then(prepare_pug(conf.src, conf.dest))
+ .then(prepare_md(conf.src, conf.dest))
+ .then(prepare_folder(conf.src, conf.dest))
+ .then(do_folder)
+ .then(do_copy)
+ .then(do_pug())
+ .then(v => console.log("done"))
+ .catch(console.error)
diff --git a/src/Documentation/Association/index.md b/src/Documentation/Association/index.md
new file mode 100644
index 0000000..1aa8c16
--- /dev/null
+++ b/src/Documentation/Association/index.md
@@ -0,0 +1,28 @@
+## Notre raison d'être
+
+Aujourd'hui, de grandes entreprises conçoivent des services numériques qui ont pour objectif de <a href="https://fr.wikipedia.org/wiki/%C3%89conomie_de_l%27attention">maximiser le temps</a> que nous passons dessus, de <a href="https://fr.wikipedia.org/wiki/%C3%89conomie_de_la_surveillance">collecter et recouper des données</a> à notre insu pour nous influencer, de <a href="https://www.april.org/le-parlement-europeen-valide-la-generalisation-de-la-censure-automatisee">limiter nos possibilités d'expression</a> au delà du cadre légal et de <a href="https://fr.wikipedia.org/wiki/Embrace,_extend_and_extinguish">créer de nouveaux monopoles</a>. Ces effets nous montrent que la technologie n'est pas neutre et a un réel impact sur nos vies. En choisissant et en hébergeant nos propres outils de communication, sans but lucratif ni hégémonique, nous espérons nous affranchir de ces nuisances et préserver nos libertés.
+
+Pour en savoir plus, rendez-vous sur <a href="https://www.laquadrature.net/">La Quadrature du Net</a> et allez lire le manifeste <a href="https://chatons.org/fr/manifeste">des CHATONS</a>.
+
+
+## Nos objectifs
+
+### Des utilisateurs impliqués
+
+Que ce soit à l'école, par l'expérimentation, via un forum d'échange, lors d'un atelier, via une publicité à la télévision, un tutoriel, lors d'une discussion avec un ami, il y toujours une phase d'apprentissage en informatique. Malheureusement, dans ces conditions, dur de lutter pour des services libres face à la puissance de frappe d'une entreprise et des logiciels ayant une base d'utilisateurs immense. Nous pensons donc qu'une personne souhaitant s'héberger chez un hébergeur indépendant a besoin d'un accompagnement. C'est pourquoi les inscriptions se font par cooptation. La cooptation permet aussi un lien de confiance et ainsi de se prémunir de bon nombres d'attaques que subissent les hébergeurs.
+
+### Une architecture résiliente
+
+Les sites webs, les réseaux sociaux, les emails ne peuvent fonctionner que grâce à des ordinateurs qui restent allumés 24/24h et qui n'attendent que vous. Cependant, ces derniers sont faillibles. Une coupure d'électricité, un disque dur cassé, une mise à jour ratée, un bug dans le logiciel, les raisons ne manquent pas. Heureusement, il est possible de masquer ces pannes avec du logiciel astucieusement conçu. C'est pourquoi vous avez l'impression que Google est toujours disponible, que Dropbox ne perd pas vos données, etc. La gestion de ces pannes, c'est aussi ce qui rend la vie compliquée aux hébergeurs indépendants. Entre incompréhension des utilisateurs quand un service est hors ligne et sueurs froides pour les administrateurs, ça n'a rien de marrant. Et c'est très chronophage. Notre objectif est donc de construire des solutions d'hébergements qui peuvent résister à ces pannes.
+
+## Statuts de l'association
+
+Depuis janvier 2020, Deuxfleurs est constitué en association loi 1901.
+Vous trouverez [ici](Documentation/Association/2020-01-13-statuts/) les statuts de l'association.
+
+## Comptes rendus d'AG
+
+Les comptes-rendus d'AG sont disponibles aux liens suivants:
+
+ - [13 janvier 2020 (AG constitutive)](administratif/2020-01-13-pv-ag/)
+
diff --git a/src/Documentation/Technique/index.md b/src/Documentation/Technique/index.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/src/Documentation/Technique/index.md
diff --git a/src/Documentation/_markdown.pug b/src/Documentation/_markdown.pug
new file mode 100644
index 0000000..ea23f15
--- /dev/null
+++ b/src/Documentation/_markdown.pug
@@ -0,0 +1,22 @@
+extends ../_layout.pug
+
+prepend root
+ - title = element.nice_path[element.nice_path.length - 1]
+
+mixin menu(o)
+ ul
+ each val in o.children
+ - if (val.type == 'folder')
+ li
+ a(href=val.url)= val.nice_name
+ +menu(val)
+
+block content
+ .container.spacing
+ nav
+ strong
+ a(href="/Documentation") Documentation
+ +menu(root.children.find(e => e.nice_name == "Documentation"))
+
+ main.spacing
+ != markdown
diff --git a/src/Documentation/index.md b/src/Documentation/index.md
new file mode 100644
index 0000000..cd99fca
--- /dev/null
+++ b/src/Documentation/index.md
@@ -0,0 +1 @@
+# hello !
diff --git a/src/_layout.pug b/src/_layout.pug
index c16af33..ffc905e 100644
--- a/src/_layout.pug
+++ b/src/_layout.pug
@@ -3,22 +3,19 @@ block root
head
meta(charset='utf-8')
title 💮💮 deuxfleurs - #{title}
- link(rel="stylesheet", href="css/main.css")
+ link(rel="stylesheet", href="/css/main.css")
header
.container
.menu-item
- a(href='index.html')
+ a(href='/')
strong deuxfleurs&nbsp;
- img(src='img/flower.svg' width='38')
- img(src='img/flower.svg' width='38')
+ img(src='/img/flower.svg' width='38')
+ img(src='/img/flower.svg' width='38')
.menu-item
a(href='https://guichet.deuxfleurs.fr') compte
span &nbsp;|&nbsp;
.menu-item
- a(href='association.html') asso
- span &nbsp;|&nbsp;
- .menu-item
- a(href='documentation.html') doc
+ a(href='/Documentation') doc
span &nbsp;|&nbsp;
h1 #{title}
main
diff --git a/src/administratif/2020-01-13-pv-ag.css b/src/administratif/2020-01-13-pv-ag.css
deleted file mode 100644
index ae56571..0000000
--- a/src/administratif/2020-01-13-pv-ag.css
+++ /dev/null
@@ -1,122 +0,0 @@
-
-/* start css.sty */
-.cmr-10x-x-109{}
-.cmssbx-10x-x-207{font-size:188%; font-family: sans-serif; font-weight: bold;}
-.cmr-12x-x-120{font-size:130%;}
-.cmbx-10x-x-109{ font-weight: bold;}
-.cmbx-10x-x-109{ font-weight: bold;}
-.cmbx-7{font-size:63%; font-weight: bold;}
-.cmbx-7{ font-weight: bold;}
-p.noindent { text-indent: 0em }
-td p.noindent { text-indent: 0em; margin-top:0em; }
-p.nopar { text-indent: 0em; }
-p.indent{ text-indent: 1.5em }
-@media print {div.crosslinks {visibility:hidden;}}
-a img { border-top: 0; border-left: 0; border-right: 0; }
-center { margin-top:1em; margin-bottom:1em; }
-td center { margin-top:0em; margin-bottom:0em; }
-.Canvas { position:relative; }
-img.math{vertical-align:middle;}
-li p.indent { text-indent: 0em }
-li p:first-child{ margin-top:0em; }
-li p:last-child, li div:last-child { margin-bottom:0.5em; }
-li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
-.enumerate1 {list-style-type:decimal;}
-.enumerate2 {list-style-type:lower-alpha;}
-.enumerate3 {list-style-type:lower-roman;}
-.enumerate4 {list-style-type:upper-alpha;}
-div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
-.obeylines-h,.obeylines-v {white-space: nowrap; }
-div.obeylines-v p { margin-top:0; margin-bottom:0; }
-.overline{ text-decoration:overline; }
-.overline img{ border-top: 1px solid black; }
-td.displaylines {text-align:center; white-space:nowrap;}
-.centerline {text-align:center;}
-.rightline {text-align:right;}
-div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
-.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
-div.fbox {display:table}
-div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
-div.minipage{width:100%;}
-div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
-div.center div {text-align: left;}
-div.flushright, div.flushright div.flushright {text-align: right;}
-div.flushright div {text-align: left;}
-div.flushleft {text-align: left;}
-.underline{ text-decoration:underline; }
-.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
-.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
-.framebox-c {text-align:center;}
-.framebox-l {text-align:left;}
-.framebox-r {text-align:right;}
-span.thank-mark{ vertical-align: super }
-span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
-div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
-table.tabular td p{margin-top:0em;}
-table.tabular {margin-left: auto; margin-right: auto;}
-td p:first-child{ margin-top:0em; }
-td p:last-child{ margin-bottom:0em; }
-div.td00{ margin-left:0pt; margin-right:0pt; }
-div.td01{ margin-left:0pt; margin-right:5pt; }
-div.td10{ margin-left:5pt; margin-right:0pt; }
-div.td11{ margin-left:5pt; margin-right:5pt; }
-table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
-td.td00{ padding-left:0pt; padding-right:0pt; }
-td.td01{ padding-left:0pt; padding-right:5pt; }
-td.td10{ padding-left:5pt; padding-right:0pt; }
-td.td11{ padding-left:5pt; padding-right:5pt; }
-table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
-.hline hr, .cline hr{ height : 0px; margin:0px; }
-.hline td, .cline td{ padding: 0; }
-.hline hr, .cline hr{border:none;border-top:1px solid black;}
-.tabbing-right {text-align:right;}
-span.TEX {letter-spacing: -0.125em; }
-span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
-a span.TEX span.E {text-decoration: none; }
-span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
-span.LATEX span.TEX{ position:relative; left: -0.4em; }
-div.float, div.figure {margin-left: auto; margin-right: auto;}
-div.float img {text-align:center;}
-div.figure img {text-align:center;}
-.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
-.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
-.reversemarginpar{float:left;}
-table.equation {width:100%;}
-.equation td{text-align:center; }
-td.equation { margin-top:1em; margin-bottom:1em; }
-td.equation-label { width:5%; text-align:center; }
-td.eqnarray4 { width:5%; white-space: normal; }
-td.eqnarray2 { width:5%; }
-table.eqnarray-star, table.eqnarray {width:100%;}
-div.eqnarray{text-align:center;}
-div.array {text-align:center;}
-div.pmatrix {text-align:center;}
-table.pmatrix {width:100%;}
-span.pmatrix img{vertical-align:middle;}
-div.pmatrix {text-align:center;}
-table.pmatrix {width:100%;}
-span.bar-css {text-decoration:overline;}
-img.cdots{vertical-align:middle;}
-.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
-.index-item, .index-subitem, .index-subsubitem {display:block}
-div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
-div.caption span.id{font-weight: bold; white-space: nowrap; }
-h1.partHead{text-align: center}
-p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
-p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
-.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
-.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
-.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
-.verse{white-space:nowrap; margin-left:2em}
-div.maketitle {text-align:center;}
-h2.titleHead{text-align:center;}
-div.maketitle{ margin-bottom: 2em; }
-div.author, div.date {text-align:center;}
-div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
-div.author{white-space: nowrap;}
-.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
-.abstract p {margin-left:5%; margin-right:5%;}
-div.abstract {width:100%;}
-span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
-/* end css.sty */
-
diff --git a/src/administratif/2020-01-13-pv-ag.html b/src/administratif/2020-01-13-pv-ag.html
deleted file mode 100644
index 4575440..0000000
--- a/src/administratif/2020-01-13-pv-ag.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html xml:lang="fr" >
-<head><title>Procs-verbal de lassemble gnrale constitutive de l&#8217;association Deuxfleurs</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)">
-<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)">
-<!-- html -->
-<meta name="src" content="2020-01-13-pv-ag.tex">
-<link rel="stylesheet" type="text/css" href="2020-01-13-pv-ag.css">
-</head><body
->
- <div class="maketitle">
-
-
-<h2 class="titleHead">Procès-verbal de l&#8217;assemblée générale
-constitutive de l&#8217;association Deuxfleurs</h2>
- <div class="author" ><span
-class="cmr-12x-x-120">Association Deuxfleurs</span>
-<br /><span
-class="cmr-12x-x-120">10A All</span><span
-class="cmr-12x-x-120">ée de Lanvaux, 35700 Rennes</span></div><br />
-<div class="date" ><span
-class="cmr-12x-x-120">13 janvier 2020</span></div>
- </div>Le 13 janvier 2020 à 19 heures, les fondateurs de l&#8217;association Deuxfleurs se sont réunis en
-assemblée générale constitutive au 24 rue des Tanneurs à Rennes. Sont présents Adrien, Alex,
-Anaïs, Axelle, Louison, Maximilien, Quentin, Rémi et Vincent.
-<!--l. 32--><p class="indent" > L&#8217;assemblée générale désigne Adrien Luxey en qualité de président de séance et Quentin Dufour
-en qualité de secrétaire de séance. Le président de séance met à la disposition des présents le projet
-de statuts de l&#8217;association et l&#8217;état des actes passés pour le compte de l&#8217;association en
-formation.
-<!--l. 35--><p class="indent" > Puis il rappelle que l&#8217;assemblée générale constitutive est appelée à statuer sur l&#8217;ordre du jour
-suivant :
- <ul class="itemize1">
- <li class="itemize">présentation du projet de constitution de l&#8217;association;
- </li>
- <li class="itemize">présentation du projet de statuts;
- </li>
- <li class="itemize">adoption des statuts;
- </li>
- <li class="itemize">désignation des premiers membres du conseil;
- </li>
- <li class="itemize">pouvoirs en vue des formalités de déclaration et publication.</li></ul>
-<!--l. 45--><p class="indent" > Enfin, le président de séance expose les motifs du projet de création de l&#8217;association et
-commente le projet de statuts. Il ouvre la discussion. Un débat s&#8217;instaure entre les membres de
-l&#8217;assemblée.
-<!--l. 48--><p class="indent" > Après quoi, personne ne demandant plus la parole, le président met successivement aux voix les
-délibérations suivantes.
-<!--l. 50--><p class="noindent" ><span class="paragraphHead"><a
- id="x1-1000"></a><span
-class="cmbx-10x-x-109">1</span><span
-class="cmbx-7">re</span><span
-class="cmbx-10x-x-109">&#x00A0;d</span><span
-class="cmbx-10x-x-109">élib</span><span
-class="cmbx-10x-x-109">ération</span></span>
- L&#8217;assemblée générale adopte les statuts dont le projet lui a été soumis. Cette délibération est
-adoptée à l&#8217;unanimité.
-
-<!--l. 53--><p class="noindent" ><span class="paragraphHead"><a
- id="x1-2000"></a><span
-class="cmbx-10x-x-109">2</span><span
-class="cmbx-7">e</span><span
-class="cmbx-10x-x-109">&#x00A0;d</span><span
-class="cmbx-10x-x-109">élib</span><span
-class="cmbx-10x-x-109">ération</span></span>
- L&#8217;assemblée générale constitutive désigne en qualité de premiers membres du conseil
-d&#8217;administration :
- <ul class="itemize1">
- <li class="itemize">Adrien Luxey
- </li>
- <li class="itemize">Alex Auvolat
- </li>
- <li class="itemize">Maximilien Richer
- </li>
- <li class="itemize">Quentin Dufour
- </li>
- <li class="itemize">Vincent Giraud</li></ul>
-<!--l. 63--><p class="indent" > Conformément aux statuts, cette désignation est faite pour une durée expirant lors de l&#8217;assemblée
-générale qui sera appelée à statuer sur les comptes de l&#8217;exercice clos le 13 janvier 2021. Les membres
-du conseil ainsi désignés acceptent leurs fonctions
-<!--l. 66--><p class="indent" > Nom, prénom et signature du président et du secrétaire de séance
-
-</body></html>
-
-
-
diff --git a/src/administratif/2020-01-13-statuts.css b/src/administratif/2020-01-13-statuts.css
deleted file mode 100644
index 7c8c295..0000000
--- a/src/administratif/2020-01-13-statuts.css
+++ /dev/null
@@ -1,121 +0,0 @@
-
-/* start css.sty */
-.cmr-10x-x-109{}
-.cmssbx-10x-x-207{font-size:188%; font-family: sans-serif; font-weight: bold;}
-.cmr-12x-x-120{font-size:130%;}
-p.noindent { text-indent: 0em }
-td p.noindent { text-indent: 0em; margin-top:0em; }
-p.nopar { text-indent: 0em; }
-p.indent{ text-indent: 1.5em }
-@media print {div.crosslinks {visibility:hidden;}}
-a img { border-top: 0; border-left: 0; border-right: 0; }
-center { margin-top:1em; margin-bottom:1em; }
-td center { margin-top:0em; margin-bottom:0em; }
-.Canvas { position:relative; }
-img.math{vertical-align:middle;}
-li p.indent { text-indent: 0em }
-li p:first-child{ margin-top:0em; }
-li p:last-child, li div:last-child { margin-bottom:0.5em; }
-li p~ul:last-child, li p~ol:last-child{ margin-bottom:0.5em; }
-.enumerate1 {list-style-type:decimal;}
-.enumerate2 {list-style-type:lower-alpha;}
-.enumerate3 {list-style-type:lower-roman;}
-.enumerate4 {list-style-type:upper-alpha;}
-div.newtheorem { margin-bottom: 2em; margin-top: 2em;}
-.obeylines-h,.obeylines-v {white-space: nowrap; }
-div.obeylines-v p { margin-top:0; margin-bottom:0; }
-.overline{ text-decoration:overline; }
-.overline img{ border-top: 1px solid black; }
-td.displaylines {text-align:center; white-space:nowrap;}
-.centerline {text-align:center;}
-.rightline {text-align:right;}
-div.verbatim {font-family: monospace; white-space: nowrap; text-align:left; clear:both; }
-.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
-div.fbox {display:table}
-div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
-div.minipage{width:100%;}
-div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}
-div.center div {text-align: left;}
-div.flushright, div.flushright div.flushright {text-align: right;}
-div.flushright div {text-align: left;}
-div.flushleft {text-align: left;}
-.underline{ text-decoration:underline; }
-.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }
-.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }
-.framebox-c {text-align:center;}
-.framebox-l {text-align:left;}
-.framebox-r {text-align:right;}
-span.thank-mark{ vertical-align: super }
-span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
-div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }
-table.tabular td p{margin-top:0em;}
-table.tabular {margin-left: auto; margin-right: auto;}
-td p:first-child{ margin-top:0em; }
-td p:last-child{ margin-bottom:0em; }
-div.td00{ margin-left:0pt; margin-right:0pt; }
-div.td01{ margin-left:0pt; margin-right:5pt; }
-div.td10{ margin-left:5pt; margin-right:0pt; }
-div.td11{ margin-left:5pt; margin-right:5pt; }
-table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
-td.td00{ padding-left:0pt; padding-right:0pt; }
-td.td01{ padding-left:0pt; padding-right:5pt; }
-td.td10{ padding-left:5pt; padding-right:0pt; }
-td.td11{ padding-left:5pt; padding-right:5pt; }
-table[rules] {border-left:solid black 0.4pt; border-right:solid black 0.4pt; }
-.hline hr, .cline hr{ height : 0px; margin:0px; }
-.hline td, .cline td{ padding: 0; }
-.hline hr, .cline hr{border:none;border-top:1px solid black;}
-.tabbing-right {text-align:right;}
-span.TEX {letter-spacing: -0.125em; }
-span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}
-a span.TEX span.E {text-decoration: none; }
-span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}
-span.LATEX span.TEX{ position:relative; left: -0.4em; }
-div.float, div.figure {margin-left: auto; margin-right: auto;}
-div.float img {text-align:center;}
-div.figure img {text-align:center;}
-.marginpar,.reversemarginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}
-.marginpar p,.reversemarginpar p{margin-top:0.4em; margin-bottom:0.4em;}
-.reversemarginpar{float:left;}
-table.equation {width:100%;}
-.equation td{text-align:center; }
-td.equation { margin-top:1em; margin-bottom:1em; }
-td.equation-label { width:5%; text-align:center; }
-td.eqnarray4 { width:5%; white-space: normal; }
-td.eqnarray2 { width:5%; }
-table.eqnarray-star, table.eqnarray {width:100%;}
-div.eqnarray{text-align:center;}
-div.array {text-align:center;}
-div.pmatrix {text-align:center;}
-table.pmatrix {width:100%;}
-span.pmatrix img{vertical-align:middle;}
-div.pmatrix {text-align:center;}
-table.pmatrix {width:100%;}
-span.bar-css {text-decoration:overline;}
-img.cdots{vertical-align:middle;}
-.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}
-.index-item, .index-subitem, .index-subsubitem {display:block}
-div.caption {text-indent:-2em; margin-left:3em; margin-right:1em; text-align:left;}
-div.caption span.id{font-weight: bold; white-space: nowrap; }
-h1.partHead{text-align: center}
-p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
-p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }
-.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}
-.subparagraphHead, .likesubparagraphHead { font-weight: bold;}
-.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; margin-right:1em; text-align:justify;}
-.verse{white-space:nowrap; margin-left:2em}
-div.maketitle {text-align:center;}
-h2.titleHead{text-align:center;}
-div.maketitle{ margin-bottom: 2em; }
-div.author, div.date {text-align:center;}
-div.thanks{text-align:left; margin-left:10%; font-size:85%; font-style:italic; }
-div.author{white-space: nowrap;}
-.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }
-.abstract p {margin-left:5%; margin-right:5%;}
-div.abstract {width:100%;}
-span.footnote-mark sup.textsuperscript, span.footnote-mark a sup.textsuperscript{ font-size:80%; }
-.frenchb-nbsp{font-size:75%;}
-.frenchb-thinspace{font-size:75%;}
-sup.french{ vertical-align:super; font-size:70%; }
-/* end css.sty */
-
diff --git a/src/administratif/2020-01-13-statuts.html b/src/administratif/2020-01-13-statuts.html
deleted file mode 100644
index b390f8f..0000000
--- a/src/administratif/2020-01-13-statuts.html
+++ /dev/null
@@ -1,136 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
-<html xml:lang="fr" >
-<head><title>Statuts de l&#8217;association Deuxfleurs</title>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<meta name="generator" content="TeX4ht (http://www.tug.org/tex4ht/)">
-<meta name="originator" content="TeX4ht (http://www.tug.org/tex4ht/)">
-<!-- html -->
-<meta name="src" content="2020-01-13-statuts.tex">
-<link rel="stylesheet" type="text/css" href="2020-01-13-statuts.css">
-</head><body
->
- <div class="maketitle">
-
-
-<h2 class="titleHead">Statuts de l&#8217;association Deuxfleurs</h2>
-<div class="author" ></div><br />
-<div class="date" ><span
-class="cmr-12x-x-120">13 janvier 2020</span></div>
- </div>
- <h3 class="sectionHead"><span class="titlemark">Article 1&#x00A0;:&#x00A0; </span> <a
- id="x1-10001"></a>Constitution et dénomination</h3>
-<!--l. 32--><p class="noindent" >Il est fondé entre les adhérents aux présents statuts une association régie par la loi 1901, ayant pour
-titre Deuxfleurs.
-<!--l. 34--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 2&#x00A0;:&#x00A0; </span> <a
- id="x1-20002"></a>Buts</h3>
-<!--l. 35--><p class="noindent" >Cette association a pour but de défendre et promouvoir les libertés individuelles et collectives à
-travers la mise en place d&#8217;infrastuctures numériques libres.
-<!--l. 37--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 3&#x00A0;:&#x00A0; </span> <a
- id="x1-30003"></a>Siège social</h3>
-<!--l. 38--><p class="noindent" >Le siège social est fixé au 10A, Allée de Lanvaux, 35700 Rennes. Il pourra être transféré suite à un
-vote par l&#8217;assemblée générale.
-<!--l. 41--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 4&#x00A0;:&#x00A0; </span> <a
- id="x1-40004"></a>Durée de l&#8217;association</h3>
-<!--l. 42--><p class="noindent" >L&#8217;association perdure tant qu&#8217;elle possède au moins un membre, ou jusqu&#8217;à sa dissolution décidée en
-assemblée générale.
-
-<!--l. 44--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 5&#x00A0;:&#x00A0; </span> <a
- id="x1-50005"></a>Admission et adhésion</h3>
-<!--l. 45--><p class="noindent" >Pour faire partie de l&#8217;association, il faut être coopté par un membre de l&#8217;association, adhérer
-aux présents statuts et s&#8217;acquitter de la cotisation annuelle dont le montant est de 10
-euros.
-<!--l. 47--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 6&#x00A0;:&#x00A0; </span> <a
- id="x1-60006"></a>Composition de l&#8217;association</h3>
-<!--l. 48--><p class="noindent" >L&#8217;association se compose exclusivement de membres admis selon les dispositions de l&#8217;article&#x00A0;<a
-href="#x1-50005">5<!--tex4ht:ref: article:admission --></a> et à
-jour de leur cotisation. Tout membre actif possède une voix lors des votes en assemblée générale. Est
-considéré actif tout membre présent à l&#8217;assemblée générale (physiquement, par visioconférence ou
-par procuration écrite donnée à un autre membre de l&#8217;association).
-<!--l. 52--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 7&#x00A0;:&#x00A0; </span> <a
- id="x1-70007"></a>Perte de la qualité de membre</h3>
-<!--l. 53--><p class="noindent" >La qualité de membre se perd par<span class="frenchb-nbsp">&#x00A0;</span>:
- <ul class="itemize1">
- <li class="itemize">la démission,
- </li>
- <li class="itemize">le non-renouvelement de la cotisation dans un délai de deux mois après le 1er Janvier de
- l&#8217;année courante,
- </li>
- <li class="itemize">le décès,
- </li>
- <li class="itemize">la radiation prononcée aux deux tiers des votes exprimés, lors d&#8217;un vote extraordinaire
- ou de l&#8217;assemblée générale.</li></ul>
-<!--l. 62--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 8&#x00A0;:&#x00A0; </span> <a
- id="x1-80008"></a>L&#8217;assemblée générale</h3>
-<!--l. 63--><p class="noindent" >L&#8217;assemblée générale ordinaire se réunit au moins une fois par an, convoquée par le conseil
-d&#8217;administration. L&#8217;assemblée générale extraordinaire est convoquée par le conseil d&#8217;administration,
-à la demande de celui-ci ou à la demande du quart au moins des membres de l&#8217;association.
-
-<!--l. 66--><p class="indent" > L&#8217;assemblée générale (ordinaire ou extraordinaire) comprend tous les membres de l&#8217;association à
-jour de leur cotisation. Quinze jours au moins avant la date fixée, les membres de l&#8217;association sont
-convoqués via la liste de diffusion de l&#8217;association et l&#8217;ordre du jour est inscrit sur les
-convocations.
-<!--l. 69--><p class="indent" > Le conseil d&#8217;administration anime l&#8217;assemblée générale. L&#8217;assemblée générale, après avoir
-délibéré, se prononce sur le rapport moral et/ou d&#8217;activités. Le conseil d&#8217;administration rend
-compte de l&#8217;exercice financier clos et soumet le bilan de l&#8217;exercice clos à l&#8217;approbation de
-l&#8217;assemblée dans un délai de six mois après la clôture des comptes. L&#8217;assemblée générale
-délibère sur les orientations à venir et se prononce sur le budget prévisionnel de l&#8217;année en
-cours.
-<!--l. 74--><p class="indent" > Elle pourvoit, au scrutin secret, à la nomination ou au renouvellement des membres du conseil
-d&#8217;administration via un scrutin de Condorcet Randomisé. Elle fixe le montant de la cotisation
-annuelle. Les décisions de l&#8217;assemblée sont prises à la majorité des membres présents ou représentés.
-Chaque membre présent ne peut détenir plus d&#8217;une procuration.
-<!--l. 79--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 9&#x00A0;:&#x00A0; </span> <a
- id="x1-90009"></a>Membres mineurs</h3>
-<!--l. 80--><p class="noindent" >Les mineurs peuvent adhérer à l&#8217;association sous réserve d&#8217;un accord tacite ou d&#8217;une autorisation
-écrite de leurs parents ou tuteurs légaux. Ils sont membres à part entière de l&#8217;association. Seuls les
-membres âgés de 16 ans au moins au jour d&#8217;une élection sont autorisés à y voter, notamment au
-cours d&#8217;une assemblée générale. Pour les autres, leur droit de vote est transmis à leur représentant
-légal.
-<!--l. 85--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 10&#x00A0;:&#x00A0; </span> <a
- id="x1-1000010"></a>Le conseil d&#8217;administration</h3>
-<!--l. 86--><p class="noindent" >L&#8217;association est administrée par un conseil d&#8217;administration composé de 3 à 6 membres, élus pour
-1 an dans les conditions fixées à l&#8217;article&#x00A0;<a
-href="#x1-80008">8<!--tex4ht:ref: article:ag --></a>. Tous les membres de l&#8217;association à jour
-de leur cotisation sont éligibles. En cas de vacance de poste, le conseil d&#8217;administration
-peut pourvoir provisoirement au remplacement de ses membres. Ce remplacement est
-obligatoire quand le conseil d&#8217;administration compte moins de 3 membres. Il est procédé à leur
-remplacement définitif à la plus prochaine assemblée générale. Les pouvoirs des membres ainsi
-élus prennent fin à l&#8217;époque où devrait normalement expirer le mandat des membres
-remplacés.
-<!--l. 92--><p class="indent" > Le conseil d&#8217;administration met en &#339;uvre les décisions de l&#8217;assemblée générale, organise et anime
-la vie de l&#8217;association, dans le cadre fixé par les statuts. Chacun de ses membres peut être habilité
-par le conseil à remplir toutes les formalités de déclaration et de publication prescrites par la
-législation et tout autre acte nécessaire au fonctionnement de l&#8217;association et décidé par le
-
-conseil d&#8217;administration. Tous les membres du conseil d&#8217;administration sont responsables
-des engagements contractés par l&#8217;association. Tout contrat ou convention passé entre
-l&#8217;association d&#8217;une part, et un membre du conseil d&#8217;administration, son conjoint ou un
-proche, d&#8217;autre part, est soumis pour autorisation au conseil d&#8217;administration et présenté
-pour information à la plus prochaine assemblée générale. Le conseil d&#8217;administration
-se réunit au moins 4 fois par an et toutes les fois qu&#8217;il est convoqué par le tiers de ses
-membres. La présence de la moitié au moins des membres du conseil est nécessaire pour
-que le conseil d&#8217;administration puisse délibérer valablement. Les décisions sont prises au
-consensus et, à défaut, à la majorité des voix des présents. Le vote par procuration n&#8217;est pas
-autorisé.
-<!--l. 100--><p class="noindent" >
- <h3 class="sectionHead"><span class="titlemark">Article 11&#x00A0;:&#x00A0; </span> <a
- id="x1-1100011"></a>Modification des statuts de l&#8217;association</h3>
-<!--l. 102--><p class="noindent" >Sur demande d&#8217;un tiers des membres actifs, ou sur demande du conseil d&#8217;administration, des
-amendements aux statuts de l&#8217;association peuvent être discutés et soumis au vote lors d&#8217;une
-assemblée générale, selon les modalités de l&#8217;article&#x00A0;<a
-href="#x1-80008">8<!--tex4ht:ref: article:ag --></a>.
-
-</body></html>
-
-
-
diff --git a/src/association.pug b/src/association.pug
deleted file mode 100644
index 134f8d1..0000000
--- a/src/association.pug
+++ /dev/null
@@ -1,42 +0,0 @@
-extends _layout.pug
-
-prepend root
- - title = "l'association"
-
-block content
- .container.spacing
-
- section.spacing
- h2 Notre raison d'être
- p.spacing
- | Aujourd'hui, de grandes entreprises conçoivent des services numériques qui ont pour objectif de <a href="https://fr.wikipedia.org/wiki/%C3%89conomie_de_l%27attention">maximiser le temps</a> que nous passons dessus, de <a href="https://fr.wikipedia.org/wiki/%C3%89conomie_de_la_surveillance">collecter et recouper des données</a> à notre insu pour nous influencer, de <a href="https://www.april.org/le-parlement-europeen-valide-la-generalisation-de-la-censure-automatisee">limiter nos possibilités d'expression</a> au delà du cadre légal et de <a href="https://fr.wikipedia.org/wiki/Embrace,_extend_and_extinguish">créer de nouveaux monopoles</a>. Ces effets nous montrent que la technologie n'est pas neutre et a un réel impact sur nos vies. En choisissant et en hébergeant nos propres outils de communication, sans but lucratif ni hégémonique, nous espérons nous affranchir de ces nuisances et préserver nos libertés.
- p.spacing
- | Pour en savoir plus, rendez-vous sur <a href="https://www.laquadrature.net/">La Quadrature du Net</a> et allez lire le manifeste <a href="https://chatons.org/fr/manifeste">des CHATONS</a>.
-
-
- section.spacing
- h2 Nos objectifs
-
- section.spacing
- h3 Des utilisateurs impliqués
- p.spacing
- | Que ce soit à l'école, par l'expérimentation, via un forum d'échange, lors d'un atelier, via une publicité à la télévision, un tutoriel, lors d'une discussion avec un ami, il y toujours une phase d'apprentissage en informatique. Malheureusement, dans ces conditions, dur de lutter pour des services libres face à la puissance de frappe d'une entreprise et des logiciels ayant une base d'utilisateurs immense. Nous pensons donc qu'une personne souhaitant s'héberger chez un hébergeur indépendant a besoin d'un accompagnement. C'est pourquoi les inscriptions se font par cooptation. La cooptation permet aussi un lien de confiance et ainsi de se prémunir de bon nombres d'attaques que subissent les hébergeurs.
-
- section.spacing
- h3 Une architecture résiliente
- p.spacing
- | Les sites webs, les réseaux sociaux, les emails ne peuvent fonctionner que grâce à des ordinateurs qui restent allumés 24/24h et qui n'attendent que vous. Cependant, ces derniers sont faillibles. Une coupure d'électricité, un disque dur cassé, une mise à jour ratée, un bug dans le logiciel, les raisons ne manquent pas. Heureusement, il est possible de masquer ces pannes avec du logiciel astucieusement conçu. C'est pourquoi vous avez l'impression que Google est toujours disponible, que Dropbox ne perd pas vos données, etc. La gestion de ces pannes, c'est aussi ce qui rend la vie compliquée aux hébergeurs indépendants. Entre incompréhension des utilisateurs quand un service est hors ligne et sueurs froides pour les administrateurs, ça n'a rien de marrant. Et c'est très chronophage. Notre objectif est donc de construire des solutions d'hébergements qui peuvent résister à ces pannes.
-
- section.spacing
- h2 Statuts de l'association
- :markdown-it(linkify)
- Depuis janvier 2020, Deuxfleurs est constitué en association loi 1901.
- Vous trouverez [ici](administratif/2020-01-13-statuts.html) les statuts de l'association.
-
- section.spacing
- h2 Comptes rendus d'AG
- :markdown-it(linkify)
- Les comptes-rendus d'AG sont disponibles aux liens suivants:
-
- - [13 janvier 2020 (AG constitutive)](administratif/2020-01-13-pv-ag.html)
-
diff --git a/src/css/main.css b/src/css/main.css
index 1d572cf..9463fac 100644
--- a/src/css/main.css
+++ b/src/css/main.css
@@ -26,8 +26,8 @@ h2 {
}
p {
- margin-top: 1em;
font-size: 1.2em;
+ margin-top: 1em;
}
ul {
diff --git a/src/documentation.pug b/src/documentation.pug
deleted file mode 100644
index a9a70f0..0000000
--- a/src/documentation.pug
+++ /dev/null
@@ -1,9 +0,0 @@
-extends _layout.pug
-
-prepend root
- - title = "documentation"
-
-block content
- .container.spacing
- h2 Bientôt...
-