Clochix

Aller au contenu | Aller au menu | Aller à la recherche

dimanche 8 novembre 2009

Avec Jetpack, si tu sais cuisiner un site Web, tu peux aussi bidouiller Firefox

Si tu sais cuisiner une page Web, tu peux créer une extension pour Firefox. Ainsi pourrait être résumée la philosophie de Jetpack, un projet actuellement développé par les Laboratoires Mozilla et qui devrait devenir d'ici un an la base du nouveau mécanisme d'extensions de Firefox 4. Le but est de permettre à tout développeur Web de pouvoir bidouiller Firefox sans devoir apprendre un nouveau langage. Petit tour d'horizon à l'occasion de l'arrivée de la version 0.6

Lire la suite...

mardi 16 septembre 2008

XUL est-il encore le bon choix pour une application web riche ?

Celles et ceux qui suivent un peu ce journal savent que je développe depuis quelques temps une application web[1] dont l'interface utilise la technologie XUL. Le développement n'avance plus depuis quelques mois parce que je me suis lancé dans une itération de refactoring dont je n'arrive pas à me sortir, entre autre parce que quitte à effacer et ré-écrire des bouts de code, je ne cesse d'élargir le périmètre des travaux, et que j'ai fini par me demander s'il était encore judicieux de continuer à utiliser XUL, ou si je ne devais pas recommencer la partie client en pur HTML. Bref, je suis en plein doute, ce qui explique que je perde mes soirées à traîner sur des blogs et à m'épancher ici au lieu de coder[2].

Notes

[1] qui vise, soyons modeste, à être un client web universel. Pour l'instant des clients de messagerie électronique (POP et IMAP), instantanée (Jabber) et de base de données sont à peu près utilisables

[2] après mes doutes sur mon envie de continuer à faire du web, on pourrait penser que je suis en pleine crise de la quarantaine. Mais pas du tout, puisque j'ai toujours 10 ans

Lire la suite...

mercredi 23 juillet 2008

Une gestion d'évènements pas à la hauteur DOM

Le DOM est une méthode pour représenter un document sous forme d'objets arborescents. Cette méthode est par exemple utilisée pour manipuler des documents XML ou des pages web en HTML. Plusieurs spécifications ont défini le modèle, des méthodes pour y accéder, le modifier, etc. L'une d'elles permet de gérer des évènements survenant sur les objets. Malheureusement, j'ai toujours trouvé cette spécification étonnamment incomplète. Elle présente à mon sens 2 lacunes:

  • elle ne permet pas de connaître les guetteurs associés à un événement
  • elle ne définit pas, ou mal, ce qui doit arriver à ces guetteurs lors de manipulations du document.

La méthode de gestion retenue est en effet de permettre d'attacher à chaque objet des guetteurs qui seront appelés quand surviendra un événement. Malheureusement, la spécification ne dit pas ce qui doit arriver à ces gestionnaires quand l'objet est déplacé, par exemple dans un autre document, ou dupliqué. Chaque implémentation de la spécification a donc dû décider de l'attitude à adopter dans ces cas. Dans le cas de Firefox, les guetteurs sont perdus en cas de déplacement du nœud dans un autre document (par exemple lorsqu'on essaie d'insérer dans une fenêtre popup des éléments générés dans la fenêtre mère), ou lorsqu'on le copie (la spécification indique effectivement quand un objet Node est recopié en utilisant la méthode cloneNode, les guetteurs EventListener attachés à l'objet Node source ne le sont pas sur l'objet Node copié, cf la définition des guetteurs.

Petit exemple: imaginons que l'on ait besoin de créer dynamiquement un formulaire permettant à l'utilisateur de saisir un nombre quelconque de réponses, chaque réponse étant l'objet d'une validation. Cela pourrait se coder ainsi:

<!-- Création du formulaire -->
<form id="my_form">
<input type="button" id="button_add" value="ajouter" />
</form>
<script type="text/javascript">
function init(){
  // on crée une ligne permettant la saisie
  var _div = document.createElement("div");
  var _input = document.createElement("input");
  _input.setAttribute("type", "text");
  // on attache un guetteur qui affiche la saisie quand le curseur quitte la zone
  _input.addEventListener('blur', function(){alert("la valeur saisie est : " + this.value);}, false);
  _div.appendChild(_input);
  // on insère la première ligne
  document.getElementById("my_form").appendChild(_div);
  // chaque pression sur le bouton insérera une nouvelle ligne
  document.getElementById("button_add").addEventListener('click', function(){document.getElementById("my_form").appendChild(_div)}, false);
}
</script>

Ce code ne fonctionnera pas. En cliquant sur le bouton "Ajouter", on insère bien une copie de la première ligne, mais le guetteur censé valider la saisie n'a pas été recopié par le cloneNode.

Cet exemple est bien sûr trivial, il suffirait, après le clonage, d'ajouter un nouveau guetteur sur le champs de saisie. Mais cela suppose de connaître tous les guetteurs qui ont été associés, potentiellement par d'autres portions de code, au fragment cloné. En l'absence d'interface pour connaître ces guetteurs. le problème est difficile à résoudre. C'est pour le contourner que je me suis enfin intéressé à XBL, dont je vous parlerai dans les prochains jours (ce billet ne servait qu'à liquider ce problème auquel je me suis heurté vainement pendant pas mal de temps en codant Couac )

