popper_js 1.12.5 → 1.12.9
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 +72 -75
- data/lib/popper_js.rb +12 -1
- 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: a59bbeb89ea6c4566e4b1f24369a10082c23c97a
|
|
4
|
+
data.tar.gz: b864874a2d2b4119cd99344c177f59411c57035a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dda8c512d5397612025f6b4f755a599bd3ecb5ca9a452a6b26d2fa0b66823a5d4dee890fc6527f221cec2182babbbd8925bea946dc038799b916684c24169b82
|
|
7
|
+
data.tar.gz: 60c205e38c0920530c1bd32a56caa40d98bf3a4b51ecec43423f0b1268f1c57b98ed1e5fdcac25318251719ef385542ae59f2fe7745b5f1e404a11f8fd062433
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**!
|
|
2
2
|
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
|
3
|
-
* @version 1.12.
|
|
3
|
+
* @version 1.12.9
|
|
4
4
|
* @license
|
|
5
5
|
* Copyright (c) 2016 Federico Zivolo and contributors
|
|
6
6
|
*
|
|
@@ -28,22 +28,7 @@
|
|
|
28
28
|
(global.Popper = factory());
|
|
29
29
|
}(this, (function () { 'use strict';
|
|
30
30
|
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Determine if a function is implemented natively (as opposed to a polyfill).
|
|
35
|
-
* @method
|
|
36
|
-
* @memberof Popper.Utils
|
|
37
|
-
* @argument {Function | undefined} fn the function to check
|
|
38
|
-
* @returns {Boolean}
|
|
39
|
-
*/
|
|
40
|
-
var isNative = (function (fn) {
|
|
41
|
-
return nativeHints.some(function (hint) {
|
|
42
|
-
return (fn || '').toString().indexOf(hint) > -1;
|
|
43
|
-
});
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
var isBrowser = typeof window !== 'undefined';
|
|
31
|
+
var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined';
|
|
47
32
|
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
|
48
33
|
var timeoutDuration = 0;
|
|
49
34
|
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
|
@@ -54,26 +39,16 @@ for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
|
|
54
39
|
}
|
|
55
40
|
|
|
56
41
|
function microtaskDebounce(fn) {
|
|
57
|
-
var
|
|
58
|
-
var i = 0;
|
|
59
|
-
var elem = document.createElement('span');
|
|
60
|
-
|
|
61
|
-
// MutationObserver provides a mechanism for scheduling microtasks, which
|
|
62
|
-
// are scheduled *before* the next task. This gives us a way to debounce
|
|
63
|
-
// a function but ensure it's called *before* the next paint.
|
|
64
|
-
var observer = new MutationObserver(function () {
|
|
65
|
-
fn();
|
|
66
|
-
scheduled = false;
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
observer.observe(elem, { attributes: true });
|
|
70
|
-
|
|
42
|
+
var called = false;
|
|
71
43
|
return function () {
|
|
72
|
-
if (
|
|
73
|
-
|
|
74
|
-
elem.setAttribute('x-index', i);
|
|
75
|
-
i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8
|
|
44
|
+
if (called) {
|
|
45
|
+
return;
|
|
76
46
|
}
|
|
47
|
+
called = true;
|
|
48
|
+
window.Promise.resolve().then(function () {
|
|
49
|
+
called = false;
|
|
50
|
+
fn();
|
|
51
|
+
});
|
|
77
52
|
};
|
|
78
53
|
}
|
|
79
54
|
|
|
@@ -90,11 +65,7 @@ function taskDebounce(fn) {
|
|
|
90
65
|
};
|
|
91
66
|
}
|
|
92
67
|
|
|
93
|
-
|
|
94
|
-
// these rely on Mutation Events which only occur when an element is connected
|
|
95
|
-
// to the DOM. The algorithm used in this module does not use a connected element,
|
|
96
|
-
// and so we must ensure that a *native* MutationObserver is available.
|
|
97
|
-
var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);
|
|
68
|
+
var supportsMicroTasks = isBrowser && window.Promise;
|
|
98
69
|
|
|
99
70
|
/**
|
|
100
71
|
* Create a debounced version of a method, that's asynchronously deferred
|
|
@@ -105,7 +76,7 @@ var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserv
|
|
|
105
76
|
* @argument {Function} fn
|
|
106
77
|
* @returns {Function}
|
|
107
78
|
*/
|
|
108
|
-
var debounce =
|
|
79
|
+
var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
|
|
109
80
|
|
|
110
81
|
/**
|
|
111
82
|
* Check if the given variable is a function
|
|
@@ -131,7 +102,7 @@ function getStyleComputedProperty(element, property) {
|
|
|
131
102
|
return [];
|
|
132
103
|
}
|
|
133
104
|
// NOTE: 1 DOM access here
|
|
134
|
-
var css =
|
|
105
|
+
var css = getComputedStyle(element, null);
|
|
135
106
|
return property ? css[property] : css;
|
|
136
107
|
}
|
|
137
108
|
|
|
@@ -158,8 +129,16 @@ function getParentNode(element) {
|
|
|
158
129
|
*/
|
|
159
130
|
function getScrollParent(element) {
|
|
160
131
|
// Return body, `getScroll` will take care to get the correct `scrollTop` from it
|
|
161
|
-
if (!element
|
|
162
|
-
return
|
|
132
|
+
if (!element) {
|
|
133
|
+
return document.body;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
switch (element.nodeName) {
|
|
137
|
+
case 'HTML':
|
|
138
|
+
case 'BODY':
|
|
139
|
+
return element.ownerDocument.body;
|
|
140
|
+
case '#document':
|
|
141
|
+
return element.body;
|
|
163
142
|
}
|
|
164
143
|
|
|
165
144
|
// Firefox want us to check `-x` and `-y` variations as well
|
|
@@ -189,7 +168,11 @@ function getOffsetParent(element) {
|
|
|
189
168
|
var nodeName = offsetParent && offsetParent.nodeName;
|
|
190
169
|
|
|
191
170
|
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
|
192
|
-
|
|
171
|
+
if (element) {
|
|
172
|
+
return element.ownerDocument.documentElement;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return document.documentElement;
|
|
193
176
|
}
|
|
194
177
|
|
|
195
178
|
// .offsetParent will return the closest TD or TABLE in case
|
|
@@ -236,7 +219,7 @@ function getRoot(node) {
|
|
|
236
219
|
function findCommonOffsetParent(element1, element2) {
|
|
237
220
|
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
|
238
221
|
if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
|
|
239
|
-
return
|
|
222
|
+
return document.documentElement;
|
|
240
223
|
}
|
|
241
224
|
|
|
242
225
|
// Here we make sure to give as "start" the element that comes first in the DOM
|
|
@@ -284,8 +267,8 @@ function getScroll(element) {
|
|
|
284
267
|
var nodeName = element.nodeName;
|
|
285
268
|
|
|
286
269
|
if (nodeName === 'BODY' || nodeName === 'HTML') {
|
|
287
|
-
var html =
|
|
288
|
-
var scrollingElement =
|
|
270
|
+
var html = element.ownerDocument.documentElement;
|
|
271
|
+
var scrollingElement = element.ownerDocument.scrollingElement || html;
|
|
289
272
|
return scrollingElement[upperSide];
|
|
290
273
|
}
|
|
291
274
|
|
|
@@ -328,7 +311,7 @@ function getBordersSize(styles, axis) {
|
|
|
328
311
|
var sideA = axis === 'x' ? 'Left' : 'Top';
|
|
329
312
|
var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
|
|
330
313
|
|
|
331
|
-
return
|
|
314
|
+
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
|
332
315
|
}
|
|
333
316
|
|
|
334
317
|
/**
|
|
@@ -351,9 +334,9 @@ function getSize(axis, body, html, computedStyle) {
|
|
|
351
334
|
}
|
|
352
335
|
|
|
353
336
|
function getWindowSizes() {
|
|
354
|
-
var body =
|
|
355
|
-
var html =
|
|
356
|
-
var computedStyle = isIE10$1() &&
|
|
337
|
+
var body = document.body;
|
|
338
|
+
var html = document.documentElement;
|
|
339
|
+
var computedStyle = isIE10$1() && getComputedStyle(html);
|
|
357
340
|
|
|
358
341
|
return {
|
|
359
342
|
height: getSize('Height', body, html, computedStyle),
|
|
@@ -496,8 +479,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
|
496
479
|
var scrollParent = getScrollParent(children);
|
|
497
480
|
|
|
498
481
|
var styles = getStyleComputedProperty(parent);
|
|
499
|
-
var borderTopWidth =
|
|
500
|
-
var borderLeftWidth =
|
|
482
|
+
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
|
483
|
+
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
|
501
484
|
|
|
502
485
|
var offsets = getClientRect({
|
|
503
486
|
top: childrenRect.top - parentRect.top - borderTopWidth,
|
|
@@ -513,8 +496,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
|
513
496
|
// differently when margins are applied to it. The margins are included in
|
|
514
497
|
// the box of the documentElement, in the other cases not.
|
|
515
498
|
if (!isIE10 && isHTML) {
|
|
516
|
-
var marginTop =
|
|
517
|
-
var marginLeft =
|
|
499
|
+
var marginTop = parseFloat(styles.marginTop, 10);
|
|
500
|
+
var marginLeft = parseFloat(styles.marginLeft, 10);
|
|
518
501
|
|
|
519
502
|
offsets.top -= borderTopWidth - marginTop;
|
|
520
503
|
offsets.bottom -= borderTopWidth - marginTop;
|
|
@@ -534,7 +517,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
|
534
517
|
}
|
|
535
518
|
|
|
536
519
|
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
|
537
|
-
var html =
|
|
520
|
+
var html = element.ownerDocument.documentElement;
|
|
538
521
|
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
|
539
522
|
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
|
540
523
|
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
|
@@ -593,12 +576,12 @@ function getBoundaries(popper, reference, padding, boundariesElement) {
|
|
|
593
576
|
// Handle other cases based on DOM element used as boundaries
|
|
594
577
|
var boundariesNode = void 0;
|
|
595
578
|
if (boundariesElement === 'scrollParent') {
|
|
596
|
-
boundariesNode = getScrollParent(getParentNode(
|
|
579
|
+
boundariesNode = getScrollParent(getParentNode(reference));
|
|
597
580
|
if (boundariesNode.nodeName === 'BODY') {
|
|
598
|
-
boundariesNode =
|
|
581
|
+
boundariesNode = popper.ownerDocument.documentElement;
|
|
599
582
|
}
|
|
600
583
|
} else if (boundariesElement === 'window') {
|
|
601
|
-
boundariesNode =
|
|
584
|
+
boundariesNode = popper.ownerDocument.documentElement;
|
|
602
585
|
} else {
|
|
603
586
|
boundariesNode = boundariesElement;
|
|
604
587
|
}
|
|
@@ -719,7 +702,7 @@ function getReferenceOffsets(state, popper, reference) {
|
|
|
719
702
|
* @returns {Object} object containing width and height properties
|
|
720
703
|
*/
|
|
721
704
|
function getOuterSizes(element) {
|
|
722
|
-
var styles =
|
|
705
|
+
var styles = getComputedStyle(element);
|
|
723
706
|
var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
|
|
724
707
|
var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
|
|
725
708
|
var result = {
|
|
@@ -839,10 +822,11 @@ function runModifiers(modifiers, data, ends) {
|
|
|
839
822
|
var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
|
|
840
823
|
|
|
841
824
|
modifiersToRun.forEach(function (modifier) {
|
|
842
|
-
if (modifier
|
|
825
|
+
if (modifier['function']) {
|
|
826
|
+
// eslint-disable-line dot-notation
|
|
843
827
|
console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
|
|
844
828
|
}
|
|
845
|
-
var fn = modifier
|
|
829
|
+
var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
|
|
846
830
|
if (modifier.enabled && isFunction(fn)) {
|
|
847
831
|
// Add properties to offsets to make them a complete clientRect object
|
|
848
832
|
// we do this before each modifier to make sure the previous one doesn't
|
|
@@ -935,7 +919,7 @@ function getSupportedPropertyName(property) {
|
|
|
935
919
|
for (var i = 0; i < prefixes.length - 1; i++) {
|
|
936
920
|
var prefix = prefixes[i];
|
|
937
921
|
var toCheck = prefix ? '' + prefix + upperProp : property;
|
|
938
|
-
if (typeof
|
|
922
|
+
if (typeof document.body.style[toCheck] !== 'undefined') {
|
|
939
923
|
return toCheck;
|
|
940
924
|
}
|
|
941
925
|
}
|
|
@@ -969,9 +953,19 @@ function destroy() {
|
|
|
969
953
|
return this;
|
|
970
954
|
}
|
|
971
955
|
|
|
956
|
+
/**
|
|
957
|
+
* Get the window associated with the element
|
|
958
|
+
* @argument {Element} element
|
|
959
|
+
* @returns {Window}
|
|
960
|
+
*/
|
|
961
|
+
function getWindow(element) {
|
|
962
|
+
var ownerDocument = element.ownerDocument;
|
|
963
|
+
return ownerDocument ? ownerDocument.defaultView : window;
|
|
964
|
+
}
|
|
965
|
+
|
|
972
966
|
function attachToScrollParents(scrollParent, event, callback, scrollParents) {
|
|
973
967
|
var isBody = scrollParent.nodeName === 'BODY';
|
|
974
|
-
var target = isBody ?
|
|
968
|
+
var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
|
|
975
969
|
target.addEventListener(event, callback, { passive: true });
|
|
976
970
|
|
|
977
971
|
if (!isBody) {
|
|
@@ -989,7 +983,7 @@ function attachToScrollParents(scrollParent, event, callback, scrollParents) {
|
|
|
989
983
|
function setupEventListeners(reference, options, state, updateBound) {
|
|
990
984
|
// Resize event listener on window
|
|
991
985
|
state.updateBound = updateBound;
|
|
992
|
-
|
|
986
|
+
getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
|
|
993
987
|
|
|
994
988
|
// Scroll event listener on scroll parents
|
|
995
989
|
var scrollElement = getScrollParent(reference);
|
|
@@ -1020,7 +1014,7 @@ function enableEventListeners() {
|
|
|
1020
1014
|
*/
|
|
1021
1015
|
function removeEventListeners(reference, state) {
|
|
1022
1016
|
// Remove resize event listener on window
|
|
1023
|
-
|
|
1017
|
+
getWindow(reference).removeEventListener('resize', state.updateBound);
|
|
1024
1018
|
|
|
1025
1019
|
// Remove scroll event listener on scroll parents
|
|
1026
1020
|
state.scrollParents.forEach(function (target) {
|
|
@@ -1044,7 +1038,7 @@ function removeEventListeners(reference, state) {
|
|
|
1044
1038
|
*/
|
|
1045
1039
|
function disableEventListeners() {
|
|
1046
1040
|
if (this.state.eventsEnabled) {
|
|
1047
|
-
|
|
1041
|
+
cancelAnimationFrame(this.scheduleUpdate);
|
|
1048
1042
|
this.state = removeEventListeners(this.reference, this.state);
|
|
1049
1043
|
}
|
|
1050
1044
|
}
|
|
@@ -1284,6 +1278,8 @@ function isModifierRequired(modifiers, requestingName, requestedName) {
|
|
|
1284
1278
|
* @returns {Object} The data object, properly modified
|
|
1285
1279
|
*/
|
|
1286
1280
|
function arrow(data, options) {
|
|
1281
|
+
var _data$offsets$arrow;
|
|
1282
|
+
|
|
1287
1283
|
// arrow depends on keepTogether in order to work
|
|
1288
1284
|
if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
|
|
1289
1285
|
return data;
|
|
@@ -1335,22 +1331,23 @@ function arrow(data, options) {
|
|
|
1335
1331
|
if (reference[side] + arrowElementSize > popper[opSide]) {
|
|
1336
1332
|
data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
|
|
1337
1333
|
}
|
|
1334
|
+
data.offsets.popper = getClientRect(data.offsets.popper);
|
|
1338
1335
|
|
|
1339
1336
|
// compute center of the popper
|
|
1340
1337
|
var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
|
|
1341
1338
|
|
|
1342
1339
|
// Compute the sideValue using the updated popper offsets
|
|
1343
1340
|
// take popper margin in account because we don't have this info available
|
|
1344
|
-
var
|
|
1345
|
-
var
|
|
1341
|
+
var css = getStyleComputedProperty(data.instance.popper);
|
|
1342
|
+
var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
|
|
1343
|
+
var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
|
|
1344
|
+
var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
|
|
1346
1345
|
|
|
1347
1346
|
// prevent arrowElement from being placed not contiguously to its popper
|
|
1348
1347
|
sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
|
|
1349
1348
|
|
|
1350
1349
|
data.arrowElement = arrowElement;
|
|
1351
|
-
data.offsets.arrow = {};
|
|
1352
|
-
data.offsets.arrow[side] = Math.round(sideValue);
|
|
1353
|
-
data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node
|
|
1350
|
+
data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
|
|
1354
1351
|
|
|
1355
1352
|
return data;
|
|
1356
1353
|
}
|
|
@@ -2322,8 +2319,8 @@ var Popper = function () {
|
|
|
2322
2319
|
};
|
|
2323
2320
|
|
|
2324
2321
|
// get reference and popper elements (allow jQuery wrappers)
|
|
2325
|
-
this.reference = reference.jquery ? reference[0] : reference;
|
|
2326
|
-
this.popper = popper.jquery ? popper[0] : popper;
|
|
2322
|
+
this.reference = reference && reference.jquery ? reference[0] : reference;
|
|
2323
|
+
this.popper = popper && popper.jquery ? popper[0] : popper;
|
|
2327
2324
|
|
|
2328
2325
|
// Deep merge modifiers options
|
|
2329
2326
|
this.options.modifiers = {};
|
data/lib/popper_js.rb
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require 'popper_js/version'
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
if defined?(::Rails)
|
|
6
|
+
require 'popper_js/engine'
|
|
7
|
+
else
|
|
8
|
+
gem_path = File.expand_path('..', File.dirname(__FILE__))
|
|
9
|
+
assets_path = File.join(gem_path, 'assets')
|
|
10
|
+
if defined?(::Sprockets)
|
|
11
|
+
Sprockets.append_path(File.join(assets_path, 'javascripts'))
|
|
12
|
+
elsif defined?(::Hanami)
|
|
13
|
+
Hanami::Assets.sources << assets_path
|
|
14
|
+
end
|
|
15
|
+
end
|
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.12.
|
|
4
|
+
version: 1.12.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gleb Mazovetskiy
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-12-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|