Réalisation des évolutions v2 de ToDo

, par _Eric_

Statut des tâches

Chaque nouveau statut est associé à un identifiant textuel comme suit :

  • « x » : abandonne
  • « = » : arrete
  • « ! » : alerte
  • « ? » : inconnu

La fonction tw_todo est donc modifiée légèrement pour permettre de renvoyer ces nouveaux statuts. Néanmoins, il faut traiter chaque ligne avec une instruction de suppression du caractères   qui est rajouté devant les caractères « ! » et « ? » par les traitements typographiques de SPIP.

En outre, il faut rajouter les icônes de statut correspondants en format png et les nommés todo-<statut>-16.png. Pour le statut inconnu on utilise l’icône inclus comme titre de la colonne que l’on remplace simplement par le caractère « ? ». Il faut également rajouter les items de langue pour le title de l’icône indiquant clairement le statut : l’item est de la forme statut_<identifiant du statut>.

Étiquette ou contexte

Toute information écrite @tag est considérée comme une étiquette ou un contexte à partir du moment où « tag » est une chaine alphanumérique construites à partir des caractères [a-z0-9_] (voir aussi le paragraphe Priorités).

Pour chaque tâche la liste des étiquettes est collectée et affichée précédée d’un petit icône habituel pour les tags. Pour le modèle tabulaire actuel, ces étiquettes sont affichées dans la colonne du titre, après le titre de la tâche lui-même.

Priorités

Afin d’éviter de multiplier les caractères signifiants on réutilise le caractère @ pour indiquer une priorité à la tâche. Néanmoins, pour distinguer clairement la priorité d’une étiquette ou d’un contexte on limite la priorité à un seul caractère numérique [1-9].

La priorité devient une colonne toujours placée avant le numéro de la tâche et dont le titre est « ! ». Il faut donc juste rajouter l’item de langue du title de tri par priorité tri_priorite.

Informations complémentaires typées

Les informations typées sont écrites avec la syntaxe type:valeur où type et valeur sont des mots pouvant contenir des caractères alphanumériques y compris « - », « . » et « _ ». Les types d’information sont extensibles mais le plugin ToDo propose déjà 4 types prédéfinis :

  • « debut » : pour la date de début de la tâche sous la forme 2012-06-02 ;
  • « fin » : pour la date de fin de la tâche sous la forme 2012-06-09 ;
  • « commit » : pour un numéro de commit pouvant s’écrire z72463, c12922 ou 234 et provoquant dans les deux premiers cas la création du lien vers la zone ou le core ;
  • « version » : un numéro de version.

Pour chaque type d’information il est fait appel, si elle existe, à une fonction todo_formater_${type} qui produit la chaine représentant la valeur du type. Le plugin fournit pour l’instant uniquement la fonction todo_formater_commit().

Pour le modèle tabulaire actuel, chaque information typée provoque l’ajout d’une colonne. Le titre de la colonne label_${type} et le title de l’action de tri tri_${type} ont été rajoutés pour les types prédéfinis.

Descriptif complémentaire libre

Afin d’écrire à la volée un descriptif libre de la tâche le plus naturel est de ne demander aucun caractère de début de ligne. Toute ligne ne commençant pas par un caractère signifiant est donc un descriptif libre. Chaque ligne du descriptif est concaténée au libellé de la tâche avec une balise <br />.

Projets

Étant donné le choix fait pour le descriptif libre, pour repérer le titre d’un projet on utilise donc le caractère « :» en début de ligne. Tout le reste de la ligne constitue le nom du projet.

Pour le modèle tabulaire actuel, le nom du projet est affiché en caption du tableau. Chaque nom de projet déclenche la clôture de l’éventuelle todo en cours et la création d’une nouvelle todo. Ceci implique que l’on boucle sur l’appel du modèle dans la fonction php de traitement de la wheel.

Ajout des actions dans le Porte-plume

On ajoute dans le porte-plume les nouveaux statuts décrits dans le premier paragraphe en utilisant les pipelines porte_plume_barre_pre_charger pour les actions de la barre d’édition et porte_plume_lien_classe_vers_icone pour les icônes.

Comme pour la version v1, les icônes utilisés dans l’affichage de la todo sont dupliqués dans le répertoire icones_barre/ pour être affichés dans la barre d’outils. Pour les title des icônes correspondants on crée les items de langue associés.

Mise en exergue de certaines tâches

L’affichage du titre des tâches en fonction du statut est aujourd’hui limité et incohérent entre SPIP 2 et SPIP 3. Seules les titres des tâches terminées ont un texte barré. Par contre, cela implique que ces tâches apparaissent parfois en fond rouge sur certains squelettes SPIP 3.

L’idée est de corriger cet effet indésirable mais aussi de visualiser nettement ce qui reste ou est en alerte plutôt que ce qui est terminé.

La mise à jour est donc la suivante :

  • on rajoute systématiquement une classe css au titre qui représente exactement l’identifiant du statut afin de ne plus associer les css de décoration à la balise <del> ;
  • on utilise la balise <del> uniquement pour barrer le titre et on l’étend au statut abandonné qui représente aussi une fin de tâche ;
  • on utilise une balise <span> pour les autres statuts ;
  • on atténue la couleur du texte barré pour moins faire apparaitre les tâches finies ;
  • on affiche en rouge avec surlignage rose (alertes « majeures ») les titres des tâches de statut « inconnu » et « alerte » ;
  • on affiche en surlignage jaune (alertes « mineures ») les titres des tâches de statut « arrete ».

En conclusion on définit 3 types de statut qui provoque un affichage idoine :

  • fini ;
  • en alerte mineure ;
  • en alerte majeure.

Configuration et extension

Les statuts

La liste des statuts ainsi que leur type est définie dans une variable globale comme suit :

  1. $GLOBALS['todo_statuts'] = array(
  2. '+' => array(
  3. 'id' => 'afaire',
  4. 'final' => false,
  5. 'alerte' => ''),
  6. 'o' => array(
  7. 'id' => 'encours',
  8. 'final' => false,
  9. 'alerte' => ''),
  10. '-' => array(
  11. 'id' => 'termine',
  12. 'final' => true,
  13. 'alerte' => ''),
  14. 'x' => array(
  15. 'id' => 'abandonne',
  16. 'final' => true,
  17. 'alerte' => ''),
  18. '=' => array(
  19. 'id' => 'arrete',
  20. 'final' => false,
  21. 'alerte' => 'mineure'),
  22. '!' => array(
  23. 'id' => 'alerte',
  24. 'final' => false,
  25. 'alerte' => 'majeure'),
  26. '?' => array(
  27. 'id' => 'inconnu',
  28. 'final' => false,
  29. 'alerte' => 'majeure')
  30. );

Cette configuration peut-être modifiée dans une certaine mesure, en particulier, pour l’affichage des alertes et états finaux si ceux par défaut ne conviennent pas ou pour l’ajout de statuts (modérément). En outre, les css associés à ces enrichissements peuvent aussi être surchargés.

Informations typées

Il est facile d’ajouter des informations typées en plus de celles proposées par le plugin (date de début, date de fin, commit, version). Tout couple type:valeur devient une information typée dès lors qu’elle est utilisée dans le cadre d’une tâche. Si l’on veut traiter la valeur et la formater précisément, il suffit d’écrire une fonction inc_todo_formater_${type}() qui renvoie la valeur d’entrée avec le format souhaité.