Discussion utilisateur:Zebulon84

Une page de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche

lang et css[modifier le code]

Merci pour l'astuce vector.css. Je l'ai appliquée à deux exceptions : en (les titres passaient en vert) et fr (les liens passaient en noir). Gentil ♥ (discuter) 16 septembre 2013 à 21:46 (CEST)

Et je comprends que tu veuilles retirer ces classes, mais il y en a une qui gagnerait à persister : lang-en. Mais je suis conscient que mettre un test #if {{{1}}} == en n'est pas ce qui permettrait de simplifier tout ça. Mais peut-être aurais-tu une astuce css plus évoluée pour ne pas colorier si il y a la double-langue en-fr ? Puis aller voir mediawiki pour leur dire d'ajouter fr sur leurs pages générées ? Gentil ♥ (discuter) 16 septembre 2013 à 21:56 (CEST)
Merci pour ta dernière astuce. Je suis désormais favorable au retrait des classes lang-xxx. Gentil ♥ (discuter) 23 septembre 2013 à 14:42 (CEST)
Ne pas archiver.


Tableau coupe 3/5 sets[modifier le code]

Bonjour,

Dans les tableaux de double de Rolang-Garros, pendant de nombreuses années, seules les demi-finales et la finale ont été jouées en 5 sets. Serait-il possible de rajouter dans les modèles "Tableau Coupe" la possibilité d'encoder les quarts de finale en 3 sets et les 1/2 et la finale en 5 sets (comme on a la possibilité de mettre la finale en 5 sets)? Merci.

MisterGB (discuter) 10 décembre 2013 à 12:02 (CET)

Je vois que dans le module Tableau Coupe il y a une fonction "finalsSets" pour déterminer le nombre de sets de la finale et de la petite finale, mais elle m'a l'air déjà bien compliquée. Serait-il possible de déterminer pour chaque tour le nombre de sets en fonction du nombre de paramètres ? Cela rendrait le module plus général pour des tableaux de 3 et 5 sets. Si c'est trop compliqué, un tableau coupe 8 particulier avec 3 sets en 1/4 et 5 sets en 1/2 et finale serait parfait. MisterGB (discuter) 10 décembre 2013 à 14:24 (CET)
Ne pas archiver.

Modèle:Val[modifier le code]

Salut ! En travaillant sur la page spéciale « Modèles demandés » je me suis intéressé au Modèle:Valid‏‎ qui n'est utilisé que par le Modèle:Val. J'ai donc supprimé la plupart de ses utilisations, parfois en le remplaçant par le Modèle:Unité. J'ai d'ailleurs pensé un instant faire une redirection de Val → Unité, mais ça ne fonctionne pas dans les pages qui sont encore liées en ce moment.

Comme ce modèle doit être conservé pour faciliter le travail des traducteurs, je te propose deux solutions :

  1. Soit faire évoluer le Modèle:Unité pour intégrer les fonctionnalités du Modèle:Val, puis le transformer en redirection ;
  2. Soit réécrire le Modèle:Val en faisant un appel au Modèle:Unité.

Qu'en penses-tu ? --FDo64 (discuter) 9 juillet 2017 à 22:00 (CEST)

Notification FDo64 : Je me suis fait la même réflexion suite à l'ajout d'un lien vers {{val}} dans la page de documentation d'{{unité}}. Je préfèrerai la première solution, mais il faut que je vérifie ce que ça implique réellement, je ne connais pas très bien {{val}}. Je regarderai ça dans les prochains jours.
Il faut aussi que j'analyse les utilisations d'{{unité/2}} pour le transformer en redirection. La principale différence qui reste c'est le comportement lorsqu'il y a une unité mais pas de nombre : la nouvelle version d'{{unité}} affiche l'unité tandis que {{unité/2}} n'affiche rien. Je suis déjà tombé sur une page avec l'infobox prérempli avec un modèle unité/2 sans nombre pour faciliter la future saisie, mais je ne sais pas si c'était juste un cas isolè. — Zebulon84 (discuter) 9 juillet 2017 à 23:52 (CEST)
Super, je te fais confiance pour faire au mieux ! Merci. --FDo64 (discuter) 9 juillet 2017 à 23:57 (CEST)
Ne pas archiver.

Modèle Date-[modifier le code]

Bonjour.

Suite à des ajouts de ce modèle par plusieurs personnes sur les articles que j'ai rédigés, j'ai tenté de les ajouter moi-même. Exemples ici [1], [2]

J'ai remplacé :

  • jour mois année par {{Date-|jour mois année}}
  • jour mois (au|jusqu'au) jour mois annéeX par {{Date-|jour mois annéeX-}} (au|jusqu'au|et le) {{Date-|jour mois année}}
  • mois année par {{Date-|mois année}}

Sur un test j'ai aussi uniformisé {{Date-|jour|mois|année}} en {{Date-|jour mois année}}, d'une part pour uniformiser! et dans un second temps, en terme de rédaction, il est moins lourd et plus simple de rajouter systématiquement la version sans pipe intermédiaires, donc j'ai opté pour cette graphie et c'est ce que je rajouterais.

Voilà le xml créé par AWB [3].

À ton avis, tout est correct et consensuel ? -- Archimëa [Toc 2 Mi] 22 mai 2018 à 10:37 (CEST)

