Skip to content

About

Extension pour Mediawiki

Resources

Stars

3 stars

Watchers

1 watching

Forks

Repository files navigation

Extended Inputbox

version license MediaWiki

Extension MediaWiki qui ajoute des formulaires en fenêtre modale aux balises <inputbox> de l'extension InputBox. Elle permet notamment de recueillir plusieurs valeurs avant de créer ou modifier une page, de précharger un modèle et de personnaliser le bouton.

Version actuelle : 3.1.0. Compatible avec MediaWiki 1.39+ et avec l'extension InputBox.

Prérequis

  • MediaWiki 1.39 ou supérieur
  • Extension InputBox installée et activée

Installation

  1. Installez et activez l'extension InputBox.

  2. Téléchargez ou clonez ce dépôt dans le dossier extensions/ de votre installation MediaWiki :

    cd extensions/
    git clone https://github.com/Janusdevikidia/Extended-Inputbox.git
  3. Ajoutez la ligne suivante dans LocalSettings.php :

    wfLoadExtension( 'Extended-Inputbox' );
  4. Lancez la maintenance de MediaWiki si votre installation le demande, puis purgez une page de test (?action=purge).

Exemple minimal

Cet exemple ouvre un formulaire, demande le titre de la nouvelle page et crée la page sous le préfixe Brouillon:. Le premier champ correspond à $1 ; page=$1 est donc remplacé par sa valeur.

<inputbox>
type=create
prefix=Brouillon:
page=$1
buttonlabel=Créer un brouillon
popup-title=Créer un brouillon
popup-field=titre|text|Titre du brouillon|||yes
</inputbox>

La valeur des champs n'est pas interpolée par MediaWiki dans page= : utilisez $1, $2, etc. ou définissez l'ordre avec preload-params.

Exemple avec liste, condition et préchargement

Le modèle Modèle:Préchargement fiche peut employer $1 et $2. Ici, ils reçoivent respectivement titre et categorie, car cet ordre est déclaré explicitement.

<inputbox>
type=create
page=$1
preload=Modèle:Préchargement fiche
preload-params=titre,categorie
buttonlabel=Créer la fiche
popup-title=Nouvelle fiche
popup-text=Renseignez les informations ci-dessous.
popup-field=titre|text|Titre|||yes
popup-field=categorie|select|Catégorie|Histoire,Géographie,Sciences||yes
popup-field=periode|text|Période||show-if:categorie=Histoire|non
</inputbox>

Dans le dernier champ, show-if:categorie=Histoire le rend visible seulement lorsque « Histoire » est sélectionné. popup-text est un texte d'introduction et doit être associé à popup-title ou à au moins un popup-field.

Exemple avec cases à cocher et champs obligatoires

<inputbox>
type=create
page=$1
buttonlabel=Signaler un problème
popup-title=Signaler un problème
popup-field=titre|text|Titre du signalement|||yes
popup-field=categories|checkbox|Catégories concernées|Contenu,Mise en forme,Source
popup-field=details|textarea|Détails
</inputbox>

Ici, categories est une case à cocher multiple : les valeurs sélectionnées sont toujours jointes avec , dans la variable correspondante. titre est obligatoire (required=yes) ; details est facultatif.

