MediaWiki:Common.js

From dmfswiki
Revision as of 23:04, 29 November 2011 by Tiksmoke (Talk | contribs)

Jump to: navigation, search

Note: After saving, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Clear the cache in Tools → Preferences
/*[[Catégorie:JavaScript du Wiktionnaire|{{SUBPAGENAME}}]]*/
/*************************************************************/
/* Fonctions JavaScript : pallient les limites de JavaScript */
/* Surveiller : http://www.ecmascript.org/                   */
/* Copié depuis Wikipédia : [[w:MediaWiki:Common.js]]        */
/*************************************************************/

/**
 * getElementsByClass : rechercher les éléments de la page dont le paramètre "class" est celui recherché
 */
function getElementsByClass(searchClass, node, tag) {
  if (node == null) node = document;
  if (tag == null) tag = '*'; 
  return getElementsByClassName(node, tag, searchClass);
}

// Cookies en.wikt

function setCookie(cookieName, cookieValue) {
 var today = new Date();
 var expire = new Date();
 var nDays = 30;
 expire.setTime( today.getTime() + (3600000 * 24 * nDays) );
 document.cookie = cookieName + "=" + escape(cookieValue)
                 + ";path=/"
                 + ";expires="+expire.toGMTString();
 // We need to delete the more specific paths for the next while. Safe to remove this by July 2011, if not before.
 document.cookie = cookieName + "=" + ";path=/w" +
  ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
 document.cookie = cookieName + "=" + ";path=/wiki" +
  ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function getCookie(cookieName) {
  var start = document.cookie.indexOf( cookieName + "=" );
  if ( start == -1 ) return "";
  var len = start + cookieName.length + 1;
  if ( ( !start ) &&
    ( cookieName != document.cookie.substring( 0, cookieName.length ) ) )
      {
        return "";
      }
  var end = document.cookie.indexOf( ";", len );
  if ( end == -1 ) end = document.cookie.length;
  return unescape( document.cookie.substring( len, end ) );
}

function deleteCookie(cookieName) {
  if ( getCookie(cookieName) ) {
    document.cookie = cookieName + "=" + ";path=/" +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
  }
}

/**
 * Récupère la valeur du cookie
 */
function getCookieVal(name) {
  var cookiePos = document.cookie.indexOf(name + "=");
  var cookieValue = false;
  if (cookiePos > -1) {
    cookiePos += name.length + 1;
    var endPos = document.cookie.indexOf(";", cookiePos);
    if (endPos > -1)
      cookieValue = document.cookie.substring(cookiePos, endPos);
    else
      cookieValue = document.cookie.substring(cookiePos);
  }
  return cookieValue;
}


// Récupère proprement le contenu textuel d'un noeud et de ses noeuds descendants
// Copyright Harmen Christophe, http://openweb.eu.org/articles/validation_avancee, CC
function getTextContent(oNode) {
  if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;}
  switch (oNode.nodeType) {
    case 3: // TEXT_NODE
    case 4: // CDATA_SECTION_NODE
      return oNode.nodeValue;
      break;
    case 7: // PROCESSING_INSTRUCTION_NODE
    case 8: // COMMENT_NODE
      if (getTextContent.caller!=getTextContent) {
        return oNode.nodeValue;
      }
      break;
    case 9: // DOCUMENT_NODE
    case 10: // DOCUMENT_TYPE_NODE
    case 12: // NOTATION_NODE
      return null;
      break;
  }
  var _textContent = "";
  oNode = oNode.firstChild;
  while (oNode) {
    _textContent += getTextContent(oNode);
    oNode = oNode.nextSibling;
  }
  return _textContent;
}

// FIN Fonctions JavaScript


/*
==  Modification des articles (boîte à outils etc.) ==
Voir [[MediaWiki:Common.js/edit.js]].
*/

if(mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit') {
  importScript( 'MediaWiki:Common.js/edit.js' );
}

/*
== Page de recherche ==
Voir [[MediaWiki:Common.js/searchEngines.js]].
*/

if (mw.config.get('wgPageName') == "Spécial:Recherche") {
 importScript( 'MediaWiki:Common.js/searchEngines.js' );
}

/*
== [[Wiktionnaire:Pages les plus demandées]] ==
Source importée : [[:de:MediaWiki:If-search.js]].
*/
// Import qui fait crasher la complétion de recherche
// Ne pas le réactiver sans test
// 17 février 2011 Darkdadaah
//importScriptURI("//de.wiktionary.org/w/index.php?title=MediaWiki:If-search.js&action=raw&ctype=text/javascript");

/*
== Nouvelles pages de discussions ==
Transforme la Wikidémie et d'autres pages marquées en pages de discussion.
*/

