Utilisateur:Dr Brains/GetOtherWikiPage.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) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
$(AddInterwiki_Portlet);

function AddInterwiki_Portlet(){
      var ToolBox = document.getElementById('p-tb');
      if(ToolBox){
            ToolBox.getElementsByTagName('ul')[0].innerHTML += '<li><a href="javascript:AddInterwiki_GetOldInterwiki();" title="Ajouter un ou plusieurs interwikis">Interwikis</a></li>';
      }
}

function AddInterwiki_GetOldInterwiki(){
      var Form = document.getElementById('Interwikiform');
      if(Form){
            return;
      }else{
            AddInterwiki_GetOldInterwiki();
      }
}

var OldInterwiki = new Array();
var OldInterwikiHref = new Array();
var OldInterwikiCount = -1;

function AddInterwiki_GetOldInterwiki(){
      if(!OldInterwiki[0]){
            var LangPortlet = document.getElementById('p-lang');
            if(LangPortlet){
                  var Lis = LangPortlet.getElementsByTagName('li');
                  for(var a=0;a<Lis.length;a++){
                        var Lang = Lis[a].className.split('-')[1];
                        var Lien = Lis[a].getElementsByTagName('a')[0];
                        OldInterwikiCount++
                        OldInterwiki[OldInterwikiCount] = '[[' + Lang + ':' + decodeURIComponent(Lien.href).split('/wiki/')[1].replace(/_/g," ") + ']]';
                        OldInterwikiHref[OldInterwikiCount] = decodeURIComponent(Lien.href).split('/wiki/').join('/w/index.php?title=').replace(/_/g," ");
                  }
            }
      }
      AddInterwiki_CreateForm(); 
}


