header
Accueil
Règles
Les 5 Races
Histoire
Classements
Forums
Taverne du Chat
Inscriptions
Jouer son Trõll
Packs Graphiques
Goodies
Nous Contacter
Soutenir le Jeu.
Notre Boutique.
Liens
Webring
Crédits
 
  Ze T-Shirt
T-shirt
 MountyHall
Référencé sur
Tour de Jeu
Ludimail
Jeux Alternatif
 
HG
Nous sommes le 21° jour du Gnu du 22° cycle après Ragnarok
HM HD
 
 
BG     BD
 Bienvenue Invité     S'enregistrer    Connexion Search the Forum   Display List of Forum Members
Forums Tous les Forums
ligne Forum Outils : Assistance au jeu
DON MountyHall
Modérateurs de ce forum : Aghabeu, Dabihul, Grankausto, Loinvu, Madère, Mamoune, Modérateur 6, Modérateur1, Modérateur2, Modérateur3, Modérateur4, Modérateur5, Mr x, Rouletabille, Schtroumpf, TilK, VYS, Xaruth

Printer Friendly Version Post reply  Post New Topic

#. Message de TilK le 31-07-2008 à 16:36
  [MH Team]   [Maître Outilleur]  [Ami de MountyHall]
36216 - mini TilK (Kastar 49)
- Teubreu -
Pays: France  Inscrit le : 6-12-2002  Messages: 8352 (Hydre Fumante)   Citer Citer
Bonjour à tous,

J'ai reçu un certain nombre de demandes de personnes qui souhaitent modifier/écrire des scripts complémentaires pour MZ. Afin de gagner du temps et de la lisibilité, je vais essayer de réunir toutes les infos utiles dans ce post.

Tout d'abord, avec l'arrivée de la version 0.9.3, le code de l'extension a beaucoup changé. Il est donc possible qu'un certain nombre de scripts ne marchent plus. De plus, maintenant, si vous voulez rajouter des fonctionnalités à MZ, il n'est plus nécessaire de devoir reprendre le code de MZ, il existe dans les options de l'extension, un système pour gérer ces scripts et rajouter du code facilement.

Tout d'abord, depuis la version 0.9, le code de MZ est basé sur celui de GreaseMonkey.
A cause de ce changement, il n'est plus possible de passer par firebug pour exécuter pas à pas les scripts (mais la console d'erreur de firebug est toujours disponible logiquement).

Maintenant, les scripts ne s'exécutent plus au même endroit. Ils s'exécutent dans une sandbox différente des scripts définis sur la page. C'est à dire que vous ne pouvez pas accéder aux fonctions définies sur une page à partir d'un script et vice/versa.

Si vous voulez référencer un autre script au travers d'une URL, il est nécessaire de passer par la nouvelle méthode MZ_appendNewScript(url) si vous voulez qu'il y ai un partage de données possible. Il n'est donc plus nécessaire de créer un noeud <script> dans le DOM. Néanmoins, les fichiers de scripts doivent être encodé en LATIN-1 pour des raisons de compatibilités.

Il existe de nouvelles fonctions utiles dans MZ :
  • MZ_setValue(nompropriété,valeur) qui permet de stocker une variable directement dans les propriétés du browser (et donc stockés sur le disque dur). SI vous voulez vérifier les valeurs stockées, vous pouvez aller à l'url about:config et chercher un champ nommé mountyzilla.storage.nompropriété
  • MZ_getValue(nompropriété) : permet de lire une valeur précédemment stockée. Rends nul à priori si la valeur n'existe pas.
  • MZ_removeValue(nompropriété) : supprime une valeur du disque.
  • MZ_appendNewScript(url) : déjà cité plus haut.
  • MZ_xmlhttpRequest : permet de faire des xmlhttprequest vers d'autres sites sans aucun problème de sécurité. La syntaxe est la même que celle de greasemonkey : http://diveintogreasemonkey.org/api/gm_xmlhttprequest.html
Autres problèmes possibles :

