return arguments.length === 1 ?
this.off( selector, "**" ) :
this.off( types, selector || "**", fn );
- },
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
}
} );
+jQuery.holdReady = function( hold ) {
+ if ( hold ) {
+ jQuery.readyWait++;
+ } else {
+ jQuery.ready( true );
+ }
+};
jQuery.isArray = Array.isArray;
jQuery.parseJSON = JSON.parse;
jQuery.nodeName = nodeName;
--- /dev/null
+<!DOCTYPE html>
+<html>
+<!--
+ Test for jQuery.holdReady. Needs to be a
+ standalone test since it deals with DOM
+ ready.
+-->
+<head>
+ <title>
+ jQuery.holdReady Test
+ </title>
+ <style>
+ div { margin-top: 10px; }
+ #output { background-color: green }
+ #expectedOutput { background-color: green }
+ </style>
+ <script src="../jquery.js"></script>
+ <script src="./iframeTest.js"></script>
+
+ <!-- Load the script loader that uses
+ jQuery.readyWait -->
+
+ <script type="text/javascript">
+ (function() {
+ var released = false;
+ // Hold on jQuery!
+ jQuery.holdReady( true );
+
+ setTimeout( function() {
+ released = true;
+ jQuery.holdReady( false );
+ }, 300 );
+
+ jQuery(function() {
+ jQuery( "#output" ).text( "Ready called, holdReady released: " + released );
+ startIframeTest( released );
+ });
+ })();
+ </script>
+</head>
+<body>
+ <h1>
+ jQuery.holdReady Test
+ </h1>
+ <p>
+ This is a test page for jQuery.readyWait and jQuery.holdReady,
+ see
+ <a href="https://bugs.jquery.com/ticket/6781">#6781</a>
+ and
+ <a href="https://bugs.jquery.com/ticket/8803">#8803</a>.
+ </p>
+ <p>
+ Test for jQuery.holdReady, which can be used
+ by plugins and other scripts to indicate something
+ important to the page is still loading and needs
+ to block the DOM ready callbacks that are registered
+ with jQuery.
+ </p>
+ <p>
+ Script loaders are the most likely kind of script
+ to use jQuery.holdReady, but it could be used by
+ other things like a script that loads a CSS file
+ and wants to pause the DOM ready callbacks.
+ </p>
+ <p>
+ <strong>Expected Result</strong>: The text
+ <span id="expectedOutput">It Worked!</span>
+ appears below after about <strong>2 seconds.</strong>
+ </p>
+ <p>
+ If there is an error in the console,
+ or the text does not show up, then the test failed.
+ </p>
+ <div id="output"></div>
+</body>
+</html>
+++ /dev/null
-var delayedMessage = "It worked!";
+++ /dev/null
-// Simple script loader that uses jQuery.readyWait via jQuery.holdReady()
-
-//Hold on jQuery!
-jQuery.holdReady( true );
-
-var readyRegExp = /^(complete|loaded)$/;
-
-function assetLoaded( evt ) {
- var node = evt.currentTarget || evt.srcElement;
- if ( evt.type === "load" || readyRegExp.test( node.readyState ) ) {
- jQuery.holdReady( false );
- }
-}
-
-setTimeout( function() {
- var script = document.createElement( "script" );
- script.type = "text/javascript";
- if ( script.addEventListener ) {
- script.addEventListener( "load", assetLoaded, false );
- } else {
- script.attachEvent( "onreadystatechange", assetLoaded );
- }
- script.src = "data/readywaitasset.js";
- document.getElementsByTagName( "head" )[ 0 ].appendChild( script );
-}, 2000 );
+++ /dev/null
-<!DOCTYPE html>
-<html>
-<!--
- Test for jQuery.holdReady. Needs to be a
- standalone test since it deals with DOM
- ready.
--->
-<head>
- <title>
- jQuery.holdReady Test
- </title>
- <style>
- div { margin-top: 10px; }
- #output { background-color: green }
- #expectedOutput { background-color: green }
- </style>
- <script src="jquery.js"></script>
-
- <!-- Load the script loader that uses
- jQuery.readyWait -->
- <script src="data/readywaitloader.js"></script>
-
- <script type="text/javascript">
- jQuery(function() {
- // The delayedMessage is defined by
- // the readywaitasset.js file, so the
- // next line will only work if this DOM
- // ready callback is called after readyWait
- // has been decremented by readywaitloader.js
- // If an error occurs.
- jQuery("#output").append(delayedMessage);
- });
- </script>
-</head>
-<body>
- <h1>
- jQuery.holdReady Test
- </h1>
- <p>
- This is a test page for jQuery.readyWait and jQuery.holdReady,
- see
- <a href="https://bugs.jquery.com/ticket/6781">#6781</a>
- and
- <a href="https://bugs.jquery.com/ticket/8803">#8803</a>.
- </p>
- <p>
- Test for jQuery.holdReady, which can be used
- by plugins and other scripts to indicate something
- important to the page is still loading and needs
- to block the DOM ready callbacks that are registered
- with jQuery.
- </p>
- <p>
- Script loaders are the most likely kind of script
- to use jQuery.holdReady, but it could be used by
- other things like a script that loads a CSS file
- and wants to pause the DOM ready callbacks.
- </p>
- <p>
- <strong>Expected Result</strong>: The text
- <span id="expectedOutput">It Worked!</span>
- appears below after about <strong>2 seconds.</strong>
- </p>
- <p>
- If there is an error in the console,
- or the text does not show up, then the test failed.
- </p>
- <div id="output"></div>
-</body>
-</html>
var notYetReady, noEarlyExecution,
whenified = jQuery.when( jQuery.ready ),
promisified = Promise.resolve( jQuery.ready ),
+ start = new Date(),
order = [],
args = {};
done();
} );
} );
+
+ testIframe(
+ "holdReady test needs to be a standalone test since it deals with DOM ready",
+ "readywait.html",
+ function( assert, jQuery, window, document, releaseCalled ) {
+ assert.expect( 2 );
+ var now = new Date();
+ assert.ok( now - start >= 300, "Needs to have waited at least half a second" );
+ assert.ok( releaseCalled, "The release function was called, which resulted in ready" );
+ }
+ );
+
} )();