indented
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Tue, 20 Jan 2009 09:29:47 +0000 (09:29 +0000)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Tue, 20 Jan 2009 09:29:47 +0000 (09:29 +0000)
planetlab/minitabs/minitabs.js

index 74c1999..db43c50 100644 (file)
 /*
  
-   Animated miniTabs by frequency decoder (http://www.frequency-decoder.com/)
+  Animated miniTabs by frequency decoder (http://www.frequency-decoder.com/)
  
-   Based on an idea by Rob L Glazebrook (http://www.rootarcana.com/test/smartmini/) itself
-   derived from the original idea of Stephen Clark (http://www.sgclark.com/sandbox/minislide/)
+  Based on an idea by Rob L Glazebrook (http://www.rootarcana.com/test/smartmini/) itself
+  derived from the original idea of Stephen Clark (http://www.sgclark.com/sandbox/minislide/)
  
+  Adjusted by Thierry Parmentelat -- INRIA - uses only forms rather than <a> tags, for supporting http-POST
+
 */
  
 var miniTab = {
       currentTab:     0,
       activeTab:      0,
       destX:          0,
       destW:          0,
       t:              0,
       b:              0,
       c:              0,
       d:              20,
       animInterval:   null,
       sliderObj:      null,
       aHeight:        0,
       ul:             [],
       liArr:          [],
       aArr:           [],
+ currentTab:     0,
+ activeTab:      0,
+ destX:          0,
+ destW:          0,
+ t:              0,
+ b:              0,
+ c:              0,
+ d:              20,
+ animInterval:   null,
+ sliderObj:      null,
+ aHeight:        0,
+ ul:             [],
+ liArr:          [],
+ aArr:           [],
         
       init: function() {
-                if(!document.getElementById || !document.getElementById("miniflex")) return;
-                miniTab.ul          = document.getElementById("miniflex");
-                miniTab.liArr       = miniTab.ul.getElementsByTagName("li");
-               // Thierry: the original impl. relied on <a> links rather than forms
-               miniTab.aArr        = miniTab.ul.getElementsByTagName("input");
-                for(var i = 0, li; li = miniTab.liArr[i]; i++) {
-                        li.onmouseover = miniTab.aArr[i].onfocus = function(e) {
-                                var pos = 0;
-                                var elem = this.nodeName == "LI" ? this : this.parentNode;
-                                while(elem.previousSibling) {
-                                        elem = elem.previousSibling;
-                                        if(elem.tagName && elem.tagName == "LI") pos++;
-                                }
-                                miniTab.initSlide(pos);
-                        }
-                }
-                miniTab.ul.onmouseout = function(e) {
-                        miniTab.initSlide(miniTab.currentTab);
-                };
-                for(var i = 0, a; a = miniTab.aArr[i]; i++) {
-                        if(a.className.search("active") != -1) {
-                                miniTab.activeTab = miniTab.currentTab = i;
-                        }
-                        a.style.borderBottom  = "0px";
-                        /*a.style.paddingBottom = "6px";*/
-                }
-                miniTab.slideObj                = miniTab.ul.parentNode.appendChild(document.createElement("div"));
-                miniTab.slideObj.appendChild(document.createTextNode(String.fromCharCode(160)));
-                miniTab.slideObj.id             = "animated-tab";
-                miniTab.slideObj.style.top      = (miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop) + "px";
-                miniTab.slideObj.style.left     = (miniTab.ul.offsetLeft + miniTab.liArr[miniTab.activeTab].offsetLeft + miniTab.aArr[miniTab.activeTab].offsetLeft) + "px";
-                miniTab.slideObj.style.width    = miniTab.aArr[miniTab.activeTab].offsetWidth + "px";
-                miniTab.aHeight                 = miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop;
-                miniTab.initSlide(miniTab.activeTab, true);
-                var intervalMethod = function() { miniTab.slideIt(); }
-                miniTab.animInterval = setInterval(intervalMethod,10);
-        },
       cleanUp: function() {
-                clearInterval(miniTab.animInterval);
-                miniTab.animInterval = null;
-        },
       initSlide: function(pos, force) {
-                if(!force && pos == miniTab.activeTab) return;
-                miniTab.activeTab = pos;
-                miniTab.initAnim();
-        },
      /* search for input with type != hidden */
      locateSubmitInput: function () {
-               inputs=miniTab.liArr[miniTab.activeTab].getElementsByTagName("input");
-               for(var i=0,input; inputs[i]; i++) {
-                 input=inputs[i];
-                 if (input.type == "submit") return input;
-               }
-       },
+ init: function() {
+    if(!document.getElementById || !document.getElementById("miniflex")) return;
+    miniTab.ul          = document.getElementById("miniflex");
+    miniTab.liArr       = miniTab.ul.getElementsByTagName("li");
+    // Thierry: the original impl. relied on <a> links rather than forms
+    miniTab.aArr        = miniTab.ul.getElementsByTagName("input");
+    for(var i = 0, li; li = miniTab.liArr[i]; i++) {
+      li.onmouseover = miniTab.aArr[i].onfocus = function(e) {
+       var pos = 0;
+       var elem = this.nodeName == "LI" ? this : this.parentNode;
+       while(elem.previousSibling) {
+         elem = elem.previousSibling;
+         if(elem.tagName && elem.tagName == "LI") pos++;
+       }
+       miniTab.initSlide(pos);
+      }
+    }
+    miniTab.ul.onmouseout = function(e) {
+      miniTab.initSlide(miniTab.currentTab);
+    };
+    for(var i = 0, a; a = miniTab.aArr[i]; i++) {
+      if(a.className.search("active") != -1) {
+       miniTab.activeTab = miniTab.currentTab = i;
+      }
+      a.style.borderBottom  = "0px";
+      /*a.style.paddingBottom = "6px";*/
+    }
+    miniTab.slideObj                = miniTab.ul.parentNode.appendChild(document.createElement("div"));
+    miniTab.slideObj.appendChild(document.createTextNode(String.fromCharCode(160)));
+    miniTab.slideObj.id             = "animated-tab";
+    miniTab.slideObj.style.top      = (miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop) + "px";
+    miniTab.slideObj.style.left     = (miniTab.ul.offsetLeft + miniTab.liArr[miniTab.activeTab].offsetLeft + miniTab.aArr[miniTab.activeTab].offsetLeft) + "px";
+    miniTab.slideObj.style.width    = miniTab.aArr[miniTab.activeTab].offsetWidth + "px";
+    miniTab.aHeight                 = miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop;
+    miniTab.initSlide(miniTab.activeTab, true);
+    var intervalMethod = function() { miniTab.slideIt(); }
+    miniTab.animInterval = setInterval(intervalMethod,10);
+  },
+ cleanUp: function() {
+    clearInterval(miniTab.animInterval);
+    miniTab.animInterval = null;
+  },
+ initSlide: function(pos, force) {
+    if(!force && pos == miniTab.activeTab) return;
+    miniTab.activeTab = pos;
+    miniTab.initAnim();
+  },
+ /* search for input with type != hidden */
+ locateSubmitInput: function () {
+    inputs=miniTab.liArr[miniTab.activeTab].getElementsByTagName("input");
+    for(var i=0,input; inputs[i]; i++) {
+      input=inputs[i];
+      if (input.type == "submit") return input;
+    }
+  },
     
       initAnim: function() {
-               var input=miniTab.locateSubmitInput();
-                miniTab.destX = parseInt(miniTab.liArr[miniTab.activeTab].offsetLeft + input.offsetLeft + miniTab.ul.offsetLeft);
-                miniTab.destW = parseInt(input.offsetWidth);
-                miniTab.t = 0;
-                miniTab.b = miniTab.slideObj.offsetLeft;
-                miniTab.c = miniTab.destX - miniTab.b;
-                miniTab.bW = miniTab.slideObj.offsetWidth;
-                miniTab.cW = miniTab.destW - miniTab.bW;
-                miniTab.slideObj.style.top = (miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop) + "px";
-        },
       slideIt:function() {
-                // Has the browser text size changed?
-                if(miniTab.aHeight != miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop) {
-                        miniTab.initAnim();
-                        miniTab.aHeight = miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop
-                };
-                if(miniTab.t++ < miniTab.d) {
-                        var x = miniTab.animate(miniTab.t,miniTab.b,miniTab.c,miniTab.d);
-                        var w = miniTab.animate(miniTab.t,miniTab.bW,miniTab.cW,miniTab.d);
-                        miniTab.slideObj.style.left = parseInt(x) + "px";
-                        miniTab.slideObj.style.width = parseInt(w) + "px";
-                } else {
-                        miniTab.slideObj.style.left = miniTab.destX + "px";
-                        miniTab.slideObj.style.width = miniTab.destW +"px";
-                }
-        },
       animate: function(t,b,c,d) {
-                if ((t/=d/2) < 1) return c/2*t*t + b;
-                return -c/2 * ((--t)*(t-2) - 1) + b;
-        }
+ initAnim: function() {
+    var input=miniTab.locateSubmitInput();
+    miniTab.destX = parseInt(miniTab.liArr[miniTab.activeTab].offsetLeft + input.offsetLeft + miniTab.ul.offsetLeft);
+    miniTab.destW = parseInt(input.offsetWidth);
+    miniTab.t = 0;
+    miniTab.b = miniTab.slideObj.offsetLeft;
+    miniTab.c = miniTab.destX - miniTab.b;
+    miniTab.bW = miniTab.slideObj.offsetWidth;
+    miniTab.cW = miniTab.destW - miniTab.bW;
+    miniTab.slideObj.style.top = (miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop) + "px";
+  },
+ slideIt:function() {
+    // Has the browser text size changed?
+    if(miniTab.aHeight != miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop) {
+      miniTab.initAnim();
+      miniTab.aHeight = miniTab.ul.offsetTop + miniTab.liArr[miniTab.activeTab].offsetTop + miniTab.aArr[miniTab.activeTab].offsetTop
+    };
+    if(miniTab.t++ < miniTab.d) {
+      var x = miniTab.animate(miniTab.t,miniTab.b,miniTab.c,miniTab.d);
+      var w = miniTab.animate(miniTab.t,miniTab.bW,miniTab.cW,miniTab.d);
+      miniTab.slideObj.style.left = parseInt(x) + "px";
+      miniTab.slideObj.style.width = parseInt(w) + "px";
+    } else {
+      miniTab.slideObj.style.left = miniTab.destX + "px";
+      miniTab.slideObj.style.width = miniTab.destW +"px";
+    }
+  },
+ animate: function(t,b,c,d) {
+    if ((t/=d/2) < 1) return c/2*t*t + b;
+    return -c/2 * ((--t)*(t-2) - 1) + b;
+  }
 }
  
 window.onload = miniTab.init;