repository/ninjs/core/dom.js in ninjs-0.14.1 vs repository/ninjs/core/dom.js in ninjs-0.16.0
- old
+ new
@@ -1,18 +1,20 @@
+// Slightly modified version of domready: http://code.google.com/p/domready/
+var dom = (function() {
var userAgent = navigator.userAgent;
var browser = {
agent: userAgent,
- mozilla: (/mozilla/.test(userAgent.toLowerCase())) && (!/(compatible|webkit)/.test(userAgent.toLowerCase())),
+ mozilla: (/mozilla/.test(userAgent.toLowerCase())) && !(/(compatible|webkit)/.test(userAgent.toLowerCase())),
webkit: /webkit/.test(userAgent.toLowerCase()),
firefox: /firefox/.test(userAgent.toLowerCase()),
chrome: /webkit/.test(userAgent.toLowerCase()),
safari: /safari/.test(userAgent.toLowerCase()),
opera: /opera/.test(userAgent.toLowerCase()),
- msie: (/msie/.test(userAgent.toLowerCase())) && (!/opera/.test( userAgent.toLowerCase() ))
- };
+ msie: (/msie/.test(userAgent.toLowerCase())) && !(/opera/.test( userAgent.toLowerCase() ))
+ };
- var readyBound = false;
+ var readyBound = false;
var isReady = false;
var readyList = [];
function domReady() {
if (!isReady) {
@@ -26,28 +28,29 @@
}
}
// From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
function addLoadEvent(func) {
- var oldonload = window.onload;
- if (typeof window.onload != 'function') {
- window.onload = func;
- } else {
- window.onload = function() {
- if (oldonload) {
- oldonload();
- }
- func();
- }
- }
- };
+ var oldonload = window.onload;
+ if (typeof window.onload != 'function') {
+ window.onload = func;
+ }
+ else {
+ window.onload = function() {
+ if (oldonload) {
+ oldonload();
+ }
+ func();
+ };
+ }
+ }
// does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
function bindReady() {
if (readyBound) {
- return;
- }
+ return;
+ }
readyBound = true;
// Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
if (document.addEventListener && !browser.opera) {
@@ -55,85 +58,101 @@
document.addEventListener("DOMContentLoaded", domReady, false);
}
// If IE is used and is not in a frame
// Continually check to see if the document is ready
- if (browser.msie && window == top) (function(){
- if (isReady) return;
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(error) {
- setTimeout(arguments.callee, 0);
- return;
- }
- // and execute any waiting functions
- domReady();
- })();
+ if (browser.msie && window == top) {
+ (function() {
+ if (isReady) {
+ return;
+ }
+ try {
+ // If IE is used, use the trick by Diego Perini
+ // http://javascript.nwbox.com/IEContentLoaded/
+ document.documentElement.doScroll("left");
+ } catch(error) {
+ setTimeout(arguments.callee, 0);
+ return;
+ }
+ // and execute any waiting functions
+ domReady();
+ })();
+ }
if (browser.opera) {
document.addEventListener( "DOMContentLoaded", function () {
- if (isReady) return;
- for (var i = 0; i < document.styleSheets.length; i++)
+ if (isReady) {
+ return;
+ }
+ for (var i = 0; i < document.styleSheets.length; i++) {
if (document.styleSheets[i].disabled) {
setTimeout( arguments.callee, 0 );
return;
}
- // and execute any waiting functions
- domReady();
+ // and execute any waiting functions
+ domReady();
+ }
}, false);
}
if (browser.safari) {
- var numStyles;
- (function(){
- if (isReady) return;
+ var numStyles;
+ (function() {
+ if (isReady) {
+ return;
+ }
if (document.readyState != "loaded" && document.readyState != "complete") {
setTimeout( arguments.callee, 0 );
return;
}
if (numStyles === undefined) {
- var links = document.getElementsByTagName("link");
- for (var i=0; i < links.length; i++) {
- if (links[i].getAttribute('rel') == 'stylesheet') {
- numStyles++;
- }
- }
- var styles = document.getElementsByTagName("style");
- numStyles += styles.length;
+ var links = document.getElementsByTagName("link");
+ for (var i=0; i < links.length; i++) {
+ if (links[i].getAttribute('rel') == 'stylesheet') {
+ numStyles++;
+ }
+ }
+ var styles = document.getElementsByTagName("style");
+ numStyles += styles.length;
}
if (document.styleSheets.length != numStyles) {
setTimeout( arguments.callee, 0 );
return;
}
-
+
// and execute any waiting functions
domReady();
})();
}
// A fallback to window.onload, that will always work
- addLoadEvent(domReady);
- };
+ addLoadEvent(domReady);
+ }
- window.NinjsDOM = function() {
- this.cached_selectors = {};
+ return {
+ bind: bindReady,
+ is_ready: isReady,
+ ready_list: readyList
};
+})();
- // This is the public function that people can use to hook up ready.
- NinjsDOM.method('ready', function(fn, args) {
- // Attach the listeners
- bindReady();
-
- // If the DOM is already ready
- if (isReady) {
- // Execute the function immediately
- fn.call(window, []);
- }
- else {
- // Add the function to the wait list
- readyList.push( function() { return fn.call(window, []); } );
- }
- });
-
- bindReady();
+NinjsDOM = function() {
+ this.cached_selectors = {};
+};
+
+// This is the public function that people can use to hook up ready.
+NinjsDOM.prototype.ready = function(fn, args) {
+ // Attach the listeners
+ dom.bind();
+
+ // If the DOM is already ready
+ if (dom.is_ready()) {
+ // Execute the function immediately
+ fn.call(window, args || []);
+ }
+ else {
+ // Add the function to the wait list
+ dom.ready_list.push( function() { return fn.call(window, args || []); } );
+ }
+};
+
+dom.bind();