Aller au contenu

Utilisateur:Dr Brains/CategoryForceGallery.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')==14 && (mw.config.get('wgAction')=="view"||mw.config.get('wgAction')=="purge"||mw.config.get('wgAction')=="submit")) addOnloadHook(CategoryForceGallery_AddLink)

var CategoryForceGallery_Show = "Afficher la galerie";
var CategoryForceGallery_WidthText = "Largeur des images (en pixel)"
var CategoryForceGallery_Width = 150;

function CategoryForceGallery_AddLink(){
    if(typeof(CategoryForceGallery_UserOptions)=="function") CategoryForceGallery_UserOptions();
    var Pages = document.getElementById("mw-pages");
    var Gallery = document.getElementById("mw-category-media");

    if(!Pages || Gallery) return;
    var Title = Pages.getElementsByTagName('h2')[0];
    var GalleryUl = Pages.getElementsByTagName("ul");
    if(GalleryUl[0]&&Title && CategoryForceGallery_GetLinks("Count")!=0){
        var Span = document.createElement('span');
        Span.id = 'CategoryForceGallery_Link';
        Span.setAttribute('style', "font-size:75%");
        var ToggleLink = document.createElement('a');
        ToggleLink.href = 'javascript:CategoryForceGallery_Toggle();';
        ToggleLink.title = CategoryForceGallery_Show;
        ToggleLink.innerHTML = CategoryForceGallery_Show; 
        Span.appendChild(document.createTextNode("["));       
        Span.appendChild(ToggleLink);       
        Span.appendChild(document.createTextNode("]"));       
        Title.appendChild(document.createTextNode(" "));
        Title.appendChild(Span);
    }
}

function CategoryForceGallery_Toggle(){
    var ListDiv = document.getElementById("mw-pages");
    var Link = document.getElementById("CategoryForceGallery_Link");
    if(!ListDiv || !Link) return;

    var Gallery = document.getElementById("mw-category-media");

    if(ListDiv.style.display == "none" && Gallery){
         Gallery.style.display = "none";
         ListDiv.style.display = "block";
    }else{
         if(Gallery){
            Gallery.style.display = "block";
            ListDiv.style.display = "none";
        }else{
            var Titles = CategoryForceGallery_GetLinks("Titles");
            var LinkList = CategoryForceGallery_GetLinks("Links");
            CategoryForceGallery_getImages(Titles, LinkList);
            Link.style.display = "none";
        }
    }
}

function CategoryForceGallery_GetLinks(Mode){
    var ListDiv = document.getElementById("mw-pages");
    if(!ListDiv) return 0;

    var Gallery = document.getElementById("mw-category-media");

    var LinkCount = 0;
    var LinkList = new Array();
    var Titles = new Array();
    var GalleryUl = ListDiv.getElementsByTagName("ul");
    for(var a=0;a<GalleryUl.length;a++){
        var Links = GalleryUl[a].getElementsByTagName('a');
        for(var b=0;b<Links.length;b++){
            if(Links[b].title.indexOf(mw.config.get('wgFormattedNamespaces')[6]+":")!=-1){
                LinkList.push(Links[b]);
                Titles.push(Links[b].title);
                LinkCount++
            }
        }
    }
    if(Mode == "Links") return LinkList;
    if(Mode == "Titles") return Titles;
    if(Mode == "Count") return LinkCount;
}

function CategoryForceGallery_getImages(Titles, LinkList, offsetContinue){
     if(!offsetContinue && offsetContinue!=""){
          CategoryForceGallery_Width = prompt(CategoryForceGallery_WidthText,CategoryForceGallery_Width);
          if(!CategoryForceGallery_Width) return;
          offsetContinue = "";
     }
     var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=imageinfo&iiprop=url&iiurlwidth='+CategoryForceGallery_Width+'&titles=' + Titles.join("|").replace(/&/g, "%26") + offsetContinue;
     var NouvelleRequete = new XMLHttpRequest();
     NouvelleRequete.open("GET", AdresseRequete, true);
     NouvelleRequete.onreadystatechange = function() {
          if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
          var ObjetXML = NouvelleRequete.responseXML; 
          if(!ObjetXML) return;
          var NextRequestTitles = new Array();
          var NextRequestLinks = new Array();
          var Link = ObjetXML.getElementsByTagName('page');
          for(var a=0,l=Link.length;a<l;a++){ 
               var Page = Link[a].getAttribute('title');
               var NewSrcImage = Link[a].getElementsByTagName('ii')[0].getAttribute("thumburl");
               var PageIndex = Titles.indexOf(Page);
               if(PageIndex<0) continue;
               var ThisLink = LinkList[PageIndex];
               if(ThisLink.className == "FileLink") continue;
               ThisLink.className = "FileLink";
               var Li = ThisLink.parentNode;
               var Img = document.createElement('img');
               Img.width = CategoryForceGallery_Width;
               Img.src = NewSrcImage;
               Img.setAttribute("style", "margin:0.5em;");
               $(ThisLink).after('<br>', Img);
               Li.setAttribute('style', 'margin:0.5em;border:1px dashed silver;text-align:center;background:url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png")');
               if( a==(l-1) && Page != Titles[(Titles.length-1)]){
                    for(var b=(PageIndex+1);b<Titles.length;b++){
                         if(Titles[b] && LinkList[b]){
                              NextRequestTitles.push(Titles[b]);
                              NextRequestLinks.push(LinkList[b]);
                         }
                    }
               }
          }
          if(NextRequestTitles[0]){
               CategoryForceGallery_getImages(NextRequestTitles, NextRequestLinks, "");
               return;
          }
     }
     NouvelleRequete.send(null);
}