jQuery( function TransformeEnDiscussion() {
  if(document.title.match( /Wiktionnaire:Wikidémie/)
    || document.getElementById('transformeEnPageDeDiscussion'))
    document.body.className = 'ns-1' ;
} );

/*******************************************************************************/
/* Copié depuis [[w:MediaWiki:Common.js]]                                      */
/* Ajout d'un style particulier aux liens interlangues vers un bon article ou  */
/* un article de qualité                                                       */
/*******************************************************************************/
jQuery( function lienAdQouBAouPdQ() {
  // links are only replaced in p-lang
  if(window.disableFeaturedInterwikiLinks!=undefined) return
  var pLang = document.getElementById("p-lang");
  if (!pLang) return;
  var lis = pLang.getElementsByTagName("li");
  var l = lis.length
 
  if(mw.config.get('wgNamespaceNumber')==0)
	for (var i=0; i<l; i++) 
	{
		// ADQ- est intentionnel pour correspondre au modèle Lien AdQ, on
		// ne doit pas le corriger.
		// if (document.getElementById("BA-" + lis[i].className)) {
		// lis[i].className += " BA";
		// lis[i].title = "Lien vers un bon article";
		
		if (document.getElementById("ADQ-" + lis[i].className)) {
		lis[i].className += " AdQ";
		lis[i].title = "Lien vers un article de qualité";
		} 
	}
} );

/**
 * Réécriture des titres
 *(copié de Wikipédia)
 *
 * Fonction utilisée par [[Modèle:titre incorrect]]
 * 
 * La fonction cherche un bandeau de la forme
 * <div id="RealTitleBanner">
 *   <span id="RealTitle">titre</span>
 * </div>
 *
 * Un élément comportant id="DisableRealTitle" désactive la fonction
 */
jQuery( function rewritePageH1() {
  var realTitleBanner = document.getElementById('RealTitleBanner');
  if (realTitleBanner) {
    if (!document.getElementById('DisableRealTitle')) {
      var realTitle = document.getElementById('RealTitle');
      var h1 = document.getElementsByTagName('h1')[0];
      if (realTitle && h1) {
        var titleText = realTitle.innerHTML;
        if (titleText == '') h1.style.display = 'none';
        else h1.innerHTML = titleText;
        realTitleBanner.style.display = 'none';
      }
    }
  }
} );


/*******************************/
/*   Boîtes déroulantes        */
/*******************************/
// set up the words in your language
var NavigationBarHide = 'Enrouler';
var NavigationBarShow = 'Dérouler';

// hide or show by default
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // all bars will be shown
if (typeof(NavigationBarShowDefault) == "undefined") {
 NavigationBarShowDefault = 1;
}

// shows and hides content and picture (if available) of navigation bars
// Parameters:
//     indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar)
{
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

    if (!NavFrame || !NavToggle) {
        return false;
    }

    // if shown now
    if (NavToggle.firstChild.data == NavigationBarHide) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild != null;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'none';
            }
            if (NavChild.className == 'NavToggle') {
                NavChild.firstChild.data = NavigationBarShow;
            }
        }

    // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (
                var NavChild = NavFrame.firstChild;
                NavChild != null;
                NavChild = NavChild.nextSibling
            ) {
            if (NavChild.className == 'NavPic') {
                NavChild.style.display = 'block';
            }
            if (NavChild.className == 'NavContent') {
                NavChild.style.display = 'block';
            }
            if (NavChild.className == 'NavToggle') {
                NavChild.firstChild.data = NavigationBarHide;
            }
        }
    }
}

// adds show/hide-button to navigation bars
jQuery( function createNavigationBarToggleButton()
{
    var indexNavigationBar = 0;
    // iterate over all <div>-elements
    for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) {
        if (NavFrame.className == 'NavFrame') {
            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
            var NavToggleText = document.createTextNode(NavigationBarHide);
            NavToggle.appendChild(NavToggleText);
            
            // add NavToggle-Button as first div-element
            // in <div class="NavFrame">
            NavFrame.insertBefore(
                NavToggle,
                NavFrame.firstChild
            );
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
            
            // Hide in these cases
            if (NavigationBarShowDefault==0 || NavFrame.hasClass('collapsed')) {
                toggleNavigationBar(indexNavigationBar) ;
            }
        }
    }
} );

/*********************/
/*   Lien d'import   */
/*********************/
// Changer le lien d'import en lien vers la page [[Aide:Importer un fichier]]
// Copié depuis Wikipédia
 
jQuery( function LienUpload()
{
  uploadLink = document.getElementById("t-upload");
  if (!uploadLink) return;
 
  a = uploadLink.firstChild;
  a.setAttribute('href', '/wiki/Aide:Importer_un_fichier');
} );

