MediaWiki:Gadget-PaletteDeluxe.js

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

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/* **********************************************************************************************************************
PalettesDeluxe

Permet d'ajouter/supprimer/modifier les palettes de la même manière que les gadgets de portail ou catégorie

Dérivé de : MediaWiki:Gadget-HotCats.js et MediaWiki:Gadget-BandeauxPortails.js (cf historique respectifs pour les auteurs)

Documentation :  Projet:Scripts et gadgets/Notices/PaletteDeluxe
												
{{Catégorisation JS|PaletteDeluxe}} 
*********************************************************************************************************************** */
// ==================================================================================================================== 
// DEBUT DU CODE
// ====================================================================================================================
// <syntaxhighlight lang=javascript><pre><nowiki>
/////////////////////////////////////////////////////////////////////////////////// Variables personnalisables
// Publication automatique
if (typeof window.PalettesDeluxe_AutoEdit === 'undefined') window.PalettesDeluxe_AutoEdit = true;

// Modification mineure
if (typeof window.PalettesDeluxe_MinorEdit === 'undefined') window.PalettesDeluxe_MinorEdit = true;

// Ajout à la liste de suivi ( -1 = défaut préférences, 0 = jamais, 1 = toujours)
if (typeof window.PalettesDeluxe_Watchthis === 'undefined') window.PalettesDeluxe_Watchthis = -1;

// Nombre de suggestions
if (typeof window.PalettesDeluxe_TailleListe === 'undefined') window.PalettesDeluxe_TailleListe = 10;

// Affichage des suggestions vers le bas
if (typeof window.PalettesDeluxe_ListeBas === 'undefined') window.PalettesDeluxe_ListeBas = false;

// Affichage des redirections de palette
if (typeof window.PalettesDeluxe_ShowRedirect === 'undefined') window.PalettesDeluxe_ShowRedirect = false;

// Non-confirmation de la suppression des palettes
if (typeof window.PalettesDeluxe_SkipConfirm === 'undefined') window.PalettesDeluxe_SkipConfirm = false;

// Groupe nécessaire pour appliquer une balise
if (typeof window.PalettesDeluxe_BaliseGroup === 'undefined') window.PalettesDeluxe_BaliseGroup = "user";

// Balise pour les modifications avec ce script
if (typeof window.PalettesDeluxe_Balise === 'undefined') window.PalettesDeluxe_Balise = "PaletteDeluxe";

var PalettesDeluxe_EditParams = [];

/////////////////////////////////////////////////////////////////////////////////// Édition

window.PaletteDeluxe_getBalise = function() {
    if (!PalettesDeluxe_Balise || !PalettesDeluxe_BaliseGroup) return false;
    var UserGroups = mw.config.get('wgUserGroups');
    if (UserGroups.indexOf(PalettesDeluxe_BaliseGroup) !== -1) return PalettesDeluxe_Balise;
    return false;
};

var PalettesDeluxe_ajax = {
    http: function(bundle) {
        var xmlhttp;
        try {
            xmlhttp = new XMLHttpRequest();
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {
                    xmlhttp = false;
                }
            }
        }
        if (xmlhttp) {
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4)
                    PalettesDeluxe_ajax.httpComplete(xmlhttp, bundle);
            };
            xmlhttp.open(bundle.method ? bundle.method : "GET", bundle.url, bundle.async === false ? false : true);
            if (bundle.headers) {
                for (var field in bundle.headers)
                    try {
                        xmlhttp.setRequestHeader(field, bundle.headers[field]);
                    } catch (err) {}
            }
            xmlhttp.send(bundle.data ? bundle.data : null);
        }
        return xmlhttp;
    },
    httpComplete: function(xmlhttp, bundle) {
        if (xmlhttp.status == 200 || xmlhttp.status == 302) {
            if (bundle.onSuccess) bundle.onSuccess(xmlhttp, bundle);
        } else if (bundle.onFailure) {
            bundle.onFailure(xmlhttp, bundle);
        }
    }
};

// Nettoyage modèle (espaces, retour à la ligne, pipes)
function PalettesDeluxe_CleanModele(Modele) {
    Modele = Modele.replace(/\n/ig, "");
    Modele = Modele.replace(/ \|/ig, "\|");
    Modele = Modele.replace(/\| /ig, "\|");
    Modele = Modele.replace(/\|\|/ig, "\|");
    Modele = Modele.replace(/\|\}/ig, "\}");
    return Modele;
}

