Écrit par Neil Deakin.
Traduit par Benoit Salandre (08/02/2004), mise à jour par Laurent Jouanneau (23/11/2004) .
Page originale :
http://www.xulplanet.com/tutorials/xultu/packaging.html
Dans cette section, nous allons voir comment mettre les fichiers XUL et chrome dans un paquetage et créer les fichiers contents.rdf associés.
Un paquetage est un ensemble de fichiers XUL et de scripts qui définissent la fonctionnalité d'une interface utilisateur. Les paquetages peuvent être installés dans Mozilla et référencés avec des URLs chrome. Un paquetage peut contenir tous les fichiers que l'on veut et peut-être découpé en sous-répertoires pour les différentes parties du paquetage. Par exemple, les marque-pages et l'historique font partie du paquetage communicator, mais sont stockés dans des sous-répertoires différents.
Un paquetage peut-être stocké comme un répertoire ou comme une archive JAR. Chaque paquetage aura un fichier manifest, contents.rdf, qui décrit le paquetage. Ce fichier sera placé dans le fichier JAR au côté des fichiers qu'il décrit. Le fichier doit s'appeler contents.rdf et être un fichier au format RDF (Resource Description Framework). Nous en apprendront plus à propos de RDF plus bas.
Le fichier contents.rdf décrit les contenus d'un paquetage. Il peut aussi être utilisé pour décrire un thème ou une localisation. Les fichiers manifest sont assez faciles à créer une fois que vous savez comment faire. Le modèle ci-dessous peut-être utilisé comme point de départ.
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<RDF:Seq RDF:about="urn:mozilla:package:root">
<RDF:li RDF:resource="urn:mozilla:package:monapplication"/>
</RDF:Seq>
<RDF:Description RDF:about="urn:mozilla:package:monapplication"
chrome:displayName="Mon Application"
chrome:author="nom"
chrome:name="monapplication">
</RDF:Description>
</RDF:RDF>
Vous pouvez utiliser ce modèle et effectuer quelques petites modifications spécifiques pour votre paquetage. Décomposons celui-ci pour comprendre ce que fait chaque bloc.
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
Ces trois lignes devront être placées au tout début du fichier contents.rdf. Parce que RDF est un format XML, il contient les mêmes premières lignes standards que tout fichier XML doit posséder. Ensuite, nous déclarons les espaces de nom qui vont être utilisés, ici un pour RDF et un autre pour le système chrome. Si vous ne comprenez pas ce que cela signifie, ne vous inquiétez pas. Ajoutez les simplement au début du fichier.
<RDF:Seq RDF:about="urn:mozilla:package:root">
<RDF:li RDF:resource="urn:mozilla:package:monapplication"/>
</RDF:Seq>
Ces lignes sont utilisées pour déclarer quels paquetages, thèmes et localisations sont décrits par le fichier manifest. Dans le cas présent, c'est un paquetage qui va être décrit (comme indiqué par le mot package dans le texte). Si vous créez un thème, vous mettriez skin à la place de package, et si vous créez une localisation, vous utiliseriez locale. Le nom du paquetage ici est monapplication. Bien entendu, il faudra le remplacer par le nom du paquetage que vous allez créer. Par exemple, l'application de courrier électronique de Mozilla se nomme 'messenger'. Le nom doit être court et significatif. Ce nom sera utilisé dans les URLs chrome pour le paquetage.
La balise RDF:li
ci-dessus est similaire à
la balise li
du HTML, elle déclare un élément de liste.
Ainsi, vous pouvez déclarez plusieurs paquetages par l'utilisation de
plusieurs balises RDF:li
.
Pour les thèmes, remplacez les deux occurences de package par skin; pour les localisations, remplacez les deux occurences de package par locale. Par exemple, ce qui suit spécifie un thème :
<RDF:Seq RDF:about="urn:mozilla:skin:root">
<RDF:li RDF:resource="urn:mozilla:skin:blueswayedshoes"/>
</RDF:Seq>
La partie suivante qui spécifie le nom et l'auteur de l'application :
<RDF:Description RDF:about="urn:mozilla:package:monapplication"
chrome:displayName="Mon Application"
chrome:author="nom"
chrome:name="monapplication">
</RDF:Description>
Ce bloc est utilisé pour fournir plus de détails sur paquetage,
le thème ou la localisation. Vous aurez besoin d'une description pour
chaque balise li
. La valeur de l'attribut
about
devrait être identique
à l'attribut ressource
de la balise
li
.
Les trois attributs supplémentaires donnent des informations sur le paquetage.
displayName
author
name
Vous pouvez aussi utiliser une variété d'autres valeurs. Quand Mozilla déclare votre paquetage, ces valeurs sont ajoutées dans le registre chrome.
Ecrivons un fichier contents.rdf pour la boîte de dialogue de recherche de fichiers que nous voulons créer. Il sera nécessaire de décrire le paquetage. Comme il n' y a pas de sous-paquetage, de thème ou de localisation, il est assez semblable au modèle vu plus haut.
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<RDF:Seq RDF:about="urn:mozilla:package:root">
<RDF:li RDF:resource="urn:mozilla:package:findfile"/>
</RDF:Seq>
<RDF:Description RDF:about="urn:mozilla:package:findfile"
chrome:displayName="Recherche de fichiers"
chrome:author="N'importe qui"
chrome:name="findfile">
</RDF:Description>
</RDF:RDF>
Ici, le composant est appelé 'findfile' ce qui signifie que nous seront capable de le référencer en utilisant l' URL chrome suivante:
chrome://findfile/content/findfile.xul
La liste des paquetages installés est stockée dans le répertoire chrome dans le fichier chrome.rdf. Vous devriez ne pas modifier ce fichier directement. Il est modifié automatiquement quand vous installez un nouveau paquetage. Comme pour les fichiers contents.rdf, c'est un fichier au format RDF. A première vue, ça a l'air tout à fait différent des fichiers contents.rdf, mais si vous êtes familier de RDF, vous noterez que c'est en fait très proche.
Chaque fois que Mozilla démarre, il fouille le répertoire chrome à la recherche d'un fichier nommé 'installed-chrome.txt'. Ce fichier contient une liste, dans un format très simple, de tous les paquetages, thèmes et localisations qui sont installés. Si ce fichier est modifié, Mozilla parcourt chaque entrée dans la liste et les enregistre ou les met à jour si nécessaire de sorte qu'elles puissent être utilisées.
Donc, pour enregistrer un nouveau paquetage, tout ce que vous avez à faire c'est de rajouter une entrée au fichier 'installed-chrome.txt' et de redémarrer Mozilla. Le nouveau paquetage sera enregistré et le fichier chrome.rdf sera régénéré puisqu'il doit nécessairement contenir le paquetage nouvellement installé. Mozilla possède également un système d'installation appelé XPInstall qui permet à des scripts d'installer automatiquement des paquetages via javascript sans avoir à modifier manuellement ce fichier. XPInstall sera décrit vers la fin de ce tutoriel. Cependant, pendant le développement, nous pouvons modifier directement le fichier.
Le fichier 'installed-chrome.txt' se trouve dans le répertoire chrome. Le fichier contient une liste d'entrée à installer, une par ligne. Par exemple :
content,install,url,resource:/chrome/findfile/content/findfile/
skin,install,url,resource:/chrome/findfile/skin/findfile/
Ce qui précède sera utilisé pour installer le paquetage, ainsi qu'un thème, pour la recherche de fichier. Le format de chaque ligne est assez simple. Il s'agit juste de quatre valeurs séparées par des virgules :
Type
Install
Type d'URL
URL
Notez que les URLs utilisés sont des URLs resource:/. Vous pouvez tout aussi bien utiliser des URLs de fichiers. Les URLs de ressource sont similaires aux URLs de fichier, exceptée qu'elle commence par resource: au lieu de file: et que son répertoire de base est le répertoire où Mozilla est installé plutôt que la racine du système de fichier. Cela signifie que ça peut-être utilisé pour faire référence à des fichiers dans le répertoire de Mozilla ou dans ses sous-répertoires, indépendamment de l'emplacement où est installé Mozilla. L' URL de ressource doit avoir une seule barre de division après les deux points puisqu'il s'agit toujours d'un chemin relatif.
Ainsi, la ligne supplémentaire doit pointer vers le dossier où se trouve le fichier contents.rdf. Si vous avez plus d'un paquetage, ajoutez une ligne pour chacun d'eux.
Bien que Mozilla suive une convention de nommage des répertoires, vous pouvez mettre les fichiers où vous voulez. Par exemple, la ligne suivante installera un nouveau paquetage qui se trouve dans le répertoire /main/calculator/.
content,install,path,/main/calculator/
Vous pourrez noter également que des lignes du fichier installed-chrome.txt ont un autre type d'URL, le type jar:. Si vous compressez vos fichiers dans un fichier JAR, vous pouvez utiliser une URL JAR pour le référencer. Elle possède deux parties, séparées par un point d'exclamation (!). La première partie est l'URL du fichier JAR et la seconde partie est le répertoire ou le fichier dans l'archive. L'exemple ci-dessous pourrait référencer la boîte de dialogue de recherche de fichiers :
jar:resource:/chrome/findfile.jar!/content/findfile/
Cependant, vous n'aures pas besoin normalement de faire attention aux URLs JAR quand vous créerez vos propres paquetages. Vous garderez plutôt les paquetages décompressés et vous vous y référez en utilisant les types d'URLs fichier ou ressource.
Les informations du dessus peuvent avoir été confuses. Voici donc un guide rapide pour créer un simple paquetage. Vous pourrez suivre simplement les étapes du dessous et essayer de regarder les détails sur le fonctionnement de l'installation d'un paquetage une fois que vous serez plus familier avec XUL.
<?xml version="1.0"?>
<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:chrome="http://www.mozilla.org/rdf/chrome#">
<RDF:Seq RDF:about="urn:mozilla:package:root">
<RDF:li RDF:resource="urn:mozilla:package:myapplication"/>
</RDF:Seq>
<RDF:Description RDF:about="urn:mozilla:package:myapplication"
chrome:displayName="Application Title"
chrome:author="Author Name"
chrome:name="myapplication"
chrome:extension="true"/>
</RDF:RDF>
chrome:extension
est à true, l'application
est alors une extension Firefox et apparaîtra dans la fenêtre des extensions du navigateur.
Si c'est false, elle n'apparaîtra pas.
content,install,url,file:///main/app/.
Changez le texte coloré par l'URL de fichier du répertoire. Soyez sûr que l'URL se termine bien
avec un slash et que vous avez pressé enter à la fin de la ligne. Si vous n'êtes pas
sûr de l'URL, ouvrez le repertoire crée à l'étape 1 dans le navigateur et copiez l'URL à partir
de la barre d'adresse. Notez que la référence doit être un répertoire, pas un fichier.
chrome://applicationid/content/fichier.xul
, où fichier.xul est le nom du fichier. Votre fichier principal xul doit être applicationid.xul ce qui
vous permet de le charger en utilisant le raccourci chrome://applicationid/content/ .Si vous avez créé des thèmes ou des localisations, répétez les étapes précédentes, excepté que le format du fichier contents.rdf est légèrement différent. Regardez les fichiers contents.rdf d'autres applications pour plus de détails.
La création d'un paquetage chrome peut souvent être délicat et il est difficile de diagnostiquer les problèmes. Voici quelques astuces si vous n'y arrivez pas.
Dans la prochaîne section, nous créerons une simple fenêtre.