Skip to content

Instantly share code, notes, and snippets.

@real34
Last active December 13, 2016 23:23
Show Gist options
  • Save real34/880469be8f6e69461120bd448113bd65 to your computer and use it in GitHub Desktop.
Save real34/880469be8f6e69461120bd448113bd65 to your computer and use it in GitHub Desktop.
Eve - Application "Autofocus"

Autofocus

Mon application

Ceci une application de TODO List pour remplacer le carnet qui me suit partout. Cette application sera utilisée en plusieurs phases : planification ou action.

Au lancement l'application est en mode planification.

commit
  [#app phase: "planification"]

Liste des tâches

Elle affiche une liste de toutes mes tâches en cours, et permet de les manipuler selon le système "Autofocus" (voir section dédiée).

search
	[#tache libelle timestampCreation]
  tache = [#tache]
  app = [#app phase]

bind @browser
  [#h1 text: "TODO"]
  [#p text: "Phase actuelle : {{app.phase}}"]
  [#ul children:
    [#li #todo tache
    	sort: tache.timestampCreation
    	text: "{{tache.libelle}}"]]

Les tâches sélectionnées sont affichées en rouge, et les tâches terminées sont barrées et grisées :

search @browser @session
  élémentSélectionné = [#todo tache: [#tache #sélectionnée]]
	élémentTerminé = [#todo tache: [#tache #terminée]]

bind @browser
	élémentSélectionné.style := [color: "red"]
  élémentTerminé.style := [
  	color: "grey"
    text-decoration: "line-through"
    font-style: "italic"
    font-size: "0.9em"]

Si aucune tâche n'existe on affiche un message zen

search
  not([#tache])

bind @browser
  [#h1 text: "Rien n'est plus beau que le vide"]
  [#p text: "Bravo pour ta productivité. Il est temps de profiter des tiens"]

Nouvelle tâche

Il est possible de saisir une nouvelle tâche à faire à tout moment.

bind @browser
  [#div sort: 1000 children:
    [#input #nouvelle-tache placeholder: "acheter du lait"]]

Lors de l'ajout, la tâche est ajoutée à la fin des tâches en cours et non sélectionnée

search @event @session @browser
  element = [#nouvelle-tache value]
  kd = [#keydown element, key: "enter"]

commit @session @browser
  [#tache libelle: value]
  element.value := ""

Autofocus

Le système Autofocus consiste en des étapes différentes.

Saisie des tâches l'une après l'autre

Lorsqu'une tâche est ajoutée au système, elle l'est toujours en fin de liste (car c'est la plus récente).

search
	tache = [#tache]
  not(tache = [timestampCreation])
  [#time timestamp]

commit
	tache <- [timestampCreation: timestamp]

Sélection de la tâche la plus ancienne

La planification débute par la sélection de la tâche la plus ancienne

search
  [#app phase: "planification"]
  sort[value: timestampCreation] = 1
  plusAncienneTâche = [#tache timestampCreation]

bind
	plusAncienneTâche += #sélectionnée

Sélection des tâches suivantes que l'on veut faire avant

Le but dans cette étape est de parcourir la liste de tâches situées après la dernière tâche sélectionnée ("tâche X")

search
	[#app phase: "planification"]
  sort[value: timestampCreationSelected direction: "down"] = 1
  [#tache #sélectionnée timestampCreation: timestampCreationSelected]
  tâchesSélectionnables = [#tache timestampCreation not(#terminée)]
  timestampCreation > timestampCreationSelected

bind @view @session
	tâchesSélectionnables += #sélectionnable
	[#value | value: tâchesSélectionnables.libelle]

et de se demander pour chacune d'entre elle : "Est-ce que je veux réaliser cette tâche Y avant la tâche X ?"

search @event @browser
	[#click]

bind @view
	[#value | value: "clicked"]

La réponse dépendra du contexte, de la volonté et de l'urgence par exemple. Si on répond "Oui" à cette question, alors sélectionner cette tâche et recommencer l'opération pour les tâches ultérieures à celles-ci.

search @browser @session @event
	tache = [#tache #sélectionnable]
  [#click element: [#todo tache]]

bind @view
  [#value | value: tache.libelle]

Pour aider à la détection visuelle des tâches sélectionnables, l'application rendra plus transparentes les non sélectionnables et rendra cliquables les sélectionnables.

search @browser @session
  élémentSélectionnables = [#todo tache: [#tache #sélectionnable]]
  élémentNonSélectionnables = [#todo tache: [#tache not(#sélectionnable)]]

bind @browser
	élémentSélectionnables.style := [color: "green" cursor: "pointer"]
  élémentSélectionnables.title := "Sélectionner"
	élémentNonSélectionnables.style := [opacity: 0.3]

Passage en phase d'action

Une fois qu'aucune tâche ultérieure à la dernière sélectionnée ne souhaite être réalisée, il est temps de repasser en mode "Action".

Au passage en mode action, le but est de se focaliser sur la tâche la plus récente sélectionnée. L'interface présente donc uniquement son contenu à l'utilisateur.

TODO

L'utilisateur décide alors de travailler sur cette tâche autant de temps qu'il le souhaite (5 minutes comme 2 heures).

Fin d'action sur une tâche

Lorsque l'utilisateur souhaite arrêter de travailler sur la tâche en cours (qu'elle soit terminée ou non), il peut cliquer sur un bouton pour notifier l'application.

TODO

La tâche en cours est alors marquée comme terminée et ajoutée à nouveau en fin de liste.

TODO

Dans la cas où d'autres tâches (antérieures) avaient été sélectionnées en phase de planification, la tâche sélectionnée la plus récente devient alors la tâche en cours et la session de travail peut reprendre.

TODO

Dans le cas où la tâche venant de se terminer était la dernière sélectionnée (donc la tâche la plus ancienne), l'application repasse en phase "Planification".

TODO

Jeu de données

Afin d'avoir une interface un peu cohérente voici des exemples de données :

search
	app = [#app]
  not(app = [#init])
  [#time timestamp]

commit
	app += #init

  [#tache libelle: "Se doucher" timestampCreation: timestamp - 20]
	[#tache libelle: "Nettoyer" #terminée timestampCreation: timestamp]
  [#tache libelle: "Ranger" #sélectionnée timestampCreation: timestamp - 2]
  [#tache libelle: "Dormir" timestampCreation: timestamp + 20]
  [#tache libelle: "Ronfler" timestampCreation: timestamp + 21]
  [#tache libelle: "Faire du café"]

Bugs connus

Le champ ne se vide pas

Pour reproduire : saisir une nouvelle tâche et taper entrée Ce qu'il se passe : la tâche est ajoutée, mais le champ reste rempli avec la valeur saisie Attentue: tâche ajoutée mais champ vidé

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment