diff --git a/README.md b/README.md index d156266..350a9aa 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,11 @@ Le site est créé à l'aide du logiciel libre [MetalSmith](http://www.metalsmit ### Préparation des sources -**Metalsmith** requiert la disponibilité de **NodeJS** et **npm**. L'installation de ces logiciels dépend du système d'exploitation utilisé. - -Les sources peuvent être téléchargées depuis le dépôt **Gitea** ou bien copiées localement à l'aide de **git** avec la commande suivante. +Les sources du site peuvent être téléchargées depuis le dépôt **Gitea** ou bien copiées localement à l'aide de **git** avec la commande suivante. git clone https://apps.ti-nuage.fr/gitea/ti-nuage/site.git -Le projet s'appuie sur un certain nombre de dépendances, utiles au développement ou à la génération du site lui-même. Pour installer ces dépendances : +Le projet s'appuie sur un certain nombre de dépendances, utiles au développement ou à la génération du site lui-même. Il est tout d'abord nécessaire d'installer **NodeJS** et **npm**. L'installation de ces logiciels dépend du système d'exploitation utilisé. Le reste des dépendances peut alors être assemblé avec la commande suivante. npm install @@ -32,9 +30,17 @@ La liste des commandes existantes est disponible avec `npm run`. Il est possible ## Structure -Le site de l'association est essentiellement composé de pages statiques. Les billets d'actualité et les comptes-rendus de réunion sont eux-mêmes générés ou assemblés avec le reste des pages du site. +Sauf les exceptions détaillées plus bas, l'ensemble du site de l'association est composé de pages statiques dont les sources figurent dans ce projet. Les billets d'actualité et les comptes-rendus de réunion sont eux-mêmes générés ou assemblés avec le reste des pages du site. -Cependant, afin d'être réactif, l'affichage des événements du calendrier partagé de l'association est effectué depuis le navigateur. Si le navigateur dispose d'un support Javascript actif, alors : +### Supports de conférences + +Les documents hébergés dans le projet [ti-nuage/talks](https://forge.ti-nuage.fr/gitea/ti-nuage/talks) peuvent être publiés sur la page /rencontres. Pour ce faire, il faut renseigner la variable d'environnement PATH_TALKS. Par exemple : + + PATH_TALKS=../tinuage-talks/documents npm run server + +### Intégration du calendrier + +Afin d'être réactif, l'affichage des événements du calendrier partagé de l'association est effectué depuis le navigateur. Si le navigateur dispose d'un support Javascript actif, alors : - les événements à venir sont mixés avec les billets récents du blog dans la rubrique Actualité de la page d'accueil ; - le menu propose une entrée « Calendrier » à la suite de « Actualité ». Cette nouvelle page présente plus largement les événements récents ou à venir. diff --git a/content/rencontres/index.md b/content/rencontres/index.md new file mode 100644 index 0000000..76f266e --- /dev/null +++ b/content/rencontres/index.md @@ -0,0 +1,7 @@ +--- +permalink: false +title: Rencontres +--- +Outre l'accueil offert par l'association le premier jeudi de chaque mois, Ti Nuage va aussi à la rencontre d'autres lieux pour présenter et discuter les thèmes qui lui sont chers : la liberté de l'utilisateur de services numériques et la protection de ses données. + +Voici les documents utilisés comme support lors des rencontres, conférences et autres causeries faites par l'association. Tous sont disponibles selon la licence [CC-BY-SA version 2.0 ou ultérieure](https://creativecommons.org/licenses/by-sa/2.0/fr/). Leurs fichiers sources sont disponibles sur notre [forge logicielle](https://forge.ti-nuage.fr/gitea/ti-nuage/talks). diff --git a/layouts/base.njk b/layouts/base.njk index 316cee1..9d83a87 100644 --- a/layouts/base.njk +++ b/layouts/base.njk @@ -21,6 +21,7 @@
' + talk.title + ', ' + talk.location + ' : Présentation, Notes
\n' + }) + }) + + this.page.contents = Buffer.concat([ + this.page.contents, + Buffer.from(html) + ]) + }, + + getEntry: function (year, location, title) { + let talk = this.talks.find(t => t.year === year && t.location === location && t.title === title) + + if (talk == null) { + talk = { location, title, year } + this.talks.push(talk) + } + + return talk + } + } + + return function (files, metalsmith, done) { + if (config.paths.talksRoot) { + const creator = Object.create(IndexCreator) + + creator.setup(files['rencontres/index.html']) + + Object.keys(files).forEach(filename => { + if (/^rencontres\/.*\.pdf$/.test(filename)) { + debug('Handling', filename) + creator.add(filename) + } + }) + + creator.fill() + } + + done() + } +} diff --git a/scripts/metalsmith.js b/scripts/metalsmith.js index 5340e54..b0499fa 100644 --- a/scripts/metalsmith.js +++ b/scripts/metalsmith.js @@ -7,6 +7,7 @@ const config = require('./config.js') const collections = require('@metalsmith/collections') const copy = require('./metalsmith-copy') const excerpts = require('@metalsmith/excerpts') +const fs = require('node:fs') const groff = require('metalsmith-groff') const layouts = require('@metalsmith/layouts') const Metalsmith = require('metalsmith') @@ -15,6 +16,7 @@ const marked = require('marked') const permalinks = require('@metalsmith/permalinks') const rename = require('metalsmith-rename') const services = require('./metalsmith-tinuage-services') +const talks = require('./metalsmith-tinuage-talks') const sitemap = require('metalsmith-sitemap') const slug = require('slug') const statistics = require('./metalsmith-statistics-plugin') @@ -77,6 +79,26 @@ module.exports = new Metalsmith(config.paths.projectRoot) files: [join(config.paths.leaflet, 'leaflet.css')], destination: './css' })) + .use(copy({ + generator: (callback) => { + if (config.paths.talksRoot != null) { + return fs.readdir(config.paths.talksRoot, (err, filenames) => { + let documents = [] + + if (err) { + console.error('%s: %s', config.paths.talksRoot, err) + } else { + documents = filenames + .filter(f => { return f.indexOf('.pdf') !== -1 }) + .map(f => { return join(config.paths.talksRoot, f) }) + } + + callback(documents) + }) + } + }, + destination: './rencontres' + })) .use(copy({ files: [ join(config.paths.leaflet, 'images', 'marker-icon.png'), @@ -106,6 +128,7 @@ module.exports = new Metalsmith(config.paths.projectRoot) })) .use(chatons()) .use(services()) + .use(talks()) .use(excerpts()) .use(permalinks({ pattern: 'blog/:date/:title',