123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /**
- * @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;
- });
|