Aller au contenu

MediaWiki:Gadget-CommonEdit.js

Une page de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 29 mars 2018 à 15:07 et modifiée en dernier par Od1n (discuter | contributions) (avec le module jquery.throttle-debounce, debouncing de l'enregistrement localStorage pour ne pas défoncer le disque dur simplement en parcourant le menu). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
 * Applications spécifiques aux pages de modification.
 *
 * Todo : migrer celles qui ne sont pas vitales dans les gadgets
 *
 * <nowiki>
 */

// Penser à maintenir à jour les dépendances dans [[MediaWiki:Gadgets-definition]] !

/**
 * Désactiver le bouton Sauvegarder à la première édition
 * English : Force IP to preview before saving changes.
 * Copyright Marc Mongenet, 2006
 * Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners
 */
function forcePreview($) {
    $('#wpSave')
        .prop('disabled', true)
        .val('Publier (après prévisualisation)');
    $('#wpSaveWidget')
        .removeClass('oo-ui-widget-enabled')
        .addClass('oo-ui-widget-disabled');
}
if (mw.config.get('wgUserName') === null && mw.config.get('wgAction') === 'edit') {
    $(forcePreview);
}

/**
 * Fonctions de remplissage automatique
 */

function InitArbReq() {
    return "<!-- Enregistrer la page pour l'initialiser puis suivre les instructions -->\n" +
           "{{subst:Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}\n" +
           "<!-- N'oubliez pas d'ajouter un lien vers cette page sur [[Wikipédia:Comité d'arbitrage/Arbitrage]] -->";
}

function InitDiscArbReq() {
    return "<!-- Enregistrer la page pour l'initialiser -->\n" +
           "{{subst:Discussion Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}";
}

var init_if_empty = [
    ["Discussion_Wikipédia:Comité_d'arbitrage/Arbitrage/", InitDiscArbReq],
    ["Wikipédia:Comité_d'arbitrage/Arbitrage/", InitArbReq],
];

/**
 * Remplit la zone d'édition si elle est vide avec le texte retourné par
 * un pointeur de fonction sélectionné par le nom de la page.
 */
function InitPage( $ ) {
    // Tester si wpTextbox1 existe sinon il y a une erreur lorsqu'on
    // ouvre l'historique d'une page qui match un des noms de init_if_empty[],
    // tester seulement le nom de la page n'est pas suffisant.
    var text_area = document.getElementById('wpTextbox1');
    if (!text_area) return;
    if (text_area.value.length > 0) return;
    var pageName = mw.config.get( 'wgPageName' );
    for (var i = 0; i < init_if_empty.length; ++i) {
        var page_match = init_if_empty[i][0];
        if (pageName.indexOf(page_match) === 0) {
            text_area.value = init_if_empty[i][1]();
            break;
        }
    }
}
$( InitPage );


/**
 * Caractères spéciaux
 *
 * Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux.
 * Ecrit par Zelda, voir sur [[Utilisateur:Zelda/Edittools.js]].
 * Remplace l'ancienne fonction par une variante plus rapide.
 */

/**
 * Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux
 * Les caractères spéciaux sont définis dans MediaWiki:Edittools
 */
function addCharSubsetMenu( $ ) {
    var $specialchars = $('#specialcharsets');
    if (!$specialchars.length) return;

    var saveLastSelected = $.debounce(500, function (lastSelected) {
        mw.storage.set('CharSubset-lastSelected', lastSelected);
    });

    // Construction du menu de sélection
    var $charSubsetSelect = $('<select>')
        .change(function () {
            chooseCharSubset(this.selectedIndex);
            saveLastSelected(this.value);
        });

    refreshCharSubsetSelect($specialchars, $charSubsetSelect);

    $specialchars.prepend($charSubsetSelect);
}

/**
 * Ajout des options au menu et restauration de la dernière position
 */
function refreshCharSubsetSelect($specialchars, $charSubsetSelect) {
    $charSubsetSelect.empty();

    var titles = [];
    $specialchars.find('p').each(function () {
        titles.push(this.title);
    });

    $.each(titles, function () {
        $charSubsetSelect.append($('<option>').text(this));
    });

    var lastSelected = mw.storage.get('CharSubset-lastSelected');
    var position = titles.indexOf(lastSelected);
    if (position !== -1) {
        $charSubsetSelect.val(lastSelected);
        chooseCharSubset(position);
    } else {
        chooseCharSubset(0); /* default subset */
    }
}

/**
 * Affichage du jeu de caractères sélectionné
 */
function chooseCharSubset(index) {
    $('#specialcharsets').find('p').each(function (i, p) {
        // Initialisation du jeu de caractères sélectionné
        if (i === index) {
            initializeCharSubset(p);
        }
        // Affichage du jeu sélectionné, masquage des autres
        p.style.display = (i === index) ? 'inline' : 'none';
    });
}

/**
 * Initialisation du jeu de caractères sélectionné
 * Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les
 * caractères contenus dans les sous-spans du paragraphe
 */
function initializeCharSubset(p) {
    // traitement des spans du paragraphe
    $(p).find("span").each(function (_, span) {
        // span déjà traité
        if (span.childNodes.length === 0 || span.childNodes[0].nodeType !== 3) return;

        // on parse le contenu du span
        var chars = span.childNodes[0].nodeValue
            .replace(/\\ /g, "__ESCAPED_SPACE__")
            .trim()
            .split(" ")
            .map(function (value) {
                return value.replace(/__ESCAPED_SPACE__/g, " ");
            });

        // création des liens mw.toolbar.insertTags(tagBegin, tagEnd, defaultValue)
        var newElements = [];
        for (var k = 0; k < chars.length; ++k) {
            var tags = chars[k].split("+");
            var tagBegin = tags[0];
            var tagEnd = tags.length > 1 ? tags[1] : "";
            var defaultValue = tags.length > 2 ? tags[2] : "";

            var callback = (function (tagBegin, tagEnd, defaultValue) {
                return function (e) {
                    e.preventDefault();
                    mw.toolbar.insertTags(tagBegin, tagEnd, defaultValue);
                };
            })(tagBegin, tagEnd, defaultValue);

            var $a = $("<a>")
                .attr("href", "#")
                .text(tagBegin + tagEnd)
                .click(callback);

            newElements.push($a, " ");
        }

        // remplacement du contenu
        $(span).empty().append(newElements);
    });
}

$(addCharSubsetMenu);


// Les deux fonctions ci-dessous ne doivent pas être contenues
// dans des "mw.loader.using" ou autres "document ready",
// de sorte à être définies sitôt ce fichier chargé.

/**
 * Permet d'ajouter un jeu de caractères spéciaux dans le menu déroulant
 * paramètres :
 * - nom du jeu de caractères
 * - contenu HTML. Les caractères spéciaux doivent être dans des spans
 *   exemple : "caractères : <span>â ê î ô û</span>"
 */
window.realAddSpecialCharsetHTML = function (title, charsHTML) {
    $(function ($) {
        var $specialchars = $('#specialcharsets');
        if (!$specialchars.length) return;

        // Ajout des caractères spéciaux. Les liens seront initialisés par initializeCharSubset()
        // lors de la sélection
        var $p = $('<p>')
            .css('display', 'none')
            .attr('title', title)
            .html(charsHTML);
        $specialchars.append($p);

        // Si le menu de sélection existe déjà, il faut reconstruire ses options
        var $charSubsetSelect = $specialchars.find('select');
        if ($charSubsetSelect.length) {
            refreshCharSubsetSelect($specialchars, $charSubsetSelect);
        }
    });
};

/**
 * Permet d'ajouter un jeu de caractères spéciaux dans le menu déroulant
 * paramètres :
 * - nom du jeu de caractères
 * - caractères spéciaux
 * exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û");
 */
window.realAddSpecialCharset = function (title, chars) {
    realAddSpecialCharsetHTML(title, "<span>" + chars + "</span>");
};

//</nowiki>