MediaWiki:Common.js: Difference between revisions

From BoyWiki
(m)
No edit summary
 
(17 intermediate revisions by the same user not shown)
Line 68: Line 68:
   
   
   // overload labels show/hide with title attribute
   // overload labels show/hide with title attribute
   // exemple : title="[down]/[up]"
   // exemple : title="[down]:[up]"
   var caption = [expandCaption, collapseCaption];
   var caption = [expandCaption, collapseCaption];
   if (NavFrame.title && NavFrame.title.length > 0) {
   if (NavFrame.title && NavFrame.title.length > 0) {
     caption = NavFrame.title.split("/");
     caption = NavFrame.title.split(":");
     if (caption.length < 2) caption.push(collapseCaption);
     if (caption.length < 2) caption.push(collapseCaption);
   }
   }
Line 79: Line 79:
     for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
     for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
       if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'none';
       if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'none';
      if (hasClass(NavChild, 'NavContent')) NavChild.style.maxHeight = '0px';
       if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[0];
       if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[0];
      if (hasClass(NavChild, 'NavContent')) {
        NavChild.style.maxHeight = '0px';
        NavChild.style.overflow = 'hidden';
        NavChild.style.opacity = '0';
      }
     }
     }
   
   
Line 87: Line 91:
     for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
     for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
       if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'block';
       if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'block';
      if (hasClass(NavChild, 'NavContent')) NavChild.style.maxHeight = '400px';
       if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[1];
       if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[1];
      if (hasClass(NavChild, 'NavContent')) {
        NavChild.style.maxHeight = '300px';
        NavChild.style.overflow = 'auto';
        NavChild.style.opacity = '1';
      }
     }
     }
   }
   }
Line 109: Line 117:
       // surcharge des libellés dérouler/enrouler grâce a l'attribut title
       // surcharge des libellés dérouler/enrouler grâce a l'attribut title
       var caption = collapseCaption;
       var caption = collapseCaption;
       if (NavFrame.title && NavFrame.title.indexOf("/") > 0) {
       if (NavFrame.title && NavFrame.title.indexOf(":") > 0) {
         caption = NavFrame.title.split("/")[1];
         caption = NavFrame.title.split(":")[1];
       }
       }
   
   
