Documentation du Système d'Héritage et des Balises .page
Ce document a été rédigé directement avec les balises supportées par le moteur de rendu du serveur. Il détaille le fonctionnement interne de l'héritage (paramètres, fichiers, thèmes et droits) ainsi que la liste exhaustive des balises disponibles dans les fichiers .page.
Architecture

Au même niveau que l'exécutable (index), un dossier "data" contenant un dossier "hosts" qui contient les domaines inversés gérés par le moteur, par exemple:

data
hosts
net.riffzone.foobar
net.riffzone.whatever
index

Par la suite on se situera dans le contexte d'un domaine particulier.

Balises

Le moteur interprète à la volée un ensemble de balises (tags) principalement présentes sous les formes suivantes :

<tag:paramètre:> Par exemple: <title:Mon Titre:>

ou

<tag:> contenu <:tag> Par exemple: <code:> func blabla () { } <:code>

ou

<tag:> PARAM1=VALEUR1 PARAM2=VALEUR2 <:tag> Par exemple: <link:> TITLE=Mon lien HREF=https://www.monlien.com SYNOPSIS=Quel beau lien ! <:link>
Includes

La balise d'inclusion est assez simple à comprendre, prenons par exemple l'aborescence de site suivante :

net.riffzone.whatever
index.footer.html
index.header.html
index.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>

Les 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.

Le Système d'Héritage

Le serveur repose sur un principe d'héritage arborescent permettant de mutualiser la configuration, les gabarits et les règles d'accès sans duplication.

Héritage des paramètres (.settings)

Les fichiers de réglages suivent une cascade descendante, de la racine du site vers le sous-dossier demandé. Pour une requête vers /articles/tech/index.html, le moteur charge et fusionne successivement :

1. /index.settings (racine)

2. /articles/index.settings

3. /articles/tech/index.settings

Chaque niveau enfant enrichit ou surcharge les variables héritées du niveau parent.

Exemple de contenu d'un fichier .settings :

TITLE=Mon Site Web THEME=bleu ARTICLEBGCOLOR=#eef4ff PAGEBGCOLOR=#ffffff

Insertion dynamique de variables :

Toute variable définie dans un .settings ou en haut d'une page peut être injectée dans le HTML ou la page via la syntaxe de substitution :

<=TITRE_VARIABLE|valeur_par_defaut>

Il existe également une variable spéciale de débogage qui affiche toutes les variables actives :

<=DEBUG.SETTINGS>
Résolution et héritage des fichiers

Lorsqu'un fichier (page, image, script ou gabarit) est demandé, le moteur effectue une recherche ascendante depuis le dossier courant jusqu'à la racine :

1. Recherche dans le sous-dossier demandé.

2. Si non trouvé, recherche dans le dossier parent immédiat, et ainsi de suite jusqu'à la racine.

3. Si toujours non trouvé et qu'un paramètre THEME est actif, recherche dans le répertoire du thème correspondant.

4. Si le fichier demandé est index.html et qu'il n'existe nulle part, le serveur utilise le fichier index.html embarqué par défaut dans le binaire.

De manière générale, l'héritage se fait en réponse à une requête en cherchant d'abord dans le répertoire cible de la requête, puis en remontant la chaîne des dossiers parents jusqu'au dossier racine du site, puis dans le dossier du thème éventuel, et enfin dans les assets de l'application serveur elle-même :

Ce mécanisme permet par exemple de définir un seul index.html commun à la racine pour tout le site, tout en laissant chaque sous-dossier fournir son propre index.page ou ses propres médias.

Contrôle d'accès et droits hérités (index.rights)

La protection des ressources repose sur une convention de nommage et des fichiers de droits :

- Tout répertoire dont le nom commence par un caractère souligné (underscore, par exemple _admin ou _prive) est automatiquement identifié comme privé.

- L'accès requiert une authentification utilisateur.

- Les droits sont définis dans des fichiers index.rights sous la forme :

utilisateur1=motdepasse1 utilisateur2=motdepasse2

- Le moteur vérifie les autorisations en parcourant l'ensemble des segments du chemin d'accès.

