Utilisateur:Dr Brains/ListfilesDeluxe.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.// Permet de zoomer une image au survol de la souris ou au focus du clavier dans la page spécial Special:Listfiles
// Documentation : [[Projet:JavaScript/Notices/ListfilesDeluxe]]
// {{Catégorisation JS|ListfilesDeluxe}}
//<syntaxhighlight lang=javascript>
//<pre><nowiki>
////////////////////////////////////////////////////////////// VARIABLES PERSONNALISABLES //////////////////////////////////////////
// délai avant zoom en millisecondes
if(typeof(ListfilesDeluxe_Delay)=="undefined") var ListfilesDeluxe_Delay = 200;
// délai entre deux étapes d'agrandissement en millisecondes
if(typeof(ListfilesDeluxe_TimeOut)=="undefined") var ListfilesDeluxe_TimeOut = 20;
// multiplicateur de grossissement max
if(typeof(ListfilesDeluxe_MaxMultiplicator)=="undefined") var ListfilesDeluxe_MaxMultiplicator = 4;
////////////////////////////////////////////////////////////// FONCTIONS //////////////////////////////////////////
/* VARIABLES */
var ListfilesDeluxe_LinkOnImage = new Array(); // Liste des liens "image"
var ListfilesDeluxe_LinkOnImageState = new Array(); // État de zoom : 1 = zoom avant, -1 = zoom arrière, 0 = taille normale
var ListfilesDeluxe_LinkOnImageOriginalWidth = new Array(); // Largeur originale de l'image
var ListfilesDeluxe_LinkOnImageOriginalHeight = new Array(); // Hauteur originale de l'image
var ListfilesDeluxe_LinkOnImageOriginalTarget = new Array(); // Cible originale de l'image (basse résolution)
var ListfilesDeluxe_LinkOnImageZoomedTarget = new Array(); // Cible zoomée de l'image (haute résolution)
/* LANCEMENT */
if(mw.config.get('wgCanonicalSpecialPageName')=="Listfiles")
$(ListfilesDeluxe_CheckLinks);
/* ÉTABLISSEMENT DE LA LISTE DES LIENS "IMAGE" */
function ListfilesDeluxe_CheckLinks(){
var TDs = document.getElementsByTagName('td');
for(var a=0;a<TDs.length;a++){
if($(TDs[a]).hasClass("TablePager_col_thumb")){
var TDThumb = TDs[a];
$(TDThumb).addClass("nopopups");
var Links = TDThumb.getElementsByTagName('a');
var LinkOnImage = Links[0];
if(LinkOnImage){
while(LinkOnImage.className != "image"){
LinkOnImage = LinkOnImage.nextSibling;
if(!LinkOnImage) break;
}
}
if(LinkOnImage){
var Extension = LinkOnImage.href.replace(/.*\./g,"").toLowerCase();
if((Extension!='ogg')&&(Extension!='ogv')&&(Extension!='pdf')){
ListfilesDeluxe_LinkOnImage.push(LinkOnImage);
}
}
}
}
ListfilesDeluxe_ModifyLinks();
}
/* TRANSFORMATION DES LIENS, MISE A JOUR VARIABLES */
function ListfilesDeluxe_ModifyLinks(){
for(var b=0;b<ListfilesDeluxe_LinkOnImage.length;b++){
var ThisLink = ListfilesDeluxe_LinkOnImage[b];
ThisLink.id = "ZoomLink_" +b;
ThisLink.onmouseover = function(){
var ID = parseInt(this.id.split('ZoomLink_').join(''));
ListfilesDeluxe_LinkOnImageState[ID] = 1;
ListfilesDeluxe_ReplaceSrc(ID);
setTimeout("ListfilesDeluxe_ZoomIn("+ID+");", ListfilesDeluxe_Delay);
}
ThisLink.onfocus = function(){
var ID = parseInt(this.id.split('ZoomLink_').join(''));
ListfilesDeluxe_LinkOnImageState[ID] = 1;
ListfilesDeluxe_ReplaceSrc(ID);
setTimeout("ListfilesDeluxe_ZoomIn("+ID+");", ListfilesDeluxe_Delay);
}
ThisLink.onmouseout = function(){
var ID = parseInt(this.id.split('ZoomLink_').join(''));
ListfilesDeluxe_LinkOnImageState[ID] = -1;
ListfilesDeluxe_ZoomOut(ID);
}
ThisLink.onblur = function(){
var ID = parseInt(this.id.split('ZoomLink_').join(''));
ListfilesDeluxe_LinkOnImageState[ID] = -1;
ListfilesDeluxe_ZoomOut(ID);
}
var ThisImage = ThisLink.getElementsByTagName('img')[0];
ThisImage.id = "ZoomImage_" +b;
ThisImage.setAttribute('style', 'background:url("http://upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png");');
ListfilesDeluxe_LinkOnImageOriginalWidth[b] = ThisImage.width;
ListfilesDeluxe_LinkOnImageOriginalHeight[b] = ThisImage.height;
ListfilesDeluxe_LinkOnImageOriginalTarget[b] = ThisImage.src;
ListfilesDeluxe_LinkOnImageState[b] = 0;
}
}
/* ZOOM AVANT */
function ListfilesDeluxe_ZoomIn(ID){
if(ListfilesDeluxe_LinkOnImageState[ID]!= 1) return;
var Image = document.getElementById('ZoomImage_'+ID);
if(!Image) return;
var ImageWidth = parseInt(Image.width);
var ImageHeight = parseInt(Image.height);
var Content = document.getElementById("bodyContent");
if(!Content) Content = document.getElementById("mw_contentholder");
if(!Content) Content = document.getElementById("article");
var ContentWidth = (parseInt(Content.offsetWidth) - 30);
if(ImageWidth<(ListfilesDeluxe_LinkOnImageOriginalWidth[ID]*ListfilesDeluxe_MaxMultiplicator)){
var NewImageWidth = parseInt(ImageWidth * 1.05);
var NewImageHeight = parseInt(ImageHeight * 1.05);
if(NewImageWidth>ContentWidth) return;
Image.width = NewImageWidth;
Image.height = NewImageHeight;
setTimeout("ListfilesDeluxe_ZoomIn("+ID+");", ListfilesDeluxe_TimeOut);
}
}
/* ZOOM ARRIÈRE */
function ListfilesDeluxe_ZoomOut(ID){
if(ListfilesDeluxe_LinkOnImageState[ID]!= -1) return;
var Image = document.getElementById('ZoomImage_'+ID);
if(!Image) return;
var ImageWidth = parseInt(Image.width);
var ImageHeight = parseInt(Image.height);
if(ImageWidth>ListfilesDeluxe_LinkOnImageOriginalWidth[ID]){
var NewImageWidth = parseInt(ImageWidth * 0.8);
var NewImageHeight = parseInt(ImageHeight * 0.8);
if(NewImageWidth<ListfilesDeluxe_LinkOnImageOriginalWidth[ID]){
NewImageWidth = ListfilesDeluxe_LinkOnImageOriginalWidth[ID];
NewImageHeight = ListfilesDeluxe_LinkOnImageOriginalHeight[ID];
Image.src = ListfilesDeluxe_LinkOnImageOriginalTarget[ID];
ListfilesDeluxe_LinkOnImageState[ID] = 0;
}
Image.width = NewImageWidth;
Image.height = NewImageHeight;
setTimeout("ListfilesDeluxe_ZoomOut("+ID+");", ListfilesDeluxe_TimeOut);
}
}
/* RECHERCHE CIBLE DE L'IMAGE EN HAUTE RÉSOLUTION */
function ListfilesDeluxe_ReplaceSrc(ID){
var Image = document.getElementById('ZoomImage_'+ID);
var Link = document.getElementById('ZoomLink_'+ID);
if((!Image)||(!Link)) return;
if(ListfilesDeluxe_LinkOnImageZoomedTarget[ID]){
Image.src = ListfilesDeluxe_LinkOnImageZoomedTarget[ID];
return;
}
var Cible = mw.config.get('wgFormattedNamespaces')[6] + ':' + Link.href.split(mw.config.get('wgFormattedNamespaces')[6] + ':')[1];
var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=imageinfo&iiprop=url&iiurlwidth='+(ListfilesDeluxe_LinkOnImageOriginalWidth[ID]*ListfilesDeluxe_MaxMultiplicator)+'&titles=' + encodeURIComponent(Cible);
var NouvelleRequete = sajax_init_object();
NouvelleRequete.open("GET", AdresseRequete, true);
NouvelleRequete.onreadystatechange = function() {
if(NouvelleRequete.readyState != 4 || NouvelleRequete.status != 200) return;
var ObjetXML = NouvelleRequete.responseXML;
if(!ObjetXML) return;
var Info = ObjetXML.getElementsByTagName('ii')[0];
if(Info){
var NewSrcImage = Info.getAttribute("thumburl");
ListfilesDeluxe_LinkOnImageZoomedTarget[ID] = NewSrcImage;
if(ListfilesDeluxe_LinkOnImageState[ID]!= 1) return;
Image.src = NewSrcImage;
}
}
NouvelleRequete.send(null);
}
///////////////////////////////////////////////////////////////////////////////////////////</nowiki></pre></syntaxhighlight>