Aller au contenu

Utilisateur:Programgames2/Test apprentissage

De Poképédia

Page de test — proposition de mise à jour du Module:Apprentissage

[modifier]

Le Module:Apprentissage rend les sept tableaux de capacités du wiki, sur 5 410 pages. Cette page compare, cas par cas, le module en service et une version proposée, déposée dans Module:Apprentissage/bac à sable.

Ce que la proposition ne fait pas :

  • elle ne demande de modifier aucune des 5 410 pages ;
  • elle ne demande aucune ligne de CSS ou de JavaScript supplémentaire ;
  • elle n'enlève aucun paramètre, aucun comportement, aucune fonction.

Comment lire cette page. Chaque cas montre d'abord le rendu actuel, puis le rendu proposé, et explique dessous ce que vous devez voir et pourquoi. Les sections A vérifient que rien ne casse ; B montre ce qui s'améliore tout seul ; C montre ce qui devient possible ; D couvre les cas limites.

Deux catégories de maintenance peuvent apparaître en bas de cette page. C'est voulu : les cas B.7, D.1 et D.2 les déclenchent exprès, pour montrer le problème et sa solution. La catégorie « paramètre d'apprentissage incorrect » ne se pose que dans l'espace principal : hors de lui, seule l'autre apparaît.

A. Rien ne casse

[modifier]

Les appels ci-dessous sont exactement ceux qu'écrivent déjà les pages du wiki. Les deux rendus doivent être identiques à l'œil, à une exception annoncée en A.2.

Trois détails invisibles à l'écran.

  1. Le nom interne du tableau porte désormais un condensé de son contenu :
 ListeCapacites9-72abfbc1 au lieu de ListeCapacites9.
 C'est ce qui règle le cas B.4.
  1. La phrase sur Queulorior du cas A.8 passe du corps au pied du tableau.
 Elle s'affiche au même endroit ; c'est ce qui règle le cas B.9.
  1. Les espaces surnuméraires autour du coût, chez le donneur, sont retirés. Le
 navigateur les fusionnait déjà.

A.1 — Par niveau, génération 9

[modifier]

Rendu actuel

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
ChargeNormalPhysique40100 %35N.1
RugissementNormalStatut—100 %40N.3
VampigrainePlanteStatut—90 %10N.7
Fouet LianesPlantePhysique45100 %25N.9
Lance-SoleilPlanteSpécial120100 %10N.30

Rendu proposé

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
5 capacités
ChargeNormalPhysique40100 %35N.1
RugissementNormalStatut—100 %40N.3
VampigrainePlanteStatut—90 %10N.7
Fouet LianesPlantePhysique45100 %25N.9
Lance-SoleilPlanteSpécial120100 %10N.30

Deux tableaux identiques, à un détail près : le nombre de capacités s'affiche à droite du bouton.

Ce détail est placé là pour une raison. MediaWiki:Common.js échange le texte du bouton et son attribut title à chaque clic. Un compteur écrit dans le bouton disparaîtrait donc au premier clic. Il est écrit à côté. Cliquez deux fois pour le vérifier.

A.2 — Par niveau, génération 8 : Maîtrise et Capacité Plus

[modifier]

Rendu actuel

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEB, DEPSLPA
ChargeNormalPhysique40EB, DEPS
30, 40, 50LPA
100 %35EB, DEPS
30LPA
N.1MaîtriseN.1
RugissementNormalStatut—100 %40N.3—
Fouet LianesPlantePhysique45100 %25N.7MaîtriseN.7

Rendu proposé

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEB, DEPSLPA
3 capacités
ChargeNormalPhysique40EB, DEPS
30, 40, 50LPA
100 %35EB, DEPS
30LPA
N.1MaîtriseN.1
RugissementNormalStatut—100 %40N.3—
Fouet LianesPlantePhysique45100 %25N.7Capacité PlusN.7

Rien de différent à l'œil.

La seule différence de toute la proposition est ici. L'icône de Capacité Plus porte aujourd'hui le texte alternatif « Maîtrise », un copier-coller depuis la ligne du dessus. Invisible pour vous, mais un lecteur d'écran annonce « Maîtrise » là où il faudrait « Capacité Plus ». La version proposée corrige ce texte.

Au passage, une remarque hors périmètre. Cette icône pointe vers une page « Capacité Plus » qui n'existe pas : le lien est rouge, dans le module actuel comme dans la version proposée. Ce n'est pas corrigé ici, car cela relève d'une décision de contenu et non du module, mais cela mérite peut-être une page.

A.3 — Par niveau, génération 3 : les colonnes Concours

[modifier]

Rendu actuel

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageRSERFVF
ChargeNormalPhysique3595 %35Robustesse♥♥♥♥—N.1N.1N.1
Fouet LianesPlanteSpécial35100 %10Sang-froid♥♥♥♥—N.7N.7N.7
UltralaserNormalPhysique15090 %5Sang-froid♥♥♥♥♥♥♥♥—N.50N.50

Rendu proposé

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageRSERFVF
3 capacités
ChargeNormalPhysique3595 %35Robustesse♥♥♥♥—N.1N.1N.1
Fouet LianesPlanteSpécial35100 %10Sang-froid♥♥♥♥—N.7N.7N.7
UltralaserNormalPhysique15090 %5Sang-froid♥♥♥♥♥♥♥♥—N.50N.50

Neuf colonnes des deux côtés, Type Concours, Charme et Blocage compris, plus les trois colonnes de jeu (RS, E, RFVF). Le « — » d'Ultralaser en Rubis/Saphir est conservé.

Les générations 3, 4 et 6 sont les seules à avoir des colonnes supplémentaires, et donc les plus faciles à casser lors d'une modification. Elles sont vérifiées explicitement.

