Evolution v2 de ToDo

, par _Eric_

La situation actuelle

Le plugin ToDoest une extension de Textwheel dont le but est de présenter clairement une liste de tâches écrites simplement. Le choix des raccourcis typographiques privilégie la simplicité d’utilisation. Ils sont neutres du point de vue de la langue et utilisent le moins de caractères possibles.

La liste des tâches est insérée entre une marque de début et une marque de fin qui est soit une suite de trois « + » +++, soit une balise ouvrante <todo> et fermante </todo>.

Une tâche possède un statut à trois états : à faire, en cours ou terminée.

Quelques implémentations existantes

Des discussions ont déjà eu lieu sur le forum du plugin sur le site SPIP-Contrib. Les logiciels et formats suivants ont été épinglés :

Proposition d’évolution du plugin ToDo

A la lumière des formats existants et, en particulier, de celui de LessMess qui combine simplicité, complétude et extensibilité, l’évolution proposée consiste à :

  • étendre la liste des états,
  • ajouter de nouveaux éléments de classification comme les tags, les priorités et les projets,
  • permettre de compléter le libellé d’une tâche par une série d’informations typées comme la date de début et celle de fin ou par un descriptif libre.

Cette évolution est totalement compatible avec la version 1.1 actuelle ; elle ne fait que proposer des fonctions supplémentaires dont l’utilisation reste optionnelle.

Statut des tâches

La liste des statuts de LessMess est intéressante à reproduire. Néanmoins, par souci de compatibilité, on conserve le caractère unique en début de ligne tel que l’implémente ToDo ainsi que les raccourcis actuels « + », « - » et « o ».

La proposition est donc la suivante :

  • « + » : à faire (existant)
  • « - » : terminée (existant)
  • « o » : en cours (existant)
  • « x » : abandonnée (nouveau)
  • « = » : alerte, arrêtée (nouveau)
  • « ! » : alerte, nécessite une action (nouveau)
  • « ? » : alerte, statut inconnu (nouveau)

Etiquette ou contexte

Il semble se dégager un consensus sur la syntaxe d’une étiquette (appelée aussi contexte) dans la plupart des logiciels et formats consultés. L’idée est donc d’adopter cette convention pour ToDo, à savoir, @etiquette, séparée du texte précédent par un caractère d’espacement et écrit d’un seul tenant.

La question se pose pour le modèle tabulaire actuel de la présentation de ces étiquettes si l’on veut déclencher un tri ou un filtre dessus (à voir plus tard). Par contre, aucun lien n’est prévu avec la gestion des mots-clés de SPIP.

Priorités

Dans plusieurs formats la priorité est définie par une lettre majuscule positionnée en début de ligne et entourée de parenthèses. Ce format est trop lourd pour être utilisable simplement et il serait préférable de s’orienter vers l’un des deux solutions suivantes :

  • soit utiliser #A, #B ou #1 #2 pour indiquer le niveau de priorité
  • soit d’utiliser la notation des étiquettes en considérant que la priorité est une étiquette prédéfinie s’écrivant donc @A, @B ou @1 @2 et reconnaissable par son caractère alphanumérique unique.

La priorité peut être positionnée n’importe où avant ou après le libellé de la tâche. Elle est présentée dans une colonne supplémentaire du modèle tabulaire actuel.

Projets

Le projet est un regroupement de tâches qui concernent un même sujet. La façon la plus simple et partagée de l’implémenter est de considérer comme projet tout texte commençant en début de ligne a contrario d’une tâche qui commence toujours par un des caractères de statut. Néanmoins, suivant l’option adoptée pour le descriptif libre, il faudra amender cette solution en utilisant par exemple le caractère « :» en début de ligne pour identifier un projet.

Eu égard au modèle tabulaire actuel de présentation des todos, le projet pourrait prendre la forme d’une « caption » de tableau et déclencher systématiquement un nouveau tableau.

Informations complémentaires typées

L’idée est de compléter le libellé de la tâche par une ou plusieurs informations typées attachées à chacune des tâches comme sa date de début, sa date de fin, le numéro d’un commit, un numéro de version...

La solution proposée par LessMess parait la plus générique, à savoir, un identifiant du type d’information suivi du caractère « :» et de la valeur, type:valeur. Cette information peut être positionnée avant ou après le libellé de la tâche.

Concernant l’identifiant lui-même plusieurs stratégies sont possibles :

  • prédéfinir une liste et ne pas autoriser la création d’autres identifiants,
  • laisser libre les identifiants,
  • ou proposer une liste prédéfinie et permettre aux utilisateurs de l’étendre.

En outre, il devra être possible de proposer des traitements spécifiques sur la valeur d’un type donné comme pour un numéro de commit qui pourrait être traité différemment selon qu’il est écrit z72099, c12432 ou 234 (appel d’une fonction portant le nom de l’identifiant de type).

Les identifiants pouvant être prédéfinis sont :

  • « debut » : pour la date de début de la tâche
  • « fin » : pour la date de fin de la tâche
  • « commit » : pour un numéro de commit pouvant s’écrire comme précisé plus haut et provoquant dans les deux premiers cas la création du lien vers la zone ou le core.
  • « version » : un numéro de version

Cette information est présentée dans une colonne supplémentaire du modèle tabulaire actuel. Le titre de la colonne serait construit par un item de langue formaté avec le nom de l’identifiant.

Il est exact que les informations comme commit et version sont très spécialisées et pourraient être considérées comme incongrues dans le plugin ToDo. Dans ce cas, il faudrait prévoir un mécanisme d’extension des types d’information qui pourrait être intégré facilement dans un plugin connexe.

Descriptif complémentaire libre

Le libellé d’une tâche peut être complété par un descriptif libre forcément rédigé entre la fin des informations d’une tâche donnée et le début de la suivante. LessMess propose une syntaxe pour cette information consistant en un texte libre sur une ou plusieurs lignes et commençant par le caractère « :». Un autre solution serait de ne pas utiliser le caractère « :» mais il faudrait dès lors adapter la syntaxe d’un projet.

Ce descriptif viendrait se coller au libellé de la tâche dans la même colonne.

Exemple de todos

<todo>
:Projet 1
- Refaire fonctionner l'aide en ligne des plugins fin:2013-05-26 commit:z72345 @1 @aide @sad
o Utiliser Tickets pour remonter les problème du site, les actions à réaliser voire les erreurs sur la présentation des plugins @2 @sad commit:z70345 
- Ajouter un menu des langues disponibles fin:2013-05-26 commit:c12345 @1 @traduction
+ Vérifier la gestion correcte des langues dans les pages @1 @traduction
+ Vérifier les traductions @1 @traduction
On parle ici des traductions du plugin Plugins SPIP et du Upload de SPIP !
x Mettre en place la gestion des tags en plus des catégories (plugin étiquettes ?) fin:2013-05-28
= Revoir la présentation du formulaire de sélection des plugins en vedette ou supprimer cette fonction

:Projet 2
! Etendre le serveur d'aide et le promouvoir @2 @aide @sad
? Ajouter une fonction d'agrégateur de profil utilisateur pour compléter l'aspect développement @3
</todo>