Utiliser canvas signifie qu'ils n'utilisent pas les mécanismes d'édition existant dans les navigateurs, mais ont tout ré implémenté en javascript :

  • mécanisme de sélection
  • gestion du curseur
  • gestion du clavier
  • affichage du texte
  • transaction manager (undo/redo)
  • etc.

Mais pas tout. Pas encore en tout cas.

  • pas de vrai copier collé. Je veux dire par là : le contenu copié ne peut être copié dans une autre application. Et cela va être compliqué à implémenter à mon avis puisque il s'agit d'une page web et qu'une page web a des restrictions à cause des problématiques de sécurité (pas d'API javascript pour envoyer des données dans le presse papier du système il me semble)
  • la gestion du clavier : ils sont obligés de reprogrammer tous les raccourcis claviers courants, et là encore, cela va être compliqué pour certains, à cause toujours du fait que les possibilités d'une page web sont limités vis à vis du système.
  • la prise en charge du clavier vis à vis des alphabets et cie : je me demande encore si ils vont arriver à tenir compte de tout les types de claviers, des alphabets etc.. Quid du support de l'IME par exemple ?
  • Quid de l'accessibilité ? Parce que finalement, canvas, c'est comme une image. Le texte est pour le moment stocké dans des variables javascript. Cet éditeur vaut donc 0 en terme d'accessibilité. Ils envisagent toutefois de stocker le texte dans le DOM, à l'intérieur de l'élément canvas. De ce fait, il sera accessible aux outils d'aide à la navigation (comme les lecteurs d'écrans). Mais j'ai un doute quant à la bonne prise en charge par ces mêmes outils de ce texte. Possible que des attributs ARIA aideront...

Bref, ayant bossé moi même 4 ans dans le code de l'éditeur HTML interne de Firefox, et vu la complexité de certaines choses (comme le support de l'IME et autre), je me dis que pour que Bespin arrive au niveau des éditeurs "desktop", ils ont du chemin à parcourir, voir des impossibilités.

Cependant, pour réaliser un éditeur de code qui tienne la route dans une page web, il est clair qu'en l'état actuel de la technologie web, canvas me semble la meilleure option. Les développeurs s'en sont d'ailleurs largement expliqué (premier billet, deuxième billet).

Mais j'aurai préféré qu'un éditeur de texte soit implémenté directement dans le navigateur. Cela aurait permis d'une part de réutiliser les mécanismes internes d'édition et d'accessibilité dans les navigateurs, et d'éviter donc de réinventer la roue.

  <textarea type="rich"  syntax="cpp.xml" options="indent:4; indent-type=space">
      machin->truc()
  </textarea>

Ça aurait eu plus de gueule non ? Et surtout beaucoup plus léger dans la page web. (Resterait à standardisé cette fonctionnalité, c'est vrai). Et cela n'aurait pas empêché d'avoir ce mécanisme de service web qui existe dans bespin pour interagir avec un serveur afin d'apporter d'autres fonctionnalités, comme l'on déjà fait des développeurs d'éclipse.

Mais bon, je rêve, je rêve...