A.4 — Tableaux vides

[modifier]

Rendu actuel

[modifier]
Capacité
NomTypeCatégoriePuissancePrécisionPP
Ce Pokémon n'apprend aucune capacité par montée en niveau lors de cette génération.
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
Ce Pokémon n'apprend aucune capacité par capsule lors de cette génération.

Rendu proposé

[modifier]
Capacité
NomTypeCatégoriePuissancePrécisionPP
Ce Pokémon n'apprend aucune capacité par montée en niveau lors de cette génération.
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
Ce Pokémon n'apprend aucune capacité par capsule lors de cette génération.

Rien ne change : même phrase, même tableau, même largeur.

Ce qui change quand même, dans le code source. Un tableau vide n'a ni lignes ni compteur : c'est donc le cas où l'on voit le mieux ce que la version proposée ajoute, et rien d'autre :

  • la balise <table> reçoit les classes
 tableau-apprentissage et apprentissage-usuel — voir B.3 ;
  • les en-têtes reçoivent scope="col", ce qui permet à un lecteur
 d'écran d'annoncer « Puissance : 40 » plutôt que « 40 » ;
  • un guillemet en trop est retiré (class="cellule-entête"").

A.5 — Par CT/CS, génération 6 : la même capacité, deux sigles

[modifier]

Rendu actuel

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocage
CT06ToxikPoisonStatut—90 %10Intelligence♥♥♥—
CT94Éclate-RocXYCombatPhysique40100 %15Robustesse♥♥♥♥—
CS06Éclate-RocROSACombatPhysique40100 %15Robustesse♥♥♥♥—
CS03SurfEauSpécial90100 %15Beauté♥♥♥♥

Rendu proposé

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocage
4 capacités
CT06ToxikPoisonStatut—90 %10Intelligence♥♥♥—
CT94Éclate-RocXYCombatPhysique40100 %15Robustesse♥♥♥♥—
CS06Éclate-RocROSACombatPhysique40100 %15Robustesse♥♥♥♥—
CS03SurfEauSpécial90100 %15Beauté♥♥♥♥

Les deux tableaux, identiques. Dans la colonne Numéro, on doit lire, dans l'ordre :

NuméroCapacitéPourquoi
CT06ToxikCT dans toute la génération
CT94Éclate-RocXYCT dans X et Y
CS06Éclate-RocROSACS dans Rubis Oméga et Saphir Alpha
CS03SurfCS dans toute la génération

Les deux lignes du milieu portent la même capacité. Selon le jeu écrit en troisième champ, le module doit rendre CT94 ou CS06 — un sigle différent et un numéro différent, à l'intérieur d'une même génération. Remarquez au passage que CT06 et CS06 coexistent : c'est exactement pour cela que le sigle compte.

C'est la partie la plus délicate du module : onze capacités, dont quatre dont le sigle change selon le jeu. Elle est reprise sans une virgule de changement, à une exception près : le cas B.10.

A.6 — Par DT, génération 9

[modifier]

Rendu actuel

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
DT01Vive-AttaqueNormalPhysique40100 %30
DT02Draco-GriffeDragonPhysique80100 %15

Rendu proposé

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
2 capacités
DT01Vive-AttaqueNormalPhysique40100 %30
DT02Draco-GriffeDragonPhysique80100 %15

Sigle DT des deux côtés, et le numéro de disque toujours en lien.

Un ajout invisible, et sans gain immédiat. La colonne Numéro reçoit une valeur de tri numérique. Elle ne change rien aujourd'hui : les pages écrivent leurs numéros avec les zéros, « 06 » ou « 001 », et le tri sur le texte donne alors le même ordre que le tri sur le nombre. Vérifié sur Bulbizarre, Pikachu et Dracaufeu : aucun numéro sans zéro.

L'attribut ne sert donc que de garde : le jour où une page écrira « 2 » à côté de « 10 », la colonne restera dans l'ordre.

A.7 — Par reproduction, avec parents

[modifier]

Rendu actuel

[modifier]
CapacitéTypeCat.Puis.Préc.PPParents l'apprenant par niveauParents l'apprenant par reproduction
VampigrainePlanteStatut—90 %10ChetiflorSaquedeneuBulbizarre
SoinNormalStatut—100 %5Mystherbe—

Rendu proposé

[modifier]
CapacitéTypeCat.Puis.Préc.PPParents l'apprenant par niveauParents l'apprenant par reproduction
2 capacités
VampigrainePlanteStatut—90 %10ChetiflorSaquedeneuBulbizarre
SoinNormalStatut—100 %5Mystherbe—

Les mêmes miniatures de parents, dans le même ordre. La seconde ligne garde son « — », faute de parent renseigné.

Cette fonction appelle un second module (Module:Ressources/infosPokemon) et la plus coûteuse à rendre. Si quelque chose devait ralentir ou casser, ce serait ici.

A.8 — Par reproduction : jeu(), sup(), méthodes= et queulorior=

[modifier]

Rendu actuel

[modifier]
CapacitéTypeCat.Puis.Préc.PPType ConcoursCharmeBlocageParents l'apprenant par niveauParents l'apprenant par CT
VampigraineRSPlanteStatut—90 %10Intelligence♥♥♥♥Chetiflor—
SoinENormalStatut—100 %20Intelligence♥♥♥Mystherbe—
Grâce à sa capacité Gribouille, Queulorior est capable d'apprendre toutes ces capacités, qu'il peut également transmettre par reproduction.

Rendu proposé

[modifier]
CapacitéTypeCat.Puis.Préc.PPType ConcoursCharmeBlocageParents l'apprenant par niveauParents l'apprenant par CT
2 capacités
VampigraineRSPlanteStatut—90 %10Intelligence♥♥♥♥Chetiflor—
SoinENormalStatut—100 %20Intelligence♥♥♥Mystherbe—
Grâce à sa capacité Gribouille, Queulorior est capable d'apprendre toutes ces capacités, qu'il peut également transmettre par reproduction.

Les exposants RS et E collés au nom de la capacité, les en-têtes « Parents l'apprenant par niveau / par CT », et la phrase sur Queulorior en bas du tableau.

Ce sont les trois paramètres les moins utilisés du module, donc ceux qu'une réécriture oublie le plus volontiers. Le cas les vérifie ensemble.

A.9 — Par donneur : lieu, coût, unité de prix

[modifier]

Rendu actuel

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeLieuCoût
UltralaserNormalSpécial15090 %5Sang-froid♥♥ Kanto 48 000 P
ChargeNormalPhysique3595 %35Robustesse♥♥♥ Johto—
SoinNormalStatut—100 %10Intelligence— Sinnoh 8 PCo

Rendu proposé

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeLieuCoût
3 capacités
UltralaserNormalSpécial15090 %5Sang-froid♥♥ Kanto 48 000 P
ChargeNormalPhysique3595 %35Robustesse♥♥♥ Johto—
SoinNormalStatut—100 %10Intelligence— Sinnoh 8 PCo

Trois lignes identiques. La deuxième n'a ni coût ni unité et affiche « — ». Comportement actuel, conservé.

Un piège conservé. Quand l'unité contient un lien avec une barre verticale, le module doit recoller les morceaux que le découpage a séparés. Ce raccommodage est repris tel quel, comme le prouve la ligne Ultralaser.

A.10 — Par pré-évolution et par événement

[modifier]

Rendu actuel

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPPré-évolution
Danse LamesNormalStatut——200001
SoinNormalStatut—100 %50002
CapacitéTypeCatégoriePuissancePrécisionPPÉvénement
MétéoresNormalSpécial60EB, DEPS
45, 60, 75LPA
—20 Pokémon Day 2020
UltralaserNormalSpécial150EB, DEPS
100, 120, 150LPA
90 %EB, DEPS
90 %, 95 %LPA
5 Distribution

Rendu proposé

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPPré-évolution
2 capacités
Danse LamesNormalStatut——200001
SoinNormalStatut—100 %50002
CapacitéTypeCatégoriePuissancePrécisionPPÉvénement
2 capacités
MétéoresNormalSpécial60EB, DEPS
45, 60, 75LPA
—20Pokémon Day 2020
UltralaserNormalSpécial150EB, DEPS
100, 120, 150LPA
90 %EB, DEPS
90 %, 95 %LPA
5Distribution

La miniature du Pokémon pour la pré-évolution, le texte brut pour l'événement, alignés comme aujourd'hui.

Note pour la relecture du code. Ces deux fonctions, plus la nouvelle « transfert » (C.1), partagent désormais le même code : elles ne diffèrent que par le titre de leur dernière colonne et par la phrase du tableau vide. Trois fonctions presque identiques deviennent une, ce qui réduit d'autant le risque qu'un correctif futur n'en corrige que deux sur trois.

B. Ce qui s'améliore sans toucher aux pages

[modifier]

B.1 — Le tri : ce qui marche déjà, et ce qui est garanti

[modifier]

Rendu actuel

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
ChargeNormalPhysique40100 %35N.1
UltralaserNormalSpécial15090 %5N.50
Lance-SoleilPlanteSpécial120100 %10N.30
SoinNormalStatut—100 %5N.20
VampigrainePlanteStatut—90 %10N.7
Danse LamesNormalStatut——20N.12

Rendu proposé

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
6 capacités
ChargeNormalPhysique40100 %35N.1
UltralaserNormalSpécial15090 %5N.50
Lance-SoleilPlanteSpécial120100 %10N.30
SoinNormalStatut—100 %5N.20
VampigrainePlanteStatut—90 %10N.7
Danse LamesNormalStatut——20N.12

À essayer : triez Type, Catégorie et Puissance dans les deux tableaux. Vous ne verrez aucune différence, et c'est normal.

Ce cas corrige un problème qui n'existe pas. La source de jquery.tablesorter montre pourquoi :

  • Le tri lit l'attribut alt des images. La cellule Type
 contient <img alt="Normal"> : sa clé de tri est
 « Normal », et non une chaîne vide. Type, Catégorie et Type Concours se
 trient donc déjà.
  • Le tri « texte » n'est pas alphabétique. MediaWiki compare avec
 Intl.Collator(…, {numeric: true}) : les suites de chiffres se
 comparent comme des nombres, et la ponctuation passe avant les chiffres.
 Même sans valeur de tri, la colonne Puissance se range donc
 « — », « — », « — », 40, 120, 150.

Ce que la proposition apporte quand même. Chaque cellule reçoit une valeur de tri lue dans Module:Data/Données Capacités Génération 9. Cela ne change pas l'ordre ici, mais :

  • cela corrige la colonne Coût, seul ordre réellement faux : voir B.2 ;
  • cela rend l'ordre indépendant de la collation du navigateur, au lieu d'en
 dépendre sans le savoir.

Ce n'est donc pas une correction, c'est une garantie. Le cas B.2 est la seule correction de tri de cette proposition.

B.2 — Le tri du coût, chez le donneur

[modifier]

Rendu actuel

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageLieuCoût
UltralaserNormalSpécial15090 %5Sang-froid♥♥♥♥♥♥♥♥ Kalos 48 000 P
ChargeNormalPhysique50100 %35Robustesse♥♥♥♥— Kanto 8 PCo
SoinNormalStatut—100 %10Intelligence♥♥— Johto 1 500 P

Rendu proposé

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageLieuCoût
3 capacités
UltralaserNormalSpécial15090 %5Sang-froid♥♥♥♥♥♥♥♥ Kalos 48 000 P
ChargeNormalPhysique50100 %35Robustesse♥♥♥♥— Kanto 8 PCo
SoinNormalStatut—100 %10Intelligence♥♥— Johto 1 500 P

À essayer : triez la colonne Coût dans les deux tableaux.

Ce que vous allez constater. L'actuel range 8 après 48 000, parce qu'il compare « 8 » et « 4 » comme des lettres. Le proposé range 8, 1 500, 48 000.

B.3 — Le CSS mobile : examiné, puis écarté

[modifier]

je voulais adapter le css sur mobile ( annulé )

B.4 — Deux tableaux d'une même page ne se replient plus ensemble

[modifier]

Le problème, sur une page réelle

[modifier]

Ouvrez Raichu et repliez le tableau Par CT de la génération 8 de la forme normale : celui de la forme d'Alola se replie en même temps.

C'est le comportement de MediaWiki:Common.js : il pilote tous les tableaux qui portent le même nom, et le module nomme ses tableaux d'après la seule méthode et la génération. Sur un relevé de 60 pages tirées au sort, 13 pages, soit 21 %, ont au moins deux tableaux qui se pilotent ainsi l'un l'autre. Ce sont les Pokémon à formes multiples : Raichu, Ossatueur, Motisma, Morpeko…

Rendu proposé, avec un identifiant distinct

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
2 capacités
CT01Vive-AttaqueNormalPhysique40100 %30
CT02Draco-GriffeDragonPhysique80100 %15
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
2 capacités
CT01Vive-AttaqueNormalPhysique40100 %30
CT03UltralaserNormalSpécial15090 %5

À essayer : repliez le premier des deux tableaux ci-dessus. Le second reste ouvert.

Comment ça marche. Le nom du tableau porte désormais un condensé court de tout l'appel — ses lignes et ses paramètres. Deux tableaux voisins reçoivent donc des noms distincts, et chacun son bouton. Aucune des 5 410 pages n'a besoin d'être modifiée.

La limite, dite franchement. Deux appels strictement identiques — mêmes lignes et mêmes paramètres, gardent le même nom et se replient ensemble. Leurs tableaux étant identiques, cela ne trompe personne ; et identifiant= les sépare si on le souhaite quand même.

Le paramètre facultatif identifiant= reste disponible pour donner un nom parlant plutôt qu'un condensé. Les espaces et les accents en sont retirés automatiquement, pour former un nom de classe valide.

Un simple compteur ne suffirait pas. Scribunto ré-exécute le module à chaque {{#invoke:}} : un compteur repartirait à zéro pour chaque tableau et ne distinguerait rien.

B.5 — Le compteur dit le nombre de lignes affichées

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeLieuCoût
2 capacités
UltralaserNormalSpécial15090 %5Sang-froid♥♥ Colisée Combat 48 PCo
Laser GlaceGlaceSpécial95100 %10Beauté♥♥ Colisée Combat 48 PCo

Deux lignes dans le tableau, et le compteur qui annonce « 2 capacités ».

La deuxième ligne du code source n'a pas de nom de capacité : un simple tiret. Elle n'est pas affichée, et elle n'est pas comptée.

Ce que faisait le module avant. Le compteur et la boucle d'affichage appliquaient deux critères différents : le compteur annonçait « 1 capacité » sous un tableau qui en montrait deux. Ils lisent désormais la même liste ; ils ne peuvent plus se contredire.

B.6 — Les notes fonctionnent aussi chez le donneur

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeLieuCoût
2 capacités
Laser Glace1GlaceSpécial95100 %10Beauté♥♥ Colisée Combat 48 PCo
Lance-FlammeFeuSpécial95100 %15Beauté♥♥ Colisée Combat 48 PCo
1. Uniquement après avoir obtenu le quatrième badge.

Un renvoi 1 après « Laser Glace », et la note sous le tableau. Le renvoi est cliquable.

Dans la première version de cette proposition, le renvoi était calculé puis jamais posé : la note s'affichait en pied de tableau sans que rien ne la désigne. Les huit autres méthodes le posaient correctement.

B.7 — Deux cas limites du tri, déjà couverts par MediaWiki

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageRS
4 capacités
GuillotineNormalPhysiqueOHKO—5Sang-froid♥♥♥N.5
ChargeNormalPhysique3595 %35Robustesse♥♥♥♥—N.1
UltralaserNormalPhysique15090 %5Sang-froid♥♥♥♥♥♥♥♥N.30
AbriNormalStatut——10Grâce♥—N.10

Deux valeurs qui ne sont pas des nombres peuvent occuper la colonne Puissance :

  • OHKO — quatre capacités la portent dans les neuf tables de données :
 Abîme, Empal'Korne, Glaciation et Guillotine, soit 34 valeurs
 en tout. Le premier tableau en contient une.
  • « ?? » — quand la fiche de la capacité manque : capacité Ombre, faute de
 frappe, ou génération dont la page de données n'existe pas encore. Le second
 tableau en contient une, volontairement.

Triez Puissance dans chacun. Dans le premier : Abri (—), Charge (35), Ultralaser (150), Guillotine (OHKO). Dans le second : la ligne inconnue, puis Charge (40), puis Ultralaser (150).

Le module actuel fait déjà cela, par la collation de MediaWiki : la ponctuation passe avant les chiffres, et les lettres après. La proposition rend le même ordre, en le fixant par une valeur explicite plutôt qu'en s'en remettant au navigateur.

Ce cas est donc là pour montrer que rien ne casse sur ces deux valeurs particulières, non pour annoncer une amélioration.

Le second tableau range volontairement cette page dans Catégorie:Page avec un nom de capacité incorrect, comme le cas D.2.

B.8 — La phrase Queulorior sort du corps du tableau

[modifier]
CapacitéTypeCat.Puis.Préc.PPType ConcoursCharmeBlocageParents l'apprenant par niveauParents l'apprenant par reproduction
3 capacités
UltralaserNormalPhysique15090 %5Sang-froid♥♥♥♥♥♥♥♥PikachuBulbizarre
AcidePoisonPhysique40100 %30Intelligence♥♥♥♥♥Roucool—
ChargeNormalPhysique3595 %35Robustesse♥♥♥♥—Herbizarre—
Grâce à sa capacité Gribouille, Queulorior est capable d'apprendre toutes ces capacités, qu'il peut également transmettre par reproduction.

À essayer : cliquez sur Puissance. L'ordre croissant doit être Charge (35), Acide (40), Ultralaser (150). Vérifiez ensuite que la phrase sur Queulorior reste en bas du tableau, et qu'elle n'a pas bougé.

Le piège. La phrase occupait une ligne du corps du tableau, avec un colspan qui couvre toutes les colonnes. jquery.tablesorter la traite alors comme une ligne de données : elle est triée avec les capacités. Cliquez sur Capacité dans un tableau qui la porte encore, et « Grâce à sa capacité Gribouille… » vient se ranger entre deux noms de capacités, à sa place alphabétique.

Elle est maintenant dans le pied du tableau, avec les notes. jquery.tablesorter ne trie que le corps : elle ne bouge plus.

B.9 — Le code de jeu « Pt » n'est plus lu comme une icône

[modifier]

« N.15 » suivi de l'abréviation Pt en exposant.

Le comportement précédent. Le préfixe P annonce l'icône Capacité Plus. Un champ de génération 4 contenant « Pt » (Platine) se lisait « P » + « t » : le tableau affichait une icône, et un exposant « t ».

La règle appliquée. Le préfixe ne compte que s'il précède un niveau. « P15 » et « M5 » portent leur icône, dans n'importe quelle génération ; « Pt » est un code de jeu et n'en porte pas.

Se fier à la génération aurait été faux : les pages écrivent P dès la génération 8, comme le montre le cas A.2, qui doit rester identique entre les deux modules, icônes comprises.

B.10 — Le sigle CS reconnaît enfin tous les codes de jeu

[modifier]

Rendu actuel

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharme
CS05Anti-BrumeDPPVolStatut——15Beauté♥♥
CT05Anti-BrumeDPVolStatut——15Beauté♥♥
CS05SiphonHGSSEauSpécial1570 %15Beauté—

Rendu proposé

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharme
3 capacités
CS05Anti-BrumeDPPVolStatut——15Beauté♥♥
CS05Anti-BrumeDPVolStatut——15Beauté♥♥
CS05SiphonHGSSEauSpécial1570 %15Beauté—

Trois lignes en CS05 dans le tableau proposé. Dans le tableau actuel, la deuxième dit CT05 — et c'est faux : Anti-Brume est bien la CS05 de Pokémon Diamant et Perle.

La cause. La règle du module est écrite pour le code DPP. Une page qui écrit DP, D, P ou Pt — tous des codes valides de Modèle:Abréviation — ne la trouve pas, et retombe sur CT. Le même trou existe pour RS, E, RF, VF, HG, SS, RuO et SaA.

Les codes équivalents sont désormais ramenés à celui qu'attend la règle. La table des onze capacités n'est pas touchée : seule la façon de lire le code de jeu l'est.

Un changement à valider. C'est le seul point de cette proposition qui peut modifier le rendu d'un article existant, là où une page écrit aujourd'hui DP plutôt que DPP. Le changement va dans le sens de la correction, mais il vous appartient.

C. Ce qui devient possible

[modifier]

Tout ce qui suit est éteint par défaut : aucune page existante ne change de rendu. Ces fonctions ne servent que si quelqu'un les emploie.

C.1 — « Par transfert » : une fonction, enfin

[modifier]

Ce que fait le module aujourd'hui

[modifier]

Écrire {{#invoke:Apprentissage|transfert|…}} affiche « Erreur de script : la fonction "transfert" n'existe pas ». Les pages qui ont une section « Par transfert » appellent donc la fonction « niveau ». Quand la section est vide, cela donne ceci :

Capacité
NomTypeCatégoriePuissancePrécisionPPType ConcoursCharme
Ce Pokémon n'apprend aucune capacité par montée en niveau lors de cette génération.

Rendu proposé

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageProvenance
2 capacités
UltralaserNormalPhysique15090 %5Sang-froid♥♥♥♥♥♥♥♥Pokémon Or et Argent
MimiqueVolStatut——20Intelligence♥♥—Pokémon Cristal
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeProvenance
Ce Pokémon n'apprend aucune capacité par transfert lors de cette génération.

Le tableau du haut annonce « n'apprend aucune capacité par montée en niveau » — dans une section intitulée « Par transfert ». C'est ce que lit un visiteur aujourd'hui.

Le tableau du bas annonce « par transfert », et la nouvelle colonne Provenance indique le jeu d'où vient la capacité.

Le détournement fonctionne tant que la section n'est pas vide, mais il affiche une phrase fausse dès qu'elle l'est, et il expose au message d'erreur rouge à la moindre faute de frappe.

C.2 — Les notes de bas de tableau

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPÉvénement
3 capacités
Météores1NormalSpécial60EB, DEPS
45, 60, 75LPA
—20Pokémon Day 2020
UltralaserNormalSpécial150EB, DEPS
100, 120, 150LPA
90 %EB, DEPS
90 %, 95 %LPA
5Distribution 2
ChargeNormalPhysique40EB, DEPS
30, 40, 50LPA
100 %35EB, DEPS
30LPA
Cadeau Mystère
1. Distribué uniquement au Japon.
2. Le Pokémon doit tenir un Ruban Classique.

Deux petits renvois 1 et 2 dans le tableau, et les deux notes correspondantes sous le tableau. Les renvois sont cliquables.

À quoi ça sert. Beaucoup de capacités ont une condition d'obtention qui ne tient pas dans une cellule : une distribution limitée à une région, un objet à tenir, une restriction de jeu. Aujourd'hui, ces précisions sont soit écrites dans la cellule au risque de déformer le tableau, soit perdues. Le paramètre notes= leur donne une place, et un appel s'écrit simplement note(1) dans n'importe quel champ.

C.3 — Une colonne par jeu, pour les autres méthodes

[modifier]

Rendu actuel du module en service

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
CT01Vive-AttaqueNormalPhysique40100 %30
CT02Draco-GriffeDragonPhysique80100 %15
CT03UltralaserNormalSpécial15090 %5

Rendu proposé, sans le paramètre : identique

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPP
3 capacités
CT01Vive-AttaqueNormalPhysique40100 %30
CT02Draco-GriffeDragonPhysique80100 %15
CT03UltralaserNormalSpécial15090 %5

Rendu proposé, avec colonnes-jeux=oui

[modifier]
NuméroCapacitéTypeCatégoriePuissancePrécisionPPEBDEPS
3 capacités
CT01Vive-AttaqueNormalPhysique40100 %30✔—
CT02Draco-GriffeDragonPhysique80100 %15✔✔
CT03UltralaserNormalSpécial15090 %5—✔

Les deux premiers tableaux sont identiques : sans le paramètre, rien ne bouge. Le troisième ajoute une colonne EB et une colonne DEPS : Ultralaser n'existe que dans Diamant Étincelant et Perle Scintillante, et cela se lit d'un coup d'œil.

Le problème que cela résout. Aujourd'hui, seule la méthode « par niveau » sait afficher une colonne par jeu. Pour les six autres (CT, DT, reproduction, donneur, pré-évolution, événement), le tableau ne peut rien dire de plus fin que la génération. En génération 8, Épée-Bouclier et Diamant/Perle sont même forcés dans une seule colonne, alors que leurs listes de CT diffèrent. La seule solution actuelle est d'écrire un exposant à la main dans une cellule de texte.

Aucun CSS à ajouter. Ces colonnes reprennent la classe colonne-niveau, celle des colonnes de niveau du tableau par montée en niveau. Sur écran étroit, elles défilent latéralement comme le reste du tableau (voir B.3).

C.4 — Colosseum et XD, sans catégorie de maintenance

[modifier]

Ce que fait le module aujourd'hui

[modifier]

Rendu proposé

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeBlocageJeuObtention
3 capacités
Ombre RushType inconnuCatégorie inconnue???????????? Colosseum Purification
Ombre VagueType inconnuCatégorie inconnue???????????? XD Capture
ChargeNormalPhysique3595 %35Robustesse♥♥♥♥— XD Capture

Les deux affichent « ?? » pour les statistiques. C'est normal : ces capacités n'ont pas de fiche de données. Mais le premier verse cette page dans Catégorie:Page avec un nom de capacité incorrect, comme si le nom était une faute de frappe. Vérifiez en bas de page : la catégorie y est.

Ce détail bloque un sujet entier. Les capacités Ombre de Pokémon Colosseum et Pokémon XD n'existent pas dans Module:Data/Données Capacités Génération 3. Documenter ces jeux avec les fonctions actuelles remplirait donc la catégorie de maintenance de centaines de pages parfaitement correctes, ce qui la rendrait inutilisable pour son vrai usage, repérer les fautes de frappe.

La fonction proposée affiche ces capacités en clair, avec le jeu et le mode d'obtention, sans catégoriser. Le jour où les données seront renseignées, les statistiques apparaîtront sans qu'il y ait rien à changer aux pages.

C.5 — Une colonne par génération d'origine, comme Bulbapedia

[modifier]

Ce que Bulbapedia affiche, et pas Poképédia

[modifier]

Sur Bulbapedia, un tableau « by transfer » ne met pas la provenance dans une colonne de texte : il met une colonne par génération antérieure, et coche celles où la capacité s'apprenait. Relevé sur 6 769 pages de son wiki :

Colonnes de génération remplies1234567total
Tableaux « by transfer »1 203848471213212209137 3 293

2 090 de ces tableaux, soit 63 %, en portent au moins deux, et jusqu'à sept. Sur Poképédia, les 323 sections « Par transfert depuis une autre génération » n'écrivent aucune provenance du tout : elles passent une simple liste de noms à la fonction « niveau ».

Rendu proposé

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPIIIIIIVVVIVII
5 capacités
AéropiqueVolPhysique60EB, DEPS
45, 60, 75LPA
—20—✔✔✔✔✔
Danse PlumesVolStatut——15✔✔✔✔✔✔
FeinteTénèbresPhysique60—20✔✔✔✔✔✔
VampirismeInsectePhysique80EB, DEPS
60, 75, 90LPA
100 %10Uniquement par événement ou capacité spéciale—————
MimiqueVolStatut——20—✔————

Six colonnes étroites, II à VII, chacune liée vers la sous-page de génération correspondante quand elle existe. Une coche ✔ là où la capacité s'apprenait, un tiret sinon. Le losange ✦ de Vampirisme signale une génération où elle ne s'obtenait que par événement ou capacité spéciale ; c'est l'équivalent du fond rayé de Bulbapedia.

À essayer : cliquer sur l'en-tête d'une colonne de génération. Le tri regroupe les capacités transférables depuis cette génération-là. Une colonne de texte ne permettrait pas cela.

Comment ça s'écrit. Le champ après le nom est une liste : Aéropique / 3,4,5,6,7. Les chiffres romains sont acceptés (III, IV), et une étoile marque le cas « événement seulement » (2*).

Ce qui est automatique. Une génération que personne ne remplit n'a pas de colonne, même règle que les colonnes de jeu vides du cas D.3. Ici la colonne I n'apparaît pas, parce que Nostenfer n'existe pas en première génération. Le paramètre depuis=1 force l'affichage de toutes les colonnes si besoin, et pokémon= sert seulement à cette page de test : sur une vraie fiche, le module trouve le nom tout seul.

Cette information existe, elle est vérifiable, et c'est aujourd'hui la seule chose que le tableau de transfert ne dit pas : un lecteur voit qu'une capacité s'obtient par transfert, mais pas depuis où.

Sur écran étroit. Ces colonnes sont nombreuses, jusqu'à sept, et le tableau devient large. Il défile latéralement, comme tous les tableaux d'apprentissage (voir B.3). Aucune ligne de CSS n'est demandée.

C.6 — Le bouton « Masquer » redevient lisible

[modifier]

Rendu actuel du module en service

[modifier]

Rendu proposé

[modifier]

Le même bouton, en plus grand. Mesuré dans le navigateur sur cette page même :

Module en serviceProposition
Taille du texte du bouton11,2 px14 px (celle du tableau)
Police du boutonArial, imposée par le navigateurcelle de la page
Zone cliquable69 × 14 px83 × 26 px
Compteur « 2 capacités »11,2 px12,6 px

Le font-size:80% s'applique à un texte déjà réduit : la cellule d'un tableau standard fait 14 px, et non 16. Le bouton tombait donc à 11,2 px. Sa zone cliquable, haute de 14 px, restait sous le minimum de 24 × 24 px du critère [https://www.w3.org/WAI/WCAG22/Understanding/target-size-minimum.html WCAG 2.2 « Target Size (Minimum) »] — ce qui se sent surtout au doigt, sur téléphone, là où ces tableaux sont justement le plus repliés.

Un détail au passage : un <button> n'hérite pas de la police de la page ; le navigateur lui impose Arial. Le libellé du bouton était donc, seul dans tout le tableau, dans une autre police.

C.7 — Pokémon Champions

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPP
6 capacités
TrancheNormalPhysique80100 %20
AbriNormalStatut——8
BlockhausPoisonStatut——12
TroquenardAcierPhysique35100 %16
VœuNormalStatut——8
GuillotineNormalPhysique—30 %8

Six capacités, et six statistiques qui ne sont pas celles de la génération 9 :

CapacitéGénération 9Pokémon ChampionsCe qui change
Tranche7080puissance augmentée
TroquenardPlanteAcierle type
Abri10 PP8 PPPP réduits
Blockhaus10 PP12 PPPP augmentés
Vœu12 PP8 PPPP réduits en version 1.2.0
GuillotineOHKO, précision ——, précision 30 %l'affichage des K.O. en un coup

Une fonction à part, et voici pourquoi. Pokémon Champions n'a aucune méthode d'apprentissage : ni niveau, ni CT, ni reproduction, ni donneur. Chaque Pokémon dispose d'un ensemble de capacités, et le joueur en change pour 250 Points de Victoire. Le tableau n'a donc aucune colonne d'obtention : il liste, et c'est tout. C'est aussi le choix de Bulbapedia, qui consacre à chaque espèce une page /Champions learnset.

D'où viennent les statistiques. D'une page de données propre au jeu, Module:Data/Données Capacités Champions, sur le modèle exact des neuf pages de génération. Le module la lit ; s'il ne la trouve pas, il retombe sans erreur sur les valeurs de la génération 9. Le tableau s'affiche, avec les statistiques de la série principale.

Ce que cette page de données contient. 510 capacités, relevées sur les 231 pages /Champions learnset de Bulbapedia, soit 15 499 lignes recoupées. Aucune contradiction entre ces 231 pages : chaque capacité y porte partout les mêmes valeurs.

Une capacité absente de la page de données, parce que le jeu vient de l'ajouter par exemple, s'affiche avec ses valeurs de génération 9. Rien ne casse ; la ligne est simplement à jour d'un cran de retard.

D. Cas limites

[modifier]

D.1 — Génération inconnue

[modifier]

Module:Apprentissage : génération « 42 » inconnue.

Un message court et lisible.

Ce que fait le module actuel dans le même cas. Il s'arrête sur une erreur Lua brute, du type « attempt to index field '?' (a nil value) », qui n'aide personne à comprendre qu'un paramètre est mal écrit.

Une catégorie à créer. Le message range la page dans « Page avec un paramètre d'apprentissage incorrect », sur le modèle des catégories existantes du wiki. Elle n'existe pas encore : elle apparaîtra en rouge jusqu'à ce que quelqu'un la crée, mais elle listera les pages dès maintenant. C'est la seule création demandée par cette proposition.

Seulement dans l'espace principal. Cette catégorie ne se pose que sur les articles. Une page de test, un brouillon ou une page de discussion ne s'y range pas : la catégorie doit lister des pages à corriger, pas des essais. Si vous lisez cette page hors de l'espace principal, elle n'apparaît donc pas en bas, et c'est le comportement attendu.

D.2 — Nom de capacité inconnu

[modifier]

Un lien rouge, des « ?? », et la page rangée dans Catégorie:Page avec un nom de capacité incorrect.

Comportement volontairement inchangé. Une faute de frappe doit rester visible et repérable. C'est précisément parce que cette catégorie est utile qu'il ne faut pas la remplir avec les capacités Ombre du cas C.4.

D.3 — Colonnes de jeu vides

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPSL
2 capacités
ChargeNormalPhysique40100 %35N.1
VampigrainePlanteStatut—90 %10N.7

Une seule colonne de jeu (SL). Les colonnes USUL et LGPE, sans aucune donnée, disparaissent. Comportement actuel, conservé.

D.4 — masquer=oui

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
2 capacités
ChargeNormalPhysique40100 %35N.1
VampigrainePlanteStatut—90 %10N.7

Le tableau arrive replié, avec un bouton « [+] Afficher », et le compteur reste lisible même replié.

D.5 — Un paramètre vide n'est pas un paramètre faux

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
2 capacités
ChargeNormalPhysique40100 %35N.1
VampigrainePlanteStatut—90 %10N.7

Un tableau ordinaire de génération 9, la génération par défaut, et pas de message d'erreur.

Un modèle écrit couramment génération={{{génération|}}}. Quand la page appelante ne donne rien, le module reçoit une chaîne vide, et non l'absence de paramètre. La traiter comme une génération inconnue mettrait en erreur, d'un coup, toutes les pages qui passent par ce modèle.

La même règle vaut pour type=, jeux=, notes=, identifiant=, méthodes=, colonne=, prix-unité=, depuis= et pokémon=.

D.6 — Une ligne sans nom de capacité est ignorée

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPType ConcoursCharmeLieuCoût
1 capacité
Laser GlaceGlaceSpécial95100 %10Beauté♥♥ Colisée Combat 48 PCo
1. Une note que personne n'appelle.

Une seule ligne, « Laser Glace », et le compteur à « 1 capacité ».

La première ligne du code source ne contient qu'un appel de note. Une fois l'appel retiré, il ne reste aucun nom de capacité. Le module publiait auparavant un lien vide [[]] et rangeait la page dans Catégorie:Page avec un nom de capacité incorrect.

Trois autres champs vides suivent la même règle. Un champ « Pré-évolution » ou « Événement » laissé vide donne aujourd'hui un lien vide [[]] ; il rend désormais « Inconnue » ou « Inconnu », comme le fait déjà un champ absent.

Et si toutes les lignes sont écartées ? Le tableau affiche alors la phrase « Ce Pokémon n'apprend aucune capacité… », au lieu d'un corps de tableau vide. C'est plus lisible, mais gardez en tête que la phrase peut être trompeuse : elle dit « aucune capacité » là où le wikitexte en contient, mal écrites. Un tableau vide reste donc le signe qu'il faut relire la source.

D.7 — Un nombre absurde ne casse plus la page

[modifier]
CapacitéTypeCatégoriePuissancePrécisionPPIIIIIIVVVIVIIVIII
1 capacité
UltralaserNormalSpécial15090 %5—✔✔————

Un tableau, pas une « Erreur de script ».

Les nombres reçus des pages sont arrondis et bornés avant emploi. Un depuis= fractionnaire, négatif, ou plus grand que la génération du tableau, ne produit plus d'erreur Lua. Auparavant, depuis=2.5 cherchait le chiffre romain de la génération 2,5 et arrêtait toute la page.

D.8 — Un type inconnu ne colore rien, et n'abîme rien

[modifier]

Un tableau sans couleur, et rien d'autre.

Ce que fait le module. Le paramètre type= devient une classe CSS. Le module n'en garde donc que des lettres et des tirets : une espace ou un guillemet refermerait l'attribut class et déformerait le tableau.

Le vocabulaire, lui, n'est pas restreint aux dix-huit types. MediaWiki:Gadget-couleurs.css connaît aussi des classes de jeu et de concours : xd, colosseum, beauté, robustesse. Une page peut légitimement les demander.

D.9 — La génération 10

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPVV
2 capacités
ChargeNormalPhysique40100 %35N.1
VampigrainePlanteStatut—90 %10N.7

Un tableau ordinaire, avec la colonne VV. Pas de message d'erreur.

La génération 10 n'a pas de page Module:Data/Données Capacités, et n'en a pas besoin : Module:Ressources/donneesCapacite interroge les données sémantiques dès que la génération dépasse 9. Le module actuel le gère depuis février 2026 ; la proposition le gère à l'identique.

La seule chose qui manque en génération 10, ce sont les valeurs de tri invisibles du cas B.1 : elles sont lues dans la page de données, qui n'existe pas. Les colonnes se trient alors comme elles le font aujourd'hui, par la collation de MediaWiki. Rien ne casse.

D.10 — Une virgule en trop ne fait plus dire au tableau une fausseté

[modifier]
CapacitéNiveau
NomTypeCatégoriePuissancePrécisionPPEV
2 capacités
ChargeNormalPhysique40100 %35N.15
VampigrainePlanteStatut—90 %10N.1
N.5

« N.15 » seul sur la première ligne, et « N.1 » puis « N.5 » sur la seconde. Aucun tiret.

Dans une colonne de niveau, « — » ne veut pas dire « rien à signaler » : il veut dire « ne s'apprend pas dans ce jeu ». Une virgule finale produisait un morceau vide, rendu en « — » ; le tableau affirmait alors une fausseté.