From a58febf71a5eac2161ce2db08c7d723755ed1163 Mon Sep 17 00:00:00 2001 From: fat Date: Tue, 12 May 2015 14:28:11 -0700 Subject: popover passing as well --- js/dist/popover.js | 189 ++++++++++++++++ js/dist/popover.js.map | 1 + js/dist/scrollspy.js | 2 +- js/dist/scrollspy.js.map | 2 +- js/dist/tooltip.js | 221 ++++++++----------- js/dist/tooltip.js.map | 2 +- js/popover.js | 108 --------- js/src/popover.js | 178 +++++++++++++++ js/src/scrollspy.js | 2 +- js/src/tooltip.js | 191 +++++++--------- js/tests/index.html | 10 +- js/tests/unit/popover.js | 25 +-- js/tests/unit/tooltip.js | 16 +- js/tests/visual/popover.html | 10 +- js/tooltip.js | 514 ------------------------------------------- 15 files changed, 570 insertions(+), 901 deletions(-) create mode 100644 js/dist/popover.js create mode 100644 js/dist/popover.js.map delete mode 100644 js/popover.js create mode 100644 js/src/popover.js delete mode 100644 js/tooltip.js (limited to 'js') diff --git a/js/dist/popover.js b/js/dist/popover.js new file mode 100644 index 000000000..d6c3a3594 --- /dev/null +++ b/js/dist/popover.js @@ -0,0 +1,189 @@ +'use strict'; + +var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) subClass.__proto__ = superClass; } + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +var Popover = (function ($) { + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + var NAME = 'popover'; + var VERSION = '4.0.0'; + var DATA_KEY = 'bs.popover'; + var JQUERY_NO_CONFLICT = $.fn[NAME]; + + var Default = $.extend({}, Tooltip.Default, { + placement: 'right', + trigger: 'click', + content: '', + template: '' + }); + + var ClassName = { + FADE: 'fade', + IN: 'in' + }; + + var Selector = { + TITLE: '.popover-title', + CONTENT: '.popover-content', + ARROW: '.popover-arrow' + }; + + var Event = { + HIDE: 'hide.bs.popover', + HIDDEN: 'hidden.bs.popover', + SHOW: 'show.bs.popover', + SHOWN: 'shown.bs.popover', + INSERTED: 'inserted.bs.popover', + CLICK: 'click.bs.popover', + FOCUSIN: 'focusin.bs.popover', + FOCUSOUT: 'focusout.bs.popover', + MOUSEENTER: 'mouseenter.bs.popover', + MOUSELEAVE: 'mouseleave.bs.popover' + }; + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + var Popover = (function (_Tooltip) { + function Popover() { + _classCallCheck(this, Popover); + + if (_Tooltip != null) { + _Tooltip.apply(this, arguments); + } + } + + _inherits(Popover, _Tooltip); + + _createClass(Popover, [{ + key: 'isWithContent', + + // overrides + + value: function isWithContent() { + return this.getTitle() || this._getContent(); + } + }, { + key: 'getTipElement', + value: function getTipElement() { + return this.tip = this.tip || $(this.config['template'])[0]; + } + }, { + key: 'setContent', + value: function setContent() { + var tip = this.getTipElement(); + var title = this.getTitle(); + var content = this._getContent(); + var titleElement = $(tip).find(Selector.TITLE)[0]; + + if (titleElement) { + titleElement[this.config.html ? 'innerHTML' : 'innerText'] = title; + } + + // we use append for html objects to maintain js events + $(tip).find(Selector.CONTENT).children().detach().end()[this.config.html ? typeof content === 'string' ? 'html' : 'append' : 'text'](content); + + $(tip).removeClass(ClassName.FADE).removeClass(ClassName.IN); + + this.cleanupTether(); + } + }, { + key: '_getContent', + + // private + + value: function _getContent() { + return this.element.getAttribute('data-content') || (typeof this.config.content == 'function' ? this.config.content.call(this.element) : this.config.content); + } + }], [{ + key: 'VERSION', + + // getters + + get: function () { + return VERSION; + } + }, { + key: 'Default', + get: function () { + return Default; + } + }, { + key: 'NAME', + get: function () { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function () { + return DATA_KEY; + } + }, { + key: 'Event', + get: function () { + return Event; + } + }, { + key: '_jQueryInterface', + + // static + + value: function _jQueryInterface(config) { + return this.each(function () { + var data = $(this).data(DATA_KEY); + var _config = typeof config === 'object' ? config : null; + + if (!data && /destroy|hide/.test(config)) { + return; + } + + if (!data) { + data = new Popover(this, _config); + $(this).data(DATA_KEY, data); + } + + if (typeof config === 'string') { + data[config](); + } + }); + } + }]); + + return Popover; + })(Tooltip); + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Popover._jQueryInterface; + $.fn[NAME].Constructor = Popover; + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT; + return Popover._jQueryInterface; + }; + + return Popover; +})(jQuery); +//# sourceMappingURL=popover.js.map \ No newline at end of file diff --git a/js/dist/popover.js.map b/js/dist/popover.js.map new file mode 100644 index 000000000..c6865e239 --- /dev/null +++ b/js/dist/popover.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["js/src/popover.js"],"names":[],"mappings":"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","file":"js/src/popover.js","sourcesContent":["import Tooltip from './tooltip'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Popover = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'popover'\n const VERSION = '4.0.0'\n const DATA_KEY = 'bs.popover'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = $.extend({}, Tooltip.Default, {\n placement : 'right',\n trigger : 'click',\n content : '',\n template : '
'\n + '
'\n + '

'\n + '
'\n\t})\n\n const ClassName = {\n FADE : 'fade',\n IN : 'in'\n }\n\n const Selector = {\n TITLE : '.popover-title',\n CONTENT : '.popover-content',\n ARROW : '.popover-arrow'\n }\n\n const Event = {\n HIDE : 'hide.bs.popover',\n HIDDEN : 'hidden.bs.popover',\n SHOW : 'show.bs.popover',\n SHOWN : 'shown.bs.popover',\n INSERTED : 'inserted.bs.popover',\n CLICK : 'click.bs.popover',\n FOCUSIN : 'focusin.bs.popover',\n FOCUSOUT : 'focusout.bs.popover',\n MOUSEENTER : 'mouseenter.bs.popover',\n MOUSELEAVE : 'mouseleave.bs.popover'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Popover extends Tooltip {\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n\n // overrides\n\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n getTipElement() {\n return (this.tip = this.tip || $(this.config['template'])[0])\n }\n\n setContent() {\n let tip = this.getTipElement()\n let title = this.getTitle()\n let content = this._getContent()\n let titleElement = $(tip).find(Selector.TITLE)[0]\n\n if (titleElement) {\n titleElement[\n this.config.html ? 'innerHTML' : 'innerText'\n ] = title\n }\n\n // we use append for html objects to maintain js events\n $(tip).find(Selector.CONTENT).children().detach().end()[\n this.config.html ?\n (typeof content === 'string' ? 'html' : 'append') : 'text'\n ](content)\n\n $(tip)\n .removeClass(ClassName.FADE)\n .removeClass(ClassName.IN)\n\n this.cleanupTether()\n }\n\n // private\n\n _getContent() {\n return this.element.getAttribute('data-content')\n || (typeof this.config.content == 'function' ?\n this.config.content.call(this.element) :\n this.config.content)\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = typeof config === 'object' ? config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n data[config]()\n }\n })\n }\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Popover._jQueryInterface\n $.fn[NAME].Constructor = Popover\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n }\n\n return Popover\n\n})(jQuery)\n\nexport default Popover\n"]} \ No newline at end of file diff --git a/js/dist/scrollspy.js b/js/dist/scrollspy.js index 6bcfe883c..2c530b21b 100644 --- a/js/dist/scrollspy.js +++ b/js/dist/scrollspy.js @@ -57,7 +57,7 @@ var ScrollSpy = (function ($) { _classCallCheck(this, ScrollSpy); this._scrollElement = element.tagName === 'BODY' ? window : element; - this._config = $.extend({}, Defaults, config); + this._config = $.extend({}, Default, config); this._selector = '' + (this._config.target || '') + ' .nav li > a'; this._offsets = []; this._targets = []; diff --git a/js/dist/scrollspy.js.map b/js/dist/scrollspy.js.map index cf1c3ce1a..46c0410a0 100644 --- a/js/dist/scrollspy.js.map +++ b/js/dist/scrollspy.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/src/scrollspy.js"],"names":[],"mappings":"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","file":"js/src/scrollspy.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.0.0'\n const DATA_KEY = 'bs.scrollspy'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10\n }\n\n const Event = {\n ACTIVATE : 'activate.bs.scrollspy',\n SCROLL : 'scroll.bs.scrollspy',\n LOAD : 'load.bs.scrollspy.data-api'\n }\n\n const ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n LI_DROPDOWN : 'li.dropdown',\n LI : 'li'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n\n constructor(element, config) {\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = $.extend({}, Defaults, config)\n this._selector = `${this._config.target || ''} .nav li > a`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, this._process.bind(this))\n\n this.refresh()\n this._process()\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n refresh() {\n let offsetMethod = 'offset'\n let offsetBase = 0\n\n if (this._scrollElement !== this._scrollElement.window) {\n offsetMethod = 'position'\n offsetBase = this._getScrollTop()\n }\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n let targets = $.makeArray($(this._selector))\n\n targets\n .map((element) => {\n let target\n let targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = $(targetSelector)[0]\n }\n\n if (target && (target.offsetWidth || target.offsetHeight)) {\n // todo (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n\n // private\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.scrollY : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _process() {\n let scrollTop = this._getScrollTop() + this._config.offset\n let scrollHeight = this._getScrollHeight()\n let maxScroll = this._config.offset\n + scrollHeight\n - this._scrollElement.offsetHeight\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n let target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0]) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n let isActiveTarget = this._activeTarget !== this._targets[i]\n && scrollTop >= this._offsets[i]\n && (this._offsets[i + 1] === undefined ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let selector =\n `${this._selector}[data-target=\"${target}\"],` +\n `${this._selector}[href=\"${target}\"]`\n\n // todo (fat): getting all the raw li's up the tree is not great.\n let parentListItems = $(selector).parents(Selector.LI)\n\n for (let i = parentListItems.length; i--;) {\n $(parentListItems[i]).addClass(ClassName.ACTIVE)\n\n let itemParent = parentListItems[i].parentNode\n\n if (itemParent && $(itemParent).hasClass(ClassName.DROPDOWN_MENU)) {\n let closestDropdown = $(itemParent)\n .closest(Selector.LI_DROPDOWN)[0]\n $(closestDropdown).addClass(ClassName.ACTIVE)\n }\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n let activeParents = $(this._selector).parentsUntil(\n this._config.target,\n Selector.ACTIVE\n )\n\n for (let i = activeParents.length; i--;) {\n $(activeParents[i]).removeClass(ClassName.ACTIVE)\n }\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = typeof config === 'object' && config || null\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n data[config]()\n }\n })\n }\n\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(window).on(Event.LOAD, function () {\n let scrollSpys = $.makeArray($(Selector.DATA_SPY))\n\n for (let i = scrollSpys.length; i--;) {\n let $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface\n $.fn[NAME].Constructor = ScrollSpy\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n }\n\n return ScrollSpy\n\n})(jQuery)\n\nexport default ScrollSpy\n"]} \ No newline at end of file +{"version":3,"sources":["js/src/scrollspy.js"],"names":[],"mappings":"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","file":"js/src/scrollspy.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ScrollSpy = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'scrollspy'\n const VERSION = '4.0.0'\n const DATA_KEY = 'bs.scrollspy'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n\n const Default = {\n offset : 10\n }\n\n const Event = {\n ACTIVATE : 'activate.bs.scrollspy',\n SCROLL : 'scroll.bs.scrollspy',\n LOAD : 'load.bs.scrollspy.data-api'\n }\n\n const ClassName = {\n DROPDOWN_MENU : 'dropdown-menu',\n ACTIVE : 'active'\n }\n\n const Selector = {\n DATA_SPY : '[data-spy=\"scroll\"]',\n ACTIVE : '.active',\n LI_DROPDOWN : 'li.dropdown',\n LI : 'li'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class ScrollSpy {\n\n constructor(element, config) {\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = $.extend({}, Default, config)\n this._selector = `${this._config.target || ''} .nav li > a`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(Event.SCROLL, this._process.bind(this))\n\n this.refresh()\n this._process()\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n refresh() {\n let offsetMethod = 'offset'\n let offsetBase = 0\n\n if (this._scrollElement !== this._scrollElement.window) {\n offsetMethod = 'position'\n offsetBase = this._getScrollTop()\n }\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n let targets = $.makeArray($(this._selector))\n\n targets\n .map((element) => {\n let target\n let targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = $(targetSelector)[0]\n }\n\n if (target && (target.offsetWidth || target.offsetHeight)) {\n // todo (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n })\n .filter((item) => item)\n .sort((a, b) => a[0] - b[0])\n .forEach((item) => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n\n // private\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.scrollY : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _process() {\n let scrollTop = this._getScrollTop() + this._config.offset\n let scrollHeight = this._getScrollHeight()\n let maxScroll = this._config.offset\n + scrollHeight\n - this._scrollElement.offsetHeight\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n let target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0]) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n let isActiveTarget = this._activeTarget !== this._targets[i]\n && scrollTop >= this._offsets[i]\n && (this._offsets[i + 1] === undefined ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n let selector =\n `${this._selector}[data-target=\"${target}\"],` +\n `${this._selector}[href=\"${target}\"]`\n\n // todo (fat): getting all the raw li's up the tree is not great.\n let parentListItems = $(selector).parents(Selector.LI)\n\n for (let i = parentListItems.length; i--;) {\n $(parentListItems[i]).addClass(ClassName.ACTIVE)\n\n let itemParent = parentListItems[i].parentNode\n\n if (itemParent && $(itemParent).hasClass(ClassName.DROPDOWN_MENU)) {\n let closestDropdown = $(itemParent)\n .closest(Selector.LI_DROPDOWN)[0]\n $(closestDropdown).addClass(ClassName.ACTIVE)\n }\n }\n\n $(this._scrollElement).trigger(Event.ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n let activeParents = $(this._selector).parentsUntil(\n this._config.target,\n Selector.ACTIVE\n )\n\n for (let i = activeParents.length; i--;) {\n $(activeParents[i]).removeClass(ClassName.ACTIVE)\n }\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = typeof config === 'object' && config || null\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n data[config]()\n }\n })\n }\n\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\n $(window).on(Event.LOAD, function () {\n let scrollSpys = $.makeArray($(Selector.DATA_SPY))\n\n for (let i = scrollSpys.length; i--;) {\n let $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n })\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = ScrollSpy._jQueryInterface\n $.fn[NAME].Constructor = ScrollSpy\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n }\n\n return ScrollSpy\n\n})(jQuery)\n\nexport default ScrollSpy\n"]} \ No newline at end of file diff --git a/js/dist/tooltip.js b/js/dist/tooltip.js index 0ff622018..5e9fffcd6 100644 --- a/js/dist/tooltip.js +++ b/js/dist/tooltip.js @@ -6,12 +6,12 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons /** * -------------------------------------------------------------------------- - * Bootstrap (v4.0.0): alert.js + * Bootstrap (v4.0.0): tooltip.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * -------------------------------------------------------------------------- */ -var ToolTip = (function ($) { +var Tooltip = (function ($) { /** * ------------------------------------------------------------------------ @@ -34,33 +34,16 @@ var ToolTip = (function ($) { delay: 0, html: false, selector: false, - attachment: 'top', + placement: 'top', offset: '0 0', constraints: null }; - var HorizontalMirror = { - LEFT: 'right', - CENTER: 'center', - RIGHT: 'left' - }; - - var VerticalMirror = { - TOP: 'bottom', - MIDDLE: 'middle', - BOTTOM: 'top' - }; - - var VerticalDefault = { - LEFT: 'middle', - CENTER: 'bottom', - RIGHT: 'middle' - }; - - var HorizontalDefault = { - TOP: 'center', - MIDDLE: 'left', - BOTTOM: 'center' + var AttachmentMap = { + TOP: 'bottom center', + RIGHT: 'middle left', + BOTTOM: 'top center', + LEFT: 'middle right' }; var HoverState = { @@ -88,13 +71,18 @@ var ToolTip = (function ($) { var Selector = { TOOLTIP: '.tooltip', - TOOLTIP_INNER: '.tooltip-inner', - TOOLTIP_ARROW: '.tooltip-arrow' - }; + TOOLTIP_INNER: '.tooltip-inner' }; var TetherClass = { - 'element': false, - 'enabled': false + element: false, + enabled: false + }; + + var Trigger = { + HOVER: 'hover', + FOCUS: 'focus', + CLICK: 'click', + MANUAL: 'manual' }; /** @@ -112,12 +100,12 @@ var ToolTip = (function ($) { this._timeout = 0; this._hoverState = ''; this._activeTrigger = {}; + this._tether = null; // protected this.element = element; this.config = this._getConfig(config); this.tip = null; - this.tether = null; this._setListeners(); } @@ -144,13 +132,14 @@ var ToolTip = (function ($) { key: 'toggle', value: function toggle(event) { var context = this; + var dataKey = this.constructor.DATA_KEY; if (event) { - context = $(event.currentTarget).data(DATA_KEY); + context = $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(DATA_KEY, context); + $(event.currentTarget).data(dataKey, context); } context._activeTrigger.click = !context._activeTrigger.click; @@ -171,7 +160,13 @@ var ToolTip = (function ($) { clearTimeout(this._timeout); this.hide(function () { - $(_this.element).off(Selector.TOOLTIP).removeData(DATA_KEY); + $(_this.element).off('.' + _this.constructor.NAME).removeData(_this.constructor.DATA_KEY); + + if (_this.tip) { + $(_this.tip).detach(); + } + + _this.tip = null; }); } }, { @@ -179,7 +174,7 @@ var ToolTip = (function ($) { value: function show() { var _this2 = this; - var showEvent = $.Event(Event.SHOW); + var showEvent = $.Event(this.constructor.Event.SHOW); if (this.isWithContent() && this._isEnabled) { $(this.element).trigger(showEvent); @@ -191,7 +186,7 @@ var ToolTip = (function ($) { } var tip = this.getTipElement(); - var tipId = Util.getUID(NAME); + var tipId = Util.getUID(this.constructor.NAME); tip.setAttribute('id', tipId); this.element.setAttribute('aria-describedby', tipId); @@ -202,17 +197,16 @@ var ToolTip = (function ($) { $(tip).addClass(ClassName.FADE); } - var attachment = typeof this.config.attachment === 'function' ? this.config.attachment.call(this, tip, this.element) : this.config.attachment; + var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; - attachment = this.getAttachment(attachment); + var attachment = this._getAttachment(placement); - $(tip).data(DATA_KEY, this); + $(tip).data(this.constructor.DATA_KEY, this).appendTo(document.body); - this.element.parentNode.insertBefore(tip, this.element.nextSibling); - $(this.element).trigger(Event.INSERTED); + $(this.element).trigger(this.constructor.Event.INSERTED); - this.tether = new Tether({ - element: this.tip, + this._tether = new Tether({ + element: tip, target: this.element, attachment: attachment, classes: TetherClass, @@ -222,7 +216,7 @@ var ToolTip = (function ($) { }); Util.reflow(tip); - this.tether.position(); + this._tether.position(); $(tip).addClass(ClassName.IN); @@ -230,7 +224,7 @@ var ToolTip = (function ($) { var prevHoverState = _this2._hoverState; _this2._hoverState = null; - $(_this2.element).trigger(Event.SHOWN); + $(_this2.element).trigger(_this2.constructor.Event.SHOWN); if (prevHoverState === HoverState.OUT) { _this2._leave(null, _this2); @@ -246,14 +240,14 @@ var ToolTip = (function ($) { var _this3 = this; var tip = this.getTipElement(); - var hideEvent = $.Event(Event.HIDE); + var hideEvent = $.Event(this.constructor.Event.HIDE); var complete = function complete() { if (_this3._hoverState !== HoverState.IN && tip.parentNode) { tip.parentNode.removeChild(tip); } _this3.element.removeAttribute('aria-describedby'); - $(_this3.element).trigger(Event.HIDDEN); + $(_this3.element).trigger(_this3.constructor.Event.HIDDEN); _this3.cleanupTether(); if (callback) { @@ -291,63 +285,6 @@ var ToolTip = (function ($) { value: function getTipElement() { return this.tip = this.tip || $(this.config.template)[0]; } - }, { - key: 'getAttachment', - value: function getAttachment(attachmentString) { - var attachmentArray = attachmentString.split(' '); - var normalizedAttachment = {}; - - if (!attachmentArray.length) { - throw new Error('Tooltip requires attachment'); - } - - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = attachmentArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var attachment = _step.value; - - attachment = attachment.toUpperCase(); - - if (HorizontalMirror[attachment]) { - normalizedAttachment.horizontal = HorizontalMirror[attachment]; - } - - if (VerticalMirror[attachment]) { - normalizedAttachment.vertical = VerticalMirror[attachment]; - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator['return']) { - _iterator['return'](); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - - if (!normalizedAttachment.horizontal && !normalizedAttachment.vertical) { - throw new Error('Tooltip requires valid attachment'); - } - - if (!normalizedAttachment.horizontal) { - normalizedAttachment.horizontal = HorizontalDefault[normalizedAttachment.vertical.toUpperCase()]; - } - - if (!normalizedAttachment.vertical) { - normalizedAttachment.vertical = VerticalDefault[normalizedAttachment.horizontal.toUpperCase()]; - } - - return [normalizedAttachment.vertical, normalizedAttachment.horizontal].join(' '); - } }, { key: 'setContent', value: function setContent() { @@ -372,29 +309,29 @@ var ToolTip = (function ($) { return title; } - }, { - key: 'removeTetherClasses', - value: function removeTetherClasses(i, css) { - return ((css.baseVal || css).match(new RegExp('(^|\\s)' + CLASS_PREFIX + '-\\S+', 'g')) || []).join(' '); - } }, { key: 'cleanupTether', value: function cleanupTether() { - if (this.tether) { - this.tether.destroy(); + if (this._tether) { + this._tether.destroy(); // clean up after tether's junk classes // remove after they fix issue // (https://github.com/HubSpot/tether/issues/36) - $(this.element).removeClass(this.removeTetherClasses); - $(this.tip).removeClass(this.removeTetherClasses); + $(this.element).removeClass(this._removeTetherClasses); + $(this.tip).removeClass(this._removeTetherClasses); } } }, { - key: '_setListeners', + key: '_getAttachment', // private + value: function _getAttachment(placement) { + return AttachmentMap[placement.toUpperCase()]; + } + }, { + key: '_setListeners', value: function _setListeners() { var _this4 = this; @@ -402,10 +339,10 @@ var ToolTip = (function ($) { triggers.forEach(function (trigger) { if (trigger === 'click') { - $(_this4.element).on(Event.CLICK, _this4.config.selector, _this4.toggle.bind(_this4)); - } else if (trigger !== 'manual') { - var eventIn = trigger == 'hover' ? Event.MOUSEENTER : Event.FOCUSIN; - var eventOut = trigger == 'hover' ? Event.MOUSELEAVE : Event.FOCUSOUT; + $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, _this4.toggle.bind(_this4)); + } 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, _this4._enter.bind(_this4)).on(eventOut, _this4.config.selector, _this4._leave.bind(_this4)); } @@ -420,6 +357,11 @@ var ToolTip = (function ($) { this._fixTitle(); } } + }, { + key: '_removeTetherClasses', + value: function _removeTetherClasses(i, css) { + return ((css.baseVal || css).match(new RegExp('(^|\\s)' + CLASS_PREFIX + '-\\S+', 'g')) || []).join(' '); + } }, { key: '_fixTitle', value: function _fixTitle() { @@ -432,19 +374,21 @@ var ToolTip = (function ($) { }, { key: '_enter', value: function _enter(event, context) { - context = context || $(event.currentTarget).data(DATA_KEY); + var dataKey = this.constructor.DATA_KEY; + + context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(DATA_KEY, context); + $(event.currentTarget).data(dataKey, context); } if (event) { - context._activeTrigger[event.type == 'focusin' ? 'focus' : 'hover'] = true; + context._activeTrigger[event.type == 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; } - if ($(context.getTipElement()).hasClass('in') || context._hoverState === 'in') { - context._hoverState = 'in'; + if ($(context.getTipElement()).hasClass(ClassName.IN) || context._hoverState === HoverState.IN) { + context._hoverState = HoverState.IN; return; } @@ -466,15 +410,17 @@ var ToolTip = (function ($) { }, { key: '_leave', value: function _leave(event, context) { - context = context || $(event.currentTarget).data(DATA_KEY); + var dataKey = this.constructor.DATA_KEY; + + context = context || $(event.currentTarget).data(dataKey); if (!context) { context = new this.constructor(event.currentTarget, this._getDelegateConfig()); - $(event.currentTarget).data(DATA_KEY, context); + $(event.currentTarget).data(dataKey, context); } if (event) { - context._activeTrigger[event.type == 'focusout' ? 'focus' : 'hover'] = false; + context._activeTrigger[event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; } if (context._isWithActiveTrigger()) { @@ -510,12 +456,12 @@ var ToolTip = (function ($) { }, { key: '_getConfig', value: function _getConfig(config) { - config = $.extend({}, Default, $(this.element).data(), config); + config = $.extend({}, this.constructor.Default, $(this.element).data(), config); if (config.delay && typeof config.delay === 'number') { config.delay = { - 'show': config.delay, - 'hide': config.delay + show: config.delay, + hide: config.delay }; } @@ -529,7 +475,7 @@ var ToolTip = (function ($) { if (this.config) { for (var key in this.config) { var value = this.config[key]; - if (Default[key] !== value) { + if (this.constructor.Default[key] !== value) { config[key] = value; } } @@ -550,6 +496,21 @@ var ToolTip = (function ($) { get: function () { return Default; } + }, { + key: 'NAME', + get: function () { + return NAME; + } + }, { + key: 'DATA_KEY', + get: function () { + return DATA_KEY; + } + }, { + key: 'Event', + get: function () { + return Event; + } }, { key: '_jQueryInterface', diff --git a/js/dist/tooltip.js.map b/js/dist/tooltip.js.map index b1ef80207..089bef4ad 100644 --- a/js/dist/tooltip.js.map +++ b/js/dist/tooltip.js.map @@ -1 +1 @@ -{"version":3,"sources":["js/src/tooltip.js"],"names":[],"mappings":"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","file":"js/src/tooltip.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst ToolTip = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.0.0'\n const DATA_KEY = 'bs.tooltip'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n const CLASS_PREFIX = 'bs-tether'\n\n const Default = {\n animation : true,\n template : '
' +\n '
' +\n '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n attachment : 'top',\n offset : '0 0',\n constraints : null\n }\n\n const HorizontalMirror = {\n LEFT : 'right',\n CENTER : 'center',\n RIGHT : 'left'\n }\n\n const VerticalMirror = {\n TOP : 'bottom',\n MIDDLE : 'middle',\n BOTTOM : 'top'\n }\n\n const VerticalDefault = {\n LEFT : 'middle',\n CENTER : 'bottom',\n RIGHT : 'middle'\n }\n\n const HorizontalDefault = {\n TOP : 'center',\n MIDDLE : 'left',\n BOTTOM : 'center'\n }\n\n const HoverState = {\n IN : 'in',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : 'hide.bs.tooltip',\n HIDDEN : 'hidden.bs.tooltip',\n SHOW : 'show.bs.tooltip',\n SHOWN : 'shown.bs.tooltip',\n INSERTED : 'inserted.bs.tooltip',\n CLICK : 'click.bs.tooltip',\n FOCUSIN : 'focusin.bs.tooltip',\n FOCUSOUT : 'focusout.bs.tooltip',\n MOUSEENTER : 'mouseenter.bs.tooltip',\n MOUSELEAVE : 'mouseleave.bs.tooltip'\n }\n\n const ClassName = {\n FADE : 'fade',\n IN : 'in'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n TOOLTIP_ARROW : '.tooltip-arrow'\n }\n\n const TetherClass = {\n 'element' : false,\n 'enabled' : false\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n\n constructor(element, config) {\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n\n // protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n this.tether = null\n\n this._setListeners()\n\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n\n // public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n let context = this\n\n if (event) {\n context = $(event.currentTarget).data(DATA_KEY)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(DATA_KEY, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n\n } else {\n $(context.getTipElement()).hasClass(ClassName.IN) ?\n context._leave(null, context) :\n context._enter(null, context)\n }\n }\n\n destroy() {\n clearTimeout(this._timeout)\n this.hide(() => {\n $(this.element)\n .off(Selector.TOOLTIP)\n .removeData(DATA_KEY)\n })\n }\n\n show() {\n let showEvent = $.Event(Event.SHOW)\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n let isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n let tip = this.getTipElement()\n let tipId = Util.getUID(NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n let attachment = typeof this.config.attachment === 'function' ?\n this.config.attachment.call(this, tip, this.element) :\n this.config.attachment\n\n attachment = this.getAttachment(attachment)\n\n $(tip).data(DATA_KEY, this)\n\n this.element.parentNode.insertBefore(tip, this.element.nextSibling)\n $(this.element).trigger(Event.INSERTED)\n\n this.tether = new Tether({\n element : this.tip,\n target : this.element,\n attachment : attachment,\n classes : TetherClass,\n classPrefix : CLASS_PREFIX,\n offset : this.config.offset,\n constraints : this.config.constraints\n })\n\n Util.reflow(tip)\n this.tether.position()\n\n $(tip).addClass(ClassName.IN)\n\n let complete = () => {\n let prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE) ?\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(Tooltip._TRANSITION_DURATION) :\n complete()\n }\n }\n\n hide(callback) {\n let tip = this.getTipElement()\n let hideEvent = $.Event(Event.HIDE)\n let complete = () => {\n if (this._hoverState !== HoverState.IN && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(Event.HIDDEN)\n this.cleanupTether()\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.IN)\n\n if (Util.supportsTransitionEnd() &&\n ($(this.tip).hasClass(ClassName.FADE))) {\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n\n // protected\n\n isWithContent() {\n return !!this.getTitle()\n }\n\n getTipElement() {\n return (this.tip = this.tip || $(this.config.template)[0])\n }\n\n getAttachment(attachmentString) {\n let attachmentArray = attachmentString.split(' ')\n let normalizedAttachment = {}\n\n if (!attachmentArray.length) {\n throw new Error('Tooltip requires attachment')\n }\n\n for (let attachment of attachmentArray) {\n attachment = attachment.toUpperCase()\n\n if (HorizontalMirror[attachment]) {\n normalizedAttachment.horizontal = HorizontalMirror[attachment]\n }\n\n if (VerticalMirror[attachment]) {\n normalizedAttachment.vertical = VerticalMirror[attachment]\n }\n }\n\n if (!normalizedAttachment.horizontal &&\n (!normalizedAttachment.vertical)) {\n throw new Error('Tooltip requires valid attachment')\n }\n\n if (!normalizedAttachment.horizontal) {\n normalizedAttachment.horizontal =\n HorizontalDefault[normalizedAttachment.vertical.toUpperCase()]\n }\n\n if (!normalizedAttachment.vertical) {\n normalizedAttachment.vertical =\n VerticalDefault[normalizedAttachment.horizontal.toUpperCase()]\n }\n\n return [\n normalizedAttachment.vertical,\n normalizedAttachment.horizontal\n ].join(' ')\n }\n\n setContent() {\n let tip = this.getTipElement()\n let title = this.getTitle()\n let method = this.config.html ? 'innerHTML' : 'innerText'\n\n $(tip).find(Selector.TOOLTIP_INNER)[0][method] = title\n\n $(tip)\n .removeClass(ClassName.FADE)\n .removeClass(ClassName.IN)\n\n this.cleanupTether()\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n removeTetherClasses(i, css) {\n return ((css.baseVal || css).match(\n new RegExp(`(^|\\\\s)${CLASS_PREFIX}-\\\\S+`, 'g')) || []\n ).join(' ')\n }\n\n cleanupTether() {\n if (this.tether) {\n this.tether.destroy()\n\n // clean up after tether's junk classes\n // remove after they fix issue\n // (https://github.com/HubSpot/tether/issues/36)\n $(this.element).removeClass(this.removeTetherClasses)\n $(this.tip).removeClass(this.removeTetherClasses)\n }\n }\n\n\n // private\n\n _setListeners() {\n let triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n Event.CLICK,\n this.config.selector,\n this.toggle.bind(this)\n )\n\n } else if (trigger !== 'manual') {\n let eventIn = trigger == 'hover' ?\n Event.MOUSEENTER : Event.FOCUSIN\n let eventOut = trigger == 'hover' ?\n Event.MOUSELEAVE : Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n this._enter.bind(this)\n )\n .on(\n eventOut,\n this.config.selector,\n this._leave.bind(this)\n )\n }\n })\n\n if (this.config.selector) {\n this.config = $.extend({}, this.config, {\n trigger : 'manual',\n selector : ''\n })\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n let titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n (titleType !== 'string')) {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n context = context || $(event.currentTarget).data(DATA_KEY)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(DATA_KEY, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type == 'focusin' ? 'focus' : 'hover'\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass('in') ||\n (context._hoverState === 'in')) {\n context._hoverState = 'in'\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.IN\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.IN) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n context = context || $(event.currentTarget).data(DATA_KEY)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(DATA_KEY, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type == 'focusout' ? 'focus' : 'hover'\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (var trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = $.extend({}, Default, $(this.element).data(), config)\n\n if (config.delay && typeof config.delay === 'number') {\n config.delay = {\n 'show': config.delay,\n 'hide': config.delay\n }\n }\n\n return config\n }\n\n _getDelegateConfig() {\n let config = {}\n\n if (this.config) {\n for (let key in this.config) {\n let value = this.config[key]\n if (Default[key] !== value) {\n config[key] = value\n }\n }\n }\n\n return config\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = typeof config === 'object' ?\n config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n data[config]()\n }\n })\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n\n})(jQuery)\n\nexport default Tooltip\n"]} \ No newline at end of file +{"version":3,"sources":["js/src/tooltip.js"],"names":[],"mappings":"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","file":"js/src/tooltip.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tooltip = (($) => {\n\n\n /**\n * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\n const NAME = 'tooltip'\n const VERSION = '4.0.0'\n const DATA_KEY = 'bs.tooltip'\n const JQUERY_NO_CONFLICT = $.fn[NAME]\n const TRANSITION_DURATION = 150\n const CLASS_PREFIX = 'bs-tether'\n\n const Default = {\n animation : true,\n template : '
'\n + '
'\n + '
',\n trigger : 'hover focus',\n title : '',\n delay : 0,\n html : false,\n selector : false,\n placement : 'top',\n offset : '0 0',\n constraints : null\n }\n\n const AttachmentMap = {\n TOP : 'bottom center',\n RIGHT : 'middle left',\n BOTTOM : 'top center',\n LEFT : 'middle right'\n }\n\n const HoverState = {\n IN : 'in',\n OUT : 'out'\n }\n\n const Event = {\n HIDE : 'hide.bs.tooltip',\n HIDDEN : 'hidden.bs.tooltip',\n SHOW : 'show.bs.tooltip',\n SHOWN : 'shown.bs.tooltip',\n INSERTED : 'inserted.bs.tooltip',\n CLICK : 'click.bs.tooltip',\n FOCUSIN : 'focusin.bs.tooltip',\n FOCUSOUT : 'focusout.bs.tooltip',\n MOUSEENTER : 'mouseenter.bs.tooltip',\n MOUSELEAVE : 'mouseleave.bs.tooltip'\n }\n\n const ClassName = {\n FADE : 'fade',\n IN : 'in'\n }\n\n const Selector = {\n TOOLTIP : '.tooltip',\n TOOLTIP_INNER : '.tooltip-inner',\n }\n\n const TetherClass = {\n element : false,\n enabled : false\n }\n\n const Trigger = {\n HOVER : 'hover',\n FOCUS : 'focus',\n CLICK : 'click',\n MANUAL : 'manual'\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\n class Tooltip {\n\n constructor(element, config) {\n\n // private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._tether = null\n\n // protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n\n }\n\n\n // getters\n\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n\n\n // public\n\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n let context = this\n let dataKey = this.constructor.DATA_KEY\n\n if (event) {\n context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n\n } else {\n $(context.getTipElement()).hasClass(ClassName.IN) ?\n context._leave(null, context) :\n context._enter(null, context)\n }\n }\n\n destroy() {\n clearTimeout(this._timeout)\n this.hide(() => {\n $(this.element)\n .off(`.${this.constructor.NAME}`)\n .removeData(this.constructor.DATA_KEY)\n\n if (this.tip) {\n $(this.tip).detach()\n }\n\n this.tip = null\n })\n }\n\n show() {\n let showEvent = $.Event(this.constructor.Event.SHOW)\n\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n let isInTheDom = $.contains(\n this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n let tip = this.getTipElement()\n let tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(ClassName.FADE)\n }\n\n let placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n let attachment = this._getAttachment(placement)\n\n $(tip)\n .data(this.constructor.DATA_KEY, this)\n .appendTo(document.body)\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._tether = new Tether({\n element : tip,\n target : this.element,\n attachment : attachment,\n classes : TetherClass,\n classPrefix : CLASS_PREFIX,\n offset : this.config.offset,\n constraints : this.config.constraints\n })\n\n Util.reflow(tip)\n this._tether.position()\n\n $(tip).addClass(ClassName.IN)\n\n let complete = () => {\n let prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HoverState.OUT) {\n this._leave(null, this)\n }\n }\n\n Util.supportsTransitionEnd() && $(this.tip).hasClass(ClassName.FADE) ?\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(Tooltip._TRANSITION_DURATION) :\n complete()\n }\n }\n\n hide(callback) {\n let tip = this.getTipElement()\n let hideEvent = $.Event(this.constructor.Event.HIDE)\n let complete = () => {\n if (this._hoverState !== HoverState.IN && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n this.cleanupTether()\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(ClassName.IN)\n\n if (Util.supportsTransitionEnd() &&\n ($(this.tip).hasClass(ClassName.FADE))) {\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(TRANSITION_DURATION)\n\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n\n // protected\n\n isWithContent() {\n return !!this.getTitle()\n }\n\n getTipElement() {\n return (this.tip = this.tip || $(this.config.template)[0])\n }\n\n setContent() {\n let tip = this.getTipElement()\n let title = this.getTitle()\n let method = this.config.html ? 'innerHTML' : 'innerText'\n\n $(tip).find(Selector.TOOLTIP_INNER)[0][method] = title\n\n $(tip)\n .removeClass(ClassName.FADE)\n .removeClass(ClassName.IN)\n\n this.cleanupTether()\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n cleanupTether() {\n if (this._tether) {\n this._tether.destroy()\n\n // clean up after tether's junk classes\n // remove after they fix issue\n // (https://github.com/HubSpot/tether/issues/36)\n $(this.element).removeClass(this._removeTetherClasses)\n $(this.tip).removeClass(this._removeTetherClasses)\n }\n }\n\n\n // private\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n let triggers = this.config.trigger.split(' ')\n\n triggers.forEach((trigger) => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n this.toggle.bind(this)\n )\n\n } else if (trigger !== Trigger.MANUAL) {\n let eventIn = trigger == Trigger.HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n let eventOut = trigger == Trigger.HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(\n eventIn,\n this.config.selector,\n this._enter.bind(this)\n )\n .on(\n eventOut,\n this.config.selector,\n this._leave.bind(this)\n )\n }\n })\n\n if (this.config.selector) {\n this.config = $.extend({}, this.config, {\n trigger : 'manual',\n selector : ''\n })\n } else {\n this._fixTitle()\n }\n }\n\n _removeTetherClasses(i, css) {\n return ((css.baseVal || css).match(\n new RegExp(`(^|\\\\s)${CLASS_PREFIX}-\\\\S+`, 'g')) || []\n ).join(' ')\n }\n\n _fixTitle() {\n let titleType = typeof this.element.getAttribute('data-original-title')\n if (this.element.getAttribute('title') ||\n (titleType !== 'string')) {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n let dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type == 'focusin' ? Trigger.FOCUS : Trigger.HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(ClassName.IN) ||\n (context._hoverState === HoverState.IN)) {\n context._hoverState = HoverState.IN\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.IN\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.IN) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n let dataKey = this.constructor.DATA_KEY\n\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HoverState.OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HoverState.OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (let trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n config = $.extend(\n {},\n this.constructor.Default,\n $(this.element).data(),\n config\n )\n\n if (config.delay && typeof config.delay === 'number') {\n config.delay = {\n show : config.delay,\n hide : config.delay\n }\n }\n\n return config\n }\n\n _getDelegateConfig() {\n let config = {}\n\n if (this.config) {\n for (let key in this.config) {\n let value = this.config[key]\n if (this.constructor.Default[key] !== value) {\n config[key] = value\n }\n }\n }\n\n return config\n }\n\n\n // static\n\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = typeof config === 'object' ?\n config : null\n\n if (!data && /destroy|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n data[config]()\n }\n })\n }\n\n }\n\n\n /**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n */\n\n $.fn[NAME] = Tooltip._jQueryInterface\n $.fn[NAME].Constructor = Tooltip\n $.fn[NAME].noConflict = function () {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n }\n\n return Tooltip\n\n})(jQuery)\n\nexport default Tooltip\n"]} \ No newline at end of file diff --git a/js/popover.js b/js/popover.js deleted file mode 100644 index 0b0755ee2..000000000 --- a/js/popover.js +++ /dev/null @@ -1,108 +0,0 @@ -/* ======================================================================== - * Bootstrap: popover.js v3.3.4 - * http://getbootstrap.com/javascript/#popovers - * ======================================================================== - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * ======================================================================== */ - - -+function ($) { - 'use strict'; - - // POPOVER PUBLIC CLASS DEFINITION - // =============================== - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') - - Popover.VERSION = '3.3.4' - - Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { - placement: 'right', - trigger: 'click', - content: '', - template: '' - }) - - - // NOTE: POPOVER EXTENDS tooltip.js - // ================================ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - - Popover.prototype.constructor = Popover - - Popover.prototype.getDefaults = function () { - return Popover.DEFAULTS - } - - Popover.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - var content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events - this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' - ](content) - - $tip.removeClass('fade top bottom left right in') - - // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do - // this manually by checking the contents. - if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() - } - - Popover.prototype.hasContent = function () { - return this.getTitle() || this.getContent() - } - - Popover.prototype.getContent = function () { - var $e = this.$element - var o = this.options - - return $e.attr('data-content') - || (typeof o.content == 'function' ? - o.content.call($e[0]) : - o.content) - } - - Popover.prototype.arrow = function () { - return (this.$arrow = this.$arrow || this.tip().find('.arrow')) - } - - - // POPOVER PLUGIN DEFINITION - // ========================= - - function Plugin(option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.popover') - var options = typeof option == 'object' && option - - if (!data && /destroy|hide/.test(option)) return - if (!data) $this.data('bs.popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - var old = $.fn.popover - - $.fn.popover = Plugin - $.fn.popover.Constructor = Popover - - - // POPOVER NO CONFLICT - // =================== - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(jQuery); diff --git a/js/src/popover.js b/js/src/popover.js new file mode 100644 index 000000000..6b14a2983 --- /dev/null +++ b/js/src/popover.js @@ -0,0 +1,178 @@ +import Tooltip from './tooltip' + + +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.0.0): popover.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +const Popover = (($) => { + + + /** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + + const NAME = 'popover' + const VERSION = '4.0.0' + const DATA_KEY = 'bs.popover' + const JQUERY_NO_CONFLICT = $.fn[NAME] + + const Default = $.extend({}, Tooltip.Default, { + placement : 'right', + trigger : 'click', + content : '', + template : '' + }) + + const ClassName = { + FADE : 'fade', + IN : 'in' + } + + const Selector = { + TITLE : '.popover-title', + CONTENT : '.popover-content', + ARROW : '.popover-arrow' + } + + const Event = { + HIDE : 'hide.bs.popover', + HIDDEN : 'hidden.bs.popover', + SHOW : 'show.bs.popover', + SHOWN : 'shown.bs.popover', + INSERTED : 'inserted.bs.popover', + CLICK : 'click.bs.popover', + FOCUSIN : 'focusin.bs.popover', + FOCUSOUT : 'focusout.bs.popover', + MOUSEENTER : 'mouseenter.bs.popover', + MOUSELEAVE : 'mouseleave.bs.popover' + } + + + /** + * ------------------------------------------------------------------------ + * Class Definition + * ------------------------------------------------------------------------ + */ + + class Popover extends Tooltip { + + + // getters + + static get VERSION() { + return VERSION + } + + static get Default() { + return Default + } + + static get NAME() { + return NAME + } + + static get DATA_KEY() { + return DATA_KEY + } + + static get Event() { + return Event + } + + + // overrides + + isWithContent() { + return this.getTitle() || this._getContent() + } + + getTipElement() { + return (this.tip = this.tip || $(this.config.template)[0]) + } + + setContent() { + let tip = this.getTipElement() + let title = this.getTitle() + let content = this._getContent() + let titleElement = $(tip).find(Selector.TITLE)[0] + + if (titleElement) { + titleElement[ + this.config.html ? 'innerHTML' : 'innerText' + ] = title + } + + // we use append for html objects to maintain js events + $(tip).find(Selector.CONTENT).children().detach().end()[ + this.config.html ? + (typeof content === 'string' ? 'html' : 'append') : 'text' + ](content) + + $(tip) + .removeClass(ClassName.FADE) + .removeClass(ClassName.IN) + + this.cleanupTether() + } + + // private + + _getContent() { + return this.element.getAttribute('data-content') + || (typeof this.config.content == 'function' ? + this.config.content.call(this.element) : + this.config.content) + } + + + // static + + static _jQueryInterface(config) { + return this.each(function () { + let data = $(this).data(DATA_KEY) + let _config = typeof config === 'object' ? config : null + + if (!data && /destroy|hide/.test(config)) { + return + } + + if (!data) { + data = new Popover(this, _config) + $(this).data(DATA_KEY, data) + } + + if (typeof config === 'string') { + data[config]() + } + }) + } + } + + + /** + * ------------------------------------------------------------------------ + * jQuery + * ------------------------------------------------------------------------ + */ + + $.fn[NAME] = Popover._jQueryInterface + $.fn[NAME].Constructor = Popover + $.fn[NAME].noConflict = function () { + $.fn[NAME] = JQUERY_NO_CONFLICT + return Popover._jQueryInterface + } + + return Popover + +})(jQuery) + +export default Popover diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index 0ab8804c6..e41a3ae12 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -55,7 +55,7 @@ const ScrollSpy = (($) => { constructor(element, config) { this._scrollElement = element.tagName === 'BODY' ? window : element - this._config = $.extend({}, Defaults, config) + this._config = $.extend({}, Default, config) this._selector = `${this._config.target || ''} .nav li > a` this._offsets = [] this._targets = [] diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 4c09a5baf..a04085130 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -8,7 +8,7 @@ import Util from './util' * -------------------------------------------------------------------------- */ -const ToolTip = (($) => { +const Tooltip = (($) => { /** @@ -34,33 +34,16 @@ const ToolTip = (($) => { delay : 0, html : false, selector : false, - attachment : 'top', + placement : 'top', offset : '0 0', constraints : null } - const HorizontalMirror = { - LEFT : 'right', - CENTER : 'center', - RIGHT : 'left' - } - - const VerticalMirror = { - TOP : 'bottom', - MIDDLE : 'middle', - BOTTOM : 'top' - } - - const VerticalDefault = { - LEFT : 'middle', - CENTER : 'bottom', - RIGHT : 'middle' - } - - const HorizontalDefault = { - TOP : 'center', - MIDDLE : 'left', - BOTTOM : 'center' + const AttachmentMap = { + TOP : 'bottom center', + RIGHT : 'middle left', + BOTTOM : 'top center', + LEFT : 'middle right' } const HoverState = { @@ -88,8 +71,7 @@ const ToolTip = (($) => { const Selector = { TOOLTIP : '.tooltip', - TOOLTIP_INNER : '.tooltip-inner', - TOOLTIP_ARROW : '.tooltip-arrow' + TOOLTIP_INNER : '.tooltip-inner' } const TetherClass = { @@ -120,12 +102,12 @@ const ToolTip = (($) => { this._timeout = 0 this._hoverState = '' this._activeTrigger = {} + this._tether = null // protected this.element = element this.config = this._getConfig(config) this.tip = null - this.tether = null this._setListeners() @@ -142,6 +124,19 @@ const ToolTip = (($) => { return Default } + static get NAME() { + return NAME + } + + static get DATA_KEY() { + return DATA_KEY + } + + static get Event() { + return Event + } + + // public @@ -159,16 +154,17 @@ const ToolTip = (($) => { toggle(event) { let context = this + let dataKey = this.constructor.DATA_KEY if (event) { - context = $(event.currentTarget).data(DATA_KEY) + context = $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( event.currentTarget, this._getDelegateConfig() ) - $(event.currentTarget).data(DATA_KEY, context) + $(event.currentTarget).data(dataKey, context) } context._activeTrigger.click = !context._activeTrigger.click @@ -190,13 +186,19 @@ const ToolTip = (($) => { clearTimeout(this._timeout) this.hide(() => { $(this.element) - .off(Selector.TOOLTIP) - .removeData(DATA_KEY) + .off(`.${this.constructor.NAME}`) + .removeData(this.constructor.DATA_KEY) + + if (this.tip) { + $(this.tip).detach() + } + + this.tip = null }) } show() { - let showEvent = $.Event(Event.SHOW) + let showEvent = $.Event(this.constructor.Event.SHOW) if (this.isWithContent() && this._isEnabled) { $(this.element).trigger(showEvent) @@ -211,7 +213,7 @@ const ToolTip = (($) => { } let tip = this.getTipElement() - let tipId = Util.getUID(NAME) + let tipId = Util.getUID(this.constructor.NAME) tip.setAttribute('id', tipId) this.element.setAttribute('aria-describedby', tipId) @@ -222,19 +224,20 @@ const ToolTip = (($) => { $(tip).addClass(ClassName.FADE) } - let attachment = typeof this.config.attachment === 'function' ? - this.config.attachment.call(this, tip, this.element) : - this.config.attachment + let placement = typeof this.config.placement === 'function' ? + this.config.placement.call(this, tip, this.element) : + this.config.placement - attachment = this.getAttachment(attachment) + let attachment = this._getAttachment(placement) - $(tip).data(DATA_KEY, this) + $(tip) + .data(this.constructor.DATA_KEY, this) + .appendTo(document.body) - this.element.parentNode.insertBefore(tip, this.element.nextSibling) - $(this.element).trigger(Event.INSERTED) + $(this.element).trigger(this.constructor.Event.INSERTED) - this.tether = new Tether({ - element : this.tip, + this._tether = new Tether({ + element : tip, target : this.element, attachment : attachment, classes : TetherClass, @@ -244,7 +247,7 @@ const ToolTip = (($) => { }) Util.reflow(tip) - this.tether.position() + this._tether.position() $(tip).addClass(ClassName.IN) @@ -252,7 +255,7 @@ const ToolTip = (($) => { let prevHoverState = this._hoverState this._hoverState = null - $(this.element).trigger(Event.SHOWN) + $(this.element).trigger(this.constructor.Event.SHOWN) if (prevHoverState === HoverState.OUT) { this._leave(null, this) @@ -269,14 +272,14 @@ const ToolTip = (($) => { hide(callback) { let tip = this.getTipElement() - let hideEvent = $.Event(Event.HIDE) + let hideEvent = $.Event(this.constructor.Event.HIDE) let complete = () => { if (this._hoverState !== HoverState.IN && tip.parentNode) { tip.parentNode.removeChild(tip) } this.element.removeAttribute('aria-describedby') - $(this.element).trigger(Event.HIDDEN) + $(this.element).trigger(this.constructor.Event.HIDDEN) this.cleanupTether() if (callback) { @@ -317,47 +320,6 @@ const ToolTip = (($) => { return (this.tip = this.tip || $(this.config.template)[0]) } - getAttachment(attachmentString) { - let attachmentArray = attachmentString.split(' ') - let normalizedAttachment = {} - - if (!attachmentArray.length) { - throw new Error('Tooltip requires attachment') - } - - for (let attachment of attachmentArray) { - attachment = attachment.toUpperCase() - - if (HorizontalMirror[attachment]) { - normalizedAttachment.horizontal = HorizontalMirror[attachment] - } - - if (VerticalMirror[attachment]) { - normalizedAttachment.vertical = VerticalMirror[attachment] - } - } - - if (!normalizedAttachment.horizontal && - (!normalizedAttachment.vertical)) { - throw new Error('Tooltip requires valid attachment') - } - - if (!normalizedAttachment.horizontal) { - normalizedAttachment.horizontal = - HorizontalDefault[normalizedAttachment.vertical.toUpperCase()] - } - - if (!normalizedAttachment.vertical) { - normalizedAttachment.vertical = - VerticalDefault[normalizedAttachment.horizontal.toUpperCase()] - } - - return [ - normalizedAttachment.vertical, - normalizedAttachment.horizontal - ].join(' ') - } - setContent() { let tip = this.getTipElement() let title = this.getTitle() @@ -384,43 +346,43 @@ const ToolTip = (($) => { return title } - removeTetherClasses(i, css) { - return ((css.baseVal || css).match( - new RegExp(`(^|\\s)${CLASS_PREFIX}-\\S+`, 'g')) || [] - ).join(' ') - } - cleanupTether() { - if (this.tether) { - this.tether.destroy() + if (this._tether) { + this._tether.destroy() // clean up after tether's junk classes // remove after they fix issue // (https://github.com/HubSpot/tether/issues/36) - $(this.element).removeClass(this.removeTetherClasses) - $(this.tip).removeClass(this.removeTetherClasses) + $(this.element).removeClass(this._removeTetherClasses) + $(this.tip).removeClass(this._removeTetherClasses) } } // private + _getAttachment(placement) { + return AttachmentMap[placement.toUpperCase()] + } + _setListeners() { let triggers = this.config.trigger.split(' ') triggers.forEach((trigger) => { if (trigger === 'click') { $(this.element).on( - Event.CLICK, + this.constructor.Event.CLICK, this.config.selector, this.toggle.bind(this) ) } else if (trigger !== Trigger.MANUAL) { let eventIn = trigger == Trigger.HOVER ? - Event.MOUSEENTER : Event.FOCUSIN + this.constructor.Event.MOUSEENTER : + this.constructor.Event.FOCUSIN let eventOut = trigger == Trigger.HOVER ? - Event.MOUSELEAVE : Event.FOCUSOUT + this.constructor.Event.MOUSELEAVE : + this.constructor.Event.FOCUSOUT $(this.element) .on( @@ -446,6 +408,12 @@ const ToolTip = (($) => { } } + _removeTetherClasses(i, css) { + return ((css.baseVal || css).match( + new RegExp(`(^|\\s)${CLASS_PREFIX}-\\S+`, 'g')) || [] + ).join(' ') + } + _fixTitle() { let titleType = typeof this.element.getAttribute('data-original-title') if (this.element.getAttribute('title') || @@ -459,14 +427,16 @@ const ToolTip = (($) => { } _enter(event, context) { - context = context || $(event.currentTarget).data(DATA_KEY) + let dataKey = this.constructor.DATA_KEY + + context = context || $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( event.currentTarget, this._getDelegateConfig() ) - $(event.currentTarget).data(DATA_KEY, context) + $(event.currentTarget).data(dataKey, context) } if (event) { @@ -498,19 +468,21 @@ const ToolTip = (($) => { } _leave(event, context) { - context = context || $(event.currentTarget).data(DATA_KEY) + let dataKey = this.constructor.DATA_KEY + + context = context || $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( event.currentTarget, this._getDelegateConfig() ) - $(event.currentTarget).data(DATA_KEY, context) + $(event.currentTarget).data(dataKey, context) } if (event) { context._activeTrigger[ - event.type == 'focusout' ? Triger.FOCUS : Trigger.HOVER + event.type == 'focusout' ? Trigger.FOCUS : Trigger.HOVER ] = false } @@ -545,7 +517,12 @@ const ToolTip = (($) => { } _getConfig(config) { - config = $.extend({}, Default, $(this.element).data(), config) + config = $.extend( + {}, + this.constructor.Default, + $(this.element).data(), + config + ) if (config.delay && typeof config.delay === 'number') { config.delay = { @@ -563,7 +540,7 @@ const ToolTip = (($) => { if (this.config) { for (let key in this.config) { let value = this.config[key] - if (Default[key] !== value) { + if (this.constructor.Default[key] !== value) { config[key] = value } } diff --git a/js/tests/index.html b/js/tests/index.html index 2491d8d86..0e2bdd012 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -141,11 +141,9 @@ + - - - - @@ -153,9 +151,9 @@ - --> + - + diff --git a/js/tests/unit/popover.js b/js/tests/unit/popover.js index a25df3a58..01c6a97cb 100644 --- a/js/tests/unit/popover.js +++ b/js/tests/unit/popover.js @@ -16,6 +16,7 @@ $(function () { afterEach: function () { $.fn.popover = $.fn.bootstrapPopover delete $.fn.bootstrapPopover + $('.popover').remove() } }) @@ -81,6 +82,7 @@ $(function () { assert.strictEqual($('.popover .popover-content').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted') $popover.bootstrapPopover('hide') + assert.strictEqual($('.popover').length, 0, 'popover was removed') }) @@ -91,6 +93,7 @@ $(function () { var $popover = $('@fat') .appendTo('#qunit-fixture') .bootstrapPopover({ + html: true, content: function () { return $div } @@ -98,14 +101,14 @@ $(function () { $popover.bootstrapPopover('show') assert.notEqual($('.popover').length, 0, 'popover was inserted') - assert.equal($('.popover .popover-content').html(), $div, 'content correctly inserted') + assert.equal($('.popover .popover-content').html(), $div[0].outerHTML, 'content correctly inserted') $popover.bootstrapPopover('hide') assert.strictEqual($('.popover').length, 0, 'popover was removed') $popover.bootstrapPopover('show') assert.notEqual($('.popover').length, 0, 'popover was inserted') - assert.equal($('.popover .popover-content').html(), $div, 'content correctly inserted') + assert.equal($('.popover .popover-content').html(), $div[0].outerHTML, 'content correctly inserted') $popover.bootstrapPopover('hide') assert.strictEqual($('.popover').length, 0, 'popover was removed') @@ -126,7 +129,6 @@ $(function () { assert.strictEqual($('.popover').length, 0, 'popover was removed') }) - QUnit.test('should get title and content from attributes ignoring options passed via js', function (assert) { assert.expect(4) var $popover = $('@mdo') @@ -240,13 +242,6 @@ $(function () { .bootstrapPopover('show') }) - QUnit.test('should throw an error when initializing popover on the document object without specifying a delegation selector', function (assert) { - assert.expect(1) - assert.throws(function () { - $(document).bootstrapPopover({ title: 'What am I on?', content: 'My selector is missing' }) - }, new Error('`selector` option must be specified when initializing popover on the window.document object!')) - }) - QUnit.test('should do nothing when an attempt is made to hide an uninitialized popover', function (assert) { assert.expect(1) @@ -259,16 +254,6 @@ $(function () { assert.strictEqual($popover.data('bs.popover'), undefined, 'should not initialize the popover') }) - QUnit.test('should throw an error when template contains multiple top-level elements', function (assert) { - assert.expect(1) - assert.throws(function () { - $('some text') - .appendTo('#qunit-fixture') - .bootstrapPopover({ template: '
Foo
Bar
' }) - .bootstrapPopover('show') - }, new Error('popover `template` option must consist of exactly 1 top-level element!')) - }) - QUnit.test('should fire inserted event', function (assert) { assert.expect(2) var done = assert.async() diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js index 8f2cbc3e8..f3df4d828 100644 --- a/js/tests/unit/tooltip.js +++ b/js/tests/unit/tooltip.js @@ -89,11 +89,11 @@ $(function () { assert.strictEqual(id.indexOf('tooltip'), 0, 'tooltip id has prefix') }) - QUnit.test('should place tooltips relative to attachment option', function (assert) { + QUnit.test('should place tooltips relative to placement option', function (assert) { assert.expect(2) var $tooltip = $('') .appendTo('#qunit-fixture') - .bootstrapTooltip({ attachment: 'bottom' }) + .bootstrapTooltip({ placement: 'bottom' }) $tooltip.bootstrapTooltip('show') @@ -321,7 +321,7 @@ $(function () { var $target = $('') .appendTo($container) .bootstrapTooltip({ - attachment: 'right', + placement: 'right', }) .bootstrapTooltip('show') @@ -389,7 +389,7 @@ $(function () { .one('show.bs.tooltip', function () { $(this).remove() }) - .bootstrapTooltip({ attachment: 'top' }) + .bootstrapTooltip({ placement: 'top' }) try { $tooltip.bootstrapTooltip('show') @@ -426,7 +426,7 @@ $(function () { .find('a') .css('margin-top', 200) .bootstrapTooltip({ - attachment: 'top', + placement: 'top', animate: false }) .bootstrapTooltip('show') @@ -609,7 +609,7 @@ $(function () { assert.strictEqual($('.tooltip').length, 0, 'tooltip removed from dom') done() }) - .bootstrapTooltip({ attachment: 'top', trigger: 'manual' }) + .bootstrapTooltip({ placement: 'top', trigger: 'manual' }) $circle.bootstrapTooltip('show') }) @@ -621,7 +621,7 @@ $(function () { return '

' + uid + '

' + uid + '

' + uid + '

' } - var $tooltip = $('some text') + var $tooltip = $('some text') .appendTo('#qunit-fixture') $tooltip.bootstrapTooltip({ @@ -649,7 +649,7 @@ $(function () { return '

' + uid + '

' + uid + '

' + uid + '

' } - var $tooltip = $('some text') + var $tooltip = $('some text') .appendTo('#qunit-fixture') $tooltip.bootstrapTooltip({ diff --git a/js/tests/visual/popover.html b/js/tests/visual/popover.html index 0e84f5cee..ac6557256 100644 --- a/js/tests/visual/popover.html +++ b/js/tests/visual/popover.html @@ -5,7 +5,7 @@ Popover - + @@ -39,9 +39,11 @@ - - - + + + + +