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.

Par défaut, le wiki permet d'exploiter les langages suivants : XWIKIsyntax, HTML, CSS, LESS, Javascript, JQuery, Apache Velocity, Apache Groovy, etc. Le thème graphique par défaut utilise quant à lui les bibliothèques suivantes : Bootstrap, Jquery, LESS, etc.

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.

EnrichissementAffichageSyntaxe WIKI

Gras

Texte en gras
**Texte en gras**

Italiques

Texte en italique
//Texte en italique//

Lien

Lien
[[Lien>>doc:Main.WebHome]]

Tableau

Col 1Col 2Col 3
ABC
|=Col 1|=Col 2|=Col 3
|A|B|C

Image

Grammaire

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

EnrichissementAffichageSyntaxe 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

(% 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">&times;</span></button>
<strong>Une alerte Bootstrap 3
{{/html}}
)))

Programmation côté client

EnrichissementAffichageSyntaxe 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

EnrichissementAffichageSyntaxe WIKI

Variables

Le 24 avril 2024, 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

Versions

  • getCoreExtension : 10.11.11
  • repository.environmentExtension : 10.11.11
Tags : hidden
Modifié par Gilles Toubiana le 2021/07/09 11:39
Frantext - ATILF (CNRS/UL) - 2018-2024

Logo CNRS   Logo ATILF   Logo Université de Lorraine