Publication directe (sans écran d'édition)

Ajoutez popup-skip-edit=yes pour publier à la validation de la fenêtre. Il est recommandé de fournir un preload : son contenu est récupéré, puis les variables $1, $2, etc. y sont remplacées avant l'enregistrement.

<inputbox>
type=create
page=$1
preload=Modèle:Préchargement annonce
preload-params=titre,texte
popup-skip-edit=yes
buttonlabel=Publier l'annonce
popup-title=Nouvelle annonce
popup-field=titre|text|Titre|||yes
popup-field=texte|textarea|Texte|||yes
</inputbox>

Sans popup-skip-edit=yes, l'utilisateur est redirigé vers l'éditeur MediaWiki ; le préchargement et les paramètres restent alors disponibles via le mécanisme standard d'InputBox.

Paramètres ajoutés

Les paramètres standards d'InputBox (type, page, prefix, preload, buttonlabel, default, summary, etc.) restent disponibles.

Paramètre Description
popup-title Titre de la fenêtre modale.
popup-text Texte affiché au début de la fenêtre.
popup-field Ajoute un champ ; son format est détaillé ci-dessous.
skip-edit=yes Publie directement la page après validation de la fenêtre. Nécessite une popup.
required-marker=(obligatoire) Remplace le marqueur visuel des champs requis pour cette popup. Laissez la valeur vide pour ne pas l'afficher ; le défaut est défini par la traduction du wiki. Alias : popup-required-marker.
preload-params=a,b,c Associe $1, $2, $3 aux champs nommés a, b, c. Alias : popup-preload-params, preloadparams.
button-bgcolor ou button-bg Couleur CSS de fond du bouton.
button-border-color ou button-border Couleur CSS de bordure du bouton.

popup-preload est obsolète : utilisez le paramètre standard preload.

Format de popup-field

popup-field=nom|type|libellé|options|show-if|required

Seuls nom, type et libellé sont obligatoires. Conservez les séparateurs vides (||) pour atteindre un paramètre situé plus loin dans la liste.

Position Nom Description
1 nom Identifiant du champ ; sert dans show-if et preload-params. Évitez les doublons.
2 type text, textarea, select, radio, checkbox ou checkboxes.
3 libellé Libellé affiché dans le formulaire.
4 options Liste séparée par des virgules pour select, radio et checkbox ; valeur initiale pour text et textarea.
5 show-if Condition de visibilité, sous la forme show-if:champ=valeur. & signifie ET, , signifie OU.
6 required yes rend le champ obligatoire. Toute autre valeur (ou l'absence de segment) le laisse facultatif.

Les virgules séparent les options et les barres verticales séparent les segments : une option ne peut donc pas contenir ces caractères tels quels.

Ce format volontairement court n'offre pas de valeur présélectionnée pour select/radio/checkbox, pas de texte indicatif (« placeholder »), pas d'aide contextuelle, pas de contrainte de longueur (minlength/maxlength) et pas de séparateur personnalisable pour les cases cochées :

  • un select ou un radio s'ouvre toujours sur son premier choix ;
  • un checkbox démarre toujours sans case cochée ;
  • les valeurs cochées d'un checkbox sont toujours jointes avec , ;
  • text et textarea peuvent toujours recevoir une valeur initiale via options (4ᵉ segment), qui est alors un texte simple plutôt qu'une liste.

Couleurs de bouton

<inputbox>
type=create
buttonlabel=Créer une page
button-bgcolor=#3366cc
button-border-color=#1a3d7c
</inputbox>

Les formats usuels de couleur CSS sont acceptés (#3366cc, rgb(...), hsl(...) et les noms CSS). Une couleur invalide laisse le formulaire utilisable et affiche une erreur sous celui-ci.

Nouveautés de la 3.1.0

Version centrée sur Special:Extended-Inputbox (aucune migration) :

  • Options avancées alignées. « Masquer le marqueur », « Masqué (hidden=yes) » et « Publier directement (skip-edit=yes) » forment une colonne unique : cases sur le même axe, libellés alignés. Titre et texte de la popup passent en pleine largeur.
  • Annuler / mettre à jour après insertion. Après « Insérer ici », une barre (visible uniquement à ce moment-là) propose trois icônes : mettre à jour le bloc dans le texte avec l'état actuel du constructeur, annuler l'ajout (retire le bloc et le saut de ligne ajouté), fermer la barre en gardant le bloc. Le bloc est retrouvé même si le texte a bougé ; s'il a été modifié à la main, un message l'explique. L'insertion passe par l'historique du navigateur (Ctrl+Z fonctionne).
  • Modifier un formulaire existant. Les <inputbox> de la page chargée sont listés (hors <nowiki>, <pre>, <syntaxhighlight>) ; « Modifier dans le constructeur » les charge dans les onglets, et la barre ci-dessus permet de les mettre à jour. Les lignes que le constructeur ne gère pas (width=, break=…) sont conservées telles quelles.
  • Garde-fous. Avertissement avant de quitter ou recharger avec du texte non publié, confirmation avant de remplacer le formulaire en cours, bouton « Réinitialiser le formulaire », Entrée dans le champ titre = charger la page.
  • Icônes OOUI déclarées explicitement, types search2/fulltext proposés, couleurs des panneaux compatibles avec les thèmes sombres.

Nouveautés de la 3.0.1

Version de correction (aucune migration nécessaire) :

  • Publication directe plus sûre. skip-edit ne remplace plus une page existante (createonly ; message dédié), demande confirmation en affichant la page cible, et refuse les pages MediaWiki:, .js, .css et .json.
  • Appariement wikitexte ↔ HTML fiabilisé. <nowiki /> auto-fermant ne masque plus le reste de la page ; les exemples dans <syntaxhighlight>, <source> et <pre> sont ignorés ; les <inputbox> issus de modèles sont toujours pris en compte ; aperçus, anciennes révisions et diffs ne sont plus traités avec le wikitexte de la version courante.
  • Performances. Les blocs <inputbox> sont mis en cache par révision (et page_touched) : plus d'expansion de modèles à chaque vue.
  • Couleurs. La syntaxe moderne (rgb(0 0 0 / 50%), hsl(120deg 100% 50%), .5) est acceptée côté serveur comme côté navigateur ; la couleur du texte du bouton est choisie pour rester lisible sur fond clair.
  • Variables et mots magiques. $1…$n remplacés en une seule passe ($10+ géré, pas de re-substitution) ; PAGENAME/FULLPAGENAME sans underscores ; plus d'interprétation de $& dans les valeurs.
  • Sécurité. Messages d'erreur d'API échappés ; console.log de debug retiré.
  • Special:Extended-Inputbox. Glisser-déposer limité à la poignée, avertissement si | est saisi dans un champ, createonly à la publication d'une nouvelle page, marqueur « requis » traduisible, CSS des grilles ajoutée.
  • Les boutons de popup ne sont désactivés que si JavaScript est actif.

Nouveautés de la 3.0.0

Cette version continue d'enrichir Special:Extended-Inputbox, toujours sans changer le format <inputbox> (aucune migration nécessaire) :

  • Aperçu de la popup. Un bouton « Aperçu de la popup » ouvre un dialogue qui reproduit fidèlement l'apparence de la popup telle que configurée (titre, texte d'introduction, champs, conditions show-if, marqueur de champ requis...), sans rien publier. Une bannière rappelle qu'il s'agit d'un aperçu non fonctionnel.
  • Options avancées repliées. Les réglages moins utilisés (marqueur de champ requis, couleurs de bouton, publication directe) sont désormais regroupés dans un bloc repliable « Options avancées », pour ne plus encombrer le formulaire principal.
  • Repérage visuel des champs incomplets. En plus de l'avertissement textuel déjà affiché sous le wikitexte généré, la ligne du champ fautif (nom manquant, libellé manquant ou nom dupliqué) est désormais surlignée directement dans la liste des champs.

Nouveautés de la 2.5.1

Cette version corrige et enrichit Special:Extended-Inputbox, sans changer le format <inputbox> lui-même (aucune migration nécessaire depuis la 2.5.0) :

  • Message d'erreur de droits détaillé. Auparavant, le panneau « Page cible » affichait systématiquement le même message générique (« Vous n'avez pas les droits nécessaires pour modifier cette page ») dès que le test de permission échouait, sans indiquer la raison réelle (page protégée, blocage, wiki en lecture seule, filtre anti-abus...). Ce test est un comportement normal de MediaWiki — pas un bug — mais le message ne donnait aucun moyen de comprendre pourquoi. Le détail renvoyé par l'API est maintenant affiché quand il est disponible (ex. « Vous n'avez pas les droits nécessaires pour modifier cette page : Cette page a été protégée... »), aussi bien au chargement qu'à la publication.
  • Conflit de modification explicite. Un échec editconflict lors de la publication affiche désormais un message dédié invitant à recharger la page cible, plutôt que le message générique précédent.
  • Bouton « Copier le wikitexte ». Le bloc « Wikitexte généré » propose désormais un bouton de copie presse-papiers, utilisable même sans avoir chargé de page cible ni en avoir les droits d'édition — utile pour préparer un formulaire à transmettre à quelqu'un d'autre (ex. un administrateur).
  • Validation en direct du formulaire en construction. Une zone d'avertissement apparaît sous le wikitexte généré pour signaler, en temps réel : une couleur de bouton invalide (button-bgcolor=, button-border-color=), un nom de champ dupliqué, ou un champ de popup auquel il manque un nom et/ou un libellé (et qui, de ce fait, n'apparaît pas dans le wikitexte généré). Ces avertissements reflètent exactement les contrôles déjà appliqués côté serveur (ExtendedInputboxConfig::parseSingleConfig) ; ils préviennent avant la publication plutôt que de laisser l'auteur découvrir le problème après coup sur la page cible.
  • Indicateur de statut pendant les appels réseau. Un petit indicateur textuel (« Chargement… », « Génération de l'aperçu… », « Publication… ») s'affiche désormais à côté du bouton « Charger la page » pendant les appels à l'API.

Special:Extended-Inputbox

Cette extension fournit aussi une page spéciale Special:Extended-Inputbox : une interface visuelle pour construire un bloc <inputbox> (avec ses champs de popup) sans écrire le wikitexte à la main, puis l'insérer directement dans une page du wiki.

Déroulé :

  1. Construction : renseignez les paramètres généraux (type, page, buttonlabel, preload, couleurs de bouton, etc.) et ajoutez des champs de popup (popup-field) via le bouton « Ajouter un champ ». Les lignes de champs peuvent être réordonnées par glisser-déposer. Le wikitexte correspondant est généré en direct dans le panneau de gauche, sous les onglets « Paramètres généraux » et « Champs de la popup ».
  2. Chargement de la page cible : saisissez le titre d'une page du wiki puis cliquez sur « Charger la page ». Le wikitexte actuel de la page s'affiche dans la zone d'édition ; si la page n'existe pas encore, une notification l'indique et elle sera créée à la publication.
  3. Insertion : placez le curseur à l'endroit souhaité dans la zone d'édition puis cliquez sur « Insérer ici » pour y injecter le bloc <inputbox> généré.
  4. Prévisualisation et publication : « Prévisualiser » affiche un rendu de la page via l'API (action=parse) ; « Publier » enregistre la page (action=edit, avec jeton CSRF) puis redirige vers celle-ci.

L'accès à Special:Extended-Inputbox nécessite le droit edit ; les vérifications propres à la page cible (protection, blocage, conflit d'édition...) restent appliquées par l'API MediaWiki au moment de la publication et sont signalées dans l'interface.

