Aller au contenu

Utilisateur:Dr Brains/AutreProjets.js

Une page de Wikipédia, l'encyclopédie libre.
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.
var AutresProjets_Params = new Array();
AutresProjets_Params["autoedit"] = false;



var AutreProjets_Template = "Autres projets";
var AutreProjets_TemplateAlias = new Array("Autres projets", "Interprojet", "Sisterlinks", "Autre projet");

var AutreProjets_TemplateParams = new Array();
AutreProjets_TemplateParams["commons"] = [
                                          {Page:new Array("commons", "Commons", "1"), Titre:"commons titre"},
                                          {Page:new Array("commons2", "Commons2"), Titre:"commons titre2"},
                                          {Page:new Array("commons3", "Commons3"), Titre:"commons titre3"}
];
AutreProjets_TemplateParams["species"] = [
                                          {Page:new Array("wikispecies", "species", "Wikispecies"), Titre:"wikispecies titre"},
                                          {Page:new Array("wikispecies2", "species2", "Wikispecies2"), Titre:"wikispecies titre2"},
                                          {Page:new Array("wikispecies3", "species3", "Wikispecies3"), Titre:"wikispecies titre3"}
];
AutreProjets_TemplateParams["dictionary"] = [
                                          {Page:new Array("wiktionary", "wikt", "Wiktionary"), Titre:"wiktionary titre"}, 
                                          {Page:new Array("wiktionary2", "wikt2", "Wiktionary2"), Titre:"wiktionary titre2"}
];
AutreProjets_TemplateParams["versity"] = [
                                          {Page:new Array("wikiversity", "v", "Wikiversity"), Titre:"wikiversity titre"}
];
AutreProjets_TemplateParams["books"] = [
                                          {Page:new Array("wikibooks", "b", "Wikibooks"), Titre:"wikibooks titre"}
];
AutreProjets_TemplateParams["source"] = [
                                          {Page:new Array("wikisource", "s", "Wikisource"), Titre:"wikisource titre"}, 
                                          {Page:new Array("wikisource2", "Wikisource2"), Titre:"wikisource titre2"}
];
AutreProjets_TemplateParams["quote"] = [
                                          {Page:new Array("wikiquote", "q", "Wikiquote"), Titre:"wikiquote titre"}
];
AutreProjets_TemplateParams["news"] = [
                                          {Page:new Array("wikinews", "n", "Wikinews"), Titre:"wikinews titre"}
];
AutreProjets_TemplateParams["news"] = [
                                          {Page:new Array("meta", "m"), Titre:"meta titre"}
];
AutreProjets_TemplateParams["outreach"] = [
                                          {Page:new Array("outreach"), Titre:"outreach titre"}
];


var AutresProjets_DefaultValues = new Array();
var AutresProjets_NewValues = new Array();
$(AutresProjets_Init);

function AutresProjets_Init(){
    var AutresProjets = document.getElementById("autres_projets");
    if(!AutresProjets) return;
    AutresProjets_GetParamValues(AutresProjets);
    AutresProjets_CreateForm(AutresProjets);
    if(AutresProjets_Params["autoedit"]) AutresProjets_ToggleForm();
}

function AutresProjets_GetParamValues(AutresProjets){
    var Lis = AutresProjets.getElementsByTagName('li');
    for(var a=0,l=Lis.length;a<l;a++){
        var Li = Lis[a];
        var Class = Li.className;
        var Page = AutresProjets_getPageName(Li);
        var Titre = AutresProjets_getPageText(Li);
        if(!AutresProjets_DefaultValues[Class]) AutresProjets_DefaultValues[Class] = new Array();
        var Line = {Page:Page, Titre:Titre};
        AutresProjets_DefaultValues[Class].push(Line);
    }
}

