MediaWiki:Common.js
Apparence
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
/* Tout JavaScript présent ici sera exécuté par tous les utilisateurs à chaque chargement de page. */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
// On ne touche qu'aux pages dont le titre commence par "Admin:"
var pageName = mw.config.get( 'wgPageName' ); // ex. "Admin:Dashboard"
if ( pageName && pageName.indexOf( 'Admin:' ) === 0 ) {
$content.find( 'a[href]' ).each( function () {
var $a = $( this );
var href = $a.attr( 'href' ) || '';
// On ignore les ancres internes pures (#...).
if ( href.indexOf( '#' ) === 0 ) {
return;
}
$a.attr( 'target', '_blank' )
.attr( 'rel', 'noopener noreferrer' );
} );
}
} );
/* =====================================================================
Auto-calcul Département + Région (PageForms) à partir de Pays + Code postal
- France : Région = code ISO (FR-ARA, etc.), Département = numéro (ou 2A/2B, ou 971…)
- Hors France : Région = Benelux / Suisse / Canada / Reste du monde ; Département vidé
===================================================================== */
(function () {
'use strict';
if (window.__eiRegionDeptInstalledV2) return;
window.__eiRegionDeptInstalledV2 = true;
function normStr(s){ return (s || '').toString().trim(); }
function normPostal(cp){ return normStr(cp).replace(/\s+/g,''); }
function countryBucket(paysRaw) {
var p = normStr(paysRaw).toLowerCase();
if (p === 'france') return 'France';
if (p === 'belgique' || p === 'luxembourg') return 'Benelux';
if (p === 'suisse') return 'Suisse';
if (p === 'canada') return 'Canada';
return 'Reste du monde'; // "Autre" compris
}
var deptToRegion = {
'01':'FR-ARA','02':'FR-HDF','03':'FR-ARA','04':'FR-PAC','05':'FR-PAC','06':'FR-PAC','07':'FR-ARA','08':'FR-GES','09':'FR-OCC','10':'FR-GES',
'11':'FR-OCC','12':'FR-OCC','13':'FR-PAC','14':'FR-NOR','15':'FR-ARA','16':'FR-NAQ','17':'FR-NAQ','18':'FR-CVL','19':'FR-NAQ','21':'FR-BFC',
'22':'FR-BRE','23':'FR-NAQ','24':'FR-NAQ','25':'FR-BFC','26':'FR-ARA','27':'FR-NOR','28':'FR-CVL','29':'FR-BRE','2A':'FR-COR','2B':'FR-COR',
'30':'FR-OCC','31':'FR-OCC','32':'FR-OCC','33':'FR-NAQ','34':'FR-OCC','35':'FR-BRE','36':'FR-CVL','37':'FR-CVL','38':'FR-ARA','39':'FR-BFC',
'40':'FR-NAQ','41':'FR-CVL','42':'FR-ARA','43':'FR-ARA','44':'FR-PDL','45':'FR-CVL','46':'FR-OCC','47':'FR-NAQ','48':'FR-OCC','49':'FR-PDL',
'50':'FR-NOR','51':'FR-GES','52':'FR-GES','53':'FR-PDL','54':'FR-GES','55':'FR-GES','56':'FR-BRE','57':'FR-GES','58':'FR-BFC','59':'FR-HDF',
'60':'FR-HDF','61':'FR-NOR','62':'FR-HDF','63':'FR-ARA','64':'FR-NAQ','65':'FR-OCC','66':'FR-OCC','67':'FR-GES','68':'FR-GES','69':'FR-ARA',
'70':'FR-BFC','71':'FR-BFC','72':'FR-PDL','73':'FR-ARA','74':'FR-ARA','75':'FR-IDF','76':'FR-NOR','77':'FR-IDF','78':'FR-IDF','79':'FR-NAQ',
'80':'FR-HDF','81':'FR-OCC','82':'FR-OCC','83':'FR-PAC','84':'FR-PAC','85':'FR-PDL','86':'FR-NAQ','87':'FR-NAQ','88':'FR-GES','89':'FR-BFC',
'90':'FR-BFC','91':'FR-IDF','92':'FR-IDF','93':'FR-IDF','94':'FR-IDF','95':'FR-IDF',
'971':'FR-GP','972':'FR-MQ','973':'FR-GF','974':'FR-RE','976':'FR-YT','975':'FR-PM','986':'FR-WF','987':'FR-PF','988':'FR-NC'
};
function computeFR(cp) {
cp = normPostal(cp);
if (!/^\d{5}$/.test(cp)) return null;
var d3 = cp.slice(0,3);
if (deptToRegion[d3]) return { dep: d3, reg: deptToRegion[d3] };
if (cp.slice(0,2) === '20') {
var n = parseInt(cp,10);
var dep = (n <= 20199) ? '2A' : '2B';
return { dep: dep, reg: deptToRegion[dep] || '' };
}
var d2 = cp.slice(0,2);
return { dep: d2, reg: deptToRegion[d2] || '' };
}
function findField($root, fieldName) {
return $root.find('[name$="[' + fieldName + ']"]').first();
}
function setValue($field, value) {
if (!$field.length) return;
$field.val(value).trigger('change');
}
function update($form) {
var $pays = findField($form,'Pays');
var $cp = findField($form,'Code_postal');
var $dep = findField($form,'Departement');
var $reg = findField($form,'Region');
if (!$pays.length && !$cp.length) return;
var bucket = countryBucket($pays.val());
if (bucket !== 'France') {
setValue($reg, bucket);
setValue($dep, '');
return;
}
var r = computeFR($cp.val());
if (!r) return;
setValue($dep, r.dep);
setValue($reg, r.reg);
}
mw.hook('wikipage.content').add(function($content){
// On cible les formulaires PageForms (Special:FormEdit)
$content.find('form').each(function(){
var $form = $(this);
// recalcul dès qu’on touche Pays/CP
$form.on('change keyup blur', '[name$="[Pays]"], [name$="[Code_postal]"]', function(){
update($form);
});
// recalcul *juste avant* l'enregistrement (le point clé)
$form.on('submit', function(){
update($form);
});
// 1er calcul si déjà prérempli
update($form);
});
});
})();
/* PageForms: préfixe automatique pour Diffuseur/Distributeur (combobox) */
mw.loader.using(['mediawiki.util']).then(function () {
function prefixOne($root, prefix) {
// PageForms/OOUI: l'input texte est à l'intérieur du widget
var $input = $root.find('input[type="text"], input.oo-ui-inputWidget-input').first();
if (!$input.length) return;
var v = ($input.val() || '').trim();
if (!v) return;
// Si déjà un namespace (ou interwiki), on ne touche pas.
if (v.includes(':')) return;
$input.val(prefix + v);
}
function applyPrefixes() {
$('.js-ns-diffuseur').each(function () { prefixOne($(this), 'Diffuseur:'); });
$('.js-ns-distributeur').each(function () { prefixOne($(this), 'Distributeur:'); });
}
$(function () {
// À la soumission du formulaire PageForms
$(document).on('submit', 'form.pfForm, form#pfForm', function () {
applyPrefixes();
});
// Et aussi quand on quitte le champ (confort)
$(document).on('change blur', '.js-ns-diffuseur, .js-ns-distributeur', function () {
applyPrefixes();
});
});
});