Dernier commentaire : il y a 15 ans7 commentaires4 participants à la discussion
Bonjour, je débute en Java et j'essaie de modifier mon monobook afin de disposer de boutons personnalisés dans la fenêtre d'édition pour l'ajout de modèles.
Comme exemple, l'ajout de code pour des références du genre:
<ref name="GESTIS">{{GESTIS|ZVG= |CAS= |Nom= |Date=21 janvier 2010}}</ref>
J'ai déjà trouvé un code pour l'ajout de texte (cf. User:snipre/monobook.js), mais je bute sur l'ajout de double apostrophe, même en utilisant le backslash pour que java ne le considère pas comme un élément du code, mais comme caractère.
J'ai réussi à contourner le problème en utilisant le code ascii du double apostrophe et actuellement, je peux ajouter mon modèle de la manière suivante:
<ref name="GESTIS">{{GESTIS|ZVG= |CAS= |Nom= |Date=21 janvier 2010}}</ref>
Toutefois le code ascii n'est franchement pas beau et compréhensible dans le code wiki (lire le code dans une fenêtre d'édition pour comprendre). Bref, si quelqu'un pourrait m'aider à inclure ce double apostrophe de manière correcte, cela serait sympa. Snipre (d) 21 janvier 2010 à 17:45 (CET)
Salut,
Tu peux utiliser des apostrophes droites (« ' ») pour les chaînes de caractère en JavaScript (comme ceci : « 'ceci "est" une chaîne' »), ce qui te permettra d'y mettre des guillemets droits sans problème.
Le problème ne vient pas des guillemets mal interprétés (pour ça l'anti-slash suffit), mais de la fonction insertTags(), qui n'accepte ni les espaces, ni les guillemets ni les apostrophes (j'ai déjà expérimenté ce problème avec un de mes scripts et j'ai dû recréer une fonction similaire pour palier à ce défaut).
Pour simplement ajouter un bouton à la barre d'outils, une fonction générique existe déjà :
addCustomButton('URL_IMAGE','TEXTE POP-UP','DEBUT TAG','FIN TAG','TEXTE PAR DEFAUT','ID IMAGE');
Cette fonction standard ne permet malheureusement pas de changer le résumé de modif via ta fonction changeSummary();. Si tu y tiens vraiment il faut refaire la fonction insertTags() pour qu'elle accepte les caractères interdits mentionnés plus haut. Voir ici, environ à la moitié du script.
Merci, je me suis débrouillé tout seul en doublant l'anti-slash: le problème venait je crois du fait que le string était lu 2 fois. Pas besoin de fonction sup. Merci.
Par contre je bute maintenant sur le problème de l'ajout d'une image personnalisée pour mon bouton: j'ai créé une image SVG Fichier:Button GESTIS.svg, j'ai mis l'adresse dans le code, mais rien n'apparaît. Problème de format (SVG,png)? Snipre (d) 21 janvier 2010 à 20:20 (CET)
En cliquant sur l'image jusqu'au bout, j'ai un message d'erreur qui s'affiche :
Tu n'aurais pas, par hasard, essayé d'importer une image .png au format .svg ou inversement ? (normalement ce n'est pas possible mais je ne vois pas d'autre explication...) ⇨ Dr Brains∞ Doléances ∞21 janvier 2010 à 22:32 (CET)
C'est effectivement un format .png et un fichier dont le nom se termine par .svg . Ne sachant pas trop tes intentions je laisse comme ça, si le format .png te convient, alors il suffira de renommer le fichier. Par contre, si tu tiens au format .svg, je crois que je peux le refaire aussi. --Iluvalar (d) 21 janvier 2010 à 23:35 (CET)
Dernier commentaire : il y a 15 ans11 commentaires4 participants à la discussion
Bonjour, le gadget d'évaluation mis au point par Maloq (d · c · b) n'était pas prévu pour fonctionner avec le modèle {{évaluation multiprojet}} et son auteur n'est plus actif sur Wikipédia. Est-ce que quelqu'un aurait les compétences nécessaires pour réécrire ce gadget ? Je veux bien apporter mon aide pour cela, d'autant plus que je suis l'auteur du modèle multiprojet. Ambigraphe, le 21 janvier 2010 à 21:57 (CET)
Justement pour harmoniser la présentation et les modèles. Ce script de Maloq est quasiment le seul obstacle au basculement vers le nouveau modèle, préféré dans sa forme et sa conception par les participants au projets WP1.0. Maintenant, je comprends qu'il soit difficile de se pencher sur le travail d'un autre, d'où mon hésitation à venir quémander cette modification. Ambigraphe, le 21 janvier 2010 à 23:34 (CET)
{{évaluation multiprojet}} est utilisé dans moins de 5000 pages, tandis les différents modèles {{Wikiprojet Machin}} (que {{Évaluations WP1}} permet de mettre en boîte lorsqu'il y en a plusieurs) sont utilisés partout ailleurs. J'ai donc du mal à comprendre les raisons qui pousse le projet WP1.0 à vouloir remettre en cause ce qui a été fait et à préférer le premier.
Quoi qu'il en soit, le problème n'est pas que le script ait été écrit par un autre mais que de par sa conception l'adapter pour deux modèles aussi différents va vraisemblablement le transformer en usine à gaz. Si vraiment {{évaluation multiprojet}} est préféré, le mieux à mon avis est 1)de créer un autre script spécifique pour ce modèle. 2)de faire passer un bot pour changer tous les modèles d'évaluation {{Wikiprojet Machin}} par {{évaluation multiprojet}}.
dans ton monobook et de désactiver le gadget d'évaluation dans tes préférences. Dans un premier temps vérifie bien le résultat, et n'hésite pas à me faire des retours sur les problèmes ou les trucs bizarres rencontrés. --CHristoPHE (d)22 janvier 2010 à 01:04 (CET)
Bien joué ! Et rapide en plus...
Mais à moins que je me trompe, ton script ne prends pas en compte une spécificité du modéle, à savoir qu'un projet peut avoir une évaluation "avancement" différente des autres (ce qui en soi est une aberration, d'ailleurs). C'est cette particularité qui me fait dire que les deux modèles sont difficilement gérables par le même script. ⇨ Dr Brains∞ Doléances ∞22 janvier 2010 à 01:27 (CET)
Il y a 2 traitement séparés (c'est-à-dire 2 tableaux distincts pour l'utilisateur) : l'un pour les {{Wikiprojet XXX}} avec une évaluation d'avancement par projet et l'autre pour le {{évaluation multiprojet}} avec une unique évaluation. D'ailleurs, avoir une seule évaluation d'avancement par article ne me paraît pas aberrant. L'article est une ébauche, un bon article, ou autre, indépendamment des projets/thèmes auquel il se rapporte. --CHristoPHE (d)22 janvier 2010 à 07:51 (CET)
Oui, je suis parfaitement d'accord avec ton analyse sur l'avancement unique, ça tient du bon sens.
Sauf que justement le modèle {{évaluation multiprojet}} permet à un projet d'évaluer l'avancement différemment des autres. C'est ça l'aberration.
Effectivement, je pense aussi que l'avancement devrait être le même quelque soit le projet car ça dépend du fond et de la forme. A voir peut-être avec les autres personnes du Projet:Wikipédia 1.0. Lepsyleon (d) 22 janvier 2010 à 10:07 (CET)
Je comprends mieux la remarque sur l'évaluation de l'avancement. Je n'avais pas vu qu'on pouvait fixer cette variable pour chaque projet en plus de la variable "globale". Du coup ma modification du script ne prend en compte pas ces variables et devrait même planter dans certains cas. Je vais arranger ça. --CHristoPHE (d)22 janvier 2010 à 19:47 (CET)
J'ai corrigé le script Utilisateur:Chphe/Gadget-Evaluation.js pour tenir compte des différentes variables d'avancement. Je ne vais pas donner ici d'information sur les quelques changements d'interface, histoire qu'on puisse me dire si c'est un minimum intuitif ou non. Possbilité pour la suite : il est facile de forcer le gagdet à n'utiliser que le modèle {{évaluation multiprojet}}, la conversion automatique des modèles {{Wikiprojet XXX}} vers ce modèle étant presque direct dans le code javascript. --CHristoPHE (d)22 janvier 2010 à 23:07 (CET)
problème avec un script
Dernier commentaire : il y a 15 ans9 commentaires3 participants à la discussion
J'ai le script suivant dans mon monobook, pour ajouter des parenthèses derrière les numéros de section. Exemple : « 14) » au lieu de « 14 ». Problème : il fait bugger la fonction d'ajout à la liste de suivi déclenchée par un clic sur le bouton suivre en haut de la page. Une idée ?
//-------------------------------------------//// parenthèses après les numéros de section ////-------------------------------------------//functionaddLoadEvent(fun){if(window.addEventListener)window.addEventListener('load',fun,false);elseif(window.attachEvent)window.attachEvent('onload',fun);}functionaddParentheses(){tds=document.getElementsByTagName('span');for(vari=0;i<tds.length;++i)if(tds[i].className=='tocnumber'||tds[i].className=='mw-headline')tds[i].innerHTML=tds[i].innerHTML.replace(/(^[\.0-9]*)/,'$1) ');}addLoadEvent(addParentheses);//-------------------------------------------//
C'est un code qui vient du bistro, je ne me souviens pas de son auteur (désolé s'il se reconnait). Merci d'avance, Freewol (d) 22 janvier 2010 à 15:52 (CET)
Essayer addOnLoadHook() plutôt que addLoadEvent :
//-------------------------------------------//// parenthèses après les numéros de section ////-------------------------------------------//functionaddParentheses(){tds=document.getElementsByTagName('span');for(vari=0;i<tds.length;++i)if(tds[i].className=='tocnumber'||tds[i].className=='mw-headline')tds[i].innerHTML=tds[i].innerHTML.replace(/(^[\.0-9]*)/,'$1) ');}addOnLoadHook(addParentheses);//-------------------------------------------//
addOnLoadHook => addOnloadHook. Mais je vais chercher pourquoi le addLoadEvent ne marche pas... même si effectivement il est inutile C'était moi l'auteur — Arkanosis✉22 janvier 2010 à 17:00 (CET)
Alors, avec la version de DrBrains (addOnLoadHook), ça fait planter le javascript en fait (mais pas WP ). Avec la correction d'Arkanosis (addOnloadHook), tout refonctionne ... sauf l'ajout en liste de suivi. Et désolé pour avoir oublié que tu m'avais aidé Freewol (d) 22 janvier 2010 à 17:06 (CET)
Retire la définition de addLoadEvent(), elle entre en conflit avec une fonction addLoadEvent dépréciée dans MediaWiki:Common.js, appelant addOnloadHook() dans wikibits.js (vivement que le docteur soit admin pour nous nettoyer tout ça :p). — Arkanosis✉22 janvier 2010 à 17:14 (CET)
Ahhhhh ok, je n'avais pas envisagé cette possibilité . Ca marche, merci beaucoup !!! (par contre a priori je ne suis pas le seul à rencontrer ce pb, il doit y avoir plusieurs possibilités pour faire planter cette fonction ...). Voilà qui va me faire gagner de précieuses minutes en 2010 . Freewol (d)
Oui, désolé pour l'erreur de recopie, c'est bien addOnloadHook() et non addOnLoadHook().
Pour le nettoyage, le problème est que ces fonctions, bien que dépréciées, sont toujours utilisées par certains gadgets (ça c'est facile à modifier), mais aussi par des monobook utilisateurs (et là c'est plus compliqué). ⇨ Dr Brains∞ Doléances ∞22 janvier 2010 à 17:30 (CET)
@Freewol: Globalement c'est le fouilli le plus total dans les javascript de MediaWiki ; il faudrait reprendre tout ça, et créer un namespace MediaWiki pour toutes les fonctions...
Si tu connais d'autres personnes ayant des problèmes, n'hésite pas à les renvoyer par ici
@Dr Brains: on pourrait mettre en place une couche de rétro-compatibilité sous forme de gadget non activé par défaut, et poser un nouvel ensemble de fonctions plus propre et mieux documenté — Arkanosis✉22 janvier 2010 à 17:35 (CET) Oups, navré pour l'erreur à ton pseudonyme. Je vais m'autoflageller de suite
Oui, j'ai vu qu'ils avaient un système de ce genre sur en: (dernier chapitre des préférences) : un gadget pour assurer par exemple la compatibilité modern/monobook, requis par certains scripts, un autre pour gérer les fonctions non supportées par certains navigateurs, etc... Ca me semble pas mal mais ça impose une remise à plat de tout le système et une batterie de tests pour s'assurer que tout fonctionne. Un sacré boulot. ⇨ Dr Brains∞ Doléances ∞22 janvier 2010 à 17:43 (CET)
page contributions
Dernier commentaire : il y a 15 ans5 commentaires3 participants à la discussion
Bonjour,
nouvelle question . J'aimerais que ma page de contributions (Spécial:Contributions) n'affiche que la dernière de mes modifications pour chaque article. Possible, pas possible ? Aucune idée si c'est ici que vous pourrez me répondre, mais maintenant que je connais la page j'en profite . Freewol (d) 23 janvier 2010 à 09:39 (CET)
Bonjour
Recopie le script suivant dans ton monobook.js, et ça devrait marcher. Par défaut il ne va traiter que ta propre page de contributions. Il suffit de commenter la dernière ligne et décommenter la précédente pour que toutes les pages de contributions soient traitées.
script
/* Fonction pour n'afficher que la dernière modificationpour chaque page dans la liste des contributions. */functionder_contribs(){varbd=document.getElementById('bodyContent');if(!bd)return;varul=null;for(vari=0;i<bd.childNodes.length;i++)if(bd.childNodes[i].tagName=='UL'){ul=bd.childNodes[i];break;}if(!ul)return;vartabNames=newArray();varli=ul.firstChild;while(li){if(li.tagName=="LI"){vartitle=li.firstChild.title;if(titleintabNames){varli_tmp=li.nextSibling;ul.removeChild(li);li=li_tmp;}else{tabNames[title]=1;li=li.nextSibling;}}elseli=li.nextSibling;}}functionlancer_mapage(){varcs=document.getElementById('contentSub')if(cs&&cs.innerHTML.indexOf(">"+wgUserName+"<")!=-1)der_contribs();}//if(wgPageName == "Spécial:Contributions") addOnloadHook(der_contribs); // pour lancer la fonction sur toutes les pages de contributionsif(wgPageName=="Spécial:Contributions")addOnloadHook(lancer_mapage);// pour ne lancer la fonction que sur sa propre page de contributions
Super, merci. Ça marche plutôt très bien, bon ça ne rend pas unique entre les pages d'affichage des contributions, mais j'imagine bien que ça doit être impossible à réaliser en javascript ... Ça serait bien que les développeurs de MediaWiki se penchent sur le cas de la page Spécial:Contributions car je pense qu'il y a largement matière à améliorations, et à ajout d'options.
Ah sinon une petite remarque, j'ai l'impression que mon monobook.js ne fonctionne pas avec le navigateur Chrome, est-ce normal ? Vu la quantité de publicité qu'il y a eu sur ce logiciel en France, ça pourrait être bien d'améliorer la compatibilité de WP avec lui. Est-ce qu'il existe une page qui dit le pourcentage de consultation de WP avec les différents navigateurs ?
Enfin bref, merci Chphe, et OK Dr Brains pour les différents onglets, je ferai plus attention la prochaine fois . Freewol (d) 23 janvier 2010 à 13:23 (CET)
Ce n'est pas impossible, mais ça impose, quand on consulte une page de contributions, de charger en sous-main la liste des contributions plus récentes pour filtrer la page vue. Ca entraînera donc à chaque fois une latence d'autant plus importante que les contributions vues sont anciennes.
Concernant Chrome, ce n'est pas étonnant que des problèmes se manifestent : Chrome est récent et pour l'instant peu utilisé. Les plupart des scripts a été développé avant sa sortie, et donc n'ont pas été créés pour être compatibles avec. La solution est de voir au cas pas cas quelles fonctions de ton monobook ne fonctionnent pas et corriger les problèmes au fur et à mesure de leur apparition. --CHristoPHE (d)23 janvier 2010 à 13:50 (CET)
Boîtes déroulantes
Dernier commentaire : il y a 15 ans1 commentaire1 participant à la discussion
Dernier commentaire : il y a 15 ans4 commentaires2 participants à la discussion
Hello,
suite au message posté par Deansfa sur le bistro, sur lequel je suis tombé fortuitement : je pense que tous les gens qui ont la fonction addLoadEvent dans leur monobook.js (donc en monobook) ont des problèmes avec cette fonction, et devraient utiliser la fonction addOnloadHook. En tout cas c'est ce que j'avais fait sur vos bons conseils quand j'avais parlé de mon malheur ici. Question donc : est-il possible de lancer un remplacement de grande envergure ? Car manifestement plusieurs personnes ont toujours ce problème. Cordialement, Freewol (d) 31 mars 2010 à 15:21 (CEST)
Ahhh, bien vu, je n'avais pas du tout fait le rapprochement.
Je ne suis pas super chaud à l'idée de faire un remplacement automatique sur tous les monobooks (risque de faux positifs...).
Par contre communiquer là-dessus est une bonne idée... on pourrait utiliser le sitenotice, ou utiliser un spambot pour prévenir les personnes concernées... qu'en penses-tu ? — Arkanosis✉31 mars 2010 à 16:05 (CEST)
Oui je pensais à un truc du genre le message par un bot, si c'est possible techniquement ça me semble être une bonne idée. Le sitenotice, c'est ce qui nous demande de payer une fois par an ? Si c'est ça, je n'y prête guère attention et je pense ne pas être le seul. Cordialement, Freewol (d) 31 mars 2010 à 16:25 (CEST)
Requête faite ici. Je ne sais pas si c'est ainsi qu'il fallait procéder, mais en l'absence de réaction, j'agis . Freewol (d) 5 avril 2010 à 23:01 (CEST)
Portage LiveRC
Dernier commentaire : il y a 15 ans7 commentaires3 participants à la discussion
Bonjour, je me lance dans le portage de LiveRC pour différents navigateurs. LiveRC marche depuis longtemps sous Firefox et depuis ce matin sous Opera. Pour Chrome et IE (et probablement Safari ansi je n'ai pas eu le temps de regarder en détails), je me heurte au problème suivant: au début du javascript User:EDUCA33E/LiveRC.js on importe les paramètres depuis User:EDUCA33E/LiveRC/LiveRCparam.js mais Chrome semble complétement ignorer cet import et bloque avec la variable lrcShowIPNEWChecked non définie. De plus dans le débogueur de Chrome je ne vois pas User:EDUCA33E/LiveRC/LiveRCparam.js dans la liste des scripts à déboguer. J'ai essayé de remplacer l'appel à document.write par importScript mais cela n'a pas résolu le problème. Avez-vous des idées sur comment procéder? Merci. Nakor (d) 6 avril 2010 à 00:29 (CEST)
J'ai changé l'ordre des imports et ça semble résoudre le problème sauf pour les paramètres utilisateurs. Reste le problème de IE qui n'implémente pas getElementById sur ses documents XML, ce qui rend la prévisualisation impossible. Si quelqu'un a une idée de comment contourner cela on pourra avoir LiveRC sous IE, sinon tant pis. Nakor (d) 9 avril 2010 à 00:15 (CEST)
« IE qui n'implémente pas getElementById sur ses documents XML » : c'est vrai ça ? Si tu as un lien vers une page qui parle du problème je peux essayer de trouver une parade...
Sinon tu as toujours la solution « barbare » qui consiste à convertir ton XML en HTML, puis à faire du getElementById sur le HTML obtenu... — Arkanosis✉9 avril 2010 à 11:08 (CEST)
Si tu regardes User:EDUCA33E/LiveRC dans le fonction getDiff(), la ligne var bC = doc.getElementById('bodyContent'); ne passe pas pour cette raison (ça se voit bien au débogueur). J'avais voulu faire la conversion mais je n'ai pas trouvé comment. Je suis preneur si tu sais faire. Nakor (d) 10 avril 2010 à 04:07 (CEST)
C'est un problème que j'ai déjà rencontré : .getElementById() ne peut s'appliquer qu'au document, et bien sur ça ne marche plus correctement dans le cas d'une requête puisque certains Id censés êtres uniques ne le sont plus.
Il faut une autre fonction, de ce style :
///////////////////////////////////////////////////////////////////////////////// * Recherche d'un élement dont on connait l'Id mais non unique, donc sans utiliser document.getElementById() functiongetElementWithId(elementId,elementTagName,elementParentNode){if(!elementParentNode)elementParentNode=document;varTheElement=false;varElements=elementParentNode.getElementsByTagName(elementTagName);varelementcount=0;while(elementcount<Elements.length){varId=Elements[elementcount].id;if(Id){if(Id==elementId){TheElement=Elements[elementcount];break;}}elementcount++}returnTheElement;}///////////////////////////////////////////////////////////////////////////////
Cette fonction retourne false si l'élément n'existe pas ou bien elle retourne le premier élément trouvé dans l'élément parent ayant le TagName et l'id recherchés.
Dernier commentaire : il y a 15 ans16 commentaires4 participants à la discussion
Bonjour, désolé de venir vous déranger avec mes idées à la noix, mais je cherche des idées ou des infos pour réaliser un rêve de contributeur : pouvoir compléter le code d'un modèle via un formulaire. Je m'explique : les modèles sont assez difficiles à gérer dans le code d'un article, notamment la mise en page, la lecture du code, son actualisation lorsque le code principal a été modifié,... L'idée serait d'avoir une fonction qui pourrait ouvrir un formulaire utilisant la dernière version du modèle, récupèrerait les données de la page concernant le modèle et les afficherait dans le formulaire. Après modifications dans le formulaire, la fonction convertirait les données du formulaire en code wiki et remplacerait le code du modèle dans celui de l'article. Les outils pour ce faire existent, il faudrait maintenant les assembler pour arriver à cette fin (je prends comme exemple un modèle que je connais bien) :
formulaire : exemple (déjà utilisé pour la création du code wiki d'un modèle)
récupération du code de référence d'un modèle : exemple (importation du code d'une autre page)
Bref, je voudrais avoir des avis sur les moyens de faire ce genre de fonction et notamment savoir s'il existait déjà des exemples de codes Javascript implémentés dans MediaWiki qui permettraient l'ouverture de formulaire via un bouton. Merci de vos avis Snipre (d) 8 avril 2010 à 19:10 (CEST)
J'avais lu l'article en son temps. Toutefois cet outil ne peut pas récupérer tous les paramètres d'un modèle si ces derniers n'ont pas été mis lors de la pose du modèle dans le code (impossible également d'actualiser le code si le code de base du modèle a été modifié entre-temps) et le formulaire ne permet pas comme dans mon exemple, de proposer des menus déroulants ou de gérer la mise en page via des sous-modèles (exemple de l'utilisation du modèle date pour des dates de naissance comme dans ce formulaire). Je rêve de la version de luxe alors que l'Usability Initiative offre l'entrée de gamme. Snipre (d) 8 avril 2010 à 20:03 (CEST)
Si, il y a une solution pour récupérer les paramètres : requérir le modèle via une requête HTTP, puis compter les occurrences de triples accolades (et les trier pour éviter les éventuels doublons).
Lorsque clic sur un bouton, de rechercher tous les modèles utilisés dans la page et d'en faire une liste (si plusieurs modèles identiques, ils sont numérotés pour retrouver ensuite quel modèle il faut mettre à jour)
Lorsque clic sur un modèle listé : requête de la page du modèle et importation des paramètres possibles + création formulaire
Lorsque clic sur OK : mise à jour du modèle suivant formulaire.
Il est encore loin d'être au point, pour l'instant seules les deux premières étapes sont opérationnelles et encore je me trouve confronté à un problème épineux pour l'étape 2 : le fait qu'il puisse y avoir un modèle en paramètre d'un autre modèle fait bugguer la récupération des modèles dans certaines pages.
Une fois que tu as fait « Texte.split('{{')[1] », tu devrais spliter sur le plus proche entre « }} » et « | », plutôt que systématiquement sur « }} » (indexOf() le plus petit, différent de -1).
Sauf erreur de ma part ça devrait résoudre le problème des modèles imbriqués (en espérant que mon explication n'est pas trop confuse).
Certes, l'API pourra me dire rapidement quels modèles sont utilisés, mais pas combien de fois chacun et donc lequel modifier. Et il me donnera aussi les sous-modèles qui n'apparaissent pas dans le code de la page, qui ne sont donc d'aucune utilité (paramètres d'ébauches et {{Portail Machin}} notamment). Et surtout, ça ne me donnera pas les paramètres déjà présents dans les modèles de la page.
Non, la seule solution c'est de vérifier directement dans la page.
Ca ne sera pas si lourd que ça si chaque étape correspond à un clic :
Pas de clic : ajout du bouton
Clic sur le bouton : listage des modèles de la page
Clic sur un modèle listé : requête HTTP page du modèle et création formulaire
Clic sur OK : mise à jour
Pour le moment j'en suis à faire marcher le listage, je verrais après pour la lourdeur éventuelle...
Merci pour les infos, et il n'y a pas le feu au lac. Je ne vous demande pas de faire tout le code. Si quelqu'un arrive à m'indiquer comment récupérer le code wiki du modèle avec les données dans une variable x et comment appeler un formulaire vide, je suis prêt à me taper le code responsable de parser x pour remplir le formulaire. Et mon modèle fétiche est la modèle:chimiebox qui est une vraie saloperie, car des modèles de mise en forme et de référence sont utilisés dans les paramètres du modèle chimiebox, genre :
Bon, j'ai réussi à faire marcher le listage. L'astuce consiste à ne pas rechercher le début d'un modèle {{ mais la fin }}, puis de remonter au début de ce modèle-là et de remplacer les doubles accolades, et ainsi de suite jusqu'à ce qu'il n'y en ait plus. Ainsi j'arrive à lister les modèles et leurs paramètres même dans le cas où ils sont imbriqués (bon ça récupère aussi les mots magiques et autre formatnum, mais c'est un pb mineur que de les évacuer de la liste).
J'avais également réussi à créer le formulaire qui va bien avec les paramètres déjà présent, mais je bute à présent sur la récupération des paramètres lors de la requête de la page du modèle : non seulement il y a les triples accolades des paramètres, mais également des doubles, dues soit à des sous-modèles, soit à des parser functions. Bref, c'est le merdier...
M'enfin je perds pas espoir d'arriver à résoudre ce problème.
Après viendra le problème épineux également de savoir quel modèle de la page il faut mettre à jour dans le cas où il y en a plusieurs identiques...
Je pense qu'il faut simplifier l'approche: pour un bouton, une infobox. Pourquoi ? En général, un article possède une seule infobox du même type. De plus, vu la complexité de chaque infobox, il faudra développer un code d'extraction spécifique pour chacune. Donc simplification du code avec l'ajout d'un paramètre qui est le nom de l'infobox. Ensuite, je proposerai de récupérer dans une structure/table la liste des paramètres de l'infobox et tout ce qui ce trouve après le signe = . Pour ce faire utiliser la barre verticale | comme moyen de reconnaissance et pour éviter l'interférence des sous-modèles, négliger tous les barres verticales placées entre des accolades.
A partir de là, on doit appliquer pour chaque ligne de la structure/table, un code d'extraction spécifique.
Dr. Brains, si tu arrives à isoler le code wiki pour une infobox précise du texte d'un article, et à isoler la valeur brute de chaque paramètre dans une structure/table temporaire, alors chacun pourra créer le code d'extraction d'une infobox. Il ne s'agit que d'expressions régulières.
Je te propose de définir un tableau RawData de 2 colonnes (une colonne pour les paramètres de l'infobox, la deuxième pour la valeur brute (comprenant des sous-modèles pour le formatage, les sources,...) associée au paramètre.
Puis dans ton code, de créer un autre tableau ExtractedData, contenant plusieurs colonnes, avec dans la première les paramètres de l'infobox, et dans les suivantes, les chiffres et les strings de la valeur du paramètre, en fonction des possibilités. Ainsi mon exemple revient à :
RawData correspond à
Nom
X
Prénom
Date_naissance
{{Date|19|4|1912}}
Métier
blabla
Lieu_naissance
[[XXX]]
et ExtractedData à
Nom
100
X
Prénom
0
Date_naissance
1
{{Date|19|4|1912}}
Métier
100
blabla
Lieu_naissance
100
XXX
L'étape ultime étant de remplir un formulaire vierge (défini dans un autre code) avec les données stockées dans tableau. L'idéal serait de rajouter une colonne après la colonne des paramètres indiquant l'état de l'extraction, genre valeur extraite (c.-à-d. reconnue et séparée dans différentes colonnes), valeur inconnue (modèle pas reconnu, symboles,...) et valeur vide. Remarques ?Snipre (d) 12 avril 2010 à 16:30 (CEST)
Je vois ce que tu veux dire : une sorte de addCustomButton(), avec en paramètre le nom du modèle, qui par rapport à le script actuel (que tu sembles avoir essayé), se focaliserait uniquement su ce modèle-là plutôt que tous les modèles présents dans la page.
Cela dit, la difficulté est toujours la même : récupérer le modèle et ses paramètres dans la page, et récupérer les paramètres possibles du modèle via une requête Ajax, puis imbriquer le tout pour faire un formulaire constitué de <input type="text" />.
Je suis assez nul en RegExp et pour l'instant je piétine à faire les deux premières étapes avec mes méthodes "barbares" à base de .indexOf : sur certaines pages, suivant les modèles, des fois ça marche nickel, des fois ça plante en créant une boucle sans que je comprenne pourquoi (et bien que j'ai ajouté des conditions pour l'éviter).
J'aurai bien besoin d'aide à ce niveau-là : si quelqu'un pouvait me coder la fonction pour récupérer (avec des RegExp) le modèle et mettre ses paramètres dans une Array, la suite ne présenterait plus grande difficulté.
Ok, essaie de voir si tu ne trouves pas un bout de code ici concernant la détection des infobox. Je vois voir pour les RegExp. Snipre (d) 12 avril 2010 à 19:44 (CEST)
Si tu prends le code qui suit le commentaire "Begin of text" et celui après "End of text", tu trouveras un moyen de repérer les infobox en évitant les sous-modèles. Snipre (d) 12 avril 2010 à 19:54 (CEST)
Sinon avec le code qui suit, tu as les variables utilisées dans « variables » et les modèles dans « models » (un petit nettoyage des résultats est nécessaire, mais ça semble marcher correctement sur la chimiebox).
En récupérant « cvariables » et « cmodels ». J'ajouterais que les regexp d'EcmaScript ne méritent pas ce nom. Gnn. D'abord. — Arkanosis✉12 avril 2010 à 20:46 (CEST)
Bon, j'ai un code matlab pour effectuer l'extraction. Je ne sais pas si quelqu'un peut le réécrire en JavaScript. L'idée est de chercher tous les paramètres présent dans le code du modèle. Cela inclut les paramètres du modèle désiré et ceux des sous-modèles inclus dans le modèle. Il faut récupérer le string correspond au paramètre, l'indice du début et de la fin. Ensuite il faut étudier les chaînes situées entre les paramètres ainsi identifiés et compter le nombre d'occurrences pour {{ et }}. Si on obtient le même nombre pour ces 2 groupes de caractères, alors on a la valeur correspond à un paramètre du modèle principal. Si le nombre est différent, alors on a un affaire à un sous-modèle. Il suffit alors d'étendre la chaîne de caractère en ajoutant tous les caractères jusqu'au paramètre suivant. Cela permet d'éviter tout nettoyage.
Ex. code wiki du modèle: Chimiebox | nom = XXX | formule = YYY {{ouvrage| titre = yyy}}| masse = ZZZ
Extraction des paramètres et des indices, via un regexp cherchant le pattern "| xxxx ="
| nom =
11
17
| formule =
23
33
| titre =
48
56
| masse =
63
71
Ensuite on extrait la chaîne de caractères entre 2 paramètres, ce qui donne dans le premier cas XXX et la recherche des expression {{ et }} donne 0 respectivement 0 pour cette chaîne. Si on poursuit, la chaîne de caractère pour le deuxième paramètre est YYY {{ouvrage. La recherche de {{ et de }} donne 1 et 0. On élargit la longueur de la chaîne jusqu'au paramètre suivant pour obtenir YYY {{ouvrage| titre = yyy}}. Nombre d'occurrences pour {{ et }}, 1 et 1. Finalement on obtient:
nom
XXX
formule =
YYY {{ouvrage| titre = yyy}}
masse =
ZZZ
Code matlab
str = '|nom = X | prenom = Y | date = {{date|2|4|1981}}| lieu = {{ref|titre = XX | editeur = YY | annee = 2001}} | pays =Z | nationalite = | metier = | continent = A {{ref|titre = AA| editeur =BB}} {{ouvrage|titre =CC| collection =DD}} | fin = ';
[AllParameter startParam endParam] = regexp(str,'\|[a-zA-z0-9\s]+\=','match');
i=1;
j=2;
k=0;
while i ~= length(AllParameter)
if endParam(i)+1 <= startParam(j)-1
val = str(endParam(i)+1:startParam(j)-1);
ok =0;
while ok~=1
nbTemplateStart = strfind(val,'{{');
nbTemplateEnd = strfind(val,'}}');
if isempty(nbTemplateStart) || length(nbTemplateStart) == length(nbTemplateEnd)
ok = 1;
k=k+1;
RawData{k,1} = regexp(AllParameter{i}, '(?<=\|)[a-zA-Z0-9\s]+','match');
RawData{k,2} = val;
i = i+1;
j = j+1;
if j-i>1
i =j-1;
end
else
j =j+1;
val = str(endParam(i)+1:startParam(j)-1);
end
end
else
ok = 1;
k=k+1;
RawData{k,1} = regexp(AllParameter{i}, '(?<=\|)[a-zA-Z0-9\s]+','match');
RawData{k,2} = val;
i = i+1;
j = j+1;
end
end
k=k+1;
RawData{k,1} = regexp(AllParameter{i}, '(?<=\|)[a-zA-Z0-9\s]+','match');
RawData{k,2} = str(endParam(end)+1:end);
Comment savoir si une page WP existe ? Faut-il obligatoirement passer par une requête ajax ? (Y a t'il une fonction déjà disponible que je n'aurais pas vu ?)
J'aimerais récupérer l'"ArticleId" (numéro d'adresse permanente) de la dernière version d'un article sur un WP étranger :
J'ai vu qu'elle était disponible dans la variable "wgArticleId", mais comment faire pour que la page de ce wiki me renvoi sa valeur (je ne peux évidement pas mettre un script perso sur tous les wiki ^^) ?
2. extraire le contenu de l'iframe (l'iframe mettant potentiellement un peu de temps à s'afficher, un délai est bienvenu, voire un bouton ou une pop-up de confirmation)
mais pour avoir accès au contenu de l'iframe d'un autre domaine (étape 2.), il faut ajouter dans le monobook.js (ou vector.js ou autre suivant le cas) des deux wiki la ligne
C'est pour utiliser directement dans le gadget, en javascript donc. Merci pour le lien sur l'API, c'est exactement ce que je cherchais.
Jamais je n'aurais pensé aux iframe : on m'a tellement rabaché que « les iframes, c'est le mal! » que je les avais presque oublié. Même si la solution est élégante, le gadget est supposé être super simple à utiliser (on a des soucis d'ergonomie sur le projet:traduction car les traducteurs ne sont pas forcément des bidouilleurs) donc devoir modifier plusieurs monobook.js ne me parait pas adapté à ma problématique... Donc il veut mieux soit abandonner l'idée, soit la transférer à un bot (du genre, mon script va signaler au bot qu'il faut compléter la page avec le oldid, et on fait tourner le bot tous les jours), qui sera plus apte à la gestion interwiki. Merci pour ta réponse :) Romainhk (QTx10) 20 avril 2010 à 19:16 (CEST)
Concernant l'existence ou non de la page :
Avec le format "standard" de l'API (donc sans format spécifié), le résultat est une succession de <span>. Il te faut chercher si parmi eux celui qui contient title= contient également missing= (page inexistante), ou redirect= (redirection).
Concernant l'iframe, ce n'est pas très élégant/userfriendly comme méthode mais c'est la seule (à ma connaissance) qui permette d'accéder à une page d'un autre domaine.
J'ai d'ailleurs un script en construction, Utilisateur:Dr Brains/GetOtherWikiPage.js, qui a terme est censé récupérer sur un autre wiki les interwikis manquant d'une page fr. Il marche mais n'est pas encore terminé (il manque l'édition de la page fr)
Non, Utilisateur:Dr Brains/GetOtherWikiPage.js était un essai perso "à ma manière", pour tester la ruse de l'<iframe> (rien que le titre de la page annonce la couleur). Je n'ai pas vraiment l'intention d'en faire un gadget opérationnel. Ikiwi m'a l'air beaucoup plus complet, bien que je n'en ai pas percé tous les mystères (cette manie dont tu n'es pas le seul adepte d'aller à la ligne avant les accolades ouvrantes et de faire des indentation minuscules ne facilite pas la lecture...).
Je plaide coupable pour l'indentation : en vrai je suis un fervent défenseur de l'indentation à base de tabulations, mais comme il m'arrive de coder directement dans firefox et que tab me fait passer au champ suivant... — Arkanosis✉20 avril 2010 à 20:37 (CEST)
En fait, je suis passé par un api.php?action=query&prop=info&titles=MAPAGE&format=json puis je recherche le champ "length" (s'il vaut plus que 0, la page existe ^^).
Ok, je jetterai un coup d'œil à tout ça, cela pourrait donner des idées. Au passage, on peut inclure un script dans un autre script (importScript(...)) ? Romainhk (QTx10) 20 avril 2010 à 21:46 (CEST)
Pas bête. Je ne connais pas trop ce format mais il a l'air plus simple/rapide. Qui se dévoue pour compléter Projet:JavaScript/Aide API ?
Dernier commentaire : il y a 15 ans5 commentaires2 participants à la discussion
Ce n'est pas vraiment le sujet du projet puisque c'est une question sur le css et nom pas sur le js mais vous saurez peut-être me répondre.
J'ai ajouté sur mon monobook une classe .usermessage (vous savez la classe pour le vilain truc orange qui apparait pour quand on a un message) afin que cela soit d'une couleur bleu, pourtant il n'y a aucun changement malgré mes nombreux rafraichissement du cache. J'en déduis que j'ai fait une erreur mais laquelle ? 十月 三日 (^o^) appelez moi Ju (^o^) 30 avril 2010 à 13:22 (CEST)
;) C'était dû à l'adresse HTTP qui contenait les caractères // synonyme de commentaire (ou de fin de commentaire) en CSS, du coup, ça annulait les // juste avant, en considérant la suite du code non plus comme un commentaire mais comme du CSS (causant une erreur). — Steƒ๏̯͡๏30 avril 2010 à 14:15 (CEST)
Dernier commentaire : il y a 14 ans49 commentaires9 participants à la discussion
Commons a évolué, la version d'hotcats là bas aussi. Je me demandais s'il était possible d'adapter les modifications apportées là bas, qui facilite quand même grandement la vie, à savoir
la possibilité d'ajouter et/ou supprimer plusieurs catégories d'un coup (grossièrement, on en modifie une, puis une seconde sans confirmer la première, et le gadget ne lance pas l'édition, mais demande de sauvegarder quand on est prêt à modifier pour de bon, ce qui ouvre la fenêtre d'édition, et ensuite oblige à une publication manuelle)
La possibilité de modifier une catégorie sans avoir à éditer manuellement la page. Il me semble que cette modification était controversée, mais après une discussion sur irc, il me semble à présent pertinent de poser à nouveau la question.
Je ne sais pas si c'est déjà le cas sur fr: (mais j'en doute fort), la possibilité d'inclure la clé de tri sur la modification par hotcats. Sur commons, il suffit d'éditer la catégorie par hotcats, et de rajouter derrière le nom « |clé de tri ». De même quand on édite une catégorie qui a déjà une clé de tri, celle-ci apparait simplement de cette façon ( « catégorie|clé de tri » dans l'espace d'édition hotcats).
Je suppose que tu veux dire "avec publication automatique". Ca existe déjà, c'est un simple paramètre à changer (ou à personnaliser dans son monobook).
Ca marche déjà (à peu près) : en mettant dans la champ Nouvelle catégorie|Clef, ça va remplacer Ancienne catégorie par Nouvelle catégorie|Clef. A peu près car si il avait [[Catégorie:Ancienne catégorie|Ancienne Clef]], le résultat sera [[Catégorie:Nouvelle catégorie|Clef|Ancienne Clef]]. Ca marche, c'est bien Clef qui est pris en compte, mais la syntaxe est quand même fautive.
Je rajouterai également la prise en compte de la présence d'interwikis : si il n'y a pas de catégories, celles-ci s'ajoutent à la fin de la page, donc après d'éventuelles interwikis. Ma version perso prend en compte ce soucis, mais peut-être pas de la manière la plus sûre et élégante possible.
Précision, pour la clé de tri, quand on édite une catégorie sur commons avec hot cats, s'il y en a une, l'édition donne directement Actuelle catégorie|Actuelle clé, et on peut donc directement modifier les deux. — Rhadamante8 juin 2010 à 18:35 (CEST)
Ca devrait pouvoir se régler en remplaçant la ligne
A présent si on met un pipe (et donc une clef de tri) dans le champ, l'ancienne clef est supprimée.
Très bien. Je viens aussi de découvrir une autre fonction de hotcats sur commons. Pas indispensable mais pratique, deux boutons à coté du (+)/(-), « (↓) » et « (↑) » permettant repectivement d'accéder aux catégories inférieure(s) et supérieure(s) de l'actuelle catégorie ciblée. Ça permet entre autres de modifier un catégorie mère par une catégorie fille plus précise de façon assez simple et rapide — Rhadamante8 juin 2010 à 23:49 (CEST)
En apparence, pas de changements, hormis un bouton (±) qui viens se greffer à côté du lien "Catégories".
Tant qu'on ne clique pas sur ce bouton, HotCats fonctionne comme d'habitude (j'ai cependant ajouté quelques trucs pour éviter certains bugs, comme l'ajout d'une catégorie déjà présente).
Une fois le nouveau bouton (±) cliqué, le mode "multi" s'active. On peut dès lors retirer ou modifier une ou plusieurs catégories, le clic sur OK ne lance pas la modif mais enregistre la modification souhaitée, Idem pour l'ajout de catégories, on peut donc en ajouter autant qu'on veut.
Les changements sont repérés par les couleurs des liens :
rose et barré : catégorie à supprimer;
jaune foncé : catégorie à modifier;
vert : catégorie à ajouter.
Un clic sur Annuler (celui du bouton "multi", pas ceux de chaque catégorie), fait sortir du mode "multi". Tous les changements effectués sont annulés et la barre revient comme à l'origine.
Un clic sur Valider (touche inactive tant qu'il n'y a pas eu de changements), lance une pop-up de confirmation listant les changements qui vont être effectués, si confirmé, l'édition se lance.
L'édition est automatique, sauf dans le cas où il y a un problème (catégorie introuvable, catégorie présente plusieurs fois, catégorie à ajouter déjà présente, etc...).
Des testeurs fous (ou pas) seraient bienvenus, dans l'optique future de remplacer le gadget.
Ça marche chez moi (firefox, windows vista, monobook). Par contre, je ne sais pas si c'est volontaire, mais derrière les catégories déjà existantes, il y a deux fois les (-)(±) (Nom de la catégorie (–) (±) (–) (±)), et ça fait un truc bizarre quand je veux utiliser hotcats en mode normal (même si au final ça marche) : si je veux modifier un catégorie existante, au lieu d'ouvir le champ où apparait cette catégorie, ça m'en ouvre un nouveau juste derrière, ou je peux mettre la nouvelle catégorie; quand je valide, j'ai un message d'erreur comme quoi il n'a pas pu trouver la catégorie à remplacer (Impossible de trouver une occurrence unique de "[la catégorie]" - elle est peut-être incluse via un modèle), mais après avoir cliqué sur ok pour fermer la boite de dialogue, la modification est effectuée. Le problème est le même quand je veux supprimer une catégorie.
Autre problème, derrière la dernière catégorie, outre le double (-)(±), il y a en plus (+) (–) (±) | [+] | (+) (le [+] correspond aux catégories cachées). J'ai essayé d'ajouter une catégorie avec le premier (+), ça fout le boxon et ça échoue, et avec le dernier, il me dit impossible d'ajouter, la catégorie existe déjà, mais fini quand même par l'ajouter. — Rhadamante20 juin 2010 à 14:13 (CEST)
Tu as désactivé HotCats dans les gadgets ?
Parce que si tu as deux fois les (-)(±), ça vient surement de là.
Oups. Bon tout à l'air de marcher maintenant, à l'exception d'un truc, hotcats en mode classique qui ouvre toujours un un champs à coté de la catégorie qu'on veut modifier, au lieu d'ouvrir un champs à la place de celle-ci (je ne sais pas si c'est volontaire). — Rhadamante20 juin 2010 à 15:15 (CEST)
Je viens d'ajouter les boutons ↓ et ↑ pour suggérer les catégories parentes et filles. Mais contrairement à la version de commons, ces boutons sont dans les formulaires et non à côté de chaque catégorie (ça aurait fait trop chargé amha).
Très utile en effet, ça fonctionne bien chez moi (Firefox 3.6). Juste une petite remarque quand les champs sont à cheval sur deux lignes : il peut arriver que le champ texte passe à la ligne, mais la liste de propositions reste toujours à la fin de la ligne du dessus (voir cet exemple : je suis en train d'éditer la catégorie « Utilisateur ja » en bas à gauche mais la liste est en haut à droite). C'est peut-être normal au demeurant ? Merci pour le gadget en tous cas. Binabik (d) 21 juin 2010 à 11:58 (CEST)
Ca le fait aussi avec le gadget. J'ai corrigé, à présent ça devrait être bien aligné avec le champ de texte.
Cela fonctionne chez moi (Linux 10.04 avec Mozilla Firefox 3.6.3 et Opera 10.10).
Juste une petite remarque, pour éviter que je sois perdu, pourrais-tu rapprocher le nouveau fonctionnement de HotCats sur WP du nouveau fonctionnement de HotCats sur COM (il y a de nombreux points en communs d’ailleurs), notamment au niveau de la signalisation ( et plutôt que et , etc.).
Cdlt, Vigneron * discut.21 juin 2010 à 13:04 (CEST)
Ce sont les icônes qu'il y avait avant (et qu'il y a toujours sur le gadget actuel). J'avais pensé qu'un peu de couleur ne ferait pas de mal, ayant mis du temps à l'époque à me rendre compte de la présence de ces icônes et de leur signification. J'imagine qu'on doit pouvoir en trouver d'autres un peu moins flashy que et mais plus visibles que et (sachant que ces icônes sont personnalisables de toutes manières).
En fait de ressemblance, c'est parce que je me suis inspiré de la version commons pour le fonctionnement des nouveaux outils/boutons, mais en réalité, le code n'a rien à voir : la version de commons intègre quantité de subtilités dont on n'a pas besoin ici (rapport à l'aspect multi-langues notamment, ainsi que la gestion de Special:Upload, page bien plus complexe qu'ici), le tout faisant du script un truc assez complexe à appréhender et lourd (100ko). En fait, je suis parti du gadget actuel (que je connaissait déjà un peu pour avoir bricolé ma version perso) en ajoutant des fonctions et modifiant celles existantes selon les besoins. Résultat il est deux fois moins lourd (54ko en ce moment et sans doute allégeable), mais a priori il reprend toutes les fonctions essentielles de la version commons.
La réponse 1. (et veto pour le 10, on voit quasi-rien). Étant très souvent sur Commons, plus les deux gadgets seront similaires, mieux cela sera pour moi (donc au pire, je tripatouillerais mon css avec ton aide). Cdlt, Vigneron * discut.21 juin 2010 à 14:48 (CEST)
Assez d'accord pour la 10, j'ai essayé et on n'y vois pas de différence entre les deux icônes. Dommage, elles sont jolies (et je me suis embêté à les recadrer)...
Les leds clignotantes, ça rend pas super non plus...
Pour personnaliser l'icône, c'est du côté .js que ça se passe (voir la doc). Il faut créer une fonction nommée hotcat_UserCustom() et y lister les valeurs que tu veux aux variables que tu souhaites modifier.
Pour l'image, il y en a trois : une pour la taille (20 par défaut), et deux pour l'url des images. Pour retrouver l'image par défaut (choix N°1), ce sera donc :
A ajouter n'importe où dans le monobook (ou le vector le cas échéant). Il y a une quarantaine de variables personnalisables de la sorte (y compris les différents textes).
Pour ce qui est des icônes par défaut, on peut sans doute encore en discuter, mais j'aime assez qu'elles soient différentes de celles de commons. Une sorte de french touch en quelque sorte ...
Script transformé en gadget (mais avec un autre titre, sans remplacer la version actuelle pour l'instant). Il est désormais sélectionnable dans les préférences. La documentation a été mise à jour en conséquence.
Salut, je ne sais pas si je suis le seul, mais j'ai grand peine à me faire à la boîte déroulante : elle ne se ferme que quand on valide la catégorie (et cache donc en partie le texte), mais surtout quand on tape le script remplace toutes les 0,05 secondes des caractères. Je suis en train de taper "Naissance en" et paf si j'ai eu le malheur de cacographier (espace oubliée, etc.) un peu il me met "Naissance au Bengladesh" quand ce n'est pas "Najadales", et plus on tape sur back space plus il remplace ce qu'on efface, avant même qu'on ait eu le temps de tout effacer, il propose déjà quelque chose en surbrillance et des cats les plus improbables . Quand on a fini de jouer la rapidité avec lui, on tape ENTER et ça ne valide pas la cat, ça recharge la page sans rien sauvegarder. Caramba, tout est à recommencer ! Petit détail, le script pourrait-il mettre systématiquement la première lettre de la catégorie en capitale ? (le P:CS est pointilleux sur ce genre de choses) Voili voilou, je devais raconter mes déboires, Totodu74 (devesar…) 22 juin 2010 à 22:43 (CEST)
Pour la catégorie avec première lettre majuscule, ça devrait être le cas. J'ai dû oublier un truc quelque part.
Pour l'ajout du texte en surbrillance, c'est vrai que c'est parfois très chiant (mais c'est pareil avec la version "normale"), et je me dis que le mieux serait peut-être de zapper cet ajout automatique, comme dans BandeauxPortails : seul le clic sur une catégorie de la liste remplace le texte. Je vais essayer d'améliorer ça.
« Quand on a fini de jouer la rapidité avec lui, on tape ENTER et ça ne valide pas la cat, ça recharge la page sans rien sauvegarder. Caramba, tout est à recommencer ! » : Là je ne comprends pas bien le problème. Où ? Quand ? Comment ?
Très simplement : je clique sur (+) je rentre dans la zone de texte "Naissance en 1991ENTER" et il me recharge la page sans l'éditer (et ajouter la cat). Je suis obligé de cliquer sur le bouton OK pour qu'il la rajoute... Totodu74 (devesar…) 22 juin 2010 à 22:58 (CEST)
Ah OK, je comprends mieux. Je vais voir ce que je peux faire.
Problème du ENTER qui ne marchait plus comme avant : réglé.
Je vais voir ce que je peux faire pour le remplacement inopiné du texte en cours de frappe.
Au passage, ça m'a permis de m'apercevoir que j'avais encore deux fonctions résiduelles de l'ancien code qui ne me servait plus : -5ko de gagnés, soit une page environ 3 fois plus légere que la version commons (100ko contre 38ko).
Problème du remplacement inopiné a priori réglé : le texte d'origine du champ de texte est vérifié juste avant un éventuel remplacement, et non plus avant d'effectuer la requête de suggestion (durant laquelle le texte peut avoir évolué).
Maintenant que je peux essayer ce gadget, je suis moi aussi choqué par les couleurs flashy... je préfère aussi largement la solution 1 (sûrement pas habitude du HotCats normal et de Commons, mais bon...), ou éventuelement le 4 ou le 5 en second choix. Cordialement, --Gagea (d) 25 juin 2010 à 00:13 (CEST)
Bon ben j'ai remis les vieilles icônes. Tant pis pour la couleur...
Oui, c'est quand meme bien plus pratique que HotCats. C'est la première fois que je modifie les clés de tri (d'habitude je n'en ai pas le courage...)! Ce qui serait encore mieux, ce serait de ne pas à avoir à activer le mode multi, mais qu'il soit activé par défaut (c'est à dire ne pas avoir besoin de clique sur le (+) à coté de "catégorie"). Qu'en pensez-vous ? Par ailleurs, j'ai constaté qu'après la modification d'une dizaine de catégories j'arrete de vérifier que mes vérifications sont correctes, lorsque la fenetre de récapitulatif s'affiche (dix c'est quand meme beaucoup, vous noterez la bonne volonté!)... y a-t-il un moyen de désactiver cet avertissement ?
Merci bien pour cet outil en tout cas (et qu'est-ce qu'elles sont jolies les nouvelles icones :P) !
J'ai ajouté ces deux options, et mis à jour la doc pour les paramètres de personnalisation (personnalisation qui me permet de mettre les icônes que je veux, que pour moi, na !)
Super! Quelle rapidité! Et... tu crois que ce serait possible qu'en mode Multi la légende ne soit pas affichée (je dois avoir un problème avec les couleurs vives!)... et que... le mot "catégorie", les boutons Valider/Annuler, et les différentes catégories avec leurs boutons soient sur la même ligne ? (mais ça c'est du détail... t'as le droit de dormir aussi! :D).
Je ne sais pas ce qui se passe depuis cet après-midi, si ça vient de hotcats ou de mes réglages internes ( hotcat_ShowInline = true; hotcat_SkipRecap = true; hotcat_ShowLegend = false; rajoutés cet aprem, hotcat_AutoMulti = true; hotcat_autocommit = true; depuis plus lontemps), mais quand j'ouvre une nouvelle page, je me retrouve automatiquement en bas de page, un peu au dessus des catégories. J'ai essayé en désactivant hocatsmulti, et ça ne le fait plus. — Rhadamante26 juin 2010 à 21:48 (CEST)
Je confirme, ça vient de l'option hotcat_AutoMulti : cet après-midi j'ai amélioré la gestion du focus clavier. Notamment, lorsque le mode multi s'ouvre (quant on clique sur le lien), le focus passe sur le bouton "Annuler". C'est ce qui, dans le cas d'un lancement automatique, provoque le scroll en bas de page (en fait, au niveau du focus).
Il suffit que je mette une condition et ce sera bon. L'affaire de quelques secondes.
(retour à gauche) J'ai un problème depuis quelques minutes avec la suppression de catégories (même réglages que précédemment). Quand je supprime une catégorie, il la transforme en undefined (rose, barré) et forcément, quand je valide, ça me fait un message d'erreur comme quoi il ne peut pas trouver la catégorie. — Rhadamante28 juin 2010 à 20:23 (CEST)
Ça doit être dû à un petit changement que j'ai fait aujourd'hui. J'ai reverté, ça devrait remarcher comme avant.
Ça y est, les exigences reprennent! Crois-tu qu'il serait possible de modifier aussi les catégories cachées avec HotCatsMulti ? Cordialement --Gagea (d) 4 août 2010 à 12:23 (CEST)
Non. Les catégories cachées sont le plus souvent ajoutées par des modèles (bandeau de portail, d'ébauche ou d'avertissement divers, etc...) et ne sont donc pas présentes dans la page. On ne peut donc pas les modifier.
Vector.js : ajout d'une section à la barre de navigation gauche
Dernier commentaire : il y a 14 ans3 commentaires2 participants à la discussion
Bonjour,
Du temps de Monobook, j'avais un code qui ajoutait une section personnelle dans la colonne de gauche, avec quelques liens rapides. J'ai adapté ce code à Vector ; au début cela fonctionnait très bien (voir mon vector.js, fonction nouvelleBoite), mais depuis quelques jours, cela « casse » le fonctionnement du « collapse/expand » des sections. Je ne peux plus rien enrouler ni dérouler... Pourtant, l'arbre DOM résultant a l'air correct lorsque je le regarde dans Firebug.
J'ai trouvé en regardant plus haut dans cette page ! Remplacer addLoadEvent par addOnloadHook. En espérant que ça serve à d'autres ! — ChrisJ (d) 11 août 2010 à 22:45 (CEST)
Dernier commentaire : il y a 14 ans3 commentaires2 participants à la discussion
Bonjour,
j'étais tranquillement en train de coder une fonction pour traduire les liens d'une page (même principe que ça mais directement depuis wikipédia et avec les liens mis où il faut), lorsque tout à coup, la tuile :
Dernier commentaire : il y a 14 ans2 commentaires2 participants à la discussion
Salut. J'essaye d'écrire une fonction pour me simplifier la vie, qui utilise replace (à la volée) sur le textarea d'édition des articles. Le remplacement marche bien, mais le curseur est ensuite placé à la toute fin de la zone d'édition, alors que je voudrais qu'il soit à la fin de la chaîne qui vient d'être remplacée (beaucoup plus pratique, puisque le remplacement est censé se faire à la volée). Voir mon monobook, c'est le troisième bloc. Merci ! Zakke (d) 21 août 2010 à 11:12 (CEST)
Dernier commentaire : il y a 14 ans6 commentaires3 participants à la discussion
Bonjour, je souhaiterai créer une infobox avec une partie déroulante. Il faudrait pour cela pouvoir afficher et cacher une partie du tableau sans en créer de nouveau. Cela serai-t-il possible ? voici le brouillon de l'infobox : Utilisateur:Tpt/Infobox pharaon, je voudrai mettre les modules "titulature" et famille" en déroulant. Merci d'avance pour vos réponses. Tpt (d) 6 septembre 2010 à 18:29 (CEST)
En gros, pour que cela fonctionne avec le javascript des boîte déroulantes, il te faut quelque chose comme ceci :
<div class="NavFrame" style="???">
<div class="NavHead" style="???">
TITRE DE LA BOÎTE
</div>
<div class="NavContent" style="???">
PARTIE CACHÉE
</div>
</div>
Ce qui te fera un truc de ce genre :
TITRE DE LA BOÎTE
PARTIE CACHÉE
Après c'est à toi de déterminer les styles (bordures, fond, etc...) qui vont bien avec l'infobox.
Il y aurait-il un moyen de le faire tout en gardant la continuité dans le tableau ou faut il faire un tableau dans le tableau ? Tpt (d) 6 septembre 2010 à 21:17 (CEST)
Dernier commentaire : il y a 14 ans7 commentaires2 participants à la discussion
Salut ! J'ai un problème avec ce code, il marche moins d'une fois sur deux. La plupart du temps je me retrouve juste redirigé vers la page de modification de l'article. Quelqu'un saurait me dire pourquoi ? Petit Djultolc2mi - 30 octobre 2010 à 20:11 (CEST)
Je t'ai mis la version courante à la place de la copie (a priori obsolète).
As-tu toujours le même problème (après purge du cache) ?
Toujours, même après purge du cache. Je me rends compte en fait qu'aucun des 3 scripts que j'ai ne marche, enfin celui des portails juste à moitié. J'ai recréé mon monobook y'a pas longtemps, avant cette date je me souviens pas avoir eu de problèmes. Petit Djultolc2mi - 31 octobre 2010 à 07:23 (CET)
Effectivement j'étais sous vector sans avoir créé la nouvelle page. J'ai donc créé ma page vector avec le code d'importation du monobook. Le problème des bandeaux portails est réglé, mais pas les deux autres je crois. Petit Djultolc2mi - 31 octobre 2010 à 12:13 (CET)
Quelques corrections apportées au premier script. Il marche à présent ?
Dernier commentaire : il y a 14 ans8 commentaires4 participants à la discussion
Bonjour, je m'intéresse au code du Common.js, et j'ai trouvé une amélioration qu'il serait appréciable d'apporter au code en production, voir ici. Cela consiste à économiser foison d'exécutions de getElementsByTagName. Les changements sont sûrs vu que ça ne sort pas de la portée locale. Vous pouvez regarder les autres modifications, mais pour l'instant le reste est mineur ("JSLintification", ortho, etc.) – od†n[dead words]5 novembre 2010 à 07:16 (CET)
En effet la succession d'appels à document.getElementsByTagName("div") est inutile. Ta correction vaut vraiment le coup. --CHristoPHE (d)5 novembre 2010 à 20:25 (CET)
+1 très bonne idée.
Au risque de paraître tatillon… pourquoi ne pas éviter le double accès à Divs[i] en ressortant la définition de NavFrame du if ?
Je n'ai pas encore fait de tests de performances sur ce point auquel j'avais aussi pensé. La grande majorité des <div> ne vont pas entrer dans le if, en fait aucun sauf 2-3, ceux des modèles déroulants. Pour tous ces <div> là, l'assignation en variable est inutile puisqu'on va y accéder une seule fois, pour le test du if. J'ai donc estimé qu'il était préférable d'accéder 2-3 fois de plus à l'array au NodeList des <div> plutôt que de faire une foison d'assignations en variables inutiles. Mais vu qu'un accès array NodeList est bien plus coûteux qu'une assignation de variable, je pourrais en effet benchmarker ça, pour voir. Quoi qu'il en soit, le gros de l'amélioration est dans la modif que j'ai déjà effectuée, et le gain est substantiel od†n[dead words]5 novembre 2010 à 22:22 (CET)
Je suis en train de faire quelques tests de micro optimisation (j'adore, ça me détend), et je peux déjà dire que mon impression était la bonne, il vaut mieux accéder à l'array au NodeList 2-3 fois de plus plutôt que faire une foison d'assignations de variables. J'ai vérifié sur des articles diversifiés, et c'est toujours la solution la plus performante. Évidemment la différence est faible, du genre 940 ms contre 990 ms sur 2 000 itérations. od†n[dead words]5 novembre 2010 à 23:32 (CET)
Un admin volontaire pour implémenter l'amélioration ? À titre de référence, voici le code actuellement en production et ma version du code modifié :
Code de la function actuellement en production
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
var NavFrame;
// iterate over all < div >-elements
for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) {
// if found a navigation bar
if (hasClass(NavFrame, "NavFrame")) {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
// surcharge des libellés dérouler/enrouler grâce a l'attribut title
var caption = collapseCaption;
if (NavFrame.title && NavFrame.title.indexOf("/") > 0) {
caption = NavFrame.title.split("/")[1];
}
var NavToggleText = document.createTextNode(caption);
NavToggle.appendChild(NavToggleText);
// add NavToggle-Button as first div-element
// in <div class="NavFrame">
NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar) {
for( var i=1; i<=indexNavigationBar; i++ ) {
toggleNavigationBar(i);
}
}
}
Le code avec mes modifications
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
var Divs = document.getElementsByTagName("div");
var DivsCount = Divs.length;
// iterate over all < div >-elements
for (var i = 0; i < DivsCount; i++) {
// if found a navigation bar
if (hasClass(Divs[i], "NavFrame")) {
indexNavigationBar++;
var NavFrame = Divs[i];
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
// surcharge des libellés dérouler/enrouler grâce a l'attribut title
var caption = collapseCaption;
if (NavFrame.title && NavFrame.title.indexOf("/") > 0) {
caption = NavFrame.title.split("/")[1];
}
var NavToggleText = document.createTextNode(caption);
NavToggle.appendChild(NavToggleText);
// add NavToggle-Button as first div-element
// in <div class="NavFrame">
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar) {
for (var j = 1; j <= indexNavigationBar; j++) {
toggleNavigationBar(j);
}
}
}
Cela dit, d'autres choses pourraient être améliorées dans ce script, notamment le title [dérouler] qui reste attaché à la "Navframe". J'avais d'ailleurs codé une version alternative du script (testable ICI) réglant ce défaut et qui peut également servir de base de travail.
Merci Dr Brains. Oui, il y a beaucoup de choses à améliorer dans le common.js. J'ai notamment vu cette requête venant de toi. Autre chose, je souhaiterais distinguer les palettes des autres modèles déroulants, afin que le "autocollapse" (palette enroulée si présence de 2 ou +) compte seulement les palettes et pas aussi les autres modèles...
Dernier commentaire : il y a 14 ans5 commentaires2 participants à la discussion
Tcho
mon but est de rajouter un bouton (je me charge de ce que fait mon bouton) dans la fenêtre de modification d'un article... J'ai essayé d'y mettre le code fourni dans l'aide et je ne vois pas de bouton en plus (même avec control F5)... si une âme charitable peut jeter un coup de clavier sur mon monobook.jsPoleta33 (d) 11 novembre 2010 à 12:49 (CET)
D'abord, es-tu sous monobook ou sous vector (voir Préférences >> Habillage ) ?
Ensuite, dans Préférences >> Fenêtre de modification, est-ce que les deux cases des "Fonctionnalités bêta" sont cochées ou pas ?
Génération automatique modèle Ouvrage et Article (suite)
Dernier commentaire : il y a 14 ans5 commentaires2 participants à la discussion
Bonjour, Etant un utilisateur occasionnel du gadjet formatant les références d'articles en format WP, j'ai remarqué que le formatage ne récupérait jamais les numéros de pages. Pour info, je travaille sous monobook et j'utilise CrossRef Metadata Search pour récupérer mes données.
Ex.: CrossRef
texte récupéré sous CrossRef:
<span class='Z3988' title='ctx_ver=Z39.88-2004&rft_val_fmt=info:ofi/fmt:kev:mtx:journal&rft_id=info:doi/10.1016/S0956-053X(00)00131-8&rtf.genre=journal-article&rtf.spage=471&rtf.epage=475&rtf.date=2001-8&rtf.aulast=Hinshaw&rtf.aufirst=G&rtf.auinit=G&rtf.atitle=Hazardous waste incineration emissions in perspective&rtf.jtitle=Waste Management&rtf.volume=21&rtf.issue=5'>Hinshaw, G, 2001, 'Hazardous waste incineration emissions in perspective', <i>Waste Management</i>, vol. 21, no. 5, pp. 471-475.</span>
PS: Et pourrait-on ajouter d'office la date du jour après "consulté le" ? Encore merci de vous pencher sur ce problème. Snipre (d) 11 novembre 2010 à 14:32 (CET)
Si je comprends bien, il faudrait repérer deux autres paramètres pour le modèle {{Ouvrage}} :
Tout à fait, prendre les paramètres rtf.spage (start page) et rtf.epage (end page) pour former "471-475" si je reprends l'exemple ci-dessus et l'ajouter derrière |pages =. Pour le modèle:Ouvrage, je ne sais pas, mais pour les articles, les pages sont importantes. Merci Snipre (d) 11 novembre 2010 à 19:35 (CET)
Dernier commentaire : il y a 14 ans39 commentaires5 participants à la discussion
Bonjour,
Je voudrais proposer un code plus efficace pour la fonction hasClass() présente dans le Common.js. Cette fonction étant appelée un nombre de fois conséquent, et par une grande étendue de scripts, je pense que l'amélioration pourrait être intéressante.
L'idée est d'aller aussi vite qu'avant lorsque node.className == className ; en revanche dans tous les autres cas, on ne passe plus par une regex, et ça va beaucoup plus viite :
Franchement, je n'ai pas d'avis. Si cela est plus rapide, tant mieux, mais avant de toucher à une fonction aussi sensible que celle-là, d'autres avis seraient nécessaires. Poser la question sur WP:DIMS.
C'est justement pour cela que j'avais posté la suggestion ici, je pensais que c'était le bon endroit pour obtenir quelques avis. Je pourrais publier une batterie de tests unitaires, si cela peut te rassurer. Cordialement, od†n[dead words]27 novembre 2010 à 22:51 (CET)
Ce que je voulais dire, c'était de poser la question aux deux endroits, pour avoir le maximum d'avis.
Pourquoi ne pas plus simplement utiliser $j(node).hasClass(className) au lieu de cette fonction hasClass maison ? (Même remarque pour les différentes autres fonctions de manipulation de classes, d'ailleurs) Cordialement, --Lgd (d) 28 novembre 2010 à 05:26 (CET)
Voici un petit benchmark : sur un article contenant 6 tables, dont 1 avec la classe "navbox" que je recherche ; 50 000 itérations :
Un autre benchmark, qui devrait être encore plus parlant. 320 divs, dont 4 avec la classe "NavFrame" que je recherche ; 1 000 itérations (oui, seulement mille) :
Ok. Il ne s'agit pas forcément de faire du jQuery systématiquement (il n'est pas forcément plus performant, bien que ce ne soit pas le seul critère à prendre en compte). Mais, pour les quelques tests que j'ai rapidement fait, c'est plutôt la réécriture complète en jQuery de certaines fonctions « lourdes » du common.js qui apporterait un gain appréciable. Cordialement, --Lgd (d) 28 novembre 2010 à 07:51 (CET)
En m'inspirant de la méthode utilisée par jQuery, j'ai fait quelques tests avec d'autres écritures à base de « " " + machin + " " ». Le code est plus court, par contre c'est grosso modo 1,5 ~ 2 fois plus lent que le code que j'ai proposé initialement. La concaténation est une opération effectivement très coûteuse. Ça reste quand même plus rapide que les deux plus mauvaises solutions que sont 1) le code actuellement en production avec la regex et 2) le code faisant appel à jQuery.
Mon avis ne prétend surtout pas à être décisif sur ce genre de chose, mais a priori, je dirais préférence à l'optimisation des perf côté client (juste une petite réserve de principe : le benchmark a été fait uniquement sous FF uniquement, non ? Mais bon, cela n'a sans doute rien d'important dans ce cas). Cordialement, --Lgd (d) 28 novembre 2010 à 11:55 (CET)
Très bonne remarque, j'ai testé seulement sous Fx ; je ferai des tests aussi sous IE et Opera, il y a parfois des surprises intéressantes. od†n[dead words]28 novembre 2010 à 12:51 (CET)
Aller, encore un petit benchmark. On teste sur un seul div, qui possède plusieurs classes mais pas celle que je recherche, c'est un exemple de cas qui nous intéresse. Inutile de comparer lorsque div.className == classCherchee, vu que toutes les solutions se valent dans ce cas (test court-circuité, et cas peu fréquent) ; mais dans tous les autres cas on constatera les différences de performances.
Pour rappel, en pratique, la page comporte plusieurs centaines de div, à multiplier par le nombre de parties du Common.js ainsi que les gadgets qui vont parcourir plusieurs fois ces centaines de div.
Firefox 3.6
Opera
IE 8
Chrome
nb itérations
500 000
1 000 000
100 000
100 000
code A
4 534
1 614
1 844
3 361
code B
499
396
437
15
code C
2 593
1 381
2 188
172
code D
927
580
1 062
47
A) Code actuellement en production, avec la regex
B) Ma 1re proposition, avec le return rempli de substr
Ces résultats sont assez impressionnants . Et si ce n'est pas intuitif, c'est finalement assez logique dans la mesure ou la première solution que tu as proposée ne fait aucune allocation mémoire.
Contribuer à jQuery, mais ouiiiii bien sûr, peut-être que dans 20–30 ans j'aurai un semblant du niveau nécessaire ! Plus sérieusement, c'est vrai que jQuery ils sont plutôt réputés pour la qualité de leur librairie. Pour en revenir au sujet, apparemment tout le monde opte pour la solution plus compliquée mais plus performante, si je compte cette unanimité à quatre voix : Lgd, Dr Brains, Arkanosis, et j'ajoute volontiers ma voix pour cette solution. Quelqu'un pour nous passer ça en production, qu'on puisse procéder à la suite ? od†n[dead words]29 novembre 2010 à 12:52 (CET)
Faut pas dire ça. Il y a de ça à peine un an et demi, j'aurais été incapable d'ajouter un gadget dans mon monobook.js sans tout faire planter. Aujourd'hui je pilote un bot 100% javascript. « A cœur vaillant rien d'impossible », comme on dit.
Cela dit, c'est vrai que jQuery à l'air un peu obscur. Les fonctions n'ayant pas de nom qui pourraient indiquer à quoi elles servent, un script jQuery est pas facile à décoder pour un néophyte. Sans compter que je n'ai pas trouvé de site aussi bien que http://www.w3schools.com pour expliquer les fonctions/avantages/inconvénients de jQuery...
Sinon, pour hasClass(), je préfère laisser fair Lgd.
Je pense qu'on peut mettre les très mauvaises performances de Chrome sur le code A sur le compte d'Irregexp, qui doit procéder à la compilation de l'automate à chaque appel de la fonction. — Arkanosis✉1 décembre 2010 à 12:04 (CET)
À l'heure actuelle, Firebug fonctionne très mal sous Firefox 4... Je peux évidemment procéder autrement (import JS perso), mais c'est un peu plus pénible. od†n[dead words]1 décembre 2010 à 12:09 (CET)
Oui oui, fais ton malin Et sinon, le code a été passé en prod, même qu'il y avait un bug tellement gros que je l'avais pas repéré, et que le wiki a été tout cassé pendant 20 minutes Et encore merci à Dr Brains pour avoir corrigé très très vite. od†n[dead words]6 décembre 2010 à 23:02 (CET)
J'ai repéré un cas où la fonction retourne false au lieu de true : quand l'élément contient les classes AB et A (où A et B sont quelconques, et AB est avant A) et que l'on cherche la classe A.
Je connais cette technique, elle est utilisée notamment dans jQuery. Nous l'avions d'ailleurs déjà évoquée ! Sur le wiki EN il y a encore une autre technique, qui met en cache les regex compilées. Ces deux techniques sont performantes, largement plus que le code qui était en prod auparavant, mais ma proposition initiale avec les substr() est encore plus performante, et ce dans tous les cas de figure. Nous avons affaire à un cas classique de performances contre longueur/complexité code. Un consensus s'étant dégagé pour ma proposition initiale, elle a été mise en prod. Cordialement, od†n[dead words]19 décembre 2010 à 00:42 (CET)
edit : ahhh j'ai lu trop vite, je n'avais pas vu qu'il y avait aussi un bug report dans ton message. Je vais voir ça.
Peut-être un problème de parenthèses dont l'absence fausse le mode de calcul des && et des || ?
C'est encore plus simple que cela : l'indexOf() matche sur la première occurence de "A", du coup la deuxième n'est pas prise en compte.
À première vue, le mieux serait de tout simplement remplacer par l'une des deux solutions que j'ai évoquées ci-dessus (" "+pouet+" " ou mise en cache regex). On a des goulots d'étranglement bien plus importants, et le code serait moins imbuvable. La démonstration de DavidL prouve que des bugs peuvent ne pas être perçus immédiatement, et ça fait la 2e fois ! Je vais voir ce que ces deux solutions valent. Cordialement, od†n[dead words]19 décembre 2010 à 01:14 (CET)
En attendant, je proposer d'appliquer la solution « " " + pouet + " " ».
La solution avec la mise en cache regex (je suis tombé récemment sur un code utilisant cette solution, j'y avais pensé avant, mais je n'avais pas creusé davantage l'idée) est intéressante, les perfs sont apparemment à mi-chemin entre les méthodes « indexOf » et « " "+pouet+" " ». Mais en attendant, nous nous devons d'avoir un code parfaitement fonctionnel en prod, donc vas-y franco pour appliquer une solution à base de « " "+pouet+" " ». od†n[dead words]19 décembre 2010 à 02:03 (CET)
Merci DavidL pour le rapport et Dr Brains pour la correction propre et rapide. Cette solution est suffisamment efficace, je pense que ce n'est pas la peine de creuser davantage, les goulots d'étranglements se situent ailleurs, et il y a bien d'autres choses à s'occuper prioritairement. (à propos, ce nouveau rebondissement aura confirmé mon intention personnelle de me lancer dans le développement par les tests). Cordialement, od†n[dead words]19 décembre 2010 à 02:38 (CET)
Je viens d'avoir une illumination (enfin je crois).
Ça tourne 50 % moins bien sous IE 8. L'explication est très simple : IE ne possède pas d'indexOf() natif sur les array, on dépend de l'implémentation fournie sur Wikipédia. Et comme IE rame affreusement plus que les autres navigateurs sur Wikipédia, c'est vraiment pour celui-là qu'il faut optimiser. (essaie donc d'aller sur Wikipédia avec IE 6, les scripts (boîte d'édition notamment) mettent plusieurs dizaines de secondes à se charger, ça bloque le scrolling, etc., une véritable horreur)
Si cela t'intéresse, sur le wiki anglais ils font ça avec une closure :
Tu noteras qu'ils supportent aussi les « \t », « \r » et « \n » dans la regex elm.className. Il est effectivement possible d'en rencontrer, mais c'est pas joli joli du tout, mieux vaut pas en avoir à la source. Donc vu que pour l'instant on fonctionne très bien avec juste les espaces, mieux vaut rester seulement sur les espaces. Pour ne pas ouvrir une voie qui permettrait d'introduire des horreurs en amont du code.
Un autre point à remarquer, c'est que le reCache est de taille infinie. Je pense que dans la pratique c'est effectivement la meilleure solution... Effectivement, on vérifie en fait assez peu de className différents. Du coup on alourdit pas le code avec un compteur, et évidemment, le cache contient la totalité des données. Donc pas de souci à ce niveau, c'était juste pour faire remarquer ce point.
Sinon, vu qu'on a abandonné (snif) le code long et compliqué avec les indexOf() && etc., on pourrait repenser à la voie consistant à ajouter une fonction inClassList() prenant en entrée directement la valeur du elm.className.
En fait, la difficulté que j'ai maintenant, c'est de mesurer ce qui est vraiment le plus efficace parmi les diverses méthodes que j'ai pondues récemment (et aussi repérer ce qui en vaut vraiment la peine...). Par exemple, les regex mises en cache sont plus efficaces que la méthode " "+pouet+" ", mais seulement à partir d'un certain nombre de réutilisations, qui est délicat à déterminer. Le premier point à effectuer, ça serait de créer une fonction inClassList, d'une façon ou d'une autre, ce qui permettrait d'aider un peu addClass. De toute façon, les encombrants restent encore, de loin, addcache et setModifySectionStyle ; si vraiment on veut faire quelque chose de grandiose, il faudrait déporter la réalisation de ces tâches du côté serveur
En fait, ce que t'essaie de me dire, c'est que c'était pas une illumination...
Sinon, j'en ai eu une autre, une vraie. Et pour celle là, mieux valait tard que jamais : [3]. A vouloir faire trop vite j'avais remis le méga bug de l'autre fois. Il est resté plusieurs jours. Ça craint.
Oui, j'avais remarqué ce diff... À ce propos, j'ai écrit tout récemment une série de tests unitaires pour vérifier la fonction, parce que l'expérience a montré qu'on n'est pas à l'abri des mauvaises surprises. Bon, c'est vraiment écrit à la va-vite, à la base j'avais pas prévu de le poster, m'enfin ça coûte rien :
ceci n'est toujours pas un titre
(function(){functionhasClassTEST(hasClassFunction){varhasClass=hasClassFunction?hasClassFunction// si fonction à tester passée explicitement:hasClass;// fallback, cherche hasClass dans les scopes supérieursvarnb_OK=nb_FAIL=0;functionassertTrue(result){if(typeofresult==="boolean"&&result){nb_OK++;}else{nb_FAIL++;console.log("Échec du test numéro "+(nb_OK+nb_FAIL));}}functionassertFalse(result){if(typeofresult==="boolean"&&!result){nb_OK++;}else{nb_FAIL++;console.log("Échec du test numéro "+(nb_OK+nb_FAIL));}}varmockRegular={className:"riri fifi loulou"};varmockSpaces={className:" riri fifi "};varmockAbA={className:"rirififi riri"};varmockNoClassName={dick:"butt"};try{assertTrue(hasClass(mockRegular,"riri"));assertTrue(hasClass(mockRegular,"fifi"));assertTrue(hasClass(mockRegular,"loulou"));assertTrue(hasClass(mockSpaces,"riri"));assertTrue(hasClass(mockSpaces,"fifi"));assertTrue(hasClass(mockAbA,"riri"));assertFalse(hasClass(mockNoClassName,"whatever"));assertFalse(hasClass(mockRegular,"ri"));assertFalse(hasClass(mockRegular,"lou"));assertFalse(hasClass(mockRegular,""));assertFalse(hasClass(mockNoClassName,""));assertFalse(hasClass(mockRegular,null));assertFalse(hasClass(mockNoClassName,null));assertFalse(hasClass(mockRegular));assertFalse(hasClass("pouet","pouet"));assertFalse(hasClass("pouet","prouit"));// tests ésotériques//assertFalse(hasClass(mockNoClassName)); // retourne true (undefined === undefined...)//assertFalse(hasClass(null, "pouet")); // lève une exception//assertFalse(hasClass(undefined, "pouet")); // lève une exception}catch(e){console.log("Exception survenue lors du test numéro "+(nb_OK+nb_FAIL+1));}console.log("Tests OK : "+nb_OK);console.log("Tests FAIL : "+nb_FAIL);console.log("Total : "+(nb_OK+nb_FAIL));}functionhasClass_V1(node,className){// code de la fonction}hasClassTEST(hasClass_V1);})();
Surtout, je me dis que ça pourrait être sympa de généraliser un système de tests unitaires pour les gadgets etc. Ça ne serait pas forcément compliqué à mettre en œuvre, il suffirait que chaque script ait une page associée contenant les tests. Je n'ai pas réfléchi longtemps sur la question, son intérêt et sa faisabilité, mais en tout cas, comme ça, l'idée me plait bien
Dernier commentaire : il y a 14 ans9 commentaires2 participants à la discussion
Bonjour,
Je poste ici car je pense que cela relève plus des compétences des dévs JS que des modélistes. Il y a des problèmes avec le modèle {{Méta palette de navigation sous-liste}}, utilisé dans certaines palettes de navigation. Noter au passage que la palette donnée en exemple dans la doc du modèle n'est pas en très bon état. Pour un meilleur exemple de palette utilisant ce modèle, vous pouvez regarder, parmi d'autres, {{Palette Évolution}}.
Au départ, la palette parente est déroulée, et les palettes enfants sont enroulées. Cliquer sur le [Enrouler] de la palette parente, deux fois. Vous constatez que les palettes enfants sont maintenant déroulées. Il serait bien que l'état de chaque palette enfant soit mémorisé.
Même procédure initiale, cliquer deux fois sur le [Enrouler] de la palette parente :
Bien que les palettes enfants soient déroulées, le libellé des liens est [Dérouler]
Cliquer sur leur lien, une fois, passe le libellé de [Dérouler] à [Enrouler] et ne modifie pas l'état de la palette enfant, celle-ci reste déroulée. À partir du second clic, la palette enfant se comporte correctement.
A priori un problème dans collapseTable() : les <tr> sont masqués/affichés même si ils font partie d'une autre table à l'intérieur de la table. La solution serait sans doute d'éviter de passer par un var Rows = Table.getElementsByTagName( "tr" ); et préférer une boucle while qui passerait en revue les enfants directs de la table cible. Je vais voir si je peux coder ça.
Cela dit, de toutes manières le script est à repenser totalement, donc ça ne sera qu'une solution provisoire.
Je n'ai pas encore pris le temps de regarder plus en profondeur, il y a juste une typo RowsDisplay / RowDisplay (et tant qu'à faire, déclarer une seule fois la var, avant le if, ça fera plaisir à JSLint !) od†n[dead words]17 décembre 2010 à 18:14 (CET)
Un rapide test sous Firebug me montre que cette nouvelle fonction ne fonctionne pas en l'état. Il ne reste plus que le <table> et le <tbody>, tout ce qui est à l'intérieur est masqué, y compris l'en-tête principal od†n[dead words]19 décembre 2010 à 04:42 (CET)
Oups !
Remplace comme ci dessus var Row = FirstRow; par var Row = FirstRow.nextSibling;
Ça a l'air de marcher avec cette correction Désolé de ne pas avoir pris plus de temps pour regarder cette histoire de mon côté, mais apparemment tu te débrouilles très bien ! Juste une chose, lorsque je parlais de déplacer la déclaration de var avant le if, je pensais en fait à quelque chose de ce genre :
Je me permets cette petite remarque car je trouve que le code est moins clair dans la modif comme tu l'as faite (pardon si je coupe trop les cheveux en quatre). Et sinon, tu penses que le code est fin prêt pour être passé en prod ? od†n[dead words]19 décembre 2010 à 06:28 (CET)
Dernier commentaire : il y a 14 ans3 commentaires2 participants à la discussion
Tcho
j'aimerais connaitre le code javascript qui permet d'ouvrir un nouvel onglet (url=www.lequipe.fr par exemple) (quand on clique sur un bouton par exemple) Poleta33 (d) 23 décembre 2010 à 16:25 (CET)
Dernier commentaire : il y a 14 ans12 commentaires2 participants à la discussion
Bonjour, suite à mon propos sur Projet:Sources/Chez_Manon, il m'a été conseillé de faire un gadget. L'idée serait de d'extraire les ref OpenUrl et de les transformer en modèle Ouvrage ou Article. (Voir mes tentatives d'explications sur Manon).
Le code de parsing serait le suivant :
Si rtf.genre article => Article
Si rtf.genre book => Ouvrage
Pour la partie article
rtf.genre article => Article
rft.atitle titre
rft.jtitle périodique
s'il n'y a pas de rft.jtitle alors rft.stitle => périodique
rft.date année
rft.volume Volume
rft.issue numéro
rft.pages pages
rft.issn issn
rft.eissn issn2
rft.aulast nom1
rft.aufirst prénom1
rft.au lien auteur1
rft.isbn isbn
rft_id si on obtient info:doi/xxxx par exemple info:doi/10.1063/1.2201061 alors doi=10.1063/1.2201061
Pour la partie ouvrage
rtf.genre book => Ouvrage
rft.btitle titre
rft.isbn isbn
rft.aulast nom1
rft.aufirst prénom1
rft.au lien auteur1
rft.atitle titre chapitre
rft.place lieu
rft.pub éditeur
rft.date année
rft.edition numéro d'édition
rft.tpages pages totales
rft.issn issn
rft_id si on obtient info:oclcnum/ par exemple info:oclcnum/494415539 alors oclc=494415539
Pour les article PubMed (champ dédié pmid dans le modèle Article), pourriez-vous aller sur ce lien : http://www.ncbi.nlm.nih.gov/pubmed/16698304 et choisir en haut à gauche dans "Display setting" : XML et me dire s'il est possible de parser ce truc pour en faire un modèle Article.
Si il s'agit de récupérer des infos sur un autre site que Wikipédia, alors ce n'est pas possible en javascript. Désolé.
Par contre, il est possible de mettre en forme automatiquement un bout de texte ajouté dans la fenêtre de modif (ou dans un autre champ créé pour l'occasion) par un autre moyen, par exemple le plugin firefox ou un copier-coller de la page que tu donnes (en mode MEDLINE ce sera plus simple), alors là c'est faisable. Sous réserve que le texte copié soit standard.
L'auteur se débrouille pour récupérer à la main la ref dans cette page. Le plus simple est de visualiser le code source et de récupérer la ligne contenant z3988.
{{Ouvrage|nom1=Devouard|prénom1=Florence|lien auteur1=Florence Devouard|titre=Wikipédia découvrir, utiliser, contribuer|éditeur=Presses universitaires de Grenoble|lieu=Grenoble|année=2008|isbn=2706114959|oclc=494415539}} Florence Devouard, Wikipédia découvrir, utiliser, contribuer, Grenoble, Presses universitaires de Grenoble, (ISBN2706114959, OCLC494415539) Cordialement - Drongou (d) 15 septembre 2010 à 01:07 (CEST)
Ah OK, je comprends mieux. On est donc dans le deuxième cas. Alors c'est possible.
En gros, cela ferait ceci :
Le gadget ajoute un bouton dans la toolbar
Un clic sur le bouton crée un champ de texte plus deux boutons OK et Annuler
L'utilisateur copie-colle le texte puis clique sur OK
Le script mouline et le contenu du champ de texte est remplacé par le modèle qui va bien, prêt à être copié-collé à l'endroit qui va bien dans la fenêtre de modif.
Gère les modèles {{Article}} et {{Ouvrage}}, avec tous les paramètres possibles que tu m'as donnés. Si il y en a d'autres à prendre en compte, on peut facilement les rajouter.
<span class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft_id=info:doi/10.1063/1.1647147&rft.issn=15297845&rft.title=Journal of Physical and Chemical Reference Data&rft.atitle=Recommended Critical Temperatures. Part II. Aromatic and Cyclic Hydrocarbons&rft.stitle=J. Phys. Chem. Ref. Data&rft.date=30 April 2004&rft.volume=33&rft.issue=2&rft.spage=541&rft.epage=548&rft.coden=JPCRBU"></span>
À noter : côté ouvrage on a : title="url_ver alors que côté article on a title="ctx_ver . Je ne sais pas si cela vient de là.
Je me demande dans quelle mesure on pourrait aussi générer le modèle {{Harvsp}}
Le modèle ci-après (avec un &) ne passe pas à la prévisualisation alors qui fonctionne dans WP
{{Ouvrage|langue=|nom1=Pathouot|prénom1=Evelyne|lien auteur1=|titre chapitre=|éditeur=Michalon|lien éditeur=|lieu=Paris|jour=|mois=|année=2007|titre=Ségolène Royal, ombre & lumière : témoignage|sous-titre=|numéro d'édition=|isbn=9782841863945|issn=|pages totales=|volume=|tome=|passage=|lire en ligne=|consulté le=|présentation en ligne=}}
Qu'est ce que tu appelles "ref doi" ? A priori, tous les paramètres que tu m'as cités sont pris en compte à l'exception de ceux correspondant à "rft_id", car je n'ai pas trouvé le paramètre correspondant des modèles Ouvrage et Article.
Pour le détail, tu peux voir dans le code des deux fonctions OuvrageArticle_CheckOuvrageParams() et OuvrageArticle_CheckArticleParams() (j'ai ajouté des commentaires pour que ce soit un peu plus compréhensible).
Réglé le problème du & qui ne passe pas en prévisualisation (l'API n'aime pas ce caractère qu'il faut systématiquement remplacer par %26).
J'ai ajouté la prise en compte de ces deux paramètres. À tester.
Pour ceux qui pensent qu'ils ne sont pas utiles, ils peuvent à loisir les supprimer avant de copier-coller (idem pour les paramètres vides).
Pour l'annonce au bistro, pourquoi pas. Je t'en laisse l'initiative si tu penses que c'est au point, mais avant je voudrais en faire un gadget, c'est à dire le transférer dans une page Mediawiki: car si les gens se lient à une page de mon espace perso, je ne peux plus la modifier sans prendre le risque de gêner plein de monde si je me trompe.
Donc, dis moi si la dernière modif est OK, si oui, je transfère et tu pourras annoncer l'existence du script.
Est il possible de laisser par défaut les boites déroulantes ouvertes comme cela est fait avec les palettes de navigation ? Faudrait-il alors modifier le javascript de wikipédia ?
Non, il faudrait modifier le common.js. Ça a déjà été demandé (pour les évaluations en pdd), donc ça pourrait se faire, mais je ne le ferai pas de ma propre initiative. Dans l'absolu, je ne vois pas bien l'intérêt d'une boîte déroulante qui resterait ouverte dans ce cas précis.
Ouais. Bon, en fait, le [dérouler] il est là, mais il est repoussé plus bas à cause des images. J'ai essayé de bidouiller, mais c'est toute la boîte qui était repoussée. Je ne vois pas bien d'où ça vient.
Merci pour ton attention. Donc, si je comprends bien, il n’y a pas de solution simple, il faut donc faire attention avec les images (je les ai décalés dans la page de test et tout va bien). Merci beaucoup. Tpt (d) 26 septembre 2010 à 16:33 (CEST)
Dernier commentaire : il y a 14 ans5 commentaires3 participants à la discussion
Bonjour,
Je pense que ce gadget pourrait être grandement amélioré, avec quelques fonctionnalités :
permettre l'ajout/le retrait du paramètre WP1.0. Il faudrait que le script détecte la présence du modèle {{WP1.0}}, et transforme automatiquement ce modèle en paramètres.
idem pour {{Todo}} (alias {{TODO}} ou {{à faire}}), mais uniquement dans le cas où le contenu du TODO est en sous-page
Pour le modèle WP1.0, est-ce vraiment utile ? A priori ce n'est pas le genre de modèle qu'on ajoute/retire fréquemment (la liste d'articles doit être relativement stable, non ?). Le paramètre supplémentaire n'a d'utilité que pour les participants du projet Projet:Wikipédia 1.0.
Je ne comprends pas trop. S'il n'y a pas de modèle TODO on ne fait rien, mais s'il existe on ajoute un paramètre à l'interface graphique du gadget ? Dans le deuxième cas, si l'utilisateur demande le retrait du TODO, la sous-page TODO existera toujours et apparaîtra encore dans l'encadré des liens en haut de la page de discussion. Faut-il faire d'autres choses, comme effacer le contenu de la sous-page TODO ?
Le {{Article mis en lumière}} a besoin du paramètre de date. Ça demande donc un alourdissement de l'interface graphique pour que l'utilisateur puisse l'entrer. Je ne vois pas trop le gain par rapport à un ajout "manuel" du modèle en page de discussion.
Bref, ça me semble être un alourdissement de l'interface et une complexification du code du script pour des fonctionnalités à usage plutôt restreint. --CHristoPHE (d)5 novembre 2010 à 20:22 (CET)
Dernier commentaire : il y a 14 ans10 commentaires2 participants à la discussion
Tcho
en javascript (bien sur), j'aimerais savoir comment recuperer dans une variable le texte selectionne par la souris... Poleta33 (d) 20 novembre 2010 à 15:06 (CET)
Sélectionné où ? Dans la fenêtre de modification ou n'importe où sur la page ?
j'ai la valeur d'une une variable que je voudrais mettre automatiquement dans le buffer (comme si j'avais fait un CTRL+C)... je me demande si je suis vraiment plus clair... Poleta33 (d) 20 novembre 2010 à 23:38 (CET)
Mouais. En fait non, pas vraiment ;)
Bon, je vais partir du principe que ce que tu appelles "buffer" c'est la fenêtre de modification (<textarea id="wpTextbox1">)
qui te donne l'ancien contenu de la fenêtre de modif.
Après ça dépend où tu veux ajouter le nouveau bout de texte. Au début, à la fin, à un endroit précis, en remplacement d'une chaîne définie, d'une chaîne sélectionnée, etc...
Déjà, il est clair que tu avais trouvé Mediawiki:Gadget-OuvrageArticle.js. <mode style="je m'la pète">Je reconnais ma patte (presque) inimitable</mode>...
Ensuite, deux choses :
La fonction Articlescientifique_Pasteselected() : tu n'as pas besoin de lancer Articlescientifique_Preview(); à la fin, car c'est fait via Articlescientifique_CheckMenu(); juste avant.
La fonction Articlescientifique_Copysolution(), ou tu sembles avoir ton problème : je ne vois pas trop ce que tu veux faire exactement. Copier le contenu de la textarea dans le presse-papier ?
comme je ne fais du javascript que depuis une semaine, j'ai pris du code source existant (sinon meme si je connais les expressions regulières j'y aurais passé plusieurs mois ) et j'ai effectivement repompé Mediawiki:Gadget-OuvrageArticle.js (il faut d'ailleurs que je l'écrive dans les commentaires de l'en-tête)...
c'est juste
Copier le contenu de la textarea dans le presse-papier : exactement
c'est bon j'ai trouvé (sur le net)... je ne pensais pas que ça pouvait être aussi complexe ! un grand merci pour tout ! Poleta33 (d) 22 novembre 2010 à 10:47 (CET)
Impossible d'afficher l'onglet "gadgets" dans la "préférence"
Dernier commentaire : il y a 14 ans1 commentaire1 participant à la discussion
Bonjour,
J'ai installé l'extension Gadgets dans mon wiki. Dans "Spécial:Version", il est bien installé, sauf qu'il n'apparait pas dans "préférence". Que faire SVP? MERCI
Zara,
C'est un peu dommage de ne pas avoir modifié au passage les .innerHTML="◀" etc. au profit d'icônes plutôt qu'un caractère unicode toujours un peu périlleux quand à sa restitution pour certains utilisateurs et par ailleurs très moche. Mais sinon, c'est bien vu en effet. Cordialement, --Lgd (d) 28 novembre 2010 à 12:00 (CET)
C'est encore faisable.
J'ai cherché sur commons les icônes de flèche les moins lourds possibles, j'ai trouvé et (473 octets à elles deux)
J'ai fait une demande à l'atelier graphique ici, pour obtenir de nouvelles flèches gauche/droite, à partir d'une image qui me semble avoir un meilleur rendu visuel. od†n[dead words]1 janvier 2011 à 20:39 (CET)
Si on clique sur la case recherche sur les deux premières lettres, on a un énorme pavé difficilement lisible. Est-ce qu'il est possible d'avoir un modèle où l'on clique sur la lettre F, la page présente les bons titres (comme c'est fait actuellement) et une ligne du modèle apparaît avec Fa, Fb, ... Fz si on a besoin de pousser plus loin la sélection ?
Par contre, ça ne présume rien sur le fait de savoir si l'ajout de cette fonctionnalité pour tous sera accepté. Une discussion sur WP:DIMS devra trancher ce point.
Tu dois déjà t'en être douté, il serait plus rapide de pouvoir changer de liste de sous-groupe sans avoir à charger auparavant la page de la 1re lettre. La difficulté résiderait surtout au niveau de l'interface, je ne vois pas trop comment on pourrait ajouter ça tout en conservant une interface aussi pratique.
Dans le for de SommaireCompactCategorieDeluxe_GetFrom(), a et l sont en globales implicites
Tu pourrais encloser les sous-fonctions, pour qu'elles ne soient pas dans l'espace global :
Code
functionSommaireCompactCategorieDeluxe(){// code principal ici...functiongetFrom(){// ...}functioncreateLinks(firstLetterFrom,from){// ...}functioncreateLink(from,currentFrom){// ...}// ... ou ici, fonctionnement identique}
La difficulté réside dans le choix "par défaut". On pourrait par exemple modifier getFrom() pour qu'il renvoie "A" ou "0" par défaut, mais ça ne serait pas tout à fait correct.
Code corrigé
On pourrait
Reste à voir si l'ajout de cette fonction dans le Common (déjà bien chargé) sera approuvé. Au pire on peut en faire un gadget.
Pour la navigation sous-groupe, ce n'est pas exactement ce à quoi je pensais (mais il y aurait effectivement aussi ce point à voir). Suppose que tu te trouves actuellement sur la lettre T. Tu désires trouver un flim dont le titre commence par « Ma ». Tu dois cliquer une fois sur « M », ça chaaaarge la page, et ensuite seulement tu peux cliquer sur le « Ma » qui est apparu en dessous, tu cliques, ça chaaaaarge encore une fois, et tu as enfin le contenu désiré. Ce qui serait sympathique, c'est d'éviter le 1er chargement.
Le problème, niveau interface, étant qu'on doit conserver la fonctionnalité de recherche classique, sur une seule lettre. On ne peut pas non plus faire un systsème où la sous-liste changerait en survolant les lettres de la liste principale, car c'est beaucoup trop petit, et pas forcément intuitif pour tout le monde.
Le top du top, serait un système optionnel (en gadget donc), où la barre prendrait toute la largeur de l'écran[1] (pour augmenter la taille des éléments et les rendre plus aisément cliquables), et où chaque lettre serait un petit onglet. Au survol de l'onglet, la sous-liste correspondante s'affiche en dessous, et on pourrait aussi cliquer directement sur les onglets pour faire une recherche seulement sur la 1re lettre.
↑avec quand même une limite pour les écrans très très larges
Mouais. M'enfin si tu cherches un truc en "Ma", qu'est ce que tu foutais sur le "T", aussi ? En voilà bien des drôles d'idées !
Plus sérieusement, c'est possible aussi, et pas forcément beaucoup plus complexe. En modifiant les liens déjà présents ("A" à "Z"), pour que lorsqu'on cliques dessus ça fasse apparaître le menu déroulant correspondant ( T - Ta·Tb·....Tz ), le menu correspondant au "from" où l'on se trouve apparaissant automatiquement par défaut.
Il y a un bug qui empêche le fonctionnement du script. Dans la fonction SommaireCompactCategorieDeluxe_GetFrom(), si on remplace decodeURIComponent(document.URL) par decodeURIComponent(URL) ça va tout de suite mieux od†n[dead words]24 décembre 2010 à 12:02 (CET)
Ah j'avais oublié de te signaler un autre bug. Le « Letter == FirstLetterFrom » retourne true pour la partie "0-9", ce qui fait qu'au départ (lorsque l'URL actuelle ne contient pas de from=), le lien "0-9" est colorié en noir. En effet, Letter == FirstLetterFrom → « "0" == false » qui est évalué à true. J'ai corrigé de mon côté en passant en comparaison stricte « Letter === FirstLetterFrom » qui évalue bien à false. od†n[dead words]24 décembre 2010 à 22:57 (CET)
J'ai apporté quelques correction au code. Il ne devrait plus y avoir trop de problème.
Maintenant que les catégories « titre de film en A » etc. commencent à être supprimées par HerculeBot et que ce script semble au point, que dirais-tu de le passer en production, au moins sous forme d'un gadget dans un premier temps ? Cordialement, od†n[dead words]31 décembre 2010 à 17:07 (CET)
Pas très chaud pour ajouter directement le code dans le commons. "On" risque de penser que je fais du javascript pour faire du javascript. Une consultation sur le Bistro serait à envisager pour voir si d'autres pensent que ce gadget peut se révéler utile pour tous. Après les fêtes sans doute.