Utilisateur:Dr Brains/AddCatsWhileEditing.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.
/*
{{Projet:JavaScript/Script}} 
*/
if((mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit"))
$(AddCatsWhileEditing_AddButton);

function AddCatsWhileEditing_AddButton(){
     var Toolbar = document.getElementById("toolbar");
     if(!Toolbar) return;
     var CatButton = document.getElementById("mw-editbutton-category");
     //if(CatButton) CatButton.style.display = 'none';

     var NewButton = document.createElement('a');
     NewButton.title = "Ajouter une catégorie";
     NewButton.innerHTML = '<img height="22" width="23" border="0" class="mw-toolbar-editbutton" id="mw-editbutton-categoryDeluxe" src="http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png" alt="Catégorie" >';
     NewButton.href = "javascript:AddCatsWhileEditing_CreateForm();";
    
     if(CatButton){
          CatButton.parentNode.insertBefore(NewButton, CatButton);
     }else{
          Toolbar.appendChild(NewButton);
     }
}

function AddCatsWhileEditing_DeleteForm(){
     var OldForm = document.getElementById("AddCatsWhileEditingForm");
     if(OldForm) OldForm.parentNode.removeChild(OldForm);
}
function AddCatsWhileEditing_CreateForm(){
     var OldForm = document.getElementById("AddCatsWhileEditingForm");
     var Toolbar = document.getElementById("toolbar");
     if(!Toolbar) Toolbar = document.getElementById("Oldbar");
     if((OldForm)||(!Toolbar)) return;

     var FormContent = '<form>'
                     + '<input type="button" value="Valider" '
                     + 'onclick="AddCatsWhileEditing_Edit();" onselect="AddCatsWhileEditing_Edit();" />'
                     + '<input type="button" value="Annuler" '
                     + 'onclick="AddCatsWhileEditing_DeleteForm();" onselect="AddCatsWhileEditing_DeleteForm();" />'
                     + '<br/>'
                     + '<input  id="AddCatsWhileEditing_Key" type="text" value="" "/>'
                     + '<label for="AddCatsWhileEditing_Key" >Clef de tri (facultatif)</label> '
                     + '<br/>'
                     + '<select id="AddCatsWhileEditing_Select" style="display:none" title="Suggestions de catégories"  ></select>'
                     + '<input  id="AddCatsWhileEditing_Text" type="text" value="" '
                     + 'onkeyup="AddCatsWhileEditing_TextChanged();"/>'
                     + '<label for="AddCatsWhileEditing_Text" >Catégorie</label> '
                     + '</form>';
     var FormDiv = document.createElement('div');
     FormDiv.id = "AddCatsWhileEditingForm";
     FormDiv.innerHTML = FormContent
     Toolbar.parentNode.insertBefore(FormDiv, Toolbar.nextSibling);




}
var AddCatsWhileEditing_TailleListe = 10;
var AddCatsWhileEditing_TextChanged_running = 0;
var AddCatsWhileEditing_KeyboardDelay = 5;

function AddCatsWhileEditing_TextChanged(){
     if ( AddCatsWhileEditing_TextChanged_running == 1 ) return ;
     if(AddCatsWhileEditing_TailleListe==0) return;
 
     var Select = document.getElementById("AddCatsWhileEditing_Select");
     var Input = document.getElementById("AddCatsWhileEditing_Text") ;
     if((!Input)||(!Select)) return;     
     var Value = Input.value;
     if(Value=='') return;
     AddCatsWhileEditing_TextChanged_running = 1;
 
     Value = Value.substr(0,1).toUpperCase() + Value.substr(1,Value.length) ;
 
     var url = mw.config.get('wgServer') + "/" + mw.config.get('wgScriptPath') + "/api.php?&action=query&list=allpages&apnamespace=14&apfrom=" + Value + "&aplimit=" + AddCatsWhileEditing_TailleListe;
 
     var AddCatsWhileEditing_Request = new XMLHttpRequest();
     AddCatsWhileEditing_Request.open("GET", url, true);
     AddCatsWhileEditing_Request.onreadystatechange = function() {
          if(AddCatsWhileEditing_Request.readyState == 4 && AddCatsWhileEditing_Request.status == 200) {
               Select.innerHTML = '';
               var OldTemp = document.getElementById('Temp');
               if(OldTemp) OldTemp.parentNode.removeChild(OldTemp);
               var Temp = document.createElement('div');
               Temp.id = 'Temp';
               //document.body.insertBefore(Temp, document.body.firstChild);
               Temp.innerHTML = AddCatsWhileEditing_Request.responseText;
               var Infos = Temp.getElementsByTagName('span');
               var NbOptions = 0;
               for(var a=0;a<Infos.length;a++){
                    var Info = Infos[a].innerHTML;
                    if(Info.indexOf('title=')!=-1){
                         var TitrePage = Info.split('title="')[1].split('"')[0];
                         TitrePage = AddCatsWhileEditing_HTMLDecode(TitrePage);
                         TitrePage = TitrePage.split(mw.config.get('wgFormattedNamespaces')[14] + ':').join('');
                         TitrePageEncode = TitrePage.replace(/'/g,"ZAPOSTROPHE");
                         var NewOption = '<option value="'+TitrePage+'" '
                                       + 'onclick="AddCatsWhileEditing_TextChanged_Set(\''+TitrePageEncode+'\'); '
                                       + 'AddCatsWhileEditing_TextChanged();" '
                                       + '>'+TitrePage+'</option>';
                         Select.innerHTML += NewOption;
                         NbOptions++
                    }
               }
               if(NbOptions>0){
                    Select.onchange = function(){
                         var Selected = this.getElementsByTagName('option');
                         for(var a=0;a<Selected.length;a++){
                               if(Selected[a].selected){
                                     var TextSelected = Selected[a].value;
                                     document.getElementById("AddCatsWhileEditing_Text").value = TextSelected;
                                     setTimeout("AddCatsWhileEditing_TextChanged();", AddCatsWhileEditing_KeyboardDelay*1000);
                               } 
                         }
                    }
 
                    Select.size = NbOptions;
                    Select.style.display = 'inline';
                    Select.style.zIndex = 5 ;
                    Select.style.position = "absolute" ;
                    Input.style.width = Select.offsetWidth + "px" ;
 
                    Select.style.top = (parseInt(Input.offsetTop) + parseInt(Input.offsetHeight)) + 'px';
                    Select.style.left = (parseInt(Input.parentNode.offsetLeft ) - 1) + 'px';
               }else{
                    Select.style.display = 'none';
                    Select.innerHTML = '';
               }
               AddCatsWhileEditing_TextChanged_running = 0;
          }
     }
     AddCatsWhileEditing_Request.send(null);
}
 
function AddCatsWhileEditing_TextChanged_Set(text){
     text = text.replace(/ZAPOSTROPHE/g,"'");
     document.getElementById("AddCatsWhileEditing_Text").value = text; 
     document.getElementById("AddCatsWhileEditing_Text").focus() ;
}

function AddCatsWhileEditing_HTMLDecode(text){
      var EncodedCharacter = new Array();
      var DecodedCharacter = new Array();
      var CharacterCount = 0;
 
      EncodedCharacter[CharacterCount] = "&amp;";
      DecodedCharacter[CharacterCount] = "&";
      CharacterCount++;
      EncodedCharacter[CharacterCount] = "&#039;";
      DecodedCharacter[CharacterCount] = "'";
      CharacterCount++;
      EncodedCharacter[CharacterCount] = "&quot;";
      DecodedCharacter[CharacterCount] = '"';
      CharacterCount++;
 
      for(var a=0;a<EncodedCharacter.length;a++){
            while(text.indexOf(EncodedCharacter[a])!=-1){
                  text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);
                  if(text.indexOf(EncodedCharacter[a])==-1) break;
            }
      }
      return text;
}

function AddCatsWhileEditing_Edit(){

     var InputCat = document.getElementById("AddCatsWhileEditing_Text") ;
     var InputKey = document.getElementById("AddCatsWhileEditing_Key");
     var TextArea = document.getElementById("wpTextbox1");
     if((!InputCat)||(!InputKey)||(!TextArea)) return;     
     var ValueCat = InputCat.value;
     var ValueKey = InputKey.value;
     if(ValueCat=='') return; 
     if(ValueKey!='') ValueKey = '|'+ValueKey;
     var NewCat = mw.config.get('wgFormattedNamespaces')[14] + ':' + ValueCat.substr(0,1).toUpperCase() + ValueCat.substr(1,ValueCat.length) ;
     var NewLink = '[[' + NewCat + ValueKey + ']]';
     var OldText = TextArea.value;

     var CatRegExp = new RegExp("(\\s*)\\[\\[ *(?:Catégorie|Category) *: *" + ValueCat.replace(/([\\\^\$\*\+\?\.\|\{\}\[\]\(\)])/g, "\\$1") + " *(\\|[^\\]]*)?\\]\\]", "gi");
     var matches = OldText.match(CatRegExp);
     if (matches != null && matches.length == 1) {
          alert('La catégorie « '+ValueCat+' » est déjà présente.');
          return;
     }
     var re = /\[\[(?:Catégorie|Category):[^\]]+\]\]/ig
     var index = -1;
     while (re.exec(OldText) != null) index = re.lastIndex;
     if (index < 0) {  // no category
//------------------------------------------------------------------------------------------------------------- Recherche interwiki
          var interWiki = new RegExp('^\\s*\\[\\[([a-z][a-z].?(x?-[^\\]]+)?|simple|tokipona):([^\\]]*)\\]\\]\\s*$');
          var blank = new RegExp('^\\s*$');
          var lines = t.split('\n');
          var DebutModele = '';
          var SuiteModele = '';
          var FoundInterwiki = false;
          for (var lineId = lines.length - 1; lineId >= 0; --lineId){
               if (!interWiki.exec(lines[lineId]) && !blank.exec(lines[lineId])){
                    DebutModele = lines.slice(0, lineId + 1).join('\n');
                    SuiteModele = lines.slice(lineId + 1).join('\n');
                    break;
               }
          }
          DebutModele = DebutModele + '\n\n';
          while(SuiteModele.indexOf('\n\n')!=-1){
               SuiteModele = SuiteModele.split("\n\n").join("\n");
          }
          SuiteModele = SuiteModele.replace(/^\n/, "");
          t = DebutModele + txt + '\n\n' + SuiteModele; 
//------------------------------------------------------------------------------------------------------------------
     } else {  // already a category
          t = t.substring(0, index) + '\n' + txt + t.substring(index);
     }
     TextArea.value = OldText;
}