Line 130: Line 138:
}
}
addOnloadHook(createNavigationBarToggleButton);
addOnloadHook(createNavigationBarToggleButton);
/************************************************************/
/* Create XHR object for http req */
function createxhrobject() {
  if (window.XMLHttpRequest) { // all browsers
      return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) { // IE < 7
      return new ActiveXObject("Msxml2.XMLHTTP");
  }
  else return null;
}
/************************************************************/
/* File usage on other wikis - Search image usage */
function fuoow() {
  if (wgAction != "view" || wgNamespaceNumber != 6) return;
  var xhr1 = createxhrobject();
  if (xhr1 == null) return;
  var xhr2 = createxhrobject();
  if (xhr2 == null) return;
  var xhr3 = createxhrobject();
  if (xhr3 == null) return;
  xhr1.open('GET', '/en/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
  xhr1.onreadystatechange = function() {fuoow_hdlr(xhr1,'en');}
  xhr1.send('');
  xhr2.open('GET', '/fr/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
  xhr2.onreadystatechange = function() {fuoow_hdlr(xhr2,'fr');}
  xhr2.send('');
  xhr3.open('GET', '/de/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
  xhr3.onreadystatechange = function() {fuoow_hdlr(xhr3,'de');}
  xhr3.send('');
  var h2 = document.createElement('h2');
  h2.id = 'globalusage';
  var h2txt = document.createTextNode('File usage on other wikis');
  h2.appendChild(h2txt);
  //var locat = document.getElementById('mw-imagepage-section-linkstoimage') || document.getElementById('mw-imagepage-nolinkstoimage');
  //locat.parentNode.insertBefore(h2, locat.nextSibling);
  var locat = document.getElementById('filehistory');
  locat.parentNode.insertBefore(h2,locat);
  var ul = document.createElement('ul');
  ul.id = 'imagepage-section-globalusage';
  //locat.parentNode.insertBefore(ul, locat.nextSibling.nextSibling);
  locat.parentNode.insertBefore(ul, locat);
}
addOnloadHook(fuoow);
/* Request handler and display */
function fuoow_hdlr(xhr,lg) {
  if (xhr.readyState == 4 && xhr.status == 200) {
      var pages = xhr.responseXML.documentElement;
      var pglst = pages.getElementsByTagName('imageusage')[0].childNodes;
      var pgs = '';
      for (var i = 0; i < pglst.length ; i++) {
        pgs += '<li><a href="/'+lg+'/'+pglst[i].getAttribute('title')+'">'+pglst[i].getAttribute('title')+'</a></li>';
      }
      if (pgs.length) {
        switch (lg) {
            case 'en': var titlg = 'Usage on www.boywiki.org/en'; break;
            case 'fr': var titlg = 'Utilisation sur www.boywiki.org/fr'; break;
            case 'de': var titlg = 'Verwendung auf www.boywiki.org/de'; break;
            case 'eo': var titlg = 'Uzo sur www.boywiki.org/eo'; break;
        }
        document.getElementById('imagepage-section-globalusage').innerHTML += '<li>'+titlg+'</li><ul>'+pgs+'</ul>';
      }
  }
}

Latest revision as of 16:15, 15 July 2014

/* Any JavaScript here will be loaded for all users on every page load. */


/**
 * Diverses fonctions manipulant les classes (utilisées par les boîtes déroulantes)
 * isClass et whichClass depuis http://fr.wikibooks.org/w/index.php?title=MediaWiki:Common.js&oldid=140211
 * hasClass, addClass, removeClass et eregReplace depuis http://drupal.org.in/doc/misc/drupal.js.source.html
 * surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions
 */

function isClass(element, classe) {
    return hasClass(element, classe);
}
 
function whichClass(element, classes) {
    var s=" "+element.className+" ";
    for(var i=0;i<classes.length;i++)
        if (s.indexOf(" "+classes[i]+" ")>=0) return i;
    return -1;
}
 
function hasClass(node, className) {
  if (node.className == className) {
    return true;
  }
  var reg = new RegExp('(^| )'+ className +'($| )')
  if (reg.test(node.className)) {
    return true;
  }
  return false;
}
 
function addClass(node, className) {
    if (hasClass(node, className)) {
        return false;
    }
    node.className += ' '+ className;
    return true;
}
 
function removeClass(node, className) {
  if (!hasClass(node, className)) {
    return false;
  }
  node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className);
  return true;
}
 
function eregReplace(search, replace, subject) {
    return subject.replace(new RegExp(search,'g'), replace);
}



/**
 * Drop-down box  [[Template:DD-box]] 
 */

var NavigationBarShowDefault = 0;
var collapseCaption = ' ⇧ ';
var expandCaption = ' ⇩ ';
 
function toggleNavigationBar(indexNavigationBar) {
  var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
  var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
 
  if (!NavFrame || !NavToggle) return;
 
  // overload labels show/hide with title attribute
  // exemple : title="[down]:[up]"
  var caption = [expandCaption, collapseCaption];
  if (NavFrame.title && NavFrame.title.length > 0) {
    caption = NavFrame.title.split(":");
    if (caption.length < 2) caption.push(collapseCaption);
  }
 
  // if shown now
  if (NavToggle.firstChild.data == caption[1]) {
    for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
      if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'none';
      if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[0];
      if (hasClass(NavChild, 'NavContent')) {
         NavChild.style.maxHeight = '0px';
         NavChild.style.overflow = 'hidden';
         NavChild.style.opacity = '0';
      }
    }
 
  // if hidden now
  } else if (NavToggle.firstChild.data == caption[0]) {
    for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
      if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'block';
      if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[1];
      if (hasClass(NavChild, 'NavContent')) {
         NavChild.style.maxHeight = '300px';
         NavChild.style.overflow = 'auto';
         NavChild.style.opacity = '1';
      }
    }
  }
}
 
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton() {
  var indexNavigationBar = 0;
  var NavFrame;
  // iterate over all < div >-elements
  for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) {
    // if found a navigation bar
    if (hasClass(NavFrame, "NavFrame")) {
      indexNavigationBar++;
      var NavToggle = document.createElement("a");
      NavToggle.className = 'NavToggle';
      NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
      NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
 
      // surcharge des libellés dérouler/enrouler grâce a l'attribut title
      var caption = collapseCaption;
      if (NavFrame.title && NavFrame.title.indexOf(":") > 0) {
         caption = NavFrame.title.split(":")[1];
      }
 
      var NavToggleText = document.createTextNode(caption);
      NavToggle.appendChild(NavToggleText);
 
      // add NavToggle-Button as first div-element 
      // in <div class="NavFrame">
      NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
      NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
    }
  }
  // if more Navigation Bars found than Default: hide all
  if (NavigationBarShowDefault < indexNavigationBar) {
    for( var i=1; i<=indexNavigationBar; i++ ) {
      toggleNavigationBar(i);
    }
  }
}
addOnloadHook(createNavigationBarToggleButton);