Notification Archimëa : ce type de modèle était polémique il y a 10 ans ou plus, mais depuis les typographes ont gagné, je n'ai pas vraiment vu de réaction depuis que Date- à été créé.
Pas vu de problème dans ce que tu me montres ici. J'ai juste des remarques mineures :
  • il est inutile d'écrire {{Date-|{{1er}} ...}}, cela oblige MediaWiki à transclure {{1er}}, puis le module:date à le supprimer pour interpréter la date. Mais je comprends que c'est plus simple à ne pas changer ça, et le modèle sait le gérer. Pour éventuellement les supprimer avec AWB, tu peux ajouter le code suivant avant le </AdvancedReps> :
          <IRule xsi:type="InTemplateRule">
            <enabled_>true</enabled_>
            <Children>
              <IRule xsi:type="Rule">
                <enabled_>true</enabled_>
                <Name>Rule</Name>
                <ruletype_>OnWholePage</ruletype_>
                <replace_>{{1er}}</replace_>
                <with_>1er</with_>
                <ifContains_ />
                <ifNotContains_ />
                <regex_>false</regex_>
                <ifIsRegex_>false</ifIsRegex_>
                <numoftimes_>1</numoftimes_>
                <ifRegexOptions_>None</ifRegexOptions_>
                <regexOptions_>None</regexOptions_>
              </IRule>
            </Children>
            <Name>Date et date-</Name>
            <TemplateNames_>
              <string>Date</string>
              <string>Date-</string>
            </TemplateNames_>
            <ReplaceWith_ />
            <DoReplace_>false</DoReplace_>
          </IRule>
    
  • ton script AWB remplace les « date- » par « Date- ». Cela ne me gêne personnellement pas, mais j'ai vu que certains préfèrent mettre une minuscule lorsque le modèle est utilisé au milieu du texte.