Performances et fonctionnement

Les configurations sont analysées côté serveur pendant le rendu : les couleurs et les attributs nécessaires à la popup sont donc déjà présents dans le HTML. Le module OOUI, plus lourd, n'est chargé que lorsqu'au moins une popup est réellement configurée. Aucun appel API client n'est fait pour une InputBox présente dans le rendu initial.

Un petit module de secours reste chargé sur les pages contenant une InputBox : il couvre les formulaires ajoutés dynamiquement (prévisualisation, gadget, VisualEditor). Dans ce cas rare, il lit la configuration de la page via l'API.

Mots magiques dans preload et default

Les mots magiques {{CURRENTYEAR}}, {{CURRENTTIME}}, etc. sont toujours exprimés en UTC, comme dans MediaWiki natif. Les variantes {{LOCALYEAR}}, {{LOCALTIME}}, etc. reflètent le fuseau horaire configuré par $wgLocaltimezone sur le wiki — pas le fuseau du navigateur de la personne qui remplit le formulaire. Si $wgLocaltimezone n'est pas défini (valeur par défaut UTC), LOCAL* et CURRENT* sont identiques.

Migration depuis la v2

La v2.5 simplifie le format de popup-field en retirant les segments default, separator, placeholder, maxlength, minlength et help. Le format passe de 12 à 6 segments :

