130 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * @license RequireJS domReady 2.0.1 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
 | 
						|
 * Available via the MIT or new BSD license.
 | 
						|
 * see: http://github.com/requirejs/domReady for details
 | 
						|
 */
 | 
						|
/*jslint */
 | 
						|
/*global require: false, define: false, requirejs: false,
 | 
						|
  window: false, clearInterval: false, document: false,
 | 
						|
  self: false, setInterval: false */
 | 
						|
 | 
						|
 | 
						|
define(function () {
 | 
						|
    'use strict';
 | 
						|
 | 
						|
    var isTop, testDiv, scrollIntervalId,
 | 
						|
        isBrowser = typeof window !== "undefined" && window.document,
 | 
						|
        isPageLoaded = !isBrowser,
 | 
						|
        doc = isBrowser ? document : null,
 | 
						|
        readyCalls = [];
 | 
						|
 | 
						|
    function runCallbacks(callbacks) {
 | 
						|
        var i;
 | 
						|
        for (i = 0; i < callbacks.length; i += 1) {
 | 
						|
            callbacks[i](doc);
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    function callReady() {
 | 
						|
        var callbacks = readyCalls;
 | 
						|
 | 
						|
        if (isPageLoaded) {
 | 
						|
            //Call the DOM ready callbacks
 | 
						|
            if (callbacks.length) {
 | 
						|
                readyCalls = [];
 | 
						|
                runCallbacks(callbacks);
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Sets the page as loaded.
 | 
						|
     */
 | 
						|
    function pageLoaded() {
 | 
						|
        if (!isPageLoaded) {
 | 
						|
            isPageLoaded = true;
 | 
						|
            if (scrollIntervalId) {
 | 
						|
                clearInterval(scrollIntervalId);
 | 
						|
            }
 | 
						|
 | 
						|
            callReady();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    if (isBrowser) {
 | 
						|
        if (document.addEventListener) {
 | 
						|
            //Standards. Hooray! Assumption here that if standards based,
 | 
						|
            //it knows about DOMContentLoaded.
 | 
						|
            document.addEventListener("DOMContentLoaded", pageLoaded, false);
 | 
						|
            window.addEventListener("load", pageLoaded, false);
 | 
						|
        } else if (window.attachEvent) {
 | 
						|
            window.attachEvent("onload", pageLoaded);
 | 
						|
 | 
						|
            testDiv = document.createElement('div');
 | 
						|
            try {
 | 
						|
                isTop = window.frameElement === null;
 | 
						|
            } catch (e) {}
 | 
						|
 | 
						|
            //DOMContentLoaded approximation that uses a doScroll, as found by
 | 
						|
            //Diego Perini: http://javascript.nwbox.com/IEContentLoaded/,
 | 
						|
            //but modified by other contributors, including jdalton
 | 
						|
            if (testDiv.doScroll && isTop && window.external) {
 | 
						|
                scrollIntervalId = setInterval(function () {
 | 
						|
                    try {
 | 
						|
                        testDiv.doScroll();
 | 
						|
                        pageLoaded();
 | 
						|
                    } catch (e) {}
 | 
						|
                }, 30);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        //Check if document already complete, and if so, just trigger page load
 | 
						|
        //listeners. Latest webkit browsers also use "interactive", and
 | 
						|
        //will fire the onDOMContentLoaded before "interactive" but not after
 | 
						|
        //entering "interactive" or "complete". More details:
 | 
						|
        //http://dev.w3.org/html5/spec/the-end.html#the-end
 | 
						|
        //http://stackoverflow.com/questions/3665561/document-readystate-of-interactive-vs-ondomcontentloaded
 | 
						|
        //Hmm, this is more complicated on further use, see "firing too early"
 | 
						|
        //bug: https://github.com/requirejs/domReady/issues/1
 | 
						|
        //so removing the || document.readyState === "interactive" test.
 | 
						|
        //There is still a window.onload binding that should get fired if
 | 
						|
        //DOMContentLoaded is missed.
 | 
						|
        if (document.readyState === "complete") {
 | 
						|
            pageLoaded();
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    /** START OF PUBLIC API **/
 | 
						|
 | 
						|
    /**
 | 
						|
     * Registers a callback for DOM ready. If DOM is already ready, the
 | 
						|
     * callback is called immediately.
 | 
						|
     * @param {Function} callback
 | 
						|
     */
 | 
						|
    function domReady(callback) {
 | 
						|
        if (isPageLoaded) {
 | 
						|
            callback(doc);
 | 
						|
        } else {
 | 
						|
            readyCalls.push(callback);
 | 
						|
        }
 | 
						|
        return domReady;
 | 
						|
    }
 | 
						|
 | 
						|
    domReady.version = '2.0.1';
 | 
						|
 | 
						|
    /**
 | 
						|
     * Loader Plugin API method
 | 
						|
     */
 | 
						|
    domReady.load = function (name, req, onLoad, config) {
 | 
						|
        if (config.isBuild) {
 | 
						|
            onLoad(null);
 | 
						|
        } else {
 | 
						|
            domReady(onLoad);
 | 
						|
        }
 | 
						|
    };
 | 
						|
 | 
						|
    /** END OF PUBLIC API **/
 | 
						|
 | 
						|
    return domReady;
 | 
						|
});
 |