Écrit par Neil Deakin.
Traduit par Durandal (18/07/2004).
Page originale :
http://www.xulplanet.com/tutorials/xultu/events.html
La boîte de dialogue de recherche de fichiers est tout à fait correcte à ce stade. Nous ne l'avons pas beaucoup nettoyé mais nous avons créé une interface utilisateur facilement. Dans ce qui suit, nous allons montrer comment lui ajouter des scripts.
Pour rendre le dialogue de recherche de fichiers fonctionnel, nous avons besoin d'ajouter des scripts qui vont s'exécuter quand l'utilisateur interagira avec le dialogue. Nous voudrions ajouter un script pour gérer le bouton Rechercher, le bouton Annuler et pour gérer chaque commande du menu. Nous écrivons cela en utilisant des fonctions Javascript de la même manière qu'en HTML.
Si vous connaissez le HTML, vous pourriez deviner comment nous faisons réagir
les boutons et les autres éléments XUL aux évènements. Nous devons juste ajouter
des gestionnaires comme onmousedown
aux éléments.
Ensuite nous fournissons un script qui exécute la fonction désirée.
Vous pouvez utiliser l'élément script
pour inclure
des scripts dans des fichiers XUL. Vous pouvez aussi inclure le script
directement dans le fichier XUL entre les balises script
ouvrante et
fermante, mais il est bien mieux d'inclure le code dans un fichier à part. Votre
fenêtre XUL se chargera plus rapidement. Nous utiliserons alors l'attribut src
pour lier un fichier de script externe.
Ajoutons un script au dialogue de recherche de fichiers. Bien que le nom du
fichier de script n'ait pas d'importance, on lui donne habituellement le même
nom que celui du fichier XUL, avec l'extension js. Dans ce cas, on utilisera
findfile.js. Ajoutez la ligne ci-dessous juste après la balise window
ouvrante et
avant tout élément.
<script src="findfile.js"/>
Nous créerons le fichier de script plus tard, quand nous saurons quoi y mettre. Nous allons définir des fonctions dans le fichier, que nous pourrons appeler dans les gestionnaires d'évènements (event handlers).
Les gestionnaires d'évènements en XUL sont faits de la même manière qu'en HTML. Les mêmes gestionnaires d'évènements sont disponibles, plus d'autres additionnels. Pour gérer un évènement, ajoutez simplement un des attributs du tableau ci-dessous à un élément. Il y en a un certain nombre d'autres que vous pouvez aussi ajouter, que nous verrons dans des sections ultérieures.
onclick
onmousedown
onmouseup
onmouseover
onmousemove
onmouseout
oncommand
menuitem
. Vous
devriez utiliser ce gestionnaire plutôt que gérer la souris vous-même, comme
l'utilisateur peut sélectionner le bouton ou l'item de menu avec la souris ou
en utilisant une touche d'accès ou un raccourci clavier.onkeypress
onkeydown
onkeyup
onfocus
onblur
onload
window
pour
initialiser une fenêtre. Cela peut permettre de mettre des valeurs par défaut à
des champs, selon des conditions contenues dans un script.onunload
window
pour
enregistrer des informations avant que la fenêtre ne se ferme.oncommand
est le gestionnaire d'évènement que vous utiliserez généralement
pour réagir aux évènements liés aux boutons et aux menus. Vous pouvez y mettre
du code qui sera exécuté quand l'utilisateur clique sur un élément, ou l'active
avec le clavier.
Un gestionnaire oncommand
peut être placé sur les boutons Rechercher et
Annuler dans le dialogue de recherche de fichiers. Cliquer sur le bouton
Rechercher devrait démarrer la recherche. Comme nous n'implémenterons pas cette
partie, nous l'omettrons. Par contre, cliquer sur le bouton Annuler devrait
fermer la fenêtre. Le code ci-dessous montre comment faire cela. Tant que nous y
sommes, ajoutons le même code à l'item de menu Fermer.
<menuitem label="Fermer" accesskey="f" oncommand="window.close();"/>
...
<button id="cancel-button" label="Annuler"
oncommand="window.close();"/>
Deux gestionnaires ont été ajoutés ici. Le gestionnaire oncommand a été ajouté à l'item de menu Fermer. En utilisant ce gestionnaire, l'utilisateur pourra fermer la fenêtre en cliquant sur l'item de menu ou en le sélectionnant avec le clavier. Le gestionnaire oncommand a été ajouté au bouton Annuler.
De manière similaire, nous pouvons réagir aux autres évènements de la souris et aux appuis de touches du clavier en utilisant les gestionnaires d'évènements de la souris et des touches. Si vous ne spécifiez pas de gestionnaire d'évènement pour un évènement particulier, l'élément le gèrera lui-même. C'est généralement ce que vous voulez qu'il se produise. La plupart des élément XUL auront leurs propres réactions aux évènements de la souris et du clavier. Par exemple, les menuitems réagiront à leurs touches d'accès et des popups apparaîtront au bon moment.
XUL utilise le même modèle d'évènement que décrit dans les Évènements DOM2. Brièvement, un évènement est envoyé en deux phases. Dans la phase de capture, un évènement comme un clic de la souris est d'abord envoyé au document puis descend dans la hiérarchie des éléments jusqu'à atteindre l'élément qui a déclenché l'évènement. La phase inverse (phase de "bubbling") intervient alors. L'évènement est renvoyé vers le haut de la hiérarchie tour à tour à chaque élément.
Sur son chemin, si l'évènement est géré par un élément, le traitement de l'élément s'arrête. Si cet élément ne gère pas l'évènement, cela continue avec le prochain élément, jusqu'à ce qu'un le gère. Si rien ne gère l'évènement, un traitement par défaut est effectué.
Cela signifie que vous n'êtes pas obligé de mettre le gestionnaire
d'évènement sur l'élément sur lequel vous voulez réagir à l'évènement. Vous
pouvez aussi le mettre sur n'importe quel élément parent au-dessus de l'élément.
Par exemple, au lieu de mettre le gestionnaire d'évènement sur le menuitem
, vous
pourriez le mettre sur l'élément menu
.
Un gestionnaire doit renvoyer true si l'élément a été géré ou false s'il n'a pas été géré. En renvoyant false, vous pouvez faire quelque chose mais le traitement par défaut sera effectué. Ce processus est similaire à la gestion des évènements HTML.
Vous pouvez obtenir l'élément à l'origine de l'évènement grâce à la propriété
target
de l'objet
event
. Par exemple, si vous ajoutez le gestionnaire
d'évènement suivant à un élément window
, une boîte d'alerte apparaîtra quand vous
cliquerez sur un élément de la fenêtre. L'alerte affichera l'élément sur lequel
vous avez cliqué.
<window
onclick="alert(event.target.tagName); return false;"
.
.
.
>
Vous pouvez aussi ajouter des gestionnaires d'évènements dynamiquement en utilisant la fonction addEventListener. Vous pouvez l'utiliser pour tout type d'élément et d'évènement. Elle prend trois paramètres : le type d'évènement, une fonction à exécuter quand l'évènement arrive et un booléen indiquant s'il faut capturer ou non.
Dans la prochaine section, nous allons voir l'utilisation du Document Object Model avec les éléments XUL.
Le dialogue de recherche de fichiers à ce stade : Source Voir