Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'js/dist/tooltip.js')
-rw-r--r--js/dist/tooltip.js432
1 files changed, 299 insertions, 133 deletions
diff --git a/js/dist/tooltip.js b/js/dist/tooltip.js
index 2351fe6e07..cbeb8d33c2 100644
--- a/js/dist/tooltip.js
+++ b/js/dist/tooltip.js
@@ -4,14 +4,16 @@
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/
(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) :
- typeof define === 'function' && define.amd ? define(['jquery', 'popper.js', './util.js'], factory) :
- (global = global || self, global.Tooltip = factory(global.jQuery, global.Popper, global.Util));
-}(this, function ($, Popper, Util) { 'use strict';
-
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/eventHandler.js'), require('./dom/manipulator.js'), require('popper.js'), require('./dom/selectorEngine.js')) :
+ typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/eventHandler.js', './dom/manipulator.js', 'popper.js', './dom/selectorEngine.js'], factory) :
+ (global = global || self, global.Tooltip = factory(global.Data, global.EventHandler, global.Manipulator, global.Popper, global.SelectorEngine));
+}(this, function (Data, EventHandler, Manipulator, Popper, SelectorEngine) { 'use strict';
+
+ Data = Data && Data.hasOwnProperty('default') ? Data['default'] : Data;
+ EventHandler = EventHandler && EventHandler.hasOwnProperty('default') ? EventHandler['default'] : EventHandler;
+ Manipulator = Manipulator && Manipulator.hasOwnProperty('default') ? Manipulator['default'] : Manipulator;
Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
+ SelectorEngine = SelectorEngine && SelectorEngine.hasOwnProperty('default') ? SelectorEngine['default'] : SelectorEngine;
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
@@ -65,12 +67,178 @@
/**
* --------------------------------------------------------------------------
- * Bootstrap (v4.3.1): tools/sanitizer.js
+ * Bootstrap (v4.3.1): util/index.js
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * --------------------------------------------------------------------------
+ */
+ var MAX_UID = 1000000;
+ var MILLISECONDS_MULTIPLIER = 1000;
+ var TRANSITION_END = 'transitionend';
+ var jQuery = window.jQuery; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
+
+ var toType = function toType(obj) {
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
+ };
+ /**
+ * --------------------------------------------------------------------------
+ * Public Util Api
+ * --------------------------------------------------------------------------
+ */
+
+
+ var getUID = function getUID(prefix) {
+ do {
+ // eslint-disable-next-line no-bitwise
+ prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
+ } while (document.getElementById(prefix));
+
+ return prefix;
+ };
+
+ var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
+ if (!element) {
+ return 0;
+ } // Get transition-duration of the element
+
+
+ var _window$getComputedSt = window.getComputedStyle(element),
+ transitionDuration = _window$getComputedSt.transitionDuration,
+ transitionDelay = _window$getComputedSt.transitionDelay;
+
+ var floatTransitionDuration = parseFloat(transitionDuration);
+ var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
+
+ if (!floatTransitionDuration && !floatTransitionDelay) {
+ return 0;
+ } // If multiple durations are defined, take the first
+
+
+ transitionDuration = transitionDuration.split(',')[0];
+ transitionDelay = transitionDelay.split(',')[0];
+ return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
+ };
+
+ var triggerTransitionEnd = function triggerTransitionEnd(element) {
+ element.dispatchEvent(new Event(TRANSITION_END));
+ };
+
+ var isElement = function isElement(obj) {
+ return (obj[0] || obj).nodeType;
+ };
+
+ var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
+ var called = false;
+ var durationPadding = 5;
+ var emulatedDuration = duration + durationPadding;
+
+ function listener() {
+ called = true;
+ element.removeEventListener(TRANSITION_END, listener);
+ }
+
+ element.addEventListener(TRANSITION_END, listener);
+ setTimeout(function () {
+ if (!called) {
+ triggerTransitionEnd(element);
+ }
+ }, emulatedDuration);
+ };
+
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
+ Object.keys(configTypes).forEach(function (property) {
+ var expectedTypes = configTypes[property];
+ var value = config[property];
+ var valueType = value && isElement(value) ? 'element' : toType(value);
+
+ if (!new RegExp(expectedTypes).test(valueType)) {
+ throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
+ }
+ });
+ };
+
+ var makeArray = function makeArray(nodeList) {
+ if (!nodeList) {
+ return [];
+ }
+
+ return [].slice.call(nodeList);
+ };
+
+ var findShadowRoot = function findShadowRoot(element) {
+ if (!document.documentElement.attachShadow) {
+ return null;
+ } // Can find the shadow root otherwise it'll return the document
+
+
+ if (typeof element.getRootNode === 'function') {
+ var root = element.getRootNode();
+ return root instanceof ShadowRoot ? root : null;
+ }
+
+ if (element instanceof ShadowRoot) {
+ return element;
+ } // when we don't find a shadow root
+
+
+ if (!element.parentNode) {
+ return null;
+ }
+
+ return findShadowRoot(element.parentNode);
+ }; // eslint-disable-next-line no-empty-function
+
+
+ var noop = function noop() {
+ return function () {};
+ };
+
+ /**
+ * --------------------------------------------------------------------------
+ * Bootstrap (v4.3.1): util/sanitizer.js
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* --------------------------------------------------------------------------
*/
var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
+ /**
+ * A pattern that recognizes a commonly useful subset of URLs that are safe.
+ *
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+ */
+
+ var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
+ /**
+ * A pattern that matches safe data URLs. Only matches image, video and audio types.
+ *
+ * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
+ */
+
+ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
+
+ var allowedAttribute = function allowedAttribute(attr, allowedAttributeList) {
+ var attrName = attr.nodeName.toLowerCase();
+
+ if (allowedAttributeList.indexOf(attrName) !== -1) {
+ if (uriAttrs.indexOf(attrName) !== -1) {
+ return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
+ }
+
+ return true;
+ }
+
+ var regExp = allowedAttributeList.filter(function (attrRegex) {
+ return attrRegex instanceof RegExp;
+ }); // Check if a regular expression validates the attribute.
+
+ for (var i = 0, l = regExp.length; i < l; i++) {
+ if (attrName.match(regExp[i])) {
+ return true;
+ }
+ }
+
+ return false;
+ };
+
var DefaultWhitelist = {
// Global attributes allowed on any supplied element below.
'*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
@@ -103,48 +271,9 @@
strong: [],
u: [],
ul: []
- /**
- * A pattern that recognizes a commonly useful subset of URLs that are safe.
- *
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
- */
-
};
- var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;
- /**
- * A pattern that matches safe data URLs. Only matches image, video and audio types.
- *
- * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts
- */
-
- var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;
-
- function allowedAttribute(attr, allowedAttributeList) {
- var attrName = attr.nodeName.toLowerCase();
-
- if (allowedAttributeList.indexOf(attrName) !== -1) {
- if (uriAttrs.indexOf(attrName) !== -1) {
- return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));
- }
-
- return true;
- }
-
- var regExp = allowedAttributeList.filter(function (attrRegex) {
- return attrRegex instanceof RegExp;
- }); // Check if a regular expression validates the attribute.
-
- for (var i = 0, l = regExp.length; i < l; i++) {
- if (attrName.match(regExp[i])) {
- return true;
- }
- }
-
- return false;
- }
-
function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
- if (unsafeHtml.length === 0) {
+ if (!unsafeHtml.length) {
return unsafeHtml;
}
@@ -155,18 +284,18 @@
var domParser = new window.DOMParser();
var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
var whitelistKeys = Object.keys(whiteList);
- var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
+ var elements = makeArray(createdDocument.body.querySelectorAll('*'));
var _loop = function _loop(i, len) {
var el = elements[i];
var elName = el.nodeName.toLowerCase();
- if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
+ if (whitelistKeys.indexOf(elName) === -1) {
el.parentNode.removeChild(el);
return "continue";
}
- var attributeList = [].slice.call(el.attributes);
+ var attributeList = makeArray(el.attributes);
var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
attributeList.forEach(function (attr) {
if (!allowedAttribute(attr, whitelistedAttributes)) {
@@ -194,7 +323,6 @@
var VERSION = '4.3.1';
var DATA_KEY = 'bs.tooltip';
var EVENT_KEY = "." + DATA_KEY;
- var JQUERY_NO_CONFLICT = $.fn[NAME];
var CLASS_PREFIX = 'bs-tooltip';
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
@@ -224,7 +352,7 @@
};
var Default = {
animation: true,
- template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>',
+ template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div></div>',
trigger: 'hover focus',
title: '',
delay: 0,
@@ -243,7 +371,7 @@
SHOW: 'show',
OUT: 'out'
};
- var Event = {
+ var Event$1 = {
HIDE: "hide" + EVENT_KEY,
HIDDEN: "hidden" + EVENT_KEY,
SHOW: "show" + EVENT_KEY,
@@ -262,7 +390,7 @@
var Selector = {
TOOLTIP: '.tooltip',
TOOLTIP_INNER: '.tooltip-inner',
- ARROW: '.arrow'
+ TOOLTIP_ARROW: '.tooltip-arrow'
};
var Trigger = {
HOVER: 'hover',
@@ -286,7 +414,7 @@
* Popper - https://popper.js.org
*/
if (typeof Popper === 'undefined') {
- throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)');
+ throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org)');
} // private
@@ -301,6 +429,8 @@
this.tip = null;
this._setListeners();
+
+ Data.setData(element, this.constructor.DATA_KEY, this);
} // Getters
@@ -326,11 +456,11 @@
if (event) {
var dataKey = this.constructor.DATA_KEY;
- var context = $(event.currentTarget).data(dataKey);
+ var context = Data.getData(event.delegateTarget, dataKey);
if (!context) {
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
- $(event.currentTarget).data(dataKey, context);
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
+ Data.setData(event.delegateTarget, dataKey, context);
}
context._activeTrigger.click = !context._activeTrigger.click;
@@ -341,7 +471,7 @@
context._leave(null, context);
}
} else {
- if ($(this.getTipElement()).hasClass(ClassName.SHOW)) {
+ if (this.getTipElement().classList.contains(ClassName.SHOW)) {
this._leave(null, this);
return;
@@ -353,12 +483,12 @@
_proto.dispose = function dispose() {
clearTimeout(this._timeout);
- $.removeData(this.element, this.constructor.DATA_KEY);
- $(this.element).off(this.constructor.EVENT_KEY);
- $(this.element).closest('.modal').off('hide.bs.modal');
+ Data.removeData(this.element, this.constructor.DATA_KEY);
+ EventHandler.off(this.element, this.constructor.EVENT_KEY);
+ EventHandler.off(SelectorEngine.closest(this.element, '.modal'), 'hide.bs.modal');
if (this.tip) {
- $(this.tip).remove();
+ this.tip.parentNode.removeChild(this.tip);
}
this._isEnabled = null;
@@ -379,29 +509,27 @@
_proto.show = function show() {
var _this = this;
- if ($(this.element).css('display') === 'none') {
+ if (this.element.style.display === 'none') {
throw new Error('Please use show on visible elements');
}
- var showEvent = $.Event(this.constructor.Event.SHOW);
-
if (this.isWithContent() && this._isEnabled) {
- $(this.element).trigger(showEvent);
- var shadowRoot = Util.findShadowRoot(this.element);
- var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
+ var showEvent = EventHandler.trigger(this.element, this.constructor.Event.SHOW);
+ var shadowRoot = findShadowRoot(this.element);
+ var isInTheDom = shadowRoot !== null ? shadowRoot.contains(this.element) : this.element.ownerDocument.documentElement.contains(this.element);
- if (showEvent.isDefaultPrevented() || !isInTheDom) {
+ if (showEvent.defaultPrevented || !isInTheDom) {
return;
}
var tip = this.getTipElement();
- var tipId = Util.getUID(this.constructor.NAME);
+ var tipId = getUID(this.constructor.NAME);
tip.setAttribute('id', tipId);
this.element.setAttribute('aria-describedby', tipId);
this.setContent();
if (this.config.animation) {
- $(tip).addClass(ClassName.FADE);
+ tip.classList.add(ClassName.FADE);
}
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
@@ -412,13 +540,13 @@
var container = this._getContainer();
- $(tip).data(this.constructor.DATA_KEY, this);
+ Data.setData(tip, this.constructor.DATA_KEY, this);
- if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {
- $(tip).appendTo(container);
+ if (!this.element.ownerDocument.documentElement.contains(this.tip)) {
+ container.appendChild(tip);
}
- $(this.element).trigger(this.constructor.Event.INSERTED);
+ EventHandler.trigger(this.element, this.constructor.Event.INSERTED);
this._popper = new Popper(this.element, tip, {
placement: attachment,
modifiers: {
@@ -427,7 +555,7 @@
behavior: this.config.fallbackPlacement
},
arrow: {
- element: Selector.ARROW
+ element: Selector.TOOLTIP_ARROW
},
preventOverflow: {
boundariesElement: this.config.boundary
@@ -442,13 +570,15 @@
return _this._handlePopperPlacementChange(data);
}
});
- $(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra
+ tip.classList.add(ClassName.SHOW); // If this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
// only needed because of broken event delegation on iOS
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
if ('ontouchstart' in document.documentElement) {
- $(document.body).children().on('mouseover', null, $.noop);
+ makeArray(document.body.children).forEach(function (element) {
+ EventHandler.on(element, 'mouseover', noop());
+ });
}
var complete = function complete() {
@@ -458,16 +588,17 @@
var prevHoverState = _this._hoverState;
_this._hoverState = null;
- $(_this.element).trigger(_this.constructor.Event.SHOWN);
+ EventHandler.trigger(_this.element, _this.constructor.Event.SHOWN);
if (prevHoverState === HoverState.OUT) {
_this._leave(null, _this);
}
};
- if ($(this.tip).hasClass(ClassName.FADE)) {
- var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
- $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+ if (this.tip.classList.contains(ClassName.FADE)) {
+ var transitionDuration = getTransitionDurationFromElement(this.tip);
+ EventHandler.one(this.tip, TRANSITION_END, complete);
+ emulateTransitionEnd(this.tip, transitionDuration);
} else {
complete();
}
@@ -478,7 +609,6 @@
var _this2 = this;
var tip = this.getTipElement();
- var hideEvent = $.Event(this.constructor.Event.HIDE);
var complete = function complete() {
if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {
@@ -489,7 +619,7 @@
_this2.element.removeAttribute('aria-describedby');
- $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);
+ EventHandler.trigger(_this2.element, _this2.constructor.Event.HIDDEN);
if (_this2._popper !== null) {
_this2._popper.destroy();
@@ -500,26 +630,29 @@
}
};
- $(this.element).trigger(hideEvent);
+ var hideEvent = EventHandler.trigger(this.element, this.constructor.Event.HIDE);
- if (hideEvent.isDefaultPrevented()) {
+ if (hideEvent.defaultPrevented) {
return;
}
- $(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
+ tip.classList.remove(ClassName.SHOW); // If this is a touch-enabled device we remove the extra
// empty mouseover listeners we added for iOS support
if ('ontouchstart' in document.documentElement) {
- $(document.body).children().off('mouseover', null, $.noop);
+ makeArray(document.body.children).forEach(function (element) {
+ return EventHandler.off(element, 'mouseover', noop);
+ });
}
this._activeTrigger[Trigger.CLICK] = false;
this._activeTrigger[Trigger.FOCUS] = false;
this._activeTrigger[Trigger.HOVER] = false;
- if ($(this.tip).hasClass(ClassName.FADE)) {
- var transitionDuration = Util.getTransitionDurationFromElement(tip);
- $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
+ if (this.tip.classList.contains(ClassName.FADE)) {
+ var transitionDuration = getTransitionDurationFromElement(tip);
+ EventHandler.one(tip, TRANSITION_END, complete);
+ emulateTransitionEnd(tip, transitionDuration);
} else {
complete();
}
@@ -539,29 +672,45 @@
};
_proto.addAttachmentClass = function addAttachmentClass(attachment) {
- $(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
+ this.getTipElement().classList.add(CLASS_PREFIX + "-" + attachment);
};
_proto.getTipElement = function getTipElement() {
- this.tip = this.tip || $(this.config.template)[0];
+ if (this.tip) {
+ return this.tip;
+ }
+
+ var element = document.createElement('div');
+ element.innerHTML = this.config.template;
+ this.tip = element.children[0];
return this.tip;
};
_proto.setContent = function setContent() {
var tip = this.getTipElement();
- this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle());
- $(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW);
+ this.setElementContent(SelectorEngine.findOne(Selector.TOOLTIP_INNER, tip), this.getTitle());
+ tip.classList.remove(ClassName.FADE);
+ tip.classList.remove(ClassName.SHOW);
};
- _proto.setElementContent = function setElementContent($element, content) {
+ _proto.setElementContent = function setElementContent(element, content) {
+ if (element === null) {
+ return;
+ }
+
if (typeof content === 'object' && (content.nodeType || content.jquery)) {
- // Content is a DOM node or a jQuery
+ if (content.jquery) {
+ content = content[0];
+ } // content is a DOM node or a jQuery
+
+
if (this.config.html) {
- if (!$(content).parent().is($element)) {
- $element.empty().append(content);
+ if (content.parentNode !== element) {
+ element.innerHTML = '';
+ element.appendChild(content);
}
} else {
- $element.text($(content).text());
+ element.innerText = content.textContent;
}
return;
@@ -572,9 +721,9 @@
content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
}
- $element.html(content);
+ element.innerHTML = content;
} else {
- $element.text(content);
+ element.innerText = content;
}
};
@@ -611,11 +760,11 @@
return document.body;
}
- if (Util.isElement(this.config.container)) {
- return $(this.config.container);
+ if (isElement(this.config.container)) {
+ return this.config.container;
}
- return $(document).find(this.config.container);
+ return SelectorEngine.findOne(this.config.container);
};
_proto._getAttachment = function _getAttachment(placement) {
@@ -628,20 +777,21 @@
var triggers = this.config.trigger.split(' ');
triggers.forEach(function (trigger) {
if (trigger === 'click') {
- $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
+ EventHandler.on(_this4.element, _this4.constructor.Event.CLICK, _this4.config.selector, function (event) {
return _this4.toggle(event);
});
} else if (trigger !== Trigger.MANUAL) {
var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;
var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;
- $(_this4.element).on(eventIn, _this4.config.selector, function (event) {
+ EventHandler.on(_this4.element, eventIn, _this4.config.selector, function (event) {
return _this4._enter(event);
- }).on(eventOut, _this4.config.selector, function (event) {
+ });
+ EventHandler.on(_this4.element, eventOut, _this4.config.selector, function (event) {
return _this4._leave(event);
});
}
});
- $(this.element).closest('.modal').on('hide.bs.modal', function () {
+ EventHandler.on(SelectorEngine.closest(this.element, '.modal'), 'hide.bs.modal', function () {
if (_this4.element) {
_this4.hide();
}
@@ -668,18 +818,18 @@
_proto._enter = function _enter(event, context) {
var dataKey = this.constructor.DATA_KEY;
- context = context || $(event.currentTarget).data(dataKey);
+ context = context || Data.getData(event.delegateTarget, dataKey);
if (!context) {
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
- $(event.currentTarget).data(dataKey, context);
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
+ Data.setData(event.delegateTarget, dataKey, context);
}
if (event) {
context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;
}
- if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
+ if (context.getTipElement().classList.contains(ClassName.SHOW) || context._hoverState === HoverState.SHOW) {
context._hoverState = HoverState.SHOW;
return;
}
@@ -701,11 +851,11 @@
_proto._leave = function _leave(event, context) {
var dataKey = this.constructor.DATA_KEY;
- context = context || $(event.currentTarget).data(dataKey);
+ context = context || Data.getData(event.delegateTarget, dataKey);
if (!context) {
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
- $(event.currentTarget).data(dataKey, context);
+ context = new this.constructor(event.delegateTarget, this._getDelegateConfig());
+ Data.setData(event.delegateTarget, dataKey, context);
}
if (event) {
@@ -742,12 +892,17 @@
};
_proto._getConfig = function _getConfig(config) {
- var dataAttributes = $(this.element).data();
+ var dataAttributes = Manipulator.getDataAttributes(this.element);
Object.keys(dataAttributes).forEach(function (dataAttr) {
if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
delete dataAttributes[dataAttr];
}
});
+
+ if (config && typeof config.container === 'object' && config.container.jquery) {
+ config.container = config.container[0];
+ }
+
config = _objectSpread({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
if (typeof config.delay === 'number') {
@@ -765,7 +920,7 @@
config.content = config.content.toString();
}
- Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
+ typeCheckConfig(NAME, config, this.constructor.DefaultType);
if (config.sanitize) {
config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
@@ -789,11 +944,15 @@
};
_proto._cleanTipClass = function _cleanTipClass() {
- var $tip = $(this.getTipElement());
- var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
+ var tip = this.getTipElement();
+ var tabClass = tip.getAttribute('class').match(BSCLS_PREFIX_REGEX);
if (tabClass !== null && tabClass.length) {
- $tip.removeClass(tabClass.join(''));
+ tabClass.map(function (token) {
+ return token.trim();
+ }).forEach(function (tClass) {
+ return tip.classList.remove(tClass);
+ });
}
};
@@ -814,7 +973,7 @@
return;
}
- $(tip).removeClass(ClassName.FADE);
+ tip.classList.remove(ClassName.FADE);
this.config.animation = false;
this.hide();
this.show();
@@ -824,7 +983,7 @@
Tooltip._jQueryInterface = function _jQueryInterface(config) {
return this.each(function () {
- var data = $(this).data(DATA_KEY);
+ var data = Data.getData(this, DATA_KEY);
var _config = typeof config === 'object' && config;
@@ -834,7 +993,6 @@
if (!data) {
data = new Tooltip(this, _config);
- $(this).data(DATA_KEY, data);
}
if (typeof config === 'string') {
@@ -847,6 +1005,10 @@
});
};
+ Tooltip._getInstance = function _getInstance(element) {
+ return Data.getData(element, DATA_KEY);
+ };
+
_createClass(Tooltip, null, [{
key: "VERSION",
get: function get() {
@@ -870,7 +1032,7 @@
}, {
key: "Event",
get: function get() {
- return Event;
+ return Event$1;
}
}, {
key: "EVENT_KEY",
@@ -890,16 +1052,20 @@
* ------------------------------------------------------------------------
* jQuery
* ------------------------------------------------------------------------
+ * add .tooltip to jQuery only if jQuery is present
*/
- $.fn[NAME] = Tooltip._jQueryInterface;
- $.fn[NAME].Constructor = Tooltip;
+ if (typeof jQuery !== 'undefined') {
+ var JQUERY_NO_CONFLICT = jQuery.fn[NAME];
+ jQuery.fn[NAME] = Tooltip._jQueryInterface;
+ jQuery.fn[NAME].Constructor = Tooltip;
- $.fn[NAME].noConflict = function () {
- $.fn[NAME] = JQUERY_NO_CONFLICT;
- return Tooltip._jQueryInterface;
- };
+ jQuery.fn[NAME].noConflict = function () {
+ jQuery.fn[NAME] = JQUERY_NO_CONFLICT;
+ return Tooltip._jQueryInterface;
+ };
+ }
return Tooltip;