# v2
popup-field=nom|type|libellé|options|show-if|default|separator|required|placeholder|maxlength|minlength|help

# v2.5
popup-field=nom|type|libellé|options|show-if|required

required change donc de position (8ᵉ segment en v2, 6ᵉ en v2.5). Pour mettre à jour une InputBox existante :

  1. repérez la valeur du 8ᵉ segment (required, yes ou vide) ;
  2. reconstruisez la ligne avec seulement les 6 premiers rôles : nom|type|libellé|options|show-if|required ;
  3. si vous utilisiez default pour présélectionner un select/radio/checkbox, cette présélection n'est plus possible : le champ s'ouvrira sur son état initial natif (premier choix pour select/radio, aucune case cochée pour checkbox) ;
  4. si vous utilisiez placeholder, help, minlength ou maxlength, ces indications doivent être déplacées dans popup-text ou dans le libellé du champ, si elles restent nécessaires ;
  5. si vous utilisiez separator pour joindre les cases cochées, le séparateur est désormais toujours , .

Après une mise à jour, purgez les pages qui utilisent l'extension. Testez en particulier les InputBox générées par des modèles, ainsi que les pages comportant plusieurs InputBox : la correspondance est faite dans leur ordre d'apparition.

About

Extension pour Mediawiki

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages