forked from Deuxfleurs/site
Rework website structure
This commit is contained in:
parent
ef35a40059
commit
2ea473d3bd
23 changed files with 132 additions and 87 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,2 +1,3 @@
|
||||||
static/
|
static/
|
||||||
node_modules/
|
node_modules/
|
||||||
|
*.swp
|
||||||
|
|
1
.webpull
1
.webpull
|
@ -1,4 +1,3 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
rm -rf static/
|
|
||||||
npm install
|
npm install
|
||||||
node render.js
|
node render.js
|
||||||
|
|
62
render.js
62
render.js
|
@ -10,7 +10,7 @@ const log = process.env.VERBOSE ? console.log : unit
|
||||||
const walk = async (path, filename) => {
|
const walk = async (path, filename) => {
|
||||||
log('[walk]', path)
|
log('[walk]', path)
|
||||||
const type = await fs.lstat(path)
|
const type = await fs.lstat(path)
|
||||||
if (type.isFile()) return {type: 'file', path: path, name: filename || path}
|
if (type.isFile()) return {type: 'file', path: path, name: filename || path, tags:[]}
|
||||||
if (!type.isDirectory()) return null
|
if (!type.isDirectory()) return null
|
||||||
|
|
||||||
const files = await fs.readdir(path)
|
const files = await fs.readdir(path)
|
||||||
|
@ -18,6 +18,7 @@ const walk = async (path, filename) => {
|
||||||
type: 'folder',
|
type: 'folder',
|
||||||
path: path,
|
path: path,
|
||||||
name: filename || path,
|
name: filename || path,
|
||||||
|
tags: [],
|
||||||
children: await Promise.all(files.map(file => walk(`${path}/${file}`, file)))
|
children: await Promise.all(files.map(file => walk(`${path}/${file}`, file)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +33,7 @@ const is_static = suffixl(...ext_static)
|
||||||
const is_md = suffixl(...ext_md)
|
const is_md = suffixl(...ext_md)
|
||||||
const is_pug = suffixl(...ext_pug)
|
const is_pug = suffixl(...ext_pug)
|
||||||
const is_templated = f => is_md(f) /* || is_rst(f) */
|
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 prefix = file => ext => file.substring(0, ext.length) == ext ? ext : null
|
||||||
const prefixl = (...l) => file => l.find(prefix(file))
|
const prefixl = (...l) => file => l.find(prefix(file))
|
||||||
|
@ -54,12 +56,41 @@ const propagate_md_layout = (tree, markdown_template) => {
|
||||||
const elagate = tree => {
|
const elagate = tree => {
|
||||||
if (tree.type != 'folder') return tree
|
if (tree.type != 'folder') return tree
|
||||||
|
|
||||||
const lh = e => log('[elegate]', e.path) && false
|
const lh = e => log('[elagate]', e.path) && false
|
||||||
tree.children = tree.children.filter(e => !(e.name[0] == '_') || lh(e))
|
tree.children = tree.children.filter(e => !(e.name[0] == '_') || lh(e))
|
||||||
tree.children.forEach(elagate)
|
tree.children.forEach(elagate)
|
||||||
return tree
|
return tree
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const tag_document = tree => {
|
||||||
|
if (tree.type == 'file' && is_document(tree.name)) {
|
||||||
|
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 propagate_nice_name = prefix => tree => {
|
||||||
const without_prefix = tree.path.substring(prefix.length)
|
const without_prefix = tree.path.substring(prefix.length)
|
||||||
const splitted = without_prefix.split('/').filter(v => v.length > 0)
|
const splitted = without_prefix.split('/').filter(v => v.length > 0)
|
||||||
|
@ -90,10 +121,12 @@ const prepare_copy = (old_prefix, new_prefix, exts) => tree => {
|
||||||
|
|
||||||
const prepare_pug = (old_prefix, new_prefix) => tree => {
|
const prepare_pug = (old_prefix, new_prefix) => tree => {
|
||||||
if (tree.type == 'file' && is_pug(tree.name)) {
|
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 = {
|
tree.generate = {
|
||||||
cmd: 'pug',
|
cmd: 'pug',
|
||||||
src: tree.path,
|
src: tree.path,
|
||||||
out: new_prefix + rm_prefix(old_prefix)(rm_suffix(...ext_pug)(tree.path)) + '.html'
|
out: new_prefix + tree.url
|
||||||
}
|
}
|
||||||
log('[prepare_pug]',tree.generate.src,'->',tree.generate.out)
|
log('[prepare_pug]',tree.generate.src,'->',tree.generate.out)
|
||||||
}
|
}
|
||||||
|
@ -106,11 +139,13 @@ const prepare_pug = (old_prefix, new_prefix) => tree => {
|
||||||
|
|
||||||
const prepare_md = (old_prefix, new_prefix) => tree => {
|
const prepare_md = (old_prefix, new_prefix) => tree => {
|
||||||
if (tree.type == 'file' && is_md(tree.name)) {
|
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 = {
|
tree.generate = {
|
||||||
cmd: 'pug',
|
cmd: 'pug',
|
||||||
src: tree.template.path,
|
src: tree.template.path,
|
||||||
markdown: tree.path,
|
markdown: tree.path,
|
||||||
out: new_prefix + rm_prefix(old_prefix)(rm_suffix(...ext_md)(tree.path)) + '.html'
|
out: new_prefix + tree.url
|
||||||
}
|
}
|
||||||
log('[prepare_md]',tree.generate.markdown,'+',tree.generate.src,'->',tree.generate.out)
|
log('[prepare_md]',tree.generate.markdown,'+',tree.generate.src,'->',tree.generate.out)
|
||||||
}
|
}
|
||||||
|
@ -170,16 +205,35 @@ const do_pug = (prt, root) => async tree => {
|
||||||
return tree
|
return tree
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const rm_tree = t => {
|
||||||
|
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).then(rm_tree).then(_ => tree)
|
||||||
|
|
||||||
const conf = { src: './src', dest: './static'}
|
const conf = { src: './src', dest: './static'}
|
||||||
walk(conf.src)
|
walk(conf.src)
|
||||||
.then(propagate_md_layout)
|
.then(propagate_md_layout)
|
||||||
.then(elagate)
|
.then(elagate)
|
||||||
|
.then(tag_document)
|
||||||
|
.then(reference_index(['index.md', 'index.pug']))
|
||||||
.then(propagate_nice_name(conf.src))
|
.then(propagate_nice_name(conf.src))
|
||||||
.then(prepare_copy(conf.src, conf.dest))
|
.then(prepare_copy(conf.src, conf.dest))
|
||||||
.then(prepare_pug(conf.src, conf.dest))
|
.then(prepare_pug(conf.src, conf.dest))
|
||||||
.then(prepare_md(conf.src, conf.dest))
|
.then(prepare_md(conf.src, conf.dest))
|
||||||
.then(prepare_folder(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_folder)
|
||||||
.then(do_copy)
|
.then(do_copy)
|
||||||
.then(do_pug())
|
.then(do_pug())
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
### Statuts de l'association
|
|
||||||
|
|
||||||
Depuis janvier 2020, Deuxfleurs est constitué en association loi 1901.
|
|
||||||
Vous trouverez [ici](/Documentation/Association/Statuts/) les statuts de l'association.
|
|
||||||
|
|
||||||
### Comptes rendus d'AG
|
|
||||||
|
|
||||||
Les comptes-rendus d'AG sont disponibles aux liens suivants:
|
|
||||||
|
|
||||||
- [13 janvier 2020 (AG constitutive)](/Documentation/Association/AG1/)
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
extends ../_layout.pug
|
|
||||||
|
|
||||||
prepend root
|
|
||||||
- title = element.nice_path[element.nice_path.length - 1]
|
|
||||||
|
|
||||||
block content
|
|
||||||
.container.spacing
|
|
||||||
nav
|
|
||||||
strong
|
|
||||||
a(href="/Documentation") Documentation
|
|
||||||
+menu(root.children.find(e => e.nice_name == "Documentation"))
|
|
||||||
|
|
||||||
main.spacing
|
|
||||||
!= markdown
|
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
@ -37,7 +37,7 @@ Voilà les conclusions que nous avons tirées de nos tests :
|
||||||
|
|
||||||
Nous avons donc demandé à Adrien quels étaient les ports ouverts par défaut dans le mode élevé de sa box :
|
Nous avons donc demandé à Adrien quels étaient les ports ouverts par défaut dans le mode élevé de sa box :
|
||||||
|
|
||||||
![Livebox Parefeu Personnalisé](livebox_parefeu_personnalise.png)
|
![Livebox Parefeu Personnalisé](Assets/livebox_parefeu_personnalise.png)
|
||||||
|
|
||||||
Nous avons dans un premier temps retenu le port `995/tcp` pour Jitsi, le port UDP ne pouvant être changé (limitation de Jitsi).
|
Nous avons dans un premier temps retenu le port `995/tcp` pour Jitsi, le port UDP ne pouvant être changé (limitation de Jitsi).
|
||||||
Cependant, pour des raisons de sécurité, les navigateurs ne peuvent pas utiliser les ports en dessous de `1024/*`, à l'exception des ports `80/tcp` et `443/tcp` comme l'indique ;'issue [#3583](https://bugs.chromium.org/p/webrtc/issues/detail?id=3583) de Chromium.
|
Cependant, pour des raisons de sécurité, les navigateurs ne peuvent pas utiliser les ports en dessous de `1024/*`, à l'exception des ports `80/tcp` et `443/tcp` comme l'indique ;'issue [#3583](https://bugs.chromium.org/p/webrtc/issues/detail?id=3583) de Chromium.
|
||||||
|
@ -76,7 +76,7 @@ WebRTC fonctionne en deux étapes :
|
||||||
|
|
||||||
Le serveur de signaling Jitsi n'est autre que le serveur de chat prosody.
|
Le serveur de signaling Jitsi n'est autre que le serveur de chat prosody.
|
||||||
Pour ça, prosody est exposé à travers HTTP grâce au protocole BOSH (XMPP overs HTTPS).
|
Pour ça, prosody est exposé à travers HTTP grâce au protocole BOSH (XMPP overs HTTPS).
|
||||||
Une fois l'offre reçue ([exemple](exemple_offre.txt)), elle est enregistrée dans le navigateur à l'aide de `setRemoteDescription` pour initialiser le data plane.
|
Une fois l'offre reçue ([exemple](Assets/exemple_offre.txt)), elle est enregistrée dans le navigateur à l'aide de `setRemoteDescription` pour initialiser le data plane.
|
||||||
On peut débugger le signaling WebRTC sous Chromium avec [chrome://webrtc-internarls](chrome://webrtc-internals/).
|
On peut débugger le signaling WebRTC sous Chromium avec [chrome://webrtc-internarls](chrome://webrtc-internals/).
|
||||||
|
|
||||||
Quand plus de deux participants sont connectés dans la conversation, Jitsi n'envoie pas les offres de chaque participant aux autres participants. À la place, elle envoie qu'une seule offre, celle de son VideoBridge.
|
Quand plus de deux participants sont connectés dans la conversation, Jitsi n'envoie pas les offres de chaque participant aux autres participants. À la place, elle envoie qu'une seule offre, celle de son VideoBridge.
|
|
@ -16,9 +16,12 @@ block root
|
||||||
.menu-item
|
.menu-item
|
||||||
a(href='https://guichet.deuxfleurs.fr') compte
|
a(href='https://guichet.deuxfleurs.fr') compte
|
||||||
span |
|
span |
|
||||||
.menu-item
|
|
||||||
a(href='/Documentation') doc
|
|
||||||
span |
|
|
||||||
h1 #{title}
|
h1 #{title}
|
||||||
main
|
block main
|
||||||
block content
|
main
|
||||||
|
.container.spacing
|
||||||
|
nav
|
||||||
|
strong
|
||||||
|
a(href="/") Accueil
|
||||||
|
+menu(root)
|
||||||
|
block content
|
||||||
|
|
7
src/_markdown.pug
Normal file
7
src/_markdown.pug
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
extends ./_layout.pug
|
||||||
|
|
||||||
|
prepend root
|
||||||
|
- title = element.nice_path[element.nice_path.length - 1]
|
||||||
|
|
||||||
|
block content
|
||||||
|
!= markdown
|
|
@ -1,7 +1,13 @@
|
||||||
mixin menu(o)
|
mixin menu(o)
|
||||||
ul
|
ul
|
||||||
each val in o.children
|
each val in o.children
|
||||||
- if (val.type == 'folder')
|
- if (val.type == 'folder' && val.tags.includes('document'))
|
||||||
|
li
|
||||||
|
- if (val.tags.includes('has_index'))
|
||||||
|
a(href=val.url)= val.nice_name
|
||||||
|
- else
|
||||||
|
span= val.nice_name
|
||||||
|
+menu(val)
|
||||||
|
- else if (val.type == 'file' && val.tags.includes('document') && !val.tags.includes('is_index'))
|
||||||
li
|
li
|
||||||
a(href=val.url)= val.nice_name
|
a(href=val.url)= val.nice_name
|
||||||
+menu(val)
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ header > .container > .menu-item > img {
|
||||||
vertical-align: -9px;
|
vertical-align: -9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
header > .container > .menu-item > a,span {
|
header > .container > .menu-item > a, header > .container > .menu-item > span {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
|
|
@ -4,55 +4,55 @@ prepend root
|
||||||
- title = "deuxfleurs"
|
- title = "deuxfleurs"
|
||||||
|
|
||||||
block content
|
block content
|
||||||
.container.spacing
|
.chapeau ⇨ protège votre vie privée
|
||||||
.chapeau ⇨ protège votre vie privée
|
.chapeau ⇨ défend vos libertés et vos droits
|
||||||
.chapeau ⇨ défend vos libertés et vos droits
|
.chapeau ⇨ ne vous manipule pas
|
||||||
.chapeau ⇨ ne vous manipule pas
|
.chapeau ⇨ promeut la sobriété numérique
|
||||||
.chapeau ⇨ promeut la sobriété numérique
|
|
||||||
|
|
||||||
section.spacing
|
|
||||||
h2 nos services permettent de
|
|
||||||
.list
|
|
||||||
a.service-box.spacing(href='https://riot.deuxfleurs.fr')
|
|
||||||
div(style='font-size: 80px; height: 120px') 💬
|
|
||||||
h3 discuter
|
|
||||||
a.service-box.spacing(href='https://jitsi.deuxfleurs.fr')
|
|
||||||
div(style='font-size: 80px; height: 120px') 📞
|
|
||||||
h3 s'appeler
|
|
||||||
a.service-box.spacing(href='https://cloud.deuxfleurs.fr')
|
|
||||||
div(style='font-size: 80px; height: 120px') 🔒
|
|
||||||
h3 sauvegarder vos documents
|
|
||||||
a.service-box.spacing(href='https://sogo.deuxfleurs.fr')
|
|
||||||
div(style='font-size: 80px; height: 120px') 📨
|
|
||||||
h3 envoyer des emails
|
|
||||||
a.service-box.spacing(href='https://p.adnab.me')
|
|
||||||
div(style='font-size: 80px; height: 120px') 📄
|
|
||||||
h3 collaborer
|
|
||||||
a.service-box.spacing(href='documentation.html#site')
|
|
||||||
div(style='font-size: 80px; height: 120px') 🌐
|
|
||||||
h3 créer votre site
|
|
||||||
a.service-box.spacing(href='https://git.deuxfleurs.fr')
|
|
||||||
div(style='font-size: 80px; height: 120px') 💻
|
|
||||||
h3 coder
|
|
||||||
br
|
|
||||||
|
|
||||||
p.spacing ⚠️ Vous devez être membre pour utiliser ces services.
|
section.spacing
|
||||||
a(href="#nous-rejoindre") Nous rejoindre.
|
h2 nos services permettent de
|
||||||
|
.list
|
||||||
section.spacing
|
a.service-box.spacing(href='https://riot.deuxfleurs.fr')
|
||||||
h2 internet est politique
|
div(style='font-size: 80px; height: 120px') 💬
|
||||||
:markdown-it(linkify)
|
h3 discuter
|
||||||
L'IETF, l'organisme en charge de la standardisation d'internet, reconnait que les choix technologiques ont un impact sur les droits de l'homme [[RFC8280]](https://trac.tools.ietf.org/html/rfc8280).
|
a.service-box.spacing(href='https://jitsi.deuxfleurs.fr')
|
||||||
|
div(style='font-size: 80px; height: 120px') 📞
|
||||||
|
h3 s'appeler
|
||||||
|
a.service-box.spacing(href='https://cloud.deuxfleurs.fr')
|
||||||
|
div(style='font-size: 80px; height: 120px') 🔒
|
||||||
|
h3 sauvegarder vos documents
|
||||||
|
a.service-box.spacing(href='https://sogo.deuxfleurs.fr')
|
||||||
|
div(style='font-size: 80px; height: 120px') 📨
|
||||||
|
h3 envoyer des emails
|
||||||
|
a.service-box.spacing(href='https://p.adnab.me')
|
||||||
|
div(style='font-size: 80px; height: 120px') 📄
|
||||||
|
h3 collaborer
|
||||||
|
a.service-box.spacing(href='documentation.html#site')
|
||||||
|
div(style='font-size: 80px; height: 120px') 🌐
|
||||||
|
h3 créer votre site
|
||||||
|
a.service-box.spacing(href='https://git.deuxfleurs.fr')
|
||||||
|
div(style='font-size: 80px; height: 120px') 💻
|
||||||
|
h3 coder
|
||||||
|
br
|
||||||
|
|
||||||
section.spacing
|
p.spacing ⚠️ Vous devez être membre pour utiliser ces services.
|
||||||
h2 notre réponse
|
a(href="#nous-rejoindre") Nous rejoindre.
|
||||||
em à venir
|
|
||||||
|
section.spacing
|
||||||
|
h2 internet est politique
|
||||||
|
:markdown-it(linkify)
|
||||||
|
L'IETF, l'organisme en charge de la standardisation d'internet, reconnait que les choix technologiques ont un impact sur les droits de l'homme [[RFC8280]](https://trac.tools.ietf.org/html/rfc8280).
|
||||||
|
|
||||||
section.spacing
|
section.spacing
|
||||||
h2(id="nous-rejoindre") nous rejoindre
|
h2 notre réponse
|
||||||
p.spacing Nous fonctionnons actuellement selon un mode de cooptation qui nous permet d'une part de mieux contrôler l'utilisation des ressources et éviter les abus, et d'autre part de créer et garder un contact humain avec nos utilisateurs.
|
em à venir
|
||||||
p.spacing
|
|
||||||
| Si vous connaissez un membre de l'association, contactez le directement pour qu'il vous créer un compte.
|
section.spacing
|
||||||
br
|
h2(id="nous-rejoindre") nous rejoindre
|
||||||
| Sinon, vous pouvez nous écrire à coucou<img src="img/arobase.png" height="15"/>deuxfleurs.fr.
|
p.spacing Nous fonctionnons actuellement selon un mode de cooptation qui nous permet d'une part de mieux contrôler l'utilisation des ressources et éviter les abus, et d'autre part de créer et garder un contact humain avec nos utilisateurs.
|
||||||
|
p.spacing
|
||||||
|
| Si vous connaissez un membre de l'association, contactez le directement pour qu'il vous créer un compte.
|
||||||
|
br
|
||||||
|
| Sinon, vous pouvez nous écrire à coucou<img src="img/arobase.png" height="15"/>deuxfleurs.fr.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue