\n'
+
+ this.registry[section].forEach((service) => { html += service.html })
+ html += ''
+
+ return html
+ }
+ }
+
+ const Parser = {
+ /**
+ * Traduit la description JSON du service donné en paramètre en un extrait
+ * HTML.
+ */
+ parseService: function (service) {
+ let html = '
\n' +
+ '
' + service.title + '
\n' +
+ '
' + service.description + '
\n'
+
+ if (service.buttons !== undefined) {
+ html += '
\n'
+ service.buttons.forEach((b) => { html += this.createButton(b) })
+ html += '
'
+ }
+
+ if (service.softwares !== undefined) {
+ html += '
\n'
+ service.softwares.forEach((s) => { html += this.createSoftwareDescription(s) })
+ html += '
\n'
+ }
+
+ if (service.links !== undefined) {
+ html += '
Autres liens :
\n
'
+ service.links.forEach((l) => { html += this.createListLink(l) })
+ html += '
\n'
+ }
+ html += '
'
+
+ debug('Parsed ' + service.title + '(' + service.order + ')')
+ service.html = html
+ service.section = service.open ? Sections.OPEN : Sections.MEMBERS
+
+ return service
+ },
+
+ createButton: function (button) {
+ const cls = button.class || ''
+ return '
' + button.label + '\n'
+ },
+
+ createListLink: function (link) {
+ return '
' + link.label + '\n'
+ },
+
+ createSoftwareDescription: function (soft) {
+ let html = '
' + soft.description + '
\n' +
+ '
'
+
+ if (soft.url !== undefined) {
+ html += this.createSoftwareLink('home.svg', 'Page Web', soft.url)
+ }
+ if (soft.sources !== undefined) {
+ html += this.createSoftwareLink('files.svg', 'Sources du logiciel', soft.sources)
+ }
+ soft.licenses.forEach((l) => { html += this.createSoftwareLink('copyright.svg', 'Licence', l.url, l.name) })
+
+ html += '
\n'
+
+ return html
+ },
+
+ createSoftwareLink: function (icon, alt, url, title) {
+ let element = '
\n' +
+ '

\n'
+
+ if (title !== undefined) {
+ element += '
' + title + '
'
+ }
+
+ element += '
'
+
+ return element
+ }
+ }
+
+ /**
+ * Lit de manière asynchrone l'ensemble des fichiers JSON décrivant les services.
+ *
+ * Seuls les fichiers ayant .json comme extension sont chargés depuis le répertoire fourni.
+ */
+ function loadServices (root, filenames) {
+ const promises = filenames
+ .filter(f => { return f.indexOf('.json') !== -1 })
+ .map(function (f) {
+ debug('Loading ' + f)
+ return fs.promises
+ .readFile(path.join(root, f), 'utf8')
+ .then((data) => { return JSON.parse(data) })
+ })
+
+ return Promise.all(promises)
+ }
+
+ return function (files, metalsmith, done) {
+ const root = path.join(config.paths.projectRoot, 'services')
+
+ debug('Looking for services in ' + root)
+ fs.readdir(root, (err, filenames) => {
+ if (err) {
+ console.error('%s: %s', root, err)
+ } else {
+ loadServices(root, filenames)
+ .then(function (services) {
+ const p = Object.create(Parser)
+ const parsed = services
+ .sort((a, b) => { return a.order - b.order })
+ .map((s) => p.parseService(s))
+ Object.create(PageFiller).setup(files['services.html'], parsed).fill()
+ done()
+ })
+ .catch(function (err) {
+ console.log(err)
+ })
+ }
+ })
+ }
+}
diff --git a/scripts/metalsmith.js b/scripts/metalsmith.js
index 958e748..da82c03 100644
--- a/scripts/metalsmith.js
+++ b/scripts/metalsmith.js
@@ -12,6 +12,7 @@ const marked = require('marked')
const moment = require('moment')
const permalinks = require('@metalsmith/permalinks')
const rename = require('metalsmith-rename')
+const services = require('./metalsmith-tinuage-services')
const sitemap = require('metalsmith-sitemap')
const slug = require('slug')
const statistics = require('./metalsmith-statistics-plugin')
@@ -70,6 +71,7 @@ module.exports = new Metalsmith(config.paths.projectRoot)
smartypants: true,
xhtml: true
}))
+ .use(services())
.use(excerpts())
.use(permalinks({
pattern: 'blog/:date/:title',
diff --git a/services/calc.json b/services/calc.json
new file mode 100644
index 0000000..1870d04
--- /dev/null
+++ b/services/calc.json
@@ -0,0 +1,26 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://calc.ti-nuage.fr"}
+ ],
+ "description": "Un tableur collaboratif éditable en temps réel qui dispose des fonctionnalités de base : mise en forme, fonctions mathématiques, graphiques, ajout de commentaires, historique des versions, export en HTML ou en CSV. L'historique complet du document est conservé et les modifications de chacun sont identifiées.",
+ "icon": "edit",
+ "links": [
+ {"label": "Documentation et autres instances", "url": "https://wiki.chatons.org/doku.php/services/bureautique_en_ligne/ethercalc"}
+ ],
+ "open": true,
+ "order": 2,
+ "softwares": [
+ {
+ "description": "Ce service est fournit par le logiciel
EtherCalc.",
+ "licenses": [
+ {
+ "name": "Licences multiples",
+ "url": "https://github.com/audreyt/ethercalc/blob/master/LICENSE.txt"
+ }
+ ],
+ "sources": "https://github.com/audreyt/ethercalc",
+ "url": "https://ethercalc.net/"
+ }
+ ],
+ "title": "Tableur collaboratif"
+}
diff --git a/services/code.json b/services/code.json
new file mode 100644
index 0000000..b55d43c
--- /dev/null
+++ b/services/code.json
@@ -0,0 +1,27 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://apps.ti-nuage.fr/gitea"}
+ ],
+ "description": "Un environnement de développement Git pour héberger et partager vos projets.",
+ "icon": "gear",
+ "links" : [
+ {"label": "Documentation du logiciel", "url": "https://docs.gitea.io/fr-fr/"},
+ {"label": "Le livre Pro Git", "url": "https://git-scm.com/book/fr/v2"}
+ ],
+ "open": false,
+ "order": 6,
+ "softwares": [
+ {
+ "description": "
Gitea est une forge logicielle légère mais complète, avec une gestion des sources basée sur
git, une interface pour les demandes de fusion, un suivi de tickets, ou un module Wiki.",
+ "licenses": [
+ {
+ "name": "Licence MIT",
+ "url": "https://mit-license.org"
+ }
+ ],
+ "sources": "https://github.com/go-gitea/gitea",
+ "url": "https://gitea.io"
+ }
+ ],
+ "title": "Forge logicielle"
+}
diff --git a/services/email.json b/services/email.json
new file mode 100644
index 0000000..46c2ff3
--- /dev/null
+++ b/services/email.json
@@ -0,0 +1,11 @@
+{
+ "buttons": [
+ {"label": "Consulter", "url": "https://webmail.ti-nuage.fr"},
+ {"label": "Documentation", "class": "violet", "url": "https://wiki.ti-nuage.fr/fr/Services/Communication/Courriel"}
+ ],
+ "description": "Une adresse de courrier électronique avec le domaine
ti-nuage.fr utilisable en ligne ou avec votre client de messagerie habituel.",
+ "icon": "email",
+ "open": false,
+ "order": 2,
+ "title": "Adresse de courriel"
+}
diff --git a/services/im.json b/services/im.json
new file mode 100644
index 0000000..1241c91
--- /dev/null
+++ b/services/im.json
@@ -0,0 +1,44 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://apps.ti-nuage.fr/converse"},
+ {"label": "Documentation", "class": "violet", "url": "https://wiki.ti-nuage.fr/fr/Services/Communication/DiscussionInstantan%C3%A9e"}
+ ],
+ "description": "Une adresse sur le réseau de discussion
fédéré XMPP. Ce protocole standardisé permet à chacun d'utiliser le logiciel qui lui plaît sur l'appareil de son choix. Par exemple,
Conversations,
Dino, ou
Gajim. D'autres encore sont proposés sur
cette page.",
+ "icon": "messages",
+ "links": [
+ {"label": "Détails et autres instances", "url": "https://wiki.chatons.org/doku.php/services/messagerie_instantanee/xmpp"},
+ {"label": "Le standard XMPP, ses actualités", "url": "https://xmpp.org"}
+
+ ],
+ "open": false,
+ "order": 7,
+ "softwares": [
+ {
+ "description": "Ce service est actuellement servi par le serveur
Metronome.",
+ "licenses": [
+ {
+ "name": "License MIT",
+ "url": "https://mit-license.org"
+ },
+ {
+ "name": "License ISC",
+ "url": "https://www.isc.org/licenses/"
+ }
+ ],
+ "sources": "https://github.com/maranda/metronome",
+ "url": "https://metronome.im"
+ },
+ {
+ "description": "Le portail des utilisateurs propose l'interface en ligne
Converse.",
+ "licenses": [
+ {
+ "name": "License publique Mozilla",
+ "url": "https://www.mozilla.org/en-US/MPL/"
+ }
+ ],
+ "sources": "https://github.com/conversejs/converse.js",
+ "url": "https://conversejs.org/"
+ }
+ ],
+ "title": "Messagerie instantanée"
+}
diff --git a/services/ml.json b/services/ml.json
new file mode 100644
index 0000000..6657d88
--- /dev/null
+++ b/services/ml.json
@@ -0,0 +1,24 @@
+{
+ "buttons": [
+ {"label": "Consulter", "url": "https://webmail.ti-nuage.fr"},
+ {"label": "Documentation", "class": "violet", "url": "https://wiki.ti-nuage.fr/fr/Services/Communication/Courriel"}
+ ],
+ "description": "Une liste de diffusion nom@listes.ti-nuage.fr pour échanger avec les membres de votre groupe de travail et collaborateurs.",
+ "icon": "ml",
+ "open": false,
+ "order": 4,
+ "softwares": [
+ {
+ "description": "La gestion des listes est réalisée à l'aide du logiciel
Sympa. Son interface Web permet une configuration fine des paramètres de chaque liste de diffusion et la gestion de ses membres.",
+ "licenses": [
+ {
+ "name": "Licence GPLv2",
+ "url": "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"
+ }
+ ],
+ "sources": "https://github.com/sympa-community/sympa",
+ "url": "https://sympa.org"
+ }
+ ],
+ "title": "Listes de diffusion"
+}
diff --git a/services/nextcloud.json b/services/nextcloud.json
new file mode 100644
index 0000000..e95c698
--- /dev/null
+++ b/services/nextcloud.json
@@ -0,0 +1,27 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://cloud.ti-nuage.fr"},
+ {"label": "Documentation", "class": "violet", "url": "https://wiki.ti-nuage.fr/fr/Services/TravailCollaboratif/NextCloud"}
+ ],
+ "description": "Stockez vos fichiers, mais aussi vos contacts, vos images ou vos pistes de musique. Synchronisez-les avec votre ordinateur de bureau ou votre mobile. Partagez-les et travaillez en collaboration",
+ "icon": "cloud",
+ "links": [
+ {"label": "Autres instances et documentation externe", "url": "https://wiki.chatons.org/doku.php/services/nextcloud"}
+ ],
+ "open": false,
+ "order": 3,
+ "softwares": [
+ {
+ "description": "Ce service est basé sur le logiciel
NextCloud, une plateforme de collaboration utilisée par des entreprises ou associations de toutes tailles dans le monde entier.",
+ "licenses": [
+ {
+ "name": "Licence AGPLv3",
+ "url": "https://www.gnu.org/licenses/agpl-3.0.html"
+ }
+ ],
+ "sources": "https://github.com/nextcloud",
+ "url": "https://nextcloud.com"
+ }
+ ],
+ "title": "Stockage de fichiers"
+}
diff --git a/services/pads.json b/services/pads.json
new file mode 100644
index 0000000..f44c2ae
--- /dev/null
+++ b/services/pads.json
@@ -0,0 +1,36 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://apps.ti-nuage.fr/pad"}
+ ],
+ "description": "Un outil pour organiser et rédiger un document en groupe avec un canal de discussion écrite. L'édition conserve l'historique complet du document et les modifications de chacun sont identifiées.",
+ "icon": "edit",
+ "links": [
+ {"label": "Documentation et autres instances", "url": "https://wiki.chatons.org/doku.php/services/bureautique_en_ligne/etherpad"}
+ ],
+ "open": true,
+ "order": 1,
+ "softwares": [
+ {
+ "description": "Ce service est fournit par le logiciel
Etherpad.",
+ "licenses": [
+ {
+ "name": "Licence Apache-2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
+ }
+ ],
+ "sources": "https://github.com/ether/etherpad-lite",
+ "url": "https://etherpad.org/"
+ },
+ {
+ "description": "Le portail avec la connexion des utilisateurs et la gestion des
pads est offerte par
MyPads un plugin financé sur Ulule et porté par l’association Framasoft.",
+ "licenses": [
+ {
+ "name": "Licence Apache-2.0",
+ "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
+ }
+ ],
+ "sources": "https://framagit.org/framasoft/Etherpad/ep_mypads"
+ }
+ ],
+ "title": "Rédaction collaborative"
+}
diff --git a/services/polls.json b/services/polls.json
new file mode 100644
index 0000000..a3b8cae
--- /dev/null
+++ b/services/polls.json
@@ -0,0 +1,26 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://apps.ti-nuage.fr/date"}
+ ],
+ "description": "Pour organiser des rendez-vous ou choisir parmi plusieurs options, au sein d'un groupe ou d'une association.",
+ "icon": "list",
+ "links": [
+ {"label": "Autres instances et documentation externe", "url": "https://wiki.chatons.org/doku.php/services/sondage/framadate"}
+ ],
+ "open": true,
+ "order": 3,
+ "softwares": [
+ {
+ "description": "Ce service est fournit par le logiciel
Framadate.",
+ "licenses": [
+ {
+ "name": "Licence CeCILL-B",
+ "url": "https://cecill.info/licences/Licence_CeCILL-B_V1-fr.html"
+ }
+ ],
+ "sources": "https://framagit.org/framasoft/framadate/framadate",
+ "url": "https://framadate.org/abc/fr/"
+ }
+ ],
+ "title": "Sondages"
+}
diff --git a/services/share_bin.json b/services/share_bin.json
new file mode 100644
index 0000000..e8deccd
--- /dev/null
+++ b/services/share_bin.json
@@ -0,0 +1,26 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://apps.ti-nuage.fr/privatebin"}
+ ],
+ "description": "Pour partager de simple extraits de texte ou de code, de manière sécurisée et temporaire.",
+ "icon": "share",
+ "links": [
+ {"label": "Documentation et autres instances", "url": "https://wiki.chatons.org/doku.php/services/partage_chiffre/privatebin"}
+ ],
+ "open": true,
+ "order": 5,
+ "softwares": [
+ {
+ "description": "Cet outil se base sur
PrivateBin.",
+ "licenses": [
+ {
+ "name": "Licence Zlib/libpng",
+ "url": "https://opensource.org/licenses/zlib-license.php"
+ }
+ ],
+ "sources": "https://github.com/PrivateBin/PrivateBin",
+ "url": "https//privatebin.info/"
+ }
+ ],
+ "title": "Partage d'extraits de texte"
+}
diff --git a/services/share_file.json b/services/share_file.json
new file mode 100644
index 0000000..7497b5b
--- /dev/null
+++ b/services/share_file.json
@@ -0,0 +1,22 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://send.ti-nuage.fr"}
+ ],
+ "description": "Pour partager des documents trop lourds pour un envoi par courriel, une gallerie de photos, de manière sécurisée et temporaire.",
+ "icon": "share",
+ "open": true,
+ "order": 4,
+ "softwares": [
+ {
+ "description": "Ce service est servi par une version dérivée de
Firefox Send.",
+ "licenses": [
+ {
+ "name": "Licence MPL",
+ "url": "https://www.mozilla.org/en-US/MPL/2.0"
+ }
+ ],
+ "sources": "https://gitlab.com/timvisee/send"
+ }
+ ],
+ "title": "Partage de fichiers"
+}
diff --git a/services/vault.json b/services/vault.json
new file mode 100644
index 0000000..3356006
--- /dev/null
+++ b/services/vault.json
@@ -0,0 +1,28 @@
+{
+ "buttons": [
+ {"label": "Utiliser", "url": "https://vault.ti-nuage.fr"},
+ {"label": "Documentation", "class": "violet", "url": "https://wiki.ti-nuage.fr/fr/Services/Outils/CoffreFortNum%C3%A9rique"}
+ ],
+ "description": "Un espace pour stocker vos notes et mots de passe de façon sécurisée et pouvoir y accéder depuis tous vos terminaux numériques.",
+ "icon": "key",
+ "open": false,
+ "order": 5,
+ "softwares": [
+ {
+ "description": "
Bitwarden est un gestionnaire de mot de passe en ligne. Il permet de générer facilement mot ou phrases de passe et de partager notes et secrets ",
+ "licenses": [
+ {
+ "name": "Licence AGPLv3",
+ "url": "https://www.gnu.org/licenses/agpl-3.0.html"
+ },
+ {
+ "name": "Licence Bitwarden",
+ "url": "https://github.com/bitwarden/server/blob/master/LICENSE_BITWARDEN.txt"
+ }
+ ],
+ "sources": "https://github.com/bitwarden",
+ "url": "https://bitwarden.com/open-source"
+ }
+ ],
+ "title": "Coffre-fort numérique"
+}
diff --git a/services/web.json b/services/web.json
new file mode 100644
index 0000000..05d990f
--- /dev/null
+++ b/services/web.json
@@ -0,0 +1,10 @@
+{
+ "buttons": [
+ {"label": "Nous contacter", "url": "https://ti-nuage.fr/mentions_legales.html"}
+ ],
+ "description": "Nous ne le créons pas pour vous, mais nous pouvons vous apporter des conseils et nous hébergeons votre site internet. Vous pouvez utiliser votre propre noms de domaine où utiliser gratuitement un sous-domaine ti-nuage.fr",
+ "icon": "web",
+ "open": false,
+ "order": 1,
+ "title": "Hébergement Web"
+}