RikuNoctis

Toggler - Wikia

May 6th, 2015
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var togglers = new Array();    
  2. var allClasses = new Object(); // associative map of class names to page elements
  3.  
  4. function toggler(id)
  5. {
  6.     var toBeToggled = togglers[id];
  7.     if (!toBeToggled)
  8.         return;
  9.  
  10.     // sí algún elemento está en la lista más de una vez, será conmutado múltiples veces
  11.     for (var i = 0; i < toBeToggled.length; i++)
  12.     {
  13.         // obtiene el arreglo de elementos sobre el que operar
  14.         var toggles = toBeToggled[i][1];
  15.         if (typeof(toggles) == "string")
  16.         {
  17.             if (toggles.charAt(0) == '-')
  18.             {
  19.                 // lo trata como un ID de elemento, no como una clase
  20.                 toggles = document.getElementById(toggles.substring(1));
  21.                 if (toggles)
  22.                     toggles = new Array(toggles);
  23.             }
  24.             else
  25.                 toggles = allClasses[toggles];
  26.         }
  27.         if (!toggles || !toggles.length)
  28.             continue;
  29.  
  30.         var op = toBeToggled[i][0]; // indíca que operación será
  31.  
  32.         switch (op)
  33.         {
  34.             case "_reset":
  35.                 for (var j = 0; j < toggles.length; j++)
  36.                     toggles[j].style.display = toggles[j]._toggle_original_display;
  37.                 break;
  38.             case "_show":
  39.                 for (var j = 0; j < toggles.length; j++)
  40.                     toggles[j].style.display = '';
  41.                 break;
  42.             case "_hide":
  43.                 for (var j = 0; j < toggles.length; j++)
  44.                     toggles[j].style.display = 'none';
  45.                 break;
  46.             case "":
  47.             default:
  48.                 // Toggle
  49.                 for (var j = 0; j < toggles.length; j++)
  50.                     toggles[j].style.display = ((toggles[j].style.display == 'none') ? '' : 'none');
  51.                 break;
  52.         }
  53.     }
  54. }
  55.  
  56. function createTogglerLink(toggler, id)
  57. {
  58.     var toggle = document.createElement("a");
  59.     toggle.className = 'toggler-link';
  60.     toggle.setAttribute('id', 'toggler' + id);
  61.     toggle.setAttribute('href', 'javascript:toggler("' + id + '");');
  62.     var child = toggler.firstChild;
  63.     toggler.removeChild(child);
  64.     toggle.appendChild(child);
  65.     toggler.insertBefore(toggle, toggler.firstChild);
  66. }
  67.  
  68. function toggleInit()
  69. {
  70.     var togglerElems = new Array();
  71.     var toggleGroup = new Array();
  72.  
  73.     // inicializa/limpia información vieja
  74.     togglers = new Array();    
  75.     allClasses = new Object();
  76.  
  77.     // hace una lista de todos los documentos de clase
  78.     var elems = document.getElementsByTagName("*");
  79.     var numelems = elems.length;
  80.     for (var i = 0; i < elems.length; i++)
  81.     {
  82.         var elem = elems[i];
  83.         if (!elem.className)
  84.             continue;
  85.  
  86.         elem._toggle_original_display = elem.style.display;
  87.         var togglerID = -1;
  88.         var elemClasses = elem.className.split(' '); // obtiene listas de clases
  89.         for (var j = 0; j < elemClasses.length; j++)
  90.         {
  91.             var elemClass = elemClasses[j];
  92.             if (! allClasses[elemClass])
  93.                 allClasses[elemClass] = new Array();
  94.             allClasses[elemClass].push(elem);
  95.  
  96.             // todas las clases especiales inician con _toggle
  97.             if (elemClass.substring(0, 7) != "_toggle")
  98.                 continue;
  99.  
  100.             if (elemClass == "_togglegroup")
  101.                 toggleGroup = new Array();
  102.             else if (elemClass == "_toggle")
  103.                 toggleGroup.push(elem);
  104.             else if (elemClass.substring(0, 12) == "_toggle_init")
  105.             {
  106.                 // establece el valor inicial para mostrar (ignora el valor CSS establecido originalmente)
  107.                 // entiende _toggle_initshow y _toggle_inithide
  108.                 var disp = elemClass.substring(12);
  109.                 if (disp == "show")
  110.                     elem.style.display = '';
  111.                 else if (disp == "hide")
  112.                     elem.style.display = 'none';
  113.                 elem._toggle_original_display = disp;
  114.             }
  115.             else if (elemClass.substring(0, 8) == "_toggler")
  116.             {
  117.                 if (togglerID == -1)
  118.                 {
  119.                     togglerID = togglers.length;
  120.                     togglers[togglerID] = new Array();
  121.                     togglerElems[togglerID] = elem;
  122.                 }
  123.  
  124.                 // todas las clases son de la forma _toggler_op
  125.                 // descubre que clases estamos conmutando
  126.                 // sí ninguno es especificado, entonces usamos el grupo de conmutación actual
  127.                 var toBeToggled;
  128.                 var hyphen = elemClass.indexOf('-');
  129.                 if (hyphen != -1)
  130.                     toBeToggled = elemClass.substring(hyphen+1);
  131.                 else
  132.                 {
  133.                     toBeToggled = toggleGroup;
  134.                     hyphen = elemClass.length;
  135.                 }
  136.  
  137.                 var op = elemClass.substring(8, hyphen);
  138.                 togglers[togglerID].push(new Array(op, toBeToggled));
  139.             }
  140.         }
  141.     }
  142.  
  143.     // agrega javascript a todos los elementos toggle
  144.     for (var i = 0; i < togglerElems.length; i++)
  145.         createTogglerLink(togglerElems[i], i);
  146. }
  147.  
  148.  
  149. function owwsitesearch(f){
  150.     f.q.value='site:http://openwetware.org/wiki/'+
  151.         f.base.value+'++'+f.qfront.value
  152. }
  153.  
  154.  
  155. addOnloadHook(toggleInit);
Advertisement
Add Comment
Please, Sign In to add comment