popper_js 1.12.9 → 1.14.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/assets/javascripts/popper.js +135 -52
- data/lib/popper_js/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87f69769d1ff9cbae471139ca595ab8f5fb1008b
|
4
|
+
data.tar.gz: 0b9f8f1bef8396bc4a3a7761d702ffd4a357bf20
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19736ac613f2278673181bd8eed55b1b2498252a5fd826ea5de1fb8219f798352a6b842cefd4c384c14850ae976c38923c1abf9b898acd800995affbb9f52148
|
7
|
+
data.tar.gz: c27f2ef23b4595a21a8f784bec99be151a4c5fa75c35c56cd04c497c6493b8bb5b099d910dfbe3d5dcc31ef841979610b258481e1e2be22796e0a36d5e80924f
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/**!
|
2
2
|
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
3
|
-
* @version 1.
|
3
|
+
* @version 1.14.3
|
4
4
|
* @license
|
5
5
|
* Copyright (c) 2016 Federico Zivolo and contributors
|
6
6
|
*
|
@@ -29,6 +29,7 @@
|
|
29
29
|
}(this, (function () { 'use strict';
|
30
30
|
|
31
31
|
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
32
|
+
|
32
33
|
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
33
34
|
var timeoutDuration = 0;
|
34
35
|
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
@@ -148,13 +149,33 @@ function getScrollParent(element) {
|
|
148
149
|
overflowX = _getStyleComputedProp.overflowX,
|
149
150
|
overflowY = _getStyleComputedProp.overflowY;
|
150
151
|
|
151
|
-
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
152
|
+
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
152
153
|
return element;
|
153
154
|
}
|
154
155
|
|
155
156
|
return getScrollParent(getParentNode(element));
|
156
157
|
}
|
157
158
|
|
159
|
+
var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);
|
160
|
+
var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);
|
161
|
+
|
162
|
+
/**
|
163
|
+
* Determines if the browser is Internet Explorer
|
164
|
+
* @method
|
165
|
+
* @memberof Popper.Utils
|
166
|
+
* @param {Number} version to check
|
167
|
+
* @returns {Boolean} isIE
|
168
|
+
*/
|
169
|
+
function isIE(version) {
|
170
|
+
if (version === 11) {
|
171
|
+
return isIE11;
|
172
|
+
}
|
173
|
+
if (version === 10) {
|
174
|
+
return isIE10;
|
175
|
+
}
|
176
|
+
return isIE11 || isIE10;
|
177
|
+
}
|
178
|
+
|
158
179
|
/**
|
159
180
|
* Returns the offset parent of the given element
|
160
181
|
* @method
|
@@ -163,16 +184,23 @@ function getScrollParent(element) {
|
|
163
184
|
* @returns {Element} offset parent
|
164
185
|
*/
|
165
186
|
function getOffsetParent(element) {
|
187
|
+
if (!element) {
|
188
|
+
return document.documentElement;
|
189
|
+
}
|
190
|
+
|
191
|
+
var noOffsetParent = isIE(10) ? document.body : null;
|
192
|
+
|
166
193
|
// NOTE: 1 DOM access here
|
167
|
-
var offsetParent = element
|
194
|
+
var offsetParent = element.offsetParent;
|
195
|
+
// Skip hidden elements which don't have an offsetParent
|
196
|
+
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
197
|
+
offsetParent = (element = element.nextElementSibling).offsetParent;
|
198
|
+
}
|
199
|
+
|
168
200
|
var nodeName = offsetParent && offsetParent.nodeName;
|
169
201
|
|
170
202
|
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
171
|
-
|
172
|
-
return element.ownerDocument.documentElement;
|
173
|
-
}
|
174
|
-
|
175
|
-
return document.documentElement;
|
203
|
+
return element ? element.ownerDocument.documentElement : document.documentElement;
|
176
204
|
}
|
177
205
|
|
178
206
|
// .offsetParent will return the closest TD or TABLE in case
|
@@ -314,29 +342,14 @@ function getBordersSize(styles, axis) {
|
|
314
342
|
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
315
343
|
}
|
316
344
|
|
317
|
-
/**
|
318
|
-
* Tells if you are running Internet Explorer 10
|
319
|
-
* @method
|
320
|
-
* @memberof Popper.Utils
|
321
|
-
* @returns {Boolean} isIE10
|
322
|
-
*/
|
323
|
-
var isIE10 = undefined;
|
324
|
-
|
325
|
-
var isIE10$1 = function () {
|
326
|
-
if (isIE10 === undefined) {
|
327
|
-
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
328
|
-
}
|
329
|
-
return isIE10;
|
330
|
-
};
|
331
|
-
|
332
345
|
function getSize(axis, body, html, computedStyle) {
|
333
|
-
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis],
|
346
|
+
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
334
347
|
}
|
335
348
|
|
336
349
|
function getWindowSizes() {
|
337
350
|
var body = document.body;
|
338
351
|
var html = document.documentElement;
|
339
|
-
var computedStyle =
|
352
|
+
var computedStyle = isIE(10) && getComputedStyle(html);
|
340
353
|
|
341
354
|
return {
|
342
355
|
height: getSize('Height', body, html, computedStyle),
|
@@ -428,8 +441,8 @@ function getBoundingClientRect(element) {
|
|
428
441
|
// IE10 10 FIX: Please, don't ask, the element isn't
|
429
442
|
// considered in DOM in some circumstances...
|
430
443
|
// This isn't reproducible in IE10 compatibility mode of IE11
|
431
|
-
|
432
|
-
|
444
|
+
try {
|
445
|
+
if (isIE(10)) {
|
433
446
|
rect = element.getBoundingClientRect();
|
434
447
|
var scrollTop = getScroll(element, 'top');
|
435
448
|
var scrollLeft = getScroll(element, 'left');
|
@@ -437,10 +450,10 @@ function getBoundingClientRect(element) {
|
|
437
450
|
rect.left += scrollLeft;
|
438
451
|
rect.bottom += scrollTop;
|
439
452
|
rect.right += scrollLeft;
|
440
|
-
}
|
441
|
-
|
442
|
-
|
443
|
-
}
|
453
|
+
} else {
|
454
|
+
rect = element.getBoundingClientRect();
|
455
|
+
}
|
456
|
+
} catch (e) {}
|
444
457
|
|
445
458
|
var result = {
|
446
459
|
left: rect.left,
|
@@ -472,7 +485,9 @@ function getBoundingClientRect(element) {
|
|
472
485
|
}
|
473
486
|
|
474
487
|
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
475
|
-
var
|
488
|
+
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
489
|
+
|
490
|
+
var isIE10 = isIE(10);
|
476
491
|
var isHTML = parent.nodeName === 'HTML';
|
477
492
|
var childrenRect = getBoundingClientRect(children);
|
478
493
|
var parentRect = getBoundingClientRect(parent);
|
@@ -482,6 +497,11 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
482
497
|
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
483
498
|
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
484
499
|
|
500
|
+
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
501
|
+
if (fixedPosition && parent.nodeName === 'HTML') {
|
502
|
+
parentRect.top = Math.max(parentRect.top, 0);
|
503
|
+
parentRect.left = Math.max(parentRect.left, 0);
|
504
|
+
}
|
485
505
|
var offsets = getClientRect({
|
486
506
|
top: childrenRect.top - parentRect.top - borderTopWidth,
|
487
507
|
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
@@ -509,7 +529,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
509
529
|
offsets.marginLeft = marginLeft;
|
510
530
|
}
|
511
531
|
|
512
|
-
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
532
|
+
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
513
533
|
offsets = includeScroll(offsets, parent);
|
514
534
|
}
|
515
535
|
|
@@ -517,13 +537,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
517
537
|
}
|
518
538
|
|
519
539
|
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
540
|
+
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
541
|
+
|
520
542
|
var html = element.ownerDocument.documentElement;
|
521
543
|
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
522
544
|
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
523
545
|
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
524
546
|
|
525
|
-
var scrollTop = getScroll(html);
|
526
|
-
var scrollLeft = getScroll(html, 'left');
|
547
|
+
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
548
|
+
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
527
549
|
|
528
550
|
var offset = {
|
529
551
|
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
@@ -554,6 +576,26 @@ function isFixed(element) {
|
|
554
576
|
return isFixed(getParentNode(element));
|
555
577
|
}
|
556
578
|
|
579
|
+
/**
|
580
|
+
* Finds the first parent of an element that has a transformed property defined
|
581
|
+
* @method
|
582
|
+
* @memberof Popper.Utils
|
583
|
+
* @argument {Element} element
|
584
|
+
* @returns {Element} first transformed parent or documentElement
|
585
|
+
*/
|
586
|
+
|
587
|
+
function getFixedPositionOffsetParent(element) {
|
588
|
+
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
589
|
+
if (!element || !element.parentElement || isIE()) {
|
590
|
+
return document.documentElement;
|
591
|
+
}
|
592
|
+
var el = element.parentElement;
|
593
|
+
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
594
|
+
el = el.parentElement;
|
595
|
+
}
|
596
|
+
return el || document.documentElement;
|
597
|
+
}
|
598
|
+
|
557
599
|
/**
|
558
600
|
* Computed the boundaries limits and return them
|
559
601
|
* @method
|
@@ -562,16 +604,20 @@ function isFixed(element) {
|
|
562
604
|
* @param {HTMLElement} reference
|
563
605
|
* @param {number} padding
|
564
606
|
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
607
|
+
* @param {Boolean} fixedPosition - Is in fixed position mode
|
565
608
|
* @returns {Object} Coordinates of the boundaries
|
566
609
|
*/
|
567
610
|
function getBoundaries(popper, reference, padding, boundariesElement) {
|
611
|
+
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
612
|
+
|
568
613
|
// NOTE: 1 DOM access here
|
614
|
+
|
569
615
|
var boundaries = { top: 0, left: 0 };
|
570
|
-
var offsetParent = findCommonOffsetParent(popper, reference);
|
616
|
+
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
571
617
|
|
572
618
|
// Handle viewport case
|
573
619
|
if (boundariesElement === 'viewport') {
|
574
|
-
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
620
|
+
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
575
621
|
} else {
|
576
622
|
// Handle other cases based on DOM element used as boundaries
|
577
623
|
var boundariesNode = void 0;
|
@@ -586,7 +632,7 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
|
586
632
|
boundariesNode = boundariesElement;
|
587
633
|
}
|
588
634
|
|
589
|
-
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
635
|
+
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
590
636
|
|
591
637
|
// In case of HTML, we need a different computation
|
592
638
|
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
@@ -687,11 +733,14 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
|
687
733
|
* @param {Object} state
|
688
734
|
* @param {Element} popper - the popper element
|
689
735
|
* @param {Element} reference - the reference element (the popper will be relative to this)
|
736
|
+
* @param {Element} fixedPosition - is in fixed position mode
|
690
737
|
* @returns {Object} An object containing the offsets which will be applied to the popper
|
691
738
|
*/
|
692
739
|
function getReferenceOffsets(state, popper, reference) {
|
693
|
-
var
|
694
|
-
|
740
|
+
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
741
|
+
|
742
|
+
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
743
|
+
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
695
744
|
}
|
696
745
|
|
697
746
|
/**
|
@@ -864,7 +913,7 @@ function update() {
|
|
864
913
|
};
|
865
914
|
|
866
915
|
// compute reference element offsets
|
867
|
-
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);
|
916
|
+
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
|
868
917
|
|
869
918
|
// compute auto placement, store placement inside the data object,
|
870
919
|
// modifiers will be able to edit `placement` if needed
|
@@ -874,9 +923,12 @@ function update() {
|
|
874
923
|
// store the computed placement inside `originalPlacement`
|
875
924
|
data.originalPlacement = data.placement;
|
876
925
|
|
926
|
+
data.positionFixed = this.options.positionFixed;
|
927
|
+
|
877
928
|
// compute the popper offsets
|
878
929
|
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
|
879
|
-
|
930
|
+
|
931
|
+
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
|
880
932
|
|
881
933
|
// run the modifiers
|
882
934
|
data = runModifiers(this.modifiers, data);
|
@@ -916,7 +968,7 @@ function getSupportedPropertyName(property) {
|
|
916
968
|
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
917
969
|
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
918
970
|
|
919
|
-
for (var i = 0; i < prefixes.length
|
971
|
+
for (var i = 0; i < prefixes.length; i++) {
|
920
972
|
var prefix = prefixes[i];
|
921
973
|
var toCheck = prefix ? '' + prefix + upperProp : property;
|
922
974
|
if (typeof document.body.style[toCheck] !== 'undefined') {
|
@@ -937,9 +989,12 @@ function destroy() {
|
|
937
989
|
// touch DOM only if `applyStyle` modifier is enabled
|
938
990
|
if (isModifierEnabled(this.modifiers, 'applyStyle')) {
|
939
991
|
this.popper.removeAttribute('x-placement');
|
940
|
-
this.popper.style.left = '';
|
941
992
|
this.popper.style.position = '';
|
942
993
|
this.popper.style.top = '';
|
994
|
+
this.popper.style.left = '';
|
995
|
+
this.popper.style.right = '';
|
996
|
+
this.popper.style.bottom = '';
|
997
|
+
this.popper.style.willChange = '';
|
943
998
|
this.popper.style[getSupportedPropertyName('transform')] = '';
|
944
999
|
}
|
945
1000
|
|
@@ -1127,12 +1182,12 @@ function applyStyle(data) {
|
|
1127
1182
|
* @method
|
1128
1183
|
* @memberof Popper.modifiers
|
1129
1184
|
* @param {HTMLElement} reference - The reference element used to position the popper
|
1130
|
-
* @param {HTMLElement} popper - The HTML element used as popper
|
1185
|
+
* @param {HTMLElement} popper - The HTML element used as popper
|
1131
1186
|
* @param {Object} options - Popper.js options
|
1132
1187
|
*/
|
1133
1188
|
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
1134
1189
|
// compute reference element offsets
|
1135
|
-
var referenceOffsets = getReferenceOffsets(state, popper, reference);
|
1190
|
+
var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
|
1136
1191
|
|
1137
1192
|
// compute auto placement, store placement inside the data object,
|
1138
1193
|
// modifiers will be able to edit `placement` if needed
|
@@ -1143,7 +1198,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
|
1143
1198
|
|
1144
1199
|
// Apply `position` to popper before anything else because
|
1145
1200
|
// without the position applied we can't guarantee correct computations
|
1146
|
-
setStyles(popper, { position: 'absolute' });
|
1201
|
+
setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
|
1147
1202
|
|
1148
1203
|
return options;
|
1149
1204
|
}
|
@@ -1178,11 +1233,13 @@ function computeStyle(data, options) {
|
|
1178
1233
|
position: popper.position
|
1179
1234
|
};
|
1180
1235
|
|
1181
|
-
//
|
1236
|
+
// Avoid blurry text by using full pixel integers.
|
1237
|
+
// For pixel-perfect positioning, top/bottom prefers rounded
|
1238
|
+
// values, while left/right prefers floored values.
|
1182
1239
|
var offsets = {
|
1183
1240
|
left: Math.floor(popper.left),
|
1184
|
-
top: Math.
|
1185
|
-
bottom: Math.
|
1241
|
+
top: Math.round(popper.top),
|
1242
|
+
bottom: Math.round(popper.bottom),
|
1186
1243
|
right: Math.floor(popper.right)
|
1187
1244
|
};
|
1188
1245
|
|
@@ -1446,7 +1503,7 @@ function flip(data, options) {
|
|
1446
1503
|
return data;
|
1447
1504
|
}
|
1448
1505
|
|
1449
|
-
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);
|
1506
|
+
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
|
1450
1507
|
|
1451
1508
|
var placement = data.placement.split('-')[0];
|
1452
1509
|
var placementOpposite = getOppositePlacement(placement);
|
@@ -1738,7 +1795,27 @@ function preventOverflow(data, options) {
|
|
1738
1795
|
boundariesElement = getOffsetParent(boundariesElement);
|
1739
1796
|
}
|
1740
1797
|
|
1741
|
-
|
1798
|
+
// NOTE: DOM access here
|
1799
|
+
// resets the popper's position so that the document size can be calculated excluding
|
1800
|
+
// the size of the popper element itself
|
1801
|
+
var transformProp = getSupportedPropertyName('transform');
|
1802
|
+
var popperStyles = data.instance.popper.style; // assignment to help minification
|
1803
|
+
var top = popperStyles.top,
|
1804
|
+
left = popperStyles.left,
|
1805
|
+
transform = popperStyles[transformProp];
|
1806
|
+
|
1807
|
+
popperStyles.top = '';
|
1808
|
+
popperStyles.left = '';
|
1809
|
+
popperStyles[transformProp] = '';
|
1810
|
+
|
1811
|
+
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
|
1812
|
+
|
1813
|
+
// NOTE: DOM access here
|
1814
|
+
// restores the original style properties after the offsets have been computed
|
1815
|
+
popperStyles.top = top;
|
1816
|
+
popperStyles.left = left;
|
1817
|
+
popperStyles[transformProp] = transform;
|
1818
|
+
|
1742
1819
|
options.boundaries = boundaries;
|
1743
1820
|
|
1744
1821
|
var order = options.priority;
|
@@ -2235,6 +2312,12 @@ var Defaults = {
|
|
2235
2312
|
*/
|
2236
2313
|
placement: 'bottom',
|
2237
2314
|
|
2315
|
+
/**
|
2316
|
+
* Set this to true if you want popper to position it self in 'fixed' mode
|
2317
|
+
* @prop {Boolean} positionFixed=false
|
2318
|
+
*/
|
2319
|
+
positionFixed: false,
|
2320
|
+
|
2238
2321
|
/**
|
2239
2322
|
* Whether events (resize, scroll) are initially enabled
|
2240
2323
|
* @prop {Boolean} eventsEnabled=true
|
data/lib/popper_js/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: popper_js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gleb Mazovetskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-07-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|