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 octobre 2023 à 21:40 et modifiée en dernier par Od1n (discuter | contributions) (indentation pour diff suivant). 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);

                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>