Aller au contenu

MediaWiki:Common.js

De Éditions Indépendantes

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();
    });
  });

});