]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - underlays/javascript/ikiwiki.js
po/todo: take note of the commit that will need to be reverted later
[git.ikiwiki.info.git] / underlays / javascript / ikiwiki.js
index 29de7ec6f6f6237f1fc4ef5237b16d18d2a96ea4..1252f244f8429faab7d5e7dccdd175bdd37a33f7 100644 (file)
@@ -1,23 +1,38 @@
 // ikiwiki's javascript utility function library
 
-var hooks = new Array;
+var hooks;
+
+// Run onload as soon as the DOM is ready, if possible.
+// gecko, opera 9
+if (document.addEventListener) {
+       document.addEventListener("DOMContentLoaded", run_hooks_onload, false);
+}
+// other browsers
 window.onload = run_hooks_onload;
 
 function run_hooks_onload() {
+       // avoid firing twice
+       if (arguments.callee.done)
+               return;
+       arguments.callee.done = true;
+
        run_hooks("onload");
 }
 
 function run_hooks(name) {
-       for (var i = 0; i < hooks.length; i++) {
-               if (hooks[i].name == name) {
-                       hooks[i].call();
+       if (typeof(hooks) != "undefined") {
+               for (var i = 0; i < hooks.length; i++) {
+                       if (hooks[i].name == name) {
+                               hooks[i].call();
+                       }
                }
        }
 }
 
 function hook(name, call) {
-       var h={name: name, call: call};
-       hooks.push(h);
+       if (typeof(hooks) == "undefined")
+               hooks = new Array;
+       hooks.push({name: name, call: call});
 }
 
 function getElementsByClass(cls, node, tag) {