aboutsummaryrefslogtreecommitdiffstats
path: root/npm_assets/node_modules/popper.js/src/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'npm_assets/node_modules/popper.js/src/index.js')
-rw-r--r--npm_assets/node_modules/popper.js/src/index.js154
1 files changed, 154 insertions, 0 deletions
diff --git a/npm_assets/node_modules/popper.js/src/index.js b/npm_assets/node_modules/popper.js/src/index.js
new file mode 100644
index 0000000..3f37a06
--- /dev/null
+++ b/npm_assets/node_modules/popper.js/src/index.js
@@ -0,0 +1,154 @@
+// Utils
+import debounce from './utils/debounce';
+import isFunction from './utils/isFunction';
+
+// Methods
+import update from './methods/update';
+import destroy from './methods/destroy';
+import enableEventListeners from './methods/enableEventListeners';
+import disableEventListeners from './methods/disableEventListeners';
+import Defaults from './methods/defaults';
+import placements from './methods/placements';
+
+export default class Popper {
+ /**
+ * Creates a new Popper.js instance.
+ * @class Popper
+ * @param {Element|referenceObject} reference - The reference element used to position the popper
+ * @param {Element} popper - The HTML / XML element used as the popper
+ * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)
+ * @return {Object} instance - The generated Popper.js instance
+ */
+ constructor(reference, popper, options = {}) {
+ // make update() debounced, so that it only runs at most once-per-tick
+ this.update = debounce(this.update.bind(this));
+
+ // with {} we create a new object with the options inside it
+ this.options = { ...Popper.Defaults, ...options };
+
+ // init state
+ this.state = {
+ isDestroyed: false,
+ isCreated: false,
+ scrollParents: [],
+ };
+
+ // get reference and popper elements (allow jQuery wrappers)
+ this.reference = reference && reference.jquery ? reference[0] : reference;
+ this.popper = popper && popper.jquery ? popper[0] : popper;
+
+ // Deep merge modifiers options
+ this.options.modifiers = {};
+ Object.keys({
+ ...Popper.Defaults.modifiers,
+ ...options.modifiers,
+ }).forEach(name => {
+ this.options.modifiers[name] = {
+ // If it's a built-in modifier, use it as base
+ ...(Popper.Defaults.modifiers[name] || {}),
+ // If there are custom options, override and merge with default ones
+ ...(options.modifiers ? options.modifiers[name] : {}),
+ };
+ });
+
+ // Refactoring modifiers' list (Object => Array)
+ this.modifiers = Object.keys(this.options.modifiers)
+ .map(name => ({
+ name,
+ ...this.options.modifiers[name],
+ }))
+ // sort the modifiers by order
+ .sort((a, b) => a.order - b.order);
+
+ // modifiers have the ability to execute arbitrary code when Popper.js get inited
+ // such code is executed in the same order of its modifier
+ // they could add new properties to their options configuration
+ // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!
+ this.modifiers.forEach(modifierOptions => {
+ if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {
+ modifierOptions.onLoad(
+ this.reference,
+ this.popper,
+ this.options,
+ modifierOptions,
+ this.state
+ );
+ }
+ });
+
+ // fire the first update to position the popper in the right place
+ this.update();
+
+ const eventsEnabled = this.options.eventsEnabled;
+ if (eventsEnabled) {
+ // setup event listeners, they will take care of update the position in specific situations
+ this.enableEventListeners();
+ }
+
+ this.state.eventsEnabled = eventsEnabled;
+ }
+
+ // We can't use class properties because they don't get listed in the
+ // class prototype and break stuff like Sinon stubs
+ update() {
+ return update.call(this);
+ }
+ destroy() {
+ return destroy.call(this);
+ }
+ enableEventListeners() {
+ return enableEventListeners.call(this);
+ }
+ disableEventListeners() {
+ return disableEventListeners.call(this);
+ }
+
+ /**
+ * Schedules an update. It will run on the next UI update available.
+ * @method scheduleUpdate
+ * @memberof Popper
+ */
+ scheduleUpdate = () => requestAnimationFrame(this.update);
+
+ /**
+ * Collection of utilities useful when writing custom modifiers.
+ * Starting from version 1.7, this method is available only if you
+ * include `popper-utils.js` before `popper.js`.
+ *
+ * **DEPRECATION**: This way to access PopperUtils is deprecated
+ * and will be removed in v2! Use the PopperUtils module directly instead.
+ * Due to the high instability of the methods contained in Utils, we can't
+ * guarantee them to follow semver. Use them at your own risk!
+ * @static
+ * @private
+ * @type {Object}
+ * @deprecated since version 1.8
+ * @member Utils
+ * @memberof Popper
+ */
+ static Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;
+
+ static placements = placements;
+
+ static Defaults = Defaults;
+}
+
+/**
+ * The `referenceObject` is an object that provides an interface compatible with Popper.js
+ * and lets you use it as replacement of a real DOM node.<br />
+ * You can use this method to position a popper relatively to a set of coordinates
+ * in case you don't have a DOM node to use as reference.
+ *
+ * ```
+ * new Popper(referenceObject, popperNode);
+ * ```
+ *
+ * NB: This feature isn't supported in Internet Explorer 10.
+ * @name referenceObject
+ * @property {Function} data.getBoundingClientRect
+ * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.
+ * @property {number} data.clientWidth
+ * An ES6 getter that will return the width of the virtual reference element.
+ * @property {number} data.clientHeight
+ * An ES6 getter that will return the height of the virtual reference element.
+ */