« MediaWiki:Common.js » : différence entre les versions
Apparence
mAucun résumé des modifications |
mAucun résumé des modifications |
||
| (Une version intermédiaire par le même utilisateur non affichée) | |||
| Ligne 26 : | Ligne 26 : | ||
(function () { | (function () { | ||
'use strict'; | '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 normStr(s) { | |||
function normPostal(cp) { | |||
function countryBucket(paysRaw) { | function countryBucket(paysRaw) { | ||
var | var p = normStr(paysRaw).toLowerCase(); | ||
if ( | if (p === 'france') return 'France'; | ||
if ( | if (p === 'belgique' || p === 'luxembourg') return 'Benelux'; | ||
if ( | if (p === 'suisse') return 'Suisse'; | ||
if ( | if (p === 'canada') return 'Canada'; | ||
return 'Reste du monde'; // "Autre" compris | |||
return 'Reste du monde'; | |||
} | } | ||
var deptToRegion = { | var deptToRegion = { | ||
'01': 'FR-ARA', '02': 'FR-HDF', '03': 'FR-ARA', '04': 'FR-PAC', '05': 'FR-PAC', | '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', | |||
'11': 'FR-OCC', '12': 'FR-OCC', '13': 'FR-PAC', '14': 'FR-NOR', '15': 'FR-ARA', | '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', | |||
'22': 'FR-BRE', '23': 'FR-NAQ', '24': 'FR-NAQ', '25': 'FR-BFC', '26': 'FR-ARA', | '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', | |||
'30': 'FR-OCC', '31': 'FR-OCC', '32': 'FR-OCC', '33': 'FR-NAQ', '34': 'FR-OCC', | '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', | |||
'40': 'FR-NAQ', '41': 'FR-CVL', '42': 'FR-ARA', '43': 'FR-ARA', '44': 'FR-PDL', | '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', | |||
'50': 'FR-NOR', '51': 'FR-GES', '52': 'FR-GES', '53': 'FR-PDL', '54': 'FR-GES', | '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' | ||
'60': 'FR-HDF', '61': 'FR-NOR', '62': 'FR-HDF', '63': 'FR-ARA', '64': 'FR-NAQ', | |||
'70': 'FR-BFC', '71': 'FR-BFC', '72': 'FR-PDL', '73': 'FR-ARA', '74': 'FR-ARA', | |||
'80': 'FR-HDF', '81': 'FR-OCC', '82': 'FR-OCC', '83': 'FR-PAC', '84': 'FR-PAC', | |||
'90': 'FR-BFC', '91': 'FR-IDF', '92': 'FR-IDF', '93': 'FR-IDF', '94': 'FR-IDF', | |||
'971': 'FR-GP', '972': 'FR-MQ', '973': 'FR-GF', '974': 'FR-RE', '976': 'FR-YT', | |||
}; | }; | ||
function | function computeFR(cp) { | ||
cp = normPostal(cp); | |||
if (!/^\d{5}$/.test(cp)) return null; | if (!/^\d{5}$/.test(cp)) return null; | ||
var d3 = cp.slice(0,3); | |||
var d3 = cp. | if (deptToRegion[d3]) return { dep: d3, reg: deptToRegion[d3] }; | ||
if (d3 | |||
if (cp.slice(0,2) === '20') { | |||
if (cp. | var n = parseInt(cp,10); | ||
var n = parseInt(cp, 10); | |||
var dep = (n <= 20199) ? '2A' : '2B'; | var dep = (n <= 20199) ? '2A' : '2B'; | ||
return { | return { dep: dep, reg: deptToRegion[dep] || '' }; | ||
} | } | ||
var d2 = cp.slice(0,2); | |||
var d2 = cp. | return { dep: d2, reg: deptToRegion[d2] || '' }; | ||
return { | |||
} | } | ||
function findField($root, fieldName) { | function findField($root, fieldName) { | ||
return $root.find('[name$="[' + fieldName + ']"]').first(); | |||
} | |||
function setValue($field, value) { | |||
if (!$field.length) return; | |||
if ($ | $field.val(value).trigger('change'); | ||
} | } | ||
function | function update($form) { | ||
var $pays = findField($form,'Pays'); | |||
var | 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 ( | if (bucket !== 'France') { | ||
setValue($reg, bucket); | |||
$ | setValue($dep, ''); | ||
return; | |||
} | } | ||
var r = computeFR($cp.val()); | |||
if ($ | if (!r) return; | ||
setValue($dep, r.dep); | |||
setValue($reg, r.reg); | |||
} | } | ||
function | 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) { | ||
var | // 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 (! | 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(); | |||
}); | |||
}); | }); | ||
} | }); | ||
Dernière version du 16 décembre 2025 à 12:08
/* 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();
});
});
});