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/
|
||||
node_modules/
|
||||
*.swp
|
||||
|
|
1
.webpull
1
.webpull
|
@ -1,4 +1,3 @@
|
|||
#!/bin/bash
|
||||
rm -rf static/
|
||||
npm install
|
||||
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) => {
|
||||
log('[walk]', 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
|
||||
|
||||
const files = await fs.readdir(path)
|
||||
|
@ -18,6 +18,7 @@ const walk = async (path, filename) => {
|
|||
type: 'folder',
|
||||
path: path,
|
||||
name: filename || path,
|
||||
tags: [],
|
||||
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_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))
|
||||
|
@ -54,12 +56,41 @@ const propagate_md_layout = (tree, markdown_template) => {
|
|||
const elagate = 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.forEach(elagate)
|
||||
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 without_prefix = tree.path.substring(prefix.length)
|
||||
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 => {
|
||||
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 + 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)
|
||||
}
|
||||
|
@ -106,11 +139,13 @@ const prepare_pug = (old_prefix, new_prefix) => 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 + 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)
|
||||
}
|
||||
|
@ -170,16 +205,35 @@ const do_pug = (prt, root) => async 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'}
|
||||
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())
|
||||
|
|
|
@ -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 :
|
||||
|
||||
![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).
|
||||
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.
|
||||
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/).
|
||||
|
||||
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
|
||||
a(href='https://guichet.deuxfleurs.fr') compte
|
||||
span |
|
||||
.menu-item
|
||||
a(href='/Documentation') doc
|
||||
span |
|
||||
h1 #{title}
|
||||
main
|
||||
block content
|
||||
block main
|
||||
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)
|
||||
ul
|
||||
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
|
||||
a(href=val.url)= val.nice_name
|
||||
+menu(val)
|
||||
|
|
|
@ -67,7 +67,7 @@ header > .container > .menu-item > img {
|
|||
vertical-align: -9px;
|
||||
}
|
||||
|
||||
header > .container > .menu-item > a,span {
|
||||
header > .container > .menu-item > a, header > .container > .menu-item > span {
|
||||
font-size: 30px;
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
|
|
|
@ -4,55 +4,55 @@ prepend root
|
|||
- title = "deuxfleurs"
|
||||
|
||||
block content
|
||||
.container.spacing
|
||||
.chapeau ⇨ protège votre vie privée
|
||||
.chapeau ⇨ défend vos libertés et vos droits
|
||||
.chapeau ⇨ ne vous manipule pas
|
||||
.chapeau ⇨ promeut la sobriété numérique
|
||||
.chapeau ⇨ protège votre vie privée
|
||||
.chapeau ⇨ défend vos libertés et vos droits
|
||||
.chapeau ⇨ ne vous manipule pas
|
||||
.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.
|
||||
a(href="#nous-rejoindre") Nous rejoindre.
|
||||
|
||||
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
|
||||
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
|
||||
|
||||
section.spacing
|
||||
h2 notre réponse
|
||||
em à venir
|
||||
p.spacing ⚠️ Vous devez être membre pour utiliser ces services.
|
||||
a(href="#nous-rejoindre") Nous rejoindre.
|
||||
|
||||
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
|
||||
h2(id="nous-rejoindre") nous rejoindre
|
||||
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.
|
||||
section.spacing
|
||||
h2 notre réponse
|
||||
em à venir
|
||||
|
||||
section.spacing
|
||||
h2(id="nous-rejoindre") nous rejoindre
|
||||
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