FANDOM


  • Yoooo,

    (Je ne suis pas mort, même si on me voit plus trop trop en ce moment ^^ )

    Avec toute l'actualité en lien avec les différentes migrations de plateformes et de composantes (et en particulier, la migration vers une version plus récente de MediaWiki, que j'attends avec impatience ! :D ), je me suis penché sur les infoboxes utilisateur de ma communauté. Je cherche à faire des infoboxes intelligents qui regardent le nombre de modifications de la personne, et qui s'adaptent en conséquence, en changeant de couleur ou de forme au-dessus d'un certain cap.

    Bon. Pour ça, je me fait confiance pour y arriver (du moins je pense...) Le problème que je rencontre, c'est pour retrouver et utiliser ce nombre, justement.

    Je parviens à faire en sorte de mettre la main sur le nombre de modifications d'une personne en étant sur sa page utilisateur : {{ {{#Special:Editcount}}/{{PAGENAME}} }}

    (L'usage de PAGENAME n'est pas gênant, vu que ce sont des Infoboxes destinés à n'être utilisés que sur les pages utilisateur des membres)



    Mais le hic, c'est que la réponse aux mots magiques est traitée (si j'ai bien compris) comme du texte. Lorsque j'insère cette syntaxe à l'intérieur d'un {{#ifexpr, qui me semble être la meilleure option pour comparer deux nombres entre eux et prendre une décision ... Et bah ça marche pas. :/

    C'est le message "Erreur d’expression : caractère de ponctuation «  » non reconnu." qui ressort.

    En faisant des recherches, j'ai vu que la fonction parseInt() en Javascript permet de convertir un string en integer, et je me suis dit que ça pourrait peut-être marcher, mais je suis une bille absolue en js, je ne sais pas du tout comment insérer du js à une hypothétique page de modèle. xD

    Du coup dans un premier temps, j'aimerais savoir comment tester ça, pour voir si ça peut donner quelque chose. :P

    Merci.

      Chargement de l’éditeur...
    • Bonjour,

      Si tu es un ancien, tu connais les bails : lien vers le modèle que tu as essayé de faire et tutti quanti, sinon on ne pourra pas t'aider.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Ah oui mince, j'avais pas mis de lien.

      J'ai un modèle ici

        Chargement de l’éditeur...
    • Malgré tous mes tests, je ne suis parvenu à rien de concret… Je ne sais pas ça va être faisable du coup, pour le moment en tout cas, avec la bascule vers UCP, peut-être ne seront nous plus bloqué par les limites de la version 1.19 de MediaWiki.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Je me suis dit pareil. Mais du coup, le javascript n'est pas envisageable ?

        Chargement de l’éditeur...
    • Bonour, Je pense que Javascript permettrait d'arriver à tes fins. Il faudrait mettre dans le script tous les "paliers" envisageables. Je devrais pouvoir t'écrire ça, si tu me précises les paliers et quelles données tu veux que ça renvoie.

      Fujimaru Vanguard.png juin 20, 2020 à 19:08 (UTC)

        Chargement de l’éditeur...
    • Tous les paliers, c'est-à-dire le nombre de modifications pour chaque étape ?

      Dans mon idée, chaque utilisateur a une infoboxe personnelle, qui décrit son rang. Il commence avec l'infoboxe la plus basse, et plus il contribue, plus son rang augmente.

      Le premier palier va de 0 à 100 modifications, le second de 101 à 500, le troisième de de 501 à 1000, et le dernier au-dessus de 1000. Et ce qui doit être renvoyé du coup, ce sont les infoboxes correspondantes.

      Mais comme je l'ai dit, ce qui me pose vraiment problème, c'est d'avoir "l'interrupteur", c'est-à-dire le script qui permette de renvoyer une réponse différente en fonction du nombre de modifications trouvées. Dans mon idée, sur la page de l'infobox (ça pour l'instant, mais c'est juste un test), c'est le champ infobox theme="infobox-utilisateur" qui doit être variable (infobox-utilisateur plus précisément. Ça appelle le style correspondant sur la feuille de style css)

      Le script js, il va être sur Common.js, et il faut ajouter quelque chose à la page du modèle qui appelle ce script j'imagine ?

        Chargement de l’éditeur...
    • Ne vaudrait-il pas mieux jouer sur le thème de l'infobox via un module Lua ?

      Si on parvient à envoyer le nombre de contributions au module, alors retourner le thème CSS qui convient pour l'infobox sera facile à faire je pense.

      Ça fait un moment que je n'ai pas fait de Lua, mais c'est comme le vélo, ça ne s'oublie pas, donc je pourrais essayer de te bricoler un truc en m'inspirant de module que j'avais écrit il y a quelques mois.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Je ne sais pas du tout ce que c'est, un module Lua, du coup je ne saurais pas dire. x)

        Chargement de l’éditeur...
    • En fait, ce sont des scripts, un peu comme ceux en JavaScript (JS), mais écrits dans un autre langage : le Lua.

      La particularité de ces scripts, c'est qu'ils peuvent être insérés dans des pages, mais le plus souvent c'est dans des modèles qu'on les retrouve et la manière de les appeler est assez simple :
      {{#invoke|myModule|param1|param2|…}}

      Après, ma remarque était plus destinée à Fujimaru-kun pour savoir s'il n'y avait pas une meilleure solution que le JS pour répondre à ton besoin.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • J'avais pensé à Lua au tout début mais pour être honnête je m'y connais pas tellement : j'ai dû écrire au total un ou deux modules très simples. Puisque ce serait pour une intégration dans un modèle, ce serait probablement plus adapté en effet. Mais la question que je me pose, c'est s'il est possible d'accéder à l'API MW, ou s'il existe une librairie en Lua pour récupérer le nombre de modifications de l'utilisateur ?

      Car de ce côté là, c'est assez direct en JS. Et une fois fait, il suffit de lui injecter le theme souhaité (ajout d'une classe probablement).

      Fujimaru Vanguard.png juin 20, 2020 à 23:05 (UTC)

        Chargement de l’éditeur...
    • Je ne pense pas qu'il soit nécessaire de chercher à accéder à l'API MW, il suffit juste de passer {{Special:Editcount/{{PAGENAME}}}} en paramètre du module, d'apporter les traitements de formatage en numérique de la valeur et de retourner le thème à appliquer.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Je ne savais pas qu'on pouvait passer en paramètre ce genre d'expression. Ca vaut le coup d'essayer en effet !

      Fujimaru Vanguard.png juin 21, 2020 à 15:36 (UTC)

        Chargement de l’éditeur...
    • Ben en fait, ce n'est pas l'expression en soi qu'on envoie, mais la valeur que l'expression retourne. 🤔

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • La valeur est déjà interprétée au moment où le module va s'exécuter ? 😮

      Je viens d'essayer d'écrire un petit truc ici pour tester sur ma page utilisateur. Il semblerait qu'il détecte bien le paramètre, mais il n'arrive pas à le convertir en nombre avec tonumber().

      Fujimaru Vanguard.png juin 21, 2020 à 15:56 (UTC)

        Chargement de l’éditeur...
    • Oui, c'est parce que la valeur contient des espaces, c'est sur ça que je coinçais hier, il faut donc les supprimer.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • J'ai tenté d'attraper les valeurs avec expressions régulières mais en vain. Je pense que ça dépasse mes connaissances

      Fujimaru Vanguard.png juin 21, 2020 à 18:55 (UTC)

        Chargement de l’éditeur...
    • Ouais, on a l'impression que la valeur envoyée au module n'est jamais la même, c'est bizarre. 😕

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • C'est le string.match() qui fout la grouille…

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Merci d'essayer de m'aider en tout cas. Je n'ai aucune connaissance des modules que vous utilisez malheureusement. J'ai pensé à quelque chose cela dit : puisque le nombre de modifications renvoie à une valeur mise en cache, est-ce qu'il n'est pas possible que les scripts ne sachent pas trop comment interpréter cela, et n'arrivent pas à convertir le nombre ?

        Chargement de l’éditeur...
    • Celdrøn a écrit :
      C'est le string.match() qui fout la grouille… Celdrøn @fandom (discussion)

      Oui c'est comme s'il y avait des caractères bizarres dans la string... J'ai testé à nouveau quelques trucs mais sans succès

      Fire-Luigi a écrit :
      Merci d'essayer de m'aider en tout cas. Je n'ai aucune connaissance des modules que vous utilisez malheureusement. J'ai pensé à quelque chose cela dit : puisque le nombre de modifications renvoie à une valeur mise en cache, est-ce qu'il n'est pas possible que les scripts ne sachent pas trop comment interpréter cela, et n'arrivent pas à convertir le nombre ?

      Je ne sais pas. Comme on arrive à avoir la valeur en chaîne de caractères, c'est qu'on doit quand même arriver à un résultat. Mais comme dit précédemment, c'est comme s'il y avait des caractères bizarres dans la chaîne du résultat.

      Au cas où on arrive pas à se dépatouiller avec Lua, j'ai écrit une version en JS qui arrive bien à récupérer la valeur.

      Fujimaru Vanguard.png juin 22, 2020 à 17:23 (UTC)

        Chargement de l’éditeur...
    • Limite, faudrait aller demander à des personnes sachant d'où peut provenir le problème. Il y a un salon #Lua sur le Discord officiel de Fandom, on pourrait aller leur demander.

      Qu'en penses-tu Fujimaru-kun ?

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • J'y pensais aussi, peut-être que River ou AttemptToCallNil qui ont l'air plus calés auraient plus d'idées sur comment faire ! 

      Tu veux que je m'en occupe ?

      EDIT: J'ai laissé un message, à voir ce qu'ils répondent

      Fujimaru Vanguard.png juin 22, 2020 à 18:43 (UTC)

        Chargement de l’éditeur...
    • Oui j'ai vu, merci. 😉

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • BryghtShadow a répondu sur Discord. Je vais mettre une traduction de sa réponse ici, si jamais quelqu'un tombe sur ce fil et est intéressé à propos du pourquoi ça ne peut pas marcher.

      BryghtShadow a écrit :

      @Fujimaru-kun le problème avec le passage de {{Special:Editcount}} en paramètre est qu'il n'est développé qu'à la toute fin, après que l'invoke retourne du wikitext.

      Par exemple, voici les octets que Lua voit lorsqu'on lui passe {{Special:Editcount/Fujimaru-kun}}: 127,39,34,96,85,78,73,81,53,50,100,97,99,57,100,49,55,54,56,56,97,99,56,51,45,105,116,101,109,45,49,45,45,81,73,78,85,96,34,39,127 ce qui peut être interprété en '"`UNIQ52dac9d17688ac83-item-1--QINU`"'

      D'après la documentation Scribunto disponible sur Fandom Developers :

      « If preprocessor syntax such as template invocations and triple-brace arguments are included within an argument to #invoke, they will not be expanded, after being passed to Lua, until their values are being requested in Lua. If certain special tags written in XML notation, such as <pre>, <nowiki>, <gallery> and <ref>, are included as arguments to #invoke, then these tags will be converted to "strip markers" — special strings which begin with a delete character (ASCII 127), to be replaced with HTML after they are returned from #invoke. »

      Il n'est donc pas possible d'exploiter la valeur retournée par {{Special:Editcount/{{PAGENAME}}}} à l'intérieur de Lua.

      De plus, il est important de noter que l'extension EditCount n'est pas activée par défaut sur les wikis de la Plateforme Communautaire Unifiée (voir ici).

      Fujimaru Vanguard.png juin 23, 2020 à 09:39 (UTC)

        Chargement de l’éditeur...
    • Oui j'ai vu la réponse également… ça coupe court à notre idée de passer par Lua du coup.

      Ce qui me pose souci avec le JS, malgré les avantages de ce langage, le système de vérification ne permet pas de faire des modifications instantanées… ou alors, peut-être serait-il possible de maintenir les différents seuils en dehors du code en lui-même, comme dans une page "MediaWiki:Custom-*" par exemple. 🤔

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Personnellement, même si la modif n’est pas instantanée (le cache prend un jour à s’actualiser), ça me convient très bien. Actuellement, notre moyen de gérer les infoboxes utilisateurs, c’est de passer derrière à la main .... on a vu mieux. x)

        Chargement de l’éditeur...
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      Doublon
      juin 24, 2020 à 12:39
      Cette réponse a été retirée
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      doublon
      juin 24, 2020 à 12:40
      Cette réponse a été retirée
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      doublon
      juin 24, 2020 à 12:40
      Cette réponse a été retirée
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      doublon
      juin 24, 2020 à 12:40
      Cette réponse a été retirée
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      doublon
      juin 24, 2020 à 12:40
      Cette réponse a été retirée
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      doublon
      juin 24, 2020 à 12:40
      Cette réponse a été retirée
    • Fujimaru-kun
      Fujimaru-kun a retiré cette réponse pour la raison :
      doublon
      juin 24, 2020 à 12:40
      Cette réponse a été retirée
    • J'ai modifié mon début de script JS, il récupère désormais des informations depuis une page Mediawiki et ajoute un thème à une infobox portable. Mais on peut imagine qu'il fait autre chose en fonction du besoin.

      De plus il y a peut-être moyen d'optimiser, réécrire un peu le code. Je ne sais pas ce que tu en penses Celdrøn ?

      Fujimaru Vanguard.png juin 24, 2020 à 12:39 (UTC)

        Chargement de l’éditeur...
    • Fiou, c'est compliqué ce code. x)

      Si je comprends bien la structure, ça ajoute la classe portable-infobox-test en-dessous de 10 edits, portable-infobox-test2 en-dessous de 300, donc les paliers se fixent à partir de la page MediaWiki ?

        Chargement de l’éditeur...
    • Fujimaru-kun a écrit :

      De plus il y a peut-être moyen d'optimiser, réécrire un peu le code. Je ne sais pas ce que tu en penses Celdrøn ?

      Je pense qu'il y a un souci, quand je débogue, le traitement s'arrête à la première valeur inférieure au nombre de contributions, or il faudrait que ça s'arrête à la dernière valeur inférieure au nombre de contributions :

      //[…]
      settings = JSON.parse(settings);
      let sKeys = Object.keys(settings), 
          values = Object.values(settings),
          nKeys = [],
          piTheme;
       
      //Cast to numeric & sort
      sKeys.forEach((key) => nKeys.push(Number(key)));
      nKeys.sort((n, m) => n - m);
       
      for (let i = 0; i < nKeys.length; i++) {
        if(nb >= nKeys[i]) {
          piTheme = values[i];
        } else break;
      }
      if (piTheme) {
        $( '.portable-infobox').addClass('pi-theme-'+piTheme);
      }
      return;
      //[…]

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Fire-Luigi a écrit : Fiou, c'est compliqué ce code. x)

      Si je comprends bien la structure, ça ajoute la classe portable-infobox-test en-dessous de 10 edits, portable-infobox-test2 en-dessous de 300, donc les paliers se fixent à partir de la page MediaWiki ?

      Les paliers sont fixés sur la page MediaWiki oui :) Dans le cas présent, c'est test pour les personnes ayant fait plus de 10 modifs et test2 pour celles ayant fait au moins 300.

      Celdrøn a écrit : Je pense qu'il y a un souci, quand je débogue, le traitement s'arrête à la première valeur inférieure au nombre de contributions, or il faudrait que ça s'arrête à la dernière valeur inférieure au nombre de contributions :

      //[…]
      settings = JSON.parse(settings);
      let sKeys = Object.keys(settings), 
          values = Object.values(settings),
          nKeys = [],
          piTheme;
       
      //Cast to numeric & sort
      sKeys.forEach((key) => nKeys.push(Number(key)));
      nKeys.sort((n, m) => n - m);
       
      for (let i = 0; i < nKeys.length; i++) {
        if(nb >= nKeys[i]) {
          piTheme = values[i];
        } else break;
      }
      if (piTheme) {
        $( '.portable-infobox').addClass('pi-theme-'+piTheme);
      }
      return;
      //[…]

      Celdrøn @fandom (discussion)

      En effet, j'ai ajouté tes modifications et ça fonctionne mieux ! J'ai juste modifié deux trois trucs comme dit sur Discord sinon il y avait des soucis de compatibilité avec Fandom.

      Fujimaru Vanguard.png juin 25, 2020 à 18:16 (UTC)

        Chargement de l’éditeur...
    • Oui, je viens de voir ta réponse. 🙂

      Il ne reste plus qu'à « mettre en Prod » comme on dit. 😄

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Ça devrait marcher là ? Et on peut fixer plusieurs paliers ?

        Chargement de l’éditeur...
    • Oui ! Si tu veux voir/tester ce que ça fait sur mon wiki test actuellement. Tu peux ajouter le code à ton JS perso. Une fois fait et le cache purgé, si tu visites ma page Utilisateur et celle de Celdron, tu devrais remarquer que l'infobox a une couleur différente.

      Oui, tu peux définir autant de palier que tu veux. Il faut juste garder en tête que chaque palier est défini par une limite basse. Actuellement sur mon wiki test n'y a que deux paliers : un pour les personnes ayant dépassé les 10 modifs -> ce qui ajoute la classe .pi-theme-test à l'infobox -> le fond de l'infobox devient rouge, et un deuxième pour les personnes ayant dépassé 300 modifs -> ajoute la classe .pi-theme-test2 à l'infobox -> le fond de l'infobox devient bleu foncé.

      Après si tu n'utilises pas d'infobox portable pour les pages utilisateurs ou que tu veux que ça fasse autre chose n'hésite pas !

      Fujimaru Vanguard.png juin 26, 2020 à 05:15 (UTC)

        Chargement de l’éditeur...
    • D'accord, et bah c'est top ! Je vais voir ça. 

      Alors par contre, j'ai pas bien compris. Ce script, pourquoi est-ce qu'il faut que je l'ajoute à ma page ? Pour que ça marche pour tout le monde, il faut le mettre où ?

        Chargement de l’éditeur...
    • Bonjour,

      L'ajouter à ta page perso permet de tester/retoucher le script sans passer le processus de vérification du JS. C'était juste pour voir si ça te convenait en gros :)

      Si tu veux que ça fonctionne pour tous il faut le mettre sur la page MediaWiki:Wikia.js de ton wiki

      Fujimaru Vanguard.png juin 29, 2020 à 13:47 (UTC)

        Chargement de l’éditeur...
    • Ah oui, d'accord, je comprends.

      J'ai ajouté ça à ma page du coup, mais ça n'a pas l'air de marcher. L'infobox est cassé :

      Infobox cassée

        Chargement de l’éditeur...
    • Je pense que c'est parce qu'avec la configuration actuelle, tu ne rentres dans aucun des paliers. Il faudrait que tu ais au moins 10 modifications pour que le palier "test" fonctionne.

      Si tu modifies le "10" en "1" sur la page MediaWiki, ça devrait fonctionner.

      Si tu étais sur la page de Celdrøn ou la mienne, c'est peut-être parce que le code js n'a pas encore été mis en cache.

      Fujimaru Vanguard.png juin 29, 2020 à 17:56 (UTC)

        Chargement de l’éditeur...
    • J'étais sur ta page, et à vrai dire, c'est comme ça depuis 3 jours. x)

        Chargement de l’éditeur...
    • En effet, ça ne devrait pas être si long...

      Est-ce que tu as des erreurs lorsque tu ouvres la console de ton navigateur sur ma page utilisateur ? (CTRL+MAJ+J sous chrome et firefox normalement)

      Fujimaru Vanguard.png juin 29, 2020 à 20:28 (UTC)

        Chargement de l’éditeur...
    • Il faut bien penser à activer le code javascript personnel dans les Préférences.

      Celdrøn @fandom (discussion)

        Chargement de l’éditeur...
    • Ah bah d'accord. x)

      Du coup oui, ça marche bien, en activant ça dans les préférences. xD

      Donc le script ce qu'il fait, si j'ai bien compris, c'est qu'il va se balader sur la page des utilisateurs, et il commence par retrouver leur nombre de modifs. Ensuite, en fonction de ça, il remplace la classe "parenttab" de l'infoboxe, pour attribuer "test" ou "test2" qui proviennent de MediaWiki:Custom-Count-Settings; ces classes qui doivent être décrites sur la page css habituelle. C'est bien ça ?

      J'ai pas trouvé parenttab sur Wikia.css cela dit, donc j'imagine que c'est une classe par défaut ? Est-ce qu'on peut imaginer de créer soit-même sa classe par défaut et de la mettre à la place ?

        Chargement de l’éditeur...
    • J'ai pu tester le script chez nous, et c'est top !

      Par contre, il y a des exceptions nécessaires.

      Sur ma page utilisateur (par exemple, c'est juste un exemple), j'ai une infoboxe spéciale, commune à tous les administrateurs. Les modérateurs aussi ont une infoboxe spéciale, ainsi que les robots.

      J'aurais besoin que le script ne s'applique pas sur ces infoboxes spéciales (qui sont les Infobox Sage, Infobox Garde et Infobox Robot).

      Parce que sinon, ça fait de la collision d'infoboxes, qui ressemble à ça :

      Collision Infoboxes

      En tout cas, hors cas spéciaux, ça marche bien. Le script a mis quelques minutes à s'actualiser, c'est cool.

      EDIT : autrement, à coup de !important, je peux faire en sorte que les paramètres importants des infoboxes en questions soient maintenus. Mais du coup, ça fait 2 appels (la page css de l'infoboxe et le script, qui ne sert à rien), donc je préférerais quand même que ça soit restrictif. ^^

        Chargement de l’éditeur...
    • Il doit y avoir moyen de préciser le sélecteur pour que ça ne sélectionne pas les infoboxes spéciales. Pourrais-tu donner un lien vers l'infobox "normale" ?

      Fujimaru Vanguard.png juin 30, 2020 à 11:48 (UTC)

        Chargement de l’éditeur...
    • L'infoboxe de base ? C'est Infobox Utilisateur. Et les infoboxes à exclure du coup, ce sont celles que j'ai mises plus haut. x)

      Je n'ai pas encore installé le script par contre, il est sur ma page js.

        Chargement de l’éditeur...
    • J'ai tenté un truc et je crois que ça marche.

      $( '.portable-infobox')&&$(':not(:contains('.portable-infobox .pi-theme-infobox-utilisateur-sage'))').addClass('pi-theme-'+piTheme);

      Je lui demande de faire ça si ça contient pas la classe de l'infoboxe sage, et je crois que ça fonctionne.

        Chargement de l’éditeur...
    • Je pense que ceci devrait être suffisant :
      $( '.portable-infobox .pi-theme-infobox-utilisateur').addClass('pi-theme-'+piTheme);

      Le theme infobox-utilisateur n'est utilisé que sur l'infobox utilisateur de base :)

      Fujimaru Vanguard.png juin 30, 2020 à 13:00 (UTC)

        Chargement de l’éditeur...
    • Ah bah oui, prendre le problème à rebrousse poils, ça allège le code. Merci. :)

        Chargement de l’éditeur...
    • Un utilisateur de FANDOM
        Chargement de l’éditeur...
Sélectionner ce message
Vous avez sélectionné ce message !
Voir qui a sélectionné ce message
Sauf mention contraire, le contenu de la communauté est disponible sous licence CC-BY-SA .