Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Xtf

Introduction

XTF signifie eXtensible Tag Framework. C'est un nouveau système dans Gecko 1.8 (Firefox 1.5) qui permet d'ajouter dans Gecko (sans avoir à le "hacker"), la prise en charge d'un nouveau dialecte XML. Par exemple, l'implementation de Xforms utilise XTF. Il est possible d'apporter cette prise en charge via une extension.

Avec XTF, vous pouvez faire aussi des choses plus complexes qu'en XBL.

Ressources en anglais :

Présentation

Avec XBL, vous pouvez réaliser vos propres balises, avec leur propre apparence et comportement. Mais XTF apporte beaucoup plus :

  • Les élements XTF sont des composants XPCOM : vous créez vos éléments dans le langage souhaité (C++ ou javascript)
  • Pas de propriété CSS à ajouter (comme -moz-binding en XBL) : Gecko se base sur l'éspace de nom et le nom de la balise pour "attacher" automatiquement celle-ci à vos éléments XTF.
  • pas de problème d'attachement asynchrone comme avec XBL
  • XTF permet de ne pas alourdir Gecko : on installe juste les extensions XTF nécessaires à son application web.
  • Parce que vous pouvez développer vos élements XTF en C++
    • Vous profitez d'un mécanisme d'héritage plus puissant que le extends de XBL
    • Vous pouvez définir des propriétés et méthodes privées ou protégées (en XBL, tout est publique)

Cependant, XBL et XTF ont une similitude : pour l'apparence, ils doivent génèrer des élements "anonymes", qui ne sont pas accessibles directement par le DOM.

Pour pouvoir développer des élements XTF, il faut bien sûr connaître la programmation XpCom.

Interfaces

Il faut distinguer deux ensembles d'interface : les interfaces des objets XTF clients, et les interfaces des objets XTF spécifiques au framework. (Voir le schéma sur http://www.croczilla.com/xtf )

interfaces XTF client

  • nsIXTFElementFactory :
  • nsIXTFElement : analogue à un binding XBL.
    • nsIXTFGenericElement
    • nsIXTFVisual
      • nsIXTFXMLVisual
      • nsIXTFXULVisual
      • nsIXTFSVGVisual
      • nsIXTFAttributeHandler

interfaces du framework

  • nsIXTFElementWrapper
    • nsIXTFGenericElementWrapper
    • nsIXTFXMLVisualWrapper
    • nsIXTFXULVisualWrapper
    • nsIXTFSVGVisualWrapper

Utilisation

Attention : étant donné qu'il n'y a pas de documentation sur XTF (même en anglais), il se peut qu'il y ait des erreurs, et il est certain qu'il y a des imprécisions dans les explications qui suivent. N'hésitez pas à compléter si vous en savez un peu plus ;-) (en cliquant sur "editer la page").

Créer une factory

Il faut implémenter en premier lieu un objet ayant pour interface nsIXTFElementFactory. Cet objet est chargé d'instancier un objet nsIXTFElement correspondant à une balise donnée.

Cette factory doit avoir le contract id : "@mozilla.org/xtf/element-factory;1?namespace=votre_espace_de_nom". Par exemple, l'espace de nom de XForms est "http:www.w3.org/2002/xforms", la factory des éléments Xforms a donc pour contract id "@mozilla.org/xtf/element-factory;1?namespace=http:www.w3.org/2002/xforms". (rappel : le contract id est le nom du composant que l'on donne lorsque l'on instancie un composant, comme par exemple en javascript : Components.classe["le_contract_id"] )

L'interface nsIXTFElementFactory propose une seule méthode :

  nsIXTFElement createElement(in AString tagName);

Cette méthode reçoit le nom de l'élement XML, et doit renvoyer l'objet de type nsIXFTElement correspondant.

Créer un nouvel élement XML

Chaque élément XML de votre éspace de nom est géré par un objet XPCOM implémentant au minimum l'interface nsIXTFElement (ou l'une parmis celle héritant de nsIXTFElement : nsIXTFGenericElement, nsIXTFVisual etc..).

Comme ils sont instanciés par votre factory, vous n'avez pas besoin (voir, il est déconseillé) de les déclarer avec un contract id.

Votre élement peut être invisible : il ne doit pas s'afficher. (Auquel cas il faut implémenter l'interface nsIXTFGenericElement ?)

Si votre élément est visible, il faut qu'il définisse un contenu (Vous devez alors implémenter l'interface nsIXTFVisual ?)

ToDo : à compléter


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.