Compare commits
21 commits
2022-08-pr
...
main
Author | SHA1 | Date | |
---|---|---|---|
f08c2e5e45 | |||
d5eb7aa119 | |||
c9006b4d3d | |||
1cd2f4d608 | |||
78b68a3cd9 | |||
0364444e6a | |||
8e9ffa9064 | |||
00352e121c | |||
1ec1414679 | |||
b3c8cfb8e6 | |||
64e99f7a00 | |||
ab4e5f2472 | |||
dad198ea29 | |||
8986e5b6b1 | |||
ccf14158a4 | |||
e473ada5b8 | |||
7dcd436b84 | |||
4cbd53b627 | |||
f53edd99a0 | |||
a8a5a40027 | |||
91d10a7eb3 |
73
.drone.yml
|
@ -1,73 +0,0 @@
|
|||
---
|
||||
# see https://docs.drone.io/pipeline/configuration/
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: build
|
||||
|
||||
steps:
|
||||
- name: restore-cache
|
||||
image: meltwater/drone-cache:v1.1.0
|
||||
environment:
|
||||
AWS_ACCESS_KEY_ID:
|
||||
from_secret: cache_aws_access_key_id
|
||||
AWS_SECRET_ACCESS_KEY:
|
||||
from_secret: cache_aws_secret_access_key
|
||||
pull: true
|
||||
settings:
|
||||
restore: true
|
||||
bucket: drone-cache
|
||||
region: garage
|
||||
mount:
|
||||
- 'node_modules'
|
||||
path_style: true
|
||||
endpoint: https://garage.deuxfleurs.fr
|
||||
|
||||
- name: build
|
||||
# cf https://hub.docker.com/_/node?tab=description&page=1&ordering=last_updated
|
||||
image: node:14-buster
|
||||
commands:
|
||||
- npm install
|
||||
- node render.js
|
||||
|
||||
- name: upload
|
||||
image: plugins/s3
|
||||
settings:
|
||||
bucket: deuxfleurs.fr
|
||||
access_key:
|
||||
from_secret: aws_access_key_id
|
||||
secret_key:
|
||||
from_secret: aws_secret_access_key
|
||||
source: static/**/*
|
||||
strip_prefix: static/
|
||||
target: /
|
||||
path_style: true
|
||||
endpoint: https://garage.deuxfleurs.fr
|
||||
region: garage
|
||||
when:
|
||||
branch:
|
||||
- main
|
||||
event:
|
||||
exclude:
|
||||
- pull_request
|
||||
|
||||
- name: rebuild-cache
|
||||
image: meltwater/drone-cache:v1.1.0
|
||||
environment:
|
||||
AWS_ACCESS_KEY_ID:
|
||||
from_secret: cache_aws_access_key_id
|
||||
AWS_SECRET_ACCESS_KEY:
|
||||
from_secret: cache_aws_secret_access_key
|
||||
pull: true
|
||||
settings:
|
||||
rebuild: true
|
||||
bucket: drone-cache
|
||||
region: garage
|
||||
mount:
|
||||
- 'node_modules'
|
||||
path_style: true
|
||||
endpoint: https://garage.deuxfleurs.fr
|
||||
---
|
||||
kind: signature
|
||||
hmac: f1fcc439a2180d4e98224dec1cd2dc10691b58161bfee7739ae700e84f04c905
|
||||
|
||||
...
|
2
.gitignore
vendored
|
@ -1,4 +1,4 @@
|
|||
static/
|
||||
public/
|
||||
node_modules/
|
||||
*.swp
|
||||
.awsclirc
|
||||
|
|
18
DEPLOY.md
|
@ -1,18 +0,0 @@
|
|||
## À réaliser au premier clonage du dépôt
|
||||
|
||||
Commencer par créer un fichier `.awsclirc` avec cette structure :
|
||||
|
||||
```
|
||||
export AWS_ACCESS_KEY_ID='xxxx'
|
||||
export AWS_SECRET_ACCESS_KEY='xxxx'
|
||||
export AWS_DEFAULT_REGION='garage'
|
||||
alias awsdf="aws --endpoint-url https://garage.deuxfleurs.fr"
|
||||
```
|
||||
|
||||
Installer [l'outil en ligne de commande de AWS version 2](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html) qui fournit la commande `aws`.
|
||||
|
||||
Enfin, déployer en exécutant :
|
||||
|
||||
```
|
||||
./deploy
|
||||
```
|
87
README.md
|
@ -1,64 +1,47 @@
|
|||
# site
|
||||
# deuxfleurs.fr - site web
|
||||
|
||||
[![Build Status](https://drone.deuxfleurs.fr/api/badges/Deuxfleurs/site/status.svg?ref=refs/heads/main)](https://drone.deuxfleurs.fr/Deuxfleurs/site)
|
||||
|
||||
Ce dépôt git contient les sources pour le site [deuxfleurs.fr](https://deuxfleurs.fr/).
|
||||
C'est ici que vous pourrez apporter des modifications au site.
|
||||
|
||||
## Comment ajouter du contenu ?
|
||||
|
||||
Prérequis :
|
||||
- Un compte sur cette instance gitea.
|
||||
- Le logiciel git d'installé. [téléchager](https://git-scm.com/downloads).
|
||||
|
||||
Pour commencer, assurez-vous d'être connecté.
|
||||
Ensuite cliquez sur le bouton "Bifurcation" en haut à droite (*fork* en anglais).
|
||||
Finalement, vous pourrez cloner votre dépôt en local :
|
||||
Le site web en ASCII Art de Deuxfleurs
|
||||
|
||||
```
|
||||
git clone https://git.deuxfleurs.fr/<votre nom d'utilisateur>/site.git
|
||||
'\ ; /'
|
||||
·`.;.;.`·
|
||||
·— · · —·
|
||||
·`';.;'`·
|
||||
'/ ; \'
|
||||
.-.
|
||||
.( ; ;
|
||||
.-. (_.():')
|
||||
_( ' ; /(' ; .)
|
||||
( `(·)` ; ``-'
|
||||
',_' `·,'
|
||||
`-`\| +---------------------+
|
||||
. /) | B i e n v e n u e |
|
||||
(\|/ +---------------------+
|
||||
| | |
|
||||
.,.,\/,}\|//,,, ;/,,\/ | , \,,,;/. ;.;, |,,,,;,;..
|
||||
|
||||
|
||||
Fabriquons un internet convivial ⤵
|
||||
```
|
||||
|
||||
Pour ajouter du contenu, vous pouvez tout simplement ajouter un fichier dans le dossier `src`.
|
||||
Par exemple, le fichier `src/Association/Statuts.md` se retrouve à l'adresse `https://deuxfleurs.fr/Association/Statuts.html`.
|
||||
## Structure
|
||||
|
||||
Deux formats de fichiers différents sont supportés pour l'instant :
|
||||
- `static` - Ce qui doit être envoyé sur le bucket
|
||||
- `r` - Pour faire un système de redirection minimaliste. Exemple: `deuxfleurs.fr/r/rdv23`
|
||||
- `.well-known` - Utilisé par Matrix, Thunderbird, chatons.org et d'autres pour la configuration automatique de pas mal de services
|
||||
- `img` le dossier qui contient les images
|
||||
- `res` - Ce qui peut être utile pour modifier le site web
|
||||
- `calendar.txt` - Tous les calendriers ASCII jusqu'à Décembre 2024
|
||||
|
||||
- `.md` pour Markdown. [documentation](https://fr.wikipedia.org/wiki/Markdown). Rapide à apprendre, il est très pratique pour rajouter du contenu sans se poser la question de l'apparence.
|
||||
- `.pug` pour Pug. [documentation](https://pugjs.org). PugJS est une syntaxe différente pour représenter du HTML. Elle offre donc toute la souplesse de ce dernier et s'adapte plus à des mises en page complexe.
|
||||
## Générateur de site statique ?
|
||||
|
||||
Si vous ne savez pas par où commencer, choisissez markdown !
|
||||
N'hésitez pas à vous inspirer des fichiers existants.
|
||||
Pas maintenant.
|
||||
|
||||
Une fois vos modifications terminées, vous pouvez commit et push :
|
||||
## Déployer
|
||||
|
||||
⚠️ NE FAITES PAS `--delete` car il est fort probable que des trucs qui doivent rester dans le bucket
|
||||
ne sont pas copiés ici
|
||||
|
||||
```
|
||||
git add src/Association/MonFichier.md
|
||||
git commit -a
|
||||
git push
|
||||
aws s3 sync static/ s3://deuxfleurs.fr
|
||||
```
|
||||
|
||||
Ensuite, vous pouvez créer une demande d'ajout (*pull request* ou *merge request* en anglais) depuis cette adresse (ou en cliquant sur l'onglet éponyme) : https://git.deuxfleurs.fr/Deuxfleurs/site/pulls
|
||||
|
||||
## Comment prévisualiser mes modifications ?
|
||||
|
||||
Prérequis :
|
||||
- nodejs et npm d'installé. [télécharger](https://nodejs.org/en/download/)
|
||||
|
||||
Vous pourriez vouloir vérifier que vos modifications rendent bien avant de faire votre demande d'ajout.
|
||||
Pour cela, nous utilisons un script de notre cru nommé `render.js`. Il convertit le dossier `src/` vers un site web contenu dans le dossier `static/` et peut, optionnellement, servir de serveur web.
|
||||
|
||||
La façon la plus simple de prévisualiser vos modifications est donc de :
|
||||
|
||||
```bash
|
||||
npm install # installer les dépendances
|
||||
LISTEN=3000 node render.js # effectuer le rendu puis démarrer un serveur web sur le port 3000
|
||||
```
|
||||
|
||||
Votre aperçu est alors disponible à cette URL : http://127.0.0.1:3000
|
||||
|
||||
À chaque modification, vous pouvez arrêter la dernière commande (CTRL+C) et la relancer pour forcer le rendu.
|
||||
|
||||
## Comment le site est mis à jour depuis ce dépôt ?
|
||||
|
||||
*Nous sommes actuellement dans une phase de transition sur ce point. Veuillez contacter un·e des maintainers. Si vous êtes maintainer ou curieux·se, vous pouvez vous réferrer au fichier DEPLOY.md*
|
||||
|
|
7
deploy
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
shopt -s expand_aliases
|
||||
source .awsclirc
|
||||
npm install
|
||||
node render.js
|
||||
awsdf s3 sync --size-only static s3://deuxfleurs.fr
|
909
package-lock.json
generated
|
@ -1,909 +0,0 @@
|
|||
{
|
||||
"name": "site",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "site",
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"clean-css": "^5.1.2",
|
||||
"jstransformer-markdown-it": "^2.1.0",
|
||||
"marked": "^0.8.2",
|
||||
"pug": "^3.0.2",
|
||||
"source-map": "^0.7.3",
|
||||
"uglify-js": "^3.13.3"
|
||||
},
|
||||
"devDependencies": {}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.12.11",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
|
||||
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.13.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
|
||||
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==",
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.13.14",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": "^7.12.11",
|
||||
"lodash": "^4.17.19",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/argparse": {
|
||||
"version": "1.0.10",
|
||||
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
|
||||
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
|
||||
"dependencies": {
|
||||
"sprintf-js": "~1.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/asap": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
|
||||
"integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
|
||||
},
|
||||
"node_modules/assert-never": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
|
||||
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
|
||||
},
|
||||
"node_modules/babel-walk": {
|
||||
"version": "3.0.0-canary-5",
|
||||
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
|
||||
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.9.6"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/call-bind": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
|
||||
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.1",
|
||||
"get-intrinsic": "^1.0.2"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/character-parser": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
|
||||
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
|
||||
"dependencies": {
|
||||
"is-regex": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/clean-css": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz",
|
||||
"integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==",
|
||||
"dependencies": {
|
||||
"source-map": "~0.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/clean-css/node_modules/source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/constantinople": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
|
||||
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.6.0",
|
||||
"@babel/types": "^7.6.1"
|
||||
}
|
||||
},
|
||||
"node_modules/doctypes": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
|
||||
"integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
|
||||
},
|
||||
"node_modules/entities": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
|
||||
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
|
||||
},
|
||||
"node_modules/function-bind": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||
},
|
||||
"node_modules/get-intrinsic": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
|
||||
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.1",
|
||||
"has": "^1.0.3",
|
||||
"has-symbols": "^1.0.1"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/has": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||
"dependencies": {
|
||||
"function-bind": "^1.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/has-symbols": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
|
||||
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-core-module": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
|
||||
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
|
||||
"dependencies": {
|
||||
"has": "^1.0.3"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/is-expression": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
|
||||
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
|
||||
"dependencies": {
|
||||
"acorn": "^7.1.1",
|
||||
"object-assign": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/is-promise": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
|
||||
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
|
||||
},
|
||||
"node_modules/is-regex": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
|
||||
"integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.2",
|
||||
"has-symbols": "^1.0.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 0.4"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/js-stringify": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
|
||||
"integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
|
||||
},
|
||||
"node_modules/jstransformer": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
|
||||
"integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
|
||||
"dependencies": {
|
||||
"is-promise": "^2.0.0",
|
||||
"promise": "^7.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/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=",
|
||||
"dependencies": {
|
||||
"markdown-it": "^8.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=7"
|
||||
}
|
||||
},
|
||||
"node_modules/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==",
|
||||
"dependencies": {
|
||||
"uc.micro": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/lodash": {
|
||||
"version": "4.17.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"node_modules/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==",
|
||||
"dependencies": {
|
||||
"argparse": "^1.0.7",
|
||||
"entities": "~1.1.1",
|
||||
"linkify-it": "^2.0.0",
|
||||
"mdurl": "^1.0.1",
|
||||
"uc.micro": "^1.0.5"
|
||||
},
|
||||
"bin": {
|
||||
"markdown-it": "bin/markdown-it.js"
|
||||
}
|
||||
},
|
||||
"node_modules/marked": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz",
|
||||
"integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==",
|
||||
"bin": {
|
||||
"marked": "bin/marked"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.16.2"
|
||||
}
|
||||
},
|
||||
"node_modules/mdurl": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
|
||||
"integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/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=="
|
||||
},
|
||||
"node_modules/promise": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
|
||||
"integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
|
||||
"dependencies": {
|
||||
"asap": "~2.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/pug": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
|
||||
"integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
|
||||
"dependencies": {
|
||||
"pug-code-gen": "^3.0.2",
|
||||
"pug-filters": "^4.0.0",
|
||||
"pug-lexer": "^5.0.1",
|
||||
"pug-linker": "^4.0.0",
|
||||
"pug-load": "^3.0.0",
|
||||
"pug-parser": "^6.0.0",
|
||||
"pug-runtime": "^3.0.1",
|
||||
"pug-strip-comments": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-attrs": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
|
||||
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
|
||||
"dependencies": {
|
||||
"constantinople": "^4.0.1",
|
||||
"js-stringify": "^1.0.2",
|
||||
"pug-runtime": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-code-gen": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
|
||||
"integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
|
||||
"dependencies": {
|
||||
"constantinople": "^4.0.1",
|
||||
"doctypes": "^1.1.0",
|
||||
"js-stringify": "^1.0.2",
|
||||
"pug-attrs": "^3.0.0",
|
||||
"pug-error": "^2.0.0",
|
||||
"pug-runtime": "^3.0.0",
|
||||
"void-elements": "^3.1.0",
|
||||
"with": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-error": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
|
||||
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
|
||||
},
|
||||
"node_modules/pug-filters": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
|
||||
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
|
||||
"dependencies": {
|
||||
"constantinople": "^4.0.1",
|
||||
"jstransformer": "1.0.0",
|
||||
"pug-error": "^2.0.0",
|
||||
"pug-walk": "^2.0.0",
|
||||
"resolve": "^1.15.1"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-lexer": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
|
||||
"integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
|
||||
"dependencies": {
|
||||
"character-parser": "^2.2.0",
|
||||
"is-expression": "^4.0.0",
|
||||
"pug-error": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-linker": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
|
||||
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
|
||||
"dependencies": {
|
||||
"pug-error": "^2.0.0",
|
||||
"pug-walk": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-load": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
|
||||
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
|
||||
"dependencies": {
|
||||
"object-assign": "^4.1.1",
|
||||
"pug-walk": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-parser": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
|
||||
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
|
||||
"dependencies": {
|
||||
"pug-error": "^2.0.0",
|
||||
"token-stream": "1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-runtime": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
|
||||
"integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
|
||||
},
|
||||
"node_modules/pug-strip-comments": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
|
||||
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
|
||||
"dependencies": {
|
||||
"pug-error": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pug-walk": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
|
||||
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
|
||||
},
|
||||
"node_modules/resolve": {
|
||||
"version": "1.20.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
|
||||
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
|
||||
"dependencies": {
|
||||
"is-core-module": "^2.2.0",
|
||||
"path-parse": "^1.0.6"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
|
||||
"engines": {
|
||||
"node": ">= 8"
|
||||
}
|
||||
},
|
||||
"node_modules/sprintf-js": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
|
||||
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
|
||||
},
|
||||
"node_modules/to-fast-properties": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/token-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
|
||||
},
|
||||
"node_modules/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=="
|
||||
},
|
||||
"node_modules/uglify-js": {
|
||||
"version": "3.13.3",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.3.tgz",
|
||||
"integrity": "sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig==",
|
||||
"bin": {
|
||||
"uglifyjs": "bin/uglifyjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/void-elements": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
|
||||
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/with": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
|
||||
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
|
||||
"dependencies": {
|
||||
"@babel/parser": "^7.9.6",
|
||||
"@babel/types": "^7.9.6",
|
||||
"assert-never": "^1.2.1",
|
||||
"babel-walk": "3.0.0-canary-5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.12.11",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
|
||||
"integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.13.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz",
|
||||
"integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ=="
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.13.14",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz",
|
||||
"integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==",
|
||||
"requires": {
|
||||
"@babel/helper-validator-identifier": "^7.12.11",
|
||||
"lodash": "^4.17.19",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"acorn": {
|
||||
"version": "7.4.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
|
||||
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
|
||||
},
|
||||
"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="
|
||||
},
|
||||
"assert-never": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/assert-never/-/assert-never-1.2.1.tgz",
|
||||
"integrity": "sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw=="
|
||||
},
|
||||
"babel-walk": {
|
||||
"version": "3.0.0-canary-5",
|
||||
"resolved": "https://registry.npmjs.org/babel-walk/-/babel-walk-3.0.0-canary-5.tgz",
|
||||
"integrity": "sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.9.6"
|
||||
}
|
||||
},
|
||||
"call-bind": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
|
||||
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1",
|
||||
"get-intrinsic": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"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": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.1.2.tgz",
|
||||
"integrity": "sha512-QcaGg9OuMo+0Ds933yLOY+gHPWbxhxqF0HDexmToPf8pczvmvZGYzd+QqWp9/mkucAOKViI+dSFOqoZIvXbeBw==",
|
||||
"requires": {
|
||||
"source-map": "~0.6.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"constantinople": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/constantinople/-/constantinople-4.0.1.tgz",
|
||||
"integrity": "sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==",
|
||||
"requires": {
|
||||
"@babel/parser": "^7.6.0",
|
||||
"@babel/types": "^7.6.1"
|
||||
}
|
||||
},
|
||||
"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=="
|
||||
},
|
||||
"function-bind": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||
},
|
||||
"get-intrinsic": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
|
||||
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
|
||||
"requires": {
|
||||
"function-bind": "^1.1.1",
|
||||
"has": "^1.0.3",
|
||||
"has-symbols": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"has-symbols": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
|
||||
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
|
||||
},
|
||||
"is-core-module": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
|
||||
"integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
|
||||
"requires": {
|
||||
"has": "^1.0.3"
|
||||
}
|
||||
},
|
||||
"is-expression": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
|
||||
"integrity": "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==",
|
||||
"requires": {
|
||||
"acorn": "^7.1.1",
|
||||
"object-assign": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"is-promise": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz",
|
||||
"integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ=="
|
||||
},
|
||||
"is-regex": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.2.tgz",
|
||||
"integrity": "sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg==",
|
||||
"requires": {
|
||||
"call-bind": "^1.0.2",
|
||||
"has-symbols": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"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"
|
||||
}
|
||||
},
|
||||
"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.21",
|
||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
|
||||
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
|
||||
},
|
||||
"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.2",
|
||||
"resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz",
|
||||
"integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw=="
|
||||
},
|
||||
"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": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pug/-/pug-3.0.2.tgz",
|
||||
"integrity": "sha512-bp0I/hiK1D1vChHh6EfDxtndHji55XP/ZJKwsRqrz6lRia6ZC2OZbdAymlxdVFwd1L70ebrVJw4/eZ79skrIaw==",
|
||||
"requires": {
|
||||
"pug-code-gen": "^3.0.2",
|
||||
"pug-filters": "^4.0.0",
|
||||
"pug-lexer": "^5.0.1",
|
||||
"pug-linker": "^4.0.0",
|
||||
"pug-load": "^3.0.0",
|
||||
"pug-parser": "^6.0.0",
|
||||
"pug-runtime": "^3.0.1",
|
||||
"pug-strip-comments": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"pug-attrs": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-3.0.0.tgz",
|
||||
"integrity": "sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==",
|
||||
"requires": {
|
||||
"constantinople": "^4.0.1",
|
||||
"js-stringify": "^1.0.2",
|
||||
"pug-runtime": "^3.0.0"
|
||||
}
|
||||
},
|
||||
"pug-code-gen": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-3.0.2.tgz",
|
||||
"integrity": "sha512-nJMhW16MbiGRiyR4miDTQMRWDgKplnHyeLvioEJYbk1RsPI3FuA3saEP8uwnTb2nTJEKBU90NFVWJBk4OU5qyg==",
|
||||
"requires": {
|
||||
"constantinople": "^4.0.1",
|
||||
"doctypes": "^1.1.0",
|
||||
"js-stringify": "^1.0.2",
|
||||
"pug-attrs": "^3.0.0",
|
||||
"pug-error": "^2.0.0",
|
||||
"pug-runtime": "^3.0.0",
|
||||
"void-elements": "^3.1.0",
|
||||
"with": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"pug-error": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-error/-/pug-error-2.0.0.tgz",
|
||||
"integrity": "sha512-sjiUsi9M4RAGHktC1drQfCr5C5eriu24Lfbt4s+7SykztEOwVZtbFk1RRq0tzLxcMxMYTBR+zMQaG07J/btayQ=="
|
||||
},
|
||||
"pug-filters": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-4.0.0.tgz",
|
||||
"integrity": "sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==",
|
||||
"requires": {
|
||||
"constantinople": "^4.0.1",
|
||||
"jstransformer": "1.0.0",
|
||||
"pug-error": "^2.0.0",
|
||||
"pug-walk": "^2.0.0",
|
||||
"resolve": "^1.15.1"
|
||||
}
|
||||
},
|
||||
"pug-lexer": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-5.0.1.tgz",
|
||||
"integrity": "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==",
|
||||
"requires": {
|
||||
"character-parser": "^2.2.0",
|
||||
"is-expression": "^4.0.0",
|
||||
"pug-error": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"pug-linker": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-4.0.0.tgz",
|
||||
"integrity": "sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==",
|
||||
"requires": {
|
||||
"pug-error": "^2.0.0",
|
||||
"pug-walk": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"pug-load": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-load/-/pug-load-3.0.0.tgz",
|
||||
"integrity": "sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==",
|
||||
"requires": {
|
||||
"object-assign": "^4.1.1",
|
||||
"pug-walk": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"pug-parser": {
|
||||
"version": "6.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-6.0.0.tgz",
|
||||
"integrity": "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==",
|
||||
"requires": {
|
||||
"pug-error": "^2.0.0",
|
||||
"token-stream": "1.0.0"
|
||||
}
|
||||
},
|
||||
"pug-runtime": {
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-3.0.1.tgz",
|
||||
"integrity": "sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg=="
|
||||
},
|
||||
"pug-strip-comments": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-2.0.0.tgz",
|
||||
"integrity": "sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==",
|
||||
"requires": {
|
||||
"pug-error": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"pug-walk": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-2.0.0.tgz",
|
||||
"integrity": "sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ=="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.20.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
|
||||
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
|
||||
"requires": {
|
||||
"is-core-module": "^2.2.0",
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
|
||||
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
|
||||
},
|
||||
"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": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
|
||||
},
|
||||
"token-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
|
||||
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
|
||||
},
|
||||
"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": "3.13.3",
|
||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.3.tgz",
|
||||
"integrity": "sha512-otIc7O9LyxpUcQoXzj2hL4LPWKklO6LJWoJUzNa8A17Xgi4fOeDC8FBDOLHnC/Slo1CQgsZMcM6as0M76BZaig=="
|
||||
},
|
||||
"void-elements": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
|
||||
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
|
||||
},
|
||||
"with": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/with/-/with-7.0.2.tgz",
|
||||
"integrity": "sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==",
|
||||
"requires": {
|
||||
"@babel/parser": "^7.9.6",
|
||||
"@babel/types": "^7.9.6",
|
||||
"assert-never": "^1.2.1",
|
||||
"babel-walk": "3.0.0-canary-5"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
23
package.json
|
@ -1,23 +0,0 @@
|
|||
{
|
||||
"name": "site",
|
||||
"version": "1.0.0",
|
||||
"description": "deuxfleurs.fr",
|
||||
"main": "render.js",
|
||||
"dependencies": {
|
||||
"clean-css": "^5.1.2",
|
||||
"jstransformer-markdown-it": "^2.1.0",
|
||||
"marked": "^0.8.2",
|
||||
"pug": "^3.0.2",
|
||||
"source-map": "^0.7.3",
|
||||
"uglify-js": "^3.13.3"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git@git.deuxfleurs.fr:Deuxfleurs/site.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
264
render.js
|
@ -1,264 +0,0 @@
|
|||
'use strict'
|
||||
|
||||
const pug = require('pug')
|
||||
const marked = require('marked')
|
||||
const fs = require('fs').promises
|
||||
const http = require('http')
|
||||
|
||||
const unit = (...args) => null
|
||||
const log = process.env.VERBOSE ? console.log : unit
|
||||
|
||||
const walk = async (path, filename) => {
|
||||
log('[walk]', path)
|
||||
const type = await fs.lstat(path)
|
||||
if (type.isFile()) return {type: 'file', path: path, name: filename || path, tags:[]}
|
||||
if (!type.isDirectory()) return null
|
||||
|
||||
const files = await fs.readdir(path)
|
||||
return {
|
||||
type: 'folder',
|
||||
path: path,
|
||||
name: filename || path,
|
||||
tags: [],
|
||||
children: await Promise.all(files.map(file => walk(`${path}/${file}`, file)))
|
||||
}
|
||||
}
|
||||
|
||||
const ext_static = ['.css', '.js', '.otf', '.png', '.svg', '.txt', '.png', '.jpg', '.webp', 'client', 'server', '.pdf', '.ttf', '.xml', '.properties']
|
||||
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 is_templated = f => is_md(f) /* || is_rst(f) */
|
||||
const is_document = f => is_templated(f) || is_pug(f)
|
||||
|
||||
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_templated(tree.name)) {
|
||||
tree.template = markdown_template
|
||||
log('[propagate_md_layout]', tree ? tree.path : null, markdown_template ? markdown_template.path : null)
|
||||
} 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 = tree => {
|
||||
if (tree.type != 'folder') return tree
|
||||
|
||||
const lh = e => log('[elagate]', e.path) && false
|
||||
tree.children = tree.children.filter(e => !(e.name[0] == '_') || lh(e))
|
||||
tree.children.forEach(elagate)
|
||||
return tree
|
||||
}
|
||||
|
||||
const tag_document = tree => {
|
||||
if (tree.type == 'file' && is_document(tree.name) && tree.name[0] != '@') {
|
||||
tree.tags.push('document_leaf', 'document')
|
||||
log('[tag_document]', tree.path, 'document_leaf')
|
||||
} else if (tree.type == 'folder') {
|
||||
tree.children.forEach(tag_document)
|
||||
if(tree.children.some(c => c.tags.includes('document'))) {
|
||||
tree.tags.push('document_branch', 'document')
|
||||
log('[tag_document]', tree.path, 'document_branch')
|
||||
}
|
||||
}
|
||||
return tree
|
||||
}
|
||||
|
||||
const reference_index = indexes => tree => {
|
||||
if (tree.type != 'folder') return tree;
|
||||
|
||||
const index = tree.children.find(e => indexes.includes(e.name))
|
||||
if (index) {
|
||||
tree.index = index
|
||||
tree.tags.push('has_index')
|
||||
log('[reference_index]', tree.path, index.name)
|
||||
index.tags.push('is_index')
|
||||
}
|
||||
tree.children.forEach(reference_index(indexes))
|
||||
|
||||
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 = tree.type == 'folder' ? without_prefix + '/' : without_prefix
|
||||
log('[propagate_nice_name]', [...tree.nice_path, tree.nice_name].join('|'))
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
log('[prepare_copy]',tree.generate.src,'->',tree.generate.out)
|
||||
} 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.old_url = tree.url
|
||||
tree.url = rm_prefix(old_prefix)(rm_suffix(...ext_pug)(tree.path)) + '.html'
|
||||
tree.generate = {
|
||||
cmd: 'pug',
|
||||
src: tree.path,
|
||||
out: new_prefix + tree.url
|
||||
}
|
||||
log('[prepare_pug]',tree.generate.src,'->',tree.generate.out)
|
||||
}
|
||||
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.old_url = tree.url
|
||||
tree.url = rm_prefix(old_prefix)(rm_suffix(...ext_md)(tree.path)) + '.html'
|
||||
tree.generate = {
|
||||
cmd: 'pug',
|
||||
src: tree.template.path,
|
||||
markdown: tree.path,
|
||||
out: new_prefix + tree.url
|
||||
}
|
||||
log('[prepare_md]',tree.generate.markdown,'+',tree.generate.src,'->',tree.generate.out)
|
||||
}
|
||||
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)
|
||||
}
|
||||
log('[prepare_folder]',tree.generate.out)
|
||||
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 })
|
||||
log('[do_folder]',tree.generate.out)
|
||||
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)
|
||||
log('[do_copy]',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,
|
||||
root: root,
|
||||
prt: prt,
|
||||
element: tree
|
||||
})
|
||||
await fs.writeFile(tree.generate.out, html)
|
||||
log('[do_pug]',tree.generate.out)
|
||||
} else if (tree.type == 'folder')
|
||||
await Promise.all(tree.children.map(do_pug(tree,root)))
|
||||
|
||||
return tree
|
||||
}
|
||||
|
||||
const rm_tree = t => {
|
||||
if (t == null) return
|
||||
if (t.type == 'file') {
|
||||
log('[do_clean] file', t.path)
|
||||
return fs.unlink(t.path)
|
||||
}
|
||||
|
||||
return Promise
|
||||
.all(t.children.map(rm_tree))
|
||||
.then(_ => {
|
||||
log('[do_clean] path', t.path)
|
||||
return fs.rmdir(t.path)
|
||||
})
|
||||
}
|
||||
|
||||
const do_clean = path => tree =>
|
||||
walk(path)
|
||||
.catch(_ => null)
|
||||
.then(rm_tree)
|
||||
.then(_ => tree)
|
||||
|
||||
const listen = async t =>
|
||||
process.env.LISTEN &&
|
||||
http.createServer(async (req,res) => {
|
||||
const file = fs.readFile(__dirname + '/static/' + decodeURI(req.url))
|
||||
.catch(_ => fs.readFile(__dirname + '/static/' + decodeURI(req.url) + '/index.html'))
|
||||
|
||||
try {
|
||||
const f = await file
|
||||
res.writeHead(200)
|
||||
res.end(f)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
res.writeHead(404)
|
||||
res.end("404 not found")
|
||||
}
|
||||
}).listen(process.env.LISTEN);
|
||||
|
||||
const conf = { src: './src', dest: './static'}
|
||||
walk(conf.src)
|
||||
.then(propagate_md_layout)
|
||||
.then(elagate)
|
||||
.then(tag_document)
|
||||
.then(reference_index(['index.md', 'index.pug']))
|
||||
.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(v => {log(v) ; return v})
|
||||
.then(do_clean(conf.dest))
|
||||
.then(do_folder)
|
||||
.then(do_copy)
|
||||
.then(do_pug())
|
||||
.then(listen)
|
||||
.catch(console.error)
|
417
res/calendars.txt
Normal file
|
@ -0,0 +1,417 @@
|
|||
.——————————————————————————————————————.
|
||||
| CALENDRIER OCTOBRE 2022 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— |
|
||||
| | 01 | 02 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 31 | |
|
||||
| ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER NOVEMBRE 2022 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 07 | 08 | 09 | 10 | 11 | 12 | 13 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 21 | 22 | 23 | 24 | 25 | 26 | 27 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER DÉCEMBRE 2022 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 26 | 27 | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER JANVIER 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— |
|
||||
| | 01 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 30 | 31 | |
|
||||
| ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER FÉVRIER 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 27 | 28 | |
|
||||
| ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER MARS 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 27 | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER AVRIL 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— |
|
||||
| | 01 | 02 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER MAI 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER JUIN 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER JUILLET 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— |
|
||||
| | 01 | 02 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 31 | |
|
||||
| ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER AOÛT 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 07 | 08 | 09 | 10 | 11 | 12 | 13 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 21 | 22 | 23 | 24 | 25 | 26 | 27 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER SEPTEMBRE 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 25 | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER OCTOBRE 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— |
|
||||
| | 01 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 30 | 31 | |
|
||||
| ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER NOVEMBRE 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER DÉCEMBRE 2023 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER JANVIER 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER FÉVRIER 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 26 | 27 | 28 | 29 | |
|
||||
| ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER MARS 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER AVRIL 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 29 | 30 | |
|
||||
| ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER MAI 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 06 | 07 | 08 | 09 | 10 | 11 | 12 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 13 | 14 | 15 | 16 | 17 | 18 | 19 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 20 | 21 | 22 | 23 | 24 | 25 | 26 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 27 | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER JUIN 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— |
|
||||
| | 01 | 02 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 03 | 04 | 05 | 06 | 07 | 08 | 09 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 10 | 11 | 12 | 13 | 14 | 15 | 16 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 17 | 18 | 19 | 20 | 21 | 22 | 23 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 24 | 25 | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER JUILLET 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 08 | 09 | 10 | 11 | 12 | 13 | 14 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER AOÛT 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 05 | 06 | 07 | 08 | 09 | 10 | 11 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 19 | 20 | 21 | 22 | 23 | 24 | 25 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 26 | 27 | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER SEPTEMBRE 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— |
|
||||
| | 01 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 30 | |
|
||||
| ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER OCTOBRE 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | 04 | 05 | 06 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 07 | 08 | 09 | 10 | 11 | 12 | 13 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 21 | 22 | 23 | 24 | 25 | 26 | 27 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 28 | 29 | 30 | 31 | |
|
||||
| ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER NOVEMBRE 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— ———— ———— |
|
||||
| | 01 | 02 | 03 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 04 | 05 | 06 | 07 | 08 | 09 | 10 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 11 | 12 | 13 | 14 | 15 | 16 | 17 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 18 | 19 | 20 | 21 | 22 | 23 | 24 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 25 | 26 | 27 | 28 | 29 | 30 | |
|
||||
| ———— ———— ———— ———— ———— ———— |
|
||||
|______________________________________|
|
||||
.——————————————————————————————————————.
|
||||
| CALENDRIER DÉCEMBRE 2024 |
|
||||
|——————————————————————————————————————|
|
||||
| ———— |
|
||||
| | 01 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 02 | 03 | 04 | 05 | 06 | 07 | 08 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 09 | 10 | 11 | 12 | 13 | 14 | 15 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 16 | 17 | 18 | 19 | 20 | 21 | 22 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 23 | 24 | 25 | 26 | 27 | 28 | 29 | |
|
||||
| ———— ———— ———— ———— ———— ———— ———— |
|
||||
| | 30 | 31 | |
|
||||
| ———— ———— |
|
||||
|______________________________________|
|
|
@ -1 +0,0 @@
|
|||
{ "m.server": "deuxfleurs.fr:443" }
|
13
src/@404.pug
|
@ -1,13 +0,0 @@
|
|||
extends _layout.pug
|
||||
|
||||
prepend root
|
||||
- title = "deuxfleurs"
|
||||
|
||||
block content
|
||||
section
|
||||
h1 404 - Page non trouvée
|
||||
|
||||
p La page que vous cherchez n'existe pas sur ce site web.
|
||||
|
||||
p Si vous pensez que c'est une erreur, les informations pour nous contacter sont disponibles sur notre page d'accueil.
|
||||
|
144
src/CGU.pug
|
@ -1,144 +0,0 @@
|
|||
extends _layout.pug
|
||||
|
||||
prepend root
|
||||
- title = "CGU"
|
||||
|
||||
block content
|
||||
section
|
||||
h1 Conditions Générales d'Utilisation
|
||||
|
||||
p 10/03/2022
|
||||
|
||||
p En utilisant les services de Deuxfleurs, vous acceptez d’être lié par les conditions suivantes.
|
||||
|
||||
h2 Évolution des conditions générales d'utilisation
|
||||
|
||||
p Deuxfleurs se réserve le droit de mettre à jour et modifier ces conditions. Dans ce cas, Deuxfleurs informe les personnes concernées par mail si elle le peut ou par un affichage sur le site.
|
||||
|
||||
h2 Accès aux services
|
||||
|
||||
p
|
||||
| Certains services sont en accès libre, d'autre requièrent un compte. Vous pouvez obtenir un compte par cooptation d'un membre existant ou en faisant une demande directement par email à l'association.
|
||||
| Certains services sont soumis à l'approbation préalable de Deuxfleurs selon les ressources disponibles. La liste des services et leurs conditions d'accès peut-être obtenue en contactant l'association.
|
||||
|
||||
h2 Fonctionnement
|
||||
|
||||
h3 Délais de mise en service
|
||||
|
||||
p Deuxfleurs propose ses services grâce à des bénévoles, de ce fait Deuxfleurs ne s’engage sur aucun délai de mise en service. Nous essayons toutefois de faire de notre mieux pour les fournir dans les 7 jours.
|
||||
|
||||
h3 Transmission sécurisée d’identifiants
|
||||
|
||||
p
|
||||
| Deuxfleurs ne vous demandera jamais de communiquer vos mots ou phrases de passe.
|
||||
| Lorsque Deuxfleurs doit vous transmettre un identifiant, Deuxfleurs le fera via email ou en physique.
|
||||
|
||||
h3 Intervention en cas de panne
|
||||
|
||||
p En cas de panne constatée et si aucun message n’atteste sur la page de statut que Deuxfleurs est en train de corriger le dysfonctionnement, vous devez faire un signalement via Matrix.
|
||||
|
||||
p Deuxfleurs propose l’ensemble de ses services grâce à des bénévoles qui feront ce qu’ils et elles peuvent pour résoudre les problèmes techniques qui pourraient subvenir.
|
||||
|
||||
|
||||
h3 Intégrité des données
|
||||
|
||||
p Deuxfleurs réalise des sauvegardes quotidiennes afin d’éviter des pertes de données. Les sauvegardes sont conservées selon cette politique suivante : 1/jour jusqu’à 1 mois, 1/semaine jusqu’à 3 mois, 1/mois jusqu’à 1 an. Les sauvegardes sont stockées de manière chiffrée avec un mot de passe par l'association à Suresnes.
|
||||
|
||||
p Deuxfleurs ne peut être tenu responsable de l’intégrité des données et des conséquences liées à une perte de données.
|
||||
|
||||
p Deuxfleurs recommande aux usager·es d’avoir une sauvegarde locale afin d’assurer l’intégrité de leurs données.
|
||||
|
||||
h3 Responsabilité de Deuxfleurs
|
||||
|
||||
p Deuxfleurs est assujetti à une obligation de moyens. En cas de défaillance, Deuxfleurs ne peut être tenu pour responsable des dommages indirects tels que pertes d’exploitation, préjudices commerciaux, perte de Clientèle, de chiffre d’affaires, de bénéfices ou d’économies prévus, ou de tout autre préjudice indirect.
|
||||
|
||||
h3 Mésusage des services
|
||||
|
||||
p Vous devez respecter les lois et réglementations en vigueur lors de l’usage des services proposés que ce soit en matière de respect de la vie privée, d’envoi de mails en grande quantité, de propriété intellectuelle, de propos discriminatoires, d’appel à la haine, de harcèlement, d’atteinte aux libertés fondamentales de personnes, etc.
|
||||
|
||||
p En cas d’usage prohibé, Deuxfleurs peut se trouver dans l’obligation de déclencher la suspension totale ou partielle du service, le retrait de contenu, ou toute autre mesure que les lois et réglementations lui imposent. Vous devez respecter les autres utilisateurs en faisant preuve de civisme et de politesse. Deuxfleurs se réserve le droit de supprimer tout contenu paraissant non pertinent ou contrevenant à ces principes, selon son seul jugement.
|
||||
|
||||
p Par ailleurs, si un ou une utilisatrice abuse du service, par exemple en monopolisant des ressources machines partagées, son contenu ou son accès pourra être supprimé, si nécessaire sans avertissement ni négociation. Deuxfleurs reste seul juge de cette notion « d’abus » dans le but de fournir le meilleur service possible à l’ensemble des usagers et usagères.
|
||||
|
||||
h3 Devenir des services
|
||||
|
||||
p Deuxfleurs peut par ailleurs choisir (de résilier des abonnements ou) d’arrêter des services si Deuxfleurs estime ne plus être en mesure de fournir lesdits services. Si Deuxfleurs en a la possibilité, elle fera de son mieux pour laisser un délai suffisant pour permettre à tout le monde de migrer sereinement.
|
||||
|
||||
h3 Support et conseil
|
||||
|
||||
p Vous pouvez nous signaler des souhaits sur la création de futur service, mais sachez que nous ne pourrons pas créer de nouveaux services en moins de 6 mois. Deuxfleurs pourra toutefois vous rediriger vers des chatons à même de répondre à vos demandes.
|
||||
|
||||
p En dehors de dysfonctionnement technique, Deuxfleurs propose également de vous aider dans la réalisation de votre projet avec les services de Deuxfleurs selon l'envie et le temps disponible de ses membres. Deuxfleurs se réserve le droit de facturer le temps de support et de conseil pour des projets importants après avoir prévenu les utilisateurs en amont.
|
||||
|
||||
h3 Résiliation d’un compte
|
||||
|
||||
p Si vous souhaitez résilier un compte, vous devez le signaler à Deuxfleurs.
|
||||
|
||||
h2 Nos engagements
|
||||
|
||||
p
|
||||
| Deuxfleurs n’exploitera vos données personnelles que dans le cadre de ces 5 finalités:
|
||||
ul
|
||||
li fournir le service pour lesquels vous avez transmis vos données
|
||||
li produire d‘éventuelles statistiques anonymisées et agrégées
|
||||
li vous prévenir d’un changement important sur le service (panne, notification d’intrusion et de vol de données, changement d’interface, date d’arrêt du service...)
|
||||
li obtenir votre avis sur les services et l’action de l’association
|
||||
li vous inviter à participer à un évènement de Deuxfleurs
|
||||
|
||||
p Deuxfleurs ne transmettra ni ne revendra vos données personnelles (votre vie privée nous tient - vraiment - à cœur). Votre contenu vous appartient tout autant, toutefois, nous vous encourageons à le publier sous licence libre si c’est pertinent.
|
||||
|
||||
p
|
||||
| Une modification du paragraphe précédent, contrairement au reste de la présente charte, ne peut se faire simplement par une simple notification. Si une telle modification devait survenir, elle :
|
||||
ul
|
||||
li Ne serait pas rétroactive
|
||||
li Demandera un accord explicite de votre part pour continuer à utiliser les services fournis par Deuxfleurs
|
||||
li Provoquera une révocation préalable à la modification auprès de tous les soutiens de Deuxfleurs ayant à cœur les problématiques de respect de la vie privée.
|
||||
|
||||
|
||||
h3 Charte CHATONS
|
||||
|
||||
p Deuxfleurs s’engage à respecter la charte du Collectif des Hébergeurs Alternatifs, Transparents, Ouverts, Neutres et Solidaires dans le cadre de son activité d’hébergeur et de fourniture de services en ligne
|
||||
|
||||
p Deuxfleurs est candidat à l’intégration au sein de ce collectif.
|
||||
|
||||
p Plus d’information sur la charte C.H.A.T.O.N.S. :
|
||||
a(href="https://chatons.org/fr/charte") chatons.org/fr/charte
|
||||
|
||||
|
||||
h3 Localisation des données
|
||||
|
||||
p
|
||||
| Vos données sont localisées en France et en Belgique, sur les serveurs de nos membres. Un détail complet de l'infrastructure et de l'emplacement des données par service est disponible sur notre page
|
||||
a(href="https://wiki.deuxfleurs.fr/Technique/Infra") Infrastructure
|
||||
| .
|
||||
|
||||
h3 Devenir des données
|
||||
|
||||
p Une fois le compte clôturé, Deuxfleurs peut procéder à la suppression des données.
|
||||
|
||||
p Certains services en libre accès permettent de configurer la péremption des données, d’autres les conservent de façon permanentes, mais vous pouvez demander leur retrait si vous pouvez prouver que vous en êtes l’auteur⋅ice.
|
||||
|
||||
h3 Exercice de vos droits
|
||||
|
||||
p
|
||||
| Conformément à l’article 34 de la loi « Informatique et Libertés », vous pouvez exercer les droits suivant en envoyant un mail à ca
|
||||
img.simple(height="15", src="img/arobase.png")
|
||||
| deuxfleurs.fr :
|
||||
ul
|
||||
li droits d’accès, de rectification, d’effacement et d’opposition
|
||||
li droit à la limitation du traitement
|
||||
li droit à la portabilité des données
|
||||
li droit de ne pas faire l’objet d’une décision individuelle automatisée
|
||||
|
||||
h3 RGPD
|
||||
|
||||
p Vous et Deuxfleurs s’engagent à respecter la réglementation en vigueur applicable au traitement de données à caractère personnel et, en particulier, le règlement (UE) 2016/679 du Parlement européen et du Conseil du 27 avril 2016 applicable à compter du 25 mai 2018, dite RGPD.
|
||||
|
||||
h2 Litige et juridiction compétente
|
||||
|
||||
p Le droit applicable aux présentes est le droit français. En cas de différent, les parties recherchent une solution amiable. Si la démarche échoue, le litige sera tranché par le Tribunal de Grande Instance de Rennes.
|
||||
|
||||
p Le fait que l’usager ou Deuxfleurs ne se prévale pas à un moment donné de l’une des présentes conditions générales et/ou tolère un manquement par l’autre partie ne peut être interprété comme valant renonciation par l’usager ou Deuxfleurs à se prévaloir ultérieurement de ces conditions.
|
||||
|
||||
p La nullité d’une des clauses de ces conditions en application d’une loi, d’une réglementation ou d’une décision de justice n’implique pas la nullité de l’ensemble des autres clauses. Par ailleurs l’esprit général de la clause sera à conserver en accord avec le droit applicable.
|
||||
|
|
@ -1,130 +0,0 @@
|
|||
extends _layout.pug
|
||||
|
||||
prepend root
|
||||
- title = "Gestion des risques"
|
||||
|
||||
block content
|
||||
section
|
||||
h1 Gestion des risques
|
||||
|
||||
p
|
||||
| Un risque se définit par la combinaison d'un danger, c'est à dire un évènement redouté, et sa probabilité d'occurence.
|
||||
| La gestion des risques consiste à minimiser les risques en les évaluant et en mettant en place des solutions pour réduire leur impact.
|
||||
|
||||
h2 🧰 Risques matériels
|
||||
|
||||
h3 Panne de composants informatiques
|
||||
|
||||
p
|
||||
b Définition du risque
|
||||
| : Un serveur est composé d'un ensemble de pièces avec une durée de vie limitée. La panne d'une de ces pièces cause une interruption de service et possiblement une perte de données (comme dans le cas d'un disque dur par exemple). La probabilité de ces pannes est importante car certains composants ont une durée de vie limité, comme les disques durs, et de plus nous utilisons du matériel reconditionné qui a donc déjà été utilisé.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous avons à disposition des pièces de rechange pour pouvoir réparer rapidement nos serveurs. De plus, nous avons en permanence plusieurs machines en production de sorte que lorsque l'une d'elle tombe en panne, les services qu'elle gérait sont automatiquement basculés sur les autres machines fonctionnelles. Les données sont répliquées sur 3 disques durs différents, de sorte que si un disque dur tombe en panne, cette dernière est toujours disponible sur 2 autres disques.
|
||||
|
||||
h3 Bug logiciel
|
||||
|
||||
p
|
||||
b Définition du risque
|
||||
| : Un bug logiciel peut rendre un service indisponible voire impliquer une perte de données. Cette indisponibilité et cette perte de donnée, contrairement à une panne matériel, peut se propager à l'ensemble de nos serveurs.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Les données, en plus d'être répliquées automatiquement, sont périodiquement sauvegardées via un logiciel indépendant sur une période d'au moins 2 mois sur un site distant (Suresnes), de sorte que le logiciel qui fournisse le service n'ait pas accès aux données de sauvegardes et ne puisse donc pas les effacer. Les services quant à eux sont définis déclarativement, dans chaque modification est archivée, de sorte qu'il est possible de revenir sur une version antérieure du service qui soit stable.
|
||||
|
||||
h3 Panne du réseau électrique ou internet
|
||||
|
||||
p
|
||||
b Définition du risque
|
||||
| : Nous faisons appel à des prestataires externe pour l'électricité (eg. EDF) et la connexion Internet (eg. Free). Lors de travaux dans la rue, de tension sur le réseau (eg. froid ou confinement), ou simplement d'erreur de gestion, ces réseaux peuvent être coupés localement ou au niveau national. En résulte une indisponibilité des services pendant la coupure.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Notre infrastructure est répartie sur des zones éloignées géographiquement (aujourd'hui Rennes et Orsay), de sorte qu'une panne locale ne nécessitera que de migrer les services d'une zone à l'autre. Pour le cas d'une panne au niveau national, nous acceptons ce risque : il est très faible et, la plupart du temps, le service est rétabli en quelques heures.
|
||||
|
||||
h3 Panne des autres prestataires et tiers-parties
|
||||
|
||||
p
|
||||
b Définition du risque
|
||||
| : Deuxfleurs fait appel à un certains nombre de prestataires et tiers parties pour fournir ses services : bureau d'enregistrement DNS (Gandi), Hébergeur DNS (Gandi), certificats X.509 (Let's Encrypt), système d'exploitation (NixOS, Debian), logiciels (Docker Hub, Github, etc.). La panne ou le blocage par une de ces tiers-parties impacteraient les services de Deuxfleurs.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous essayons de limiter le nombre de prestataires que nous utilisons et évitons de verrouiller fortement nos choix technologiques vis à vis d'un fournisseur particulier.
|
||||
| En dehors de ces points, nous acceptons ces risques.
|
||||
|
||||
h2 😵 Risques humains
|
||||
|
||||
h3 Erreur d'administration
|
||||
|
||||
p
|
||||
b Définition du risque
|
||||
| : Une erreur d'administration des services peut aboutir à une interruption de services et à une perte de données sur l'ensemble de nos serveurs. Elle peut également générer beaucoup de stress pour la personne en charge de l'administration.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Les données, en plus d'être répliquées automatiquement, sont périodiquement sauvegardées via un logiciel indépendant sur une période d'au moins 2 mois sur un site distant (Suresnes), de sorte que le logiciel qui fournisse le service n'ait pas accès aux données de sauvegardes et ne puisse donc pas les effacer. Les services quant à eux sont définis déclarativement, dans chaque modification est archivée, de sorte qu'il est possible de revenir sur une version antérieure du service qui soit stable. En cas d'erreur, la personne en charge de l'administration doit demander un accompagnement ou un relai pour limiter les risques d'aggravement de la situation et ne pas avoir à supporter cette situation stressante seule.
|
||||
|
||||
h3 Absence d'astreinte
|
||||
p
|
||||
b Définition du risque
|
||||
| : Que ce soit dans les datacenters au niveau matériel, ou dans les services informatiques, au niveau logiciel, de nombreuses organisations mettent en place des astreintes.
|
||||
| Autrement dit, une ou plusieurs personnes identifiées doivent se rendre disponible sur des périodes données pour pouvoir intervenenir rapidement sur les serveurs.
|
||||
| Dans le cas de Deuxfleurs, une astreinte empêcherait une personne de quitter son domicile pour des vacances ou même rendre visite à sa famille !
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous faisons en sorte d'avoir des serveurs chez des membres différents et d'avoir plusieurs personnes en mesure de réaliser une même opération de maintenance.
|
||||
| Si un problème devait arriver pendant l'absence de la personne concernée, un autre membre devrait pouvoir prendre le relai dans les heures ou les jours qui viennent, par exemple en migrant les services chez lui ou en le réparant à distance.
|
||||
|
||||
|
||||
h3 Perte d'expertise
|
||||
p
|
||||
b Définition du risque
|
||||
| : L'infrastructure que nous avons déployée demande des connaissances avancées en informatique détenues par une fraction des membres de l'association. Si cette fraction venait à quitter l'association, la maintenance de ses services pourrait ne plus être réalisée par les membres restants, mettant en péril sa pérennité.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous essayons d'avoir toujours au moins deux personnes en mesure de réaliser une tâche. Nous essayons de documenter et standardiser notre infrastructure.
|
||||
|
||||
h3 Risques juridiques
|
||||
p
|
||||
b Définition du risque
|
||||
| : Deuxfleurs pourrait enfreindre la loi et voir sa pérennité engagée en cas de procès.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous faisons une veille juridique concernant les hébergeurs. Nous mitigeons aussi ce risque via la co-optation qui permet de contrôler notre croissance et les personnes qui nous rejoignent.
|
||||
|
||||
h2 👿 Malveillance
|
||||
|
||||
h3 Attaque informatique
|
||||
p
|
||||
b Définition du risque
|
||||
| : Une attaque informatique, venant d'un·e administrateur·ice ou d'une personne extérieure, peut aboutir à l'indisponibilité de nos services, à une perte de données, mais aussi à la fuite de ces dernières.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Pour se protéger d'un·e administrateur·ice malveillant·e, le groupe d'administrateur·ices existant ne recrute que de nouvelles personnes sur cooptation et après avoir jugé cette personne de confiance. Nous prévoyions également de chiffrer de plus en plus de données côté client, de sorte qu'une personne en charge de l'administration ne soit pas en mesure de lire le contenu stocké sur les serveurs. Pour se protéger d'une personne extérieure, nous maintenons notre système à jour et avons entamé une démarche de défense en profondeur.
|
||||
|
||||
|
||||
h3 Vol du matériel
|
||||
|
||||
p
|
||||
b Définition du risque
|
||||
| : Une personne entrant par effraction chez un de nos membres pourrait voler les ordinateurs. Cet évènement peut impacter la disponibilité de nos services, l'intégrité de nos données, mais aussi la confidentialité de ces dernières.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous acceptons ce risque pour le moment. Le chiffrement côté client, pour les services le supportant, permet de protéger la confidentialité des données. Nous prévoyions à terme de chiffrer les disques durs à froid en plus.
|
||||
|
||||
|
||||
h3 Abus des services
|
||||
p
|
||||
b Définition du risque
|
||||
| : Une personne ayant des accès au service, où se les aillant fait voler, peut opérer un déni de service sur notre infrastructure, ou alors nuire à la réputation de notre service sur un réseau fédéré (eg. spam via email). Cela entraine une indisponibilité des services et/ou une dégradation plus ou moins durable de la qualité de ces derniers.
|
||||
|
||||
p
|
||||
b Mesure mise en place
|
||||
| : Nous mitigeons actuellement ce risque via la cooptation, où nous faisons confiance aux nouveaux membres et les invitons à bien gérer leurs identifiants.
|
|
@ -1,96 +0,0 @@
|
|||
extends _layout.pug
|
||||
|
||||
prepend root
|
||||
- title = "Mentions légales"
|
||||
|
||||
block content
|
||||
section
|
||||
h1 Mentions légales
|
||||
|
||||
h2 Éditeur et hébergeur
|
||||
|
||||
|
||||
p
|
||||
b Deuxfleurs
|
||||
br
|
||||
| Deuxfleurs est l'éditeur et l'hébergeur de l'ensemble de ses services et contenus à l'exception de sa
|
||||
a(href="https://git.deuxfleurs.fr")  forge git
|
||||
br
|
||||
| Association loi 1901 déclarée en préfecture d'Ille-et-Vilaine le 29 janvier 2020.
|
||||
|
||||
p
|
||||
| Numéro RNA : W353020804
|
||||
br
|
||||
| Numéro SIRET : 89961256800019
|
||||
|
||||
p
|
||||
| Siège social : Association Deuxfleurs
|
||||
br
|
||||
| 10A Allée de Lanvaux
|
||||
br
|
||||
| 35700 RENNES
|
||||
br
|
||||
| FRANCE
|
||||
|
||||
p
|
||||
b OVH
|
||||
br
|
||||
| OVH est uniquement en charge de l'hébergement de la
|
||||
a(href="https://git.deuxfleurs.fr")  forge git.
|
||||
br
|
||||
| SASU Société par actions simplifiée à associé unique.
|
||||
|
||||
p Numéro SIRET : 42476141900045
|
||||
|
||||
p
|
||||
| Siège social : OVH
|
||||
br
|
||||
| 2 RUE KELLERMANN
|
||||
br
|
||||
| 59100 ROUBAIX
|
||||
br
|
||||
| FRANCE
|
||||
|
||||
h3 Direction de la publication
|
||||
|
||||
p
|
||||
| Quentin Dufour
|
||||
br
|
||||
| Adrien Luxey
|
||||
|
||||
h2 Informatique et libertés
|
||||
|
||||
h3 Informations personnelles collectées
|
||||
|
||||
p En France, les données personnelles sont notamment protégées par la loi n° 78-17 du 6 janvier 1978, la loi n° 2004-801 du 6 août 2004, l’article L. 226-13 du Code pénal et la Directive Européenne du 24 octobre 1995.
|
||||
|
||||
p En tout état de cause Deuxfleurs ne collecte des informations personnelles relatives à l’utilisateur (nom, adresse électronique, coordonnées téléphoniques) que pour le besoin des services proposés par les sites du réseau Deuxfleurs. L’utilisateur fournit ces informations en toute connaissance de cause, notamment lorsqu’il procède par lui-même à leur saisie. Il est alors précisé à l’utilisateur des sites du réseau Deuxfleurs le caractère obligatoire ou non des informations qu’il serait amené à fournir.
|
||||
|
||||
h3 Rectification des informations nominatives collectées
|
||||
|
||||
p
|
||||
| Conformément aux dispositions de l’article 34 de la loi n° 48-87 du 6 janvier 1978, l’utilisateur dispose d’un droit de modification des données nominatives collectées le concernant. Pour ce faire, l’utilisateur envoie à Deuxfleurs :
|
||||
ul
|
||||
li un courrier électronique à ca (arobase) deuxfleurs.fr
|
||||
li un courrier à l’adresse du siège de l’association (indiquée ci-dessus) en indiquant son nom ou sa raison sociale, ses coordonnées physiques et/ou électroniques, ainsi que le cas échéant la référence dont il disposerait en tant qu’utilisateur du site Deuxfleurs.
|
||||
|
||||
p La modification interviendra dans des délais raisonnables à compter de la réception de la demande de l’utilisateur.
|
||||
|
||||
|
||||
h2 Limitation de responsabilité
|
||||
|
||||
p Ce site comporte des informations mises à disposition par des communautés ou sociétés externes ou des liens hypertextes vers d’autres sites qui n’ont pas été développés par Deuxfleurs. Le contenu mis à disposition sur le site est fourni à titre informatif. L’existence d’un lien de ce site vers un autre site ne constitue pas une validation de ce site ou de son contenu. Il appartient à l’internaute d’utiliser ces informations avec discernement et esprit critique. La responsabilité de Deuxfleurs ne saurait être engagée du fait des informations, opinions et recommandations formulées par des tiers.
|
||||
|
||||
p Deuxfleurs ne pourra être tenue responsable des dommages directs et indirects causés au matériel de l’utilisateur, lors de l’accès au site, et résultant soit de l’utilisation d’un matériel ne répondant pas aux spécifications techniques requises, soit de l’apparition d’un bug ou d’une incompatibilité.
|
||||
|
||||
p Deuxfleurs ne pourra également être tenue responsable des dommages indirects (tels par exemple qu’une perte de marché ou perte d’une chance) consécutifs à l’utilisation du site.
|
||||
|
||||
p Des espaces interactifs (comme la solution de messagerie instantanée Matrix) sont à la disposition des utilisateurs sur le site Deuxfleurs. Deuxfleurs se réserve le droit de supprimer, sans mise en demeure préalable, tout contenu déposé dans cet espace qui contreviendrait à la législation applicable en France, en particulier aux dispositions relatives à la protection des données. Le cas échéant, Deuxfleurs se réserve également la possibilité de mettre en cause la responsabilité civile et/ou pénale de l’utilisateur, notamment en cas de message à caractère raciste, injurieux, diffamant, ou pornographique, quel que soit le support utilisé (texte, photographie…).
|
||||
|
||||
h2 Limitations contractuelles sur les données techniques
|
||||
|
||||
p Deuxfleurs ne pourra être tenue responsable de dommages matériels liés à l’utilisation du site.
|
||||
|
||||
h2 Propriété intellectuelle
|
||||
|
||||
p Les contenus sont publiés sous la responsabilité des utilisateurs.
|
|
@ -1,41 +0,0 @@
|
|||
extends _layout.pug
|
||||
|
||||
prepend root
|
||||
- title = "Sources"
|
||||
|
||||
block content
|
||||
section
|
||||
h1 Accéder aux sources des logiciels utilisés
|
||||
|
||||
p Deuxfleurs utilise exclusivement des logiciels libres dans le cadre de son activité. Vous pouvez retrouver ici la liste des sources des logiciels utilisés.
|
||||
:markdown-it
|
||||
- [Debian](https://packages.debian.org/)
|
||||
- [NixOS](https://github.com/NixOS)
|
||||
- [Nomad](https://github.com/hashicorp/nomad)
|
||||
- [Consul](https://github.com/hashicorp/consul/)
|
||||
- [Garage](https://git.deuxfleurs.fr/Deuxfleurs/garage)
|
||||
- [Tricot](https://git.deuxfleurs.fr/Deuxfleurs/tricot)
|
||||
- [Bottin](https://git.deuxfleurs.fr/Deuxfleurs/bottin/)
|
||||
- [Guichet](https://git.deuxfleurs.fr/Deuxfleurs/guichet/)
|
||||
- [Diplonat](https://git.deuxfleurs.fr/Deuxfleurs/diplonat/)
|
||||
- [Stolon](https://github.com/sorintlab/stolon)
|
||||
- [Docker](https://github.com/moby/moby)
|
||||
- [Ansible](https://github.com/ansible/ansible)
|
||||
- [Drone](https://github.com/harness/drone)
|
||||
- [Restic](https://github.com/restic/restic)
|
||||
- [Cryptpad](https://github.com/xwiki-labs/cryptpad)
|
||||
- [Sogo](https://github.com/inverse-inc/sogo)
|
||||
- [alps](git.deuxfleurs.fr/Deuxfleurs/alps)
|
||||
- [Synapse](https://github.com/matrix-org/synapse)
|
||||
- [Element](https://github.com/vector-im/element-web)
|
||||
- [Jitsi](https://github.com/jitsi)
|
||||
- [Plume](https://github.com/Plume-org/Plume)
|
||||
- [age](https://github.com/FiloSottile/age)
|
||||
- [Minio](https://github.com/minio/minio)
|
||||
- [Proxmox](https://git.proxmox.com/)
|
||||
- [Grafana](https://github.com/grafana/grafana)
|
||||
- [Prometheus](https://github.com/prometheus/prometheus)
|
||||
- [Infra (legacy)](https://git.deuxfleurs.fr/Deuxfleurs/infrastructure)
|
||||
- [Infra (next)](git.deuxfleurs.fr/Deuxfleurs/nixcfg)
|
||||
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
include _mixin/menu.pug
|
||||
|
||||
block root
|
||||
doctype html
|
||||
html(lang="fr")
|
||||
head
|
||||
meta(charset='utf-8')
|
||||
title 💮💮 deuxfleurs - #{title}
|
||||
link(rel="stylesheet", href="/css/main.css")
|
||||
meta(name="viewport", content="width=device-width, initial-scale=1.0")
|
||||
body
|
||||
aside
|
||||
header
|
||||
a#menu(href="#").mobile_inline
|
||||
svg(viewBox="0 0 100 80", width="40", height="40")
|
||||
rect(width="100", height="20")
|
||||
rect(y="30" width="100" height="20")
|
||||
rect(y="60" width="100" height="20")
|
||||
|
||||
h1
|
||||
a(href="/") deuxfleurs
|
||||
nav.computer_block
|
||||
section.center
|
||||
img(alt="emoji fleur", src="/img/flower.svg", width="40")
|
||||
|
|
||||
img(alt="emoji fleur", src="/img/flower.svg", width="40")
|
||||
ul
|
||||
li
|
||||
a(href="https://plume.deuxfleurs.fr/timeline/1") Actualités
|
||||
li
|
||||
a(href="https://man.deuxfleurs.fr") Wiki
|
||||
li
|
||||
a(href="https://guichet.deuxfleurs.fr") Mon compte
|
||||
hr
|
||||
+menu(root, element)
|
||||
|
||||
main
|
||||
block content
|
||||
|
||||
script.
|
||||
(_ => {
|
||||
const hamburger = document.getElementById('menu')
|
||||
hamburger.onclick = _ => {
|
||||
const nav = document.querySelector('body > aside > header > nav')
|
||||
console.log(nav.style.display)
|
||||
nav.style.display = nav.style.display != 'block' ? 'block' : 'none'
|
||||
}
|
||||
})()
|
|
@ -1,10 +0,0 @@
|
|||
extends ./_layout.pug
|
||||
|
||||
prepend root
|
||||
- if (element.tags.includes('is_index'))
|
||||
- title = element.nice_path[element.nice_path.length - 1]
|
||||
- else
|
||||
- title = element.nice_name
|
||||
|
||||
block content
|
||||
!= markdown
|
|
@ -1,14 +0,0 @@
|
|||
mixin menu(o, element)
|
||||
ul
|
||||
each val in o.children
|
||||
- if (val.type == 'folder' && val.tags.includes('document'))
|
||||
li
|
||||
- if (val.tags.includes('has_index'))
|
||||
a(href=val.url, class=val.index.url == element.url ? 'selected' : null)= val.nice_name
|
||||
- else
|
||||
span= val.nice_name
|
||||
- if (element.url.includes(val.url))
|
||||
+menu(val, element)
|
||||
- else if (val.type == 'file' && val.tags.includes('document') && !val.tags.includes('is_index'))
|
||||
li
|
||||
a(href=val.url, class=val.url == element.url ? 'selected' : null)= val.nice_name
|
|
@ -1,82 +0,0 @@
|
|||
/* some reset */
|
||||
html, body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
height: 100%;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
/* fonts */
|
||||
@font-face {
|
||||
font-family: 'IM Fell English';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(../fonts/IMFellEnglish-Italic.ttf) format('truetype');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'IM Fell English';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: url(../fonts/IMFellEnglish-Regular.ttf) format('truetype');
|
||||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
|
||||
}
|
||||
|
||||
html {
|
||||
background-color: #fbfcf8;
|
||||
}
|
||||
|
||||
body {
|
||||
max-width: 900px;
|
||||
padding: 1em;
|
||||
margin: auto;
|
||||
font-family: 'IM Fell English', Times, Serif;
|
||||
color: #5c544a;
|
||||
}
|
||||
|
||||
.hero {
|
||||
background-image: url("../img/illus.jpg");
|
||||
transform: rotate(-2deg);
|
||||
height: 530px;
|
||||
background-size: cover;
|
||||
background-position: 50% 0%;
|
||||
border-radius: 10px;
|
||||
margin: -1.8em -1em 3em -1em;
|
||||
}
|
||||
|
||||
.hero img {
|
||||
position: absolute;
|
||||
top: -14px;
|
||||
left: 25px;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
header {
|
||||
padding: 1em 0em 2em 0em;
|
||||
}
|
||||
|
||||
article {
|
||||
background-color: #f4eccd;
|
||||
padding: 1em;
|
||||
border-radius: 10px;
|
||||
}
|
||||
|
||||
.brand {
|
||||
font-size: 2em;
|
||||
float: left;
|
||||
}
|
||||
|
||||
nav {
|
||||
float: right;
|
||||
}
|
||||
|
||||
nav li {
|
||||
padding: 0.5em;
|
||||
display: inline;
|
||||
}
|
Before Width: | Height: | Size: 550 KiB |
Before Width: | Height: | Size: 26 KiB |
|
@ -1,39 +0,0 @@
|
|||
doctype html
|
||||
html
|
||||
head
|
||||
meta(charset="utf-8")
|
||||
title df #{title}
|
||||
link(rel="stylesheet", href="css/main.css")
|
||||
meta(name="viewport", content="width=device-width, initial-scale=1.0")
|
||||
body
|
||||
header
|
||||
.brand Deuxfleurs
|
||||
nav
|
||||
ul
|
||||
li L'association
|
||||
li Nos services
|
||||
li Documentation
|
||||
li
|
||||
a(href="https://guichet.deuxfleurs.fr") Mon compte
|
||||
br(style="clear:both")
|
||||
|
||||
main
|
||||
article
|
||||
.hero
|
||||
img(src="img/paper-clip.png")
|
||||
h1 Cher·e internaute, un autre internet est possible
|
||||
p
|
||||
| Arrêtez-vous cinq minutes. Prenez le temps de l'imaginer avec moi.
|
||||
| Imaginez pouvoir accéder à l'information sans avoir à se demander si c'est une publicité ou non ?
|
||||
| Imaginez que vos communications avec vos proches ne soient pas espionnées pour prédire votre prochain malus d'assurance ?
|
||||
| Imaginez un lieux où vos amis verrez le contenu que vous publiez et non un obscure contenu viral ?
|
||||
// Peut être rajouter des petits dessins genre gribouillage carnet.
|
||||
|
||||
h2 Des cabanes pour se protéger du sombre nuage
|
||||
p Blabla
|
||||
|
||||
h2 Rejoignez-nous
|
||||
|
||||
footer
|
||||
p Un footer
|
||||
|
323
src/css/main.css
|
@ -1,323 +0,0 @@
|
|||
/*
|
||||
* FONTS
|
||||
*/
|
||||
|
||||
@font-face {
|
||||
font-family: "Heroes";
|
||||
src: url('../fonts/texgyreheros-regular.otf') format('truetype');
|
||||
}
|
||||
|
||||
/*
|
||||
* RESET CSS
|
||||
*/
|
||||
|
||||
* {
|
||||
font-family: Heroes;
|
||||
font-size: 1em;
|
||||
/* We use browser's default */
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
height: 100%
|
||||
}
|
||||
|
||||
body {
|
||||
display: flex;
|
||||
max-width: 1200px;
|
||||
flex-direction: row;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
/*
|
||||
* RESPONSIVE
|
||||
*/
|
||||
.mobile_block,
|
||||
.mobile_inline {
|
||||
display: none
|
||||
}
|
||||
|
||||
@media screen and (max-width: 800px) {
|
||||
body {
|
||||
flex-direction: column
|
||||
}
|
||||
|
||||
.computer_block {
|
||||
display: none
|
||||
}
|
||||
|
||||
.mobile_block {
|
||||
display: block
|
||||
}
|
||||
|
||||
.mobile_inline {
|
||||
display: inline
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* CORE TEMPLATE
|
||||
*/
|
||||
|
||||
/* Header + Menu */
|
||||
body>aside>header {
|
||||
color: white;
|
||||
background: rgb(12, 144, 110);
|
||||
background: linear-gradient(0deg, rgb(21, 65, 73) 0%, rgb(55, 141, 100) 50%, rgb(12, 144, 110) 100%);
|
||||
padding: 1.5rem;
|
||||
margin: 0.8rem;
|
||||
border-radius: 0.5rem;
|
||||
box-shadow: 0px 0px 30px rgba(31, 38, 103, 0.2);
|
||||
}
|
||||
|
||||
body>aside>header>a>svg {
|
||||
fill: white;
|
||||
display: inline;
|
||||
vertical-align: sub;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
body>aside>header>h1 {
|
||||
display: inline
|
||||
}
|
||||
|
||||
body>aside>header a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
body>aside>header>nav ul {
|
||||
list-style-type: none;
|
||||
padding-left: 1em;
|
||||
}
|
||||
|
||||
body>aside>header>nav>ul {
|
||||
padding-left: 0px
|
||||
}
|
||||
|
||||
body>aside>header>nav a:hover {
|
||||
text-decoration: underline
|
||||
}
|
||||
|
||||
body>aside>header>nav .selected {
|
||||
font-weight: bold
|
||||
}
|
||||
|
||||
body>aside>header>nav .selected::before {
|
||||
content: "» "
|
||||
}
|
||||
|
||||
body>main {
|
||||
padding: 1.5rem;
|
||||
max-width: 1200px;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* TEXT CORE (think markdown)
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2.5rem
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 2.0rem
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 1.75rem
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 1.50rem
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 1.25rem
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 1.10rem
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6 {
|
||||
margin-bottom: 1rem
|
||||
}
|
||||
|
||||
section,
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
table,
|
||||
pre {
|
||||
margin-bottom: 1rem
|
||||
}
|
||||
|
||||
ul,
|
||||
ol {
|
||||
padding-left: 1.5em
|
||||
}
|
||||
|
||||
a {
|
||||
color: #08634c;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #fafafa
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
border: 1px solid #ddd;
|
||||
padding: 0.3rem 0.5rem;
|
||||
}
|
||||
|
||||
pre {
|
||||
background-color: #1e1e1e;
|
||||
padding: 1rem;
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: Monospace;
|
||||
background-color: #1e1e1e;
|
||||
color: #fff;
|
||||
padding: 0.25rem 0.4rem;
|
||||
}
|
||||
|
||||
img {
|
||||
border-radius: 0.5rem;
|
||||
box-shadow: 0px 0px 30px rgba(31, 38, 103, 0.2);
|
||||
margin: 0.5rem;
|
||||
}
|
||||
|
||||
img.simple {
|
||||
border-radius: 0px;
|
||||
box-shadow: none;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
strong {
|
||||
background-color: rgb(12, 144, 110);
|
||||
color: #fff;
|
||||
padding: 0.20rem 0.4rem;
|
||||
}
|
||||
|
||||
/*
|
||||
* UTILS
|
||||
*/
|
||||
|
||||
/* float */
|
||||
.left {
|
||||
float: left
|
||||
}
|
||||
|
||||
.right {
|
||||
float: right
|
||||
}
|
||||
|
||||
section::after,
|
||||
p::after {
|
||||
clear: both;
|
||||
display: block;
|
||||
content: "";
|
||||
}
|
||||
|
||||
/* center */
|
||||
.center {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/*
|
||||
* ELEMENTS
|
||||
*/
|
||||
|
||||
input {
|
||||
border: 0.1em black solid;
|
||||
width: 50%;
|
||||
min-width: 300px;
|
||||
font-size: 1.6em;
|
||||
border: 0.1em black solid;
|
||||
padding: 0.3em;
|
||||
}
|
||||
|
||||
.button {
|
||||
padding: 0.3em;
|
||||
background-color: #519c60;
|
||||
font-size: 1.6em;
|
||||
border: 0.1em solid #519c60;
|
||||
color: white;
|
||||
margin: 0em 0em 0em 1em;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* service button */
|
||||
|
||||
.service-box {
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 0.5rem;
|
||||
width: 250px;
|
||||
text-align: center;
|
||||
margin: 1em 1em 0em 0em;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.service-box:hover {
|
||||
background-color: #000;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.callout {
|
||||
font-size: 1.2rem;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
margin: 2rem 0;
|
||||
padding: 1rem;
|
||||
border: 1px solid rgba(10, 10, 10, 0.25);
|
||||
border-radius: .2rem;
|
||||
background-color: #cbf0e6;
|
||||
}
|
||||
|
||||
.frame {
|
||||
border-left: 1rem solid #ddd;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
img.hero {
|
||||
width: 100%;
|
||||
margin:-0.5rem;
|
||||
}
|
||||
|
||||
h1.slogan {
|
||||
text-align:center;
|
||||
font-size:2rem;
|
||||
padding: 2rem 0rem;
|
||||
}
|
||||
|
||||
.icon {
|
||||
font-size: 80px;
|
||||
height: 120px;
|
||||
}
|
||||
|
||||
section.list {
|
||||
padding-left:1.5rem;
|
||||
}
|
||||
|
||||
p.fill {
|
||||
margin: 2rem 0rem;
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 11 KiB |
|
@ -1 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-opacity="0.0" fill="#FFF" d="M15.632 34.661c-.799-.597-1.498-1.484-2.035-2.592l-.228-.47-.46.249c-.975.528-1.913.858-2.744.969l-.202-3.756-3.636.968c-.157-.854-.125-1.887.096-3.022l.103-.525-.532-.066c-1.242-.154-2.306-.525-3.104-1.08l1.521-2.917-2.988-1.523c.319-.944.948-1.882 1.834-2.735l.377-.363-.379-.36c-.803-.764-1.408-1.554-1.77-2.311l3.51-1.353-2.045-3.159c.74-.402 1.693-.686 2.789-.832l.519-.068-.091-.514c-.215-1.211-.172-2.338.124-3.288l3.308.523.524-3.308c.988.013 2.08.326 3.164.907l.462.248.226-.473c.479-1.003 1.044-1.824 1.653-2.404L18 4.326l2.372-2.92c.609.58 1.175 1.401 1.653 2.404l.226.473.462-.247c1.085-.581 2.178-.894 3.164-.906l.523 3.308 3.31-.525c.296.951.34 2.078.124 3.288l-.092.515.518.069c1.095.145 2.048.43 2.788.832l-2.046 3.156 3.511 1.355c-.361.757-.966 1.547-1.77 2.311l-.379.36.377.363c.888.854 1.516 1.793 1.835 2.736l-2.984 1.52 1.521 2.984c-.812.574-1.871.964-3.094 1.134l-.518.072.096.514c.201 1.089.226 2.083.073 2.909l-3.634-.97-.204 3.757c-.83-.11-1.768-.44-2.742-.968l-.459-.249-.228.47c-.539 1.107-1.237 1.994-2.036 2.591L18 32.293l-2.368 2.368z"/><path d="M7.092 10.678c-.53-1.489-.698-2.97-.432-4.2l2.368.375.987.156.157-.988.375-2.368c1.261.127 2.613.743 3.862 1.706.118-.337.244-.663.382-.967-1.551-1.135-3.223-1.763-4.73-1.763-.123 0-.245.004-.366.013l-.511 3.223-3.224-.511c-.6 1.487-.565 3.415.085 5.393.335-.037.684-.061 1.047-.069zm14.501-5.319c1.248-.962 2.6-1.578 3.86-1.705l.376 2.368.156.988.987-.157 2.369-.376c.266 1.23.098 2.71-.432 4.2.361.009.711.032 1.046.07.651-1.978.685-3.906.085-5.394l-3.225.512-.511-3.224c-.12-.008-.242-.012-.365-.012-1.507 0-3.179.628-4.73 1.762.14.306.266.631.384.968zM7.368 27h.035c.067 0 .157-.604.26-.947-.098.004-.197.046-.294.046-1.496 0-2.826-.303-3.83-.89l1.089-2.128.454-.887-.891-.452-2.136-1.088c.508-1.151 1.515-2.25 2.818-3.143-.287-.219-.561-.441-.81-.669-1.687 1.217-2.846 2.755-3.235 4.31l2.908 1.483-1.482 2.843C3.475 26.501 5.303 27 7.368 27zm27.806-5.846c-.39-1.555-1.548-3.093-3.234-4.311-.25.228-.523.451-.81.669 1.304.893 2.31 1.992 2.817 3.145l-2.136 1.088-.891.453.454.892 1.089 2.137c-1.004.587-2.332.904-3.828.904-.099 0-.199-.01-.299-.013.103.344.192.683.26 1.011l.039.002c2.066 0 3.892-.563 5.112-1.587l-1.482-2.908 2.909-1.482zm-12.653 9.182c-.447 1.517-1.181 2.812-2.119 3.651l-1.695-1.694-.707-.707-.707.707-1.695 1.694c-.938-.839-1.673-2.136-2.12-3.652-.296.206-.593.397-.886.563.636 1.98 1.741 3.559 3.1 4.409L18 33l2.308 2.308c1.358-.851 2.464-2.428 3.101-4.408-.295-.168-.591-.359-.888-.564z" fill="#FFF"/><path fill="#FFF" d="M20.118 5.683c.426 1.146.748 2.596.841 4.284l.2 3.683 3.564-.946c1.32-.351 2.655-.536 3.86-.536.16 0 .318.003.474.01l-1.827 2.819 3.139 1.211c-.958.759-2.237 1.514-3.814 2.123l-3.441 1.328 2.001 3.099c.918 1.42 1.509 2.782 1.838 3.96l-3.244-.865-.182 3.357c-1.019-.677-2.132-1.66-3.198-2.973L18 23.374l-2.328 2.862c-1.066 1.312-2.179 2.295-3.198 2.972l-.18-3.354-3.248.864c.329-1.178.921-2.54 1.839-3.961l2.004-3.099-3.442-1.328c-1.577-.609-2.856-1.363-3.814-2.122L8.768 15l-1.827-2.823c.155-.006.313-.01.473-.01 1.206 0 2.541.185 3.861.536l3.564.947.202-3.683c.092-1.688.415-3.138.84-4.284L18 8.292l2.118-2.609m.19-4.991L18 3.533 15.692.692c-1.989 1.532-3.421 4.992-3.646 9.112-1.617-.43-3.192-.637-4.632-.637-2.11 0-3.929.445-5.161 1.289l1.989 3.073-3.415 1.316c.842 2.366 3.69 4.797 7.54 6.283-2.241 3.465-3.116 7.106-2.407 9.516l3.537-.941.196 3.654c2.512-.07 5.703-2.027 8.307-5.228 2.603 3.201 5.796 5.158 8.306 5.228l.198-3.655 3.535.943c.71-2.411-.165-6.05-2.404-9.517 3.849-1.485 6.696-3.918 7.538-6.283l-3.415-1.318 1.99-3.07c-1.233-.844-3.053-1.29-5.164-1.29-1.438 0-3.013.207-4.63.636-.225-4.119-1.657-7.579-3.646-9.111z"/></svg>
|
Before Width: | Height: | Size: 3.7 KiB |
BIN
src/img/ngi.png
Before Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 82 KiB |
124
src/index.pug
|
@ -1,124 +0,0 @@
|
|||
extends _layout.pug
|
||||
|
||||
prepend root
|
||||
- title = "deuxfleurs"
|
||||
|
||||
block content
|
||||
section
|
||||
img.hero(alt="Photo d'illustration d'un parterre de fleurs en noir et blanc avec un effet tramage.", src="/img/flower.png")
|
||||
|
||||
section
|
||||
h1.slogan fabriquons un internet convivial
|
||||
|
||||
|
||||
p(style="font-style: italic") L'objectif de Deuxfleurs est de faire vivre un internet amateur, associatif, solidaire, collectif, coopératif, militant, en lutte, indépendant, savant, sobre, progressiste, inclusif, émancipateur, épanouissant, bref, convivial. Pour cela, nous mettons à disposition des outils numériques pour les individus et collectifs qui font vivre cet écosystème. Quand les outils manquent, nous prenons également en charge leur développement. Enfin, nous menons des missions de sensibilisation et d'accompagnement.
|
||||
|
||||
|
||||
|
||||
section
|
||||
h2 avec des outils sobres
|
||||
section
|
||||
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/matrix/')
|
||||
.icon 💬
|
||||
h5 discussion
|
||||
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/jitsi/')
|
||||
.icon 📞
|
||||
h5 visioconférence
|
||||
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/web/')
|
||||
.icon 🌐
|
||||
h5 sites web
|
||||
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/emails/')
|
||||
.icon 📨
|
||||
h5 emails (beta)
|
||||
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/cryptpad/')
|
||||
.icon 📄
|
||||
h5 collaboration
|
||||
a.service-box.left(href='https://man.deuxfleurs.fr/prise_en_main/plume/')
|
||||
.icon ✍️
|
||||
h5 blog
|
||||
|
||||
p ⚠️ Pour la plupart des outils, vous devez avoir un compte. Faisons connaissance d'abord 👇
|
||||
|
||||
section
|
||||
h2 avec notre propre infrastructure résiliente
|
||||
|
||||
p.fill
|
||||
img.hero(alt="Une photo en noir et blanc de nos différents serveurs hébergés à domicile.", src="/img/servers.jpg")
|
||||
|
||||
p
|
||||
| Pour fournir nos outils, nous récupérons <b>d'anciens ordinateurs</b> que nous reconditionnons pour servir de serveurs et que nous installons à nos domiciles.
|
||||
| Actuellement nous avons des machines à <b>Rennes</b> en Bretagne et à <b>Orsay</b> en Ile de France pour la fourniture des services. Nous avons également des machines à <b>Suresnes</b> en Ile de France pour les sauvegarde. Certains de nos outils techniques sont (temporairement) hébergés en datacenter chez OVH.
|
||||
| <a href="https://man.deuxfleurs.fr/infrastructures/">En savoir plus</a>.
|
||||
|
||||
p
|
||||
| Cette infrastructure atypique nous mène à développer de nouveaux logiciels libres.
|
||||
| Si vous êtes dans la technique, vous pourriez être intéressé·e par <a href="https://garagehq.deuxfleurs.fr/">Garage</a>, <a href="https://bottin.eu">Bottin</a>, <a href="https://git.deuxfleurs.fr/lx/tricot">Tricot</a>, <a href="https://git.deuxfleurs.fr/Deuxfleurs/diplonat">Diplonat</a> et nos <a href="https://git.deuxfleurs.fr/Deuxfleurs">autres projets</a>.
|
||||
|
||||
section
|
||||
h2 avec des valeurs fortes
|
||||
|
||||
section.list
|
||||
div ⇨ <b>la coopération</b> - eg. promouvoir l'intéropérabilité, les communs, le libre, et les formats de données ouverts
|
||||
div ⇨ <b>l'autonomie</b> - eg. gérer nos propres moyens de communications, prendre nos propres décisions
|
||||
div ⇨ <b>la solidarité</b> - eg. partager le savoir, partager les ressources informatiques, s'entraider pour la gestion des services
|
||||
div ⇨ <b>la liberté</b> - eg. permettre à toutes et tous de s'exprimer, respecter la vie privée
|
||||
|
||||
p
|
||||
a(href="https://plume.deuxfleurs.fr/timeline/1") Suivez notre actualité, réflexions et analyses sur notre blog Plume</a>
|
||||
|
||||
section
|
||||
h2 avec un modèle économique transparent
|
||||
|
||||
p Notre modèle économique est basé sur 4 piliers :
|
||||
|
||||
section.list
|
||||
div
|
||||
| ⇨
|
||||
b l'échange
|
||||
| - les membres ayant des besoins spécifiques ou voulant aider peuvent contribuer du matériel et du temps à l'infrastructure Deuxfleurs. En échange, ils et elles bénéficient alors de la résilience de l'infrastructure pour leurs données.
|
||||
|
||||
div
|
||||
| ⇨
|
||||
b l'adhésion
|
||||
| - nous demandons à chaque membre une adhésion de 10 euros par an pour couvrir les frais basiques de l'association, comme les frais de tenu de compte en banque.
|
||||
|
||||
div
|
||||
| ⇨
|
||||
b la contribution libre
|
||||
| - pour nos projets internes, comme la réalisation d'illustrations ou des opérations techniques importantes, nous pouvons lancer un appel à contribution libre : les membres contribuent en fonction de leurs moyens et de leur envie.
|
||||
|
||||
div
|
||||
| ⇨
|
||||
b les subventions
|
||||
| - pour nos projets qui dépassent le cadre de l'association et qui peuvent bénéficier à tout le monde, comme les logiciels libres que nous développons, nous sommes également amené à faire des demandes de subvention.
|
||||
|
||||
section
|
||||
h2 ouvert sur le monde
|
||||
|
||||
div(style="display: flex; justify-content: space-around; flex-wrap: wrap;")
|
||||
div(style="width: 250px")
|
||||
div(style="display: flex; justify-content: center; align-items: center; height: 200px;")
|
||||
img.simple(width=200, src="img/chatons.png")
|
||||
p(style="text-align: center") En juin 2022, nous avons intégré le collectif d'hébergeur <a href="https://www.chatons.org/">CHATONS</a>. Ses ~100 membres se retrouvent autour d'une <a href="https://www.chatons.org/charte">charte commune</a> et militent ensemble pour un internet alternatif.
|
||||
|
||||
div(style="width: 250px")
|
||||
div(style="display: flex; justify-content: center; align-items: center; height: 200px;")
|
||||
img.simple(style="width: 200px;", src="img/ngi.png")
|
||||
p(style="text-align: center") En 2022, Deuxfleurs a rémunéré à plein temps 3 salarié·es grâce à une subvention de <a href="https://ngi.eu">NGI</a>. Nous avons pu considérablement accélérer le développement de notre logiciel <a href="https://garagehq.deuxfleurs.fr/">Garage</a>.
|
||||
|
||||
div(style="width: 250px")
|
||||
div(style="display: flex; justify-content: center; align-items: center; height: 200px;")
|
||||
img.simple(width=200, src="img/brico.png")
|
||||
p(style="text-align: center") <a href="https://bricologis.com">Bricologis</a> est un atelier participatif à Vaux-en-Velin, proche de Lyon. À partir de septembre 2022, il accueillera une permanence mensuelle de Deuxfleurs ainsi que quelques un de ses serveurs.
|
||||
|
||||
section
|
||||
h2 rejoignez-nous !
|
||||
p.spacing L'accès à nos services est à <b>prix libre</b>, se fait <b>sur demande</b> directement à un membre ou par email et est conditionné par <b>les ressources disponibles</b>, à la fois matérielles et humaines.
|
||||
|
||||
p.spacing Nous encourageons nos usager·es ainsi que toute personne souhaitant collaborer à <b>rejoindre l'association</b> afin de participer à sa gestion. L'admission se fait par <b>cooptation</b>, soit directement si vous connaissez déjà un membre, soit en échangeant d'abord avec nous par email ou sur Matrix. L'objectif de la cooptation est de s'assurer que nos futurs membres partageront bien les valeurs de notre association. L'adhésion est de <b>10 euros par an</b>.
|
||||
|
||||
p.spacing
|
||||
| Si vous connaissez un membre de l'association, contactez votre connaissance directement !
|
||||
br
|
||||
| Sinon, vous pouvez nous écrire à <b>coucou</b><img class="simple" alt="arobase" src="img/arobase.png" height="15"/><b>deuxfleurs.fr</b> ou nous rejoindre sur notre salon Matrix #deuxfleurs:deuxfleurs.fr pour un premier contact.
|
||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
@ -2,6 +2,9 @@
|
|||
"m.homeserver": {
|
||||
"base_url": "https://im.deuxfleurs.fr"
|
||||
},
|
||||
"org.matrix.msc3575.proxy": {
|
||||
"url": "https://im-syncv3.deuxfleurs.fr"
|
||||
},
|
||||
"m.identity_server": {
|
||||
"base_url": "https://vector.im"
|
||||
},
|
1
static/.well-known/matrix/server
Normal file
|
@ -0,0 +1 @@
|
|||
{ "m.server": "im.deuxfleurs.fr:443" }
|
8
static/@404.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html><html lang="fr"><head><meta charset="utf-8"><title>💮💮 deuxfleurs - deuxfleurs</title><link rel="stylesheet" href="/css/main.css"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><aside><header><a class="mobile_inline" id="menu" href="#"><svg viewBox="0 0 100 80" width="40" height="40"><rect width="100" height="20"></rect><rect y="30" width="100" height="20"></rect><rect y="60" width="100" height="20"></rect></svg></a><h1><a href="/">deuxfleurs</a></h1><nav class="computer_block"><section class="center"><img alt="emoji fleur" src="/img/flower.svg" width="40"> <img alt="emoji fleur" src="/img/flower.svg" width="40"></section><ul><li><a href="https://plume.deuxfleurs.fr/timeline/1">Actualités</a></li><li><a href="https://man.deuxfleurs.fr">Wiki</a></li><li><a href="https://guichet.deuxfleurs.fr">Mon compte</a></li></ul><hr><ul><li><a href="/CGU.html">CGU</a></li><li><a href="/Gestion des risques.html">Gestion des risques</a></li><li><a href="/Mentions légales.html">Mentions légales</a></li><li><a href="/Sources.html">Sources</a></li></ul></nav></header></aside><main><section><h1>404 - Page non trouvée</h1><p>La page que vous cherchez n'existe pas sur ce site web.</p><p>Si vous pensez que c'est une erreur, les informations pour nous contacter sont disponibles sur notre page d'accueil.</p></section></main><script>(_ => {
|
||||
const hamburger = document.getElementById('menu')
|
||||
hamburger.onclick = _ => {
|
||||
const nav = document.querySelector('body > aside > header > nav')
|
||||
console.log(nav.style.display)
|
||||
nav.style.display = nav.style.display != 'block' ? 'block' : 'none'
|
||||
}
|
||||
})()</script></body></html>
|
8
static/@jitsi.html
Normal file
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE html><html lang="fr"><head><meta charset="utf-8"><title>💮💮 deuxfleurs - Visioconférence</title><link rel="stylesheet" href="/css/main.css"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><aside><header><a class="mobile_inline" id="menu" href="#"><svg viewBox="0 0 100 80" width="40" height="40"><rect width="100" height="20"></rect><rect y="30" width="100" height="20"></rect><rect y="60" width="100" height="20"></rect></svg></a><h1><a href="/">deuxfleurs</a></h1><nav class="computer_block"><section class="center"><img alt="emoji fleur" src="/img/flower.svg" width="40"> <img alt="emoji fleur" src="/img/flower.svg" width="40"></section><ul><li><a href="https://plume.deuxfleurs.fr/timeline/1">Actualités</a></li><li><a href="https://wiki.deuxfleurs.fr">Wiki</a></li><li><a href="https://guichet.deuxfleurs.fr">Mon compte</a></li></ul><hr><ul><li><a href="/CGU.html">CGU</a></li><li><a href="/Gestion des risques.html">Gestion des risques</a></li><li><a href="/Mentions légales.html">Mentions légales</a></li></ul></nav></header></aside><main><h4 class="spacing"> Cette page a changé d'adresse : <a href="/Guide/Visioconférence.html">cliquez ici pour être redirigé</a></h4></main><script>(_ => {
|
||||
const hamburger = document.getElementById('menu')
|
||||
hamburger.onclick = _ => {
|
||||
const nav = document.querySelector('body > aside > header > nav')
|
||||
console.log(nav.style.display)
|
||||
nav.style.display = nav.style.display != 'block' ? 'block' : 'none'
|
||||
}
|
||||
})()</script></body></html>
|
13
static/Gestion des risques.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html><html lang="fr"><head><meta charset="utf-8"><title>💮💮 deuxfleurs - Gestion des risques</title><link rel="stylesheet" href="/css/main.css"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><aside><header><a class="mobile_inline" id="menu" href="#"><svg viewBox="0 0 100 80" width="40" height="40"><rect width="100" height="20"></rect><rect y="30" width="100" height="20"></rect><rect y="60" width="100" height="20"></rect></svg></a><h1><a href="/">deuxfleurs</a></h1><nav class="computer_block"><section class="center"><img alt="emoji fleur" src="/img/flower.svg" width="40"> <img alt="emoji fleur" src="/img/flower.svg" width="40"></section><ul><li><a href="https://plume.deuxfleurs.fr/timeline/1">Actualités</a></li><li><a href="https://man.deuxfleurs.fr">Wiki</a></li><li><a href="https://guichet.deuxfleurs.fr">Mon compte</a></li></ul><hr><ul><li><a href="/CGU.html">CGU</a></li><li><a class="selected" href="/Gestion des risques.html">Gestion des risques</a></li><li><a href="/Mentions légales.html">Mentions légales</a></li><li><a href="/Sources.html">Sources</a></li></ul></nav></header></aside><main><section><h1>Gestion des risques</h1><p>Un risque se définit par la combinaison d'un danger, c'est à dire un évènement redouté, et sa probabilité d'occurence.
|
||||
La gestion des risques consiste à minimiser les risques en les évaluant et en mettant en place des solutions pour réduire leur impact.</p><h2>🧰 Risques matériels</h2><h3>Panne de composants informatiques</h3><p><b>Définition du risque</b>: Un serveur est composé d'un ensemble de pièces avec une durée de vie limitée. La panne d'une de ces pièces cause une interruption de service et possiblement une perte de données (comme dans le cas d'un disque dur par exemple). La probabilité de ces pannes est importante car certains composants ont une durée de vie limité, comme les disques durs, et de plus nous utilisons du matériel reconditionné qui a donc déjà été utilisé.</p><p><b>Mesure mise en place</b>: Nous avons à disposition des pièces de rechange pour pouvoir réparer rapidement nos serveurs. De plus, nous avons en permanence plusieurs machines en production de sorte que lorsque l'une d'elle tombe en panne, les services qu'elle gérait sont automatiquement basculés sur les autres machines fonctionnelles. Les données sont répliquées sur 3 disques durs différents, de sorte que si un disque dur tombe en panne, cette dernière est toujours disponible sur 2 autres disques.</p><h3>Bug logiciel</h3><p><b>Définition du risque</b>: Un bug logiciel peut rendre un service indisponible voire impliquer une perte de données. Cette indisponibilité et cette perte de donnée, contrairement à une panne matériel, peut se propager à l'ensemble de nos serveurs.</p><p><b>Mesure mise en place</b>: Les données, en plus d'être répliquées automatiquement, sont périodiquement sauvegardées via un logiciel indépendant sur une période d'au moins 2 mois sur un site distant (Suresnes), de sorte que le logiciel qui fournisse le service n'ait pas accès aux données de sauvegardes et ne puisse donc pas les effacer. Les services quant à eux sont définis déclarativement, dans chaque modification est archivée, de sorte qu'il est possible de revenir sur une version antérieure du service qui soit stable.</p><h3>Panne du réseau électrique ou internet</h3><p><b>Définition du risque</b>: Nous faisons appel à des prestataires externe pour l'électricité (eg. EDF) et la connexion Internet (eg. Free). Lors de travaux dans la rue, de tension sur le réseau (eg. froid ou confinement), ou simplement d'erreur de gestion, ces réseaux peuvent être coupés localement ou au niveau national. En résulte une indisponibilité des services pendant la coupure.</p><p><b>Mesure mise en place</b>: Notre infrastructure est répartie sur des zones éloignées géographiquement (aujourd'hui Rennes et Orsay), de sorte qu'une panne locale ne nécessitera que de migrer les services d'une zone à l'autre. Pour le cas d'une panne au niveau national, nous acceptons ce risque : il est très faible et, la plupart du temps, le service est rétabli en quelques heures.</p><h3>Panne des autres prestataires et tiers-parties</h3><p> <b>Définition du risque</b>: Deuxfleurs fait appel à un certains nombre de prestataires et tiers parties pour fournir ses services : bureau d'enregistrement DNS (Gandi), Hébergeur DNS (Gandi), certificats X.509 (Let's Encrypt), système d'exploitation (NixOS, Debian), logiciels (Docker Hub, Github, etc.). La panne ou le blocage par une de ces tiers-parties impacteraient les services de Deuxfleurs.</p><p><b>Mesure mise en place</b>: Nous essayons de limiter le nombre de prestataires que nous utilisons et évitons de verrouiller fortement nos choix technologiques vis à vis d'un fournisseur particulier.
|
||||
En dehors de ces points, nous acceptons ces risques.</p><h2>😵 Risques humains</h2><h3>Erreur d'administration</h3><p><b>Définition du risque</b>: Une erreur d'administration des services peut aboutir à une interruption de services et à une perte de données sur l'ensemble de nos serveurs. Elle peut également générer beaucoup de stress pour la personne en charge de l'administration.</p><p><b>Mesure mise en place</b>: Les données, en plus d'être répliquées automatiquement, sont périodiquement sauvegardées via un logiciel indépendant sur une période d'au moins 2 mois sur un site distant (Suresnes), de sorte que le logiciel qui fournisse le service n'ait pas accès aux données de sauvegardes et ne puisse donc pas les effacer. Les services quant à eux sont définis déclarativement, dans chaque modification est archivée, de sorte qu'il est possible de revenir sur une version antérieure du service qui soit stable. En cas d'erreur, la personne en charge de l'administration doit demander un accompagnement ou un relai pour limiter les risques d'aggravement de la situation et ne pas avoir à supporter cette situation stressante seule.</p><h3>Absence d'astreinte</h3><p><b>Définition du risque</b>: Que ce soit dans les datacenters au niveau matériel, ou dans les services informatiques, au niveau logiciel, de nombreuses organisations mettent en place des astreintes.
|
||||
Autrement dit, une ou plusieurs personnes identifiées doivent se rendre disponible sur des périodes données pour pouvoir intervenenir rapidement sur les serveurs.
|
||||
Dans le cas de Deuxfleurs, une astreinte empêcherait une personne de quitter son domicile pour des vacances ou même rendre visite à sa famille !</p><p><b>Mesure mise en place</b>: Nous faisons en sorte d'avoir des serveurs chez des membres différents et d'avoir plusieurs personnes en mesure de réaliser une même opération de maintenance.
|
||||
Si un problème devait arriver pendant l'absence de la personne concernée, un autre membre devrait pouvoir prendre le relai dans les heures ou les jours qui viennent, par exemple en migrant les services chez lui ou en le réparant à distance.</p><h3>Perte d'expertise</h3><p><b>Définition du risque</b>: L'infrastructure que nous avons déployée demande des connaissances avancées en informatique détenues par une fraction des membres de l'association. Si cette fraction venait à quitter l'association, la maintenance de ses services pourrait ne plus être réalisée par les membres restants, mettant en péril sa pérennité.</p><p><b>Mesure mise en place</b>: Nous essayons d'avoir toujours au moins deux personnes en mesure de réaliser une tâche. Nous essayons de documenter et standardiser notre infrastructure.</p><h3>Risques juridiques</h3><p><b>Définition du risque</b>: Deuxfleurs pourrait enfreindre la loi et voir sa pérennité engagée en cas de procès.</p><p><b>Mesure mise en place</b>: Nous faisons une veille juridique concernant les hébergeurs. Nous mitigeons aussi ce risque via la co-optation qui permet de contrôler notre croissance et les personnes qui nous rejoignent.</p><h2>👿 Malveillance</h2><h3>Attaque informatique</h3><p><b>Définition du risque</b>: Une attaque informatique, venant d'un·e administrateur·ice ou d'une personne extérieure, peut aboutir à l'indisponibilité de nos services, à une perte de données, mais aussi à la fuite de ces dernières.</p><p><b>Mesure mise en place</b>: Pour se protéger d'un·e administrateur·ice malveillant·e, le groupe d'administrateur·ices existant ne recrute que de nouvelles personnes sur cooptation et après avoir jugé cette personne de confiance. Nous prévoyions également de chiffrer de plus en plus de données côté client, de sorte qu'une personne en charge de l'administration ne soit pas en mesure de lire le contenu stocké sur les serveurs. Pour se protéger d'une personne extérieure, nous maintenons notre système à jour et avons entamé une démarche de défense en profondeur.</p><h3>Vol du matériel</h3><p><b>Définition du risque</b>: Une personne entrant par effraction chez un de nos membres pourrait voler les ordinateurs. Cet évènement peut impacter la disponibilité de nos services, l'intégrité de nos données, mais aussi la confidentialité de ces dernières.</p><p><b>Mesure mise en place</b>: Nous acceptons ce risque pour le moment. Le chiffrement côté client, pour les services le supportant, permet de protéger la confidentialité des données. Nous prévoyions à terme de chiffrer les disques durs à froid en plus.</p><h3>Abus des services</h3><p><b>Définition du risque</b>: Une personne ayant des accès au service, où se les aillant fait voler, peut opérer un déni de service sur notre infrastructure, ou alors nuire à la réputation de notre service sur un réseau fédéré (eg. spam via email). Cela entraine une indisponibilité des services et/ou une dégradation plus ou moins durable de la qualité de ces derniers.</p><p><b>Mesure mise en place</b>: Nous mitigeons actuellement ce risque via la cooptation, où nous faisons confiance aux nouveaux membres et les invitons à bien gérer leurs identifiants. </p></section></main><script>(_ => {
|
||||
const hamburger = document.getElementById('menu')
|
||||
hamburger.onclick = _ => {
|
||||
const nav = document.querySelector('body > aside > header > nav')
|
||||
console.log(nav.style.display)
|
||||
nav.style.display = nav.style.display != 'block' ? 'block' : 'none'
|
||||
}
|
||||
})()</script></body></html>
|
8
static/Mentions légales.html
Normal file
38
static/Sources.html
Normal file
|
@ -0,0 +1,38 @@
|
|||
<!DOCTYPE html><html lang="fr"><head><meta charset="utf-8"><title>💮💮 deuxfleurs - Sources</title><link rel="stylesheet" href="/css/main.css"><meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body><aside><header><a class="mobile_inline" id="menu" href="#"><svg viewBox="0 0 100 80" width="40" height="40"><rect width="100" height="20"></rect><rect y="30" width="100" height="20"></rect><rect y="60" width="100" height="20"></rect></svg></a><h1><a href="/">deuxfleurs</a></h1><nav class="computer_block"><section class="center"><img alt="emoji fleur" src="/img/flower.svg" width="40"> <img alt="emoji fleur" src="/img/flower.svg" width="40"></section><ul><li><a href="https://plume.deuxfleurs.fr/timeline/1">Actualités</a></li><li><a href="https://man.deuxfleurs.fr">Wiki</a></li><li><a href="https://guichet.deuxfleurs.fr">Mon compte</a></li></ul><hr><ul><li><a href="/CGU.html">CGU</a></li><li><a href="/Gestion des risques.html">Gestion des risques</a></li><li><a href="/Mentions légales.html">Mentions légales</a></li><li><a class="selected" href="/Sources.html">Sources</a></li></ul></nav></header></aside><main><section><h1>Accéder aux sources des logiciels utilisés</h1><p>Deuxfleurs utilise exclusivement des logiciels libres dans le cadre de son activité. Vous pouvez retrouver ici la liste des sources des logiciels utilisés.</p><ul>
|
||||
<li><a href="https://packages.debian.org/">Debian</a></li>
|
||||
<li><a href="https://github.com/NixOS">NixOS</a></li>
|
||||
<li><a href="https://github.com/hashicorp/nomad">Nomad</a></li>
|
||||
<li><a href="https://github.com/hashicorp/consul/">Consul</a></li>
|
||||
<li><a href="https://git.deuxfleurs.fr/Deuxfleurs/garage">Garage</a></li>
|
||||
<li><a href="https://git.deuxfleurs.fr/Deuxfleurs/tricot">Tricot</a></li>
|
||||
<li><a href="https://git.deuxfleurs.fr/Deuxfleurs/bottin/">Bottin</a></li>
|
||||
<li><a href="https://git.deuxfleurs.fr/Deuxfleurs/guichet/">Guichet</a></li>
|
||||
<li><a href="https://git.deuxfleurs.fr/Deuxfleurs/diplonat/">Diplonat</a></li>
|
||||
<li><a href="https://github.com/sorintlab/stolon">Stolon</a></li>
|
||||
<li><a href="https://github.com/moby/moby">Docker</a></li>
|
||||
<li><a href="https://github.com/ansible/ansible">Ansible</a></li>
|
||||
<li><a href="https://github.com/harness/drone">Drone</a></li>
|
||||
<li><a href="https://github.com/restic/restic">Restic</a></li>
|
||||
<li><a href="https://github.com/xwiki-labs/cryptpad">Cryptpad</a></li>
|
||||
<li><a href="https://github.com/inverse-inc/sogo">Sogo</a></li>
|
||||
<li><a href="git.deuxfleurs.fr/Deuxfleurs/alps">alps</a></li>
|
||||
<li><a href="https://github.com/matrix-org/synapse">Synapse</a></li>
|
||||
<li><a href="https://github.com/vector-im/element-web">Element</a></li>
|
||||
<li><a href="https://github.com/jitsi">Jitsi</a></li>
|
||||
<li><a href="https://github.com/Plume-org/Plume">Plume</a></li>
|
||||
<li><a href="https://github.com/FiloSottile/age">age</a></li>
|
||||
<li><a href="https://github.com/minio/minio">Minio</a></li>
|
||||
<li><a href="https://git.proxmox.com/">Proxmox</a></li>
|
||||
<li><a href="https://github.com/grafana/grafana">Grafana</a></li>
|
||||
<li><a href="https://github.com/prometheus/prometheus">Prometheus</a></li>
|
||||
<li><a href="https://git.deuxfleurs.fr/Deuxfleurs/infrastructure">Infra (legacy)</a></li>
|
||||
<li><a href="git.deuxfleurs.fr/Deuxfleurs/nixcfg">Infra (next)</a></li>
|
||||
</ul>
|
||||
</section></main><script>(_ => {
|
||||
const hamburger = document.getElementById('menu')
|
||||
hamburger.onclick = _ => {
|
||||
const nav = document.querySelector('body > aside > header > nav')
|
||||
console.log(nav.style.display)
|
||||
nav.style.display = nav.style.display != 'block' ? 'block' : 'none'
|
||||
}
|
||||
})()</script></body></html>
|
595
static/cgu.html
Normal file
576
static/css/home.css
Normal file
|
@ -0,0 +1,576 @@
|
|||
/*GESTION DE LA GRILLE DE LA PAGE PRINCIPALE */
|
||||
main {
|
||||
grid-area: main-row-debut / main-col-start / main-row-fin / main-col-sep 12;
|
||||
|
||||
display: grid;
|
||||
grid-template-columns: [col-start] repeat(12, calc(100% / 12) [col-sep]);
|
||||
grid-template-rows:
|
||||
[row-start] auto [jardin-end]
|
||||
repeat(3,
|
||||
var(--big_margin)
|
||||
[title-start] auto [title-end]
|
||||
var(--med_margin)
|
||||
[illu-start] auto [illu-end] auto [illu-extended-end]
|
||||
var(--med_margin)
|
||||
[txt-start] auto [txt-end])
|
||||
var(--big_margin)
|
||||
[title-start-contact] auto [title-end-contact]
|
||||
var(--med_margin)
|
||||
[txt-start-contact] auto [txt-end-contact] auto [cal-end-contact] /* au lieu de mettre auto on pourrait mettre 100px ici pour avoir les 2 cadres de la même taille*/
|
||||
;
|
||||
}
|
||||
|
||||
div#jardin{
|
||||
background-color: var(--jardin);
|
||||
grid-area: row-start / col-start / jardin-end / col-sep 12;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
height: 100vh;
|
||||
}
|
||||
|
||||
div#jardin p{
|
||||
display: flex;
|
||||
justify-content:center;
|
||||
}
|
||||
|
||||
h2#infras{
|
||||
background-color: var(--infras);
|
||||
grid-area: title-start 1 / col-sep 1 / title-end 1 / col-sep 12;
|
||||
}
|
||||
|
||||
div#rennes{
|
||||
background-color: var(--rennes);
|
||||
grid-area: illu-start 1 / col-sep 1 / illu-end 1 / col-sep 6;
|
||||
overflow: hidden;
|
||||
/*height: 450px;*/
|
||||
}
|
||||
|
||||
div#orsay{
|
||||
background-color: var(--orsay);
|
||||
grid-area: illu-start 1 / col-sep 6 / illu-end 1 / col-sep 11;
|
||||
overflow: hidden;
|
||||
/*height:450px;*/
|
||||
}
|
||||
|
||||
p#txt_infras{
|
||||
background-color: var(--txt_infras);
|
||||
grid-area: txt-start 1 / col-sep 1 / txt-end 1 / col-sep 7;
|
||||
}
|
||||
|
||||
h2#outils{
|
||||
background-color: var(--outils);
|
||||
grid-area: title-start 2 / col-sep 1 / title-end 2 / col-sep 12;
|
||||
}
|
||||
|
||||
section#liste_outils{
|
||||
background-color: var(--liste_outils);
|
||||
grid-area: illu-start 2 / col-sep 7 / illu-end 2 / col-sep 11;
|
||||
}
|
||||
|
||||
section#liste_outils > a > div > p{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
section#liste_outils > a{
|
||||
/*display: contents;*/
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
section#liste_outils > a:hover{
|
||||
color: darkgreen;
|
||||
}
|
||||
|
||||
div#txt_outils{
|
||||
background-color: var(--txt_outils);
|
||||
grid-area: txt-start 2 / col-sep 1 / txt-end 2 / col-sep 7;
|
||||
}
|
||||
|
||||
h2#valeurs{
|
||||
background-color: var(--valeurs);
|
||||
grid-area: title-start 3 / col-sep 1 / title-end 3 / col-sep 12;
|
||||
}
|
||||
|
||||
div#ronce{
|
||||
background-color: var(--ronce);
|
||||
grid-area: illu-start 3 / col-sep 2 / illu-end 3 / col-sep 10;
|
||||
padding: 0.5rem;
|
||||
filter: grayscale(100%);
|
||||
border: 1px dashed black;
|
||||
transition: filter 0.15s ease 0s;
|
||||
}
|
||||
|
||||
div#ronce:hover{
|
||||
filter: none;
|
||||
}
|
||||
|
||||
section#liste_valeurs{
|
||||
background-color: var(--liste_valeurs);
|
||||
grid-area: txt-start 3 / col-sep 2 / txt-end 3 / col-sep 10;
|
||||
}
|
||||
|
||||
h2#connaissance{
|
||||
background-color: var(--connaissance);
|
||||
grid-area: title-start-contact / col-sep 1 / title-end-contact / col-sep 12;
|
||||
}
|
||||
|
||||
div#txt_connaissance{
|
||||
background-color: var(--txt_connaissance);
|
||||
grid-area: txt-start-contact / col-sep 1 / txt-end-contact / col-sep 6;
|
||||
}
|
||||
|
||||
div#calendrier{
|
||||
background-color: var(--calendrier);
|
||||
grid-area: txt-start-contact / col-sep 7 / txt-end-contact / col-sep 10;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.mois_actuel, .mois_suivant{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*GESTION DE LA GRILLE LISTE DE NOS VALEURS*/
|
||||
|
||||
section#liste_valeurs{
|
||||
/*on ne peut pas faire plusieurs opérations en même temps dans calc, il faut un calc par opération*/
|
||||
--demie-goutiere: calc(var(--small_margin) / 2);
|
||||
--valeurs_width: calc(50% - var(--demie-goutiere));
|
||||
display: grid;
|
||||
grid-template-columns:
|
||||
[col2-start] var(--valeurs_width) [col2-mid-left] /*bloc de gauche*/
|
||||
var(--small_margin) /*goutière*/
|
||||
[col2-mid-right] var(--valeurs_width) [col2-end]; /*bloc de droite*/
|
||||
grid-template-rows:
|
||||
[line1-start] auto [line1-end]
|
||||
var(--small_margin)
|
||||
[line2-start] auto [line2-end]
|
||||
var(--small_margin)
|
||||
[suivre-start] auto [suivre-end];
|
||||
}
|
||||
|
||||
p#coop{
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col2-start / line1-end / col2-mid-left;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
p#autonomie{
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col2-mid-right / line1-end / col2-end;
|
||||
}
|
||||
|
||||
p#solidarite{
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col2-start / line2-end / col2-mid-left;
|
||||
}
|
||||
|
||||
p#liberte{
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col2-mid-right / line2-end / col2-end;
|
||||
}
|
||||
|
||||
p#suivre {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: suivre-start / col2-start / suivre-end / col2-end;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#coop, #autonomie, #solidarite, #liberte{
|
||||
padding: 2rem;
|
||||
border: 1px dashed black;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
section#liste_outils {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
column-gap: 1rem;
|
||||
row-gap: 1rem;
|
||||
}
|
||||
|
||||
section#liste_outils > a > div {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div#ordinateur {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: illu-start 2 / col-start / illu-end 2 / col-sep 7;
|
||||
}
|
||||
|
||||
|
||||
div#discussion {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col-start / line1-end / col-mid-left;
|
||||
}
|
||||
|
||||
div#visio {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col-start / line2-end / col-mid-left;
|
||||
}
|
||||
|
||||
div#sites-web {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line3-start / col-start / line3-end / col-mid-left;
|
||||
}
|
||||
|
||||
div#emails {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col-mid-right / line1-end / col-end;
|
||||
}
|
||||
|
||||
div#collaboration {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col-mid-right / line2-end / col-end;
|
||||
|
||||
}
|
||||
|
||||
div#blog {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line3-start / col-mid-right / line3-end / col-end;
|
||||
}
|
||||
|
||||
|
||||
/*GESTION DES MEDIA QUERIES*/
|
||||
|
||||
/*Tablettes et petits ordinateurs*/
|
||||
@media (max-width: 1500px) and (min-width: 801px){
|
||||
h2#infras{
|
||||
grid-area: title-start 1 / col-sep 1 / title-end 1 / col-sep 12;
|
||||
}
|
||||
|
||||
h2#outils{
|
||||
grid-area: title-start 2 / col-sep 1 / title-end 2 / col-sep 12;
|
||||
}
|
||||
|
||||
h2#valeurs{
|
||||
grid-area: title-start 3 / col-sep 1 / title-end 3 / col-sep 12;
|
||||
}
|
||||
|
||||
h2#connaissance{
|
||||
grid-area: title-start-contact / col-sep 1 / title-end-contact / col-sep 12;
|
||||
}
|
||||
|
||||
div#rennes{
|
||||
grid-area: illu-start 1 / col-sep 2 / illu-end 1 / col-sep 6;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
div#orsay{
|
||||
grid-area: illu-start 1 / col-sep 6 / illu-end 1 / col-sep 10;
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
|
||||
div#rennes, div#orsay{
|
||||
border: 1px solid black;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
div#rennes pre.center, div#orsay pre.center{
|
||||
margin-top: -5px;
|
||||
margin-bottom: -5px
|
||||
}
|
||||
|
||||
div#orsay pre.center{
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
p#txt_infras{
|
||||
background-color: var(--txt_infras);
|
||||
grid-area: txt-start 1 / col-sep 2 / txt-end 1 / col-sep 10;
|
||||
}
|
||||
|
||||
div#txt_outils{
|
||||
background-color: var(--txt_outils);
|
||||
grid-area: txt-start 2 / col-sep 2 / txt-end 2 / col-sep 10;
|
||||
}
|
||||
|
||||
div#txt_connaissance{
|
||||
grid-area: txt-start-contact / col-sep 2 / txt-end-contact / col-sep 10;
|
||||
}
|
||||
|
||||
div#txt_connaissance ul{
|
||||
padding-left: 0px;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
div#ordinateur {
|
||||
grid-area: illu-start 2 / col-sep 1 / illu-end 2 / col-sep 11;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
section#liste_outils{
|
||||
background-color: var(--liste_outils);
|
||||
grid-area: illu-end 2 / col-sep 1 / illu-extended-end 2 / col-sep 11;
|
||||
margin-top: var(--med_margin);
|
||||
}
|
||||
|
||||
|
||||
section#liste_outils{
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr 1fr;
|
||||
row-gap: 1rem;
|
||||
column-gap: 1rem;
|
||||
}
|
||||
|
||||
div#discussion {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col-tiers1-start / line1-end / col-tiers1-end;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div#emails {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col-tiers2-start / line1-end / col-tiers2-start;
|
||||
}
|
||||
|
||||
div#visio {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line1-start / col-tiers3-start / line1-end / col-tiers3-end;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div#sites-web {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col-tiers1-start / line2-end / col-tiers1-end;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div#collaboration {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col-tiers2-start / line2-end / col-tiers2-end;
|
||||
|
||||
}
|
||||
|
||||
div#blog {
|
||||
background-color: var(--lightgrey);
|
||||
grid-area: line2-start / col-tiers3-start / line2-end / col-tiers3-end;
|
||||
}
|
||||
|
||||
div#ronce{
|
||||
grid-area: illu-start 3 / col-sep 1 / illu-end 3 / col-sep 11;
|
||||
}
|
||||
|
||||
div#calendrier{
|
||||
margin-top: var(--med_margin);
|
||||
grid-area: txt-end-contact / col-sep 1 / cal-end-contact / col-sep 11;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
#mois_actuel, #mois_suivant{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#mois_actuel{
|
||||
margin-bottom: 0px;
|
||||
margin-right: 2rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*Smartphones*/
|
||||
@media (max-width: 800px){
|
||||
h2#infras{
|
||||
grid-area: title-start 1 / col-start / title-end 1 / col-sep 12;
|
||||
}
|
||||
|
||||
h2#outils{
|
||||
grid-area: title-start 2 / col-start / title-end 2 / col-sep 12;
|
||||
}
|
||||
|
||||
h2#valeurs{
|
||||
grid-area: title-start 3 / col-start / title-end 3 / col-sep 12;
|
||||
}
|
||||
|
||||
h2#connaissance{
|
||||
grid-area: title-start-contact / col-start / title-end-contact / col-sep 12;
|
||||
}
|
||||
|
||||
div#jardin{
|
||||
grid-area: row-start / col-sep 1 / jardin-end / col-sep 11;
|
||||
}
|
||||
|
||||
nav#menu{
|
||||
position: fixed;
|
||||
width: 100%;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
padding-bottom: 1rem;
|
||||
background-color: --day-background;
|
||||
z-index: 1;
|
||||
border-top: black 1px dashed;
|
||||
}
|
||||
|
||||
nav#menu ul{
|
||||
list-style: none;
|
||||
flex-direction: row;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div#txt_connaissance ul{
|
||||
padding-left: 0px;
|
||||
list-style-position: inside;
|
||||
margin-bottom: var(--med_margin);
|
||||
}
|
||||
|
||||
.icone > pre{
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
#illustration-accueil > pre.center{
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
div#orsay{
|
||||
display: none;
|
||||
}
|
||||
|
||||
div#rennes{
|
||||
grid-area: illu-start 1 / col-sep 1 / illu-end 1 / col-sep 11;
|
||||
border: 1px solid black;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
div#rennes pre{
|
||||
margin-top: -5px;
|
||||
margin-bottom: -5px;
|
||||
}
|
||||
|
||||
pre{
|
||||
font-size: 0.95rem;
|
||||
}
|
||||
|
||||
#txt_infras, #txt_outils, #txt_connaissance{
|
||||
text-align: left;
|
||||
hyphens: none;
|
||||
margin-top: 0;
|
||||
hyphens: none;
|
||||
word-spacing: -2px;
|
||||
-ms-hyphens: none;
|
||||
-webkit-hyphens: none;
|
||||
-moz-hyphens: none;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
p#txt_infras{
|
||||
background-color: var(--txt_infras);
|
||||
grid-area: txt-start 1 / col-sep 1 / txt-end 1 / col-sep 11;
|
||||
}
|
||||
|
||||
div#txt_outils{
|
||||
background-color: var(--txt_outils);
|
||||
grid-area: txt-start 2 / col-sep 1 / txt-end 2 / col-sep 11;
|
||||
}
|
||||
|
||||
div#txt_connaissance{
|
||||
grid-area: txt-start-contact / col-sep 1 / txt-end-contact / col-sep 11;
|
||||
}
|
||||
|
||||
div#ordinateur {
|
||||
display: none;
|
||||
}
|
||||
|
||||
section#liste_outils {
|
||||
display: block;
|
||||
}
|
||||
|
||||
section#liste_outils{
|
||||
grid-area: illu-start 2 / col-start / illu-end 2 / col-sep 12;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
section#liste_outils pre{
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
section#liste_outils > a > div{
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
div#ronce{
|
||||
grid-area: illu-start 3 / col-sep 1 / illu-end 3 / col-sep 11;
|
||||
border: none;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
#coop, #autonomie, #solidarite, #liberte{
|
||||
padding: 1rem;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
#suivre{
|
||||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
section#liste_valeurs{
|
||||
grid-area: txt-start 3 / col-sep 1 / txt-end 3 / col-sep 11;
|
||||
}
|
||||
|
||||
section#liste_valeurs .description{
|
||||
display: none;
|
||||
}
|
||||
|
||||
div#calendrier{
|
||||
grid-area: txt-end-contact / col-sep 1 / cal-end-contact / col-sep 11;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div#calendrier > pre.center {
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
footer pre.center{
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
#liens{
|
||||
text-align: center;
|
||||
margin-bottom: 12rem;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* En vrac */
|
||||
div#calendrier > pre.center{
|
||||
justify-content: right;
|
||||
}
|
||||
|
||||
#calendrier #mois_actuel{
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
#mois_actuel, #mois_suivant{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.highlight{
|
||||
color: var(--day-highlight-color);
|
||||
background-color: var(--day-highlight-bg);
|
||||
}
|
||||
|
||||
#txt_connaissance li{
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
|
||||
#txt_connaissance p{
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
|
||||
#txt_infras, #txt_outils, #txt_connaissance{
|
||||
line-height: 1.3rem;
|
||||
text-align: justify;
|
||||
text-justify: inter-character;
|
||||
hyphens: auto;
|
||||
word-spacing: -2px;
|
||||
-ms-hyphens: auto;
|
||||
-webkit-hyphens: auto;
|
||||
-moz-hyphens: auto;
|
||||
margin-top: 0;
|
||||
}
|
263
static/css/layout.css
Normal file
|
@ -0,0 +1,263 @@
|
|||
/*PARAMETRES GENERAUX*/
|
||||
:root{
|
||||
--big_margin:100px;
|
||||
--med_margin:50px;
|
||||
--small_margin:10px;
|
||||
--day-background: #fdfff9;
|
||||
--day-highlight-color: white;
|
||||
--day-highlight-bg: darkgreen;
|
||||
--night-highlight-color: #ebebed;
|
||||
--night-highlight-bg: #565a4d;
|
||||
--night-background: #242526;/*#3c3c39;*/
|
||||
--txt-night: #ebebed;/*#c7c4d4;*/
|
||||
color-scheme: light dark;
|
||||
/*
|
||||
--menu: pink;
|
||||
--jardin: darkseagreen;
|
||||
--infras: gold;
|
||||
--rennes: orange;
|
||||
--orsay: chartreuse;
|
||||
--txt_infras: bisque;
|
||||
--outils: coral;
|
||||
--liste_outils: aliceblue;
|
||||
--txt_outils: aquamarine;
|
||||
--valeurs: grey;
|
||||
--ronce: cornflowerblue;
|
||||
--liste_valeurs: brown;
|
||||
--connaissance: chocolate;
|
||||
--txt_connaissance: crimson;
|
||||
--calendrier: darkkhaki;
|
||||
--footer: deeppink;
|
||||
--lightgrey: lightgrey;*/
|
||||
|
||||
}
|
||||
|
||||
/* PAR DEFAUT */
|
||||
html, body, main{
|
||||
margin:0;
|
||||
padding: 0;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
body{
|
||||
font-family: monospace;
|
||||
color: black;
|
||||
background-color: var(--day-background);
|
||||
}
|
||||
|
||||
pre{
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
p{
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
a{
|
||||
color: darkgreen;
|
||||
}
|
||||
|
||||
|
||||
nav ul{
|
||||
list-style: none;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
h1:after, h2:after{
|
||||
content:'\A___________________________________\A"""""""""""""""""""""""""""""""""""';
|
||||
}
|
||||
|
||||
h2, h1{
|
||||
font-size: 1rem;
|
||||
font-weight: normal;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
h2, h1{
|
||||
text-transform: uppercase;
|
||||
white-space:pre;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
img{
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.noscroll{
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*GESTION DE LA GRILLE DU DOCUMENT*/
|
||||
div#container{
|
||||
display: grid;
|
||||
grid-template-columns: [main-col-start] repeat(12, calc(100% / 12) [main-col-sep]);
|
||||
grid-template-rows:
|
||||
[main-row-debut] var(--med_margin) [header-start] auto [header-end] var(--big_margin) [core-start] auto [main-row-fin]
|
||||
var(--big_margin)
|
||||
[footer-start] auto [footer-end]
|
||||
;
|
||||
}
|
||||
|
||||
/* EN-TETE */
|
||||
header {
|
||||
grid-area: header-start / main-col-sep 1 / header-end / main-col-sep 12;
|
||||
}
|
||||
|
||||
/* PIED DE PAGE */
|
||||
footer {
|
||||
background-color: var(--footer);
|
||||
grid-area: footer-start / main-col-start / footer-end / main-col-sep 12;
|
||||
}
|
||||
|
||||
#liens{
|
||||
text-align: center;
|
||||
margin-bottom: var(--med_margin)
|
||||
}
|
||||
|
||||
/* MENU */
|
||||
nav#menu{
|
||||
background-color: var(--day-background);
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
flex-direction: column;
|
||||
position: fixed;
|
||||
bottom: 1rem;
|
||||
right: 1rem;
|
||||
}
|
||||
|
||||
.icone > pre{
|
||||
padding-top: 1rem;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.icone{
|
||||
position : relative;
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.icone .img_top{
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 99;
|
||||
background-color: var(--day-background);
|
||||
color: darkgreen;
|
||||
}
|
||||
|
||||
.icone:hover .img_top{
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.icone a{
|
||||
text-decoration: none;
|
||||
color:black;
|
||||
}
|
||||
|
||||
nav#menu > a{
|
||||
display: block;
|
||||
color: black;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
nav#menu > a:hover{
|
||||
color: darkgreen;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* ILLUSTRATIONS ASCII (Y COMPRIS FOOTER) */
|
||||
pre.center{
|
||||
font-size: 1rem;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
pre.hide {
|
||||
display: none;
|
||||
}
|
||||
pre.center > a{
|
||||
font-size: 1rem;
|
||||
display: contents;
|
||||
text-decoration: 1px black solid;
|
||||
}
|
||||
|
||||
/* RESPONSIVE */
|
||||
/* Tablettes */
|
||||
@media (max-width: 1500px) and (min-width: 801px) {
|
||||
h2, h1{
|
||||
font-size: 1rem;
|
||||
font-weight: normal;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
text-transform: uppercase;
|
||||
white-space:pre;
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
/* Smartphones */
|
||||
@media (max-width: 800px) {
|
||||
:root{
|
||||
--big_margin:50px;
|
||||
--med_margin:25px;
|
||||
--small_margin:5px;
|
||||
}
|
||||
|
||||
h1:before, h1:after{
|
||||
content: '';
|
||||
}
|
||||
|
||||
h2:before{
|
||||
content: '______________________________________________________________________\A""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""\A* ';
|
||||
}
|
||||
|
||||
h2:after{
|
||||
content: ' *\A______________________________________________________________________\A""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""';
|
||||
}
|
||||
|
||||
h2, h1{
|
||||
font-size: 1rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h2, h1{
|
||||
text-transform: uppercase;
|
||||
white-space: pre;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* THEME SOMBRE */
|
||||
@media (prefers-color-scheme: dark) {
|
||||
div#container, nav#menu, body{
|
||||
background-color: var(--night-background);
|
||||
}
|
||||
p, pre, ul, li, a, a:hover, h1, h2, footer{
|
||||
color: var(--txt-night);
|
||||
}
|
||||
.highlight{
|
||||
color: var(--night-highlight-color);
|
||||
background-color: var(--night-highlight-bg);
|
||||
}
|
||||
.icone > pre{
|
||||
color: var(--txt-night);
|
||||
}
|
||||
.icone .img_top{
|
||||
background-color: var(--night-background);
|
||||
color: var(--txt-night);
|
||||
}
|
||||
.icone a{
|
||||
color: var(--txt-night);
|
||||
}
|
||||
div#ronce, #coop, #autonomie, #solidarite, #liberte, nav#menu, div#rennes, div#orsay{
|
||||
border-color: var(--txt-night);
|
||||
}
|
||||
}
|
||||
|
20
static/css/page-generic.css
Normal file
|
@ -0,0 +1,20 @@
|
|||
/*GESTION DE LA GRILLE D'UNE PAGE DE TEXTE LEGAL/INFO/BORRING */
|
||||
main {
|
||||
grid-area: core-start / main-col-sep 3 / main-row-fin / main-col-sep 9;
|
||||
}
|
||||
|
||||
/* Tablettes */
|
||||
@media (max-width: 1500px) and (min-width: 801px) {
|
||||
main {
|
||||
grid-area: core-start / main-col-sep 1 / main-row-fin / main-col-sep 11;
|
||||
}
|
||||
}
|
||||
|
||||
/* Smartphones */
|
||||
@media (max-width: 800px) {
|
||||
main {
|
||||
grid-area: core-start / main-col-start / main-row-fin / main-col-sep 12;
|
||||
}
|
||||
}
|
||||
|
||||
|
65
static/evenements_passes.html
Normal file
|
@ -0,0 +1,65 @@
|
|||
<!-- Liste des evenements passés -->
|
||||
<!-- SEPTEMBRE -->
|
||||
<!--<li role="none"><a href="https://freedomnotfear.org/">Freedom not Fear</a> au Mundo B (Bruxelles), <span class="highlight">du 2 au 5 septembre.</span><br>Conférence pour défendre les libertés fondamentales dans le numérique : échanges sur le cadre légal au niveau européen, rencontre avec des députés.</li>
|
||||
<li role="none"><a href="https://www.laquadrature.net/agenda/">Quadr'apéro</a> à La Quadrature du Net (Paris), <span class="highlight">le 15 septembre à 19h.</span><br>Rencontre mensuelle avec la Quadrature, échange sur les libertés fondamentales et point sur les actions de LQDN.</li>
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/25967">Cafés du libre</a> au Café Citoyen (Lille), <span class="highlight">le 27 septembre à 20h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée par Chtinux le dernier mardi de chaque mois. Vous pourrez y rencontrer Adrien.</li>
|
||||
-->
|
||||
<!-- OCTOBRE -->
|
||||
<!--<li role="none"><a href="https://agiralyon.fr/">Festival Agir à Lyon</a> à la Maison pour tous des Rancy (Lyon), <span class="highlight">le 9 octobre.</span><br>Festival organisé par Anciela pour agir pour la transition écologique et solidaire. Quentin présentera notre vision de la sobriété numérique avec Commown et Telecoop.</li>
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/26101">Permanence associative autour du libre</a> au Café Citoyen (Lille), <span class="highlight">le 25 octobre à 20h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée par <a href="https://raoull.org/">Raoull</a> et Deuxfleurs le dernier mardi de chaque mois. Vous pourrez y rencontrer Adrien.</li>
|
||||
<li role="none"><a href="https://pad.deuxfleurs.fr/form/#/2/form/view/mAscGaMNHcBlHs1H30bP-tqOsGrP-kLkGvFipK+EuvE/embed/">Permanence Deuxfleurs</a> à Bricologis, Vaulx en Velin (proche Lyon), <span class="highlight">le 29 octobre de 14h à 16h.</span><br>Deuxfleurs organise sa première permanence avec Bricologis pour vous aider à transitionner vers un Internet éthique ! L'inscription est requise en cliquant sur le lien ci-dessus.</li>
|
||||
-->
|
||||
<!-- NOVEMBRE -->
|
||||
<!--
|
||||
<li role="none"><a href="https://capitoledulibre.org/">Capitole du Libre</a> à l'ENSEEIHT (Toulouse), <span class="highlight">le 19 et 20 novembre.</span><br>Conférence annuelle dédiée au logiciel libre, ouverte à tout public et ceci gratuitement. Vincent y présentera le logiciel Garage et ses impacts sur l'hébergement de services.</li>
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/26185">Permanence associative autour du libre</a> au Café Citoyen (Lille), <span class="highlight">le 29 novembre à 20h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée par Raoull et Deuxfleurs le dernier mardi de chaque mois. Vous pourrez y rencontrer Adrien.</li>
|
||||
-->
|
||||
<!-- JANVIER -->
|
||||
<!--<li role="none"><a href="https://flechedor.org/agenda/2023-01-14-technopolice-jo-securitaires-l-etau-se-resserre">Soirée Technopolice</a> à la Flèche d'Or (Paris), <span class="highlight">le 14 janvier à 18h.</span><br>Soirée de présentation, débats, et ateliers dans le cadre de l'initiative Technopolice créée par la Quadrature du Net, particulièrement centrée sur l'organisation des Jeux Olympiques de 2024. Vous pourrez y rencontrer Vincent.</li>
|
||||
<li role="none"><a href="https://formation.emancipasso.net/Programme">Formation Émancip'asso</a> à la Fondation FPH (Paris), <span class="highlight">du 16 au 20 janvier.</span><br>Constatant que les hébergeurs éthiques sont peu nombreux à proposer des solutions prenant en compte les besoins des associations, et notamment l’accompagnement nécessaire pour mener à bien une démarche de transition vers des outils numériques libres, le projet Emancip’Asso souhaite accompagner la montée en compétence des hébergeurs de services alternatifs en leur proposant une formation. La formation est privée mais vous pouvez rencontrer Quentin en soirée ou nous écrire pour partager les besoins numérique de votre association.</li>
|
||||
<li role="none"><a href="https://tmci.fr/wp-content/uploads/2022/12/programme-llpt-21-01-2023.pdf">Logiciel libre pour Tout</a> au Centre Municipal de Loisirs (Tarare), <span class="highlight">le 21 janvier de 10h à 17h.</span><br>TARARE MICRO Club Informatique organise une journée informatique libre, grand public et pour les associations. Au programme : ateliers, conférences, projection de film. Deuxfleurs y proposera des ateliers et vous pourrez rencontrer Quentin.
|
||||
</li>-->
|
||||
<!-- FEVRIER -->
|
||||
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/AG_DF_2023">Assemblée générale ordinaire</a> en ligne, <span class="highlight">le 12 février à 15h.</span><br>Comme chaque année, l'association Deuxfleurs organise son assemblée générale. Divers sujets seront abordés, avec notamment l'élection du nouveau bureau pour un an. Vous pourrez y voir tous les membres ou presque.
|
||||
</li>
|
||||
|
||||
<li role="none"><a href="http://www.salonprimevere.org/">Salon Primevère</a> à Eurexpo (Lyon), <span class="highlight">du 17 au 19 février.</span><br> Organisé par une association et réalisé par 300 bénévoles, le salon Primevère a pour ambition de réunir les acteurs de l’écologie pour présenter des alternatives militantes cohérentes et éthiques à la société actuelle, dans une ambiance conviviale. Vous pourrez y rencontrer Quentin au stand de Hadoly dans l'espace numérique.
|
||||
</li>-->
|
||||
<!-- MARS -->
|
||||
<!--<li role="none"><a href="#">Atelier Brico #1</a> à Bricologis (Vaulx-en-Velin), <span class="highlight">le 18 mars.</span><br> Deuxfleurs organise un atelier à Bricologis à Vaulx-en-Velin pour découvrir le concept de système d'exploitation (OS), pourquoi ça impacte notre rapport à l'informatique, et comprendre ce que les alternatives comme Ubuntu peuvent nous apporter. Inscription possible prochainement.
|
||||
</li>
|
||||
<li role="none"><a href="https://www.lirelasociete.com/evenement-journee-du-livre-politique">32ème journée du livre politique</a> à l'Assemblée Nationale (Paris), <span class="highlight">le 25 mars.</span><br> Journée de tables rondes en présence d'élus ou ex-élus, sur le sujet «Réseaux sociaux : alliés ou ennemis de la démocratie ?». Vous pourrez y trouver Vincent.</li>
|
||||
<li role="none"><a href="http://perso.ens-lyon.fr/laurent.lefevre/greendayslyon2023/">Green Days</a> à l'ENS (Lyon), <span class="highlight">le 27 et 28 mars.</span> (Inscription obligatoire, évènement académique). En 2023, la problématique d'un numérique plus éco-responsable recouvre différentes facettes et de nombreux scientifiques adressent ces sujets dans leurs communautés respectives. Il est temps de se rencontrer et de mettre en commun nos forces de recherche pour amplifier les impacts des travaux et réduire les impacts énergétiques et environnementaux du numérique.
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/26938">Permanence du libre</a> au Café Citoyen (Lille), <span class="highlight">le 28 mars de 20h à 23h.</span><br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois par les associations Chtinux, Raoull & Deuxfleurs, avec l'amicale participation de Mycélium, CLX et Cliss XXI.</li>-->
|
||||
<!-- Avril -->
|
||||
<!--<li role="none"><a href="https://www.jdll.org/">Journées Du Logiciel Libre</a> à La Maison Pour Tous (Lyon), <span class="highlight">le 1er et 2 avril.</span><br> Deuxfleurs présentera une conférence intitulée "Entre-hébergement : envisagez l'auto-hébergement collectivement !" et sera présente sur l'évènement le week-end, entre autre sur le stand Hadoly. Vous pourriez y rencontrer Esther ou Quentin.</li>
|
||||
<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 4 avril à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne pas trop formalisé pour discuter de ce qui se passe. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
|
||||
<li role="none"><a href="https://www.bricologis.com/">Atelier Brico #2</a> à Bricologis (Vaulx-en-Velin), <span class="highlight">le 15 avril.</span><br> Deuxfleurs organise un atelier à Bricologis à Vaulx-en-Velin pour découvrir comment démonter un ordinateur, ses composants, et que faire pour le faire durer plus longtemps. Contactez Bricologis directement pour vous inscrire en amont.</li>-->
|
||||
<!-- Mai -->
|
||||
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 2 mai à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
|
||||
<li role="none"><a href="https://lerize.villeurbanne.fr/agenda/tisser-la-toile-du-web-avec-des-chatons_040523/">Tisser la toile du web avec des CHATONS</a> au Rize (Villeurbane), <span class="highlight">le 4 mai de 18h30 à 20h30</span>.<br> Et si plutôt que de dépendre des quelques silos des géants du numérique nous revenions à un réseau internet décentralisé et résilient ? Si nous imaginions une AMAP du numérique, humaine, locale, libre et éthique ? C’est possible grâce aux CHATONS, un collectif d’hébergeurs propulsé par l’association Framasoft depuis 2016 !</li>
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/27478">Permanence associative autour du Libre</a> à Lille, <span class="highlight">le 31 mai à 20h</span>.<br>
|
||||
La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois par les associations Chtinux, Raoull & Deuxfleurs, avec l'amicale participation de Mycélium, CLX et Cliss XXI. Rejoignez-nous au Café Citoyen !-->
|
||||
<!-- Juin -->
|
||||
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 6 juin à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
|
||||
<li role="none"><a href="https://programme.passageenseine.fr/">Pas Sage En Seine</a> à la Médiathèque Aragon (Choisy-le-Roi), <span class="highlight">du 15 au 17 juin</span>.<br> Le festival Pas Sage En seine est un rendez-vous annuel de la région parisienne. Lieu incontournable du milieu hacker à ses débuts, il a toujours eu pour vocation d’amener les citoyens de tous horizons à se réapproprier la société en bidouillant le système. Vincent y présentera comment "Surmonter les difficultés de l’auto-hébergement ensemble avec Garage".</li>
|
||||
<li role="none"><a href="https://www.maison-environnement.fr/desconnexions-une-journee-pour-aborder-en-famille-ou-entre-ami-es-les-enjeux-du-numerique-a-la-maison-de-lenvironnement-le-samedi-17-juin/">De(s)connexions</a> à la Maison de l'Environnement (Lyon), <span class="highlight">le 17 juin de 10h à 18h</span>.<br> Une journée pour aborder les enjeux et impacts, positifs et négatifs, du numérique ! Quentin y proposera une animation "technocritique".</li>
|
||||
<li role="none"><a href="#">Barcamp Interne</a> en Auvergne, <span class="highlight">le 24 et 25 juin</span>.<br> Les membres de Deuxfleurs prennent le temps de se retrouver et de discuter de l'association.</li>-->
|
||||
<!-- Septembre -->
|
||||
<!--<li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 5 septembre à 19h</span>.<br> Un fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li>
|
||||
<li role="none"><a href="https://www.agendamilitant.org/Affaire-du-8-decembre-antiterrorisme-et-criminalisation-du-chiffrement.html">Soirée affaire du «8 décembre» </a> à la bourse du travail à Paris, <span class="highlight"> le 25 septembre à 19h00</span>.<br>Soirée de discussion autour de la criminalisation du chiffrement à l’œuvre dans l’affaire du «8 décembre», en présence de la Quadrature du Net, N0thing2Hide, le SNJ, et les avocat·es concernés. Vous pourrez y trouver Vincent.</li>
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/28118">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 26 septembre à 20h00</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois par les associations Chtinux, Raoull et Deuxfleurs, avec l'amicale participation de Mycélium, CLX et Cliss XXI. Vous pourrez y croiser Adrien.</li>
|
||||
<li role="none"><a href="https://www.agendadulibre.org/events/28178">Quadrapéro</a> au Garage de la Quadrature de Net, <span class="highlight">le 29 septembre à 19h00</span>.<br>Apéritif convivial pour discuter des divers enjeux en cours autour des droits et libertés numériques, en présence de membres de la Quadrature du Net et de bien autres intéressés. Vous y verrez Vincent.</li>
|
||||
<li role="none"><a href="https://venissieux.fr/blog/agenda/le-grand-rendez-vous/">Grand RDV</a> Salle Irène Joliot-Curie à Vénissieux, <span class="highlight">le 30 septembre à 9h00</span>.<br>Nous y tiendrons un stand Deuxfleurs sur le "numérique durable" où nous parlerons d'obsolescence dans le numérique et des solutions qu'on explore. Vous y verrez Quentin et Léa.</li>-->
|
||||
<!-- Octobre -->
|
||||
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle "au coin du feu"</a> en ligne, <span class="highlight">le 3 octobre à 19h00</span>.<br> Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li> -->
|
||||
<!-- <li role="none"><a href="https://forum.chatons.org/t/assemblee-constituante-du-14-10-23-a-paris-vincennes-objet-gouvernance-moderation-continuite/5163">Assemblée pour les CHATONS</a> à Paris VIII, <span class="highlight">le 14 octobre à 9h</span>.<br> (Réservé en priorité aux CHATONS) Nous serons à Paris pour discuter de l'avenir du collectif le temps d'une journée.</li> -->
|
||||
<!-- <li role="none"><a href="https://www.agendadulibre.org/events/28119">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 31 octobre à 20h00</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois, et regroupant les collectifs Chtinux, Raoull, Deuxfleurs, Mycélium, CLX et Cliss XXI.</li> -->
|
||||
<!-- Novembre -->
|
||||
<!-- <li role="none"><a href="https://www.agendadulibre.org/events/28442">Quadrapéro</a> au Garage de la Quadrature de Net, <span class="highlight">le 3 novembre à 19h00</span>. <br>Apéritif convivial pour discuter des divers enjeux en cours autour des droits et libertés numériques, en présence de membres de la Quadrature du Net et de bien autres intéressés. Vous y verrez Vincent.</li> -->
|
||||
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/r%C3%A9union_mensuelle_deuxfleurs">Réunion mensuelle «au coin du feu»</a> en ligne, <span class="highlight">le 7 novembre à 19h00</span>. <br>Une fois par mois nous organisons une réunion en ligne informelle. C'est le bon moment pour venir faire un coucou si vous voulez parler à des gens de vive voix numérique.</li> -->
|
||||
<!-- <li role="none"><a href="https://capitoledulibre.org/">Capitole du Libre</a> à l'ENSEEIHT (Toulouse), <span class="highlight">le 18 et 19 novembre</span>. <br>Conférence annuelle dédiée au logiciel libre et à sa communauté, ouverte à tout public, et ceci gratuitement. N'hésitez pas à venir discuter avec Vincent.</li> -->
|
||||
<!-- <li role="none"><a href="https://jitsi.deuxfleurs.fr/infra">Réunion mensuelle d'infrastructure</a> en ligne, <span class="highlight">le 22 novembre à 19h00</span>. <br>Point mensuel en visioconférence où l'on aborde toutes les questions techniques qui méritent notre attention, concernant notre infrastructure ou nos services.</li> -->
|
||||
<!-- <li role="none"><a href="https://www.agendadulibre.org/events/28120">Permanence associative autour du Libre</a> au Café Citoyen à Lille, <span class="highlight">le 28 novembre à 20h00</span>.<br>La permanence associative autour du Libre est une manifestation conviviale, ouverte à toutes et tous, organisée le dernier mardi de chaque mois, et regroupant les collectifs Chtinux, Raoull, Deuxfleurs, Mycélium, CLX et Cliss XXI.</li> -->
|
||||
|
||||
|
BIN
static/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
static/img/deuxfleurs-common-ratio.jpg
Normal file
After Width: | Height: | Size: 228 KiB |
BIN
static/img/deuxfleurs-rect.jpg
Normal file
After Width: | Height: | Size: 230 KiB |
BIN
static/img/deuxfleurs-square.jpg
Normal file
After Width: | Height: | Size: 247 KiB |
BIN
static/img/favicon.ico
Normal file
After Width: | Height: | Size: 15 KiB |
1398
static/index.html
Normal file
0
static/mentions.html
Normal file
13
static/r/rdv23
Normal file
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Redirection automatique en HTML</title>
|
||||
<meta http-equiv="refresh" content="0; URL=https://guide.deuxfleurs.fr/formations/rdv-2023/">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<p>Cette page est une redirection vers : <a href="https://guide.deuxfleurs.fr/formations/rdv-2023/">Vénissieux Grand RDV 2023</a></p>
|
||||
</body>
|
||||
|
||||
</html>
|
0
static/risques.html
Normal file
BIN
static/ronce.webp
Normal file
After Width: | Height: | Size: 416 KiB |
44
static/script-bon.js
Normal file
|
@ -0,0 +1,44 @@
|
|||
// dictionary to keep track of frame count for each animation
|
||||
let frameCounts = {};
|
||||
|
||||
function animate(id, delay) {
|
||||
|
||||
// get the container and frames for the amination
|
||||
const container = document.getElementById(id);
|
||||
const frames = container.children;
|
||||
|
||||
// set up the frame counter
|
||||
frameCounts[id] = 0;
|
||||
|
||||
// hide all frames except for the first
|
||||
frames[0].style.display = "flex";
|
||||
for (let i = 1; i < frames.length; i++) {
|
||||
frames[i].style.display = "none";
|
||||
}
|
||||
|
||||
// start the animation
|
||||
const interval = setInterval(updateAnimation, delay, id, frames, frames.length);
|
||||
|
||||
}
|
||||
|
||||
function updateAnimation(id, frames, totalFrames) {
|
||||
|
||||
// increment the frame counter for the given id
|
||||
frameCounts[id] = (frameCounts[id] + 1) % totalFrames;
|
||||
|
||||
// show the next frame
|
||||
frames[frameCounts[id]].style.display = "flex";
|
||||
|
||||
// hide the previous frame
|
||||
if (frameCounts[id] == 0) {
|
||||
frames[totalFrames - 1].style.display = "none";
|
||||
} else {
|
||||
frames[frameCounts[id] - 1].style.display = "none";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
animate("illustration-accueil", 500);
|
||||
animate("rennes", 1000);
|
||||
animate("orsay", 2000);
|
||||
animate("parterre", 1500);
|