Lorsque j'ai converti les anciens scripts de MZ au nouveau format, j'ai du faire face à un léger problème pour capturer les actions de l'utilisateur. L'utilisation d'un bouton.setAttribute("onclick",toto()) sur un bouton par exemple ne fonctionne pas pour des raisons de sécurité.
Pour pouvoir corrigé cela, il est nécessaire de passer par la méthode :
bouton.addEventListener('click',toto,true)
Je vous invite à lire la doc de greasemonkey sur le sujet :
http://diveintogreasemonkey.org/patterns/intercept-clicks.html


Voila, je serais en vacances les prochaines semaines, donc si vous avez des questions, n'hésitez pas à les poser ici, il y a bien un développeur qui aura réussi où vous n'y arrivez pas. Sinon, vous disposez également de la doc de greasemonkey et du code source de mes scripts.

Voili, voila et bon courage.
--
Mini TilK

#. Message de Kalamar le 12-08-2008 à 12:46
  [Ami de MountyHall]
68667 - Kalamar (Kastar 60)
- Trigoniae Trollicarum -
Pays: Belgium  Inscrit le : 1-10-2005  Messages: 492 (Golem Costaud)   Citer Citer
Néanmoins, les fichiers de scripts doivent être encodé en LATIN-1 pour des raisons de compatibilités.

Si mes sources sont en UTF-8, je suis refait, ou il y a moyen de passer des paramètres supplémentaires ou une astuce pour passer outre le problème?

(anyway, merci pour les infos!)

#. Message de TilK le 13-08-2008 à 22:27
  [MH Team]   [Maître Outilleur]  [Ami de MountyHall]
36216 - mini TilK (Kastar 49)
- Teubreu -
Pays: France  Inscrit le : 6-12-2002  Messages: 8352 (Hydre Fumante)   Citer Citer
J'avais essayé� un truc pour permettre l'utf8, mais je n'avais pas pu tester.
Si ca te dit, tu peux le tester...

#. Message de Kalamar le 24-08-2008 à 10:18
  [Ami de MountyHall]
68667 - Kalamar (Kastar 60)
- Trigoniae Trollicarum -
Pays: Belgium  Inscrit le : 1-10-2005  Messages: 492 (Golem Costaud)   Citer Citer
dis-moi, dis-moi, je suis tout ouïe!!

#. Message de TilK le 24-08-2008 à 10:43
  [MH Team]   [Maître Outilleur]  [Ami de MountyHall]
36216 - mini TilK (Kastar 49)
- Teubreu -
Pays: France  Inscrit le : 6-12-2002  Messages: 8352 (Hydre Fumante)   Citer Citer
Bah rien, mets des fichier UTF8 sur le serveur et vérifie juste qu'ils sont bien intégrés...

#. Message de Kalamar le 24-08-2008 à 10:49
  [Ami de MountyHall]
68667 - Kalamar (Kastar 60)
- Trigoniae Trollicarum -
Pays: Belgium  Inscrit le : 1-10-2005  Messages: 492 (Golem Costaud)   Citer Citer
Euuh... pas top, je dois avouer

#. Message de TilK le 27-08-2008 à 12:45
  [MH Team]   [Maître Outilleur]  [Ami de MountyHall]
36216 - mini TilK (Kastar 49)
- Teubreu -
Pays: France  Inscrit le : 6-12-2002  Messages: 8352 (Hydre Fumante)   Citer Citer
Allez, un petit exemple réalisé en 40 minutes ce matin  :

Le but de ce script complémentaire est de pouvoir visualiser sur la page juste après le login un flux rss.
Pour cet exemple, j'ai choisit le flux rss correspondant aux nouveaux post sur le forum dans "Annonces de l'équipe".

Ca permet à ceux qui ne lisent pas souvent le fofo d'avoir des info quand même.

Afin que cela ne gène pas tout le monde, j'ai aussi rajouté une checkbox pour désactiver cette fonctionnalitée.

Il faut donc créer un script complémentaire pour cela.
Afin de bien visualiser quel code correspond à quoi, j'ai séparé le travail en 3 fichiers différents :