function AutresProjets_getPageName(Li){
    var Link = Li.getElementsByTagName('a')[0];
    var Page = Link.href;
    try{ Page = decodeURIComponent(Page); }catch(e){ };
    Page = Page.replace(/.*\/wiki\//, "").replace(/\?uselang.*/, "").replace(/_/g, " ");
    return Page;
}

function AutresProjets_getPageText(Li){
    var Text = Li.textContent;
    try{ 
       Text = Text.split(",")[0]; 
       Text = Text.substring(2, (Text.length-2));
    }catch(e){ };
    return Text
}

function AutresProjets_CreateForm(AutresProjets){
    var Form = document.createElement('form');
    Form.id = "ModifyAutresProjetsForm";
    Form.style.display = "none";
    AutresProjets.appendChild(Form);
    var UL = AutresProjets.getElementsByTagName('ul')[0];
    UL.id = "AutresProjetsUl";
    var P = AutresProjets.getElementsByTagName('p')[0];
    var A = document.createElement('a');
    A.setAttribute("style", "float:right;");
    A.href = "javascript:AutresProjets_ToggleForm();";
    A.innerHTML = "modifier";
    A.title = "Modifier le modèle « Autres Projets »";
    P.appendChild(A);
    var FormUL = document.createElement('ul');
    FormUL.id = "ModifyAutresProjetsUl";
    AutresProjets_CreateFormULContent(FormUL);
    Form.appendChild(FormUL); 
    var P = document.createElement('p');    
    P.setAttribute("style", "text-align:center;");
    var OKInput = document.createElement('input');
    OKInput.type = "button";
    OKInput.setAttribute("style", "padding:0;");
    OKInput.value = "OK";
    OKInput.title = "Valider les changements";  
    OKInput.onclick = AutresProjets_CheckForm;
    OKInput.onselect = AutresProjets_CheckForm;
    P.appendChild(OKInput);
    var RAZInput = document.createElement('input');
    RAZInput.type = "button";
    RAZInput.setAttribute("style", "padding:0;");
    RAZInput.value = "RAZ";
    RAZInput.title = "Annuler les changements";  
    RAZInput.onclick = AutresProjets_RAZForm;
    RAZInput.onselect = AutresProjets_RAZForm;
    P.appendChild(RAZInput);
    Form.appendChild(P); 
}

function AutresProjets_RAZForm(){
    var FormUL = document.getElementById("ModifyAutresProjetsUl");
    if(!FormUL) return;
    while(FormUL.firstChild){ FormUL.removeChild(FormUL.firstChild) };
    AutresProjets_CreateFormULContent(FormUl);
}

function AutresProjets_CreateFormULContent(FormUL){
    if(!FormUL) return;
    for(var Class in AutreProjets_TemplateParams){
        for(var a=0,l=AutreProjets_TemplateParams[Class].length;a<l;a++){ 
            var Ligne = AutreProjets_TemplateParams[Class][a];
            var DefaultTitleValue = "", DefaultTextValue = "";
            try{ DefaultTitleValue = AutresProjets_DefaultValues[Class][a].Page; }catch(e){ };
            try{ DefaultTextValue = AutresProjets_DefaultValues[Class][a].Titre; }catch(e){ };
            var Li = document.createElement("li");
            Li.className = Class;
            var TitleInput = document.createElement('input');
            TitleInput.type = "text";
            TitleInput.title = Ligne.Page.join(" | ");
            TitleInput.value = (DefaultTitleValue ? DefaultTitleValue : "");
            Li.appendChild(TitleInput);
            var TextInput = document.createElement('input');
            TextInput.type = "text";
            TextInput.title = Ligne.Titre;
            TextInput.value = (DefaultTextValue ? DefaultTextValue : "");
            Li.appendChild(TextInput);
            FormUL.appendChild(Li);
        }
    }
}

function AutresProjets_ToggleForm(){
    var UL = document.getElementById("AutresProjetsUl");
    var Form = document.getElementById("ModifyAutresProjetsForm");
    if(!UL || !Form) return;
    if(Form.style.display == "none"){
        Form.style.display = "";
        UL.style.display = "none";
    }else{
        Form.style.display = "none";
        UL.style.display = "";
    }
}

function AutresProjets_CheckForm(){
    var FormUL = document.getElementById("ModifyAutresProjetsUl");
    if(!FormUL) return;
    var Lis = document.getElementsByTagName('li');
    for(var a=0,l=Lis.length;a<l;a++){
        var Li = Lis[a]
        var Class = Li.className;
        var Inputs = Li.getElementsByTagName('input');
        for(var b=0,m=Inputs.length;b<m;b++){
            var Input = Inputs[b];
            var ParamName = Input.title;
            var ParamValue = Input.value;
            if(!ParamValue) continue;
            if(!AutresProjets_NewValues[Class]) AutresProjets_NewValues[Class] = new Array();
            var Line = {Param:ParamName, Value:ParamValue};
            AutresProjets_NewValues[Class].push(Line);
        }
    }
    AutresProjets_GetPage();
}

function AutresProjets_GetPage(){
    var Req = new XMLHttpRequest();
    var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(mw.config.get('wgPageName')) + "&action=edit&oldid=" + mw.config.get('wgCurRevisionId')
    Req.open("GET", URL, true);
    Req.onreadystatechange = function() {
        if(Req.readyState != 4) return;
        while(document.body.firstChild){ document.body.removeChild(document.body.firstChild); };
        document.body.innerHTML = Req.responseText;
        AutresProjets_DoEdit();
    }
    Req.send(null);
}

function AutresProjets_DoEdit(){
    var EditForm = document.getElementById("editform");
    var Textarea = document.getElementById("wpTextbox1");
    var wpSave = document.getElementById("wpSave");
    if(!EditForm || !Textarea || !wpSave ) return;
    var OldText = Textarea.value;
    var AP_RegExp = new RegExp("\\{\\{("+AutreProjets_TemplateAlias.join("|")+")[^\\}]+\\}\\}", "ig");
    var Templates = OldText.match(AP_RegExp);
    if(Templates==null){
        alert("Pas trouvé ancien modèle !");
        return;
    }
    var OldTemplate = Templates[0];
    var NewTemplate = AutresProjets_createTemplate();
    var NewText = OldText.replace(OldTemplate, NewTemplate);
    Textarea.value = NewText;
    return;
    EditForm.submit();
}

function AutresProjets_createTemplate(){
    var Template = new Array();
    Template.push("{{"+AutreProjets_Template);
    for(var Class in AutresProjets_NewValues){
        var Lines = AutresProjets_NewValues[Class];
        for(var a=0,l=Lines.length;a<l;a++){
            var Line = Lines[a];
            var Text = "| "+Line.Param.split(" | ")[0]+" = "+Line.Value;
            Template.push(Text);
        }
    }
    Template.push("}}");
    return Template.join("\n");
}