/******************************/
/* Navigation interprojet     */
/******************************/
// Initialisation de la navigation interprojets (code adapté de de:wikt:Mediawiki:monobook.js)

function iProject() { 
  if (document.getElementById("interProject")) {
   var iProject = document.getElementById("interProject").innerHTML;
   var interProject = document.createElement("div");
   interProject.style.marginTop = "0.7em";
   interProject.innerHTML = '<h5>Autres projets<\/h5><div class="pBody">'+iProject+'<\/div>';
   document.getElementById("p-tb").appendChild(interProject);
  }
}
hookEvent("load", iProject);

// Navigation interprojets


/* DÉBUT DU CODE JAVASCRIPT DE "CADRE À ONGLETS"
    Fonctionnement du [[Modèle:Cadre à onglets]]
    Modèle implanté par User:Peleguer de http://ca.wikipedia.org
    Actualisé par User:Joanjoc de http://ca.wikipedia.org
    Traduction et adaptation User:Antaya de http://fr.wikipedia.org
    Importation sur le Wiktionnaire par JackPotte
*/

function CadreOngletVoirOnglet(){
  var vMbNom = this.id.substr(0,3); 
  var vIndex = this.id.substr(5,1); 
 
  var i=1
  for (i=1;i<=9;i++){        
        var vOgElem = document.getElementById(vMbNom+"og"+i);
        if (!vOgElem) break;
        if (vIndex==i){ 
                vOgElem.style.display = "block";
                vOgElem.style.visibility = "visible";
                document.getElementById(vMbNom+"bt"+i).className="mbBoutonSel";
        } else {             
                vOgElem.style.display = "none";
                vOgElem.style.visibility = "hidden";
                document.getElementById(vMbNom+"bt"+i).className="mbBouton";
        }
  }
  return false; 
}

jQuery( function CadreOngletInit(){
  var i=0       
  for (i=0;i<=9;i++){
     var vMb = document.getElementById("mb"+i);
     if (!vMb) break;
 
     var j=1    
     var vOgIni = 0  
     for (j=1;j<=9;j++){
        var vBt = document.getElementById("mb"+i+"bt"+j);
        if (!vBt) break;
        vBt.onclick = CadreOngletVoirOnglet;          
        if (vBt.className=="mbBoutonSel") {
            vOgIni=j;
        } else {
            document.getElementById("mb"+i+"og"+j).style.display = "none";
            document.getElementById("mb"+i+"og"+j).style.visibility = "hidden";
        }
     }
 
     if (vOgIni == 0) { 
         vOgIni = 1+Math.floor((j-1)*Math.random()) ;
         document.getElementById("mb"+i+"og"+vOgIni).style.display = "block";
         document.getElementById("mb"+i+"og"+vOgIni).style.visibility = "visible";
         document.getElementById("mb"+i+"bt"+vOgIni).className="mbBoutonSel";
     } 
  }
} );

/*FIN DU CODE JAVASCRIPT DE "CADRE À ONGLETS"*/



/**
 * application de [[w:Wikipédia:Prise de décision/Système de cache]], puis [[Wiktionnaire:Wikidémie/août_2010#Gestion_des_hyperliens_par_le_.22Syst.C3.A8me_de_cache.22]]
 * un <span class="noarchive"> autour du lien l'empêche d'être pris en compte
 * pour celui-ci uniquement
 * un no_external_cache=true dans un monobook personnel désactive le script
 */

jQuery( function () {
  if(mw.config.get('wgIsArticle') == false) {
    return;
  }
 
  if (mw.config.get('wgNamespaceNumber') == 0) {
    if ((typeof no_external_cache != "undefined") && (no_external_cache)) return;
    addcache();
  }
 
  function addcache() {
    var external_links;
    if (document.getElementsByClassName) {
      external_links = document.getElementsByClassName('external');
    } else {
      external_links = getElementsByClass('external',document.getElementById("bodyContent"),'a');
    }
 
    for( i = 0;i < external_links.length;i++) 
    {
      var chemin = external_links[i].href;
 
      if(chemin.indexOf("http://wikiwix.com/cache/")==-1 && chemin.indexOf("http://web.archive.org/web/*/")==-1 && chemin.indexOf(mw.config.get('wgServer'))==-1 && chemin.indexOf("wikimedia.org")==-1 && chemin.indexOf("stable.toolserver.org")==-1)
      {
      var li = external_links[i].parentNode;
      if (li.className == "noarchive") continue;

/* Règle pour Wikipédia seulement (=listes de références). Sur le Wiktionnaire on en a besoin aussi au niveau des sources des citations.
      var depth = 0;
      while ((depth < 3) && (li.tagName != "OL") && (li.parentNode != null)) {
        li = li.parentNode;
        depth++;
      }
 
      if (li.tagName != "OL" || !li.hasClass('references') ) continue;
*/
      var titre = getTextContent(external_links[i]);
      var last = document.createElement("small");
      last.setAttribute("class", "cachelinks");
      last.style.color = "#3366BB";
      last.appendChild(document.createTextNode("\u00a0["));
      last.insertAfter(external_links[i]);
 
      var link = document.createElement("a");
      link.setAttribute("href", "http://wikiwix.com/cache/?org=" + mw.config.get('wgServer') + "&url=" + chemin.replace(/%/g, "%25").replace(/&/g, "%26") + "&title=" + encodeURIComponent(titre));
      link.setAttribute("title", "archive de "+ titre);
      link.appendChild(document.createTextNode("archive"));
      link.style.color = "#3366BB";
      last.appendChild(link);
      last.appendChild(document.createTextNode("]"));
      }
    }
  }
} );

