Projet

Général

Profil

Paste
Télécharger (3,8 ko) Statistiques
| Branche: | Révision:

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
});