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 3 décembre 2023 à 12:34 et modifiée en dernier par Od1n (discuter | contributions) (harmonisation en single quotes). 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.
/* globals mw, $, MonobookToolbar, addCharSubsetMenu, realAddSpecialCharsetHTML */
/* exported addCharSubsetMenu, realAddSpecialCharsetHTML, realAddSpecialCharset */

/**
 * 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);
}


/**
 * 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]]
 *
 * L'export en global est utilisé par [[MediaWiki:Gadget-LiveRC.js/Extensions/EditCharactersExtension.js]]
 */
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);
    });

    titles.forEach(function (title) {
        $charSubsetSelect.append($('<option>').text(title));
    });

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

            if (k > 0) {
                newElements.push(' ');
            }
            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>