tippy_rails 1.2.1.3 → 2.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/tippy_rails/version.rb +1 -1
- data/vendor/assets/javascripts/tippy.js +1656 -1323
- data/vendor/assets/stylesheets/tippy.css +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: 93715d9f2d32b890e33be34facd767374ebf88d5
|
4
|
+
data.tar.gz: 15b5df259c839263f5d72c0ab01557d71a58294f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e84863962932d9805882ff7eb3e89373b68c0ac030ce64a37bf4826cee2054ffe9be51e22ba3ce933e9697511a620b6377134fba39df4b87519ef431dcc6215
|
7
|
+
data.tar.gz: 93201f662649044b424030f643f769555311a0b50f12cee274968d8cebd72006001be0846ce379feeb2f8f349f58a36480b19434f7924feca934addcb91f9714
|
data/Gemfile.lock
CHANGED
data/lib/tippy_rails/version.rb
CHANGED
@@ -1,57 +1,54 @@
|
|
1
|
+
/*!
|
2
|
+
* Tippy.js v2.5.2
|
3
|
+
* (c) 2017-2018 atomiks
|
4
|
+
* MIT
|
5
|
+
*/
|
1
6
|
(function (global, factory) {
|
2
7
|
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
3
8
|
typeof define === 'function' && define.amd ? define(factory) :
|
4
9
|
(global.tippy = factory());
|
5
10
|
}(this, (function () { 'use strict';
|
6
11
|
|
7
|
-
var
|
8
|
-
|
9
|
-
if (typeof window !== 'undefined') {
|
10
|
-
Browser.SUPPORTED = 'requestAnimationFrame' in window;
|
11
|
-
Browser.SUPPORTS_TOUCH = 'ontouchstart' in window;
|
12
|
-
Browser.touch = false;
|
13
|
-
Browser.dynamicInputDetection = true;
|
14
|
-
// Chrome device/touch emulation can make this dynamic
|
15
|
-
Browser.iOS = function () {
|
16
|
-
return (/iPhone|iPad|iPod/.test(navigator.userAgent) && !window.MSStream
|
17
|
-
);
|
18
|
-
};
|
19
|
-
}
|
12
|
+
var version = "2.5.2";
|
20
13
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
14
|
+
var isBrowser = typeof window !== 'undefined';
|
15
|
+
|
16
|
+
var isIE = isBrowser && /MSIE |Trident\//.test(navigator.userAgent);
|
17
|
+
|
18
|
+
var browser = {};
|
19
|
+
|
20
|
+
if (isBrowser) {
|
21
|
+
browser.supported = 'requestAnimationFrame' in window;
|
22
|
+
browser.supportsTouch = 'ontouchstart' in window;
|
23
|
+
browser.usingTouch = false;
|
24
|
+
browser.dynamicInputDetection = true;
|
25
|
+
browser.iOS = /iPhone|iPad|iPod/.test(navigator.platform) && !window.MSStream;
|
26
|
+
browser.onUserInputChange = function () {};
|
27
|
+
}
|
28
28
|
|
29
29
|
/**
|
30
|
-
* Selector constants used for grabbing elements
|
31
|
-
*/
|
32
|
-
var
|
30
|
+
* Selector constants used for grabbing elements
|
31
|
+
*/
|
32
|
+
var selectors = {
|
33
33
|
POPPER: '.tippy-popper',
|
34
34
|
TOOLTIP: '.tippy-tooltip',
|
35
|
-
CONTENT: '.tippy-
|
36
|
-
|
37
|
-
ARROW: '
|
38
|
-
|
39
|
-
|
35
|
+
CONTENT: '.tippy-content',
|
36
|
+
BACKDROP: '.tippy-backdrop',
|
37
|
+
ARROW: '.tippy-arrow',
|
38
|
+
ROUND_ARROW: '.tippy-roundarrow',
|
39
|
+
REFERENCE: '[data-tippy]'
|
40
40
|
};
|
41
41
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
var defaults = {
|
43
|
+
placement: 'top',
|
44
|
+
livePlacement: true,
|
45
|
+
trigger: 'mouseenter focus',
|
46
|
+
animation: 'shift-away',
|
46
47
|
html: false,
|
47
|
-
position: 'top',
|
48
|
-
animation: 'shift',
|
49
48
|
animateFill: true,
|
50
49
|
arrow: false,
|
51
|
-
arrowSize: 'regular',
|
52
50
|
delay: 0,
|
53
|
-
|
54
|
-
duration: 350,
|
51
|
+
duration: [350, 300],
|
55
52
|
interactive: false,
|
56
53
|
interactiveBorder: 2,
|
57
54
|
theme: 'dark',
|
@@ -62,455 +59,423 @@ var Defaults = {
|
|
62
59
|
multiple: false,
|
63
60
|
followCursor: false,
|
64
61
|
inertia: false,
|
65
|
-
|
62
|
+
updateDuration: 350,
|
66
63
|
sticky: false,
|
67
|
-
|
68
|
-
|
64
|
+
appendTo: function appendTo() {
|
65
|
+
return document.body;
|
66
|
+
},
|
69
67
|
zIndex: 9999,
|
70
68
|
touchHold: false,
|
71
69
|
performance: false,
|
72
70
|
dynamicTitle: false,
|
73
|
-
|
71
|
+
flip: true,
|
72
|
+
flipBehavior: 'flip',
|
73
|
+
arrowType: 'sharp',
|
74
|
+
arrowTransform: '',
|
75
|
+
maxWidth: '',
|
76
|
+
target: null,
|
77
|
+
allowTitleHTML: true,
|
78
|
+
popperOptions: {},
|
79
|
+
createPopperInstanceOnInit: false,
|
80
|
+
onShow: function onShow() {},
|
81
|
+
onShown: function onShown() {},
|
82
|
+
onHide: function onHide() {},
|
83
|
+
onHidden: function onHidden() {}
|
74
84
|
};
|
75
85
|
|
76
86
|
/**
|
77
|
-
* The keys of the defaults object for reducing down into a new object
|
78
|
-
* Used in `
|
79
|
-
*/
|
80
|
-
var
|
87
|
+
* The keys of the defaults object for reducing down into a new object
|
88
|
+
* Used in `getIndividualOptions()`
|
89
|
+
*/
|
90
|
+
var defaultsKeys = browser.supported && Object.keys(defaults);
|
81
91
|
|
82
92
|
/**
|
83
|
-
*
|
84
|
-
* @param {
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
_refData$settings = refData.settings,
|
91
|
-
appendTo = _refData$settings.appendTo,
|
92
|
-
hideOnClick = _refData$settings.hideOnClick,
|
93
|
-
trigger = _refData$settings.trigger;
|
93
|
+
* Determines if a value is an object literal
|
94
|
+
* @param {*} value
|
95
|
+
* @return {Boolean}
|
96
|
+
*/
|
97
|
+
function isObjectLiteral(value) {
|
98
|
+
return {}.toString.call(value) === '[object Object]';
|
99
|
+
}
|
94
100
|
|
95
|
-
|
101
|
+
/**
|
102
|
+
* Ponyfill for Array.from
|
103
|
+
* @param {*} value
|
104
|
+
* @return {Array}
|
105
|
+
*/
|
106
|
+
function toArray(value) {
|
107
|
+
return [].slice.call(value);
|
108
|
+
}
|
109
|
+
|
110
|
+
/**
|
111
|
+
* Returns an array of elements based on the selector input
|
112
|
+
* @param {String|Element|Element[]|NodeList|Object} selector
|
113
|
+
* @return {Element[]}
|
114
|
+
*/
|
115
|
+
function getArrayOfElements(selector) {
|
116
|
+
if (selector instanceof Element || isObjectLiteral(selector)) {
|
117
|
+
return [selector];
|
118
|
+
}
|
96
119
|
|
97
|
-
|
120
|
+
if (selector instanceof NodeList) {
|
121
|
+
return toArray(selector);
|
122
|
+
}
|
98
123
|
|
99
|
-
|
100
|
-
|
101
|
-
|
124
|
+
if (Array.isArray(selector)) {
|
125
|
+
return selector;
|
126
|
+
}
|
102
127
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
128
|
+
try {
|
129
|
+
return toArray(document.querySelectorAll(selector));
|
130
|
+
} catch (_) {
|
131
|
+
return [];
|
132
|
+
}
|
107
133
|
}
|
108
134
|
|
109
|
-
var e = Element.prototype;
|
110
|
-
var matches = e.matches || e.matchesSelector || e.webkitMatchesSelector || e.mozMatchesSelector || e.msMatchesSelector || function (s) {
|
111
|
-
var matches = (this.document || this.ownerDocument).querySelectorAll(s),
|
112
|
-
i = matches.length;
|
113
|
-
while (--i >= 0 && matches.item(i) !== this) {}
|
114
|
-
return i > -1;
|
115
|
-
};
|
116
|
-
|
117
135
|
/**
|
118
|
-
*
|
119
|
-
*
|
120
|
-
* @param {
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
136
|
+
* Polyfills needed props/methods for a virtual reference object
|
137
|
+
* NOTE: in v3.0 this will be pure
|
138
|
+
* @param {Object} reference
|
139
|
+
*/
|
140
|
+
function polyfillVirtualReferenceProps(reference) {
|
141
|
+
reference.refObj = true;
|
142
|
+
reference.attributes = reference.attributes || {};
|
143
|
+
reference.setAttribute = function (key, val) {
|
144
|
+
reference.attributes[key] = val;
|
145
|
+
};
|
146
|
+
reference.getAttribute = function (key) {
|
147
|
+
return reference.attributes[key];
|
148
|
+
};
|
149
|
+
reference.removeAttribute = function (key) {
|
150
|
+
delete reference.attributes[key];
|
151
|
+
};
|
152
|
+
reference.hasAttribute = function (key) {
|
153
|
+
return key in reference.attributes;
|
154
|
+
};
|
155
|
+
reference.addEventListener = function () {};
|
156
|
+
reference.removeEventListener = function () {};
|
157
|
+
reference.classList = {
|
158
|
+
classNames: {},
|
159
|
+
add: function add(key) {
|
160
|
+
return reference.classList.classNames[key] = true;
|
161
|
+
},
|
162
|
+
remove: function remove(key) {
|
163
|
+
delete reference.classList.classNames[key];
|
164
|
+
return true;
|
165
|
+
},
|
166
|
+
contains: function contains(key) {
|
167
|
+
return key in reference.classList.classNames;
|
131
168
|
}
|
132
169
|
};
|
133
|
-
|
134
|
-
return _closest.call(element, parentSelector);
|
135
170
|
}
|
136
171
|
|
137
172
|
/**
|
138
|
-
*
|
139
|
-
* @param {
|
140
|
-
* @
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
173
|
+
* Returns the supported prefixed property - only `webkit` is needed, `moz`, `ms` and `o` are obsolete
|
174
|
+
* @param {String} property
|
175
|
+
* @return {String} - browser supported prefixed property
|
176
|
+
*/
|
177
|
+
function prefix(property) {
|
178
|
+
var prefixes = ['', 'webkit'];
|
179
|
+
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
180
|
+
|
181
|
+
for (var i = 0; i < prefixes.length; i++) {
|
182
|
+
var _prefix = prefixes[i];
|
183
|
+
var prefixedProp = _prefix ? _prefix + upperProp : property;
|
184
|
+
if (typeof document.body.style[prefixedProp] !== 'undefined') {
|
185
|
+
return prefixedProp;
|
186
|
+
}
|
146
187
|
}
|
147
188
|
|
148
|
-
|
149
|
-
return arr.filter(checkFn)[0];
|
189
|
+
return null;
|
150
190
|
}
|
151
191
|
|
152
192
|
/**
|
153
|
-
*
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
193
|
+
* Creates a div element
|
194
|
+
* @return {Element}
|
195
|
+
*/
|
196
|
+
function div() {
|
197
|
+
return document.createElement('div');
|
198
|
+
}
|
158
199
|
|
159
|
-
|
160
|
-
|
161
|
-
|
200
|
+
/**
|
201
|
+
* Creates a popper element then returns it
|
202
|
+
* @param {Number} id - the popper id
|
203
|
+
* @param {String} title - the tooltip's `title` attribute
|
204
|
+
* @param {Object} options - individual options
|
205
|
+
* @return {Element} - the popper element
|
206
|
+
*/
|
207
|
+
function createPopperElement(id, title, options) {
|
208
|
+
var popper = div();
|
209
|
+
popper.setAttribute('class', 'tippy-popper');
|
210
|
+
popper.setAttribute('role', 'tooltip');
|
211
|
+
popper.setAttribute('id', 'tippy-' + id);
|
212
|
+
popper.style.zIndex = options.zIndex;
|
213
|
+
popper.style.maxWidth = options.maxWidth;
|
214
|
+
|
215
|
+
var tooltip = div();
|
216
|
+
tooltip.setAttribute('class', 'tippy-tooltip');
|
217
|
+
tooltip.setAttribute('data-size', options.size);
|
218
|
+
tooltip.setAttribute('data-animation', options.animation);
|
219
|
+
tooltip.setAttribute('data-state', 'hidden');
|
220
|
+
options.theme.split(' ').forEach(function (t) {
|
221
|
+
tooltip.classList.add(t + '-theme');
|
222
|
+
});
|
223
|
+
|
224
|
+
var content = div();
|
225
|
+
content.setAttribute('class', 'tippy-content');
|
226
|
+
|
227
|
+
if (options.arrow) {
|
228
|
+
var arrow = div();
|
229
|
+
arrow.style[prefix('transform')] = options.arrowTransform;
|
162
230
|
|
163
|
-
if (
|
164
|
-
|
231
|
+
if (options.arrowType === 'round') {
|
232
|
+
arrow.classList.add('tippy-roundarrow');
|
233
|
+
arrow.innerHTML = '<svg viewBox="0 0 24 8" xmlns="http://www.w3.org/2000/svg"><path d="M3 8s2.021-.015 5.253-4.218C9.584 2.051 10.797 1.007 12 1c1.203-.007 2.416 1.035 3.761 2.782C19.012 8.005 21 8 21 8H3z"/></svg>';
|
234
|
+
} else {
|
235
|
+
arrow.classList.add('tippy-arrow');
|
165
236
|
}
|
166
|
-
};
|
167
237
|
|
168
|
-
|
169
|
-
|
238
|
+
tooltip.appendChild(arrow);
|
239
|
+
}
|
170
240
|
|
171
|
-
|
172
|
-
|
241
|
+
if (options.animateFill) {
|
242
|
+
// Create animateFill circle element for animation
|
243
|
+
tooltip.setAttribute('data-animatefill', '');
|
244
|
+
var backdrop = div();
|
245
|
+
backdrop.classList.add('tippy-backdrop');
|
246
|
+
backdrop.setAttribute('data-state', 'hidden');
|
247
|
+
tooltip.appendChild(backdrop);
|
248
|
+
}
|
173
249
|
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
if (!Browser.iOS()) {
|
179
|
-
document.body.classList.remove('tippy-touch');
|
180
|
-
}
|
181
|
-
}
|
250
|
+
if (options.inertia) {
|
251
|
+
// Change transition timing function cubic bezier
|
252
|
+
tooltip.setAttribute('data-inertia', '');
|
253
|
+
}
|
182
254
|
|
183
|
-
|
184
|
-
|
185
|
-
}
|
255
|
+
if (options.interactive) {
|
256
|
+
tooltip.setAttribute('data-interactive', '');
|
257
|
+
}
|
186
258
|
|
187
|
-
var
|
188
|
-
|
189
|
-
|
190
|
-
return hideAllPoppers();
|
191
|
-
}
|
259
|
+
var html = options.html;
|
260
|
+
if (html) {
|
261
|
+
var templateId = void 0;
|
192
262
|
|
193
|
-
|
194
|
-
|
263
|
+
if (html instanceof Element) {
|
264
|
+
content.appendChild(html);
|
265
|
+
templateId = '#' + (html.id || 'tippy-html-template');
|
266
|
+
} else {
|
267
|
+
// trick linters: https://github.com/atomiks/tippyjs/issues/197
|
268
|
+
content[true && 'innerHTML'] = document.querySelector(html)[true && 'innerHTML'];
|
269
|
+
templateId = html;
|
270
|
+
}
|
195
271
|
|
196
|
-
|
197
|
-
|
198
|
-
return ref.popper === popper;
|
199
|
-
});
|
200
|
-
var interactive = ref.settings.interactive;
|
272
|
+
popper.setAttribute('data-html', '');
|
273
|
+
tooltip.setAttribute('data-template-id', templateId);
|
201
274
|
|
202
|
-
|
275
|
+
if (options.interactive) {
|
276
|
+
popper.setAttribute('tabindex', '-1');
|
203
277
|
}
|
278
|
+
} else {
|
279
|
+
content[options.allowTitleHTML ? 'innerHTML' : 'textContent'] = title;
|
280
|
+
}
|
204
281
|
|
205
|
-
|
206
|
-
|
207
|
-
return ref.el === el;
|
208
|
-
});
|
209
|
-
var _ref$settings = _ref.settings,
|
210
|
-
hideOnClick = _ref$settings.hideOnClick,
|
211
|
-
multiple = _ref$settings.multiple,
|
212
|
-
trigger = _ref$settings.trigger;
|
282
|
+
tooltip.appendChild(content);
|
283
|
+
popper.appendChild(tooltip);
|
213
284
|
|
214
|
-
|
215
|
-
|
216
|
-
// `multiple` is false AND it's triggered by a click
|
285
|
+
return popper;
|
286
|
+
}
|
217
287
|
|
218
|
-
|
219
|
-
|
220
|
-
|
288
|
+
/**
|
289
|
+
* Creates a trigger by adding the necessary event listeners to the reference element
|
290
|
+
* @param {String} eventType - the custom event specified in the `trigger` setting
|
291
|
+
* @param {Element} reference
|
292
|
+
* @param {Object} handlers - the handlers for each event
|
293
|
+
* @param {Object} options
|
294
|
+
* @return {Array} - array of listener objects
|
295
|
+
*/
|
296
|
+
function createTrigger(eventType, reference, handlers, options) {
|
297
|
+
var onTrigger = handlers.onTrigger,
|
298
|
+
onMouseLeave = handlers.onMouseLeave,
|
299
|
+
onBlur = handlers.onBlur,
|
300
|
+
onDelegateShow = handlers.onDelegateShow,
|
301
|
+
onDelegateHide = handlers.onDelegateHide;
|
221
302
|
|
222
|
-
|
223
|
-
if (hideOnClick !== true || trigger.indexOf('click') !== -1) return;
|
224
|
-
}
|
303
|
+
var listeners = [];
|
225
304
|
|
226
|
-
|
227
|
-
if (closest(event.target, Selectors.CONTROLLER) || !document.querySelector(Selectors.POPPER)) return;
|
305
|
+
if (eventType === 'manual') return listeners;
|
228
306
|
|
229
|
-
|
307
|
+
var on = function on(eventType, handler) {
|
308
|
+
reference.addEventListener(eventType, handler);
|
309
|
+
listeners.push({ event: eventType, handler: handler });
|
230
310
|
};
|
231
311
|
|
232
|
-
|
233
|
-
|
234
|
-
el = _document.activeElement;
|
312
|
+
if (!options.target) {
|
313
|
+
on(eventType, onTrigger);
|
235
314
|
|
236
|
-
if (
|
237
|
-
|
315
|
+
if (browser.supportsTouch && options.touchHold) {
|
316
|
+
on('touchstart', onTrigger);
|
317
|
+
on('touchend', onMouseLeave);
|
238
318
|
}
|
239
|
-
|
319
|
+
if (eventType === 'mouseenter') {
|
320
|
+
on('mouseleave', onMouseLeave);
|
321
|
+
}
|
322
|
+
if (eventType === 'focus') {
|
323
|
+
on(isIE ? 'focusout' : 'blur', onBlur);
|
324
|
+
}
|
325
|
+
} else {
|
326
|
+
if (browser.supportsTouch && options.touchHold) {
|
327
|
+
on('touchstart', onDelegateShow);
|
328
|
+
on('touchend', onDelegateHide);
|
329
|
+
}
|
330
|
+
if (eventType === 'mouseenter') {
|
331
|
+
on('mouseover', onDelegateShow);
|
332
|
+
on('mouseout', onDelegateHide);
|
333
|
+
}
|
334
|
+
if (eventType === 'focus') {
|
335
|
+
on('focusin', onDelegateShow);
|
336
|
+
on('focusout', onDelegateHide);
|
337
|
+
}
|
338
|
+
if (eventType === 'click') {
|
339
|
+
on('click', onDelegateShow);
|
340
|
+
}
|
341
|
+
}
|
240
342
|
|
241
|
-
|
242
|
-
|
243
|
-
document.addEventListener('touchstart', touchHandler);
|
244
|
-
window.addEventListener('blur', blurHandler);
|
343
|
+
return listeners;
|
344
|
+
}
|
245
345
|
|
246
|
-
|
247
|
-
|
346
|
+
var classCallCheck = function (instance, Constructor) {
|
347
|
+
if (!(instance instanceof Constructor)) {
|
348
|
+
throw new TypeError("Cannot call a class as a function");
|
248
349
|
}
|
249
|
-
}
|
350
|
+
};
|
250
351
|
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
352
|
+
var createClass = function () {
|
353
|
+
function defineProperties(target, props) {
|
354
|
+
for (var i = 0; i < props.length; i++) {
|
355
|
+
var descriptor = props[i];
|
356
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
357
|
+
descriptor.configurable = true;
|
358
|
+
if ("value" in descriptor) descriptor.writable = true;
|
359
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
360
|
+
}
|
361
|
+
}
|
258
362
|
|
259
|
-
|
260
|
-
|
261
|
-
|
363
|
+
return function (Constructor, protoProps, staticProps) {
|
364
|
+
if (protoProps) defineProperties(Constructor.prototype, protoProps);
|
365
|
+
if (staticProps) defineProperties(Constructor, staticProps);
|
366
|
+
return Constructor;
|
367
|
+
};
|
368
|
+
}();
|
262
369
|
|
263
|
-
bindEventListeners();
|
264
370
|
|
265
|
-
return true;
|
266
|
-
}
|
267
371
|
|
268
|
-
/**
|
269
|
-
* Waits until next repaint to execute a fn
|
270
|
-
* @return {Function}
|
271
|
-
*/
|
272
|
-
function queueExecution(fn) {
|
273
|
-
window.requestAnimationFrame(function () {
|
274
|
-
setTimeout(fn, 0);
|
275
|
-
});
|
276
|
-
}
|
277
372
|
|
278
|
-
/**
|
279
|
-
* Returns the supported prefixed property - only `webkit` is needed, `moz`, `ms` and `o` are obsolete
|
280
|
-
* @param {String} property
|
281
|
-
* @return {String} - browser supported prefixed property
|
282
|
-
*/
|
283
|
-
function prefix(property) {
|
284
|
-
var prefixes = [false, 'webkit'];
|
285
|
-
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
286
373
|
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
374
|
+
|
375
|
+
|
376
|
+
var _extends = Object.assign || function (target) {
|
377
|
+
for (var i = 1; i < arguments.length; i++) {
|
378
|
+
var source = arguments[i];
|
379
|
+
|
380
|
+
for (var key in source) {
|
381
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
382
|
+
target[key] = source[key];
|
383
|
+
}
|
292
384
|
}
|
293
385
|
}
|
294
386
|
|
295
|
-
return
|
296
|
-
}
|
387
|
+
return target;
|
388
|
+
};
|
297
389
|
|
298
390
|
/**
|
299
|
-
*
|
300
|
-
* @param {
|
301
|
-
* @param {
|
302
|
-
* @return
|
303
|
-
*/
|
304
|
-
function
|
305
|
-
|
306
|
-
|
307
|
-
}
|
391
|
+
* Returns an object of settings to override global settings
|
392
|
+
* @param {Element} reference
|
393
|
+
* @param {Object} instanceOptions
|
394
|
+
* @return {Object} - individual options
|
395
|
+
*/
|
396
|
+
function getIndividualOptions(reference, instanceOptions) {
|
397
|
+
var options = defaultsKeys.reduce(function (acc, key) {
|
398
|
+
var val = reference.getAttribute('data-tippy-' + key.toLowerCase()) || instanceOptions[key];
|
308
399
|
|
309
|
-
|
310
|
-
|
311
|
-
|
400
|
+
// Convert strings to booleans
|
401
|
+
if (val === 'false') val = false;
|
402
|
+
if (val === 'true') val = true;
|
312
403
|
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
function removeTitle(el) {
|
318
|
-
var title = el.getAttribute('title');
|
319
|
-
el.setAttribute('data-original-title', title || 'html');
|
320
|
-
el.removeAttribute('title');
|
321
|
-
}
|
404
|
+
// Convert number strings to true numbers
|
405
|
+
if (isFinite(val) && !isNaN(parseFloat(val))) {
|
406
|
+
val = parseFloat(val);
|
407
|
+
}
|
322
408
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
*/
|
328
|
-
function elementIsInViewport(el) {
|
329
|
-
var rect = el.getBoundingClientRect();
|
409
|
+
// Convert array strings to actual arrays
|
410
|
+
if (key !== 'target' && typeof val === 'string' && val.trim().charAt(0) === '[') {
|
411
|
+
val = JSON.parse(val);
|
412
|
+
}
|
330
413
|
|
331
|
-
|
332
|
-
}
|
414
|
+
acc[key] = val;
|
333
415
|
|
334
|
-
|
335
|
-
|
336
|
-
* @param {Element} tooltip
|
337
|
-
* @param {Element} circle
|
338
|
-
*/
|
339
|
-
function triggerReflow(tooltip, circle) {
|
340
|
-
// Safari needs the specific 'transform' property to be accessed
|
341
|
-
circle ? window.getComputedStyle(circle)[prefix('transform')] : window.getComputedStyle(tooltip).opacity;
|
342
|
-
}
|
416
|
+
return acc;
|
417
|
+
}, {});
|
343
418
|
|
344
|
-
|
345
|
-
* Modifies elements' class lists
|
346
|
-
* @param {Element[]} els - Array of elements
|
347
|
-
* @param {Function} callback
|
348
|
-
*/
|
349
|
-
function modifyClassList(els, callback) {
|
350
|
-
els.forEach(function (el) {
|
351
|
-
if (!el) return;
|
352
|
-
callback(el.classList);
|
353
|
-
});
|
419
|
+
return _extends({}, instanceOptions, options);
|
354
420
|
}
|
355
421
|
|
356
422
|
/**
|
357
|
-
*
|
358
|
-
* @param {Element
|
359
|
-
* @param {
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
423
|
+
* Evaluates/modifies the options object for appropriate behavior
|
424
|
+
* @param {Element|Object} reference
|
425
|
+
* @param {Object} options
|
426
|
+
* @return {Object} modified/evaluated options
|
427
|
+
*/
|
428
|
+
function evaluateOptions(reference, options) {
|
429
|
+
// animateFill is disabled if an arrow is true
|
430
|
+
if (options.arrow) {
|
431
|
+
options.animateFill = false;
|
432
|
+
}
|
364
433
|
|
365
|
-
|
434
|
+
if (options.appendTo && typeof options.appendTo === 'function') {
|
435
|
+
options.appendTo = options.appendTo();
|
436
|
+
}
|
366
437
|
|
367
|
-
|
438
|
+
if (typeof options.html === 'function') {
|
439
|
+
options.html = options.html(reference);
|
440
|
+
}
|
368
441
|
|
369
|
-
|
370
|
-
});
|
442
|
+
return options;
|
371
443
|
}
|
372
444
|
|
373
445
|
/**
|
374
|
-
*
|
375
|
-
* @param {Element} popper
|
376
|
-
* @return {
|
377
|
-
*/
|
378
|
-
function
|
379
|
-
|
446
|
+
* Returns inner elements of the popper element
|
447
|
+
* @param {Element} popper
|
448
|
+
* @return {Object}
|
449
|
+
*/
|
450
|
+
function getInnerElements(popper) {
|
451
|
+
var select = function select(s) {
|
452
|
+
return popper.querySelector(s);
|
453
|
+
};
|
454
|
+
return {
|
455
|
+
tooltip: select(selectors.TOOLTIP),
|
456
|
+
backdrop: select(selectors.BACKDROP),
|
457
|
+
content: select(selectors.CONTENT),
|
458
|
+
arrow: select(selectors.ARROW) || select(selectors.ROUND_ARROW)
|
459
|
+
};
|
380
460
|
}
|
381
461
|
|
382
|
-
function noop() {}
|
383
|
-
|
384
462
|
/**
|
385
|
-
*
|
386
|
-
*
|
387
|
-
* @
|
388
|
-
*/
|
389
|
-
function
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
*/
|
397
|
-
function followCursorHandler(e) {
|
398
|
-
var _this = this;
|
399
|
-
|
400
|
-
var refData = find(Store, function (refData) {
|
401
|
-
return refData.el === _this;
|
402
|
-
});
|
403
|
-
|
404
|
-
var popper = refData.popper,
|
405
|
-
offset = refData.settings.offset;
|
406
|
-
|
407
|
-
|
408
|
-
var position = getCorePlacement(popper.getAttribute('x-placement'));
|
409
|
-
var halfPopperWidth = Math.round(popper.offsetWidth / 2);
|
410
|
-
var halfPopperHeight = Math.round(popper.offsetHeight / 2);
|
411
|
-
var viewportPadding = 5;
|
412
|
-
var pageWidth = document.documentElement.offsetWidth || document.body.offsetWidth;
|
413
|
-
|
414
|
-
var pageX = e.pageX,
|
415
|
-
pageY = e.pageY;
|
416
|
-
|
417
|
-
|
418
|
-
var x = void 0,
|
419
|
-
y = void 0;
|
420
|
-
|
421
|
-
switch (position) {
|
422
|
-
case 'top':
|
423
|
-
x = pageX - halfPopperWidth + offset;
|
424
|
-
y = pageY - 2.25 * halfPopperHeight;
|
425
|
-
break;
|
426
|
-
case 'left':
|
427
|
-
x = pageX - 2 * halfPopperWidth - 10;
|
428
|
-
y = pageY - halfPopperHeight + offset;
|
429
|
-
break;
|
430
|
-
case 'right':
|
431
|
-
x = pageX + halfPopperHeight;
|
432
|
-
y = pageY - halfPopperHeight + offset;
|
433
|
-
break;
|
434
|
-
case 'bottom':
|
435
|
-
x = pageX - halfPopperWidth + offset;
|
436
|
-
y = pageY + halfPopperHeight / 1.5;
|
437
|
-
break;
|
438
|
-
}
|
439
|
-
|
440
|
-
var isRightOverflowing = pageX + viewportPadding + halfPopperWidth + offset > pageWidth;
|
441
|
-
var isLeftOverflowing = pageX - viewportPadding - halfPopperWidth + offset < 0;
|
442
|
-
|
443
|
-
// Prevent left/right overflow
|
444
|
-
if (position === 'top' || position === 'bottom') {
|
445
|
-
if (isRightOverflowing) {
|
446
|
-
x = pageWidth - viewportPadding - 2 * halfPopperWidth;
|
447
|
-
}
|
448
|
-
|
449
|
-
if (isLeftOverflowing) {
|
450
|
-
x = viewportPadding;
|
451
|
-
}
|
452
|
-
}
|
453
|
-
|
454
|
-
popper.style[prefix('transform')] = 'translate3d(' + x + 'px, ' + y + 'px, 0)';
|
455
|
-
}
|
456
|
-
|
457
|
-
/**
|
458
|
-
* Returns an array of elements based on the selector input
|
459
|
-
* @param {String|Element|Element[]} selector
|
460
|
-
* @return {Element[]}
|
461
|
-
*/
|
462
|
-
function getArrayOfElements(selector) {
|
463
|
-
if (selector instanceof Element) {
|
464
|
-
return [selector];
|
465
|
-
}
|
466
|
-
|
467
|
-
if (Array.isArray(selector)) {
|
468
|
-
return selector;
|
469
|
-
}
|
470
|
-
|
471
|
-
return [].slice.call(document.querySelectorAll(selector));
|
472
|
-
}
|
473
|
-
|
474
|
-
/**
|
475
|
-
* Prepares the callback functions for `show` and `hide` methods
|
476
|
-
* @param {Object} refData - the element/popper reference data
|
477
|
-
* @param {Number} duration
|
478
|
-
* @param {Function} callback - callback function to fire once transitions complete
|
479
|
-
*/
|
480
|
-
function onTransitionEnd(refData, duration, callback) {
|
481
|
-
// Make callback synchronous if duration is 0
|
482
|
-
if (!duration) {
|
483
|
-
return callback();
|
484
|
-
}
|
485
|
-
|
486
|
-
var tooltip = refData.popper.querySelector(Selectors.TOOLTIP);
|
487
|
-
var transitionendFired = false;
|
488
|
-
|
489
|
-
var listenerCallback = function listenerCallback(e) {
|
490
|
-
if (e.target !== tooltip) return;
|
491
|
-
|
492
|
-
transitionendFired = true;
|
493
|
-
|
494
|
-
tooltip.removeEventListener('webkitTransitionEnd', listenerCallback);
|
495
|
-
tooltip.removeEventListener('transitionend', listenerCallback);
|
496
|
-
|
497
|
-
callback();
|
498
|
-
};
|
499
|
-
|
500
|
-
// Wait for transitions to complete
|
501
|
-
tooltip.addEventListener('webkitTransitionEnd', listenerCallback);
|
502
|
-
tooltip.addEventListener('transitionend', listenerCallback);
|
503
|
-
|
504
|
-
// transitionend listener sometimes may not fire
|
505
|
-
clearTimeout(refData._transitionendTimeout);
|
506
|
-
refData._transitionendTimeout = setTimeout(function () {
|
507
|
-
!transitionendFired && callback();
|
508
|
-
}, duration);
|
463
|
+
* Removes the title from an element, setting `data-original-title`
|
464
|
+
* appropriately
|
465
|
+
* @param {Element} el
|
466
|
+
*/
|
467
|
+
function removeTitle(el) {
|
468
|
+
var title = el.getAttribute('title');
|
469
|
+
// Only set `data-original-title` attr if there is a title
|
470
|
+
if (title) {
|
471
|
+
el.setAttribute('data-original-title', title);
|
472
|
+
}
|
473
|
+
el.removeAttribute('title');
|
509
474
|
}
|
510
475
|
|
511
476
|
/**!
|
512
477
|
* @fileOverview Kickass library to create and place poppers near their reference elements.
|
513
|
-
* @version 1.
|
478
|
+
* @version 1.14.3
|
514
479
|
* @license
|
515
480
|
* Copyright (c) 2016 Federico Zivolo and contributors
|
516
481
|
*
|
@@ -532,52 +497,28 @@ function onTransitionEnd(refData, duration, callback) {
|
|
532
497
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
533
498
|
* SOFTWARE.
|
534
499
|
*/
|
535
|
-
var
|
500
|
+
var isBrowser$1 = typeof window !== 'undefined' && typeof document !== 'undefined';
|
536
501
|
|
537
|
-
/**
|
538
|
-
* Determine if a function is implemented natively (as opposed to a polyfill).
|
539
|
-
* @method
|
540
|
-
* @memberof Popper.Utils
|
541
|
-
* @argument {Function | undefined} fn the function to check
|
542
|
-
* @returns {Boolean}
|
543
|
-
*/
|
544
|
-
var isNative = function isNative(fn) {
|
545
|
-
return nativeHints.some(function (hint) {
|
546
|
-
return (fn || '').toString().indexOf(hint) > -1;
|
547
|
-
});
|
548
|
-
};
|
549
|
-
|
550
|
-
var isBrowser = typeof window !== 'undefined';
|
551
502
|
var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];
|
552
503
|
var timeoutDuration = 0;
|
553
504
|
for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {
|
554
|
-
if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
|
505
|
+
if (isBrowser$1 && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {
|
555
506
|
timeoutDuration = 1;
|
556
507
|
break;
|
557
508
|
}
|
558
509
|
}
|
559
510
|
|
560
511
|
function microtaskDebounce(fn) {
|
561
|
-
var
|
562
|
-
var i = 0;
|
563
|
-
var elem = document.createElement('span');
|
564
|
-
|
565
|
-
// MutationObserver provides a mechanism for scheduling microtasks, which
|
566
|
-
// are scheduled *before* the next task. This gives us a way to debounce
|
567
|
-
// a function but ensure it's called *before* the next paint.
|
568
|
-
var observer = new MutationObserver(function () {
|
569
|
-
fn();
|
570
|
-
scheduled = false;
|
571
|
-
});
|
572
|
-
|
573
|
-
observer.observe(elem, { attributes: true });
|
574
|
-
|
512
|
+
var called = false;
|
575
513
|
return function () {
|
576
|
-
if (
|
577
|
-
|
578
|
-
elem.setAttribute('x-index', i);
|
579
|
-
i = i + 1; // don't use compund (+=) because it doesn't get optimized in V8
|
514
|
+
if (called) {
|
515
|
+
return;
|
580
516
|
}
|
517
|
+
called = true;
|
518
|
+
window.Promise.resolve().then(function () {
|
519
|
+
called = false;
|
520
|
+
fn();
|
521
|
+
});
|
581
522
|
};
|
582
523
|
}
|
583
524
|
|
@@ -594,11 +535,7 @@ function taskDebounce(fn) {
|
|
594
535
|
};
|
595
536
|
}
|
596
537
|
|
597
|
-
|
598
|
-
// these rely on Mutation Events which only occur when an element is connected
|
599
|
-
// to the DOM. The algorithm used in this module does not use a connected element,
|
600
|
-
// and so we must ensure that a *native* MutationObserver is available.
|
601
|
-
var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserver);
|
538
|
+
var supportsMicroTasks = isBrowser$1 && window.Promise;
|
602
539
|
|
603
540
|
/**
|
604
541
|
* Create a debounced version of a method, that's asynchronously deferred
|
@@ -609,7 +546,7 @@ var supportsNativeMutationObserver = isBrowser && isNative(window.MutationObserv
|
|
609
546
|
* @argument {Function} fn
|
610
547
|
* @returns {Function}
|
611
548
|
*/
|
612
|
-
var debounce =
|
549
|
+
var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;
|
613
550
|
|
614
551
|
/**
|
615
552
|
* Check if the given variable is a function
|
@@ -635,7 +572,7 @@ function getStyleComputedProperty(element, property) {
|
|
635
572
|
return [];
|
636
573
|
}
|
637
574
|
// NOTE: 1 DOM access here
|
638
|
-
var css =
|
575
|
+
var css = getComputedStyle(element, null);
|
639
576
|
return property ? css[property] : css;
|
640
577
|
}
|
641
578
|
|
@@ -662,8 +599,16 @@ function getParentNode(element) {
|
|
662
599
|
*/
|
663
600
|
function getScrollParent(element) {
|
664
601
|
// Return body, `getScroll` will take care to get the correct `scrollTop` from it
|
665
|
-
if (!element
|
666
|
-
return
|
602
|
+
if (!element) {
|
603
|
+
return document.body;
|
604
|
+
}
|
605
|
+
|
606
|
+
switch (element.nodeName) {
|
607
|
+
case 'HTML':
|
608
|
+
case 'BODY':
|
609
|
+
return element.ownerDocument.body;
|
610
|
+
case '#document':
|
611
|
+
return element.body;
|
667
612
|
}
|
668
613
|
|
669
614
|
// Firefox want us to check `-x` and `-y` variations as well
|
@@ -673,13 +618,33 @@ function getScrollParent(element) {
|
|
673
618
|
overflowX = _getStyleComputedProp.overflowX,
|
674
619
|
overflowY = _getStyleComputedProp.overflowY;
|
675
620
|
|
676
|
-
if (/(auto|scroll)/.test(overflow + overflowY + overflowX)) {
|
621
|
+
if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {
|
677
622
|
return element;
|
678
623
|
}
|
679
624
|
|
680
625
|
return getScrollParent(getParentNode(element));
|
681
626
|
}
|
682
627
|
|
628
|
+
var isIE11 = isBrowser$1 && !!(window.MSInputMethodContext && document.documentMode);
|
629
|
+
var isIE10 = isBrowser$1 && /MSIE 10/.test(navigator.userAgent);
|
630
|
+
|
631
|
+
/**
|
632
|
+
* Determines if the browser is Internet Explorer
|
633
|
+
* @method
|
634
|
+
* @memberof Popper.Utils
|
635
|
+
* @param {Number} version to check
|
636
|
+
* @returns {Boolean} isIE
|
637
|
+
*/
|
638
|
+
function isIE$1(version) {
|
639
|
+
if (version === 11) {
|
640
|
+
return isIE11;
|
641
|
+
}
|
642
|
+
if (version === 10) {
|
643
|
+
return isIE10;
|
644
|
+
}
|
645
|
+
return isIE11 || isIE10;
|
646
|
+
}
|
647
|
+
|
683
648
|
/**
|
684
649
|
* Returns the offset parent of the given element
|
685
650
|
* @method
|
@@ -688,12 +653,23 @@ function getScrollParent(element) {
|
|
688
653
|
* @returns {Element} offset parent
|
689
654
|
*/
|
690
655
|
function getOffsetParent(element) {
|
656
|
+
if (!element) {
|
657
|
+
return document.documentElement;
|
658
|
+
}
|
659
|
+
|
660
|
+
var noOffsetParent = isIE$1(10) ? document.body : null;
|
661
|
+
|
691
662
|
// NOTE: 1 DOM access here
|
692
|
-
var offsetParent = element
|
663
|
+
var offsetParent = element.offsetParent;
|
664
|
+
// Skip hidden elements which don't have an offsetParent
|
665
|
+
while (offsetParent === noOffsetParent && element.nextElementSibling) {
|
666
|
+
offsetParent = (element = element.nextElementSibling).offsetParent;
|
667
|
+
}
|
668
|
+
|
693
669
|
var nodeName = offsetParent && offsetParent.nodeName;
|
694
670
|
|
695
671
|
if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {
|
696
|
-
return
|
672
|
+
return element ? element.ownerDocument.documentElement : document.documentElement;
|
697
673
|
}
|
698
674
|
|
699
675
|
// .offsetParent will return the closest TD or TABLE in case
|
@@ -740,7 +716,7 @@ function getRoot(node) {
|
|
740
716
|
function findCommonOffsetParent(element1, element2) {
|
741
717
|
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
742
718
|
if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {
|
743
|
-
return
|
719
|
+
return document.documentElement;
|
744
720
|
}
|
745
721
|
|
746
722
|
// Here we make sure to give as "start" the element that comes first in the DOM
|
@@ -788,8 +764,8 @@ function getScroll(element) {
|
|
788
764
|
var nodeName = element.nodeName;
|
789
765
|
|
790
766
|
if (nodeName === 'BODY' || nodeName === 'HTML') {
|
791
|
-
var html =
|
792
|
-
var scrollingElement =
|
767
|
+
var html = element.ownerDocument.documentElement;
|
768
|
+
var scrollingElement = element.ownerDocument.scrollingElement || html;
|
793
769
|
return scrollingElement[upperSide];
|
794
770
|
}
|
795
771
|
|
@@ -832,32 +808,17 @@ function getBordersSize(styles, axis) {
|
|
832
808
|
var sideA = axis === 'x' ? 'Left' : 'Top';
|
833
809
|
var sideB = sideA === 'Left' ? 'Right' : 'Bottom';
|
834
810
|
|
835
|
-
return
|
811
|
+
return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);
|
836
812
|
}
|
837
813
|
|
838
|
-
/**
|
839
|
-
* Tells if you are running Internet Explorer 10
|
840
|
-
* @method
|
841
|
-
* @memberof Popper.Utils
|
842
|
-
* @returns {Boolean} isIE10
|
843
|
-
*/
|
844
|
-
var isIE10 = undefined;
|
845
|
-
|
846
|
-
var isIE10$1 = function isIE10$1() {
|
847
|
-
if (isIE10 === undefined) {
|
848
|
-
isIE10 = navigator.appVersion.indexOf('MSIE 10') !== -1;
|
849
|
-
}
|
850
|
-
return isIE10;
|
851
|
-
};
|
852
|
-
|
853
814
|
function getSize(axis, body, html, computedStyle) {
|
854
|
-
return Math.max(body['offset' + axis], html['client' + axis], html['offset' + axis],
|
815
|
+
return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE$1(10) ? html['offset' + axis] + computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')] + computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')] : 0);
|
855
816
|
}
|
856
817
|
|
857
818
|
function getWindowSizes() {
|
858
|
-
var body =
|
859
|
-
var html =
|
860
|
-
var computedStyle =
|
819
|
+
var body = document.body;
|
820
|
+
var html = document.documentElement;
|
821
|
+
var computedStyle = isIE$1(10) && getComputedStyle(html);
|
861
822
|
|
862
823
|
return {
|
863
824
|
height: getSize('Height', body, html, computedStyle),
|
@@ -865,13 +826,13 @@ function getWindowSizes() {
|
|
865
826
|
};
|
866
827
|
}
|
867
828
|
|
868
|
-
var classCallCheck = function classCallCheck(instance, Constructor) {
|
829
|
+
var classCallCheck$1 = function classCallCheck(instance, Constructor) {
|
869
830
|
if (!(instance instanceof Constructor)) {
|
870
831
|
throw new TypeError("Cannot call a class as a function");
|
871
832
|
}
|
872
833
|
};
|
873
834
|
|
874
|
-
var createClass = function () {
|
835
|
+
var createClass$1 = function () {
|
875
836
|
function defineProperties(target, props) {
|
876
837
|
for (var i = 0; i < props.length; i++) {
|
877
838
|
var descriptor = props[i];
|
@@ -889,7 +850,7 @@ var createClass = function () {
|
|
889
850
|
};
|
890
851
|
}();
|
891
852
|
|
892
|
-
var defineProperty = function defineProperty(obj, key, value) {
|
853
|
+
var defineProperty$1 = function defineProperty(obj, key, value) {
|
893
854
|
if (key in obj) {
|
894
855
|
Object.defineProperty(obj, key, {
|
895
856
|
value: value,
|
@@ -904,7 +865,7 @@ var defineProperty = function defineProperty(obj, key, value) {
|
|
904
865
|
return obj;
|
905
866
|
};
|
906
867
|
|
907
|
-
var _extends = Object.assign || function (target) {
|
868
|
+
var _extends$1 = Object.assign || function (target) {
|
908
869
|
for (var i = 1; i < arguments.length; i++) {
|
909
870
|
var source = arguments[i];
|
910
871
|
|
@@ -926,7 +887,7 @@ var _extends = Object.assign || function (target) {
|
|
926
887
|
* @returns {Object} ClientRect like output
|
927
888
|
*/
|
928
889
|
function getClientRect(offsets) {
|
929
|
-
return _extends({}, offsets, {
|
890
|
+
return _extends$1({}, offsets, {
|
930
891
|
right: offsets.left + offsets.width,
|
931
892
|
bottom: offsets.top + offsets.height
|
932
893
|
});
|
@@ -945,8 +906,8 @@ function getBoundingClientRect(element) {
|
|
945
906
|
// IE10 10 FIX: Please, don't ask, the element isn't
|
946
907
|
// considered in DOM in some circumstances...
|
947
908
|
// This isn't reproducible in IE10 compatibility mode of IE11
|
948
|
-
|
949
|
-
|
909
|
+
try {
|
910
|
+
if (isIE$1(10)) {
|
950
911
|
rect = element.getBoundingClientRect();
|
951
912
|
var scrollTop = getScroll(element, 'top');
|
952
913
|
var scrollLeft = getScroll(element, 'left');
|
@@ -954,10 +915,10 @@ function getBoundingClientRect(element) {
|
|
954
915
|
rect.left += scrollLeft;
|
955
916
|
rect.bottom += scrollTop;
|
956
917
|
rect.right += scrollLeft;
|
957
|
-
}
|
958
|
-
|
959
|
-
|
960
|
-
}
|
918
|
+
} else {
|
919
|
+
rect = element.getBoundingClientRect();
|
920
|
+
}
|
921
|
+
} catch (e) {}
|
961
922
|
|
962
923
|
var result = {
|
963
924
|
left: rect.left,
|
@@ -989,16 +950,23 @@ function getBoundingClientRect(element) {
|
|
989
950
|
}
|
990
951
|
|
991
952
|
function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
992
|
-
var
|
953
|
+
var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
954
|
+
|
955
|
+
var isIE10 = isIE$1(10);
|
993
956
|
var isHTML = parent.nodeName === 'HTML';
|
994
957
|
var childrenRect = getBoundingClientRect(children);
|
995
958
|
var parentRect = getBoundingClientRect(parent);
|
996
959
|
var scrollParent = getScrollParent(children);
|
997
960
|
|
998
961
|
var styles = getStyleComputedProperty(parent);
|
999
|
-
var borderTopWidth =
|
1000
|
-
var borderLeftWidth =
|
962
|
+
var borderTopWidth = parseFloat(styles.borderTopWidth, 10);
|
963
|
+
var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10);
|
1001
964
|
|
965
|
+
// In cases where the parent is fixed, we must ignore negative scroll in offset calc
|
966
|
+
if (fixedPosition && parent.nodeName === 'HTML') {
|
967
|
+
parentRect.top = Math.max(parentRect.top, 0);
|
968
|
+
parentRect.left = Math.max(parentRect.left, 0);
|
969
|
+
}
|
1002
970
|
var offsets = getClientRect({
|
1003
971
|
top: childrenRect.top - parentRect.top - borderTopWidth,
|
1004
972
|
left: childrenRect.left - parentRect.left - borderLeftWidth,
|
@@ -1013,8 +981,8 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
1013
981
|
// differently when margins are applied to it. The margins are included in
|
1014
982
|
// the box of the documentElement, in the other cases not.
|
1015
983
|
if (!isIE10 && isHTML) {
|
1016
|
-
var marginTop =
|
1017
|
-
var marginLeft =
|
984
|
+
var marginTop = parseFloat(styles.marginTop, 10);
|
985
|
+
var marginLeft = parseFloat(styles.marginLeft, 10);
|
1018
986
|
|
1019
987
|
offsets.top -= borderTopWidth - marginTop;
|
1020
988
|
offsets.bottom -= borderTopWidth - marginTop;
|
@@ -1026,7 +994,7 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
1026
994
|
offsets.marginLeft = marginLeft;
|
1027
995
|
}
|
1028
996
|
|
1029
|
-
if (isIE10 ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
997
|
+
if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {
|
1030
998
|
offsets = includeScroll(offsets, parent);
|
1031
999
|
}
|
1032
1000
|
|
@@ -1034,13 +1002,15 @@ function getOffsetRectRelativeToArbitraryNode(children, parent) {
|
|
1034
1002
|
}
|
1035
1003
|
|
1036
1004
|
function getViewportOffsetRectRelativeToArtbitraryNode(element) {
|
1037
|
-
var
|
1005
|
+
var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
1006
|
+
|
1007
|
+
var html = element.ownerDocument.documentElement;
|
1038
1008
|
var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);
|
1039
1009
|
var width = Math.max(html.clientWidth, window.innerWidth || 0);
|
1040
1010
|
var height = Math.max(html.clientHeight, window.innerHeight || 0);
|
1041
1011
|
|
1042
|
-
var scrollTop = getScroll(html);
|
1043
|
-
var scrollLeft = getScroll(html, 'left');
|
1012
|
+
var scrollTop = !excludeScroll ? getScroll(html) : 0;
|
1013
|
+
var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;
|
1044
1014
|
|
1045
1015
|
var offset = {
|
1046
1016
|
top: scrollTop - relativeOffset.top + relativeOffset.marginTop,
|
@@ -1071,6 +1041,26 @@ function isFixed(element) {
|
|
1071
1041
|
return isFixed(getParentNode(element));
|
1072
1042
|
}
|
1073
1043
|
|
1044
|
+
/**
|
1045
|
+
* Finds the first parent of an element that has a transformed property defined
|
1046
|
+
* @method
|
1047
|
+
* @memberof Popper.Utils
|
1048
|
+
* @argument {Element} element
|
1049
|
+
* @returns {Element} first transformed parent or documentElement
|
1050
|
+
*/
|
1051
|
+
|
1052
|
+
function getFixedPositionOffsetParent(element) {
|
1053
|
+
// This check is needed to avoid errors in case one of the elements isn't defined for any reason
|
1054
|
+
if (!element || !element.parentElement || isIE$1()) {
|
1055
|
+
return document.documentElement;
|
1056
|
+
}
|
1057
|
+
var el = element.parentElement;
|
1058
|
+
while (el && getStyleComputedProperty(el, 'transform') === 'none') {
|
1059
|
+
el = el.parentElement;
|
1060
|
+
}
|
1061
|
+
return el || document.documentElement;
|
1062
|
+
}
|
1063
|
+
|
1074
1064
|
/**
|
1075
1065
|
* Computed the boundaries limits and return them
|
1076
1066
|
* @method
|
@@ -1079,31 +1069,35 @@ function isFixed(element) {
|
|
1079
1069
|
* @param {HTMLElement} reference
|
1080
1070
|
* @param {number} padding
|
1081
1071
|
* @param {HTMLElement} boundariesElement - Element used to define the boundaries
|
1072
|
+
* @param {Boolean} fixedPosition - Is in fixed position mode
|
1082
1073
|
* @returns {Object} Coordinates of the boundaries
|
1083
1074
|
*/
|
1084
1075
|
function getBoundaries(popper, reference, padding, boundariesElement) {
|
1076
|
+
var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
1077
|
+
|
1085
1078
|
// NOTE: 1 DOM access here
|
1079
|
+
|
1086
1080
|
var boundaries = { top: 0, left: 0 };
|
1087
|
-
var offsetParent = findCommonOffsetParent(popper, reference);
|
1081
|
+
var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
1088
1082
|
|
1089
1083
|
// Handle viewport case
|
1090
1084
|
if (boundariesElement === 'viewport') {
|
1091
|
-
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent);
|
1085
|
+
boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);
|
1092
1086
|
} else {
|
1093
1087
|
// Handle other cases based on DOM element used as boundaries
|
1094
1088
|
var boundariesNode = void 0;
|
1095
1089
|
if (boundariesElement === 'scrollParent') {
|
1096
|
-
boundariesNode = getScrollParent(getParentNode(
|
1090
|
+
boundariesNode = getScrollParent(getParentNode(reference));
|
1097
1091
|
if (boundariesNode.nodeName === 'BODY') {
|
1098
|
-
boundariesNode =
|
1092
|
+
boundariesNode = popper.ownerDocument.documentElement;
|
1099
1093
|
}
|
1100
1094
|
} else if (boundariesElement === 'window') {
|
1101
|
-
boundariesNode =
|
1095
|
+
boundariesNode = popper.ownerDocument.documentElement;
|
1102
1096
|
} else {
|
1103
1097
|
boundariesNode = boundariesElement;
|
1104
1098
|
}
|
1105
1099
|
|
1106
|
-
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent);
|
1100
|
+
var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);
|
1107
1101
|
|
1108
1102
|
// In case of HTML, we need a different computation
|
1109
1103
|
if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {
|
@@ -1175,7 +1169,7 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
|
1175
1169
|
};
|
1176
1170
|
|
1177
1171
|
var sortedAreas = Object.keys(rects).map(function (key) {
|
1178
|
-
return _extends({
|
1172
|
+
return _extends$1({
|
1179
1173
|
key: key
|
1180
1174
|
}, rects[key], {
|
1181
1175
|
area: getArea(rects[key])
|
@@ -1204,11 +1198,14 @@ function computeAutoPlacement(placement, refRect, popper, reference, boundariesE
|
|
1204
1198
|
* @param {Object} state
|
1205
1199
|
* @param {Element} popper - the popper element
|
1206
1200
|
* @param {Element} reference - the reference element (the popper will be relative to this)
|
1201
|
+
* @param {Element} fixedPosition - is in fixed position mode
|
1207
1202
|
* @returns {Object} An object containing the offsets which will be applied to the popper
|
1208
1203
|
*/
|
1209
1204
|
function getReferenceOffsets(state, popper, reference) {
|
1210
|
-
var
|
1211
|
-
|
1205
|
+
var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
1206
|
+
|
1207
|
+
var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, reference);
|
1208
|
+
return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);
|
1212
1209
|
}
|
1213
1210
|
|
1214
1211
|
/**
|
@@ -1219,7 +1216,7 @@ function getReferenceOffsets(state, popper, reference) {
|
|
1219
1216
|
* @returns {Object} object containing width and height properties
|
1220
1217
|
*/
|
1221
1218
|
function getOuterSizes(element) {
|
1222
|
-
var styles =
|
1219
|
+
var styles = getComputedStyle(element);
|
1223
1220
|
var x = parseFloat(styles.marginTop) + parseFloat(styles.marginBottom);
|
1224
1221
|
var y = parseFloat(styles.marginLeft) + parseFloat(styles.marginRight);
|
1225
1222
|
var result = {
|
@@ -1291,7 +1288,7 @@ function getPopperOffsets(popper, referenceOffsets, placement) {
|
|
1291
1288
|
* @argument value
|
1292
1289
|
* @returns index or -1
|
1293
1290
|
*/
|
1294
|
-
function find
|
1291
|
+
function find(arr, check) {
|
1295
1292
|
// use native find if supported
|
1296
1293
|
if (Array.prototype.find) {
|
1297
1294
|
return arr.find(check);
|
@@ -1310,7 +1307,7 @@ function find$1(arr, check) {
|
|
1310
1307
|
* @argument value
|
1311
1308
|
* @returns index or -1
|
1312
1309
|
*/
|
1313
|
-
function findIndex
|
1310
|
+
function findIndex(arr, prop, value) {
|
1314
1311
|
// use native findIndex if supported
|
1315
1312
|
if (Array.prototype.findIndex) {
|
1316
1313
|
return arr.findIndex(function (cur) {
|
@@ -1319,7 +1316,7 @@ function findIndex$1(arr, prop, value) {
|
|
1319
1316
|
}
|
1320
1317
|
|
1321
1318
|
// use `find` + `indexOf` if `findIndex` isn't supported
|
1322
|
-
var match = find
|
1319
|
+
var match = find(arr, function (obj) {
|
1323
1320
|
return obj[prop] === value;
|
1324
1321
|
});
|
1325
1322
|
return arr.indexOf(match);
|
@@ -1336,13 +1333,14 @@ function findIndex$1(arr, prop, value) {
|
|
1336
1333
|
* @returns {dataObject}
|
1337
1334
|
*/
|
1338
1335
|
function runModifiers(modifiers, data, ends) {
|
1339
|
-
var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex
|
1336
|
+
var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));
|
1340
1337
|
|
1341
1338
|
modifiersToRun.forEach(function (modifier) {
|
1342
|
-
if (modifier
|
1339
|
+
if (modifier['function']) {
|
1340
|
+
// eslint-disable-line dot-notation
|
1343
1341
|
console.warn('`modifier.function` is deprecated, use `modifier.fn`!');
|
1344
1342
|
}
|
1345
|
-
var fn = modifier
|
1343
|
+
var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation
|
1346
1344
|
if (modifier.enabled && isFunction(fn)) {
|
1347
1345
|
// Add properties to offsets to make them a complete clientRect object
|
1348
1346
|
// we do this before each modifier to make sure the previous one doesn't
|
@@ -1373,13 +1371,14 @@ function update() {
|
|
1373
1371
|
var data = {
|
1374
1372
|
instance: this,
|
1375
1373
|
styles: {},
|
1374
|
+
arrowStyles: {},
|
1376
1375
|
attributes: {},
|
1377
1376
|
flipped: false,
|
1378
1377
|
offsets: {}
|
1379
1378
|
};
|
1380
1379
|
|
1381
1380
|
// compute reference element offsets
|
1382
|
-
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference);
|
1381
|
+
data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);
|
1383
1382
|
|
1384
1383
|
// compute auto placement, store placement inside the data object,
|
1385
1384
|
// modifiers will be able to edit `placement` if needed
|
@@ -1389,9 +1388,12 @@ function update() {
|
|
1389
1388
|
// store the computed placement inside `originalPlacement`
|
1390
1389
|
data.originalPlacement = data.placement;
|
1391
1390
|
|
1391
|
+
data.positionFixed = this.options.positionFixed;
|
1392
|
+
|
1392
1393
|
// compute the popper offsets
|
1393
1394
|
data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);
|
1394
|
-
|
1395
|
+
|
1396
|
+
data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';
|
1395
1397
|
|
1396
1398
|
// run the modifiers
|
1397
1399
|
data = runModifiers(this.modifiers, data);
|
@@ -1431,10 +1433,10 @@ function getSupportedPropertyName(property) {
|
|
1431
1433
|
var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];
|
1432
1434
|
var upperProp = property.charAt(0).toUpperCase() + property.slice(1);
|
1433
1435
|
|
1434
|
-
for (var i = 0; i < prefixes.length
|
1436
|
+
for (var i = 0; i < prefixes.length; i++) {
|
1435
1437
|
var prefix = prefixes[i];
|
1436
1438
|
var toCheck = prefix ? '' + prefix + upperProp : property;
|
1437
|
-
if (typeof
|
1439
|
+
if (typeof document.body.style[toCheck] !== 'undefined') {
|
1438
1440
|
return toCheck;
|
1439
1441
|
}
|
1440
1442
|
}
|
@@ -1452,9 +1454,12 @@ function destroy() {
|
|
1452
1454
|
// touch DOM only if `applyStyle` modifier is enabled
|
1453
1455
|
if (isModifierEnabled(this.modifiers, 'applyStyle')) {
|
1454
1456
|
this.popper.removeAttribute('x-placement');
|
1455
|
-
this.popper.style.left = '';
|
1456
1457
|
this.popper.style.position = '';
|
1457
1458
|
this.popper.style.top = '';
|
1459
|
+
this.popper.style.left = '';
|
1460
|
+
this.popper.style.right = '';
|
1461
|
+
this.popper.style.bottom = '';
|
1462
|
+
this.popper.style.willChange = '';
|
1458
1463
|
this.popper.style[getSupportedPropertyName('transform')] = '';
|
1459
1464
|
}
|
1460
1465
|
|
@@ -1468,9 +1473,19 @@ function destroy() {
|
|
1468
1473
|
return this;
|
1469
1474
|
}
|
1470
1475
|
|
1476
|
+
/**
|
1477
|
+
* Get the window associated with the element
|
1478
|
+
* @argument {Element} element
|
1479
|
+
* @returns {Window}
|
1480
|
+
*/
|
1481
|
+
function getWindow(element) {
|
1482
|
+
var ownerDocument = element.ownerDocument;
|
1483
|
+
return ownerDocument ? ownerDocument.defaultView : window;
|
1484
|
+
}
|
1485
|
+
|
1471
1486
|
function attachToScrollParents(scrollParent, event, callback, scrollParents) {
|
1472
1487
|
var isBody = scrollParent.nodeName === 'BODY';
|
1473
|
-
var target = isBody ?
|
1488
|
+
var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;
|
1474
1489
|
target.addEventListener(event, callback, { passive: true });
|
1475
1490
|
|
1476
1491
|
if (!isBody) {
|
@@ -1488,7 +1503,7 @@ function attachToScrollParents(scrollParent, event, callback, scrollParents) {
|
|
1488
1503
|
function setupEventListeners(reference, options, state, updateBound) {
|
1489
1504
|
// Resize event listener on window
|
1490
1505
|
state.updateBound = updateBound;
|
1491
|
-
|
1506
|
+
getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });
|
1492
1507
|
|
1493
1508
|
// Scroll event listener on scroll parents
|
1494
1509
|
var scrollElement = getScrollParent(reference);
|
@@ -1519,7 +1534,7 @@ function enableEventListeners() {
|
|
1519
1534
|
*/
|
1520
1535
|
function removeEventListeners(reference, state) {
|
1521
1536
|
// Remove resize event listener on window
|
1522
|
-
|
1537
|
+
getWindow(reference).removeEventListener('resize', state.updateBound);
|
1523
1538
|
|
1524
1539
|
// Remove scroll event listener on scroll parents
|
1525
1540
|
state.scrollParents.forEach(function (target) {
|
@@ -1543,7 +1558,7 @@ function removeEventListeners(reference, state) {
|
|
1543
1558
|
*/
|
1544
1559
|
function disableEventListeners() {
|
1545
1560
|
if (this.state.eventsEnabled) {
|
1546
|
-
|
1561
|
+
cancelAnimationFrame(this.scheduleUpdate);
|
1547
1562
|
this.state = removeEventListeners(this.reference, this.state);
|
1548
1563
|
}
|
1549
1564
|
}
|
@@ -1617,9 +1632,9 @@ function applyStyle(data) {
|
|
1617
1632
|
// they will be set as HTML attributes of the element
|
1618
1633
|
setAttributes(data.instance.popper, data.attributes);
|
1619
1634
|
|
1620
|
-
// if
|
1621
|
-
if (data.
|
1622
|
-
setStyles(data.arrowElement, data.
|
1635
|
+
// if arrowElement is defined and arrowStyles has some properties
|
1636
|
+
if (data.arrowElement && Object.keys(data.arrowStyles).length) {
|
1637
|
+
setStyles(data.arrowElement, data.arrowStyles);
|
1623
1638
|
}
|
1624
1639
|
|
1625
1640
|
return data;
|
@@ -1632,12 +1647,12 @@ function applyStyle(data) {
|
|
1632
1647
|
* @method
|
1633
1648
|
* @memberof Popper.modifiers
|
1634
1649
|
* @param {HTMLElement} reference - The reference element used to position the popper
|
1635
|
-
* @param {HTMLElement} popper - The HTML element used as popper
|
1650
|
+
* @param {HTMLElement} popper - The HTML element used as popper
|
1636
1651
|
* @param {Object} options - Popper.js options
|
1637
1652
|
*/
|
1638
1653
|
function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
1639
1654
|
// compute reference element offsets
|
1640
|
-
var referenceOffsets = getReferenceOffsets(state, popper, reference);
|
1655
|
+
var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);
|
1641
1656
|
|
1642
1657
|
// compute auto placement, store placement inside the data object,
|
1643
1658
|
// modifiers will be able to edit `placement` if needed
|
@@ -1648,7 +1663,7 @@ function applyStyleOnLoad(reference, popper, options, modifierOptions, state) {
|
|
1648
1663
|
|
1649
1664
|
// Apply `position` to popper before anything else because
|
1650
1665
|
// without the position applied we can't guarantee correct computations
|
1651
|
-
setStyles(popper, { position: 'absolute' });
|
1666
|
+
setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });
|
1652
1667
|
|
1653
1668
|
return options;
|
1654
1669
|
}
|
@@ -1667,7 +1682,7 @@ function computeStyle(data, options) {
|
|
1667
1682
|
|
1668
1683
|
// Remove this legacy support in Popper.js v2
|
1669
1684
|
|
1670
|
-
var legacyGpuAccelerationOption = find
|
1685
|
+
var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {
|
1671
1686
|
return modifier.name === 'applyStyle';
|
1672
1687
|
}).gpuAcceleration;
|
1673
1688
|
if (legacyGpuAccelerationOption !== undefined) {
|
@@ -1683,11 +1698,13 @@ function computeStyle(data, options) {
|
|
1683
1698
|
position: popper.position
|
1684
1699
|
};
|
1685
1700
|
|
1686
|
-
//
|
1701
|
+
// Avoid blurry text by using full pixel integers.
|
1702
|
+
// For pixel-perfect positioning, top/bottom prefers rounded
|
1703
|
+
// values, while left/right prefers floored values.
|
1687
1704
|
var offsets = {
|
1688
1705
|
left: Math.floor(popper.left),
|
1689
|
-
top: Math.
|
1690
|
-
bottom: Math.
|
1706
|
+
top: Math.round(popper.top),
|
1707
|
+
bottom: Math.round(popper.bottom),
|
1691
1708
|
right: Math.floor(popper.right)
|
1692
1709
|
};
|
1693
1710
|
|
@@ -1739,9 +1756,10 @@ function computeStyle(data, options) {
|
|
1739
1756
|
'x-placement': data.placement
|
1740
1757
|
};
|
1741
1758
|
|
1742
|
-
// Update attributes
|
1743
|
-
data.attributes = _extends({}, attributes, data.attributes);
|
1744
|
-
data.styles = _extends({}, styles, data.styles);
|
1759
|
+
// Update `data` attributes, styles and arrowStyles
|
1760
|
+
data.attributes = _extends$1({}, attributes, data.attributes);
|
1761
|
+
data.styles = _extends$1({}, styles, data.styles);
|
1762
|
+
data.arrowStyles = _extends$1({}, data.offsets.arrow, data.arrowStyles);
|
1745
1763
|
|
1746
1764
|
return data;
|
1747
1765
|
}
|
@@ -1757,7 +1775,7 @@ function computeStyle(data, options) {
|
|
1757
1775
|
* @returns {Boolean}
|
1758
1776
|
*/
|
1759
1777
|
function isModifierRequired(modifiers, requestingName, requestedName) {
|
1760
|
-
var requesting = find
|
1778
|
+
var requesting = find(modifiers, function (_ref) {
|
1761
1779
|
var name = _ref.name;
|
1762
1780
|
return name === requestingName;
|
1763
1781
|
});
|
@@ -1782,6 +1800,8 @@ function isModifierRequired(modifiers, requestingName, requestedName) {
|
|
1782
1800
|
* @returns {Object} The data object, properly modified
|
1783
1801
|
*/
|
1784
1802
|
function arrow(data, options) {
|
1803
|
+
var _data$offsets$arrow;
|
1804
|
+
|
1785
1805
|
// arrow depends on keepTogether in order to work
|
1786
1806
|
if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
|
1787
1807
|
return data;
|
@@ -1814,13 +1834,15 @@ function arrow(data, options) {
|
|
1814
1834
|
var isVertical = ['left', 'right'].indexOf(placement) !== -1;
|
1815
1835
|
|
1816
1836
|
var len = isVertical ? 'height' : 'width';
|
1817
|
-
var
|
1837
|
+
var sideCapitalized = isVertical ? 'Top' : 'Left';
|
1838
|
+
var side = sideCapitalized.toLowerCase();
|
1818
1839
|
var altSide = isVertical ? 'left' : 'top';
|
1819
1840
|
var opSide = isVertical ? 'bottom' : 'right';
|
1820
1841
|
var arrowElementSize = getOuterSizes(arrowElement)[len];
|
1821
1842
|
|
1822
1843
|
//
|
1823
|
-
// extends keepTogether behavior making sure the popper and its
|
1844
|
+
// extends keepTogether behavior making sure the popper and its
|
1845
|
+
// reference have enough pixels in conjuction
|
1824
1846
|
//
|
1825
1847
|
|
1826
1848
|
// top/left side
|
@@ -1831,20 +1853,23 @@ function arrow(data, options) {
|
|
1831
1853
|
if (reference[side] + arrowElementSize > popper[opSide]) {
|
1832
1854
|
data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
|
1833
1855
|
}
|
1856
|
+
data.offsets.popper = getClientRect(data.offsets.popper);
|
1834
1857
|
|
1835
1858
|
// compute center of the popper
|
1836
1859
|
var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;
|
1837
1860
|
|
1838
1861
|
// Compute the sideValue using the updated popper offsets
|
1839
|
-
|
1862
|
+
// take popper margin in account because we don't have this info available
|
1863
|
+
var css = getStyleComputedProperty(data.instance.popper);
|
1864
|
+
var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
|
1865
|
+
var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);
|
1866
|
+
var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;
|
1840
1867
|
|
1841
1868
|
// prevent arrowElement from being placed not contiguously to its popper
|
1842
1869
|
sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);
|
1843
1870
|
|
1844
1871
|
data.arrowElement = arrowElement;
|
1845
|
-
data.offsets.arrow = {};
|
1846
|
-
data.offsets.arrow[side] = Math.round(sideValue);
|
1847
|
-
data.offsets.arrow[altSide] = ''; // make sure to unset any eventual altSide value from the DOM node
|
1872
|
+
data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty$1(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty$1(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);
|
1848
1873
|
|
1849
1874
|
return data;
|
1850
1875
|
}
|
@@ -1943,7 +1968,7 @@ function flip(data, options) {
|
|
1943
1968
|
return data;
|
1944
1969
|
}
|
1945
1970
|
|
1946
|
-
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement);
|
1971
|
+
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);
|
1947
1972
|
|
1948
1973
|
var placement = data.placement.split('-')[0];
|
1949
1974
|
var placementOpposite = getOppositePlacement(placement);
|
@@ -2007,7 +2032,7 @@ function flip(data, options) {
|
|
2007
2032
|
|
2008
2033
|
// this object contains `position`, we want to preserve it along with
|
2009
2034
|
// any additional property we may add in the future
|
2010
|
-
data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
|
2035
|
+
data.offsets.popper = _extends$1({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));
|
2011
2036
|
|
2012
2037
|
data = runModifiers(data.instance.modifiers, data, 'flip');
|
2013
2038
|
}
|
@@ -2124,7 +2149,7 @@ function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {
|
|
2124
2149
|
|
2125
2150
|
// Detect if the offset string contains a pair of values or a single one
|
2126
2151
|
// they could be separated by comma or space
|
2127
|
-
var divider = fragments.indexOf(find
|
2152
|
+
var divider = fragments.indexOf(find(fragments, function (frag) {
|
2128
2153
|
return frag.search(/,|\s/) !== -1;
|
2129
2154
|
}));
|
2130
2155
|
|
@@ -2235,7 +2260,27 @@ function preventOverflow(data, options) {
|
|
2235
2260
|
boundariesElement = getOffsetParent(boundariesElement);
|
2236
2261
|
}
|
2237
2262
|
|
2238
|
-
|
2263
|
+
// NOTE: DOM access here
|
2264
|
+
// resets the popper's position so that the document size can be calculated excluding
|
2265
|
+
// the size of the popper element itself
|
2266
|
+
var transformProp = getSupportedPropertyName('transform');
|
2267
|
+
var popperStyles = data.instance.popper.style; // assignment to help minification
|
2268
|
+
var top = popperStyles.top,
|
2269
|
+
left = popperStyles.left,
|
2270
|
+
transform = popperStyles[transformProp];
|
2271
|
+
|
2272
|
+
popperStyles.top = '';
|
2273
|
+
popperStyles.left = '';
|
2274
|
+
popperStyles[transformProp] = '';
|
2275
|
+
|
2276
|
+
var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);
|
2277
|
+
|
2278
|
+
// NOTE: DOM access here
|
2279
|
+
// restores the original style properties after the offsets have been computed
|
2280
|
+
popperStyles.top = top;
|
2281
|
+
popperStyles.left = left;
|
2282
|
+
popperStyles[transformProp] = transform;
|
2283
|
+
|
2239
2284
|
options.boundaries = boundaries;
|
2240
2285
|
|
2241
2286
|
var order = options.priority;
|
@@ -2247,7 +2292,7 @@ function preventOverflow(data, options) {
|
|
2247
2292
|
if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {
|
2248
2293
|
value = Math.max(popper[placement], boundaries[placement]);
|
2249
2294
|
}
|
2250
|
-
return defineProperty({}, placement, value);
|
2295
|
+
return defineProperty$1({}, placement, value);
|
2251
2296
|
},
|
2252
2297
|
secondary: function secondary(placement) {
|
2253
2298
|
var mainSide = placement === 'right' ? 'left' : 'top';
|
@@ -2255,13 +2300,13 @@ function preventOverflow(data, options) {
|
|
2255
2300
|
if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {
|
2256
2301
|
value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));
|
2257
2302
|
}
|
2258
|
-
return defineProperty({}, mainSide, value);
|
2303
|
+
return defineProperty$1({}, mainSide, value);
|
2259
2304
|
}
|
2260
2305
|
};
|
2261
2306
|
|
2262
2307
|
order.forEach(function (placement) {
|
2263
2308
|
var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';
|
2264
|
-
popper = _extends({}, popper, check[side](placement));
|
2309
|
+
popper = _extends$1({}, popper, check[side](placement));
|
2265
2310
|
});
|
2266
2311
|
|
2267
2312
|
data.offsets.popper = popper;
|
@@ -2292,11 +2337,11 @@ function shift(data) {
|
|
2292
2337
|
var measurement = isVertical ? 'width' : 'height';
|
2293
2338
|
|
2294
2339
|
var shiftOffsets = {
|
2295
|
-
start: defineProperty({}, side, reference[side]),
|
2296
|
-
end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])
|
2340
|
+
start: defineProperty$1({}, side, reference[side]),
|
2341
|
+
end: defineProperty$1({}, side, reference[side] + reference[measurement] - popper[measurement])
|
2297
2342
|
};
|
2298
2343
|
|
2299
|
-
data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);
|
2344
|
+
data.offsets.popper = _extends$1({}, popper, shiftOffsets[shiftvariation]);
|
2300
2345
|
}
|
2301
2346
|
|
2302
2347
|
return data;
|
@@ -2315,7 +2360,7 @@ function hide(data) {
|
|
2315
2360
|
}
|
2316
2361
|
|
2317
2362
|
var refRect = data.offsets.reference;
|
2318
|
-
var bound = find
|
2363
|
+
var bound = find(data.instance.modifiers, function (modifier) {
|
2319
2364
|
return modifier.name === 'preventOverflow';
|
2320
2365
|
}).boundaries;
|
2321
2366
|
|
@@ -2358,7 +2403,7 @@ function inner(data) {
|
|
2358
2403
|
|
2359
2404
|
var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;
|
2360
2405
|
|
2361
|
-
popper[isHoriz ? 'left' : 'top'] = reference[
|
2406
|
+
popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);
|
2362
2407
|
|
2363
2408
|
data.placement = getOppositePlacement(placement);
|
2364
2409
|
data.offsets.popper = getClientRect(popper);
|
@@ -2436,6 +2481,9 @@ var modifiers = {
|
|
2436
2481
|
* '10 - 5vh + 3%'
|
2437
2482
|
* '-10px + 5vh, 5px - 6%'
|
2438
2483
|
* ```
|
2484
|
+
* > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap
|
2485
|
+
* > with their reference element, unfortunately, you will have to disable the `flip` modifier.
|
2486
|
+
* > More on this [reading this issue](https://github.com/FezVrasta/popper.js/issues/373)
|
2439
2487
|
*
|
2440
2488
|
* @memberof modifiers
|
2441
2489
|
* @inner
|
@@ -2698,6 +2746,7 @@ var modifiers = {
|
|
2698
2746
|
* @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper.
|
2699
2747
|
* @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier
|
2700
2748
|
* @property {Object} data.styles Any CSS property defined here will be applied to the popper, it expects the JavaScript nomenclature (eg. `marginBottom`)
|
2749
|
+
* @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow, it expects the JavaScript nomenclature (eg. `marginBottom`)
|
2701
2750
|
* @property {Object} data.boundaries Offsets of the popper boundaries
|
2702
2751
|
* @property {Object} data.offsets The measurements of popper, reference and arrow elements.
|
2703
2752
|
* @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values
|
@@ -2721,13 +2770,19 @@ var modifiers = {
|
|
2721
2770
|
* @static
|
2722
2771
|
* @memberof Popper
|
2723
2772
|
*/
|
2724
|
-
var Defaults
|
2773
|
+
var Defaults = {
|
2725
2774
|
/**
|
2726
2775
|
* Popper's placement
|
2727
2776
|
* @prop {Popper.placements} placement='bottom'
|
2728
2777
|
*/
|
2729
2778
|
placement: 'bottom',
|
2730
2779
|
|
2780
|
+
/**
|
2781
|
+
* Set this to true if you want popper to position it self in 'fixed' mode
|
2782
|
+
* @prop {Boolean} positionFixed=false
|
2783
|
+
*/
|
2784
|
+
positionFixed: false,
|
2785
|
+
|
2731
2786
|
/**
|
2732
2787
|
* Whether events (resize, scroll) are initially enabled
|
2733
2788
|
* @prop {Boolean} eventsEnabled=true
|
@@ -2792,7 +2847,7 @@ var Popper = function () {
|
|
2792
2847
|
var _this = this;
|
2793
2848
|
|
2794
2849
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
2795
|
-
classCallCheck(this, Popper);
|
2850
|
+
classCallCheck$1(this, Popper);
|
2796
2851
|
|
2797
2852
|
this.scheduleUpdate = function () {
|
2798
2853
|
return requestAnimationFrame(_this.update);
|
@@ -2802,7 +2857,7 @@ var Popper = function () {
|
|
2802
2857
|
this.update = debounce(this.update.bind(this));
|
2803
2858
|
|
2804
2859
|
// with {} we create a new object with the options inside it
|
2805
|
-
this.options = _extends({}, Popper.Defaults, options);
|
2860
|
+
this.options = _extends$1({}, Popper.Defaults, options);
|
2806
2861
|
|
2807
2862
|
// init state
|
2808
2863
|
this.state = {
|
@@ -2812,18 +2867,18 @@ var Popper = function () {
|
|
2812
2867
|
};
|
2813
2868
|
|
2814
2869
|
// get reference and popper elements (allow jQuery wrappers)
|
2815
|
-
this.reference = reference.jquery ? reference[0] : reference;
|
2816
|
-
this.popper = popper.jquery ? popper[0] : popper;
|
2870
|
+
this.reference = reference && reference.jquery ? reference[0] : reference;
|
2871
|
+
this.popper = popper && popper.jquery ? popper[0] : popper;
|
2817
2872
|
|
2818
2873
|
// Deep merge modifiers options
|
2819
2874
|
this.options.modifiers = {};
|
2820
|
-
Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
|
2821
|
-
_this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
|
2875
|
+
Object.keys(_extends$1({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {
|
2876
|
+
_this.options.modifiers[name] = _extends$1({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});
|
2822
2877
|
});
|
2823
2878
|
|
2824
2879
|
// Refactoring modifiers' list (Object => Array)
|
2825
2880
|
this.modifiers = Object.keys(this.options.modifiers).map(function (name) {
|
2826
|
-
return _extends({
|
2881
|
+
return _extends$1({
|
2827
2882
|
name: name
|
2828
2883
|
}, _this.options.modifiers[name]);
|
2829
2884
|
})
|
@@ -2858,7 +2913,7 @@ var Popper = function () {
|
|
2858
2913
|
// class prototype and break stuff like Sinon stubs
|
2859
2914
|
|
2860
2915
|
|
2861
|
-
createClass(Popper, [{
|
2916
|
+
createClass$1(Popper, [{
|
2862
2917
|
key: 'update',
|
2863
2918
|
value: function update$$1() {
|
2864
2919
|
return update.call(this);
|
@@ -2928,1000 +2983,1278 @@ var Popper = function () {
|
|
2928
2983
|
|
2929
2984
|
Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
|
2930
2985
|
Popper.placements = placements;
|
2931
|
-
Popper.Defaults = Defaults
|
2986
|
+
Popper.Defaults = Defaults;
|
2932
2987
|
|
2933
2988
|
/**
|
2934
|
-
*
|
2935
|
-
*
|
2936
|
-
*
|
2937
|
-
* @
|
2938
|
-
*/
|
2939
|
-
function
|
2940
|
-
|
2989
|
+
* Triggers document reflow.
|
2990
|
+
* Use void because some minifiers or engines think simply accessing the property
|
2991
|
+
* is unnecessary.
|
2992
|
+
* @param {Element} popper
|
2993
|
+
*/
|
2994
|
+
function reflow(popper) {
|
2995
|
+
void popper.offsetHeight;
|
2941
2996
|
}
|
2942
2997
|
|
2943
|
-
|
2944
|
-
|
2945
|
-
|
2946
|
-
|
2947
|
-
}
|
2998
|
+
/**
|
2999
|
+
* Wrapper util for popper position updating.
|
3000
|
+
* Updates the popper's position and invokes the callback on update.
|
3001
|
+
* Hackish workaround until Popper 2.0's update() becomes sync.
|
3002
|
+
* @param {Popper} popperInstance
|
3003
|
+
* @param {Function} callback: to run once popper's position was updated
|
3004
|
+
* @param {Boolean} updateAlreadyCalled: was scheduleUpdate() already called?
|
3005
|
+
*/
|
3006
|
+
function updatePopperPosition(popperInstance, callback, updateAlreadyCalled) {
|
3007
|
+
var popper = popperInstance.popper,
|
3008
|
+
options = popperInstance.options;
|
2948
3009
|
|
2949
|
-
var
|
2950
|
-
|
2951
|
-
for (var i = 0; i < props.length; i++) {
|
2952
|
-
var descriptor = props[i];
|
2953
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
2954
|
-
descriptor.configurable = true;
|
2955
|
-
if ("value" in descriptor) descriptor.writable = true;
|
2956
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
2957
|
-
}
|
2958
|
-
}
|
3010
|
+
var onCreate = options.onCreate;
|
3011
|
+
var onUpdate = options.onUpdate;
|
2959
3012
|
|
2960
|
-
|
2961
|
-
|
2962
|
-
|
2963
|
-
|
3013
|
+
options.onCreate = options.onUpdate = function () {
|
3014
|
+
reflow(popper), callback && callback(), onUpdate();
|
3015
|
+
options.onCreate = onCreate;
|
3016
|
+
options.onUpdate = onUpdate;
|
2964
3017
|
};
|
2965
|
-
}();
|
2966
3018
|
|
3019
|
+
if (!updateAlreadyCalled) {
|
3020
|
+
popperInstance.scheduleUpdate();
|
3021
|
+
}
|
3022
|
+
}
|
2967
3023
|
|
3024
|
+
/**
|
3025
|
+
* Returns the core placement ('top', 'bottom', 'left', 'right') of a popper
|
3026
|
+
* @param {Element} popper
|
3027
|
+
* @return {String}
|
3028
|
+
*/
|
3029
|
+
function getPopperPlacement(popper) {
|
3030
|
+
return popper.getAttribute('x-placement').replace(/-.+/, '');
|
3031
|
+
}
|
2968
3032
|
|
3033
|
+
/**
|
3034
|
+
* Determines if the mouse's cursor is outside the interactive border
|
3035
|
+
* @param {MouseEvent} event
|
3036
|
+
* @param {Element} popper
|
3037
|
+
* @param {Object} options
|
3038
|
+
* @return {Boolean}
|
3039
|
+
*/
|
3040
|
+
function cursorIsOutsideInteractiveBorder(event, popper, options) {
|
3041
|
+
if (!popper.getAttribute('x-placement')) return true;
|
2969
3042
|
|
3043
|
+
var x = event.clientX,
|
3044
|
+
y = event.clientY;
|
3045
|
+
var interactiveBorder = options.interactiveBorder,
|
3046
|
+
distance = options.distance;
|
2970
3047
|
|
2971
3048
|
|
3049
|
+
var rect = popper.getBoundingClientRect();
|
3050
|
+
var placement = getPopperPlacement(popper);
|
3051
|
+
var borderWithDistance = interactiveBorder + distance;
|
2972
3052
|
|
2973
|
-
var
|
2974
|
-
|
2975
|
-
|
3053
|
+
var exceeds = {
|
3054
|
+
top: rect.top - y > interactiveBorder,
|
3055
|
+
bottom: y - rect.bottom > interactiveBorder,
|
3056
|
+
left: rect.left - x > interactiveBorder,
|
3057
|
+
right: x - rect.right > interactiveBorder
|
3058
|
+
};
|
2976
3059
|
|
2977
|
-
|
2978
|
-
|
2979
|
-
|
2980
|
-
|
2981
|
-
|
3060
|
+
switch (placement) {
|
3061
|
+
case 'top':
|
3062
|
+
exceeds.top = rect.top - y > borderWithDistance;
|
3063
|
+
break;
|
3064
|
+
case 'bottom':
|
3065
|
+
exceeds.bottom = y - rect.bottom > borderWithDistance;
|
3066
|
+
break;
|
3067
|
+
case 'left':
|
3068
|
+
exceeds.left = rect.left - x > borderWithDistance;
|
3069
|
+
break;
|
3070
|
+
case 'right':
|
3071
|
+
exceeds.right = x - rect.right > borderWithDistance;
|
3072
|
+
break;
|
2982
3073
|
}
|
2983
3074
|
|
2984
|
-
return
|
2985
|
-
}
|
3075
|
+
return exceeds.top || exceeds.bottom || exceeds.left || exceeds.right;
|
3076
|
+
}
|
2986
3077
|
|
2987
3078
|
/**
|
2988
|
-
*
|
2989
|
-
* @param {
|
2990
|
-
* @
|
2991
|
-
|
2992
|
-
|
2993
|
-
|
2994
|
-
|
2995
|
-
|
2996
|
-
|
2997
|
-
popperOptions = _refData$settings.popperOptions,
|
2998
|
-
offset = _refData$settings.offset,
|
2999
|
-
distance = _refData$settings.distance,
|
3000
|
-
flipDuration = _refData$settings.flipDuration;
|
3001
|
-
|
3079
|
+
* Transforms the `arrowTransform` numbers based on the placement axis
|
3080
|
+
* @param {String} type 'scale' or 'translate'
|
3081
|
+
* @param {Number[]} numbers
|
3082
|
+
* @param {Boolean} isVertical
|
3083
|
+
* @param {Boolean} isReverse
|
3084
|
+
* @return {String}
|
3085
|
+
*/
|
3086
|
+
function transformNumbersBasedOnPlacementAxis(type, numbers, isVertical, isReverse) {
|
3087
|
+
if (!numbers.length) return '';
|
3002
3088
|
|
3003
|
-
var
|
3089
|
+
var transforms = {
|
3090
|
+
scale: function () {
|
3091
|
+
if (numbers.length === 1) {
|
3092
|
+
return '' + numbers[0];
|
3093
|
+
} else {
|
3094
|
+
return isVertical ? numbers[0] + ', ' + numbers[1] : numbers[1] + ', ' + numbers[0];
|
3095
|
+
}
|
3096
|
+
}(),
|
3097
|
+
translate: function () {
|
3098
|
+
if (numbers.length === 1) {
|
3099
|
+
return isReverse ? -numbers[0] + 'px' : numbers[0] + 'px';
|
3100
|
+
} else {
|
3101
|
+
if (isVertical) {
|
3102
|
+
return isReverse ? numbers[0] + 'px, ' + -numbers[1] + 'px' : numbers[0] + 'px, ' + numbers[1] + 'px';
|
3103
|
+
} else {
|
3104
|
+
return isReverse ? -numbers[1] + 'px, ' + numbers[0] + 'px' : numbers[1] + 'px, ' + numbers[0] + 'px';
|
3105
|
+
}
|
3106
|
+
}
|
3107
|
+
}()
|
3108
|
+
};
|
3004
3109
|
|
3005
|
-
|
3006
|
-
|
3007
|
-
}, popperOptions || {}, {
|
3008
|
-
modifiers: _extends$1({}, popperOptions ? popperOptions.modifiers : {}, {
|
3009
|
-
flip: _extends$1({
|
3010
|
-
padding: distance + 5 /* 5px from viewport boundary */
|
3011
|
-
}, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.flip : {}),
|
3012
|
-
offset: _extends$1({
|
3013
|
-
offset: offset
|
3014
|
-
}, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.offset : {})
|
3015
|
-
}),
|
3016
|
-
onUpdate: function onUpdate() {
|
3017
|
-
var styles = tooltip.style;
|
3018
|
-
styles.top = '';
|
3019
|
-
styles.bottom = '';
|
3020
|
-
styles.left = '';
|
3021
|
-
styles.right = '';
|
3022
|
-
styles[getCorePlacement(popper.getAttribute('x-placement'))] = getOffsetDistanceInPx(distance);
|
3023
|
-
}
|
3024
|
-
});
|
3110
|
+
return transforms[type];
|
3111
|
+
}
|
3025
3112
|
|
3026
|
-
|
3113
|
+
/**
|
3114
|
+
* Transforms the `arrowTransform` x or y axis based on the placement axis
|
3115
|
+
* @param {String} axis 'X', 'Y', ''
|
3116
|
+
* @param {Boolean} isVertical
|
3117
|
+
* @return {String}
|
3118
|
+
*/
|
3119
|
+
function transformAxis(axis, isVertical) {
|
3120
|
+
if (!axis) return '';
|
3121
|
+
var map = {
|
3122
|
+
X: 'Y',
|
3123
|
+
Y: 'X'
|
3124
|
+
};
|
3125
|
+
return isVertical ? axis : map[axis];
|
3027
3126
|
}
|
3028
3127
|
|
3029
3128
|
/**
|
3030
|
-
*
|
3031
|
-
*
|
3032
|
-
* @param {
|
3033
|
-
|
3034
|
-
|
3035
|
-
|
3036
|
-
|
3037
|
-
|
3038
|
-
|
3039
|
-
|
3040
|
-
|
3041
|
-
|
3042
|
-
|
3043
|
-
|
3044
|
-
|
3045
|
-
|
3046
|
-
|
3047
|
-
|
3048
|
-
|
3049
|
-
// Create instance if it hasn't been created yet
|
3050
|
-
refData.popperInstance = createPopperInstance(refData);
|
3051
|
-
|
3052
|
-
// Update the popper's position whenever its content changes
|
3053
|
-
// Not supported in IE10 unless polyfilled
|
3054
|
-
if (window.MutationObserver) {
|
3055
|
-
var styles = popper.style;
|
3056
|
-
var observer = new MutationObserver(function () {
|
3057
|
-
styles[prefix('transitionDuration')] = '0ms';
|
3058
|
-
refData.popperInstance.update();
|
3059
|
-
queueExecution(function () {
|
3060
|
-
styles[prefix('transitionDuration')] = flipDuration + 'ms';
|
3061
|
-
});
|
3062
|
-
});
|
3063
|
-
observer.observe(popper, {
|
3064
|
-
childList: true,
|
3065
|
-
subtree: true,
|
3066
|
-
characterData: true
|
3067
|
-
});
|
3068
|
-
refData._mutationObserver = observer;
|
3069
|
-
}
|
3070
|
-
} else {
|
3071
|
-
refData.popperInstance.update();
|
3129
|
+
* Computes and applies the necessary arrow transform
|
3130
|
+
* @param {Element} popper
|
3131
|
+
* @param {Element} arrow
|
3132
|
+
* @param {String} arrowTransform
|
3133
|
+
*/
|
3134
|
+
function computeArrowTransform(popper, arrow, arrowTransform) {
|
3135
|
+
var placement = getPopperPlacement(popper);
|
3136
|
+
var isVertical = placement === 'top' || placement === 'bottom';
|
3137
|
+
var isReverse = placement === 'right' || placement === 'bottom';
|
3138
|
+
|
3139
|
+
var getAxis = function getAxis(re) {
|
3140
|
+
var match = arrowTransform.match(re);
|
3141
|
+
return match ? match[1] : '';
|
3142
|
+
};
|
3143
|
+
|
3144
|
+
var getNumbers = function getNumbers(re) {
|
3145
|
+
var match = arrowTransform.match(re);
|
3146
|
+
return match ? match[1].split(',').map(parseFloat) : [];
|
3147
|
+
};
|
3072
3148
|
|
3073
|
-
|
3074
|
-
|
3149
|
+
var re = {
|
3150
|
+
translate: /translateX?Y?\(([^)]+)\)/,
|
3151
|
+
scale: /scaleX?Y?\(([^)]+)\)/
|
3152
|
+
};
|
3153
|
+
|
3154
|
+
var matches = {
|
3155
|
+
translate: {
|
3156
|
+
axis: getAxis(/translate([XY])/),
|
3157
|
+
numbers: getNumbers(re.translate)
|
3158
|
+
},
|
3159
|
+
scale: {
|
3160
|
+
axis: getAxis(/scale([XY])/),
|
3161
|
+
numbers: getNumbers(re.scale)
|
3075
3162
|
}
|
3076
|
-
}
|
3163
|
+
};
|
3077
3164
|
|
3078
|
-
|
3079
|
-
|
3080
|
-
|
3081
|
-
el.addEventListener('mousemove', followCursorHandler);
|
3082
|
-
refData.popperInstance.disableEventListeners();
|
3083
|
-
}
|
3165
|
+
var computedTransform = arrowTransform.replace(re.translate, 'translate' + transformAxis(matches.translate.axis, isVertical) + '(' + transformNumbersBasedOnPlacementAxis('translate', matches.translate.numbers, isVertical, isReverse) + ')').replace(re.scale, 'scale' + transformAxis(matches.scale.axis, isVertical) + '(' + transformNumbersBasedOnPlacementAxis('scale', matches.scale.numbers, isVertical, isReverse) + ')');
|
3166
|
+
|
3167
|
+
arrow.style[prefix('transform')] = computedTransform;
|
3084
3168
|
}
|
3085
3169
|
|
3086
3170
|
/**
|
3087
|
-
*
|
3088
|
-
*
|
3089
|
-
|
3090
|
-
|
3091
|
-
|
3092
|
-
|
3093
|
-
|
3171
|
+
* Returns the distance taking into account the default distance due to
|
3172
|
+
* the transform: translate setting in CSS
|
3173
|
+
* @param {Number} distance
|
3174
|
+
* @return {String}
|
3175
|
+
*/
|
3176
|
+
function getOffsetDistanceInPx(distance) {
|
3177
|
+
return -(distance - defaults.distance) + 'px';
|
3178
|
+
}
|
3179
|
+
|
3180
|
+
/**
|
3181
|
+
* Waits until next repaint to execute a fn
|
3182
|
+
* @param {Function} fn
|
3183
|
+
*/
|
3184
|
+
function defer(fn) {
|
3185
|
+
requestAnimationFrame(function () {
|
3186
|
+
setTimeout(fn, 1);
|
3187
|
+
});
|
3188
|
+
}
|
3094
3189
|
|
3190
|
+
var matches = {};
|
3095
3191
|
|
3096
|
-
|
3097
|
-
|
3192
|
+
if (isBrowser) {
|
3193
|
+
var e = Element.prototype;
|
3194
|
+
matches = e.matches || e.matchesSelector || e.webkitMatchesSelector || e.mozMatchesSelector || e.msMatchesSelector || function (s) {
|
3195
|
+
var matches = (this.document || this.ownerDocument).querySelectorAll(s);
|
3196
|
+
var i = matches.length;
|
3197
|
+
while (--i >= 0 && matches.item(i) !== this) {} // eslint-disable-line no-empty
|
3198
|
+
return i > -1;
|
3098
3199
|
};
|
3200
|
+
}
|
3099
3201
|
|
3100
|
-
|
3101
|
-
|
3202
|
+
var matches$1 = matches;
|
3203
|
+
|
3204
|
+
/**
|
3205
|
+
* Ponyfill to get the closest parent element
|
3206
|
+
* @param {Element} element - child of parent to be returned
|
3207
|
+
* @param {String} parentSelector - selector to match the parent if found
|
3208
|
+
* @return {Element}
|
3209
|
+
*/
|
3210
|
+
function closest(element, parentSelector) {
|
3211
|
+
var fn = Element.prototype.closest || function (selector) {
|
3212
|
+
var el = this;
|
3213
|
+
while (el) {
|
3214
|
+
if (matches$1.call(el, selector)) {
|
3215
|
+
return el;
|
3216
|
+
}
|
3217
|
+
el = el.parentElement;
|
3218
|
+
}
|
3102
3219
|
};
|
3103
3220
|
|
3104
|
-
|
3105
|
-
|
3221
|
+
return fn.call(element, parentSelector);
|
3222
|
+
}
|
3106
3223
|
|
3107
|
-
|
3224
|
+
/**
|
3225
|
+
* Returns the value taking into account the value being either a number or array
|
3226
|
+
* @param {Number|Array} value
|
3227
|
+
* @param {Number} index
|
3228
|
+
* @return {Number}
|
3229
|
+
*/
|
3230
|
+
function getValue(value, index) {
|
3231
|
+
return Array.isArray(value) ? value[index] : value;
|
3232
|
+
}
|
3108
3233
|
|
3109
|
-
|
3110
|
-
|
3234
|
+
/**
|
3235
|
+
* Sets the visibility state of an element for transition to begin
|
3236
|
+
* @param {Element[]} els - array of elements
|
3237
|
+
* @param {String} type - 'visible' or 'hidden'
|
3238
|
+
*/
|
3239
|
+
function setVisibilityState(els, type) {
|
3240
|
+
els.forEach(function (el) {
|
3241
|
+
if (!el) return;
|
3242
|
+
el.setAttribute('data-state', type);
|
3243
|
+
});
|
3244
|
+
}
|
3111
3245
|
|
3112
|
-
|
3113
|
-
|
3246
|
+
/**
|
3247
|
+
* Sets the transition property to each element
|
3248
|
+
* @param {Element[]} els - Array of elements
|
3249
|
+
* @param {String} value
|
3250
|
+
*/
|
3251
|
+
function applyTransitionDuration(els, value) {
|
3252
|
+
els.filter(Boolean).forEach(function (el) {
|
3253
|
+
el.style[prefix('transitionDuration')] = value + 'ms';
|
3254
|
+
});
|
3114
3255
|
}
|
3115
3256
|
|
3116
3257
|
/**
|
3117
|
-
*
|
3118
|
-
* @param {Element} el
|
3119
|
-
|
3120
|
-
|
3121
|
-
|
3122
|
-
|
3123
|
-
|
3124
|
-
|
3258
|
+
* Focuses an element while preventing a scroll jump if it's not entirely within the viewport
|
3259
|
+
* @param {Element} el
|
3260
|
+
*/
|
3261
|
+
function focus(el) {
|
3262
|
+
var x = window.scrollX || window.pageXOffset;
|
3263
|
+
var y = window.scrollY || window.pageYOffset;
|
3264
|
+
el.focus();
|
3265
|
+
scroll(x, y);
|
3266
|
+
}
|
3125
3267
|
|
3126
|
-
|
3127
|
-
|
3128
|
-
|
3268
|
+
var key = {};
|
3269
|
+
var store = function store(data) {
|
3270
|
+
return function (k) {
|
3271
|
+
return k === key && data;
|
3272
|
+
};
|
3273
|
+
};
|
3129
3274
|
|
3130
|
-
|
3131
|
-
|
3132
|
-
|
3275
|
+
var Tippy = function () {
|
3276
|
+
function Tippy(config) {
|
3277
|
+
classCallCheck(this, Tippy);
|
3278
|
+
|
3279
|
+
for (var _key in config) {
|
3280
|
+
this[_key] = config[_key];
|
3133
3281
|
}
|
3134
3282
|
|
3135
|
-
|
3136
|
-
|
3137
|
-
|
3283
|
+
this.state = {
|
3284
|
+
destroyed: false,
|
3285
|
+
visible: false,
|
3286
|
+
enabled: true
|
3287
|
+
};
|
3288
|
+
|
3289
|
+
this._ = store({
|
3290
|
+
mutationObservers: []
|
3291
|
+
});
|
3292
|
+
}
|
3293
|
+
|
3294
|
+
/**
|
3295
|
+
* Enables the tooltip to allow it to show or hide
|
3296
|
+
* @memberof Tippy
|
3297
|
+
* @public
|
3298
|
+
*/
|
3299
|
+
|
3300
|
+
|
3301
|
+
createClass(Tippy, [{
|
3302
|
+
key: 'enable',
|
3303
|
+
value: function enable() {
|
3304
|
+
this.state.enabled = true;
|
3138
3305
|
}
|
3139
3306
|
|
3140
|
-
|
3307
|
+
/**
|
3308
|
+
* Disables the tooltip from showing or hiding, but does not destroy it
|
3309
|
+
* @memberof Tippy
|
3310
|
+
* @public
|
3311
|
+
*/
|
3141
3312
|
|
3142
|
-
|
3143
|
-
|
3313
|
+
}, {
|
3314
|
+
key: 'disable',
|
3315
|
+
value: function disable() {
|
3316
|
+
this.state.enabled = false;
|
3317
|
+
}
|
3144
3318
|
|
3145
|
-
|
3146
|
-
|
3319
|
+
/**
|
3320
|
+
* Shows the tooltip
|
3321
|
+
* @param {Number} duration in milliseconds
|
3322
|
+
* @memberof Tippy
|
3323
|
+
* @public
|
3324
|
+
*/
|
3147
3325
|
|
3148
|
-
|
3149
|
-
|
3150
|
-
|
3151
|
-
|
3152
|
-
* @param {Object} settings - individual settings
|
3153
|
-
* @return {Element} - the popper element
|
3154
|
-
*/
|
3155
|
-
function createPopperElement(id, title, settings) {
|
3156
|
-
var position = settings.position,
|
3157
|
-
distance = settings.distance,
|
3158
|
-
arrow = settings.arrow,
|
3159
|
-
animateFill = settings.animateFill,
|
3160
|
-
inertia = settings.inertia,
|
3161
|
-
animation = settings.animation,
|
3162
|
-
arrowSize = settings.arrowSize,
|
3163
|
-
size = settings.size,
|
3164
|
-
theme = settings.theme,
|
3165
|
-
html = settings.html,
|
3166
|
-
zIndex = settings.zIndex,
|
3167
|
-
interactive = settings.interactive;
|
3168
|
-
|
3169
|
-
|
3170
|
-
var popper = document.createElement('div');
|
3171
|
-
popper.setAttribute('class', 'tippy-popper');
|
3172
|
-
popper.setAttribute('role', 'tooltip');
|
3173
|
-
popper.setAttribute('aria-hidden', 'true');
|
3174
|
-
popper.setAttribute('id', 'tippy-tooltip-' + id);
|
3175
|
-
popper.style.zIndex = zIndex;
|
3326
|
+
}, {
|
3327
|
+
key: 'show',
|
3328
|
+
value: function show(duration) {
|
3329
|
+
var _this = this;
|
3176
3330
|
|
3177
|
-
|
3178
|
-
tooltip.setAttribute('class', 'tippy-tooltip tippy-tooltip--' + size + ' leave');
|
3179
|
-
tooltip.setAttribute('data-animation', animation);
|
3331
|
+
if (this.state.destroyed || !this.state.enabled) return;
|
3180
3332
|
|
3181
|
-
|
3182
|
-
|
3183
|
-
|
3333
|
+
var popper = this.popper,
|
3334
|
+
reference = this.reference,
|
3335
|
+
options = this.options;
|
3184
3336
|
|
3185
|
-
|
3186
|
-
|
3187
|
-
|
3188
|
-
|
3189
|
-
_arrow.setAttribute('x-arrow', '');
|
3190
|
-
tooltip.appendChild(_arrow);
|
3191
|
-
}
|
3337
|
+
var _getInnerElements = getInnerElements(popper),
|
3338
|
+
tooltip = _getInnerElements.tooltip,
|
3339
|
+
backdrop = _getInnerElements.backdrop,
|
3340
|
+
content = _getInnerElements.content;
|
3192
3341
|
|
3193
|
-
|
3194
|
-
|
3195
|
-
|
3196
|
-
var circle = document.createElement('div');
|
3197
|
-
circle.setAttribute('class', 'leave');
|
3198
|
-
circle.setAttribute('x-circle', '');
|
3199
|
-
tooltip.appendChild(circle);
|
3200
|
-
}
|
3342
|
+
// If the `dynamicTitle` option is true, the instance is allowed
|
3343
|
+
// to be created with an empty title. Make sure that the tooltip
|
3344
|
+
// content is not empty before showing it
|
3201
3345
|
|
3202
|
-
if (inertia) {
|
3203
|
-
// Change transition timing function cubic bezier
|
3204
|
-
tooltip.setAttribute('data-inertia', '');
|
3205
|
-
}
|
3206
3346
|
|
3207
|
-
|
3208
|
-
tooltip.setAttribute('data-interactive', '');
|
3209
|
-
}
|
3347
|
+
if (options.dynamicTitle && !reference.getAttribute('data-original-title')) return;
|
3210
3348
|
|
3211
|
-
|
3212
|
-
|
3213
|
-
content.setAttribute('class', 'tippy-tooltip-content');
|
3349
|
+
// Do not show tooltip if reference contains 'disabled' attribute. FF fix for #221
|
3350
|
+
if (reference.hasAttribute('disabled')) return;
|
3214
3351
|
|
3215
|
-
|
3216
|
-
|
3352
|
+
// Destroy tooltip if the reference element is no longer on the DOM
|
3353
|
+
if (!reference.refObj && !document.documentElement.contains(reference)) {
|
3354
|
+
this.destroy();
|
3355
|
+
return;
|
3356
|
+
}
|
3217
3357
|
|
3218
|
-
|
3219
|
-
|
3220
|
-
|
3221
|
-
|
3222
|
-
|
3223
|
-
|
3358
|
+
options.onShow.call(popper, this);
|
3359
|
+
|
3360
|
+
duration = getValue(duration !== undefined ? duration : options.duration, 0);
|
3361
|
+
|
3362
|
+
// Prevent a transition when popper changes position
|
3363
|
+
applyTransitionDuration([popper, tooltip, backdrop], 0);
|
3364
|
+
|
3365
|
+
popper.style.visibility = 'visible';
|
3366
|
+
this.state.visible = true;
|
3367
|
+
|
3368
|
+
_mount.call(this, function () {
|
3369
|
+
if (!_this.state.visible) return;
|
3370
|
+
|
3371
|
+
if (!_hasFollowCursorBehavior.call(_this)) {
|
3372
|
+
// FIX: Arrow will sometimes not be positioned correctly. Force another update.
|
3373
|
+
_this.popperInstance.scheduleUpdate();
|
3374
|
+
}
|
3375
|
+
|
3376
|
+
// Set initial position near the cursor
|
3377
|
+
if (_hasFollowCursorBehavior.call(_this)) {
|
3378
|
+
_this.popperInstance.disableEventListeners();
|
3379
|
+
var delay = getValue(options.delay, 0);
|
3380
|
+
var lastTriggerEvent = _this._(key).lastTriggerEvent;
|
3381
|
+
if (lastTriggerEvent) {
|
3382
|
+
_this._(key).followCursorListener(delay && _this._(key).lastMouseMoveEvent ? _this._(key).lastMouseMoveEvent : lastTriggerEvent);
|
3383
|
+
}
|
3384
|
+
}
|
3385
|
+
|
3386
|
+
// Re-apply transition durations
|
3387
|
+
applyTransitionDuration([tooltip, backdrop, backdrop ? content : null], duration);
|
3388
|
+
|
3389
|
+
if (backdrop) {
|
3390
|
+
getComputedStyle(backdrop)[prefix('transform')];
|
3391
|
+
}
|
3392
|
+
|
3393
|
+
if (options.interactive) {
|
3394
|
+
reference.classList.add('tippy-active');
|
3395
|
+
}
|
3396
|
+
|
3397
|
+
if (options.sticky) {
|
3398
|
+
_makeSticky.call(_this);
|
3399
|
+
}
|
3400
|
+
|
3401
|
+
setVisibilityState([tooltip, backdrop], 'visible');
|
3402
|
+
|
3403
|
+
_onTransitionEnd.call(_this, duration, function () {
|
3404
|
+
if (!options.updateDuration) {
|
3405
|
+
tooltip.classList.add('tippy-notransition');
|
3406
|
+
}
|
3407
|
+
|
3408
|
+
if (options.interactive) {
|
3409
|
+
focus(popper);
|
3410
|
+
}
|
3411
|
+
|
3412
|
+
reference.setAttribute('aria-describedby', 'tippy-' + _this.id);
|
3413
|
+
|
3414
|
+
options.onShown.call(popper, _this);
|
3415
|
+
});
|
3416
|
+
});
|
3224
3417
|
}
|
3225
3418
|
|
3226
|
-
|
3227
|
-
|
3228
|
-
|
3229
|
-
|
3230
|
-
|
3231
|
-
|
3419
|
+
/**
|
3420
|
+
* Hides the tooltip
|
3421
|
+
* @param {Number} duration in milliseconds
|
3422
|
+
* @memberof Tippy
|
3423
|
+
* @public
|
3424
|
+
*/
|
3232
3425
|
|
3233
|
-
|
3234
|
-
|
3426
|
+
}, {
|
3427
|
+
key: 'hide',
|
3428
|
+
value: function hide(duration) {
|
3429
|
+
var _this2 = this;
|
3235
3430
|
|
3236
|
-
|
3237
|
-
popper.appendChild(tooltip);
|
3431
|
+
if (this.state.destroyed || !this.state.enabled) return;
|
3238
3432
|
|
3239
|
-
|
3240
|
-
|
3433
|
+
var popper = this.popper,
|
3434
|
+
reference = this.reference,
|
3435
|
+
options = this.options;
|
3241
3436
|
|
3242
|
-
|
3243
|
-
|
3244
|
-
|
3245
|
-
|
3246
|
-
* @param {Object} handlers - the handlers for each listener
|
3247
|
-
* @param {Boolean} touchHold
|
3248
|
-
* @return {Array} - array of listener objects
|
3249
|
-
*/
|
3250
|
-
function createTrigger(event, el, handlers, touchHold) {
|
3251
|
-
var listeners = [];
|
3437
|
+
var _getInnerElements2 = getInnerElements(popper),
|
3438
|
+
tooltip = _getInnerElements2.tooltip,
|
3439
|
+
backdrop = _getInnerElements2.backdrop,
|
3440
|
+
content = _getInnerElements2.content;
|
3252
3441
|
|
3253
|
-
|
3442
|
+
options.onHide.call(popper, this);
|
3254
3443
|
|
3255
|
-
|
3256
|
-
|
3257
|
-
|
3258
|
-
|
3259
|
-
|
3260
|
-
|
3444
|
+
duration = getValue(duration !== undefined ? duration : options.duration, 1);
|
3445
|
+
|
3446
|
+
if (!options.updateDuration) {
|
3447
|
+
tooltip.classList.remove('tippy-notransition');
|
3448
|
+
}
|
3449
|
+
|
3450
|
+
if (options.interactive) {
|
3451
|
+
reference.classList.remove('tippy-active');
|
3452
|
+
}
|
3453
|
+
|
3454
|
+
popper.style.visibility = 'hidden';
|
3455
|
+
this.state.visible = false;
|
3456
|
+
|
3457
|
+
applyTransitionDuration([tooltip, backdrop, backdrop ? content : null], duration);
|
3458
|
+
|
3459
|
+
setVisibilityState([tooltip, backdrop], 'hidden');
|
3460
|
+
|
3461
|
+
if (options.interactive && options.trigger.indexOf('click') > -1) {
|
3462
|
+
focus(reference);
|
3463
|
+
}
|
3261
3464
|
|
3262
|
-
|
3263
|
-
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3268
|
-
|
3465
|
+
this.popperInstance.disableEventListeners();
|
3466
|
+
|
3467
|
+
/*
|
3468
|
+
* This call is deferred because sometimes when the tooltip is still transitioning in but hide()
|
3469
|
+
* is called before it finishes, the CSS transition won't reverse quickly enough, meaning
|
3470
|
+
* the CSS transition will finish 1-2 frames later, and onHidden() will run since the JS set it
|
3471
|
+
* more quickly. It should actually be onShown(). Seems to be something Chrome does, not Safari
|
3472
|
+
*/
|
3473
|
+
defer(function () {
|
3474
|
+
_onTransitionEnd.call(_this2, duration, function () {
|
3475
|
+
if (_this2.state.visible || !options.appendTo.contains(popper)) return;
|
3476
|
+
|
3477
|
+
if (!_this2._(key).isPreparingToShow) {
|
3478
|
+
document.removeEventListener('mousemove', _this2._(key).followCursorListener);
|
3479
|
+
_this2._(key).lastMouseMoveEvent = null;
|
3480
|
+
}
|
3481
|
+
|
3482
|
+
reference.removeAttribute('aria-describedby');
|
3483
|
+
|
3484
|
+
options.appendTo.removeChild(popper);
|
3485
|
+
|
3486
|
+
options.onHidden.call(popper, _this2);
|
3487
|
+
});
|
3488
|
+
});
|
3489
|
+
}
|
3490
|
+
|
3491
|
+
/**
|
3492
|
+
* Destroys the tooltip instance
|
3493
|
+
* @param {Boolean} destroyTargetInstances - relevant only when destroying delegates
|
3494
|
+
* @memberof Tippy
|
3495
|
+
* @public
|
3496
|
+
*/
|
3497
|
+
|
3498
|
+
}, {
|
3499
|
+
key: 'destroy',
|
3500
|
+
value: function destroy() {
|
3501
|
+
var _this3 = this;
|
3502
|
+
|
3503
|
+
var destroyTargetInstances = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
3504
|
+
|
3505
|
+
if (this.state.destroyed) return;
|
3506
|
+
|
3507
|
+
// Ensure the popper is hidden
|
3508
|
+
if (this.state.visible) {
|
3509
|
+
this.hide(0);
|
3510
|
+
}
|
3511
|
+
|
3512
|
+
this.listeners.forEach(function (listener) {
|
3513
|
+
_this3.reference.removeEventListener(listener.event, listener.handler);
|
3269
3514
|
});
|
3270
|
-
|
3271
|
-
|
3272
|
-
|
3273
|
-
|
3515
|
+
|
3516
|
+
// Restore title
|
3517
|
+
if (this.title) {
|
3518
|
+
this.reference.setAttribute('title', this.title);
|
3519
|
+
}
|
3520
|
+
|
3521
|
+
delete this.reference._tippy;
|
3522
|
+
|
3523
|
+
var attributes = ['data-original-title', 'data-tippy', 'data-tippy-delegate'];
|
3524
|
+
attributes.forEach(function (attr) {
|
3525
|
+
_this3.reference.removeAttribute(attr);
|
3526
|
+
});
|
3527
|
+
|
3528
|
+
if (this.options.target && destroyTargetInstances) {
|
3529
|
+
toArray(this.reference.querySelectorAll(this.options.target)).forEach(function (child) {
|
3530
|
+
return child._tippy && child._tippy.destroy();
|
3531
|
+
});
|
3532
|
+
}
|
3533
|
+
|
3534
|
+
if (this.popperInstance) {
|
3535
|
+
this.popperInstance.destroy();
|
3536
|
+
}
|
3537
|
+
|
3538
|
+
this._(key).mutationObservers.forEach(function (observer) {
|
3539
|
+
observer.disconnect();
|
3274
3540
|
});
|
3541
|
+
|
3542
|
+
this.state.destroyed = true;
|
3275
3543
|
}
|
3544
|
+
}]);
|
3545
|
+
return Tippy;
|
3546
|
+
}();
|
3276
3547
|
|
3277
|
-
|
3278
|
-
|
3279
|
-
|
3280
|
-
|
3281
|
-
|
3282
|
-
|
3548
|
+
/**
|
3549
|
+
* ------------------------------------------------------------------------
|
3550
|
+
* Private methods
|
3551
|
+
* ------------------------------------------------------------------------
|
3552
|
+
* Standalone functions to be called with the instance's `this` context to make
|
3553
|
+
* them truly private and not accessible on the prototype
|
3554
|
+
*/
|
3283
3555
|
|
3284
|
-
|
3285
|
-
|
3286
|
-
|
3287
|
-
|
3288
|
-
|
3289
|
-
|
3290
|
-
|
3556
|
+
/**
|
3557
|
+
* Determines if the tooltip instance has followCursor behavior
|
3558
|
+
* @return {Boolean}
|
3559
|
+
* @memberof Tippy
|
3560
|
+
* @private
|
3561
|
+
*/
|
3562
|
+
function _hasFollowCursorBehavior() {
|
3563
|
+
var lastTriggerEvent = this._(key).lastTriggerEvent;
|
3564
|
+
return this.options.followCursor && !browser.usingTouch && lastTriggerEvent && lastTriggerEvent.type !== 'focus';
|
3565
|
+
}
|
3291
3566
|
|
3292
|
-
|
3567
|
+
/**
|
3568
|
+
* Creates the Tippy instance for the child target of the delegate container
|
3569
|
+
* @param {Event} event
|
3570
|
+
* @memberof Tippy
|
3571
|
+
* @private
|
3572
|
+
*/
|
3573
|
+
function _createDelegateChildTippy(event) {
|
3574
|
+
var targetEl = closest(event.target, this.options.target);
|
3575
|
+
if (targetEl && !targetEl._tippy) {
|
3576
|
+
var title = targetEl.getAttribute('title') || this.title;
|
3577
|
+
if (title) {
|
3578
|
+
targetEl.setAttribute('title', title);
|
3579
|
+
tippy$1(targetEl, _extends({}, this.options, { target: null }));
|
3580
|
+
_enter.call(targetEl._tippy, event);
|
3581
|
+
}
|
3582
|
+
}
|
3293
3583
|
}
|
3294
3584
|
|
3295
3585
|
/**
|
3296
|
-
*
|
3297
|
-
*
|
3298
|
-
* @param {
|
3299
|
-
* @
|
3300
|
-
* @
|
3301
|
-
*/
|
3302
|
-
function
|
3303
|
-
|
3586
|
+
* Method used by event listeners to invoke the show method, taking into account delays and
|
3587
|
+
* the `wait` option
|
3588
|
+
* @param {Event} event
|
3589
|
+
* @memberof Tippy
|
3590
|
+
* @private
|
3591
|
+
*/
|
3592
|
+
function _enter(event) {
|
3593
|
+
var _this4 = this;
|
3304
3594
|
|
3305
|
-
var
|
3306
|
-
y = event.clientY;
|
3307
|
-
var interactiveBorder = settings.interactiveBorder,
|
3308
|
-
distance = settings.distance;
|
3595
|
+
var options = this.options;
|
3309
3596
|
|
3310
3597
|
|
3311
|
-
|
3312
|
-
var corePosition = getCorePlacement(popper.getAttribute('x-placement'));
|
3313
|
-
var borderWithDistance = interactiveBorder + distance;
|
3598
|
+
_clearDelayTimeouts.call(this);
|
3314
3599
|
|
3315
|
-
|
3316
|
-
top: rect.top - y > interactiveBorder,
|
3317
|
-
bottom: y - rect.bottom > interactiveBorder,
|
3318
|
-
left: rect.left - x > interactiveBorder,
|
3319
|
-
right: x - rect.right > interactiveBorder
|
3320
|
-
};
|
3600
|
+
if (this.state.visible) return;
|
3321
3601
|
|
3322
|
-
|
3323
|
-
|
3324
|
-
|
3325
|
-
|
3326
|
-
|
3327
|
-
|
3328
|
-
|
3329
|
-
|
3330
|
-
|
3331
|
-
|
3332
|
-
|
3333
|
-
|
3334
|
-
|
3602
|
+
// Is a delegate, create Tippy instance for the child target
|
3603
|
+
if (options.target) {
|
3604
|
+
_createDelegateChildTippy.call(this, event);
|
3605
|
+
return;
|
3606
|
+
}
|
3607
|
+
|
3608
|
+
this._(key).isPreparingToShow = true;
|
3609
|
+
|
3610
|
+
if (options.wait) {
|
3611
|
+
options.wait.call(this.popper, this.show.bind(this), event);
|
3612
|
+
return;
|
3613
|
+
}
|
3614
|
+
|
3615
|
+
// If the tooltip has a delay, we need to be listening to the mousemove as soon as the trigger
|
3616
|
+
// event is fired so that it's in the correct position upon mount.
|
3617
|
+
if (_hasFollowCursorBehavior.call(this)) {
|
3618
|
+
if (!this._(key).followCursorListener) {
|
3619
|
+
_setFollowCursorListener.call(this);
|
3620
|
+
}
|
3621
|
+
|
3622
|
+
var _getInnerElements3 = getInnerElements(this.popper),
|
3623
|
+
arrow = _getInnerElements3.arrow;
|
3624
|
+
|
3625
|
+
if (arrow) arrow.style.margin = '0';
|
3626
|
+
document.addEventListener('mousemove', this._(key).followCursorListener);
|
3335
3627
|
}
|
3336
3628
|
|
3337
|
-
|
3629
|
+
var delay = getValue(options.delay, 0);
|
3630
|
+
|
3631
|
+
if (delay) {
|
3632
|
+
this._(key).showTimeout = setTimeout(function () {
|
3633
|
+
_this4.show();
|
3634
|
+
}, delay);
|
3635
|
+
} else {
|
3636
|
+
this.show();
|
3637
|
+
}
|
3338
3638
|
}
|
3339
3639
|
|
3340
3640
|
/**
|
3341
|
-
*
|
3342
|
-
* @
|
3343
|
-
* @
|
3344
|
-
|
3345
|
-
|
3346
|
-
|
3347
|
-
function getEventListenerHandlers(el, popper, settings) {
|
3348
|
-
var _this = this;
|
3349
|
-
|
3350
|
-
var position = settings.position,
|
3351
|
-
delay = settings.delay,
|
3352
|
-
duration = settings.duration,
|
3353
|
-
interactive = settings.interactive,
|
3354
|
-
interactiveBorder = settings.interactiveBorder,
|
3355
|
-
distance = settings.distance,
|
3356
|
-
hideOnClick = settings.hideOnClick,
|
3357
|
-
trigger = settings.trigger,
|
3358
|
-
touchHold = settings.touchHold,
|
3359
|
-
touchWait = settings.touchWait;
|
3360
|
-
|
3361
|
-
|
3362
|
-
var showDelay = void 0,
|
3363
|
-
hideDelay = void 0;
|
3364
|
-
|
3365
|
-
var clearTimeouts = function clearTimeouts() {
|
3366
|
-
clearTimeout(showDelay);
|
3367
|
-
clearTimeout(hideDelay);
|
3368
|
-
};
|
3641
|
+
* Method used by event listeners to invoke the hide method, taking into account delays
|
3642
|
+
* @memberof Tippy
|
3643
|
+
* @private
|
3644
|
+
*/
|
3645
|
+
function _leave() {
|
3646
|
+
var _this5 = this;
|
3369
3647
|
|
3370
|
-
|
3371
|
-
clearTimeouts();
|
3648
|
+
_clearDelayTimeouts.call(this);
|
3372
3649
|
|
3373
|
-
|
3374
|
-
if (isVisible(popper)) return;
|
3650
|
+
if (!this.state.visible) return;
|
3375
3651
|
|
3376
|
-
|
3652
|
+
this._(key).isPreparingToShow = false;
|
3377
3653
|
|
3378
|
-
|
3379
|
-
showDelay = setTimeout(function () {
|
3380
|
-
return _this.show(popper);
|
3381
|
-
}, _delay);
|
3382
|
-
} else {
|
3383
|
-
_this.show(popper);
|
3384
|
-
}
|
3385
|
-
};
|
3654
|
+
var delay = getValue(this.options.delay, 1);
|
3386
3655
|
|
3387
|
-
|
3388
|
-
|
3389
|
-
|
3656
|
+
if (delay) {
|
3657
|
+
this._(key).hideTimeout = setTimeout(function () {
|
3658
|
+
if (_this5.state.visible) {
|
3659
|
+
_this5.hide();
|
3660
|
+
}
|
3661
|
+
}, delay);
|
3662
|
+
} else {
|
3663
|
+
this.hide();
|
3664
|
+
}
|
3665
|
+
}
|
3390
3666
|
|
3391
|
-
|
3392
|
-
|
3667
|
+
/**
|
3668
|
+
* Returns relevant listeners for the instance
|
3669
|
+
* @return {Object} of listeners
|
3670
|
+
* @memberof Tippy
|
3671
|
+
* @private
|
3672
|
+
*/
|
3673
|
+
function _getEventListeners() {
|
3674
|
+
var _this6 = this;
|
3393
3675
|
|
3394
|
-
|
3676
|
+
var onTrigger = function onTrigger(event) {
|
3677
|
+
if (!_this6.state.enabled) return;
|
3395
3678
|
|
3396
|
-
|
3397
|
-
hideDelay = setTimeout(function () {
|
3398
|
-
return _this.hide(popper);
|
3399
|
-
}, _delay);
|
3400
|
-
} else {
|
3401
|
-
_this.hide(popper);
|
3402
|
-
}
|
3403
|
-
};
|
3679
|
+
var shouldStopEvent = browser.supportsTouch && browser.usingTouch && ['mouseenter', 'mouseover', 'focus'].indexOf(event.type) > -1;
|
3404
3680
|
|
3405
|
-
|
3406
|
-
var mouseenterTouch = event.type === 'mouseenter' && Browser.SUPPORTS_TOUCH && Browser.touch;
|
3681
|
+
if (shouldStopEvent && _this6.options.touchHold) return;
|
3407
3682
|
|
3408
|
-
|
3683
|
+
_this6._(key).lastTriggerEvent = event;
|
3409
3684
|
|
3410
3685
|
// Toggle show/hide when clicking click-triggered tooltips
|
3411
|
-
|
3412
|
-
|
3413
|
-
|
3414
|
-
|
3415
|
-
|
3416
|
-
if (mouseenterTouch && Browser.iOS() && el.click) {
|
3417
|
-
el.click();
|
3686
|
+
if (event.type === 'click' && _this6.options.hideOnClick !== 'persistent' && _this6.state.visible) {
|
3687
|
+
_leave.call(_this6);
|
3688
|
+
} else {
|
3689
|
+
_enter.call(_this6, event);
|
3418
3690
|
}
|
3419
|
-
};
|
3420
|
-
|
3421
|
-
var handleMouseleave = function handleMouseleave(event) {
|
3422
3691
|
|
3423
|
-
//
|
3424
|
-
if (
|
3425
|
-
|
3692
|
+
// iOS prevents click events from firing
|
3693
|
+
if (shouldStopEvent && browser.iOS && _this6.reference.click) {
|
3694
|
+
_this6.reference.click();
|
3426
3695
|
}
|
3696
|
+
};
|
3427
3697
|
|
3428
|
-
|
3429
|
-
|
3430
|
-
// other than its popper
|
3431
|
-
var handleMousemove = function handleMousemove(event) {
|
3432
|
-
|
3433
|
-
var triggerHide = function triggerHide() {
|
3434
|
-
document.body.removeEventListener('mouseleave', hide);
|
3435
|
-
document.removeEventListener('mousemove', handleMousemove);
|
3436
|
-
hide();
|
3437
|
-
};
|
3698
|
+
var onMouseLeave = function onMouseLeave(event) {
|
3699
|
+
if (['mouseleave', 'mouseout'].indexOf(event.type) > -1 && browser.supportsTouch && browser.usingTouch && _this6.options.touchHold) return;
|
3438
3700
|
|
3439
|
-
|
3701
|
+
if (_this6.options.interactive) {
|
3702
|
+
var hide = _leave.bind(_this6);
|
3440
3703
|
|
3441
|
-
|
3442
|
-
var
|
3443
|
-
var
|
3444
|
-
var
|
3704
|
+
var onMouseMove = function onMouseMove(event) {
|
3705
|
+
var referenceCursorIsOver = closest(event.target, selectors.REFERENCE);
|
3706
|
+
var cursorIsOverPopper = closest(event.target, selectors.POPPER) === _this6.popper;
|
3707
|
+
var cursorIsOverReference = referenceCursorIsOver === _this6.reference;
|
3445
3708
|
|
3446
|
-
if (
|
3447
|
-
return triggerHide();
|
3448
|
-
}
|
3709
|
+
if (cursorIsOverPopper || cursorIsOverReference) return;
|
3449
3710
|
|
3450
|
-
if (
|
3711
|
+
if (cursorIsOutsideInteractiveBorder(event, _this6.popper, _this6.options)) {
|
3712
|
+
document.body.removeEventListener('mouseleave', hide);
|
3713
|
+
document.removeEventListener('mousemove', onMouseMove);
|
3451
3714
|
|
3452
|
-
|
3453
|
-
triggerHide();
|
3715
|
+
_leave.call(_this6, onMouseMove);
|
3454
3716
|
}
|
3455
3717
|
};
|
3456
3718
|
|
3457
3719
|
document.body.addEventListener('mouseleave', hide);
|
3458
|
-
document.addEventListener('mousemove',
|
3459
|
-
|
3720
|
+
document.addEventListener('mousemove', onMouseMove);
|
3460
3721
|
return;
|
3461
3722
|
}
|
3462
3723
|
|
3463
|
-
|
3464
|
-
|
3724
|
+
_leave.call(_this6);
|
3725
|
+
};
|
3726
|
+
|
3727
|
+
var onBlur = function onBlur(event) {
|
3728
|
+
if (event.target !== _this6.reference || browser.usingTouch) return;
|
3729
|
+
|
3730
|
+
if (_this6.options.interactive) {
|
3731
|
+
if (!event.relatedTarget) return;
|
3732
|
+
if (closest(event.relatedTarget, selectors.POPPER)) return;
|
3733
|
+
}
|
3734
|
+
|
3735
|
+
_leave.call(_this6);
|
3465
3736
|
};
|
3466
3737
|
|
3467
|
-
var
|
3468
|
-
|
3469
|
-
|
3470
|
-
|
3471
|
-
|
3738
|
+
var onDelegateShow = function onDelegateShow(event) {
|
3739
|
+
if (closest(event.target, _this6.options.target)) {
|
3740
|
+
_enter.call(_this6, event);
|
3741
|
+
}
|
3742
|
+
};
|
3472
3743
|
|
3473
|
-
|
3744
|
+
var onDelegateHide = function onDelegateHide(event) {
|
3745
|
+
if (closest(event.target, _this6.options.target)) {
|
3746
|
+
_leave.call(_this6);
|
3747
|
+
}
|
3474
3748
|
};
|
3475
3749
|
|
3476
3750
|
return {
|
3477
|
-
|
3478
|
-
|
3479
|
-
|
3751
|
+
onTrigger: onTrigger,
|
3752
|
+
onMouseLeave: onMouseLeave,
|
3753
|
+
onBlur: onBlur,
|
3754
|
+
onDelegateShow: onDelegateShow,
|
3755
|
+
onDelegateHide: onDelegateHide
|
3480
3756
|
};
|
3481
3757
|
}
|
3482
3758
|
|
3483
|
-
var idCounter = 1;
|
3484
|
-
|
3485
3759
|
/**
|
3486
|
-
* Creates
|
3487
|
-
* @
|
3488
|
-
* @
|
3489
|
-
|
3490
|
-
|
3491
|
-
|
3492
|
-
|
3493
|
-
return els.reduce(function (a, el) {
|
3494
|
-
var id = idCounter;
|
3495
|
-
|
3496
|
-
var settings = _this.settings.performance ? _this.settings : getIndividualSettings(el, _this.settings);
|
3497
|
-
// animateFill is disabled if an arrow is true
|
3498
|
-
if (settings.arrow) settings.animateFill = false;
|
3499
|
-
|
3500
|
-
var html = settings.html,
|
3501
|
-
trigger = settings.trigger,
|
3502
|
-
touchHold = settings.touchHold;
|
3760
|
+
* Creates and returns a new popper instance
|
3761
|
+
* @return {Popper}
|
3762
|
+
* @memberof Tippy
|
3763
|
+
* @private
|
3764
|
+
*/
|
3765
|
+
function _createPopperInstance() {
|
3766
|
+
var _this7 = this;
|
3503
3767
|
|
3768
|
+
var popper = this.popper,
|
3769
|
+
reference = this.reference,
|
3770
|
+
options = this.options;
|
3504
3771
|
|
3505
|
-
|
3506
|
-
|
3772
|
+
var _getInnerElements4 = getInnerElements(popper),
|
3773
|
+
tooltip = _getInnerElements4.tooltip;
|
3507
3774
|
|
3508
|
-
|
3509
|
-
el.setAttribute('aria-describedby', 'tippy-tooltip-' + id);
|
3510
|
-
removeTitle(el);
|
3775
|
+
var popperOptions = options.popperOptions;
|
3511
3776
|
|
3512
|
-
|
3513
|
-
|
3777
|
+
var arrowSelector = options.arrowType === 'round' ? selectors.ROUND_ARROW : selectors.ARROW;
|
3778
|
+
var arrow = tooltip.querySelector(arrowSelector);
|
3514
3779
|
|
3515
|
-
|
3780
|
+
var config = _extends({
|
3781
|
+
placement: options.placement
|
3782
|
+
}, popperOptions || {}, {
|
3783
|
+
modifiers: _extends({}, popperOptions ? popperOptions.modifiers : {}, {
|
3784
|
+
arrow: _extends({
|
3785
|
+
element: arrowSelector
|
3786
|
+
}, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.arrow : {}),
|
3787
|
+
flip: _extends({
|
3788
|
+
enabled: options.flip,
|
3789
|
+
padding: options.distance + 5 /* 5px from viewport boundary */
|
3790
|
+
, behavior: options.flipBehavior
|
3791
|
+
}, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.flip : {}),
|
3792
|
+
offset: _extends({
|
3793
|
+
offset: options.offset
|
3794
|
+
}, popperOptions && popperOptions.modifiers ? popperOptions.modifiers.offset : {})
|
3795
|
+
}),
|
3796
|
+
onCreate: function onCreate() {
|
3797
|
+
tooltip.style[getPopperPlacement(popper)] = getOffsetDistanceInPx(options.distance);
|
3516
3798
|
|
3517
|
-
|
3518
|
-
|
3519
|
-
|
3799
|
+
if (arrow && options.arrowTransform) {
|
3800
|
+
computeArrowTransform(popper, arrow, options.arrowTransform);
|
3801
|
+
}
|
3802
|
+
},
|
3803
|
+
onUpdate: function onUpdate() {
|
3804
|
+
var styles = tooltip.style;
|
3805
|
+
styles.top = '';
|
3806
|
+
styles.bottom = '';
|
3807
|
+
styles.left = '';
|
3808
|
+
styles.right = '';
|
3809
|
+
styles[getPopperPlacement(popper)] = getOffsetDistanceInPx(options.distance);
|
3520
3810
|
|
3521
|
-
|
3522
|
-
|
3523
|
-
|
3524
|
-
|
3525
|
-
|
3526
|
-
listeners: listeners,
|
3527
|
-
tippyInstance: _this
|
3528
|
-
});
|
3811
|
+
if (arrow && options.arrowTransform) {
|
3812
|
+
computeArrowTransform(popper, arrow, options.arrowTransform);
|
3813
|
+
}
|
3814
|
+
}
|
3815
|
+
});
|
3529
3816
|
|
3530
|
-
|
3817
|
+
_addMutationObserver.call(this, {
|
3818
|
+
target: popper,
|
3819
|
+
callback: function callback() {
|
3820
|
+
_this7.popperInstance.update();
|
3821
|
+
},
|
3822
|
+
options: {
|
3823
|
+
childList: true,
|
3824
|
+
subtree: true,
|
3825
|
+
characterData: true
|
3826
|
+
}
|
3827
|
+
});
|
3531
3828
|
|
3532
|
-
|
3533
|
-
}, []);
|
3829
|
+
return new Popper(reference, popper, config);
|
3534
3830
|
}
|
3535
3831
|
|
3536
|
-
/* Utility functions */
|
3537
|
-
/* Core library functions */
|
3538
3832
|
/**
|
3539
|
-
*
|
3540
|
-
* @param {
|
3541
|
-
|
3542
|
-
|
3543
|
-
|
3544
|
-
|
3545
|
-
|
3546
|
-
classCallCheck$1(this, Tippy);
|
3547
|
-
|
3548
|
-
// Use default browser tooltip on unsupported browsers
|
3549
|
-
if (!Browser.SUPPORTED) return;
|
3833
|
+
* Appends the popper element to the DOM, updating or creating the popper instance
|
3834
|
+
* @param {Function} callback
|
3835
|
+
* @memberof Tippy
|
3836
|
+
* @private
|
3837
|
+
*/
|
3838
|
+
function _mount(callback) {
|
3839
|
+
var options = this.options;
|
3550
3840
|
|
3551
|
-
// DOM is presumably mostly ready (for document.body) by instantiation time
|
3552
|
-
init();
|
3553
3841
|
|
3554
|
-
|
3555
|
-
|
3556
|
-
|
3842
|
+
if (!this.popperInstance) {
|
3843
|
+
this.popperInstance = _createPopperInstance.call(this);
|
3844
|
+
if (!options.livePlacement) {
|
3845
|
+
this.popperInstance.disableEventListeners();
|
3846
|
+
}
|
3847
|
+
} else {
|
3848
|
+
this.popperInstance.scheduleUpdate();
|
3849
|
+
if (options.livePlacement && !_hasFollowCursorBehavior.call(this)) {
|
3850
|
+
this.popperInstance.enableEventListeners();
|
3851
|
+
}
|
3852
|
+
}
|
3557
3853
|
|
3558
|
-
|
3854
|
+
// If the instance previously had followCursor behavior, it will be positioned incorrectly
|
3855
|
+
// if triggered by `focus` afterwards - update the reference back to the real DOM element
|
3856
|
+
if (!_hasFollowCursorBehavior.call(this)) {
|
3857
|
+
var _getInnerElements5 = getInnerElements(this.popper),
|
3858
|
+
arrow = _getInnerElements5.arrow;
|
3559
3859
|
|
3560
|
-
|
3860
|
+
if (arrow) arrow.style.margin = '';
|
3861
|
+
this.popperInstance.reference = this.reference;
|
3862
|
+
}
|
3561
3863
|
|
3562
|
-
|
3563
|
-
// as it better indicates it's a callback function
|
3564
|
-
this.callbacks = {
|
3565
|
-
wait: settings.wait,
|
3566
|
-
show: settings.onShow || settings.show || noop,
|
3567
|
-
shown: settings.onShown || settings.shown || noop,
|
3568
|
-
hide: settings.onHide || settings.hide || noop,
|
3569
|
-
hidden: settings.onHidden || settings.hidden || noop
|
3570
|
-
};
|
3864
|
+
updatePopperPosition(this.popperInstance, callback, true);
|
3571
3865
|
|
3572
|
-
|
3573
|
-
|
3866
|
+
if (!options.appendTo.contains(this.popper)) {
|
3867
|
+
options.appendTo.appendChild(this.popper);
|
3574
3868
|
}
|
3869
|
+
}
|
3575
3870
|
|
3576
|
-
|
3577
|
-
|
3578
|
-
|
3579
|
-
|
3580
|
-
|
3581
|
-
|
3582
|
-
|
3583
|
-
|
3584
|
-
|
3585
|
-
value: function getPopperElement(el) {
|
3586
|
-
try {
|
3587
|
-
return find(this.store, function (refData) {
|
3588
|
-
return refData.el === el;
|
3589
|
-
}).popper;
|
3590
|
-
} catch (e) {
|
3591
|
-
console.error('[getPopperElement]: Element passed as the argument does not exist in the instance');
|
3592
|
-
}
|
3593
|
-
}
|
3594
|
-
|
3595
|
-
/**
|
3596
|
-
* Returns a popper's reference element
|
3597
|
-
* @param {Element} popper
|
3598
|
-
* @return {Element}
|
3599
|
-
*/
|
3871
|
+
/**
|
3872
|
+
* Clears the show and hide delay timeouts
|
3873
|
+
* @memberof Tippy
|
3874
|
+
* @private
|
3875
|
+
*/
|
3876
|
+
function _clearDelayTimeouts() {
|
3877
|
+
var _ref = this._(key),
|
3878
|
+
showTimeout = _ref.showTimeout,
|
3879
|
+
hideTimeout = _ref.hideTimeout;
|
3600
3880
|
|
3601
|
-
|
3602
|
-
|
3603
|
-
|
3604
|
-
try {
|
3605
|
-
return find(this.store, function (refData) {
|
3606
|
-
return refData.popper === popper;
|
3607
|
-
}).el;
|
3608
|
-
} catch (e) {
|
3609
|
-
console.error('[getReferenceElement]: Popper passed as the argument does not exist in the instance');
|
3610
|
-
}
|
3611
|
-
}
|
3881
|
+
clearTimeout(showTimeout);
|
3882
|
+
clearTimeout(hideTimeout);
|
3883
|
+
}
|
3612
3884
|
|
3613
|
-
|
3614
|
-
|
3615
|
-
|
3616
|
-
|
3617
|
-
|
3885
|
+
/**
|
3886
|
+
* Sets the mousemove event listener function for `followCursor` option
|
3887
|
+
* @memberof Tippy
|
3888
|
+
* @private
|
3889
|
+
*/
|
3890
|
+
function _setFollowCursorListener() {
|
3891
|
+
var _this8 = this;
|
3892
|
+
|
3893
|
+
this._(key).followCursorListener = function (event) {
|
3894
|
+
var _$lastMouseMoveEvent = _this8._(key).lastMouseMoveEvent = event,
|
3895
|
+
clientX = _$lastMouseMoveEvent.clientX,
|
3896
|
+
clientY = _$lastMouseMoveEvent.clientY;
|
3897
|
+
|
3898
|
+
if (!_this8.popperInstance) return;
|
3899
|
+
|
3900
|
+
_this8.popperInstance.reference = {
|
3901
|
+
getBoundingClientRect: function getBoundingClientRect() {
|
3902
|
+
return {
|
3903
|
+
width: 0,
|
3904
|
+
height: 0,
|
3905
|
+
top: clientY,
|
3906
|
+
left: clientX,
|
3907
|
+
right: clientX,
|
3908
|
+
bottom: clientY
|
3909
|
+
};
|
3910
|
+
},
|
3911
|
+
clientWidth: 0,
|
3912
|
+
clientHeight: 0
|
3913
|
+
};
|
3618
3914
|
|
3619
|
-
|
3620
|
-
|
3621
|
-
|
3622
|
-
return find(this.store, function (refData) {
|
3623
|
-
return refData.el === x || refData.popper === x;
|
3624
|
-
});
|
3625
|
-
}
|
3915
|
+
_this8.popperInstance.scheduleUpdate();
|
3916
|
+
};
|
3917
|
+
}
|
3626
3918
|
|
3627
|
-
|
3628
|
-
|
3629
|
-
|
3630
|
-
|
3631
|
-
|
3919
|
+
/**
|
3920
|
+
* Updates the popper's position on each animation frame
|
3921
|
+
* @memberof Tippy
|
3922
|
+
* @private
|
3923
|
+
*/
|
3924
|
+
function _makeSticky() {
|
3925
|
+
var _this9 = this;
|
3632
3926
|
|
3633
|
-
|
3634
|
-
|
3635
|
-
|
3636
|
-
var _this = this;
|
3927
|
+
var applyTransitionDuration$$1 = function applyTransitionDuration$$1() {
|
3928
|
+
_this9.popper.style[prefix('transitionDuration')] = _this9.options.updateDuration + 'ms';
|
3929
|
+
};
|
3637
3930
|
|
3638
|
-
|
3931
|
+
var removeTransitionDuration = function removeTransitionDuration() {
|
3932
|
+
_this9.popper.style[prefix('transitionDuration')] = '';
|
3933
|
+
};
|
3639
3934
|
|
3640
|
-
|
3935
|
+
var updatePosition = function updatePosition() {
|
3936
|
+
if (_this9.popperInstance) {
|
3937
|
+
_this9.popperInstance.update();
|
3938
|
+
}
|
3641
3939
|
|
3642
|
-
|
3643
|
-
return refData.popper === popper;
|
3644
|
-
});
|
3645
|
-
var tooltip = popper.querySelector(Selectors.TOOLTIP);
|
3646
|
-
var circle = popper.querySelector(Selectors.CIRCLE);
|
3647
|
-
var content = popper.querySelector(Selectors.CONTENT);
|
3648
|
-
|
3649
|
-
var el = refData.el,
|
3650
|
-
_refData$settings = refData.settings,
|
3651
|
-
appendTo = _refData$settings.appendTo,
|
3652
|
-
sticky = _refData$settings.sticky,
|
3653
|
-
interactive = _refData$settings.interactive,
|
3654
|
-
followCursor = _refData$settings.followCursor,
|
3655
|
-
flipDuration = _refData$settings.flipDuration,
|
3656
|
-
duration = _refData$settings.duration,
|
3657
|
-
dynamicTitle = _refData$settings.dynamicTitle;
|
3658
|
-
|
3659
|
-
|
3660
|
-
if (dynamicTitle) {
|
3661
|
-
var title = el.getAttribute('title');
|
3662
|
-
if (title) {
|
3663
|
-
content.innerHTML = title;
|
3664
|
-
removeTitle(el);
|
3665
|
-
}
|
3666
|
-
}
|
3940
|
+
applyTransitionDuration$$1();
|
3667
3941
|
|
3668
|
-
|
3942
|
+
if (_this9.state.visible) {
|
3943
|
+
requestAnimationFrame(updatePosition);
|
3944
|
+
} else {
|
3945
|
+
removeTransitionDuration();
|
3946
|
+
}
|
3947
|
+
};
|
3669
3948
|
|
3670
|
-
|
3671
|
-
|
3949
|
+
updatePosition();
|
3950
|
+
}
|
3672
3951
|
|
3673
|
-
|
3952
|
+
/**
|
3953
|
+
* Adds a mutation observer to an element and stores it in the instance
|
3954
|
+
* @param {Object}
|
3955
|
+
* @memberof Tippy
|
3956
|
+
* @private
|
3957
|
+
*/
|
3958
|
+
function _addMutationObserver(_ref2) {
|
3959
|
+
var target = _ref2.target,
|
3960
|
+
callback = _ref2.callback,
|
3961
|
+
options = _ref2.options;
|
3674
3962
|
|
3675
|
-
|
3676
|
-
popper.setAttribute('aria-hidden', 'false');
|
3963
|
+
if (!window.MutationObserver) return;
|
3677
3964
|
|
3678
|
-
|
3679
|
-
|
3680
|
-
if (!isVisible(popper)) return;
|
3965
|
+
var observer = new MutationObserver(callback);
|
3966
|
+
observer.observe(target, options);
|
3681
3967
|
|
3682
|
-
|
3683
|
-
|
3684
|
-
if (!followCursor || Browser.touch) {
|
3685
|
-
refData.popperInstance.update();
|
3686
|
-
}
|
3968
|
+
this._(key).mutationObservers.push(observer);
|
3969
|
+
}
|
3687
3970
|
|
3688
|
-
|
3689
|
-
|
3690
|
-
|
3691
|
-
|
3692
|
-
|
3971
|
+
/**
|
3972
|
+
* Fires the callback functions once the CSS transition ends for `show` and `hide` methods
|
3973
|
+
* @param {Number} duration
|
3974
|
+
* @param {Function} callback - callback function to fire once transition completes
|
3975
|
+
* @memberof Tippy
|
3976
|
+
* @private
|
3977
|
+
*/
|
3978
|
+
function _onTransitionEnd(duration, callback) {
|
3979
|
+
// Make callback synchronous if duration is 0
|
3980
|
+
if (!duration) {
|
3981
|
+
return callback();
|
3982
|
+
}
|
3693
3983
|
|
3694
|
-
|
3695
|
-
|
3984
|
+
var _getInnerElements6 = getInnerElements(this.popper),
|
3985
|
+
tooltip = _getInnerElements6.tooltip;
|
3696
3986
|
|
3697
|
-
|
3698
|
-
|
3987
|
+
var toggleListeners = function toggleListeners(action, listener) {
|
3988
|
+
if (!listener) return;
|
3989
|
+
tooltip[action + 'EventListener']('ontransitionend' in window ? 'transitionend' : 'webkitTransitionEnd', listener);
|
3990
|
+
};
|
3699
3991
|
|
3700
|
-
|
3701
|
-
|
3992
|
+
var listener = function listener(e) {
|
3993
|
+
if (e.target === tooltip) {
|
3994
|
+
toggleListeners('remove', listener);
|
3995
|
+
callback();
|
3996
|
+
}
|
3997
|
+
};
|
3702
3998
|
|
3703
|
-
|
3704
|
-
|
3999
|
+
toggleListeners('remove', this._(key).transitionendListener);
|
4000
|
+
toggleListeners('add', listener);
|
3705
4001
|
|
3706
|
-
|
3707
|
-
|
3708
|
-
list.remove('leave');
|
3709
|
-
list.add('enter');
|
3710
|
-
});
|
4002
|
+
this._(key).transitionendListener = listener;
|
4003
|
+
}
|
3711
4004
|
|
3712
|
-
|
3713
|
-
onTransitionEnd(refData, _duration, function () {
|
3714
|
-
if (!isVisible(popper) || refData._onShownFired) return;
|
4005
|
+
var idCounter = 1;
|
3715
4006
|
|
3716
|
-
|
3717
|
-
|
4007
|
+
/**
|
4008
|
+
* Creates tooltips for each reference element
|
4009
|
+
* @param {Element[]} els
|
4010
|
+
* @param {Object} config
|
4011
|
+
* @return {Tippy[]} Array of Tippy instances
|
4012
|
+
*/
|
4013
|
+
function createTooltips(els, config) {
|
4014
|
+
return els.reduce(function (acc, reference) {
|
4015
|
+
var id = idCounter;
|
3718
4016
|
|
3719
|
-
|
3720
|
-
tooltip.classList.add('tippy-notransition');
|
4017
|
+
var options = evaluateOptions(reference, config.performance ? config : getIndividualOptions(reference, config));
|
3721
4018
|
|
3722
|
-
|
3723
|
-
refData._onShownFired = true;
|
4019
|
+
var title = reference.getAttribute('title');
|
3724
4020
|
|
3725
|
-
|
3726
|
-
|
3727
|
-
|
4021
|
+
// Don't create an instance when:
|
4022
|
+
// * the `title` attribute is falsy (null or empty string), and
|
4023
|
+
// * it's not a delegate for tooltips, and
|
4024
|
+
// * there is no html template specified, and
|
4025
|
+
// * `dynamicTitle` option is false
|
4026
|
+
if (!title && !options.target && !options.html && !options.dynamicTitle) {
|
4027
|
+
return acc;
|
3728
4028
|
}
|
3729
4029
|
|
3730
|
-
|
3731
|
-
|
3732
|
-
* @param {Element} popper
|
3733
|
-
* @param {Number} customDuration (optional)
|
3734
|
-
*/
|
3735
|
-
|
3736
|
-
}, {
|
3737
|
-
key: 'hide',
|
3738
|
-
value: function hide(popper, customDuration) {
|
3739
|
-
var _this2 = this;
|
4030
|
+
// Delegates should be highlighted as different
|
4031
|
+
reference.setAttribute(options.target ? 'data-tippy-delegate' : 'data-tippy', '');
|
3740
4032
|
|
3741
|
-
|
4033
|
+
removeTitle(reference);
|
3742
4034
|
|
3743
|
-
|
4035
|
+
var popper = createPopperElement(id, title, options);
|
3744
4036
|
|
3745
|
-
|
3746
|
-
|
3747
|
-
|
3748
|
-
|
3749
|
-
|
3750
|
-
|
4037
|
+
var tippy = new Tippy({
|
4038
|
+
id: id,
|
4039
|
+
reference: reference,
|
4040
|
+
popper: popper,
|
4041
|
+
options: options,
|
4042
|
+
title: title,
|
4043
|
+
popperInstance: null
|
4044
|
+
});
|
3751
4045
|
|
3752
|
-
|
3753
|
-
|
3754
|
-
|
3755
|
-
|
3756
|
-
interactive = _refData$settings2.interactive,
|
3757
|
-
followCursor = _refData$settings2.followCursor,
|
3758
|
-
html = _refData$settings2.html,
|
3759
|
-
trigger = _refData$settings2.trigger,
|
3760
|
-
duration = _refData$settings2.duration;
|
4046
|
+
if (options.createPopperInstanceOnInit) {
|
4047
|
+
tippy.popperInstance = _createPopperInstance.call(tippy);
|
4048
|
+
tippy.popperInstance.disableEventListeners();
|
4049
|
+
}
|
3761
4050
|
|
4051
|
+
var listeners = _getEventListeners.call(tippy);
|
4052
|
+
tippy.listeners = options.trigger.trim().split(' ').reduce(function (acc, eventType) {
|
4053
|
+
return acc.concat(createTrigger(eventType, reference, listeners, options));
|
4054
|
+
}, []);
|
4055
|
+
|
4056
|
+
// Update tooltip content whenever the title attribute on the reference changes
|
4057
|
+
if (options.dynamicTitle) {
|
4058
|
+
_addMutationObserver.call(tippy, {
|
4059
|
+
target: reference,
|
4060
|
+
callback: function callback() {
|
4061
|
+
var _getInnerElements = getInnerElements(popper),
|
4062
|
+
content = _getInnerElements.content;
|
4063
|
+
|
4064
|
+
var title = reference.getAttribute('title');
|
4065
|
+
if (title) {
|
4066
|
+
content[options.allowTitleHTML ? 'innerHTML' : 'textContent'] = tippy.title = title;
|
4067
|
+
removeTitle(reference);
|
4068
|
+
}
|
4069
|
+
},
|
4070
|
+
|
4071
|
+
options: {
|
4072
|
+
attributes: true
|
4073
|
+
}
|
4074
|
+
});
|
4075
|
+
}
|
3762
4076
|
|
3763
|
-
|
4077
|
+
// Shortcuts
|
4078
|
+
reference._tippy = tippy;
|
4079
|
+
popper._tippy = tippy;
|
4080
|
+
popper._reference = reference;
|
3764
4081
|
|
3765
|
-
|
3766
|
-
interactive && el.classList.remove('active');
|
4082
|
+
acc.push(tippy);
|
3767
4083
|
|
3768
|
-
|
3769
|
-
popper.setAttribute('aria-hidden', 'true');
|
4084
|
+
idCounter++;
|
3770
4085
|
|
3771
|
-
|
4086
|
+
return acc;
|
4087
|
+
}, []);
|
4088
|
+
}
|
3772
4089
|
|
3773
|
-
|
4090
|
+
/**
|
4091
|
+
* Hides all poppers
|
4092
|
+
* @param {Tippy} excludeTippy - tippy to exclude if needed
|
4093
|
+
*/
|
4094
|
+
function hideAllPoppers(excludeTippy) {
|
4095
|
+
var poppers = toArray(document.querySelectorAll(selectors.POPPER));
|
3774
4096
|
|
3775
|
-
|
3776
|
-
|
3777
|
-
|
3778
|
-
list.add('leave');
|
3779
|
-
});
|
4097
|
+
poppers.forEach(function (popper) {
|
4098
|
+
var tippy = popper._tippy;
|
4099
|
+
if (!tippy) return;
|
3780
4100
|
|
3781
|
-
|
3782
|
-
// and the tooltipped element IS in the viewport (otherwise it causes unsightly scrolling
|
3783
|
-
// if the tooltip is closed and the element isn't in the viewport anymore)
|
3784
|
-
if (html && trigger.indexOf('click') !== -1 && elementIsInViewport(el)) {
|
3785
|
-
el.focus();
|
3786
|
-
}
|
4101
|
+
var options = tippy.options;
|
3787
4102
|
|
3788
|
-
// Wait for transitions to complete
|
3789
|
-
onTransitionEnd(refData, _duration, function () {
|
3790
|
-
if (isVisible(popper) || !appendTo.contains(popper)) return;
|
3791
4103
|
|
3792
|
-
|
4104
|
+
if ((options.hideOnClick === true || options.trigger.indexOf('focus') > -1) && (!excludeTippy || popper !== excludeTippy.popper)) {
|
4105
|
+
tippy.hide();
|
4106
|
+
}
|
4107
|
+
});
|
4108
|
+
}
|
3793
4109
|
|
3794
|
-
|
4110
|
+
/**
|
4111
|
+
* Adds the needed event listeners
|
4112
|
+
*/
|
4113
|
+
function bindEventListeners() {
|
4114
|
+
var onDocumentTouch = function onDocumentTouch() {
|
4115
|
+
if (browser.usingTouch) return;
|
3795
4116
|
|
3796
|
-
|
4117
|
+
browser.usingTouch = true;
|
3797
4118
|
|
3798
|
-
|
3799
|
-
|
4119
|
+
if (browser.iOS) {
|
4120
|
+
document.body.classList.add('tippy-touch');
|
3800
4121
|
}
|
3801
4122
|
|
3802
|
-
|
3803
|
-
|
3804
|
-
|
3805
|
-
*/
|
4123
|
+
if (browser.dynamicInputDetection && window.performance) {
|
4124
|
+
document.addEventListener('mousemove', onDocumentMouseMove);
|
4125
|
+
}
|
3806
4126
|
|
3807
|
-
|
3808
|
-
|
3809
|
-
value: function update(popper) {
|
3810
|
-
if (this.state.destroyed) return;
|
4127
|
+
browser.onUserInputChange('touch');
|
4128
|
+
};
|
3811
4129
|
|
3812
|
-
|
3813
|
-
|
3814
|
-
});
|
3815
|
-
var content = popper.querySelector(Selectors.CONTENT);
|
3816
|
-
var el = refData.el,
|
3817
|
-
html = refData.settings.html;
|
4130
|
+
var onDocumentMouseMove = function () {
|
4131
|
+
var time = void 0;
|
3818
4132
|
|
4133
|
+
return function () {
|
4134
|
+
var now = performance.now();
|
3819
4135
|
|
3820
|
-
|
3821
|
-
|
3822
|
-
|
4136
|
+
// Chrome 60+ is 1 mousemove per animation frame, use 20ms time difference
|
4137
|
+
if (now - time < 20) {
|
4138
|
+
browser.usingTouch = false;
|
4139
|
+
document.removeEventListener('mousemove', onDocumentMouseMove);
|
4140
|
+
if (!browser.iOS) {
|
4141
|
+
document.body.classList.remove('tippy-touch');
|
4142
|
+
}
|
4143
|
+
browser.onUserInputChange('mouse');
|
3823
4144
|
}
|
3824
4145
|
|
3825
|
-
|
4146
|
+
time = now;
|
4147
|
+
};
|
4148
|
+
}();
|
3826
4149
|
|
3827
|
-
|
4150
|
+
var onDocumentClick = function onDocumentClick(event) {
|
4151
|
+
// Simulated events dispatched on the document
|
4152
|
+
if (!(event.target instanceof Element)) {
|
4153
|
+
return hideAllPoppers();
|
3828
4154
|
}
|
3829
4155
|
|
3830
|
-
|
3831
|
-
|
3832
|
-
* @param {Element} popper
|
3833
|
-
* @param {Boolean} _isLast - private param used by destroyAll to optimize
|
3834
|
-
*/
|
3835
|
-
|
3836
|
-
}, {
|
3837
|
-
key: 'destroy',
|
3838
|
-
value: function destroy(popper, _isLast) {
|
3839
|
-
var _this3 = this;
|
4156
|
+
var reference = closest(event.target, selectors.REFERENCE);
|
4157
|
+
var popper = closest(event.target, selectors.POPPER);
|
3840
4158
|
|
3841
|
-
|
4159
|
+
if (popper && popper._tippy && popper._tippy.options.interactive) {
|
4160
|
+
return;
|
4161
|
+
}
|
3842
4162
|
|
3843
|
-
|
3844
|
-
|
3845
|
-
});
|
4163
|
+
if (reference && reference._tippy) {
|
4164
|
+
var options = reference._tippy.options;
|
3846
4165
|
|
3847
|
-
var
|
3848
|
-
|
3849
|
-
listeners = refData.listeners,
|
3850
|
-
_mutationObserver = refData._mutationObserver;
|
4166
|
+
var isClickTrigger = options.trigger.indexOf('click') > -1;
|
4167
|
+
var isMultiple = options.multiple;
|
3851
4168
|
|
3852
|
-
//
|
4169
|
+
// Hide all poppers except the one belonging to the element that was clicked
|
4170
|
+
if (!isMultiple && browser.usingTouch || !isMultiple && isClickTrigger) {
|
4171
|
+
return hideAllPoppers(reference._tippy);
|
4172
|
+
}
|
3853
4173
|
|
3854
|
-
if (
|
3855
|
-
|
4174
|
+
if (options.hideOnClick !== true || isClickTrigger) {
|
4175
|
+
return;
|
3856
4176
|
}
|
4177
|
+
}
|
3857
4178
|
|
3858
|
-
|
3859
|
-
|
3860
|
-
return el.removeEventListener(listener.event, listener.handler);
|
3861
|
-
});
|
4179
|
+
hideAllPoppers();
|
4180
|
+
};
|
3862
4181
|
|
3863
|
-
|
3864
|
-
|
4182
|
+
var onWindowBlur = function onWindowBlur() {
|
4183
|
+
var _document = document,
|
4184
|
+
el = _document.activeElement;
|
3865
4185
|
|
3866
|
-
|
3867
|
-
el.
|
3868
|
-
|
4186
|
+
if (el && el.blur && matches$1.call(el, selectors.REFERENCE)) {
|
4187
|
+
el.blur();
|
4188
|
+
}
|
4189
|
+
};
|
3869
4190
|
|
3870
|
-
|
3871
|
-
|
4191
|
+
var onWindowResize = function onWindowResize() {
|
4192
|
+
toArray(document.querySelectorAll(selectors.POPPER)).forEach(function (popper) {
|
4193
|
+
var tippyInstance = popper._tippy;
|
4194
|
+
if (tippyInstance && !tippyInstance.options.livePlacement) {
|
4195
|
+
tippyInstance.popperInstance.scheduleUpdate();
|
4196
|
+
}
|
4197
|
+
});
|
4198
|
+
};
|
3872
4199
|
|
3873
|
-
|
3874
|
-
|
3875
|
-
|
3876
|
-
|
4200
|
+
document.addEventListener('click', onDocumentClick);
|
4201
|
+
document.addEventListener('touchstart', onDocumentTouch);
|
4202
|
+
window.addEventListener('blur', onWindowBlur);
|
4203
|
+
window.addEventListener('resize', onWindowResize);
|
3877
4204
|
|
3878
|
-
|
3879
|
-
|
3880
|
-
|
3881
|
-
|
3882
|
-
});
|
3883
|
-
}
|
3884
|
-
}
|
4205
|
+
if (!browser.supportsTouch && (navigator.maxTouchPoints || navigator.msMaxTouchPoints)) {
|
4206
|
+
document.addEventListener('pointerdown', onDocumentTouch);
|
4207
|
+
}
|
4208
|
+
}
|
3885
4209
|
|
3886
|
-
|
3887
|
-
* Destroys all tooltips created by the instance
|
3888
|
-
*/
|
4210
|
+
var eventListenersBound = false;
|
3889
4211
|
|
3890
|
-
|
3891
|
-
|
3892
|
-
|
3893
|
-
|
4212
|
+
/**
|
4213
|
+
* Exported module
|
4214
|
+
* @param {String|Element|Element[]|NodeList|Object} selector
|
4215
|
+
* @param {Object} options
|
4216
|
+
* @param {Boolean} one - create one tooltip
|
4217
|
+
* @return {Object}
|
4218
|
+
*/
|
4219
|
+
function tippy$1(selector, options, one) {
|
4220
|
+
if (browser.supported && !eventListenersBound) {
|
4221
|
+
bindEventListeners();
|
4222
|
+
eventListenersBound = true;
|
4223
|
+
}
|
3894
4224
|
|
3895
|
-
|
4225
|
+
if (isObjectLiteral(selector)) {
|
4226
|
+
polyfillVirtualReferenceProps(selector);
|
4227
|
+
}
|
3896
4228
|
|
3897
|
-
|
4229
|
+
options = _extends({}, defaults, options);
|
3898
4230
|
|
3899
|
-
|
3900
|
-
|
4231
|
+
var references = getArrayOfElements(selector);
|
4232
|
+
var firstReference = references[0];
|
3901
4233
|
|
3902
|
-
|
4234
|
+
return {
|
4235
|
+
selector: selector,
|
4236
|
+
options: options,
|
4237
|
+
tooltips: browser.supported ? createTooltips(one && firstReference ? [firstReference] : references, options) : [],
|
4238
|
+
destroyAll: function destroyAll() {
|
4239
|
+
this.tooltips.forEach(function (tooltip) {
|
4240
|
+
return tooltip.destroy();
|
3903
4241
|
});
|
3904
|
-
|
3905
|
-
this.store = null;
|
3906
|
-
this.state.destroyed = true;
|
4242
|
+
this.tooltips = [];
|
3907
4243
|
}
|
3908
|
-
}
|
3909
|
-
return Tippy;
|
3910
|
-
}();
|
3911
|
-
|
3912
|
-
function tippy$2(selector, settings) {
|
3913
|
-
return new Tippy(selector, settings);
|
4244
|
+
};
|
3914
4245
|
}
|
3915
4246
|
|
3916
|
-
tippy$
|
3917
|
-
tippy$
|
3918
|
-
tippy$
|
3919
|
-
|
4247
|
+
tippy$1.version = version;
|
4248
|
+
tippy$1.browser = browser;
|
4249
|
+
tippy$1.defaults = defaults;
|
4250
|
+
tippy$1.one = function (selector, options) {
|
4251
|
+
return tippy$1(selector, options, true).tooltips[0];
|
3920
4252
|
};
|
3921
|
-
tippy$
|
3922
|
-
|
4253
|
+
tippy$1.disableAnimations = function () {
|
4254
|
+
defaults.updateDuration = defaults.duration = 0;
|
4255
|
+
defaults.animateFill = false;
|
3923
4256
|
};
|
3924
4257
|
|
3925
|
-
return tippy$
|
4258
|
+
return tippy$1;
|
3926
4259
|
|
3927
4260
|
})));
|