function AddInterwiki_CreateForm(){
      var Content = document.getElementById('bodyContent');
      if(!Content) Content = document.getElementById('mw_contentholder');
      if(!Content) Content = document.getElementById('article');
      if(!Content) Content = document.body;

      var Formulaire = document.createElement('div');
      Formulaire.id = 'Interwikiform';
      Content.insertBefore(Formulaire, Content.firstChild);
      Formulaire.style.border = '3px double black';
      Formulaire.style.padding = '1em';

      var PageCibledefaut = ''
      if(!OldInterwiki[0]) PageCibledefaut = document.URL.split('fr.').join('en.');

      var FormulaireContent = '<center>'
                            + '<form>'
                            + '<input type="button" onclick="AddInterwiki_Cancel()" onselect="AddInterwiki_Cancel()" value="Annuler" />'
                            + '<br/>'
                            + '<br/>'
                            + '<table width="100%">'
                            + '<tr>'
                            + '<td width="33% align="center" valign="top" >'
                            + '<label for="Liste_OldInterwiki">Liste des liens inter-langues présents</label>'
                            + '<br/>'
                            + '<select id="Liste_OldInterwiki" size="'+(OldInterwikiCount+1)+'">';
      for(var a=0;a<OldInterwiki.length;a++){
            FormulaireContent += '<option value="'+OldInterwiki[a]+'" size="50" onclick="AddInterwiki_SelectInterwiki(\'' + encodeURIComponent(OldInterwikiHref[a]).replace(/'/g,"ZAPOSTROPHE") + '\')" >' + OldInterwiki[a] + '</option>';
      }
      FormulaireContent += '</select>'
                            + '<br/>'
                            + '<label for"PageCible">Page où chercher des liens inter-langues</label>'
                            + '<br/>'
                            + '<input id="PageCible" size="50" type="text" value="'+PageCibledefaut+'" />'
                            + '<br/>';
      FormulaireContent += '<input type="button" onclick="AddInterwiki_GetNewInterwikis()" onselect="AddInterwiki_GetNewInterwikis()" value="Lancer la recherche" />'
                            + '</td>'
                            + '<td width="33%" align="center" valign="top" >'
                            + '<label for"Textarea_ExtractedInterwiki">Interwikis extraits</label>'
                            + '<textarea id="Textarea_ExtractedInterwiki" value="" ></textarea>'
                            + '</td>'
                            + '<td width="33%" align="center" valign="top" >'
                            + '<label for"Textarea_NewInterwiki">Interwikis à ajouter</label>'
                            + '<textarea id="Textarea_NewInterwiki" value="" ></textarea>'
                            + '<br/>'
                            + '<input id="AddInterwiki" type="button" onclick="AddInterwiki_AddNewInterwikis()" onselect="AddInterwiki_AddNewInterwikis()" disabled="disabled" value="Ajouter" />'
                            + '</td>'
                            + '</tr>'
                            + '</table>';
      FormulaireContent += '<div id="ResultatCible" style="display:none;height:600px;overflow-y:auto;border:1px solid black;"></div>'
                            + '<br/>';
      FormulaireContent += '</form>'
                            + '</center>';
 
      Formulaire.innerHTML = FormulaireContent;
}

//////////////////////////////////////////////////////////////////////////////////

function AddInterwiki_Cancel(){
      var OldFormulaire = document.getElementById('Interwikiform');
      if(OldFormulaire) OldFormulaire.parentNode.removeChild(OldFormulaire);
}

function AddInterwiki_SelectInterwiki(page){
      page = decodeURIComponent(page.replace(/ZAPOSTROPHE/g, "'"));
      document.getElementById("PageCible").value = page;

}

function AddInterwiki_GetNewInterwikis(){
      var CibleInput = document.getElementById("PageCible");
      var PageCible = CibleInput.value + '&action=edit';
      //alert(PageCible);
      if(PageCible!=''){
            var ResultDiv = document.getElementById("ResultatCible");
            ResultDiv.innerHTML = '<iframe id="FrameInterwiki" src="'+ PageCible+ '" width="100%" height="100%"</iframe>';
            ResultDiv.style.display = 'block';
            document.getElementById("AddInterwiki").disabled = "disabled";
            document.getElementById("Textarea_NewInterwiki").value = "";
            AddInterwiki_GetPageContent();

      }
}

function AddInterwiki_GetPageContent(){
      var ResultDiv = document.getElementById("ResultatCible");
      var Frame = document.getElementById("FrameInterwiki");
      if(!Frame) return;    
      var PageCible = Frame.src;
      var LangCible =  PageCible.split('http://')[1].split('.')[0]; 
      try{
            var Contenu = document.getElementById("FrameInterwiki").contentDocument.body;
            if(!Contenu){ 
                  setTimeout("AddInterwiki_GetPageContent()", 500);
                  return;
            }
            var TextArea = AddInterwiki_getElementWithId("wpTextbox1", "textarea", Contenu);
            var CaHistory = AddInterwiki_getElementWithId("ca-history", "li", Contenu);
            if((!CaHistory)&&(!TextArea)){ 
                  setTimeout("AddInterwiki_GetPageContent()", 500);
                  return;
            }
            if(!CaHistory){
                  alert('La page demandée n\'existe pas dans cette langue');
                  return;
            }
            AddInterwiki_GetInterwikis(ResultDiv, TextArea.value);
      }catch(e){
            setTimeout("AddInterwiki_GetPageContent()", 500);
      }

}

function AddInterwiki_GetInterwikis(ResultDiv, WikiText){


      var ExtractedInterwiki = new Array();
      var ExtractedInterwikiCount = -1;
      var TitleElement = ResultDiv.getElementsByTagName("h1")[0];
      if(TitleElement){
            ExtractedInterwikiCount++
            ExtractedInterwiki[ExtractedInterwikiCount] = '[[' + LangCible + ':' + TitleElement.textContent.split('[edit]').join('') + ']]';
            //alert(ExtractedInterwiki[ExtractedInterwikiCount]);
      }
      var LangPortlet = AddInterwiki_getElementWithId( ResultDiv, "div" , "p-lang");
      if(LangPortlet){
            var UlPortlet = LangPortlet.getElementsByTagName('ul')[0];
            var Lis = UlPortlet.getElementsByTagName('li');
            for(var a=0;a<Lis.length;a++){
                  var Lang = Lis[a].className.split('-')[1];
                  var Lien = Lis[a].getElementsByTagName('a')[0];
                  if(Lang!=mw.config.get('wgServer').split('http://')[1].split('.')[0]){
                        ExtractedInterwikiCount++
                        ExtractedInterwiki[ExtractedInterwikiCount] = '[[' + Lang + ':' + decodeURIComponent(Lien.href).split("/wiki/")[1].replace(/_/g," ") + ']]';
                        //alert(ExtractedInterwiki[ExtractedInterwikiCount]);                        
                  }
            }
      }

      var ExtractedInterwikiListe = '';
      var NewInterwikiListe = '';
      ExtractedInterwiki.sort();

      var NewInterwiki = new Array();
      var NewInterwikiCount = -1;
      for(var a=0;a<ExtractedInterwiki.length;a++){
            ExtractedInterwikiListe += ExtractedInterwiki[a] + '\n';
            var matchinterwiki = false;
            for(var b=0;b<OldInterwiki.length;b++){
                  if(ExtractedInterwiki[a] == OldInterwiki[b]) matchinterwiki = true;
            }
            if(matchinterwiki== false){
                  NewInterwikiCount++
                  NewInterwiki[NewInterwikiCount] = ExtractedInterwiki[a];
                  NewInterwikiListe += NewInterwiki[NewInterwikiCount] + '\n';
            }
      }
      document.getElementById("Textarea_ExtractedInterwiki").value = ExtractedInterwikiListe;
      document.getElementById("Textarea_ExtractedInterwiki").rows = ExtractedInterwikiCount;

      document.getElementById("Textarea_NewInterwiki").value = NewInterwikiListe;
      document.getElementById("Textarea_NewInterwiki").rows = NewInterwikiCount;
      if(NewInterwiki[0]) document.getElementById("AddInterwiki").disabled = "";

      //alert(ListeInterwiki);
      ResultDiv.innerHTML = '';
      ResultDiv.style.display = 'none';

}



function AddInterwiki_getElementWithId( elementId, elementTagName, elementParentNode ){
      if(!elementParentNode) elementParentNode = document; 
      if(!elementTagName) elementTagName = '*';
      var TheElement = false;
      var Elements = elementParentNode.getElementsByTagName(elementTagName);
      var elementcount = 0;
      while(elementcount<Elements.length){
            var Id = Elements[elementcount].id;
            if(Id){
                  if(Id==elementId){
                        TheElement = Elements[elementcount];
                        break;
                  }
            }
            elementcount++
      }
      return TheElement;
}