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.
- MediaWiki 1.39 ou supérieur
- Extension InputBox installée et activée
-
Installez et activez l'extension
InputBox. -
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 -
Ajoutez la ligne suivante dans
LocalSettings.php:wfLoadExtension( 'Extended-Inputbox' );
-
Lancez la maintenance de MediaWiki si votre installation le demande, puis purgez une page de test (
?action=purge).
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.
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.
<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.
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.
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.
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
selectou unradios'ouvre toujours sur son premier choix ; - un
checkboxdémarre toujours sans case cochée ; - les valeurs cochées d'un
checkboxsont toujours jointes avec,; textettextareapeuvent toujours recevoir une valeur initiale viaoptions(4ᵉ segment), qui est alors un texte simple plutôt qu'une liste.
<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.
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/fulltextproposés, couleurs des panneaux compatibles avec les thèmes sombres.
Version de correction (aucune migration nécessaire) :
- Publication directe plus sûre.
skip-editne remplace plus une page existante (createonly; message dédié), demande confirmation en affichant la page cible, et refuse les pagesMediaWiki:,.js,.csset.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 (etpage_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…$nremplacés en une seule passe ($10+géré, pas de re-substitution) ;PAGENAME/FULLPAGENAMEsans underscores ; plus d'interprétation de$&dans les valeurs. - Sécurité. Messages d'erreur d'API échappés ;
console.logde 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.
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.
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
editconflictlors 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.
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é :
- 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 ». - 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.
- 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é. - 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.
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.
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.
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 :
- repérez la valeur du 8ᵉ segment (
required,yesou vide) ; - reconstruisez la ligne avec seulement les 6 premiers rôles :
nom|type|libellé|options|show-if|required; - si vous utilisiez
defaultpour présélectionner unselect/radio/checkbox, cette présélection n'est plus possible : le champ s'ouvrira sur son état initial natif (premier choix pourselect/radio, aucune case cochée pourcheckbox) ; - si vous utilisiez
placeholder,help,minlengthoumaxlength, ces indications doivent être déplacées danspopup-textou dans le libellé du champ, si elles restent nécessaires ; - si vous utilisiez
separatorpour 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.