function PalettesDeluxe_DoEdit(Req, data) {
    while (document.body.firstChild) {
        document.body.removeChild(document.body.firstChild);
    }
    document.body.innerHTML = Req.responseText;
    var TextArea = document.getElementById('wpTextbox1');
    if (!TextArea) return;
    if (PalettesDeluxe_AutoEdit) document.editform.style.display = "none";

    var RemoveBandeauText = data.remove;
    var AddBandeauText = data.add;
    if (AddBandeauText) AddBandeauText = AddBandeauText.replace(/\|$/g, '');

    var OldText = TextArea.value;
    OldText = OldText.replace(/\{\{Palette /ig, "\{\{Palette\|"); // Cas d'une palette unique : {{Palette Truc}} -> {{Palette|Truc}}
    OldText = PalettesDeluxe_DoEditFusion(OldText);


    if ((OldText.indexOf('{{Palette|') != -1) || (OldText.indexOf('{{palette|') != -1)) {
        // Il y a déjà un modèle {{Palette}}
        var AvantModeleUp = OldText.substring(0, OldText.indexOf('{{Palette'));
        var AvantModeleLow = OldText.substring(0, OldText.indexOf('{{palette'));
        var ApresModele = OldText.split(AvantModeleUp).join('').split(AvantModeleLow).join('');
        var DebutModele = OldText.split(ApresModele).join('');
        var OldModele = ApresModele.substring(0, ApresModele.indexOf('}}')) + '}}';
        var SuiteModele = ApresModele.split(OldModele).join('');

        OldModele = PalettesDeluxe_CleanModele(OldModele);

        if (AddBandeauText) {
            if (((OldModele.indexOf('|' + AddBandeauText + '|') != -1) || (OldModele.indexOf('|' + AddBandeauText + '}') != -1))) {
                alert('Le palette ' + AddBandeauText + ' est déjà présente.');
                document.editform.style.display = "";
                return;
            }
        }
        var NouveauModele;
        var Sommaire;
        if (RemoveBandeauText && AddBandeauText) {
            NouveauModele = OldModele;
            NouveauModele = NouveauModele.split('|' + RemoveBandeauText + '|').join('|');
            NouveauModele = NouveauModele.split('|' + RemoveBandeauText + '}}').join('}}');
            NouveauModele = NouveauModele.split('}}').join('|' + AddBandeauText + '}}');
            Sommaire = 'Changement rapide de {{palette}} : - ' + RemoveBandeauText + ' , + ' + AddBandeauText.replace(/\|/g, " , + ");
        } else if (RemoveBandeauText) {
            NouveauModele = OldModele;
            NouveauModele = NouveauModele.split('|' + RemoveBandeauText + '|').join('|');
            NouveauModele = NouveauModele.split('|' + RemoveBandeauText + '}}').join('}}');
            Sommaire = 'Retrait rapide de {{palette}} : - ' + RemoveBandeauText;
        } else if (AddBandeauText) {
            NouveauModele = OldModele.split('}}').join('|' + AddBandeauText + '}}');
            Sommaire = 'Ajout rapide de {{palette}} : + ' + AddBandeauText.replace(/\|/g, " , + ");
        }
        NouveauModele = PalettesDeluxe_CleanModele(NouveauModele);
        if (NouveauModele.indexOf('|') == -1) {
            if (PalettesDeluxe_SkipConfirm || confirm('Erreur :\nLe modèle {{Palette}} doit avoir au moins un paramètre.\n\nSupprimer le modèle {{Palette}} ?')) {
                NouveauModele = "";
            } else {
                document.editform.style.display = "block";
                return;
            }
        }
    } else {
        // Il n'y a pas de modèle {{Palette}}
        if (!AddBandeauText) {
            alert('Pas de palette à ajouter.');
            document.editform.style.display = "";
            return;
        }
        var NouveauModele = '{{Palette|' + AddBandeauText + '}}\n\n';
        var Sommaire = 'Ajout rapide de {{palette}} : + ' + AddBandeauText.replace(/\|/g, " , + ");
        if ((OldText.indexOf('{{DEFAULTSORT:') != -1) || (OldText.indexOf('[[Catégorie:') != -1) || (OldText.indexOf('[[catégorie:') != -1) || (OldText.indexOf('[[Categorie:') != -1) || (OldText.indexOf('[[categorie:') != -1) || (OldText.indexOf('{{Portail') != -1) || (OldText.indexOf('{{portail') != -1)) {
            // Il y a des catégories/portails/palettes
            var DebutModele1 = OldText.substring(0, OldText.indexOf('{{Portail'));
            var DebutModele2 = OldText.substring(0, OldText.indexOf('{{portail'));
            var DebutModele3 = OldText.substring(0, OldText.indexOf('{{DEFAULTSORT:'));
            var DebutModele4 = OldText.substring(0, OldText.indexOf('[[Catégorie:'));
            var DebutModele5 = OldText.substring(0, OldText.indexOf('[[catégorie:'));
            var DebutModele6 = OldText.substring(0, OldText.indexOf('[[Categorie:'));
            var DebutModele7 = OldText.substring(0, OldText.indexOf('[[categorie:'));

            var SuiteModele = OldText.split(DebutModele1).join('').split(DebutModele2).join('').split(DebutModele3).join('').split(DebutModele4).join('').split(DebutModele5).join('').split(DebutModele6).join('').split(DebutModele7).join('');
            var DebutModele = OldText.split(SuiteModele).join('');
        } else {
            // Il n'y a pas de catégories/portails/palettes
            var interWiki = new RegExp('^\\s*\\[\\[([a-z][a-z].?(x?-[^\\]]+)?|simple|tokipona):([^\\]]*)\\]\\]\\s*$');
            var blank = new RegExp('^\\s*$');
            var lines = OldText.split('\n');
            var DebutModele = '';
            var SuiteModele = '';
            for (var lineId = lines.length - 1; lineId >= 0; --lineId) {
                if (!interWiki.test(lines[lineId]) && !blank.test(lines[lineId])) {
                    DebutModele = lines.slice(0, lineId + 1).join('\n') + '\n\n';
                    SuiteModele = lines.slice(lineId + 1).join('\n');
                    break;
                }
            }
            if (DebutModele === '') {
                // edge case: source has nothing else than interwikis
                SuiteModele = OldText;
            }
            while (SuiteModele.indexOf('\n\n') != -1) {
                SuiteModele = SuiteModele.split("\n\n").join("\n");
            }
            SuiteModele = SuiteModele.replace(/^\n/, "");
        }
    }
    var TexteFinal = DebutModele + NouveauModele + SuiteModele;
    var SommaireFinal = Sommaire + ' ; avec [[Projet:Scripts et gadgets/Notices/PaletteDeluxe|PalettesDeluxe]]';
    document.getElementById('wpMinoredit').checked = PalettesDeluxe_MinorEdit;
    if (PalettesDeluxe_Watchthis == 1) document.getElementById('wpWatchthis').checked = "checked";
    if (PalettesDeluxe_Watchthis == 0) document.getElementById('wpWatchthis').checked = false;
    document.getElementById('wpTextbox1').value = TexteFinal;
    document.getElementById('wpSummary').value = SommaireFinal;

    if (PalettesDeluxe_AutoEdit) {
        var watchthisparam = {};
        watchthisparam[-1] = "nochange";
        watchthisparam[0] = "unwatch";
        watchthisparam[1] = "watch";
        var datas = {
            action: 'edit',
            title: mw.config.get('wgPageName'),
            text: TexteFinal,
            summary: SommaireFinal,
            minor: (document.editform.wpMinoredit.checked ? 1 : 0),
            watchlist: watchthisparam[PalettesDeluxe_Watchthis],
            token: document.editform.wpEditToken.value
        };

        var ApplyTag = PaletteDeluxe_getBalise();
        if (ApplyTag) {
            datas.summary = Sommaire;
            datas.tags = ApplyTag;
        }

        var api = new mw.Api();
        api.post(datas, {
            'contentType': 'application/x-www-form-urlencoded'
        }).then(function(data) {
            window.location.reload();
        });
    }
}

function PalettesDeluxe_Edit() {
    var ToRemove = (PalettesDeluxe_EditParams["PalettesToRemove"] ? PalettesDeluxe_EditParams["PalettesToRemove"] : (PalettesDeluxe_EditParams["PalettesToModifyFrom"] ? PalettesDeluxe_EditParams["PalettesToModifyFrom"] : false));
    var ToAdd = (PalettesDeluxe_EditParams["PalettesToAdd"] ? PalettesDeluxe_EditParams["PalettesToAdd"] : (PalettesDeluxe_EditParams["PalettesToModifyTo"] ? PalettesDeluxe_EditParams["PalettesToModifyTo"] : false));
    var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(mw.config.get('wgPageName')) + "&action=submit";
    PalettesDeluxe_ajax.http({
        url: URL,
        onSuccess: PalettesDeluxe_DoEdit,
        remove: ToRemove,
        add: ToAdd
    });
}

function PalettesDeluxe_DoEditFusion(OldText) {
    var Reg = new RegExp("\\{\\{(P|p)alette\\|[^\\}]*\\}\\}", "g");
    var Matches = OldText.match(Reg);
    if (Matches === null) return OldText;
    if (Matches.length === 1) return OldText;
    var Params = [];
    for (var a = 0, l = Matches.length; a < l; a++) {
        var thisMatch = Matches[a];
        var thisParam = PalettesDeluxe_CleanModele(thisMatch).split("{{Palette|").join("").split("}}").join("");
        Params.push(thisParam);
    }
    for (var a = 0, l = Matches.length; a < l; a++) {
        if (a === 0) {
            OldText = OldText.replace(Matches[a], "{{Palette|" + Params.join("|") + "}}");
        } else {
            OldText = OldText.replace(Matches[a], "").replace(/\n\n\n/g, "\n\n");
        }
    }
    return OldText;
}

/////////////////////////////////////////////////////////////////////////////////// Mise à jour des palettes effectivement présentes

function PalettesDeluxe_Update() {
    var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&oldid=' + mw.config.get('wgCurRevisionId') + '&action=raw';
    PalettesDeluxe_ajax.http({
        url: URL,
        onSuccess: PalettesDeluxe_UpdateBis
    });
}

function PalettesDeluxe_UpdateBis(Req, data) {
    var Contenu = Req.responseText;
    if (Contenu == '') return;
    Contenu = Contenu.replace(/\{\{palette/ig, "\{\{Palette");
    Contenu = Contenu.replace(/\{\{Palette /ig, "\{\{Palette\|");
    if (Contenu.indexOf('{{Palette|') == -1) return;
    var ParamsModele = Contenu.split('{{Palette|')[1].split('}}')[0] + '|';
    ParamsModele = PalettesDeluxe_CleanModele(ParamsModele);
    var AllParamsModele = new Array();
    while (ParamsModele.indexOf('|') != -1) {
        var NewParam = ParamsModele.split('|')[0];
        if (NewParam != '') AllParamsModele.push(NewParam);
        ParamsModele = ParamsModele.split(NewParam + '|')[1];
    }
    for (var m = 0; m < AllParamsModele.length; m++) {
        var Span = document.getElementById('lienPalette_' + m);
        if (!Span) continue;
        var LienRemove = Span.getElementsByTagName('a')[1];
        if(LienRemove) {
	        LienRemove.href = "javascript:PalettesDeluxe_SupprOne(\'" + encodeURIComponent(AllParamsModele[m]).replace(/'/g, "ZAPPOSTROPHE") + "\')";
	        LienRemove.title = "Supprimer la palette « " + AllParamsModele[m] + " »";
        }
	    var LienModify = Span.getElementsByTagName('a')[2];
	    if(LienModify) {
	        LienModify.href = "javascript:PalettesDeluxe_ModifyOne(\'" + m + "\',\'" + encodeURIComponent(AllParamsModele[m]).replace(/'/g, "ZAPPOSTROPHE") + "\')";
	        LienModify.title = "Modifier la palette « " + AllParamsModele[m] + " »";
        }
    }
}

/////////////////////////////////////////////////////////////////////////////////// Formulaires

window.PalettesDeluxe_Cancel = function(id) {
    var Span = document.getElementById(id);
    Span.style.display = 'inline';
    var Parent = Span.parentNode;
    var Form = Parent.getElementsByTagName('form')[0];
    Parent.removeChild(Form);
    Parent.lastChild.style.display = "inline";
};

window.PalettesDeluxe_SupprOne = function(Palette) {
    Palette = Palette.replace(/ZAPPOSTROPHE/g, "'");
    if (PalettesDeluxe_SkipConfirm || confirm('Voulez-vous vraiment supprimer la palette « ' + Palette + ' » ?')) {
        PalettesDeluxe_EditParams["PalettesToRemove"] = Palette;
        PalettesDeluxe_Edit();
    }
    // ********************************************************************************************************
};

window.PalettesDeluxe_ModifyThatOne = function(id, oldpalette) {
    oldpalette = oldpalette.replace(/ZAPPOSTROPHE/g, "'");
    var Input = document.getElementById('InputModify_' + id);
    var Palette = Input.value;
    if ((Palette != '') && (Palette != oldpalette)) {
        // ********************************************************************************************************
        PalettesDeluxe_EditParams["PalettesToModifyFrom"] = oldpalette;
        PalettesDeluxe_EditParams["PalettesToModifyTo"] = Palette;
        PalettesDeluxe_Edit();
        // ********************************************************************************************************
    } else {
        PalettesDeluxe_Cancel('lienPalette_' + id);
    }
};

window.PalettesDeluxe_ModifyOne = function(id, palette) {
    palette = palette.replace(/ZAPPOSTROPHE/g, "'");
    var Span = document.getElementById('lienPalette_' + id);
    Span.style.display = "none";
    var Form = document.createElement('form');
    Form.id = "BP_Form_" + id;
    Form.palette = palette.replace(/'/g, "ZAPPOSTROPHE");
    Form.method = "post";
    Form.onsubmit = function() {
        var FormIndex = this.id.split("BP_Form_").join("");
        var OldPalette = this.palette;
        PalettesDeluxe_ModifyThatOne(FormIndex, OldPalette);
        return false;
    };

    Form.style.display = "inline";
    Form.innerHTML = '<select id="SelectModify_' + id + '" style="display:none;" title="Suggestions de palettes" />' +
        '<input id="InputModify_' + id + '" type="text" value="' + palette + '" ' +
        'onkeyup="PalettesDeluxe_TextChanged(\'SelectModify_' + id + '\')" />' +
        '<input type="button" ' +
        'onclick="PalettesDeluxe_ModifyThatOne(\'' + id + '\',\'' + palette.replace(/'/g, "ZAPPOSTROPHE") + '\');" ' +
        'onselect="PalettesDeluxe_ModifyThatOne(\'' + id + '\',\'' + palette.replace(/'/g, "ZAPPOSTROPHE") + '\');" ' +
        'value="OK"/>' +
        '<input type="button" ' +
        'onclick="PalettesDeluxe_Cancel(\'lienPalette_' + id + '\')" ' +
        'onselect="PalettesDeluxe_Cancel(\'lienPalette_' + id + '\')" ' +
        'value="Annuler"/>';
    Span.parentNode.insertBefore(Form, Span);
    Span.parentNode.lastChild.style.display = "none";
    document.getElementById('InputModify_' + id).focus();
};

window.PalettesDeluxe_AddThatOne = function() {
    var Input = document.getElementById('InputAdd');
    var Palette = Input.value;
    if (Palette != '') {
        // ********************************************************************************************************
        PalettesDeluxe_EditParams["PalettesToAdd"] = Palette;
        PalettesDeluxe_Edit();
        // ********************************************************************************************************
    } else {
        PalettesDeluxe_Cancel('PalettesDeluxe_Add');
    }
};

window.PalettesDeluxe_AddOne = function() {
    var Span = document.getElementById('PalettesDeluxe_Add');
    Span.style.display = "none";
    var Form = document.createElement('form');
    Form.style.display = "inline";
    Form.id = "BP_Form_Add";
    Form.method = "post";
    Form.onsubmit = function() {
        PalettesDeluxe_AddThatOne();
        return false;
    };
    Form.innerHTML = '<select id="SelectAdd" style="display:none;" title="Suggestions de palettes" />' +
        '<input id="InputAdd" type="text" value="" onkeyup="PalettesDeluxe_TextChanged(\'SelectAdd\')" />' +
        '<input type="button" ' +
        'onclick="PalettesDeluxe_AddThatOne();" ' +
        'onselect="PalettesDeluxe_AddThatOne();" ' +
        'value="OK"/>' +
        '<input type="button" ' +
        'onclick="PalettesDeluxe_Cancel(\'PalettesDeluxe_Add\')" ' +
        'onselect="PalettesDeluxe_Cancel(\'PalettesDeluxe_Add\')" ' +
        'value="Annuler"/>';
    Span.parentNode.insertBefore(Form, Span);
    document.getElementById('InputAdd').focus();

};

/////////////////////////////////////////////////////////////////////////////////// Suggestions

var PalettesDeluxe_TextChanged_running_Up = 0;
var PalettesDeluxe_TextChanged_running_Low = 0;
var PalettesDeluxe_Up_Results = new Array();
var PalettesDeluxe_Low_Results = new Array();

function PalettesDeluxe_KeypressedOnList(e) {
    if (!e) var e = window.event;
    if (e.keyCode != 13) {
        var IsEnter = false;
    } else {
        var IsEnter = true;
    }
    return IsEnter;
}

function PalettesDeluxe_TextChanged_MergeNoaccent(text) {
    text = text.toLowerCase();
    text = text.replace(/â/g, "a");
    text = text.replace(/å/g, "a");
    text = text.replace(/é/g, "e");
    text = text.replace(/è/g, "e");
    text = text.replace(/ê/g, "e");
    text = text.replace(/ë/g, "e");
    text = text.replace(/î/g, "i");
    text = text.replace(/ï/g, "i");
    text = text.replace(/ô/g, "o");
    text = text.replace(/œ/g, "oe");
    text = text.replace(/ç/g, "c");
    text = text.replace(/š/g, "s");
    text = text.replace(/-/g, " ");
    text = text.replace(/'/g, " ");
    text = text.replace(/;/g, "");
    return text;
}

function PalettesDeluxe_TextChanged_Set(id, text) {
    text = text.replace(/ZAPOSTROPHE/g, "'");
    var OldValue = document.getElementById(id).value;
    if (OldValue.indexOf('|') != -1) {
        var AllParams = OldValue.split("|");
        AllParams[(AllParams.length - 1)] = text;
        var NewValue = AllParams.join("|");
    } else {
        var NewValue = text;
    }
    document.getElementById(id).value = NewValue;
    document.getElementById(id).focus();
}

function PalettesDeluxe_TextChanged_Display(ResultArray, id) {
    var Select = document.getElementById(id);
    var idInput = id.split('Select').join('Input');
    var Input = document.getElementById(idInput);
    if ((!Input) || (!Select)) return;
    Select.innerHTML = '';
    var NbOptions = 0;
    for (var a = 0; a < ResultArray.length; a++) {
        var TitrePage = ResultArray[a];
        var TitrePageEncode = TitrePage.replace(/'/g, "ZAPOSTROPHE");
        var Option = document.createElement('option');
        Option.value = TitrePage;
        Option.innerHTML = TitrePage;
        Option.onclick = function() {
            var PageEncode = this.value;
            PalettesDeluxe_TextChanged_Set(this.parentNode.id.split('Select').join('Input'), PageEncode);
            PalettesDeluxe_TextChanged(this.parentNode.id);
        };
        if (a == 0) Option.selected = "selected";
        Select.appendChild(Option);
        NbOptions++;
    }
    if (NbOptions > 0) {
        Select.onkeyup = function(e) {
            if (!e) var e = window.event;
            var IsEnter = PalettesDeluxe_KeypressedOnList(e);
            if (!IsEnter) return;

            var Selected = this.getElementsByTagName('option');
            for (var a = 0; a < Selected.length; a++) {
                if (Selected[a].selected) {
                    var TextSelected = Selected[a].value;
                }
            }
            PalettesDeluxe_TextChanged_Set(idInput, TextSelected);
            PalettesDeluxe_TextChanged(id);
        };
        Select.size = NbOptions;
        Select.style.display = 'inline';
        Select.style.zIndex = 5;
        Select.style.position = "absolute";
        Input.style.width = Select.offsetWidth + "px";

        if (PalettesDeluxe_ListeBas) {
            Select.style.top = (parseInt(Input.offsetTop) + parseInt(Input.offsetHeight)) + 'px';
        } else {
            Select.style.top = (parseInt(Input.offsetTop) - Select.offsetHeight) + 'px';
        }
        Select.style.left = (parseInt(Input.parentNode.offsetLeft) - 1) + 'px';
    } else {
        Select.style.display = 'none';
        Select.innerHTML = '';
    }
}

function PalettesDeluxe_TextChanged_Merge(id) {
    var UpResults = PalettesDeluxe_Up_Results;
    var LowResults = PalettesDeluxe_Low_Results;
    var ResultArray = new Array();
    for (var a = 0; a < LowResults.length; a++) {
        LowResults[a] = LowResults[a].substr(0, 1).toUpperCase() + LowResults[a].substr(1, LowResults[a].length) + ";";
        UpResults.push(LowResults[a]);
    }
    for (var b = 0; b < UpResults.length; b++) {
        UpResults[b] = PalettesDeluxe_TextChanged_MergeNoaccent(UpResults[b]) + "|" + UpResults[b];
    }
    UpResults.sort();
    for (var b = 0; b < UpResults.length; b++) {
        var ThisPage = UpResults[b];
        ThisPage = ThisPage.replace(/.*\|/g, "");
        if (ThisPage.indexOf(";") != -1) {
            ThisPage = ThisPage.replace(/;/g, "");
            ThisPage = ThisPage.substr(0, 1).toLowerCase() + ThisPage.substr(1, ThisPage.length);
        }
        if (b < PalettesDeluxe_TailleListe) {
            ResultArray.push(ThisPage);
        }
    }
    PalettesDeluxe_TextChanged_Display(ResultArray, id);
}

function PalettesDeluxe_TextChanged_RequestUp(Value, id) {
    if (PalettesDeluxe_TextChanged_running_Up) return;
    PalettesDeluxe_TextChanged_running_Up = 1;
    Value = Value.substr(0, 1).toUpperCase() + Value.substr(1, Value.length);
    var Redirect = (PalettesDeluxe_ShowRedirect ? "" : "&apfilterredir=nonredirects");
    var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=allpages&apnamespace=10&aplimit=' + PalettesDeluxe_TailleListe + Redirect + '&apfrom=Palette%20' + encodeURIComponent(Value);
    PalettesDeluxe_ajax.http({
        url: URL,
        onSuccess: PalettesDeluxe_TextChanged_RequestUpBis,
        value: Value,
        id: id
    });
}

function PalettesDeluxe_TextChanged_RequestUpBis(Req, data) {
    var Value = data.value;
    var id = data.id;
    PalettesDeluxe_Up_Results = [];
    var ObjetXML = Req.responseXML;
    var AllPages = ObjetXML.getElementsByTagName('p');
    for (var b = 0; b < AllPages.length; b++) {
        var Titre = AllPages[b].getAttribute('title').replace(/Modèle:Palette /, "");
        var TitreUp = Titre.substr(0, 1).toUpperCase() + Titre.substr(1, Titre.length);
        if (Titre == TitreUp && Titre.indexOf("Modèle:") == -1) {
            PalettesDeluxe_Up_Results.push(Titre);
        }
    }
    PalettesDeluxe_TextChanged_running_Up = 0;
    if (PalettesDeluxe_TextChanged_running_Low == 0) PalettesDeluxe_TextChanged_Merge(id);
}

function PalettesDeluxe_TextChanged_RequestLow(Value, id) {
    if (PalettesDeluxe_TextChanged_running_Low) return;
    PalettesDeluxe_TextChanged_running_Low = 1;
    Value = Value.substr(0, 1).toLowerCase() + Value.substr(1, Value.length);
    var Redirect = (PalettesDeluxe_ShowRedirect ? "" : "&apfilterredir=nonredirects");
    var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=allpages&apnamespace=10&aplimit=' + PalettesDeluxe_TailleListe + Redirect + '&apfrom=Palette%20' + encodeURIComponent(Value);
    PalettesDeluxe_ajax.http({
        url: URL,
        onSuccess: PalettesDeluxe_TextChanged_RequestLowBis,
        value: Value,
        id: id
    });
}

function PalettesDeluxe_TextChanged_RequestLowBis(Req, data) {
    var Value = data.value;
    var id = data.id;
    PalettesDeluxe_Low_Results = [];
    var ObjetXML = Req.responseXML;
    var AllPages = ObjetXML.getElementsByTagName('p');
    for (var b = 0; b < AllPages.length; b++) {
        var Titre = AllPages[b].getAttribute('title').replace(/Modèle:Palette /, "");
        var TitreLow = Titre.substr(0, 1).toLowerCase() + Titre.substr(1, Titre.length);
        if (Titre == TitreLow && Titre.indexOf("Modèle:") == -1) {
            PalettesDeluxe_Low_Results.push(Titre);
        }
    }
    PalettesDeluxe_TextChanged_running_Low = 0;
    if (PalettesDeluxe_TextChanged_running_Up == 0) PalettesDeluxe_TextChanged_Merge(id);
}

window.PalettesDeluxe_TextChanged = function(id) {
    if (PalettesDeluxe_TailleListe == 0) return;
    var Select = document.getElementById(id);
    var idInput = id.split('Select').join('Input');
    var Input = document.getElementById(idInput);
    if ((!Input) || (!Select)) return;
    var Value = Input.value;
    Value = Value.replace(/.*\|/g, "");
    if (Value == '') return;
    PalettesDeluxe_TextChanged_RequestLow(Value, id);
    PalettesDeluxe_TextChanged_RequestUp(Value, id);
};

/////////////////////////////////////////////////////////////////////////////////// Fonctions actives au chargement de la page

function PalettesDeluxe_CreateUl() {
    var links = document.getElementById('bandeau-portail');
    if (!links)
        links = document.getElementById('catlinks');
    if (!links)
        return;
    var ModelePalette = document.createElement('div');
    ModelePalette.className = 'navbox-container';
    ModelePalette.style.clear = "both"
    links.parentNode.insertBefore(ModelePalette, links);
}

function PalettesDeluxe_ModifyUl() {
    var unique = false;
    var groupPalette = $(".navbox-container")[0];
    //Cas spécial une seule palette : {{palette nom}}
    if (!groupPalette) {
        groupPalette = $(".navbox")[0];
        unique = true;
    }
    if (groupPalette) {
        var paletteList = [];
        if (unique) paletteList.push(groupPalette);
        else paletteList = groupPalette.getElementsByTagName('table');

        var cpt = 0;
        for (var a = 0; a < paletteList.length; a++) {
            var palette = paletteList[a];
            var th = palette.getElementsByTagName('th')[0];
            var Lien = $(th).find(".navboxToggle")[0];
            if (Lien) {
                var voirModifier = th.getElementsByTagName('div')[0];
                if(!voirModifier) {
                	continue;
                }
                var titre = voirModifier.getElementsByTagName('div')[0];
                var TitreDecode = titre.title.split('Modèle:Palette').join('');
                TitreDecode = TitreDecode.replace(/ \(page inexistante\)/g, "");
                var Titre = encodeURIComponent(TitreDecode);
                Lien.id = 'lienPalette_' + cpt;

                var elem1 = document.createElement("a");
                elem1.setAttribute("href", "javascript:PalettesDeluxe_SupprOne('" + Titre + "')");
                elem1.setAttribute("title", "Supprimer la palette « " + TitreDecode + " »");
                elem1.innerHTML = "(-)";

                var elem2 = document.createElement("a");
                elem2.setAttribute("href", "javascript:PalettesDeluxe_ModifyOne('" + cpt + "','" + Titre + "')");
                elem2.setAttribute("title", "Modifier cette palette « " + TitreDecode + " »");
                elem2.innerHTML = "(±)";

                var point1 = document.createElement("span");
                point1.innerHTML = "  •  ";

                var point2 = document.createElement("span");
                point2.innerHTML = "  •  ";

                var elemSpan = document.createElement("span");
                elemSpan.appendChild(point1);
                elemSpan.appendChild(elem1);
                elemSpan.appendChild(point2);
                elemSpan.appendChild(elem2);
                cpt++;
                Lien.appendChild(elemSpan);
            }
        }

        //récupération des palettes en erreur
        var palettesError = $(groupPalette).find('.error');
        for (var i = 0; i < palettesError.length; i++) {
            var paletteError = palettesError[i];
            var titre = paletteError.getElementsByTagName('a')[0];
            var TitreDecode = titre.title.split('Modèle:Palette ').join('');
            TitreDecode = TitreDecode.replace(/ \(page inexistante\)/g, "");
            var Titre = encodeURIComponent(TitreDecode);
            titre.id = 'lienPalette_' + cpt;

            var elem1 = document.createElement("a");
            elem1.setAttribute("href", "javascript:PalettesDeluxe_SupprOne('" + Titre + "')");
            elem1.setAttribute("title", "Supprimer la palette « " + TitreDecode + " »");
            elem1.innerHTML = "(-)";

            var elem2 = document.createElement("a");
            elem2.setAttribute("href", "javascript:PalettesDeluxe_ModifyOne('" + cpt + "','" + Titre + "')");
            elem2.setAttribute("title", "Modifier cette palette « " + TitreDecode + " »");
            elem2.innerHTML = "(±)";

            var point1 = document.createElement("span");
            point1.innerHTML = "  •  ";

            var point2 = document.createElement("span");
            point2.innerHTML = "  •  ";

            paletteError.appendChild(point1);
            paletteError.appendChild(elem1);
            paletteError.appendChild(point2);
            paletteError.appendChild(elem2);
            cpt++
        }

        var AddP = document.createElement('p');
        AddP.id = 'lienPalette_add';
        AddP.className = 'center';
        AddP.innerHTML += '<span class="js-palette-element">' +
            '<span class="js-palette-texte" id="PalettesDeluxe_Add" >' +
            '<a href="javascript:PalettesDeluxe_AddOne()" title="Ajouter une palette" >Ajouter une palette (+)</a>' +
            '</span>' +
            '</span>';
        if (unique) {
            groupPalette.parentNode.appendChild(AddP);
        } else {
            groupPalette.appendChild(AddP);
        }
    }
    PalettesDeluxe_Update();
}

function PalettesDeluxe() {
    var Homonymie = document.getElementById("homonymie");
    var UlModelesPalette = $(".navbox-container")[0];
    if (Homonymie && !UlModelesPalette) return;

    if (!UlModelesPalette) PalettesDeluxe_CreateUl();
    PalettesDeluxe_ModifyUl();
}

if (mw.config.get('wgAction') === 'view' && (mw.config.get('wgNamespaceNumber') === 0 || mw.config.get('wgNamespaceNumber') === 2 || mw.config.get('wgNamespaceNumber') === 4)) {
    $(PalettesDeluxe);
}

//</nowiki></pre>
// ====================================================================================================================
// FIN DU CODE
// ==================================================================================================================== 
//</syntaxhighlight>