Zebulon84, 22 mai 2018 à 12:47 (CEST)
Ok, merci pour ta réponse. Mon doute principal était de savoir si c'est consensuel et sur l'ajout dans les ref, je me demandais si les modèles articles/lien web ne le faisaient pas. Ce qui m'amène à me demander pourquoi ils ne le font pas (si cela peut être fait dans |date=, quand la date est décomposée en |jour=|mois=|année, c'est pas possible.
Pour 1er oui, je n'ai fait que rajouter le modèle {{date-}}. Avant j'ai bien vu ce souci, j'ai même vu que 1 suffit soit {{Date-|1 décembre 2015}} donne {{1er}} décembre 2015 -> .
Je sais pas si c'est utile de modifier ? retirer le modèle ferait déjà moins d'appels de modèles.
Il vaut mieux mettre 1 ou 1er, sinon ?
Pour la majuscule. En fait dans ma regex, j'ai pas réussi à détecter les modèles {{date-}} déjà présents donc, la regex doublait les modèles. J'ai donc tout passé en majuscule. En y regardant, c'est à cause de ce type de codes (?<!\{\{Date-\|), je pourrais peut-être décocher case sentitive et mettre un d minuscule.
Mais là, il y a plusieurs écoles, et la quasi-totalité des gens mettent des majuscules aux premières lettres d'un modèle. je pense que la minuscule est minoritaire, mais bon, rien pour l'affirmer. Donc je pense qu'il y a plusieurs sensibilités et que cela gêne pas. -- Archimëa [Toc 2 Mi] 22 mai 2018 à 13:48 (CEST)
Notification Archimëa :
  • Je n'avais pas été tout en bas de tes diff, ou je n'avais pas vu que tu modifais dans les modèles. (Smiley oups) Il est inutile de mettre le modèle date dans le paramètre date des modèles Lien web, Article… car ces modèles font effectivement déjà appel à Date-. Aujourd'hui utiliser le paramètre date est équivalent à utiliser les paramètres jour, mois et année et il me semble préférable de favoriser le paramètre date, plus simple à remplir et à lire. Dans certaines infobox aussi les modèles dates sont inutiles, grâce à la fonction dateInfobox. D'une façon générale je recommanderai d'éviter de mettre le modèle à l'intérieur d'un autre modèle.
  • En interne le module transforme 1er et 1er en 1 pour uniformiser, Mais comme c'est fait de façon systématique, ce qui est saisi n'a pas vraiment d'importance. 1er demande un traitement préalable de MediaWiki, c'est pourquoi je propose de l'enlever, mais 1er ne pose pas de problème et est plus naturel à lire pour ceux (encore nombreux) qui regardent le code.
  • Pour détecter tous les modèles tu peux utiliser (?<!\{\{[Dd]ate-\|), ou pour des cas où les noms seraient plus différents (?<!\{\{(?:Date-|date-)\|). Et si tu désires repérer les modèles date en même temps c'est (?<!\{\{[Dd]ate-?\|). J'ai trouvé ce site assez clair et complet quand je me suis mis aux regex.
Pour info, mon bot supprime actuellement les modèles date ou date- des paramètres date des modèles biblio (et consulté le pour Lien web), mais ne touche pas aux autres dates, ne retire pas {{1er}} des modèles...
Zebulon84, 22 mai 2018 à 16:42 (CEST)
OK, je vais garder 1er alors.
Pour Dd, j'avais bien sûr utilisé (?<!\{\{[Dd]ate-\|) mais ca ne marche pas dans le Lookbehind chez moi... J'ai l’impression que ceci (?<!\{\{(?:Date-|date-)\|) va faire le même effet (d ou D), je vais le tester. Je connais pas le (?: en début de parenthèse. Mais j'ai pas besoin de détecter le modèle Date, je le met jamais, trop lourd à lire, trop de liens, qui sont pas pertinent... sinon, je connaissais le ? pour éviter un caractère ;). merci pour le site. Pour un profane, c'est tout de même pas évident, quelqu'un qui maitrise les langages peut voir que c'est bien foutu, pour un novice, c'est ultra complexe, sans l'aide un être humain pour banaliser et expliquer -- Archimëa [Toc 2 Mi] 22 mai 2018 à 18:58 (CEST)
Notification Archimëa : ?: évite que ce qui est dans la parenthèse qui suit soit capturé. Ce n'est pas indispensable, mais ici cela permet de ne pas avoir à changer les numéros dans la chaine de remplacement : sans ça les $1 $2 $3 deviennent $2 $3 $4, et c'est source d'erreurs. — Zebulon84, 23 mai 2018 à 06:21 (CEST)
Ha d'accord. j'utiliserai ca... j'essaye de mettre le code à jour, simple pour 1er (je l'ai mis seulement si le modèle date- est présent.
Par contre grosse galère pour moi, pour empêcher de les ajouter des les références (je crois que mon seul moyen est de m'assurer que la balise <ref précède la date, mais entre il y a toujours du contenu qui varie sans cesse :( ). -- Archimëa [Toc 2 Mi] 23 mai 2018 à 09:45 (CEST)
Il me semble avoir réussit avec ce lookbehind... (?<!<ref name="[^"]+">[^<]+)
Désolé pour les dérangements. -- Archimëa [Toc 2 Mi] 23 mai 2018 à 16:21 (CEST)

Bonjour. J'ai une question qui pourrait découler logiquement de ce sujet :
Est-il utile d'appliquer le modèle {{Date}} ou {{Date-}} uniquement sur l'année ? exemple [4] -- Archimëa [Toc 2 Mi] 21 juin 2018 à 11:43 (CEST)

Question 2 : je viens de faire ce diff : [5]. Je pense donc à ceci : Est-ce qu'il y aurait un moyen d'appliquer le module sur les dates du modèle {{Date de sortie de jeu vidéo}} (tout en sachant que les années peuvent parfois comporter [[XXXX en jeu vidéo|année]] ? -- Archimëa [Toc 2 Mi] 21 juin 2018 à 13:32 (CEST)
Notification Archimëa : oui et non, à chacune des question Clin d'œil
  • le modèle date- complexifie le code de l'article, notamment pour ceux utilisant l'éditeur visuel, car il faut éditer le modèle pour retoucher la date. En contrepartie, le modèle rend la date insécable, et ajoute un balise HTML signalant une date et la rendant plus lisible pas les bots. Dans le cas d'une année seule il n'y a pas besoin de la rendre insécable, elle est déjà facilement lisible par une machine, reste juste le fait de signaler qu'il y a une date. Si c'est une date importante par rapport à l'article, il peut être utile de le mettre, mais sinon on peut sans doute généralement s'en passer : l'inconvénient est faible, mais l'avantage aussi.
  • Il existe une fonction dateinfobox qui permet de formater les paramètres qui contiennent une date, mais pour le moment seule la première date va être formatée, et encore seulement s'il n'y a rien ou que du texte simple avant. Cette fonction ne peut donc pas formater toutes les dates d'un coup, mais elle peut probablement être utiliser dans le modèle {{Date de sortie de jeu vidéo}}. Les infobox ou j'ai appliquer cette fonction contenant des dates aux formats variés, elle accepte les dates contenant déjà des liens ou un modèle date. Cette fonction étant prévu uniquement pour utilisattion depuis un modèle, je n'ai pas créer de modèle l'utilisant, il faut directement appeler le module par #invoke.
Zebulon84 (discuter) 22 juin 2018 à 09:46 (CEST)
Bonjour. Merci pour tes éclaircissements.
OK, noté pour le point 1, au cas par cas, uniquement pour les dates importantes.
pour le point 2. Pas trop d'intérêt à formater seulement la première date... quoique... enfin la couverture resterait limitée. Il vaut peut-être mieux laisser les utilisateurs wikifier au cas par cas les articles plus développés que les autres...

Sinon, sur la partie du modèle utilisée (l'ancienne syntaxe n'est pas utilisée du tout) : est-ce que je peux rajouter, pas trop lourd ? trop d'appel ? non-fonctionnel ?

{{
 #if:{{{2|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{1}}}}} {{{2}}} }}{{
 #if:{{{3|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{3}}}}} {{{4}}} }}{{
 #if:{{{5|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{5}}}}} {{{6}}} }}{{
 #if:{{{7|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{7}}}}} {{{8}}} }}{{
 #if:{{{9|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{9}}}}} {{{10}}} }}{{
 #if:{{{11|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{11}}}}} {{{12}}} }}{{
 #if:{{{13|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{13}}}}} {{{14}}} }}{{
 #if:{{{15|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{15}}}}} {{{16}}} }}{{
 #if:{{{17|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{17}}}}} {{{18}}} }}{{
 #if:{{{19|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{19}}}}} {{{20}}} }}
{{
 #if:{{{2|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{1}}}}} {{#invoke:Date|dateInfobox|date|{{{2}}}}} }}{{
 #if:{{{3|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{3}}}}} {{#invoke:Date|dateInfobox|date|{{{4}}}}} }}{{
 #if:{{{5|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{5}}}}} {{#invoke:Date|dateInfobox|date|{{{6}}}}} }}{{
 #if:{{{7|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{7}}}}} {{#invoke:Date|dateInfobox|date|{{{8}}}}} }}{{
 #if:{{{9|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{9}}}}} {{#invoke:Date|dateInfobox|date|{{{10}}}}} }}{{
 #if:{{{11|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{11}}}}} {{#invoke:Date|dateInfobox|date|{{{12}}}}} }}{{
 #if:{{{13|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{13}}}}} {{#invoke:Date|dateInfobox|date|{{{14}}}}} }}{{
 #if:{{{15|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{15}}}}} {{#invoke:Date|dateInfobox|date|{{{16}}}}} }}{{
 #if:{{{17|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{17}}}}} {{#invoke:Date|dateInfobox|date|{{{18}}}}} }}{{
 #if:{{{19|}}} | * {{Date de sortie de jeu vidéo/drapeau|{{{19}}}}} {{#invoke:Date|dateInfobox|date|{{{20}}}}} }}

De plus, modifier le module dans une version {{Date-}}, sans la création des liens internes sur la date, serait-il faisable/envisageable ? (facilement) ? (si tu en avais envie et que tu l'estimais utile (lol !) -- Archimëa [Toc 2 Mi] 22 juin 2018 à 10:14 (CEST)

Module:Infobox/Cycliste[modifier le code]

Bonjour, j'ai pu constater que tes connaissances en programmation devancent les miennes de beaucoup. En particulier, au niveau des idées pour éviter les variables globales et pour rendre le code plus élégant. De plus, il y a un élément que je n'arrive pas à traiter. Je veux retourner 2 tableaux en même temps "concaténer" (voir commentaire "it should be better" dans le code). J'ai essayé d'appeler 2 tableaux comme ici Module:Infobox/Cycliste_Wikidata&oldid=149080031, mais ca ne marchait pas, en tout cas pas comme ça. Le code actuel Module:Infobox/Cycliste marche (et est complet donc plus de modif...normalement) mais est moche (help!). Si tu as du temps libre un de ces jours et que tu pouvais y jeter un coup d'œil, ca serait vraiment sympa. Psemdel (discuter) 31 mai 2018 à 10:41 (CEST)

Notification Psemdel : pas sûr de comprendre ce que tu me demandes, alors je reformule, dis-moi si c'est ça qui te gêne : sur Module:Infobox/Cycliste, les fonctions AmateurTeamTable et ProTeamTable ont un code très proche, ce serait mieux d'éviter de dupliquer le code pour éviter de faire plusieurs fois les même tests.
D'une façon plus générale, Module:Cycling race est une horreur, plein de variables globale et de pcall ; quand on arrive dessus juste pour corriger une erreur de script sur une page, c'est difficile de comprendre ce qui se passe. Et il n'est pas facile à mettre à jour, car il est très long, c'est géré sur Wikidata… Je me suis déjà mis dans la tête d'essayer d'améliorer la situation un jour, mais ça n'est jamais arrivé dans mes priorités du moment au-delà de corriger les erreurs manifestes. Ce n'est pas un module à prendre en exemple.
Conseil : si tu donnes un commentaire à rechercher, test si on peut le trouver ; ici c'est « --should be better », sans le « it » Clin d'œil
Zebulon84 (discuter) 31 mai 2018 à 11:30 (CEST)
Oui, j'ai essayé de faire une seule fonction pour les deux, mais je n'y suis pas parvenu. Je bricole un peu avec les appels de tableaux. Si c'est un row, ca va, je fais un function(item)... et j'arrive à mettre mes if comme il faut. Avec les tableaux, si je l'écris comme une fonction, des fois il ne trouve pas mon localdata (il faut dire que ce n'est pas expliqué dans l'aide). Voir par exemple mon pathétique essai Module:Infobox/Cycliste_Wikidata&oldid=148992305. Il y a un truc que je n'ai pas bien compris. Pardon pour le commentaire erroné.
Pour Cycling race, tout le monde est bien d'accord que c'est moche, mais c'est difficile de faire un module qui traite tous les problèmes pour tous les wikipédia en trois lignes. Évidement, il faudrait couper le module en plusieurs blocs structurés entres eux, mais l'export vers les différents wikipédia serait plus compliqué. J'avoue ne pas avoir encore trouvé de solution élégante au problème. Il faut dire aussi que la limite d'opérations ne nous aide pas. Par exemple, j'ai une fonction1 qui est très similaire à une fonction2. Logiquement, je cherche à faire une fonction commune avec un if au milieu pour les 2-3 bricoles qui changent. Malheureusement, chaque if coûte cher en opération. Ainsi, en février, j'avais juste ajouté un petit test dans le code. Ca a tellement ralenti le code que ca a déclenché une discussion interminable Discussion_Projet:Cyclisme#Colombia_Oro_y_Paz_2018...
Si ca peut te rassurer, le module comporte presque toutes les fonctions qu'on peut s'imaginer y mettre, il va donc arrêter dans 1 an environ d'évoluer. On pourra se concentrer alors sur la structure. Psemdel (discuter) 31 mai 2018 à 11:53 (CEST)
Notification Psemdel : sur Module:Infobox/Cycliste_Wikidata j'ai supprimé quelques variables globales. On peut déclarer les variables au niveau du module : elles sont dans ce cas utilisables partout dans le module (comme les variables dans lesquelles tu charges les module au début), mais ne sont plus globales, donc si le nom est réutilisé dans un autre module chargé (par exemple ici Module:Cycling race) cela ne pose pas de problème.
Je n'ai pas compris le code suivant :
if NotUCInames~=nil and Amateurnames~=nil then
			temp={type = 'table', title = 'Équipes non-UCI', rows = {{type = 'row', value = teamValue( 'équipes non-UCI', 'années non-UCI' )}}}
			--should be better
		elseif NotUCInames~=nil and Amateurnames==nil then
		    temp={type = 'table', title = 'Équipes non-UCI', rows = {{type = 'row', value = teamValue( 'équipes non-UCI', 'années non-UCI' )}}}
		else --...
Pourquoi tester Amateurnames ~= nil puis Amateurnames == nil (donc tous les cas) pour mettre le même code dans les deux cas ? J'ai supprimé ce doublon, mais si j'ai raté quelque-chose, n'hésite pas à remettre.
J'ai supprimé les ~= nil car à moins que l'on veuille spécifiquement éviter les valeurs false, cela ne sert à rien.
Normalement mes modifications n'ont pas changé le comportement du module, mais il m'arrive bien sûr de faire des erreurs. Tu connais certainement mieux que moi ce qu'il faut vérifier pour savoir si tout est bien affiché, peux-tu tester cette version ?
Dernière chose, pour que le but du module soit plus clair, peut-on renommer Module:Infobox/Cycliste_Wikidata en Module:Infobox/Cycliste/Bac à sable ?
Zebulon84 (discuter) 31 mai 2018 à 15:47 (CEST)
Ah oui effectivement pour les local dans le module, je ne savais pas. Je ne pensais pas qu'une global était global à ce point. Pour la gestion de la qualité, ce n'est pas à toi de t'en charger mais à moi. Je viens juste demander conseil, car je ne suis pas encore au niveau.
Pour le Amateur, le problème c'est que dans le code au départ, il y a 4 tableaux : Amateur, non-UCI, Pro, UCI. Avec mon module actuel, je n'en ai plus que deux: Amateur et non-UCI étant ensemble, tout comme Pro et UCI. Dans 99,9% ca ne pose pas problème, mais si un jour un utilisateur décide de remplir à la fois Amateur et non-UCI, seul l'un des deux sera pris en compte. Pour pallier au problème , il faut que j'envoie 4 tableaux (dont 2 quasiment toujours nil). Mais je n'arrive pas à envoyer tantôt un tableau, tantôt deux. Surtout je ne sais pas renvoyer 2 tableaux ensemble (concaténer comme j'écrivais).
Pour Cycliste Wikidata, au départ j'utilisais Infobox/Bac à sable pour les tests, mais pour une raison peu évidente les champs donnés dans wikipédia n'était pas toujours pris en compte (le champ "victoire principale", ça me semble absurde aussi ce je dis). Cycliste Wikidata était alors le "vrai" module. Finalement, j'ai réussi à fusionner Cycliste (sans wikidata) avec Cycliste Wikidata et du coup comme tu l'as compris, le Cycliste Wikidata est devenu mon bac à sable... Enfin toujours est-il que d'ici un mois, s'il n'y a plus besoin de changement, il faudra simplement supprimer Cycliste Wikidata ca obsolète.
Sinon c'est quoi le problème avec le pcall? Psemdel (discuter) 31 mai 2018 à 17:54 (CEST)
Notification Psemdel : pcall est fait pour gérer les erreurs exceptionnelles que l'on n'a pas prévues, pas pour les erreurs courantes prévisibles. D'une part car c'est bien plus lent lorsqu'il y a une erreur (~ 100 fois plus lent selon mes tests), d'autre part lorsque c'est utilisé en cascade comme sur Module:Cycling race, ça devient dur de débuggé car on ne sait jamais si telle ou telle partie de code est réellement exécutée ou si un pcall a court-circuité cette partie. Ne pas avoir d'erreur c'est bien, mais il faut l'obtenir avec un code robuste, pas en cachant la misère sous le tapis.
Un appel de fonction ne peut pas ajouter deux éléments dans la table lors de sa création. Donc soit il faut ajouter autant de fonction qu'il y a d’élément à ajouter (quitte à simplement appelé une autre fonction avec le code commun), soit il faut ajouter un type 'multi' au niveau du Module:Infobox pour pouvoir retourner une table donc chaque élément sera considéré comme élément de la table précédente (cela existe déjà pour les lignes d'une table). Je peux regarder ça.
Zebulon84 (discuter) 1 juin 2018 à 22:07 (CEST)
Merci pour les explications. Psemdel (discuter) 4 juin 2018 à 18:16 (CEST)

Concrètement que proposes-tu pour remplacer les :

		if pcall(fooA, 'numeric-id', entity, 'P527', 1) == true then
			for k, v1 in pairs(entity.claims['P527']) do

J'ai essayé un "not" mais ca n'a pas marché. Je suppose en fait que ma question revient à demander : quelle est la fonction exist(), parce que c'est ce problème que gère actuellement pcall. Si on l'oublie, LUA nous renvoie "le truc que tu veux lire n'existe pas". Psemdel (discuter) 9 juin 2018 à 22:28 (CEST)

Notification Psemdel : je ne sais pas (ou peut-être plus, car je me souviens du nom) ce que fait la fonction fooA.
Pour supprimer le pcall ici le plus propre serai de modifier cette fonction fooA pour qu'elle ne génère pas d'erreur, mais retourne false ou nil dans les cas ou elle génère une erreur aujourd'hui. Mais cela nécessite de retoucher Module:Cycling race. Je prévois de regarder ça bientôt.
Zebulon84 (discuter) 10 juin 2018 à 13:11 (CEST)
Oui pardon (je crois parfois que les autres lisent dans ma tête). fooA récupère juste la valeur de la propriété:
function fooA (mode,entity,property,var)
	local snak
	if mode=="value" then snak=entity.claims[property][var].mainsnak.datavalue.value
	else snak=entity.claims[property][var].mainsnak.datavalue.value[mode]
	end
	return snak, entity.claims[property][var].rank
end
C'est juste un exemple, mais effectivement sans pcall, si mainsnak n'est pas trouvé, elle renvoie une erreur. Il faudrait faire un test exist(mainsnak), mais je ne connais pas la fonction (et à l'évidence les autres programmateurs du module non plus). Tous les autres pcall dans le module sont de se type, c'est pour éviter le problème de non existence. Psemdel (discuter) 10 juin 2018 à 20:47 (CEST)
Notification Psemdel : OK, je me souvenais bien que cette fonction était simple, mais je ne suis pas sûr que j'avais étudié à quoi elle servait.
Si une variable n'existe pas, elle a une valeur nil, donc un simple if variable then suffit. Le problème de cette fonction c'est qu'elle ne prend pas le temps de tester si chaque élément existe. Or quand on appelle une sous-sous-sous-sous table, si un des éléments du chemin manque, ça génère une erreur. Tester tous les éléments du chemin est exactement ce que fait la fonction get que j'ai ajouté au module:Infobox/Cycliste. Donc dans le module cycliste fooA peut être réécrite comme ceci :
function fooA (mode,entity,property,var)
	local snak
	if mode == "value" then
		snak = get(entity, 'claims', property, var, 'mainsnak', 'datavalue', 'value')
	else
		snak = get(entity, 'claims', property, var, 'mainsnak', 'datavalue', 'value', mode)
	end
	return snak, entity.claims[property][var].rank
end
La fonction get serait assurément très utile pour le module:Cycling race, mais il faut lui trouver un nom un peu plus précis, car dans un gros module un nom aussi générique risque d'être déjà utilisé, ou mal interprété par les autres développeur. Peut-être getNestedValue. A voir.
Zebulon84 (discuter) 11 juin 2018 à 05:50 (CEST)
Ok merci, je vais regarder tout ca ce week-end surement. Psemdel (discuter) 11 juin 2018 à 22:32 (CEST)

Module composition division de France[modifier le code]

Bonjour Zebulon84. J'ai commencé à tester le module de composition sur certains départements. C'est très bien, la ligne "total" est aussi un plus. Par contre j'ai un pb avec le Loir-et-Cher, j'ai un message d'erreur lua ː Utilisateur:Roland45/test3. Cela vient probablement d'un modèle/module de données où il manque peut-être un paramètre ou qui est peut-être absent. Le pb est qu'on ne sait pas du tout à quoi correspond cette erreur. Peux-tu voir ce qu'il en est.Roland45 (discuter) 31 mai 2018 à 16:51 (CEST)

Notification Roland45 : exact, il en manque plein. J'ai corrigé le module pour ne plus générer d'erreur. Les lignes sans module contiennent « ???? » dans la deuxième colonne.
Pour info, j'ai créer une page de données sur Commons (j'ai fait pour une région, car pour toute la France on est au delà des 2 Mo autorisés), et je suis en train d'apprendre à faire des requête Sparql pour pouvoir y ajouter les bons liens wikidata tout en vérifiant la correspondance des données. J'avais fait préparer un long message d'explication hier matin, mais j'ai tout perdu sur une erreur de manip. — Zebulon84 (discuter) 31 mai 2018 à 17:15 (CEST)
Merci pour la modif. En fait, j'avais fait un bout de code pour produire automatiquement ces listes de communes et ... je me suis tout simplement trompé de colonne pour les noms de communes ː j'ai pris le nom usuel et non le nom WPǃǃRoland45 (discuter) 31 mai 2018 à 17:17 (CEST)
Pour les tableaux de données, je pensais découper par département mais finalement par région, c'est pas plus mal aussi. Par contre je n'ai pas encore récupéré l'utilitaire ERxcel->Json.Roland45 (discuter) 31 mai 2018 à 17:20 (CEST)
La requête sur Wikidata a l'air d'être ultra forte. Mais attention, il y a deux écueils à éviter ː
- La date de mise à jour des données de population par l'Insee est le 1er janvier d'une année donnée. Or certaines communes nouvelles sont créées à une certaine date (octobre ou novembre 2017 par ex) avec effet au 1er janvier suivant (2018 en l'occurrence), or les articles sont souvent (pas toujours) créés avant le 1er janvier et le code Wikidata avec. De même on peut avoir des créations en cours d'année avec effet en cours d'année et qui ne doivent donc être prises en compte que l'année suivante ;
- Lors d'une création d'une commune nouvelle, les communes fusionnées disparaissent (et ne doivent donc pas apparaître dans la liste), mais pas toutes ː il se peut que le nom de l'une d'entre elles devienne celui de la commune nouvelle.
Il faudrait donc avoir dans WD la date d'effet de la création et la date de disparition. Quant aux communes qui changent de périmètre mais gardent le même nom, j'ai peur qu'elles gardent le même identifiant WD. Il faudra voir s'il y a un impact. Je ne suis pas sûr que tout ça soit aussi clair dans WD.Roland45 (discuter) 31 mai 2018 à 17:46 (CEST)
Conflit d’édition
Notification Roland45 : Oui, j'ai pensé que 18 fichiers c'était plus simple à gérer qu'une centaine.
Plus de détail sur ces tableau de données : mw:Help:Tabular Data
En fait, le JSON est surtout pour l'entête. Sur MediaWiki chaque données est sur une ligne indépendante, et l'éditeur le met automatiquement sous cette forme, mais lors d'une mise à jour toute la partie de données peut être copié en un bloc, chaque ligne corresondant à une ligne du tableau, générée par ligne par une simple formule sur Excell (j'ai exactement utilisé ="["""&B3&""","""&M3&""","""&Q3&""","""&R3&""","""&O3&""","""&T3&""","""&W3&""","""&D3&"""]," sur la feuille Communes 2018 de ton fichier Excell, puis copié ça sur toute les lignes). — Zebulon84 (discuter) 31 mai 2018 à 17:49 (CEST)
Je ne comprends pas très bien comment ça fonctionne, mais le code de la table en question peut être généré avec un bon vieux VBA (mais certainement moins compact que ton codeǃ), l'avantage du VBA étant que tu restes dans Excel ː un clic, ça mouline et tu as en mémoire tampon ton code que tu n'as plus qu'à coller. En tout cas si à terme le module de synthèse ultime fonctionne, il faudra aussi avoir un petit module qui génère automatiquement ces tableaux à partir des tables de découpage de l'Insee, un module qui soit utilisable par plusieurs personnes, sans être trop au fait de la programmation.Roland45 (discuter) 31 mai 2018 à 18:03 (CEST)
Arghǃ Je viens de voir qu'on ne crée pas comme ça du code sur Mediawiki. On est donc bien obligés de passer par l'utilitaire.Roland45 (discuter) 31 mai 2018 à 18:10 (CEST)
  • Il y a effectivement les date de création et disparition sur Wikidata. De toute façon, la population disponible à trois ans de retard, alors que la liste est celle de la composition actuelle de la division, donc la population affichée n'est pas forcément en ligne avec la composition. Enfin c'est comme ça aujourd'hui, et il sera difficile de d'imposer dans les tableaux une composition qui à trois ans de retard.
  • J'ai par le passé fait pas mal de code VBA pour automatiser mes fonction Excel, mais quand une simple formule copier dans toute une colonne permet de faire la même chose, je n'hésite pas.
  • Lorsque j'aurai trouvé / compris comment regrouper facilement toutes les données, je ferais un récapitulatif avec la source des données et les codes ou formules utilisés pour que d'autre puisse reproduire ça (car la mise à jour au quotidien c'est pas trop mon truc, même si j'ai parfois des illusions sur ma capacité de maintenance).

Pour les histoires de dates, il n'y a en fait pas de pb. La table d'appartenance régionale (celle-ci pour le Grand-Est) définit le découpage territorial au 1er janvier 2018. Les populations quant à elles publiées le 1er janvier 2018 sont millésimées "2015" et établies statistiquement sur la base du découpage au 1er janvier 2017. Et qu'est-ce qui fait la différence entre les périmètres au 1er janvier 2017 et ceux au 1er janvier 2018 ? ... les communes nouvelles créées en 2017. Ainsi si on crée des modules de données de population pour ces communes nouvelles, par sommation des données 2017 (càd 2015) des communes regroupées les composant, on se retrouve bel et bien avec des populations millésimées 2015, mais sur les périmètres 2018 et on a un ensemble cohérent. C'est d'ailleurs ce que je vais faire prochainement.
Du coup il est impératif de trouver les totaux par sommation (et non par récupération de données millésimées 2015, puisque celles-ci sont sur le périmètre de l'année précédente - 2017). Et là on a un petit pb de précision ː pas pour les populations qui sont bien obtenues par sommation (il y a même un décret qui le ditǃ), mais pour les superficies, où on n'a que deux chiffres après la virgule et donc une imprécision qui se crée en sommant (toute relative quand même).
Pour récupérer les noms à partir des codes, au lieu de wikidata, on peut aussi passer par des tables d'identification du type de celle-ci pour les arrondissements. Mais bon, pour les communes, cela fait ... une grande tableǃǃRoland45 (discuter) 4 juin 2018 à 08:53 (CEST)

J'ai créé les trois tables suivantes ː Départements, Arrondissements et Cantons.
Par contre j'ai un pb avec les intercommunalités. J'obtiens les messages d'erreurs suivants ː
⧼Le paramètre « data[125][1] » doit être une ligne simple ne dépassant pas 400 caractères, sans tabulation, et qui ne doit pas commencer ou finir par un espace⧽
⧼Le paramètre « data[125][2] » doit être une ligne simple ne dépassant pas 400 caractères, sans tabulation, et qui ne doit pas commencer ou finir par un espace⧽
Et ce pour 7 valeurs de data différentes (soit 14 erreurs). Le pb est que je n'arrive pas à voir à quoi correspond data[125][1]. En tout cas cela ne correspond ni à la ligne 125 du code, ni à la 125ème donnée. N'ayant ni tabulation, ni espace dans le code, je me suis dit que c'était un pb de longueur et ai remplacé "communauté de communes" par "CC" dans le nom WP, mais finalement même messages d'erreurs aux mêmes endroits. Vois-tu ce que cela peut être (à tout hasard, la table Excel est ici)?
Notification Roland45 : en JavaScript, comme la plupart des langage informatique, le premier élément est numéroté 0 et non 1 (pas VB sur Excel, mais VB.NET est comme ça), donc data[125][1] correspond à la 2e colonne de la 126e ligne (CC de Thann-Cernay), qui se termine effectivement par un espace. Pour repérer l'erreur facilement, j'ai fait « prévisualisé » sur Commons, et les données qui posent problème sont en rouge. Au cas où, si l'erreur est dans l'entête tout est en rouge. — Zebulon84 (discuter) 8 juin 2018 à 00:38 (CEST)
Ceci-dit, il va me falloir un format différent car j'ai notamment besoin des régions, pour trouver le tableau de commune sur Commons. Attends que j'ai avancé sur le module pour que je sache exactement de ce dont j'ai besoin avant d'aller plus loin. — Zebulon84 (discuter) 8 juin 2018 à 08:50 (CEST)
Merci du tuyau. C'est parfait. J'ai créé en complément les intercommunalités et les régions. Concernant les noms WP des communes, il y a quelques cas particuliers à prendre en compte. Certaines communes nouvelles ont par exemple le même code Insee qu'une des communes déléguées (peu certes). Je ne sais pas si la requête WD vise bien dans ce cas là le bon article, Sinon, il faut tester la date de création qui est systématiquement renseignée pr les communes nouvelles, mais pas pour les communes anciennes.Roland45 (discuter) 8 juin 2018 à 09:48 (CEST)
Notification Roland45 : Les dates de fin sont toujours renseignées, même si ce n'est pas toujours au même endroit (tantôt dissolution, tantôt date de fin pour la nature "commune de France"), et la requête en tien compte, je n'ai donc pas de doublon. Par contre j'ai du corrigé un certain nombre de cantons qui n'avais pas un code insee à jour, notamment dans les DOM. J'espère pouvoir avoir une première version de liste automatique partiellement fonctionnelle demain. — Zebulon84 (discuter) 8 juin 2018 à 10:16 (CEST)
Un petit pb pour finaliser le module ? Pour ma part, j'ai suspendu toute intervention de changement des modèles dans les articles en attente de voir si on arrive à finaliser ce module "universel" de composition.Roland45 (discuter) 30 juin 2018 à 14:47 (CEST)
Notification Roland45 : Les noms des intercommunalités différent plus entre Wiki et le COG, mais surtout d'autres activités IRL ont fortément réduit ma présence sur Wikipédia ces deux dernières semaines. Normalement cela ne devrait pas durer. — Zebulon84 (discuter) 1 juillet 2018 à 01:38 (CEST)
Oui. La charte de nommage n'est vraiment pas uniforme entre intercos et parfois le numéro Siren de l'Infobox n'et pas correct. Sinon, ... ne pas oublier l'IRL, c'est important.Roland45 (discuter) 1 juillet 2018 à 07:50 (CEST)

Création d'un modèle[modifier le code]

Bonjour

En me plongeant dans le modèle Ouvrage, j'ai vu que tu en étais le dernier intervenant ayant modifié son code. Aurais-tu du temps pour créer un modèle Film sur le même type que l'actuel modèle Ouvrage ?

Bonne journée à toi.--Bertold Brecht >dissoudre le peuple< 14 juin 2018 à 23:05 (CEST)

Notification Gpesenti : je propose les modèles existants :
Zebulon84 (discuter) 16 juin 2018 à 16:46 (CEST)
Ok je vais voir si ça améliore la présentation actuelle. Merci à toi. --Bertold Brecht >dissoudre le peuple< 16 juin 2018 à 20:05 (CEST)

Un avis ?[modifier le code]

Salut Zebulon84, jusqu'il y a peu, je n'avais pas beaucoup touché au Lua sur Wikipédia. Pour rattrapé le coup, je me suis dit que je pourrai tenter de créer un module pour le modèle:autres projets, un modèle important qui est un des seuls liens entre Wikipédia et les autres projets. J'ai commencé un brouillon ici, l'objectif étant de récupérer automatiquement les données des autres projets depuis Wikidata pour afficher automatiquement les liens. Ce qui serait parfait, c'est que cet automatisme puisse être bypassé par un contributeur : il pourrait choisir manuellement des valeurs, ou ajouter deux valeurs vers Wikisource par exemple.

Je découvre un peu toutes les fonctions et je crois qu'il y a des recommandations techniques et de style... Du coup, si tu as des conseils pour ce premier test à grande échelle, je suis preneur. Si tu n'as pas le temps, j'irai embêter quelqu'un d'autre. Merci Lofhi me contacter 17 juin 2018 à 04:47 (CEST)

Bonjour Lofhi.
Puisque tu me demande mon avis, je le donne, mais ça ne reste que mon avis : je ne suis pas convaincu de l'utilité du modèle:autres projets depuis que quasiment tous les liens qu'il affichent sont déjà dans le menu de gauche (ça n'était pas le cas quand le modèle a été créé).
Concernant ton module, j'ai jeté un coup d'oeil très rapide, mais voici quelques remarques :
  • il faut éviter les variables globales, qui risquent toujours de rentré en conflit, surtout avec des nom génériques comme getclass. Si tu veux que tes fonctions puissent être utilisées depuis un autre module, met les dans la table p (comme la fonction main)
  • Pour bypasser le résultat automatique, je transmetrai les paramètres du modèle à getbrothersprojects, inverserait les boucles et commencerait par tester si le nom est dans les paramètres du modèle. Quelque chose de ce style :
    for j, nameproject in pairs( wikimediasites ) do
        if args[ nameproject ] and  args[ nameproject ] ~= '' then
            if args[ nameproject ] ~= '-' then
                results[ nameproject ] =  args[ nameproject ]
            end
        else
            for i, entry in pairs( tableofprojects ) do
    	        if nameproject == entry[ 'site' ] then
    	            results[ nameproject ] =  entry[ 'title' ] -- Add key (project) and value (title) in the results table
                end
    	    end
        end
    end
    
    (attention, ce code est indenté avec des espaces)
  • si tu utilise mw.html, autant allez jusqu'au bout, même si ça prend quelques lignes de plus. Je réécrirait donc
    ul:node('<li class="' .. class ..'">[[' .. link .. '|' .. title ..']] sur ' .. project .. '</li>\n')
    
    en
    ul	:tag( 'li' )
            :addClass( class )
            :wikitext( '[[', link, '|', title, ']] sur ', project )
            :done()
        :newline()
    
  • Il n'y a pas vraiment de convention de style sur fr.wiki. Il existe mw:Manual:Coding conventions. La page concernant Lua est copiée depuis en.wiki, et ne reflète ce qui est réellement utilisé par MediaWiki, notamment au niveau des espaces. MediaWiki met beaucoup d'espaces, (j'aime bien et c'est ce que j'utilise) mais je suppose que la plupart des programmeurs sont plutôt habitué à ce qui est décrit sur mw:Manual:Coding conventions/Lua. Comme Scribunto utilise le camelCase (ex : mw.getCurrentFrame) je recommande cette typographie.
Zebulon84 (discuter) 17 juin 2018 à 07:57 (CEST)
Merci pour les remarques, c'est noté. Je ne sais pas si refaire ce modèle en Lua soit très utile, je me dis que ça sera au moins utile pour ceux qui lisent Wikipédia sur mobile... Lofhi me contacter 17 juin 2018 à 10:43 (CEST)
Bonsoir Zebulon. J'ai terminé le module (Module:Utilisateur:Lofhi/Test), il fonctionne normalement entièrement, mais je trouve ça peut-être un peu trop procédural (j'ai découvert les joies du Lua). Il y a aussi le while à la fin d'une fonction qui me dérange, je ne sais pas si c'est très propre. J'ai aussi évité d'utiliser require, mais peut-être qu'il ne faut pas hésiter à les utiliser pour que le code soit plus compréhensible en ayant une base commune avec les autres modules ? Cdl, Lofhi me contacter 20 juin 2018 à 22:48 (CEST)