/************************************************************/

/* Create XHR object for http req */

function createxhrobject() {
   if (window.XMLHttpRequest) { // all browsers
      return new XMLHttpRequest();
   }
   else if (window.ActiveXObject) { // IE < 7
      return new ActiveXObject("Msxml2.XMLHTTP");
   }
   else return null;
}

/************************************************************/

/* File usage on other wikis - Search image usage */

function fuoow() {
   if (wgAction != "view" || wgNamespaceNumber != 6) return;
   var xhr1 = createxhrobject();
   if (xhr1 == null) return;
   var xhr2 = createxhrobject();
   if (xhr2 == null) return;
   var xhr3 = createxhrobject();
   if (xhr3 == null) return;
   xhr1.open('GET', '/en/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
   xhr1.onreadystatechange = function() {fuoow_hdlr(xhr1,'en');}
   xhr1.send('');
   xhr2.open('GET', '/fr/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
   xhr2.onreadystatechange = function() {fuoow_hdlr(xhr2,'fr');}
   xhr2.send('');
   xhr3.open('GET', '/de/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
   xhr3.onreadystatechange = function() {fuoow_hdlr(xhr3,'de');}
   xhr3.send('');

   var h2 = document.createElement('h2');
   h2.id = 'globalusage';
   var h2txt = document.createTextNode('File usage on other wikis');
   h2.appendChild(h2txt);
   //var locat = document.getElementById('mw-imagepage-section-linkstoimage') || document.getElementById('mw-imagepage-nolinkstoimage');
   //locat.parentNode.insertBefore(h2, locat.nextSibling);
   var locat = document.getElementById('filehistory');
   locat.parentNode.insertBefore(h2,locat);

   var ul = document.createElement('ul');
   ul.id = 'imagepage-section-globalusage';
   //locat.parentNode.insertBefore(ul, locat.nextSibling.nextSibling);
   locat.parentNode.insertBefore(ul, locat);
}

addOnloadHook(fuoow);

/* Request handler and display */
function fuoow_hdlr(xhr,lg) {
   if (xhr.readyState == 4 && xhr.status == 200) {
      var pages = xhr.responseXML.documentElement;
      var pglst = pages.getElementsByTagName('imageusage')[0].childNodes;
      var pgs = '';
      for (var i = 0; i < pglst.length ; i++) {
         pgs += '<li><a href="/'+lg+'/'+pglst[i].getAttribute('title')+'">'+pglst[i].getAttribute('title')+'</a></li>';
      }
      if (pgs.length) {
         switch (lg) {
            case 'en': var titlg = 'Usage on www.boywiki.org/en'; break;
            case 'fr': var titlg = 'Utilisation sur www.boywiki.org/fr'; break;
            case 'de': var titlg = 'Verwendung auf www.boywiki.org/de'; break;
            case 'eo': var titlg = 'Uzo sur www.boywiki.org/eo'; break;
         }
         document.getElementById('imagepage-section-globalusage').innerHTML += '<li>'+titlg+'</li><ul>'+pgs+'</ul>';
      }
   }
}