Outil de différentiel
Versioning dans Scenari
La version 4 de Scenari ajoute aux chaînes éditoriales une dimension collaborative de gestion des fragments, rendue possible par un stockage s'appuyant sur une base de données orientée graphe, plutôt que sur un simple système de fichiers (Crozat, 2012b[1]). Cette version de Scenari propose notamment l'historisation automatique de chaque fragment ainsi que le versioning manuel d'un fragment et de son sous-réseau (ibid.[1]). Dans la première fonction, un système de purge permet de limiter le nombre d'entrées d'historique pour un fragment (créées à chaque enregistrement) ; dans la seconde, la version fige non-seulement l'état du fragment, mais aussi de tous les fragments de son sous-réseau (il est ainsi possible de ré-appliquer une transformation complète sur ces fragments).
Nous nous appuyons sur les versions créées manuellement au niveau des fragments "racine" (module et groupes de quiz) au moment où les contenus n'ont pas encore été modifiés. Dans la prévisualisation, une fois que le relecteur a activé la fonction de différentiel, ces versions apparaissent dans une liste déroulante :
Après la sélection d'une version, deux flux XHTML sont comparés à l'aide d'un algorithme de diff XML, développé par Kelis, s'exécutant côté serveur via une servlet Java. Le premier flux correspond à la prévisualisation "courante" (celle qui s'affiche dans le navigateur avec les contenus à jours) ; le second flux correspond à la prévisualisation de la version sélectionnée par le relecteur, chargée dans une iframe cachée. Les flux XHTML ne contiennent que les éléments pertinents pour la comparaison : les flux sont par exemple expurgés des éléments invariants tels que les scripts, les éléments du template de la page, etc.. Les résultats retournés par le diff sont ensuite traités côté client : des manipulations du DOM de la prévisualisation courante sont effectuées afin d'afficher les différences.
Nous avons choisi d'afficher le différentiel à deux niveaux : dans le plan et dans le contenu :
Dans le plan (disponible en marge permanente), les parties ajoutées sont de couleur verte tandis que les parties dont le contenu a été modifié sont de couleur jaune. Pour ces dernières, le nombre de différences à l'intérieur de la partie est précisé à droite de son titre. Les modifications de contenu sont affichées à l'aide de textes barrés (suppressions) ou soulignés (ajouts), ou par une marge rouge ou verte si la différence concerne un "bloc entier" (un paragraphe, une balise div, etc.). Un mode de navigation "précédant/suivant" (activable via l'icône se situant sous le delta en haut à droite) a également été ajouté afin de pouvoir afficher les différences une à une en surbrillance.
Nous avons choisi de ne pas afficher les parties supprimées dans le contenu, jugeant que cela aurait surchargé l'interface et délinéarisé davantage la lecture (typiquement, dans le cas d'une partie volumineuse supprimée). Par conséquent, ces parties ne sont pas indiquées dans le plan.
Enfin, notre logique d'affichage n'est pas exhaustive par rapport à la typologie de différences pouvant être renvoyées par l'algorithme de diff XML. Par exemple nous ne traitons pas, à l'heure actuelle, des différences portant sur du contenu mixte (typiquement, l'"enveloppement" d'un texte par une balise strong, span, etc.). Pour ces différences non-traitées, nous donnons la possibilité au relecteur d'afficher l'ancienne version du contenu, afin qu'il puisse faire la comparaison lui-même. Dans l'exemple ci-dessous, la différence non-traitée concerne l'ajout d'une balise autour du texte "objet signifiant" :