L'authentification passe par deux tags, respectivement de connexion (login) et de déconnexion (logout). Le tag de connexion désigne un dossier de destination après une connexion réussie, on donnera typiquement un dossier sécurisé, ou contenant un ensemble de dossiers sécurisés, selon les modalités décrites précédemment.

Bouton et lien de connexion :

<login:destination:>

Bouton de déconnexion de l'utilisateur :

<logout:>

Par exemple :

_articles-prives
article-1
index.page
article-2
index.page
index.html
index.rights
articles
_private-article
index.page
index.rights
index.html
public-article
index.page
index.auth.html
index.page
riffzone-eye.png
Le Système de Balises .page

Les fichiers .page constituent le format de rédaction du serveur. Les retours à la ligne simples forment des paragraphes standards, tandis que les balises spécifiques permettent d'enrichir la mise en page.

En-tête de page (métadonnées)

Avant le premier texte ou la première balise de la page, vous pouvez déclarer des variables sous la forme CLE=VALEUR :

TITLE=Mon Titre de Page PAGEBGCOLOR=#f9f9f9

Si TITLE n'est pas défini dans l'en-tête, le moteur utilise automatiquement le texte de la première balise title rencontrée.

Titres et hiérarchie textuelle

Trois niveaux de titres sont disponibles, sous forme simple sur une ligne ou sous forme de bloc encadré :

Titre principal (niveau 1) :

<title:Mon Titre Principal:> ou <title:>Mon Titre Principal<:title>

Chapitre (niveau 2) :

<chapter:Mon Chapitre:> ou <chapter:>Mon Chapitre<:chapter>

Section (niveau 3) :

<section:Ma Section:> ou <section:>Ma Section<:section>
Blocs de mise en avant et blocs préformatés

Bloc d'encadré ou note :

<note:Ceci est une note sur une ligne.:>

ou

<note:> Ceci est une note multiligne. Les styles et liens y sont interprétés. <:note>

Blocs de code et sorties console (texte préformaté non interprété, caractères échappés) :

<code:> fmt.Println("Code source") <:code> <cmd:> ls -la /var/www <:cmd> <conf:> PORT=8080 HOST=localhost <:conf> <output:> 200 OK - Fichier servi avec succès <:output>

Image unique :

<image:photo.jpg:> <image:photo.jpg|TITLE=Légende sous la photo:>

Image inline insérée dans un paragraphe :

<img:illustration.png:>

Lecteur audio / son :

<sound:musique.mp3:> <sound:musique.mp3|TITLE=Titre du morceau:>

Galerie d'images basée sur un dossier :

<gallery:nom_du_dossier:>

Galerie personnalisée avec liste d'images et titres individuels :

<gallery:> image1.jpg|TITLE=Première photo image2.png|TITLE=Deuxième photo dossier_secondaire/image3.jpg|TITLE=Troisième photo <:gallery>

Par exemple :

Cartes d'articles, arborescences

Carte d'aperçu d'un sous-dossier (article) :

<article:nom_du_dossier:>

Cette balise génère une carte cliquable présentant le titre, la date, le synopsis et l'éventuelle image picture.jpg du sous-dossier.

Arborescence interactive de répertoires :

<tree:nom_du_dossier:>
Mise en forme inline du texte

Au sein des paragraphes ou des notes, vous pouvez utiliser les enrichissements typographiques suivants :

- Mettre en gras :

<b:>texte en gras<:b>

- Mettre en italique :

<i:>texte en italique<:i>

- Souligner du texte :

<u:>texte souligné<:u>

- Insérer un espacement vertical personnalisé :

<space:25px:>

- Lien externe (ouvert dans un nouvel onglet) :

[Nom du lien]((https://example.com))

- Lien interne :

[Nom de la page](/mon-dossier/)

- URL directe cliquable :

<https://example.com>
Inclusions dynamiques de fichiers

Vous pouvez inclure un autre fichier .page ou un fragment .html à n'importe quel endroit :

<include:menu.html> <include:pied_de_page.page>

Le fichier inclus bénéficie lui aussi du système de recherche ascendante et d'héritage.

Cette page et quelques autres sont propulsées par Index
Riffzone