Blame view

app/bower_components/jquery/src/offset.js 6.2 KB
87c93a029   Dang YoungWorld   add modal
1
  define( [
f986e111b   TRUONG   add libs
2
  	"./core",
f986e111b   TRUONG   add libs
3
  	"./core/access",
87c93a029   Dang YoungWorld   add modal
4
5
  	"./var/document",
  	"./var/documentElement",
f986e111b   TRUONG   add libs
6
7
8
9
10
11
12
13
  	"./css/var/rnumnonpx",
  	"./css/curCSS",
  	"./css/addGetHookIf",
  	"./css/support",
  
  	"./core/init",
  	"./css",
  	"./selector" // contains
87c93a029   Dang YoungWorld   add modal
14
  ], function( jQuery, access, document, documentElement, rnumnonpx, curCSS, addGetHookIf, support ) {
f986e111b   TRUONG   add libs
15

87c93a029   Dang YoungWorld   add modal
16
  "use strict";
f986e111b   TRUONG   add libs
17
18
19
20
21
  
  /**
   * Gets a window from an element
   */
  function getWindow( elem ) {
87c93a029   Dang YoungWorld   add modal
22
  	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
f986e111b   TRUONG   add libs
23
24
25
26
27
28
29
30
  }
  
  jQuery.offset = {
  	setOffset: function( elem, options, i ) {
  		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
  			position = jQuery.css( elem, "position" ),
  			curElem = jQuery( elem ),
  			props = {};
87c93a029   Dang YoungWorld   add modal
31
  		// Set position first, in-case top/left are set even on static elem
f986e111b   TRUONG   add libs
32
33
34
35
36
37
38
39
  		if ( position === "static" ) {
  			elem.style.position = "relative";
  		}
  
  		curOffset = curElem.offset();
  		curCSSTop = jQuery.css( elem, "top" );
  		curCSSLeft = jQuery.css( elem, "left" );
  		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
87c93a029   Dang YoungWorld   add modal
40
  			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
f986e111b   TRUONG   add libs
41

87c93a029   Dang YoungWorld   add modal
42
43
  		// Need to be able to calculate position if either
  		// top or left is auto and position is either absolute or fixed
f986e111b   TRUONG   add libs
44
45
46
47
  		if ( calculatePosition ) {
  			curPosition = curElem.position();
  			curTop = curPosition.top;
  			curLeft = curPosition.left;
87c93a029   Dang YoungWorld   add modal
48

f986e111b   TRUONG   add libs
49
50
51
52
53
54
  		} else {
  			curTop = parseFloat( curCSSTop ) || 0;
  			curLeft = parseFloat( curCSSLeft ) || 0;
  		}
  
  		if ( jQuery.isFunction( options ) ) {
87c93a029   Dang YoungWorld   add modal
55
56
57
  
  			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
  			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
f986e111b   TRUONG   add libs
58
59
60
61
62
63
64
65
66
67
68
  		}
  
  		if ( options.top != null ) {
  			props.top = ( options.top - curOffset.top ) + curTop;
  		}
  		if ( options.left != null ) {
  			props.left = ( options.left - curOffset.left ) + curLeft;
  		}
  
  		if ( "using" in options ) {
  			options.using.call( elem, props );
87c93a029   Dang YoungWorld   add modal
69

f986e111b   TRUONG   add libs
70
71
72
73
74
  		} else {
  			curElem.css( props );
  		}
  	}
  };
87c93a029   Dang YoungWorld   add modal
75
  jQuery.fn.extend( {
f986e111b   TRUONG   add libs
76
  	offset: function( options ) {
87c93a029   Dang YoungWorld   add modal
77
78
  
  		// Preserve chaining for setter
f986e111b   TRUONG   add libs
79
80
81
  		if ( arguments.length ) {
  			return options === undefined ?
  				this :
87c93a029   Dang YoungWorld   add modal
82
  				this.each( function( i ) {
f986e111b   TRUONG   add libs
83
  					jQuery.offset.setOffset( this, options, i );
87c93a029   Dang YoungWorld   add modal
84
  				} );
f986e111b   TRUONG   add libs
85
  		}
87c93a029   Dang YoungWorld   add modal
86
87
  		var docElem, win, rect, doc,
  			elem = this[ 0 ];
f986e111b   TRUONG   add libs
88

87c93a029   Dang YoungWorld   add modal
89
  		if ( !elem ) {
f986e111b   TRUONG   add libs
90
91
  			return;
  		}
87c93a029   Dang YoungWorld   add modal
92
93
94
95
96
  		// Support: IE <=11 only
  		// Running getBoundingClientRect on a
  		// disconnected node in IE throws an error
  		if ( !elem.getClientRects().length ) {
  			return { top: 0, left: 0 };
f986e111b   TRUONG   add libs
97
  		}
87c93a029   Dang YoungWorld   add modal
98
99
100
101
102
103
104
105
106
107
108
109
  		rect = elem.getBoundingClientRect();
  
  		// Make sure element is not hidden (display: none)
  		if ( rect.width || rect.height ) {
  			doc = elem.ownerDocument;
  			win = getWindow( doc );
  			docElem = doc.documentElement;
  
  			return {
  				top: rect.top + win.pageYOffset - docElem.clientTop,
  				left: rect.left + win.pageXOffset - docElem.clientLeft
  			};
f986e111b   TRUONG   add libs
110
  		}
87c93a029   Dang YoungWorld   add modal
111
112
113
  
  		// Return zeros for disconnected and hidden elements (gh-2310)
  		return rect;
f986e111b   TRUONG   add libs
114
115
116
117
118
119
120
121
  	},
  
  	position: function() {
  		if ( !this[ 0 ] ) {
  			return;
  		}
  
  		var offsetParent, offset,
87c93a029   Dang YoungWorld   add modal
122
123
  			elem = this[ 0 ],
  			parentOffset = { top: 0, left: 0 };
f986e111b   TRUONG   add libs
124

87c93a029   Dang YoungWorld   add modal
125
126
  		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
  		// because it is its only offset parent
f986e111b   TRUONG   add libs
127
  		if ( jQuery.css( elem, "position" ) === "fixed" ) {
87c93a029   Dang YoungWorld   add modal
128
129
  
  			// Assume getBoundingClientRect is there when computed position is fixed
f986e111b   TRUONG   add libs
130
  			offset = elem.getBoundingClientRect();
87c93a029   Dang YoungWorld   add modal
131

f986e111b   TRUONG   add libs
132
  		} else {
87c93a029   Dang YoungWorld   add modal
133

f986e111b   TRUONG   add libs
134
135
136
137
138
139
140
141
142
143
  			// Get *real* offsetParent
  			offsetParent = this.offsetParent();
  
  			// Get correct offsets
  			offset = this.offset();
  			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
  				parentOffset = offsetParent.offset();
  			}
  
  			// Add offsetParent borders
87c93a029   Dang YoungWorld   add modal
144
145
146
147
  			parentOffset = {
  				top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
  				left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
  			};
f986e111b   TRUONG   add libs
148
149
150
  		}
  
  		// Subtract parent offsets and element margins
f986e111b   TRUONG   add libs
151
  		return {
87c93a029   Dang YoungWorld   add modal
152
153
  			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
  			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
f986e111b   TRUONG   add libs
154
155
  		};
  	},
87c93a029   Dang YoungWorld   add modal
156
157
158
159
160
161
162
163
164
165
  	// This method will return documentElement in the following cases:
  	// 1) For the element inside the iframe without offsetParent, this method will return
  	//    documentElement of the parent window
  	// 2) For the hidden or detached element
  	// 3) For body or html element, i.e. in case of the html node - it will return itself
  	//
  	// but those exceptions were never presented as a real life use-cases
  	// and might be considered as more preferable results.
  	//
  	// This logic, however, is not guaranteed and can change at any point in the future
f986e111b   TRUONG   add libs
166
  	offsetParent: function() {
87c93a029   Dang YoungWorld   add modal
167
168
  		return this.map( function() {
  			var offsetParent = this.offsetParent;
f986e111b   TRUONG   add libs
169

87c93a029   Dang YoungWorld   add modal
170
  			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
f986e111b   TRUONG   add libs
171
172
  				offsetParent = offsetParent.offsetParent;
  			}
87c93a029   Dang YoungWorld   add modal
173
174
175
  
  			return offsetParent || documentElement;
  		} );
f986e111b   TRUONG   add libs
176
  	}
87c93a029   Dang YoungWorld   add modal
177
  } );
