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 27 mars 2018 à 06:18 et modifiée en dernier par Od1n (discuter | contributions) (ajout "dépendances", sachant que c'est en partie pour essayer d'assurer d'exécuter après le « mw.loader.using('mediawiki.toolbar', function () { $(addCharSubsetMenu); }); » au dessus). 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>
 */

/**
 * 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 "<!-- Ne pas indexer la page par les robots -->\n" +
           "__NOINDEX__ \n" +
           "<!-- 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 "<!-- Ne pas indexer la page par les robots -->\n" +
           "__NOINDEX__ \n" +
           "<!-- 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;

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

    // Ajout des options au menu
    $specialchars.find('p').each(function () {
        $charSubsetSelect.append($('<option>').text(this.title));
    });

    $specialchars.prepend($charSubsetSelect);

    /* default subset - try to use a cookie some day */
    chooseCharSubset(0);
}

/**
 * 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);
    });
}
mw.loader.using('mediawiki.toolbar', function () {
    $(addCharSubsetMenu);
});

/**
 * 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>"
 */
function realAddSpecialCharsetHTML(title, charsHTML) {
    mw.loader.using('mediawiki.toolbar', function () {
        $(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);

            // Reconstruction des options du menu de sélection
            var $charSubsetSelect = $specialchars.find('select');
            $charSubsetSelect.empty();
            $specialchars.find('p').each(function () {
                $charSubsetSelect.append($('<option>').text(this.title));
            });
        });
    });
}

/**
 * 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", "â ê î ô û");
 */
function realAddSpecialCharset(title, chars) {
    realAddSpecialCharsetHTML(title, "<span>" + chars + "</span>");
}

//</nowiki>