Aller au contenu

Utilisateur:François Melchior/ToggleBox.js

Un livre de Wikilivres.

Attention : Depuis MediaWiki 1.18 les pages se terminant avec l'extension .js ou .css sont interprétées comme des pages wiki ! En particulier les modèles (subst ou non) et les liens. Vous devez donc migrer le code source et effectuer vos changements en évitant ces éléments de syntaxe wiki (peu importe leurs emplacements dans le code source : commentaire, chaine) :

  • Double accolades ouvrantes (en particulier avec subst:) : séparer les deux accolades "{"+"{" du reste de la chaine
  • Double crochets ouvrants : même technique de séparation.
  • Signature (tildes ~ multiples) : même technique de séparation.

Note : après avoir enregistré vos préférences, vous devrez attendre que le serveur mette à jour la feuille de style globale avant de forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Konqueror : Cliquez sur Actualiser ou pressez F5 ;
  • Opera : Videz le cache dans Outils → Préférences.
TODO: rassembler toggleBoxPrepare dans toggleBoxSetup (de tte façon 2 différentes)

var ToggleBoxes;

//Continue only if DOM1 available (1st test is for JS < 1.5)
if(document.getElementById != null && document.getElementById !== undefined)
 {

 toggleBoxPrepare = DIVs.getElementsByClassName === undefined ? //NO 'var': must be global

  function (childs,n)
   {
   // Click zone(s)
   for(var i = childs.length; --i; )
    {
    var classNames = ' ' + childs[i].className + ' ';
    if(classNames.indexOf('ToggleLink') >= 0)
     childs[i].<onClick> = ;
    }
   
   
   // Collect On zone(s)
   
   
   // Collect Off zone(s)
   
   
   }

 :
  
  function (element,n)
   {
   // Click zone(s?)
   if(DIVs.getElementsByClassName === undefined)
    for(var i = DIVs.length; --i; )
     {
     var classNames = ' ' + DIVs[i].className + ' ';
     if(classNames.indexOf('ToggleBox') >= 0) toggleBoxPrepare(DIVs[i],i);
     }
   else for(var boxes = DIVs.getElementsByClassName('ToggleBox'),var i = boxes.length; i--; )
     toggleBoxPrepare(boxes[i],i);
   
   
   // Collect On zones
   
   
   // Collect Off zones
   
   
  }

 function toggleBoxSetup()
  {
  DIVs = document.getElementById('mw-content-text').getElementsByTagName('div');
  if(DIVs.length)
   if(DIVs.getElementsByClassName === undefined)
    for(var i = DIVs.length; --i; )
     {
     var classNames = ' ' + DIVs[i].className + ' ';
     if(classNames.indexOf('ToggleBox') >= 0) toggleBoxPrepare(DIVs[i],i);
     }
   else for(var boxes = DIVs.getElementsByClassName('ToggleBox'),var i = boxes.length; i--; )
     toggleBoxPrepare(boxes[i],i);
  }

 function toggleBoxOn(elements)
  { //a FOR loop is faster and safer than a FOR IN loop
  
  
  
  for(var i=elements.length[n]
  
  }

 function toggleBoxOff(elements)
  { //a FOR loop is faster and safer than a FOR IN loop
  
  
  
  }
 
 $(document).ready( toggleBoxSetup );
 }

//http://stackoverflow.com/questions/1818865/do-we-have-getelementsbyclassname-in-javascript
//http://www.misfu.com/static/Javascript/dom.html
//http://daniel.glazman.free.fr/weblog/newarchive/2003_06_01_glazblogarc.html#s95320189

  //$('div.collapsible').each( function() { ... } );
 
  // elm.all -> pas utile (pour IE4)
  // getElementById = DOM1
  // getElementsByTagName = DOM1
  // getElementsByClassName = HTML5? http://caniuse.com/getelementsbyclassname
  // for ( … in … ) = JavaScript 1.0, ECMA-262
  // String.indexOf = JavaScript 1.0, ECMA-262
  // String.concat = JavaScript 1.2
  // undefined = JavaScript 1.3 (Navigator 4.06-4.5), ECMA-262
  // '===' et '!==' = JavaScript 1.3 (Navigator 4.06-4.5), ECMA-262 Edition 3
  // unnamed function = JavaScript 1.5 (Navigator 6.0)
  // conditionally declared function = JavaScript 1.5 (Navigator 6.0) BUT not valid ECMAScript!!!
  // PROP in OBJ = JavaScript 1.4 (Navigator 6.0)

   /* <undefined> pourrait être redéfini?, auquel cas il faudrait utiliser:
       (typeof DIVs.getElementsByClassName !== 'undefined') */