La documentation de Frantext : un wiki programmable
La documentation de Frantext est rédigée à l'aide d'un wiki open-source baptisé Xwiki développé en Java. Au-delà des fonctionnalités classiques d'un wiki, il a l'originalité de permettre à n'importe quel rédacteur de créer des pages complexes à l'aide de langages de script tels que JavaScript et Apache Velocity, sans nécessiter de droits spécifiques d'administration ou de programmation. Ce type de wiki peut servir à valoriser un projet de recherche ou des publications scientifiques.
L'ajout d'extensions peut permettre l'utilisation d'autres langages tels que Python, Ruby, PHP, mais ces derniers ne pourront être exploités que par des utilisateurs ayant des droits d'administration ou de programmation.
Éditeur en ligne
L'édition de pages se fait par défaut en mode WYSIWYG. L'éditeur CKEditor est installé par défaut. D'autres éditeurs peuvent être installés par l'administrateur.
Il permet notamment d'appliquer les enrichissements de caractères les plus courants tels que le gras et l'italique. Il permet de créer des liens, des tableaux, d'intégrer des images et même d'appliquer des styles prédéfinis tels que les niveaux de titres standards (H1-H6) ou bien des classes issues des feuilles de styles utilisées par le thème graphique.
Pour éditer une page, cliquez en haut à droite sur le bouton Modifier.
Syntaxe WIKI
Lorsque vous modifiez une page, vous pouvez utiliser la syntaxe WIKI pour appliquer les mêmes enrichissements de caractères que l'éditeur, en cliquant sur le bouton Source depuis la barre de l'éditeur.
Enrichissement | Affichage | Syntaxe WIKI | ||||||
---|---|---|---|---|---|---|---|---|
Gras | Texte en gras | **Texte en gras** | ||||||
Italiques | Texte en italique | //Texte en italique// | ||||||
Lien | Lien | [[Lien>>doc:Main.WebHome]] | ||||||
Tableau |
| |=Col 1|=Col 2|=Col 3 |A|B|C | ||||||
Image | [[image:Main.WebHome@grammaire.png||alt="Grammaire"]] | |||||||
Titre H1-H6 | Titre de niveau 4 | ==== Titre de niveau 4 ==== | ||||||
Classe CSS | Texte d'introduction | (% class="lead" %) Texte d'introduction |
Présentation avancée
Il est possible d'exploiter des composants propres au thème graphique, ou d'utiliser des Macros XWiki.
Enrichissement | Affichage | Syntaxe WIKI |
---|---|---|
Code | La macro Code | {{code}}La macro Code{{/code}} |
HTML | La macro HTML | {{html}}<small>La macro HTML</small>{{/html}} |
TOC | {{box cssClass="floatinginfobox" title="**DANS CETTE PAGE**"}} {{toc start=2 depth=2 numbered=false scope=page /}} {{/box}} | |
BOOTSTRAP CSS | [[Un bouton Bootstrap 3>>https://getbootstrap.com/docs/3.3/css/#buttons-sizes||class="btn btn-primary btn-lg"]] et ajout d'un objet XWiki.StyleSheetExtension #xwikicontent .wikiexternallink { background: none; padding-right: 0; } | |
BOOTSTRAP JS | Une alerte Bootstrap 3 | (% role="alert" class="alert alert-danger alert-dismissible" %) ((( {{html wiki="true"}} <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button> <strong>Une alerte Bootstrap 3 {{/html}} ))) |
Programmation côté client
Enrichissement | Affichage | Syntaxe WIKI |
---|---|---|
JQUERY | 3 publications HAL | {{html wiki="true"}} <h3>3 publications HAL<span id="halnum"></span></h3> <div id="hal"></div> {{/html}} et ajout d'un objet Xwiki.JavaScriptExtension : require(['jquery'], function($) { var halurl = "https://api.archives-ouvertes.fr/search/hal/?omitHeader=true&wt=json&indent=true&q=Frantext&sort=producedDate_tdate+desc&fq=NOT+instance_s%3Asfo&fq=NOT+instance_s%3Adumas&fq=NOT+instance_s%3Amemsic&fq=NOT+%28instance_s%3Ainria+AND+docType_s%3A%28MEM+OR+PRESCONF%29%29&fq=NOT+%28instance_s%3Aafssa+AND+docType_s%3AMEM%29&fq=NOT+%28instance_s%3Aenpc+AND+docType_s%3A%28OTHERREPORT+OR+MINUTES+OR+NOTE+OR+SYNTHESE+OR+MEM+OR+PRESCONF%29%29&fq=NOT+%28instance_s%3Auniv-mlv+AND+docType_s%3A%28OTHERREPORT+OR+MINUTES+OR+NOTE+OR+MEM+OR+PRESCONF%29%29&fq=NOT+%28instance_s%3Ademocrite+AND+docType_s%3AMEM%29&fq=NOT+%28instance_s%3Aafrique+AND+docType_s%3AMEM%29&fq=NOT+%28instance_s%3Asaga+AND+docType_s%3A%28PRESCONF+OR+BOOKREPORT%29%29&fq=NOT+%28instance_s%3Aunice+AND+docType_s%3AMEM%29&fq=NOT+%28instance_s%3Alara+AND+docType_s%3AREPACT%29&fq=NOT+%28docType_s%3A%28THESE+OR+HDR%29+AND+submitType_s%3A%28notice+OR+annex%29%29&fq=NOT+%28instance_s%3Alaas+AND+docType_s%3AMEM%29&fq=NOT+%28instance_s%3Aephe+AND+docType_s%3AMEM%29&fq=NOT+instance_s%3Ahceres&fq=NOT+status_i%3A111&fq=%7B%21tag%3Dtag0__docType_s%7DdocType_s%3A%28%22ART%22+OR+%22COMM%22+OR+%22OUV%22+OR+%22COUV%22+OR+%22DOUV%22+OR+%22REPORT%22+OR+%22OTHER%22+OR+%22THESE%22+OR+%22HDR%22+OR+%22LECTURE%22+OR+%22UNDEFINED%22%29&fq=%7B%21tag%3Dtag1__submitType_s%7DsubmitType_s%3A%28%22file%22%29&defType=edismax&rows=10"; $.getJSON(halurl, function(data) { var items = []; var j = data.response.docs.length; $("#halnum").text("(sur " + data.response.numFound + ")"); for (i = 0; i < j; i++) { var k = data.response.docs[i]; items.push("<li id='" + k.docid + "'><a href='" + k.uri_s + "'>" + k.label_s + "</a></li>"); } $("<ol/>", { "class": "hal-list", html: items.join("") }).appendTo("#hal"); }); }); |
Programmation côté serveur
Enrichissement | Affichage | Syntaxe WIKI |
---|---|---|
Variables | Le 14 mai 2025, Frantext intégral contient 5350 ouvrages dans sa version 1.2.21. | {{velocity}} #set ($chaine = "Frantext") #set ($tableau = ["intégral", "démonstration", "agrégation"]) #set ($objet = { "version": "1.2.21", "oeuvres": "5350" }) #set ($date = $datetool.get('dd MMMM yyyy')) Le $date, $chaine $tableau[0] contient $objet["oeuvres"] dans sa version $objet.version. {{/velocity}} |
Script | {{velocity}} #set ($query = $services.query.xwql("from doc.object(XWiki.TagClass) as tag where 'faq' member of tag.tags order by doc.date desc")) #set ($recentlyCreated = $query.addFilter('hidden').setLimit(6).execute()) #if ($recentlyCreated.size() > 0 || $showEmptyPanels) #panelheader('Questions fréquentes') #foreach ($docName in $recentlyCreated) #if ($xwiki.hasAccessLevel('view', $docName)) #set ($recentDoc = $xwiki.getDocument($docName).getTranslatedDocument()) #set ($recentTag = $xwiki.getDocument($docName).getTagList()) #foreach ($myTag in $recentTag) #if ($myTag.matches('.*v\d+\.\d+\.(\d+|x).*')) #set ($temp = $myTag) #end #end ## Affichage du résultat en HTML * {{html}}<a href="$recentDoc.getURL()">$escapetool.xml($recentDoc.plainTitle)</a> <small class="text-muted">$temp</small>{{/html}} #end #end #panelfooter() #end {{/velocity}} | |
Macro | {{velocity}} #macro( listByTagName $title $tag $order $limit) #set ($query = $services.query.xwql("from doc.object(XWiki.TagClass) as tag where '$tag' member of tag.tags order by $order")) #set ($recentlyCreated = $query.addFilter('hidden').setLimit($limit).execute()) #if ($recentlyCreated.size() > 0 || $showEmptyPanels) #panelheader($title) #foreach ($docName in $recentlyCreated) #if ($xwiki.hasAccessLevel('view', $docName)) #set ($recentDoc = $xwiki.getDocument($docName).getTranslatedDocument()) #set ($recentTag = $xwiki.getDocument($docName).getTagList()) #foreach ($myTag in $recentTag) #if ($myTag.matches('.*v\d+\.\d+\.(\d+|x).*')) #set ($temp = $myTag) #end #end ## We use HTML here because we don't have a tool to escape wiki syntax in document title. * {{html}}<a href="$recentDoc.getURL()">$escapetool.xml($recentDoc.plainTitle)</a> <small class="text-muted">$temp</small>{{/html}} #end #end #panelfooter() #end #end #listByTagName('Fonctionnalités','manuel','doc.date desc',6) {{/velocity}} | |
Inclusion | {{include reference="xwiki:variables.WebHome"/}}{{velocity}}#recherche{{/velocity}} |
Aller plus loin
- XWiki : https://www.xwiki.org/xwiki/bin/view/Main/WebHome
- Syntaxe XWiki : https://www.xwiki.org/xwiki/bin/view/Documentation/UserGuide/Features/XWikiSyntax/
- HTML / CSS / Javascript : https://developer.mozilla.org/fr/docs/Web
- LESS : http://lesscss.org/
- JQUERY : https://jquery.com/
- Apache Velocity : http://velocity.apache.org/
- Apache Groovy : http://groovy-lang.org/index.html
- Bootstrap 3 : https://getbootstrap.com/docs/3.3/
- Les scripts de XWiki : https://network.xwiki.com/xwiki/bin/view/DocXE44Fr/LesScriptsXWiki
Versions
- getCoreExtension : 10.11.11
- repository.environmentExtension : 10.11.11