Mercurial > nebulaweb3
diff default/node_modules/shoestring/src/core/ready.js @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/default/node_modules/shoestring/src/core/ready.js Sat May 31 09:21:51 2025 +0800 @@ -0,0 +1,56 @@ +//>>excludeStart("exclude", pragmas.exclude); +define([ "shoestring" ], function(){ +//>>excludeEnd("exclude"); + + /** + * Bind callbacks to be run when the DOM is "ready". + * + * @param {function} fn The callback to be run + * @return shoestring + * @this shoestring + */ + shoestring.ready = function( fn ){ + if( ready && fn ){ + fn.call( doc ); + } + else if( fn ){ + readyQueue.push( fn ); + } + else { + runReady(); + } + + return [doc]; + }; + + // TODO necessary? + shoestring.fn.ready = function( fn ){ + shoestring.ready( fn ); + return this; + }; + + // Empty and exec the ready queue + var ready = false, + readyQueue = [], + runReady = function(){ + if( !ready ){ + while( readyQueue.length ){ + readyQueue.shift().call( doc ); + } + ready = true; + } + }; + + // If DOM is already ready at exec time, depends on the browser. + // From: https://github.com/mobify/mobifyjs/blob/526841be5509e28fc949038021799e4223479f8d/src/capture.js#L128 + if (doc.attachEvent ? doc.readyState === "complete" : doc.readyState !== "loading") { + runReady(); + } else { + doc.addEventListener( "DOMContentLoaded", runReady, false ); + doc.addEventListener( "readystatechange", runReady, false ); + win.addEventListener( "load", runReady, false ); + } + +//>>excludeStart("exclude", pragmas.exclude); +}); +//>>excludeEnd("exclude");