(toute ceci ne concerne que Firefox. Il parait que les récentes versions du malware au 'e' bleuté dupliquent les guetteurs lors d'un cloneNode. Je n'ai pas été vérifier)

lundi 14 juillet 2008

Créez vos prototypes d'interface dans Firefox avec Pencil

Je cherche depuis très longtemps un outil libre pour créer rapidement des prototypes d'interface ou de pages web à insérer dans un storyboard. J'ai essayé différents outils de dessins comme Dia ou de conception (Nvu), sans jamais en trouver qui me satisfasse vraiment.

Je découvre aujourd'hui un petit nouveau, Pencil, qui m'a l'air prometteur. Il permet de créer des pages, d'y insérer des composants et d'enregistrer le tout sous forme d'images PNG. Les composants fournis couvrent la majorité des besoins des interfaces classiques: zones de textes, images, champs de formulaire, etc. On peut modifier les propriétés des éléments, les re-dimentionner, les faire pivoter, soigner leur disposition (alignement, chevauchement, etc). Il est également possible d'insérer des annotations sur la page. Bref, tout ce qu'il faut pour décrire rapidement une interface en quelques clics.

A l'usage, Pencil se révèle à la fois simple et pratique. Il faudra bien sûr que je l'essaie sur de vrais projets, mais le premier contact est plutôt positif.

Techniquement, Pencil utilise le moteur de rendu Gecko, qui motorise Firefox. On peut donc l'installer comme une extension Firefox (un fichier xpi de moins de 400ko !), ou comme une application à part entière, qui s'exécute grâce à XULRunner. Bien que relativement jeune, le projet dispose d'une interface soignée et d'un site web avec quelques documentations.

Pencil est un projet libre (sous GPL v2), et les développeurs viennent de rendre le source accessible sur Google Code.

XUL, GPL, je crois bien que je vais l'adopter ;-) Hop, un petit exemple de l'interface:

Exemple de prototypage d'une page web avec Pencil

mercredi 12 décembre 2007

Ya un Couac, ou la naissance d'une appli web

Ce blog est en sommeil depuis longtemps, par manque de temps pour m'en occuper. La faute au salariat et à ma plongée pendant quelques mois dans le codage d'une application web, Couac. Aujourd'hui, elle a atteint un niveau qui commence à la rendre utilisable, même si je butte sur une erreur de choix architectural qui risque de lui être fatale. Et comme je n'ai plus guère de temps pour m'en occuper, il est temps que je la rende publique, dans l'espoir qu'elle puisse servir et que d'autres contributions viennent l'améliorer.

Lire la suite...

mercredi 8 août 2007

Firefox 3 implémente les "cross site XMLHttpRequest" !

En parcourant la liste des évolutions de la dernière version de test de firefox (FF 3a7) j'ai eu la surprise de tomber sur cette note : Cross site XMLHttpRequest specification implemented. Firefox 3 pourra utiliser XMLHttpRequest pour envoyer des requêtes ailleurs que sur le site d'origine de la page !

Lire la suite...

vendredi 19 janvier 2007

Concevoir des applications web selon un modèle événementiel

Je suis tombé sur un fort intéressant billet de Christian Heilmann publié sur le blog de YUI. Il suggère d'utiliser une approche événementielle pour concevoir des applications web.

Lire la suite...

lundi 25 décembre 2006

Sur la route de Firefox 3

Alors qu'une première version de Firefox 3 alpha est sortie il y a quelques jours, Tristan signale une présentation des futures nouveautés de Gecko 1.9 par Stuart Pavlov. Petit résumé de ce que j'ai cru comprendre... euh et de quelques recherches dans les roadmaps du projet.

Lire la suite...

lundi 31 juillet 2006

Thunderbird 2 pointe son museau et autres nouvelles du Lézard

Un première version de test de Thunderbird 2 vient de sortir, pendant que les versions stables de FF et TB passent la 1.5.0.5, correction de quelques soucis de sécurité obligent. Et la communauté du lézard continue s'activer...

Lire la suite...

dimanche 23 juillet 2006

Nouvelles du lézard

La première version béta de Firefox 2 est sortie, la fondation Mozilla lance une nouvelle opération d'évangélisation pour avoir son nom gravé sur un mur, et on commence parler de plus en plus de Firefox 3

Lire la suite...

- page 1 de 2