Index est le serveur web custom de la RiffZone, en cours de développement. Réalisé en GoLang et conçu pour s'exécuter sous Docker, il implémente actuellement un markdown primitif mais surtout un mécanisme d'héritage topologique, basé sur l'arborescence de fichiers plats. La RiffZone sert de bac à sable pour la mise au point de ce moteur.
Architecture
Au même niveau que l'exécutable (index), un dossier "hosts" contient les domaines inversés gérés par le moteur, par exemple:
\index \hosts \net.riffzone.whatever \net.riffzone.foobar
Index sert classiquement des fichiers HTML, avec un petit plus concernant l'interprétation de balises specifiques, et surtout un mécanisme global d'héritage. Voyons ça de plus près.
Includes
La balise d'inclusion est assez simple à comprendre, prenons par exemple l'aborescence de site suivante :
\net.riffzone.whatever \index.html \index.header.html \index.footer.html
Le fichier index.html de la page d'accueil de ce site ne contenant que trois lignes :
<<include:index.header.html>> Lorem ipsum, ad nauseam. <<include:index.footer.html>>
Ces balises font référence aux deux fichiers "index.header.html" et "index.footer.html", qui seront inclus respectivement avant et après le lipsum pour former le contenu HTML final.
Ces header et footer pourront par ailleurs être hérités, via le mécanisme que nous allons voir maintenant.
Héritage
Pour chaque spécification de fichier, spécifiée explicitement ou déterminée par défaut, celui-ci est recherché dans le répertoire spécifié puis dans les dossiers parents, en remontant l'arborescence jusqu'à la racine du domaine.
Prenons l'exemple ci-dessous :
\index.html \index.header.html \index.footer.html \index.page \section1\ \index.page \section2\ \index.page
Si on demande l'adresse https://domain.tld/section1, les fichiers index.html (par défaut), index.header.html et index.footer.html seront pris à la racine du site, alors que seul le fichier index.page sera pris à l'emplacement correspondant à la requête.
Variables
Les variables globales ou définies à divers niveau de l'arborescence dans les fichiers .settings ou même en entête des fichiers .page, sont accessibles via la syntaxe suivante :
Par exemple, sont définis globalement au niveau d'une requête :
Pages
Les pages sont des fichiers texte intégrant des sections de type markdown mais avec leur syntaxe spécifique. Les fichiers .page sont interprétés de manière à générer html, css et javascript. Il y a deux styles de marqueurs, d'abord les marqueurs de style empruntés à MediaWiki par exemple, ensuite des marqueurs de section sous la forme STUFF: en entrée puis :STUFF en sortie, avec les paramètres ou le contenu au milieu.
Important: les fichiers de description de pages ne contiennent PAS de code HTML, encore moins de JavaScript ou de CSS, le but est d'avoir des documents faciles à migrer d'un écosystème à un autre, ce qui impose des fonctionnalités volontairement limitées aux seules balises définies ici.
Les balises spécifiques aux fichiers de pages sont détaillées ici :
Authentification
L'authentification est en cours de design, on trouvera ci-dessous des spécifications temporaires susceptibles de changer radicalement à n'importe quel moment :
Todo
Tant de choses !...