f986e111b   TRUONG   add libs
178
179
180
  
  // Create scrollLeft and scrollTop methods
  jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
87c93a029   Dang YoungWorld   add modal
181
  	var top = "pageYOffset" === prop;
f986e111b   TRUONG   add libs
182
183
184
185
186
187
  
  	jQuery.fn[ method ] = function( val ) {
  		return access( this, function( elem, method, val ) {
  			var win = getWindow( elem );
  
  			if ( val === undefined ) {
87c93a029   Dang YoungWorld   add modal
188
  				return win ? win[ prop ] : elem[ method ];
f986e111b   TRUONG   add libs
189
190
191
192
  			}
  
  			if ( win ) {
  				win.scrollTo(
87c93a029   Dang YoungWorld   add modal
193
194
  					!top ? val : win.pageXOffset,
  					top ? val : win.pageYOffset
f986e111b   TRUONG   add libs
195
196
197
198
199
  				);
  
  			} else {
  				elem[ method ] = val;
  			}
87c93a029   Dang YoungWorld   add modal
200
  		}, method, val, arguments.length );
f986e111b   TRUONG   add libs
201
  	};
87c93a029   Dang YoungWorld   add modal
202
  } );
f986e111b   TRUONG   add libs
203

87c93a029   Dang YoungWorld   add modal
204
  // Support: Safari <=7 - 9.1, Chrome <=37 - 49
f986e111b   TRUONG   add libs
205
206
  // Add the top/left cssHooks using jQuery.fn.position
  // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
87c93a029   Dang YoungWorld   add modal
207
208
209
  // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
  // getComputedStyle returns percent when specified for top/left/bottom/right;
  // rather than make the css module depend on the offset module, just check for it here
f986e111b   TRUONG   add libs
210
211
212
213
214
  jQuery.each( [ "top", "left" ], function( i, prop ) {
  	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
  		function( elem, computed ) {
  			if ( computed ) {
  				computed = curCSS( elem, prop );
87c93a029   Dang YoungWorld   add modal
215
216
  
  				// If curCSS returns percentage, fallback to offset
f986e111b   TRUONG   add libs
217
218
219
220
221
222
  				return rnumnonpx.test( computed ) ?
  					jQuery( elem ).position()[ prop ] + "px" :
  					computed;
  			}
  		}
  	);
87c93a029   Dang YoungWorld   add modal
223
  } );
f986e111b   TRUONG   add libs
224
225
  
  return jQuery;
87c93a029   Dang YoungWorld   add modal
226
  } );