popper_js 1.12.9 → 1.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|