http://mountyzilla.tilk.info/scripts_0.9/complementaires/script_ext.js : Le script de base. Suivant la page de MH, il rappelle un script différent. Deux pages sont impactées, la page de news pour rajouter le flux RSS, et la page d'options afin de rajouter la check box de désactivation. Le code est suffisamment simple pour être compris sans explication.

http://mountyzilla.tilk.info/scripts_0.9/complementaires/news_perso.js : le code qui rajoute le flux.

Tout d'abord, on utilise la fonction  MZ_getValue pour vérifier si il faut afficher le flux.
Si c'est le cas, on utilise MZ_xmlhttpRequest pour aller récupérer le flux RSS.
On peut voir ici comment s'utilise cette fonction. Une fois le fichier téléchargé, la fonction anonyme est appelé. Il suffit alors de transformer le texte du flux en XML en utilisant DOMParser().parseFromString .
Après, un peu de XPath et on récupère les informations intéressantes : nom du flux, url, et les différents items à afficher.
Il suffit maintenant de faire un peu de mise en page et tout roule.

http://mountyzilla.tilk.info/scripts_0.9/complementaires/options_perso.js : Dans ce fichier, on va modifier le formulaire de configuration généré par MZ.
le but est de rajouter une checkbox puis de sauver l'état de la checkbox quand l'utilisateur clique sur le bouton sauver.

On commence par trouver une case vide ou mettre la checkbox. C'est facile en XPath de dire que l'on veut la placer après le checkbox sur écriture magique.
Il suffit maintenant d'utiliser la fonction toute faite dans les librairies du script par défaut pour créer la checkbox et lui affecter un état :

appendCheckBotd, 'afficheInfoForum', MZ_getValue("afficheInfoForum") != "false")

Reste maintenant le plus chiant : capturer le click de l'utilisateur sur le bouton "Sauvegarder" sans pour autant modifier le comportement du script par défaut.
C'est super simple finalement, on rajoute une fonction qui ne s'occupe que de sauvegarder l'état de notre nouvelle checkbox :

function new_apply() 
{
MZ_setValue("afficheInfoForum", this.form.afficheInfoForum.checked ? "true" : "false");
}

Puis on rajoute un eventListener sur le bouton. Ici on peut même réutiliser la variable input du script par défaut.

Et voila, en une cinquantaine de lignes de code (80% pour faire l'affichage du flux) on à rajouter une nouvelle fonctionnalité à MZ, sans pour autant modifier le comportement existant.
Il ne reste plus quà distribuer son code à qui veut. Ca prends 1 minutes à installer ce script complémentaire.




#. Message de Kalamar le 28-08-2008 à 16:44
  [Ami de MountyHall]
68667 - Kalamar (Kastar 60)
- Trigoniae Trollicarum -
Pays: Belgium  Inscrit le : 1-10-2005  Messages: 492 (Golem Costaud)   Citer Citer
Pour l'utf8, moi, en tt cas, ça ne marche toujours pas (c'est pas critique, mais ça m'intéresserait de savoir).

La fonction à appeler au callback de l'xml http request doit-elle tjs être une fonction anonyme? (bon, je sais, je pourrais appeler une autre fonction depuis la fonction anonyme; l'idée est juste de déclutterer le traitement du resultat, pour laisser le code lisible).

#. Message de TilK le 28-08-2008 à 17:04
  [MH Team]   [Maître Outilleur]  [Ami de MountyHall]
36216 - mini TilK (Kastar 49)
- Teubreu -
Pays: France  Inscrit le : 6-12-2002  Messages: 8352 (Hydre Fumante)   Citer Citer
Je n'ai pas testé,mais à mon avis, tu peux mettre n'importe quelle fonction tant qu'elle prend en paramètre le responsedetails

#. Message de Greuced le 19-04-2009 à 19:33
29374 - Greuced (Durakuir 44)
- DARKgLINGlin -
Pays: France (09 - Ariège)  Inscrit le : 27-03-2004  Messages: 476 (Golem Costaud)   Citer Citer
bonjour,

aurais-tu des liens sur Xpath, notamment pour savoir comment on construit une expression XPath ? J'ai du mal à trouver, et j'aimerais me faire un petit script pour commencer...

