Commit 5234047c authored by Millicent Billette's avatar Millicent Billette
Browse files

fin modularisation RML12 / RML13

parent 873cfacd
Pipeline #5765 failed with stages
in 3 minutes and 54 seconds
l'adaptation du contenu se limite à changer le contenu des dossiers et fichiers :
- `programme/`
- `template/pages/`
- `template/index.html`
- `event.config.yml`
Et potentiellement changer quelques contenu dans `static/img/`
Le reste devrait rouler avec :
- pour tester en local : après install de node.js et npm : `npm install` suivi de `npm run watch` dans le dossier du projet.
- pour mettre en prod : un push sur un dépot pour le quel j'ai configuré la bonne CI/CD
# RML 12
- Site accessible à l'adresse : https://rml12.duniter.io/
- Urls de secours : https://rml12.1000i100.fr/
......
......@@ -8,6 +8,8 @@ const jimpCircle = require('@jimp/plugin-circle');
jimpConfigure({
plugins: [jimpPlugins,jimpCircle]
});
const conf = require('js-yaml').safeLoad(fs.readFileSync('event.config.yml', 'utf8'));
const bandeauCache = {};
const composeFunc = {
1:async (base,imgSpeakers)=>await composeRightTop(base,imgSpeakers[0],400,150,20),
......@@ -213,9 +215,9 @@ function dom2siteMapLine(domPiece){
const subPageId = domPiece.getAttribute('id');
const imgNodes = domPiece.querySelectorAll('img');
return ` <url>
<loc>https://rml12.duniter.io/${subPageId}.html</loc>${imgNodes2array(imgNodes).map(n=>`
<loc>${conf.canonical}${subPageId}.html</loc>${imgNodes2array(imgNodes).map(n=>`
<image:image>
<image:loc>https://rml12.duniter.io/${n.src}</image:loc>
<image:loc>${conf.canonical}${n.src}</image:loc>
<image:caption>${escapeHtml(n.alt)}</image:caption>
</image:image>`).join('')}
</url>`;
......@@ -229,10 +231,10 @@ function escapeHtml(unsafe) {
.replace(/'/g, "&#039;");
}
function computeBannerFileName(avatars) {
if(!avatars.length) return 'RML12_all_in_one.jpg';
if(!avatars.length) return 'RML_all_in_one.jpg';
let name = `session__${avatars.map(a=>a.src.substring(a.src.lastIndexOf('/')+1,a.src.lastIndexOf('.'))).join('__')}.jpg`;
if(name.length>250) name = `${avatars.map(a=>a.src.substring(a.src.lastIndexOf('/')+1,a.src.lastIndexOf('.')).split('_')[0]).join('_')}.jpg`;
if(avatars.length>10) return 'RML12_all_in_one.jpg';//TODO: à corriger en même temps que le générateur de bandeau
if(avatars.length>10) return 'RML_all_in_one.jpg';//TODO: à corriger en même temps que le générateur de bandeau
return name;
}
function dom2landingPage(domPiece) {
......@@ -249,7 +251,7 @@ function dom2landingPage(domPiece) {
<html lang="fr" xmlns:og="http://ogp.me/ns#" vocab="http://schema.org/">
<head prefix="og: http://ogp.me/ns# website: http://ogp.me/ns/website#">
<meta charset="utf-8"/>
<title>${title} ~ RML 12</title>
<title>${title} ~ ${conf.titre.tiny}</title>
<link rel="stylesheet" href="style.css"/>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
......@@ -271,8 +273,8 @@ function dom2landingPage(domPiece) {
<meta name="msapplication-TileImage" content="img/logo/g144.png">
<meta name="msapplication-TileColor" content="#FFFFFF">
<link rel="canonical" href="https://rml12.duniter.io/${subPageId}.html"/>
<link type="text/plain" rel="author" href="https://rml12.duniter.io/humans.txt" />
<link rel="canonical" href="${conf.canonical}${subPageId}.html"/>
<link type="text/plain" rel="author" href="${conf.canonical}humans.txt" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="manifest" href="manifest.json"/>
<meta name="theme-color" content="rgb(255,198,84)"/>
......@@ -280,14 +282,14 @@ function dom2landingPage(domPiece) {
<meta property="og:type" content="website" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:title" content="${title}" />
<meta property="og:site_name" content="RML12" />
<meta property="og:url" content="https://rml12.duniter.io/${subPageId}.html" />
<meta property="og:site_name" content="{conf:og.site_name}" />
<meta property="og:url" content="${conf.canonical}${subPageId}.html" />
<meta property="og:image" content="https://rml12.duniter.io/img/social_media/${bandeauName}" />
<meta property="og:image" content="${conf.canonical}${conf.og.images_path}${bandeauName}" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="628" />
${avatars.map(a=>`
<meta property="og:image" content="https://rml12.duniter.io/${a.src}" />
<meta property="og:image" content="${conf.canonical}${a.src}" />
<meta property="og:image:alt" content="${a.alt}" />
<meta property="og:image:width" content="250" />
<meta property="og:image:height" content="250" />
......@@ -302,7 +304,6 @@ function dom2landingPage(domPiece) {
<h1>
<a href="//duniter.org/" rel="noreferrer" target="_blank"><img src="img/logo/duniter.svg" alt="Duniter"/></a>
<a href="//g1.1000i100.fr/" rel="noreferrer" target="_blank"><img src="img/logo/g1-flare.svg" alt="Ğ1"/></a>
<span class="short">RML12<span> BDX</span></span><span class="long">Rencontres Monnaie Libre 12 à Bordeaux</span>
</h1>
<div class="spacer"></div>
<a href="./#accueil">Accueil</a>
......
......@@ -3,23 +3,25 @@ const fs = require("fs");
const yaml = require('js-yaml');
const md = require('marked');
md.setOptions({headerIds: false, xhtml: true});
replacesInFiles(
["index.html","sitemap.xml", "humans.txt"],
{
"now":now,
"programme":fs.readFileSync('generated.programme.html', 'utf8'),
"money_systems_comparison":fs.readFileSync('template/pages/money_systems_comparison.html', 'utf8'),
"symetrie_DU":md(fs.readFileSync('template/pages/symetrie_DU.md', 'utf8')),
"adoption_citoyenne":md(fs.readFileSync('template/pages/adoption_citoyenne.md', 'utf8')),
"page_libre":md(fs.readFileSync('template/pages/page_libre.md', 'utf8')),
"page_theorie":md(fs.readFileSync('template/pages/page_theorie.md', 'utf8')),
"page_technique":md(fs.readFileSync('template/pages/page_technique.md', 'utf8')),
"faciliter_echanges":md(fs.readFileSync('template/pages/faciliter_echanges.md', 'utf8')),
"stop_inegalites_systemiques":md(fs.readFileSync('template/pages/stop_inegalites_systemiques.md', 'utf8')),
"stop_crise":md(fs.readFileSync('template/pages/stop_crise.md', 'utf8')),
"transition_ecologique_sociale":md(fs.readFileSync('template/pages/transition_ecologique_sociale.md', 'utf8')),
"espace_presse":md(fs.readFileSync('template/pages/espace_presse.md', 'utf8')),
});
const templatePages = {};
fs.readdirSync('template/pages/').forEach((f)=>templatePages[f.split('.')[0]] = md(fs.readFileSync('template/pages/'+f, 'utf8')));
fs.readdirSync('template/fragments/').forEach((f)=>templatePages['#'+f.split('.')[0]] = md(fs.readFileSync('template/fragments/'+f, 'utf8')));
templatePages["__programme"] = fs.readFileSync('generated.programme.html', 'utf8');
templatePages["__now"] = now;
function recursiveTemplateFill(templatePages){
let changed = false;
for(let key in templatePages){
let value = templatePages[key];
if(value.indexOf('{build:')!== -1){
templatePages[key] = applyData2Template(templatePages,value);
if (value !== templatePages[key]) changed = true;
else console.error(`Template inconnu dans ${key}`);
}
}
if(changed) recursiveTemplateFill(templatePages);
}
recursiveTemplateFill(templatePages);
replacesInFiles(["index.html","sitemap.xml", "humans.txt"],templatePages);
function replacesInFiles(fileList,buildReplaces) {
const configReplaces = yml2replaceMap('event.config.yml');
......
......@@ -2,8 +2,14 @@ title: "RML 12 : Rencontres Monnaie Libre 12, du 17 au 25 novembre à Bordeaux"
canonical: https://rml12.duniter.io/
description: Bienvenue au plus grand rassemblement de penseurs, économistes, informaticiens, utilisateurs et simples curieux de Monnaie Libre. En 9 jours nous irons de la découverte ludique des alternatives monétaires aux conférences techniques avec des développeurs experts. Entrée Libre.
date:
start: 2018-11-17
end: 2018-11-25
start: "2018-11-17"
start_time: 9h30
end: "2018-11-25"
end_time: 19h30
contact:
name: "[1000i100] Millicent Billette"
email: rml12@1000i100.fr
phone: 0770772770
og:
title: Rencontres Monnaie Libre, Bordeaux, du 17 au 25 novembre
description: |-
......@@ -12,7 +18,7 @@ og:
Découvrez le programme: 9 jours de rencontres sur les alternatives économiques et monétaires. Avec Etienne Chouard, Stéphane Laborde, Jean-François Noubel ; des économistes attérrés, des développeurs... Plus de 30 intervenants.
site_name: RML12
images_path: img/social_media/
default_image: RML12_all_in_one.jpg
default_image: RML_all_in_one.jpg
default_author: Collectif RML12
default_city: Bordeaux
default_postal_code: 33000
......
......@@ -26,8 +26,8 @@
"smartWatch": "run-p watch:**",
"watch:static": "watch -p static/*.* -p static/**/*.* -c \"npm run build:prodFolder:fill\"",
"watch:yml": "watch -p build.yml.js -p programme/*.yml -p programme/**/*.yml -c \"npm run build:base:programme:yml\"",
"watch:programme": "watch -p yml2html.js -p yml2ics.js -p generated.programme.yml -c \"run-p build:base:programme:html build:base:programme:ics\"",
"watch:html": "watch -p build.prod.js -p generated.programme.html -p template/index.html -p template/pages/*.* -c \"run-p build:base:prod\"",
"watch:programme": "watch -p yml2html.js -p yml2ics.js -p event.config.yml -p generated.programme.yml -c \"run-p build:base:programme:html build:base:programme:ics\"",
"watch:html": "watch -p build.prod.js -p event.config.yml -p generated.programme.html -p template/index.html -p template/pages/*.* -c \"run-p build:base:prod\"",
"watch:styl": "watch -p template/*.styl -p template/**/*.styl -c \"run-p build:base:stylus\"",
"watch:es6": "watch -p template/*.es6 -p template/**/*.es6 -c \"run-p build:base:es6\"",
"dummyWatch": "npm run postinstall && watch -p ./*.* -p template/*.* -p template/**/*.* -p static/*.* -p static/**/*.* -p programme/*.* -p programme/**/*.* -c \"npm run postinstall\""
......
<footer>
<address>
<a href="mailto:{conf:contact.email}">{conf:contact.email}</a>
<a href="tel:{conf:contact.phone}">{conf:contact.phone}</a>
</address>
</footer>
<head prefix="og: http://ogp.me/ns# website: http://ogp.me/ns/website#">
<meta charset="utf-8"/>
<title>{conf:title}</title>
<link rel="stylesheet" href="style.css"/>
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"/>
<link rel="icon" href="img/logo/g16.png" type="image/png"/>
<link rel="icon" sizes="32x32" href="img/logo/g32.png" type="image/png"/>
<link rel="icon" sizes="64x64" href="img/logo/g64.png" type="image/png"/>
<link rel="icon" sizes="96x96" href="img/logo/g96.png" type="image/png"/>
<link rel="icon" sizes="196x196" href="img/logo/g196.png" type="image/png"/>
<link rel="icon" sizes="1000x1000" href="img/logo/g1000.png" type="image/png"/>
<link rel="icon" sizes="any" href="img/logo/g.svg" type="image/svg+xml"/>
<link rel="apple-touch-icon" sizes="152x152" href="img/logo/g152.png"/>
<link rel="apple-touch-icon" sizes="60x60" href="img/logo/g60.png"/>
<link rel="apple-touch-icon" sizes="76x76" href="img/logo/g76.png"/>
<link rel="apple-touch-icon" sizes="114x114" href="img/logo/g114.png"/>
<link rel="apple-touch-icon" sizes="120x120" href="img/logo/g120.png"/>
<link rel="apple-touch-icon" sizes="144x144" href="img/logo/g144.png"/>
<meta name="msapplication-TileImage" content="img/logo/g144.png"/>
<meta name="msapplication-TileColor" content="#FFFFFF"/>
<link rel="canonical" href="{conf:canonical}"/>
<link type="text/plain" rel="author" href="{conf:canonical}humans.txt" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<link rel="manifest" href="manifest.json"/>
<meta name="theme-color" content="rgb(255,198,84)"/>
<meta property="og:type" content="website" />
<meta property="og:locale" content="fr_FR" />
<meta property="og:title" content="{conf:og.title}" />
<meta property="og:site_name" content="{conf:og.site_name}" />
<meta property="og:url" content="{conf:canonical}" />
<meta property="og:image" content="{conf:canonical}{conf:og.images_path}{conf:og.image}" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="628" />
<meta property="og:description" content="{conf:description}" />
<meta property="og:updated_time" content="{build:__now}"/>
<meta name="description" content="{conf:description}" />
<meta name="for_js:start_date" content="{conf:date.start}"/>
<meta name="for_js:start_time" content="{conf:date.start_time}"/>
<meta name="for_js:end_date" content="{conf:date.end}"/>
<meta name="for_js:end_time" content="{conf:date.end_time}"/>
<script src="main.js" defer></script>
<script> navigator.serviceWorker.register('service_worker.js'); </script>
</head>
<header>
<nav>
<h1><a href="//duniter.org/" rel="noreferrer" target="_blank"><img src="img/logo/duniter.svg" alt="Duniter"
/></a><a href="//g1.1000i100.fr/" rel="noreferrer" target="_blank"><img src="img/logo/g1-flare.svg" alt="Ğ1"
/></a><a class="titre" href="#top"><span class="short">{conf:titre.tiny}<span>
{conf:titre.suffix}</span></span><span class="long">{conf:titre.long}</span></a>
</h1>
<div class="spacer"></div>
<a href="#accueil">Accueil</a>
<a href="#programme">Programme</a>
<a href="#info_pratique">Info. pratiques</a>
<a href="#apropos">À propos</a>
</nav>
</header>
<noscript>
Sans JavaScript ? &gt;&gt; <a href="./full_site.html">Site complet</a>
</noscript>
......@@ -11,7 +11,7 @@ Name: Jon Prepeluh, Corpus Delicti, Creative Stall, Maria Kislitsina, Jemis Mali
Name: Marie Nau, Marie Lefort, Julia Schindler pour leurs précieuses relectures
/* SITE */
Last update: {build:now}
Last update: {build:__now}
Standards: HTML5, CSS3+Stylus, ES6(JavaScript)
Components: VanillaJS
Software: Gitlab, Gitlab-CI, WebStorm, Atom, Git, Inkscape, Gimp, Darktable
This diff is collapsed.
......@@ -5,29 +5,34 @@ import '../node_modules/jparticles/production/particle';
function runJS(){
new JParticles.particle('#particles',{
opacity: .8,
//resize: false,
color: ['rgba(255,255,255,.2)', 'rgba(255,255,255,.4)', 'rgba(255,255,255,.5)', 'rgba(255,255,255,.6)','rgba(255,255,255,.8)','#fff', '#7af', '#ad0','#d84'],
num: .25,
range: 0.99,
//range: 300,
//proximity: 0.04,
proximity: 100,
maxSpeed: 0.1,
minSpeed: 0.01,
eventElem: document.getElementById("splash")
/* ,parallaxLayer: [1, 2, 3, 0],
parallaxStrength: 30,
parallax: true
*/
});
try {
new JParticles.particle('#particles',{
opacity: .8,
//resize: false,
color: ['rgba(255,255,255,.2)', 'rgba(255,255,255,.4)', 'rgba(255,255,255,.5)', 'rgba(255,255,255,.6)','rgba(255,255,255,.8)','#fff', '#7af', '#ad0','#d84'],
num: .25,
range: 0.99,
//range: 300,
//proximity: 0.04,
proximity: 100,
maxSpeed: 0.1,
minSpeed: 0.01,
eventElem: document.getElementById("splash")
/* ,parallaxLayer: [1, 2, 3, 0],
parallaxStrength: 30,
parallax: true
*/
});
} catch (e) {
console.warn(e)
}
function idNodesExtractor(dom = document) {
const subPages = document.querySelectorAll("[id]");
const pagesArray = Object.keys(subPages).map((k)=>subPages[k]);
return pagesArray.filter(n=>n.id.indexOf('-') === -1);
}
try {
idNodesExtractor().forEach(l=>{
const subTitle = l.querySelector('h1,h2,h3,h4,h5,h6');
if(!subTitle) return;
......@@ -38,6 +43,7 @@ idNodesExtractor().forEach(l=>{
link.title="permalien";
subTitle.appendChild(link);
});
} catch (e) { console.warn(e) }
function reagenceParticiperForPrint(){
const programme = document.getElementById('programme');
const participerScreen = document.getElementById('participer');
......@@ -48,7 +54,9 @@ function reagenceParticiperForPrint(){
participerPrint.id = 'participerPrint';
programme.parentNode.insertBefore(participerPrint, programme.nextSibling);
}
try{
reagenceParticiperForPrint();
} catch (e) { console.warn(e) }
let nextScroll;
const baseNode = document.createElement("base");
......@@ -77,6 +85,7 @@ function scrollTo(dest, duration = 500) {
};
nextScroll();
}
function pageOffsetTop(node){
return node.offsetTop + (node.offsetParent? pageOffsetTop(node.offsetParent):0);
}
......@@ -93,6 +102,7 @@ function bgCloseBuilder(side){
bgClose.title = "Fermer";
return bgClose;
}
try{
document.querySelectorAll('.subPage').forEach( popup => {
const fermer = document.createElement("a");
fermer.classList.add("close");
......@@ -105,7 +115,9 @@ document.querySelectorAll('.subPage').forEach( popup => {
popup.insertBefore(bgCloseBuilder('Right'), popup.firstChild);
popup.insertBefore(bgCloseBuilder('Bottom'), popup.firstChild);
} );
const baseTitle = "RML 12";//+document.title;
} catch (e) { console.warn(e) }
const baseTitle = document.querySelector('meta[property="og:site_name"]').content;
const fullBaseTitle = ""+document.title;
function getTitle(hash){
let title;
......@@ -118,17 +130,21 @@ function getTitle(hash){
}
return title;
}
document.querySelectorAll('nav').forEach(nav=>nav.addEventListener('click',()=>document.querySelector('nav').classList.toggle("active")));
let debutEasterEgg;
function easterEgg(){
const fin = Date.now();
if(fin-debutEasterEgg>5000) document.querySelectorAll('.disclaimer').forEach(n=>n.classList.add("ddisclaimer"));
}
document.querySelectorAll('.disclaimer').forEach(n=>n.addEventListener('mousedown',()=>{
debutEasterEgg = Date.now();
n.removeEventListener('mouseup',easterEgg);
n.addEventListener('mouseup',easterEgg);
}));
try{
document.querySelectorAll('nav').forEach(nav=>nav.addEventListener('click',()=>document.querySelector('nav').classList.toggle("active")));
} catch (e) { console.warn(e) }
try{
let debutEasterEgg;
const easterEgg = () => {
const fin = Date.now();
if(fin-debutEasterEgg>5000) document.querySelectorAll('.disclaimer').forEach(n=>n.classList.add("ddisclaimer"));
};
document.querySelectorAll('.disclaimer').forEach(n=>n.addEventListener('mousedown',()=>{
debutEasterEgg = Date.now();
n.removeEventListener('mouseup',easterEgg);
n.addEventListener('mouseup',easterEgg);
}));
} catch (e) { console.warn(e) }
document.querySelectorAll('a[href^="./"], a[href^="./"] *, a[href^="#"], a[href^="#"] *').forEach(internalNavLinking);
function internalNavLinking(linkNode) {
......@@ -159,8 +175,11 @@ function getHash(href = location.href){
if(currentPathMarker>extPositionMarker) return '';
return href.substring(currentPathMarker,extPositionMarker);
}
try{
window.addEventListener('popstate',sessionNav);
sessionNav();
} catch (e) { console.warn(e) }
function sessionNav(){
document.querySelectorAll('.subPage').forEach( section => section.classList.add("inactive") );
document.querySelectorAll(`.subPage.active`).forEach( link => link.classList.remove("active") );
......@@ -231,6 +250,7 @@ function getParentChildIndexOf(node){
}
return childIndex;
}
try{
document.querySelectorAll('.large thead th').forEach( column => {
column.addEventListener("click",e => {
const childIndex = getParentChildIndexOf(e.target);
......@@ -241,6 +261,8 @@ document.querySelectorAll('.large thead th').forEach( column => {
} );
} );
} );
} catch (e) { console.warn(e) }
try{
document.querySelectorAll('.session>.subPageLink, .timeBloc').forEach( programmLink => {
const dayNode = programmLink.closest('li.day');
const daySpeakerClasses = dayNode.className.split(' ').filter(cl=>cl.indexOf('speaker_')!==-1);
......@@ -259,6 +281,8 @@ document.querySelectorAll('.large thead th').forEach( column => {
document.querySelectorAll(daySpeakerClasses.map(spCl=>`.speakerHead.${spCl}`).join(',')).forEach(elem=>elem.classList.remove('unselected'));
});
});
} catch (e) { console.warn(e) }
try{
document.querySelectorAll('li.day').forEach( day => {
const speakerClasses = day.className.split(' ').filter(cl=>cl.indexOf('speaker_')!==-1);
day.addEventListener("mouseenter",e => {
......@@ -269,6 +293,8 @@ document.querySelectorAll('.large thead th').forEach( column => {
document.querySelectorAll('.speakerHead').forEach(elem=>elem.classList.remove('unselected'));
});
});
} catch (e) { console.warn(e) }
try{
document.querySelectorAll('.speakerHead').forEach( speakerLink => {
const speakerClass = 'speaker_'+speakerLink.className.split('speaker_')[1].split(' ')[0];
speakerLink.addEventListener("mouseenter",() => {
......@@ -302,23 +328,35 @@ document.querySelectorAll('.speakerHead').forEach( speakerLink => {
}
});
});
} catch (e) { console.warn(e) }
try{
document.querySelectorAll(".videoArea").forEach(n=>{
n.addEventListener('click',(e)=>{
e.preventDefault();
embedVideo(n.parentNode);
});
});
} catch (e) { console.warn(e) }
function embedVideo(videoNode){
const vArea = videoNode.querySelector('.videoArea');
const vMirrors = videoNode.querySelector('.mirrors');
videoNode.innerHTML = `<iframe width="${vArea.offsetWidth}" height="${vArea.offsetHeight}" sandbox="allow-same-origin allow-scripts" src="${vArea.href.replace("/videos/watch/", "/videos/embed/")}?autoplay=true" frameborder="0" allowfullscreen></iframe>`;
videoNode.appendChild(vMirrors);
}
document.querySelectorAll(".timeline").forEach(n=>n.style.height = `${n.offsetHeight}px`);
function getDateTimeFromMeta(keyword = 'start'){
const date = document.querySelector(`meta[name="for_js:${keyword}_date"]`).content.split('-');
const time = document.querySelector(`meta[name="for_js:${keyword}_time"]`).content.split('h');
return new Date(date[0],date[1],date[2],time[0],time[1],0);
}
try{
const countdownNode = document.querySelector(".countdown");
function countdown() {
const eventStart = (new Date(2018,10,17,9,30,0)).getTime();
const eventEnd = (new Date(2018,10,25,20,0,0)).getTime();
const countdown = ()=> {
const eventStart = getDateTimeFromMeta('start').getTime();
const eventEnd = getDateTimeFromMeta('end').getTime();
let started = false;
let timeLeft = Math.max(0, Math.round((eventStart - Date.now())/1000));
if(!timeLeft) {
......@@ -360,10 +398,12 @@ function countdown() {
}
}
const countdownHolder = setInterval(countdown, 1000);
} catch (e) { console.warn(e) }
function extractTime(node,attr){
return (new Date(node.getAttribute(attr))).getTime();
}
try{
document.querySelectorAll(".record[data-start-live]").forEach(n=>{
if(extractTime(n,"data-start-live")>Date.now()){
//n.querySelector('img').src="img/picto/rec/will_be_recorded.svg";
......@@ -373,6 +413,8 @@ const countdownHolder = setInterval(countdown, 1000);
n.querySelector('.infoBox').innerHTML="Actuellement en direct !";
}
});
} catch (e) { console.warn(e) }
}
window.runJS = runJS;
<article id="accueil">
<div class="focusBox">
<p>
Bienvenue au plus grand rassemblement de penseurs, économistes, informaticiens, utilisateurs et simples
curieux de Monnaie Libre.
</p><p>
Cette 12ème édition se déroulera pour la première fois à <strong>Bordeaux du 17 au 25 novembre 2018</strong>.
</p><p>
L'entrée est libre.
</p><p>
En 9 jours nous irons de la découverte ludique des alternatives monétaires aux conférences techniques
avec les développeurs experts (<a href="#programme">voir le programme</a>).
</p>
</div>
{build:decouvrir}
</article>
<section id="apropos">
<article>
<h2>À propos...</h2>
<div class="columnArea">
{build:contact}
<div>
<h3>Espace presse et médias</h3>
<p>Vous souhaitez communiquer sur l'évènement ?</p>
<p>Visuels et communiqués de presse sont à votre disposition dans l'<a href="#espace_presse" class="subPageLink">espace presse & médias</a></p>
<section id="espace_presse" class="subPage">{build:espace_presse}</section>
</div>
<div>
<h3>Qui organise ?</h3>
<a href="https://pad.tetaneutral.net/p/RML12-benevoles" rel="noreferrer" target="_blank">Liste des bénévoles</a>
<!--<h3>Partenaires de l'évènement</h3>-->
<h3>Merci à eux de faciliter la réalisation <!--l'advenue--> des RML12 :</h3>
<ul>
<li><a href="https://okiwi.org/" rel="noreferrer" target="_blank">Okiwi</a> : encadrement légal de l'évènement (assurance, comptabilité)</li>
<li><a href="http://www.bordeaux.fr/" rel="noreferrer" target="_blank">Mairie de Bordeaux, Bibliothèque Flora Tristan, Bibliothèque de Meriadeck, Athénée Municipal</a> : subvention, prêt gracieux de salles et matériels</li>
<li><a href="https://www.douves.org/" rel="noreferrer" target="_blank">Halle des douves</a> : prêt gracieux de salles & matériels</li>
<li><a href="http://marengo.co/" rel="noreferrer" target="_blank">Marengo</a> : prêt gracieux de salles & matériels</li>
<!-- <li><a href="https://www.colibris-lemouvement.org/" rel="noreferrer" target="_blank">Colibri</a> : facilitations diverses (obtention de salles, coordination de l'organisation)</li>-->
<li>Crédits web : <a href="humans.txt" rel="noreferrer" target="_blank">humans.txt</a></li>
</ul>
</div>
{build:legals}
</div>
</article>
</section>
<div id="contact" typeof="ContactPage">
<h3>Contact :</h3>
<ul>
<li property="editor" typeof="Person"><span property="name">{conf:contact.name}</span>&nbsp;:
<a href="tel:{conf:contact.phone}" property="telephone">{conf:contact.phone}</a>
<br/><a href="mailto:{conf:contact.email}" property="email">{conf:contact.email}</a>
</li>
</ul>
</div>
<div id="decouvrir">
<img src="img/words_cloud.jpg" alt="" class="onlyPrint" style="height: 15cm; display: block;margin: auto"/>
<h2>Une monnaie libre, qu'est-ce que c'est ?</h2>
<div class="flexArea">
<div>
<h3>Une monnaie qui permet :</h3>
<ul>
<li><a href="#symetrie_DU" class="subPageLink"><span class="picto"><img src="img/picto/symetry.svg" alt="⚖"/></span> <span class="title">D'être égaux face à la création monétaire
<span>(chacun sa part, même les générations futures)</span></span></a>
<section id="symetrie_DU" class="subPage">{build:symetrie_DU}</section>
</li>
<li><a href="#adoption_citoyenne" class="subPageLink"><span class="picto"><img src="img/picto/bottom_up.svg" alt="👊"/></span><!--⟲↻🔄↺♲🐦-->
<span class="title">D'en faire usage sans décision d'élu préalable</span></a>
<section id="adoption_citoyenne" class="subPage">{build:adoption_citoyenne}</section>
</li>
<li><a href="#page_libre" class="subPageLink"><span class="picto"><img src="img/picto/libre.svg" alt="🔍"/></span><!--👁-->
<span class="title">D'en vérifier soi-même le bon fonctionnement</span></a>
<section id="page_libre" class="subPage">{build:page_libre}</section>
</li>
</ul>
</div><div>
<h3>Comment est-ce possible ?</h3>
<ul>
<li><a href="#page_theorie" class="subPageLink"><span class="picto"><img src="img/picto/theory.svg" alt="💡"/></span> <span class="title">Fondements théoriques</span></a>
<section id="page_theorie" class="subPage">{build:page_theorie}</section>
</li>
<li><a href="#page_technique" class="subPageLink"><span class="picto"><img src="img/picto/technic.svg" alt="⚙"/></span> <span class="title">Choix techniques actuels</span></a>
<section id="page_technique" class="subPage">{build:page_technique}</section>
</li>
</ul>
</div><div>
<h3>Pourquoi est-ce une bonne idée ?</h3>
<ul>
<li><a href="#transition_ecologique_sociale" class="subPageLink"><span class="picto"><img src="img/picto/green.svg" alt="🌲"/></span> <span class="title">Accompagner la transition écologique et sociale</span></a>
<section id="transition_ecologique_sociale" class="subPage">{build:transition_ecologique_sociale}</section>
</li>
<li><a href="#faciliter_echanges" class="subPageLink"><span class="picto"><img src="img/picto/fluid.svg" alt="🔁"/></span> <span class="title">Faciliter les échanges entre êtres humains</span></a>
<section id="faciliter_echanges" class="subPage">{build:faciliter_echanges}</section>
</li>
<li><a href="#stop_inegalites_systemiques" class="subPageLink"> <span class="picto"><img src="img/picto/systemic.svg" alt="👫"/></span><!--👬👫👭--> <span class="title">Éviter les inégalités monétaires systémiques</span></a>
<section id="stop_inegalites_systemiques" class="subPage">{build:stop_inegalites_systemiques}</section>
</li>
<li> <a href="#stop_crise" class="subPageLink"> <span class="picto"><img src="img/picto/crisis.svg" alt="💸"/></span> <span class="title">Éviter les crises monétaires</span></a>
<section id="stop_crise" class="subPage">{build:stop_crise}</section>
</li>
<li><a href="#money_systems_comparison" class="subPageLink strong"><span class="picto"><img src="img/picto/compare.svg" alt="⚙"/></span> <span class="title">Tableau comparatif entre systèmes monétaires</span></a>
<sect