root / drupal7 / sites / all / libraries / flexslider-2.5.0 / bower_components / jquery / src / core / ready.js @ 0aee3c58
1 |
define([ |
---|---|
2 |
"../core",
|
3 |
"../core/init",
|
4 |
"../deferred"
|
5 |
], function( jQuery ) {
|
6 |
|
7 |
// The deferred used on DOM ready
|
8 |
var readyList;
|
9 |
|
10 |
jQuery.fn.ready = function( fn ) { |
11 |
// Add the callback
|
12 |
jQuery.ready.promise().done( fn ); |
13 |
|
14 |
return this; |
15 |
}; |
16 |
|
17 |
jQuery.extend({ |
18 |
// Is the DOM ready to be used? Set to true once it occurs.
|
19 |
isReady: false, |
20 |
|
21 |
// A counter to track how many items to wait for before
|
22 |
// the ready event fires. See #6781
|
23 |
readyWait: 1, |
24 |
|
25 |
// Hold (or release) the ready event
|
26 |
holdReady: function( hold ) { |
27 |
if ( hold ) {
|
28 |
jQuery.readyWait++; |
29 |
} else {
|
30 |
jQuery.ready( true );
|
31 |
} |
32 |
}, |
33 |
|
34 |
// Handle when the DOM is ready
|
35 |
ready: function( wait ) { |
36 |
|
37 |
// Abort if there are pending holds or we're already ready
|
38 |
if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { |
39 |
return;
|
40 |
} |
41 |
|
42 |
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
|
43 |
if ( !document.body ) {
|
44 |
return setTimeout( jQuery.ready );
|
45 |
} |
46 |
|
47 |
// Remember that the DOM is ready
|
48 |
jQuery.isReady = true;
|
49 |
|
50 |
// If a normal DOM Ready event fired, decrement, and wait if need be
|
51 |
if ( wait !== true && --jQuery.readyWait > 0 ) { |
52 |
return;
|
53 |
} |
54 |
|
55 |
// If there are functions bound, to execute
|
56 |
readyList.resolveWith( document, [ jQuery ] ); |
57 |
|
58 |
// Trigger any bound ready events
|
59 |
if ( jQuery.fn.triggerHandler ) {
|
60 |
jQuery( document ).triggerHandler( "ready" );
|
61 |
jQuery( document ).off( "ready" );
|
62 |
} |
63 |
} |
64 |
}); |
65 |
|
66 |
/**
|
67 |
* Clean-up method for dom ready events
|
68 |
*/
|
69 |
function detach() { |
70 |
if ( document.addEventListener ) {
|
71 |
document.removeEventListener( "DOMContentLoaded", completed, false ); |
72 |
window.removeEventListener( "load", completed, false ); |
73 |
|
74 |
} else {
|
75 |
document.detachEvent( "onreadystatechange", completed );
|
76 |
window.detachEvent( "onload", completed );
|
77 |
} |
78 |
} |
79 |
|
80 |
/**
|
81 |
* The ready event handler and self cleanup method
|
82 |
*/
|
83 |
function completed() { |
84 |
// readyState === "complete" is good enough for us to call the dom ready in oldIE
|
85 |
if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { |
86 |
detach(); |
87 |
jQuery.ready(); |
88 |
} |
89 |
} |
90 |
|
91 |
jQuery.ready.promise = function( obj ) { |
92 |
if ( !readyList ) {
|
93 |
|
94 |
readyList = jQuery.Deferred(); |
95 |
|
96 |
// Catch cases where $(document).ready() is called after the browser event has already occurred.
|
97 |
// we once tried to use readyState "interactive" here, but it caused issues like the one
|
98 |
// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
|
99 |
if ( document.readyState === "complete" ) { |
100 |
// Handle it asynchronously to allow scripts the opportunity to delay ready
|
101 |
setTimeout( jQuery.ready ); |
102 |
|
103 |
// Standards-based browsers support DOMContentLoaded
|
104 |
} else if ( document.addEventListener ) { |
105 |
// Use the handy event callback
|
106 |
document.addEventListener( "DOMContentLoaded", completed, false ); |
107 |
|
108 |
// A fallback to window.onload, that will always work
|
109 |
window.addEventListener( "load", completed, false ); |
110 |
|
111 |
// If IE event model is used
|
112 |
} else {
|
113 |
// Ensure firing before onload, maybe late but safe also for iframes
|
114 |
document.attachEvent( "onreadystatechange", completed );
|
115 |
|
116 |
// A fallback to window.onload, that will always work
|
117 |
window.attachEvent( "onload", completed );
|
118 |
|
119 |
// If IE and not a frame
|
120 |
// continually check to see if the document is ready
|
121 |
var top = false; |
122 |
|
123 |
try {
|
124 |
top = window.frameElement == null && document.documentElement;
|
125 |
} catch(e) {}
|
126 |
|
127 |
if ( top && top.doScroll ) {
|
128 |
(function doScrollCheck() { |
129 |
if ( !jQuery.isReady ) {
|
130 |
|
131 |
try {
|
132 |
// Use the trick by Diego Perini
|
133 |
// http://javascript.nwbox.com/IEContentLoaded/
|
134 |
top.doScroll("left");
|
135 |
} catch(e) {
|
136 |
return setTimeout( doScrollCheck, 50 ); |
137 |
} |
138 |
|
139 |
// detach all dom ready events
|
140 |
detach(); |
141 |
|
142 |
// and execute any waiting functions
|
143 |
jQuery.ready(); |
144 |
} |
145 |
})(); |
146 |
} |
147 |
} |
148 |
} |
149 |
return readyList.promise( obj );
|
150 |
}; |
151 |
|
152 |
}); |