diff options
Diffstat (limited to 'js/dist/tooltip.js')
-rw-r--r-- | js/dist/tooltip.js | 432 |
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; |