/* Permet d'afficher un compte à rebours sur une page avec le modèle [[Modèle:Compte à rebours]] */
/* Plyd - 3 février 2009 */
jQuery( function Rebours() {
  if(mw.config.get('wgNamespaceNumber')==0) return;
  try {
   if (document.getElementById("rebours")) {
      destime = document.getElementById("rebours").title.split(";;");
      Maintenant = (new Date).getTime();
      Future = new Date(Date.UTC(destime[0], (destime[1]-1), destime[2], destime[3], destime[4], destime[5])).getTime();
      Diff = (Future-Maintenant);
      if (Diff < 0) {Diff = 0}
      TempsRestantJ = Math.floor(Diff/(24*3600*1000));
      TempsRestantH = Math.floor(Diff/(3600*1000)) % 24;
      TempsRestantM = Math.floor(Diff/(60*1000)) % 60;
      TempsRestantS = Math.floor(Diff/1000) % 60;
      TempsRestant = "" + destime[6] + " ";
      if (TempsRestantJ == 1) {
         TempsRestant = TempsRestant + TempsRestantJ + " jour ";
      } else if (TempsRestantJ > 1) {
         TempsRestant = TempsRestant + TempsRestantJ + " jours ";
      }
      TempsRestant = TempsRestant + TempsRestantH + " h " + TempsRestantM  + " min " + TempsRestantS + " s";
      document.getElementById("rebours").innerHTML = TempsRestant;
      setTimeout("Rebours()", 1000)
    }
  } catch (e) {}
} );

// Inclusion du script HideCategories, qui permet de n'afficher que les dix premières catégories d'une page (nombre pouvant être changé
// en modifiant la variable NombreDeCategoriesMax dans le script) - suite à la discussion 
// http://fr.wiktionary.org/wiki/Wiktionnaire:Wikid%C3%A9mie/ao%C3%BBt_2011#A.C3.AFe_.21_mes_yeux_sont_cat.C3.A9goris.C3.A9s_.21
if (!window.disableCat) { 
   importScript("User:Quentinv57/HideCategories.js");
}

// ajout du script qui permet de faire fonctionner [[Spécial:Utilisateurs à bienvenuter]]
// qui fournit une liste des utilisateurs à bienvenuter
if (mw.config.get('wgPageName')=="Spécial:Utilisateurs_à_bienvenuter") {
   importScript("User:Quentinv57/Utilisateurs-a-bienvenuter.js");
}

/***************************************/
/* Raccourcir le sommaires des articles */
/***************************************/
if (!window.disableTOC) { 
importStylesheet("MediaWiki:Gadget-TOC.css"); 
}


/**
 * retourne la valeur d'un attribut html, sinon une valeur par défaut
 */
function getAttr(node, name, defvalue) {
    if (!node.attributes) return defvalue;
    var v=node.attributes.getNamedItem(name);
    return (v&&v.nodeValue.length)?v.nodeValue:defvalue;
}


/**
 * Redirection automatique des page décrivant un fichier commons
 * vers la page de description sur commons pour éviter des erreurs
 * importé de Wikilivres
 */
jQuery( function RedirectCommonsFile()
{
    if (mw.config.get('wgNamespaceNumber')!=6) return;
    // Search for link to commons
    // - search div with sharedUploadNotice class
    var shared_link = getElementsByClass("sharedUploadNotice");
    if ((!shared_link)||(shared_link.length<1)) return; // No sharedUploadNotice div
    shared_link = shared_link[0];
    // - external link within the div
    var links = getElementsByClass("external", shared_link, "a");
    if ((!links)||(links.length<1)) links = getElementsByClass("external", shared_link, "A");
    if ((!links)||(links.length<1)) return; // No external link
    // Get URL and redirect
    var url = getAttr(links[0], "href", null);
    if (url!=null) window.location = url;
} );