merci d'avance

edit : plus précisément, je cherche à rajouter une entrée dans la liste des vues externes.

edit2 : j'ai trouvé, même si je ne sais pas si c'est la bonne façon, ça fonctionne :

var sel = document.evaluate("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/p/form/table/tbody/tr[4]/td[1]/select", document, null, XPathResult.ANY_TYPE, null);
if(sel)
{
    sel.iterateNext();
    appendOption(sel, 'map', 'MAP');
}


edit3 : je me sens tout con, ça marche plus

edit4 : ok, boulet, je vais remballer mon ordi. Comme ça, ça marche :

var sel = document.evaluate("/html/body/table/tbody/tr[2]/td/table/tbody/tr/td[2]/p/form/table/tbody/tr[4]/td[1]/select", document, null, XPathResult.ANY_TYPE, null);

if(sel)
{
    var toto = sel.iterateNext();
    appendOption(toto, 'map', 'MAP');
}

#. Message de Mr x le 22-04-2009 à 18:21
  [MH Team]
4078 - Mr X (Tomawak 59)
- Les Compagnons d'Erdor -
Pays: France (69 - Rhône)  Inscrit le : 3-03-2003  Messages: 609 (Shaï Epileptique)   Citer Citer
Moi pour les expressions Xpath j'utilise le module firefox Xpather.
Il suffit de faire un clic droit sur un élément pour avoir le chemin xpath complet de l'élément.
On peut aussi modifier l'expression xpath et voir directement tous les éléments qui correspondent.

#. Message de breizhou13 le 23-04-2009 à 08:50
50233 - B13 (Skrim 60)
- Les reclus -
Pays: France (13 - Bouches-du-Rhône)  Inscrit le : 10-11-2004  Messages: 2923 (Djinn Tonique)   Citer Citer
Ca c'est une bonne astuce.....Merci mr X

#. Message de Greuced le 5-09-2009 à 18:00
29374 - Greuced (Durakuir 44)
- DARKgLINGlin -
Pays: France (09 - Ariège)  Inscrit le : 27-03-2004  Messages: 476 (Golem Costaud)   Citer Citer
bonjour, c'est encore le boulet....

dans le bout de code suivant, dans un scrip complémentaire, concernant l'ajout d'un bouton dans la vue texte de MH pour afficher une vue 2D :

vueInitiale = 'toto';
alert(vueInitiale);
appendVue2DBouton('http://xxx/test.php', 'vue',
            vueInitiale, 'vue2dperso', new Array('login','toto','password','toto'));

l'alerte m'affiche bien toto, le bouton se crée bien, le clic dessus m'envoie bien vers la page test.php, mais la variable 'vue' reste désespérément vide, alors que je récupère bien les variables définies dans mon array.
le code html généré pour le bouton est ok, sauf la balise input pour 'vue' qui reste vide...

si dans l'appel de la fonction appendVue2DBouton je remplace vueInitiale par 'toto', même résultat... c'est comme si la fonction appendVue2DBouton ne récupère pas cette variable...

Une idée ? merci....

#. Message de Feldspath le 5-09-2009 à 21:44
34422 - feldspath (Kastar 52)
- Association Itinérante de Xylophonistes Eméchés -
Pays: France  Inscrit le : 30-05-2004  Messages: 246 (Golem Costaud)   Citer Citer
Le problème est qu'il doit falloir utiliser une callback plutôt que d'envoyer directement du texte, donc dans ton exemple ça donne quelque chose dans le genre :

function vueInitiale() {
return 'toto';
}
alert(vueInitiale());
appendVue2DBouton('http://xxx/test.php', 'vue', vueInitiale, 'vue2dperso', new Array('login','toto','password','toto'));

[Pages : 1, 2]

Pour poster une réponse sur ce Forum, vous devez d'abord vous connecter

Si vous n'êtes pas encore enregistré, vous devez d'abord vous inscrire.

 Changer de Forum Post reply  New post
[ Contact : ] - [ Heure Serveur : 16:35:25 le 27/04/2024 ] - [ Page générée en 0.013 sec. ]