MediaWiki:Gadget-CommonEdit.js

De Buck Wiki
Aller à la navigation Aller à la recherche

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).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur 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);
}


/**
 * Textes de remplissage automatique
 */
var init_if_empty = [
    ["Wikipédia:Comité_d'arbitrage/Arbitrage/",
        "<!-- 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]] -->"
    ],
    ["Discussion_Wikipédia:Comité_d'arbitrage/Arbitrage/",
        "<!-- Enregistrer la page pour l'initialiser -->\n" +
        "{{subst:Discussion Wikipédia:Comité d'arbitrage/Arbitrage/Modèle}}"
    ],
];

/**
 * Remplit la zone d'édition si elle est vide avec le texte
 * 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]]
 */
window.addCharSubsetMenu = function () {
    var $specialchars = $('#specialcharsets');
    if (!$specialchars.length) return;

    var saveLastSelected = mw.util.debounce(250, 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 MonobookToolbar.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();
                    MonobookToolbar.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);
    });
}

$(function ($) {
    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>" + mw.html.escape(chars) + "</span>");
};

//</nowiki>