Aller au contenu

Utilisateur:Dr Brains/CreatePortal.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.
if( (mw.config.get('wgNamespaceNumber')>-1)&&( (mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")) ){

     if(typeof(CreatePortal_Reference)=="undefined"){
           var CreatePortal_Reference = 'Portail:Guam';
     }
     if(typeof(CreatePortal_ComposantDeReference)=="undefined"){
           var CreatePortal_ComposantDeReference = new Array();
           CreatePortal_ComposantDeReference.push("");
           CreatePortal_ComposantDeReference.push("/Cadre introduction");
           CreatePortal_ComposantDeReference.push("/Cadres dynamiques");
           CreatePortal_ComposantDeReference.push("/Cadre standard");
           CreatePortal_ComposantDeReference.push("/Introduction");
           CreatePortal_ComposantDeReference.push("/Le saviez-vous ?");
           CreatePortal_ComposantDeReference.push("/Le saviez-vous ?/Introduction");
           CreatePortal_ComposantDeReference.push("/Suivi/Articles récents");
           CreatePortal_ComposantDeReference.push("/Page au hasard");
           CreatePortal_ComposantDeReference.push("/Page au hasard/Liste");
           CreatePortal_ComposantDeReference.push("/Lumière sur...");
           CreatePortal_ComposantDeReference.push("/Lumière sur.../Introduction");
           CreatePortal_ComposantDeReference.push("/Articles récompensés");
           CreatePortal_ComposantDeReference.push("/Sélection");
           CreatePortal_ComposantDeReference.push("/Image au hasard");
           CreatePortal_ComposantDeReference.push("/Image au hasard/Introduction");
           CreatePortal_ComposantDeReference.push("/Navigation");
     }
     $(CreatePortal_AddButton);
     if(mw.config.get('wgTitle').match(/\.js$/)!= null){
       $(CreatePortal_AddClassButton);
       $(CreatePortal_AddVariablesButton);
       $(CreatePortal_replaceFunctionSyntaxButton);
     }
     mw.loader.addStyleTag('#MenuReplaceSpan { text-align:left; }');

}

function CreatePortal_AddButton(){
     if(!document.editform) return;
     var Toolbar = document.getElementById('monobooktoolbar');
     if(!Toolbar){
          var Textarea = document.getElementById("wpTextbox1");
          if(!Textarea) return;
          Toolbar = document.createElement('div');
          Toolbar.id = 'monobooktoolbar';
          Textarea.parentNode.insertBefore(Toolbar, Textarea);
     }
     var button = '<img src="//upload.wikimedia.org/wikipedia/commons/0/0d/Button_wikification.png" heigth="23" width="23" alt="Composant de portail" />';

     var NewButton = document.createElement('a')
     NewButton.title = "Créer un élément de portail";
     NewButton.href="javascript:CreatePortal_OpenMenu();";
     NewButton.className = "mw-toolbar-editbutton";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

function CreatePortal_Cancel(){
     var MenuDiv = document.getElementById('Menu_Composant_de_portail');
     MenuDiv.parentNode.removeChild(MenuDiv);
}

function CreatePortal_OpenMenu(){
     var OldMenuDiv = document.getElementById('Menu_Composant_de_portail');
     if(OldMenuDiv) return;

     var Toolbar = document.getElementById('monobooktoolbar');
     var MenuDiv = document.createElement('div');
     MenuDiv.id = 'Menu_Composant_de_portail';
     Toolbar.parentNode.insertBefore(MenuDiv, Toolbar.nextSibling);

     var MenuSelect = document.createElement('select');
     MenuSelect.id = 'SelectComposant';
     MenuSelect.onchange = function(){
          var Selected = this.getElementsByTagName('option');
          for(var a=0;a<Selected.length;a++){
               if(Selected[a].selected){
                    var TextSelected = Selected[a].value;
                    CreatePortal_GetComposant(TextSelected);
               }
          }
     }
          MenuSelect.innerHTML += '<option value="Type de composant" disabled="disabled" selected="selected" >Type de composant</option>';
     for(var a=0;a<CreatePortal_ComposantDeReference.length;a++){
          MenuSelect.innerHTML += '<option value="'+CreatePortal_ComposantDeReference[a]+'" >'+CreatePortal_ComposantDeReference[a]+'</option>';
     }
     MenuDiv.appendChild(MenuSelect);

     var CurrentPortal = mw.config.get('wgTitle').split('/')[0];
     var MenuSpan = document.createElement('span');
     MenuSpan.id = 'MenuReplaceSpan';
     MenuDiv.appendChild(MenuSpan);
     MenuSpan.innerHTML = '<label for="CreatePortal_Replace1">Texte à remplacer</label>'
                        + '<input id="CreatePortal_Replace1" type="text" value="'+CreatePortal_Reference.split(':')[1]+'" size="65"/>'
                        + '<label for="CreatePortal_Replace2">Texte de remplacement</label>'
                        + '<input id="CreatePortal_Replace2" type="text" value="'+CurrentPortal+'"  size="65"/>'
                        + '<input type="button" value="Remplacer" onclick="CreatePortal_Replace();" onselect="CreatePortal_Replace();"/>'
                        + '&nbsp;&nbsp;<input type="button" value="Annuler" onclick="CreatePortal_Cancel();" onselect="CreatePortal_Cancel();"/>'
}


function CreatePortal_GetComposant(SousPage){

     var OldText = "Portail:"+document.getElementById('CreatePortal_Replace1').value;
     if(OldText != CreatePortal_Reference && OldText!=""){
          CreatePortal_Reference = OldText;
     }
     var Page = CreatePortal_Reference + SousPage;
     var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + Page + '&action=edit';
     var NouvelleRequete = new XMLHttpRequest();
     NouvelleRequete.open("GET", AdresseRequete, true);
     NouvelleRequete.send(null);
     NouvelleRequete.onreadystatechange = function() {
          if(NouvelleRequete.readyState == 4 && NouvelleRequete.status == 200) {
               var ElementTraitement = document.createElement('div');
               ElementTraitement.innerHTML = NouvelleRequete.responseText; 
               var EditTextArea = ElementTraitement.getElementsByTagName('textarea')[0].value;               
               document.getElementById('wpTextbox1').value = EditTextArea; 
               var OldText = document.getElementById('CreatePortal_Replace1').value;
               var NewText = document.getElementById('CreatePortal_Replace2').value;
               if((OldText!='')&&(NewText!='')) CreatePortal_Replace();
          }
     }
}

function CreatePortal_Replace(){
     try{
     var TextArea = document.getElementById('wpTextbox1');
     var OldText = document.getElementById('CreatePortal_Replace1').value;
     var NewText = document.getElementById('CreatePortal_Replace2').value;
     var Text = TextArea.value;
     }catch(e){ return; }
     if((OldText=='')&&(NewText=='')) return;
     
     if((OldText!='')&&(NewText!='')){
          if(NewText.indexOf(OldText)!=-1){
               alert("Le texte de remplacement contient le texte à remplacer.\nCela va générer une boucle et ne peut donc pas être effectué.\nVeuillez choisir d'autres paramètres.")
               return;
          }
     }
     var Scroll = TextArea.scrollTop;
     while(Text.indexOf(OldText)!=-1){
          Text = Text.split(OldText).join(NewText);
          if(Text.indexOf(OldText)==-1) break;
     }
     document.getElementById('wpTextbox1').value = Text;     
     document.getElementById('CreatePortal_Replace1').value = NewText;
     document.getElementById('CreatePortal_Replace2').value = OldText;
     TextArea.scrollTop = Scroll;
}

// ===========================================================================================

function CreatePortal_AddClassButton(){
     if(!document.editform) return;
     var Toolbar = document.getElementById('monobooktoolbar');
     if(!Toolbar){
          var Textarea = document.getElementById("wpTextbox1");
          if(!Textarea) return;
          Toolbar = document.createElement('div');
          Toolbar.id = 'monobooktoolbar';
          Textarea.parentNode.insertBefore(Toolbar, Textarea);
     }
     var button = '<img src="//upload.wikimedia.org/wikipedia/commons/1/1c/Button_flamme.png" heigth="23" width="23" alt="Remplacement fonctions obsolètes" />';

     var NewButton = document.createElement('a')
     NewButton.title = "Remplacement fonctions obsolètes";
     NewButton.href="javascript:CreatePortal_ReplaceObsoleteFunctions();";
     NewButton.className = "mw-toolbar-editbutton";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

function CreatePortal_ReplaceObsoleteFunctions(){
     var TextArea = document.getElementById("wpTextbox1");
     if(!TextArea) return;
     var Text = TextArea.value;
     var Scroll = TextArea.scrollTop;
     var Classes = ["hasClass", "addClass", "removeClass"];
     for(var a=0,l=Classes.length;a<l;a++){
         var ThisClass = Classes[a];
         var Reg = new RegExp(ThisClass+"\\([^\\)]*\\)", "g");
         //alert(Reg.toString());
         var allmatches = Text.match(Reg);
         if(allmatches == null) continue;
         //alert(Reg.toString()+" found "+allmatches.length+" times");
         for(var b=0,n=allmatches.length;b<n;b++){
              var thismatch = allmatches[b];
              var nodetext = thismatch.replace(/.*\( */g, "").replace(/ *,.*/g, "");
              var classtext = thismatch.replace(/.*, */g, "").replace(/\).*/g, "");
              Text = Text.replace(thismatch, "$("+nodetext+")."+ThisClass+"("+classtext+")");
         }
     }
     TextArea.value = Text; 
     TextArea.scrollTop = Scroll;
}

function CreatePortal_AddVariablesButton(){
     if(!document.editform) return;
     var Toolbar = document.getElementById('monobooktoolbar');
     if(!Toolbar){
          var Textarea = document.getElementById("wpTextbox1");
          if(!Textarea) return;
          Toolbar = document.createElement('div');
          Toolbar.id = 'monobooktoolbar';
          Textarea.parentNode.insertBefore(Toolbar, Textarea);
     }
     var button = '<img src="//upload.wikimedia.org/wikipedia/commons/1/1c/Button_flamme.png" heigth="23" width="23" alt="Remplacement fonctions obsolètes" />';

     var NewButton = document.createElement('a')
     NewButton.title = "Remplacement variables obsolètes";
     NewButton.href="javascript:CreatePortal_ReplaceObsoleteVariables();";
     NewButton.className = "mw-toolbar-editbutton";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

function CreatePortal_ReplaceObsoleteVariables(){
     var TextArea = document.getElementById("wpTextbox1");
     if(!TextArea) return;
     var Text = TextArea.value;
     var Scroll = TextArea.scrollTop;
     var LegacyVariables = ["skin", "stylepath", "wgActionPaths", "wgArticlePath", "wgAvailableSkins", "wgCaseSensitiveNamespaces", "wgContentLanguage", "wgContentNamespaces", "wgCookiePrefix", "wgCookieDomain", "wgCookiePath", "wgCookieExpiration", "wgDBname", "wgExtensionAssetsPath", "wgFileExtensions", "wgFormattedNamespaces", "wgLegacyJavaScriptGlobals", "wgLoadScript", "wgMainPageTitle", "wgNamespaceIds", "wgResourceLoaderMaxQueryLength", "wgScriptExtension", "wgScriptPath", "wgScript", "wgServer", "wgSiteName", "wgUrlProtocols", "wgVariantArticlePath", "wgVersion", "wgAction", "wgArticleId", "wgBreakFrames", "wgCanonicalNamespace", "wgCanonicalSpecialPageName", "wgCategories", "wgCurRevisionId", "wgDefaultDateFormat", "wgDigitTransformTable", "wgIsArticle", "wgIsProbablyEditable", "wgNamespaceNumber", "wgMonthNames", "wgMonthNamesShort", "wgPageContentLanguage", "wgPageName", "wgPostEdit", "wgRedirectedFrom", "wgRelevantPageName", "wgRevisionId", "wgRestrictionEdit", "wgRestrictionMove", "wgSeparatorTransformTable", "wgTitle", "wgRelevantUserName", "wgSearchType", "wgIsMainPage", "wgUserVariant", "wgUserEditCount", "wgUserGroups", "wgUserId", "wgUserLanguage", "wgUserName", "wgUserRegistration"];
     for(var a=0,l=LegacyVariables.length;a<l;a++){
         var ThisVariable = LegacyVariables[a];
         var matches = Text.match(new RegExp("[^=+\\-:;,&\\|\\)\n]*[^\"' ]*"+ThisVariable, "g"));
         if(matches===null) continue;
         for(var x=0,xlen=matches.length;x<xlen;x++){
             var thismatch = matches[x];
             if(thismatch.indexOf("mw.config.get") !=-1) continue;
             Text = Text.replace(thismatch, thismatch.substr(0, (thismatch.length-ThisVariable.length)) + "mw.config.get('"+ThisVariable+"')");
         }         
     }
     TextArea.value = Text; 
     TextArea.scrollTop = Scroll;
}


// ===========================================================================================

function CreatePortal_replaceFunctionSyntaxButton(){
     if(!document.editform) return;
     var Toolbar = document.getElementById('monobooktoolbar');
     if(!Toolbar){
          var Textarea = document.getElementById("wpTextbox1");
          if(!Textarea) return;
          Toolbar = document.createElement('div');
          Toolbar.id = 'monobooktoolbar';
          Textarea.parentNode.insertBefore(Toolbar, Textarea);
     }
     var button = '<img src="//upload.wikimedia.org/wikipedia/commons/1/1c/Button_flamme.png" heigth="23" width="23" alt="Remplacement syntaxe fonctions" />';

     var NewButton = document.createElement('a')
     NewButton.title = "Remplacement syntaxe fonctions";
     NewButton.href="javascript:CreatePortal_ReplaceFunctionSyntax();";
     NewButton.className = "mw-toolbar-editbutton";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

function CreatePortal_ReplaceFunctionSyntax(){
     var TextArea = document.getElementById("wpTextbox1");
     if(!TextArea) return;
     var Text = TextArea.value;
     var Scroll = TextArea.scrollTop;

     var VARreg = /\nvar[ ]+/g
     Text = Text.replace(VARreg, "\nwindow.");
     var FUNCreg = /\nfunction [^\(]*/g

     var allmatches = Text.match(FUNCreg);
     if(allmatches !== null){
         for(var b=0,n=allmatches.length;b<n;b++){
              var thismatch = allmatches[b];
              var funcname = thismatch.replace(/.*function /g, "").replace(/\n/g, "");
              Text = Text.replace(thismatch, "\nwindow."+funcname+" = function");
         }
     }
     TextArea.value = Text; 
     TextArea.scrollTop = Scroll;
}