{"version":3,"file":"216.cec53b8138fc5653b02a.js","mappings":"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","sources":["webpack://konfigurewebclient/./node_modules/bootstrap/js/popover.js","webpack://konfigurewebclient/./node_modules/bootstrap/js/tab.js","webpack://konfigurewebclient/./node_modules/bootstrap/js/tooltip.js","webpack://konfigurewebclient/./node_modules/mousetrap/mousetrap.js"],"sourcesContent":["/* ========================================================================\n * Bootstrap: popover.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // POPOVER PUBLIC CLASS DEFINITION\n // ===============================\n\n var Popover = function (element, options) {\n this.init('popover', element, options)\n }\n\n if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n Popover.VERSION = '3.4.1'\n\n Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '

'\n })\n\n\n // NOTE: POPOVER EXTENDS tooltip.js\n // ================================\n\n Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n Popover.prototype.constructor = Popover\n\n Popover.prototype.getDefaults = function () {\n return Popover.DEFAULTS\n }\n\n Popover.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n var content = this.getContent()\n\n if (this.options.html) {\n var typeContent = typeof content\n\n if (this.options.sanitize) {\n title = this.sanitizeHtml(title)\n\n if (typeContent === 'string') {\n content = this.sanitizeHtml(content)\n }\n }\n\n $tip.find('.popover-title').html(title)\n $tip.find('.popover-content').children().detach().end()[\n typeContent === 'string' ? 'html' : 'append'\n ](content)\n } else {\n $tip.find('.popover-title').text(title)\n $tip.find('.popover-content').children().detach().end().text(content)\n }\n\n $tip.removeClass('fade top bottom left right in')\n\n // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n // this manually by checking the contents.\n if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n }\n\n Popover.prototype.hasContent = function () {\n return this.getTitle() || this.getContent()\n }\n\n Popover.prototype.getContent = function () {\n var $e = this.$element\n var o = this.options\n\n return $e.attr('data-content')\n || (typeof o.content == 'function' ?\n o.content.call($e[0]) :\n o.content)\n }\n\n Popover.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n }\n\n\n // POPOVER PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.popover')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.popover\n\n $.fn.popover = Plugin\n $.fn.popover.Constructor = Popover\n\n\n // POPOVER NO CONFLICT\n // ===================\n\n $.fn.popover.noConflict = function () {\n $.fn.popover = old\n return this\n }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tab.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // TAB CLASS DEFINITION\n // ====================\n\n var Tab = function (element) {\n // jscs:disable requireDollarBeforejQueryAssignment\n this.element = $(element)\n // jscs:enable requireDollarBeforejQueryAssignment\n }\n\n Tab.VERSION = '3.4.1'\n\n Tab.TRANSITION_DURATION = 150\n\n Tab.prototype.show = function () {\n var $this = this.element\n var $ul = $this.closest('ul:not(.dropdown-menu)')\n var selector = $this.data('target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n if ($this.parent('li').hasClass('active')) return\n\n var $previous = $ul.find('.active:last a')\n var hideEvent = $.Event('hide.bs.tab', {\n relatedTarget: $this[0]\n })\n var showEvent = $.Event('show.bs.tab', {\n relatedTarget: $previous[0]\n })\n\n $previous.trigger(hideEvent)\n $this.trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n var $target = $(document).find(selector)\n\n this.activate($this.closest('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $previous.trigger({\n type: 'hidden.bs.tab',\n relatedTarget: $this[0]\n })\n $this.trigger({\n type: 'shown.bs.tab',\n relatedTarget: $previous[0]\n })\n })\n }\n\n Tab.prototype.activate = function (element, container, callback) {\n var $active = container.find('> .active')\n var transition = callback\n && $.support.transition\n && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', false)\n\n element\n .addClass('active')\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if (element.parent('.dropdown-menu').length) {\n element\n .closest('li.dropdown')\n .addClass('active')\n .end()\n .find('[data-toggle=\"tab\"]')\n .attr('aria-expanded', true)\n }\n\n callback && callback()\n }\n\n $active.length && transition ?\n $active\n .one('bsTransitionEnd', next)\n .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n next()\n\n $active.removeClass('in')\n }\n\n\n // TAB PLUGIN DEFINITION\n // =====================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tab')\n\n if (!data) $this.data('bs.tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tab\n\n $.fn.tab = Plugin\n $.fn.tab.Constructor = Tab\n\n\n // TAB NO CONFLICT\n // ===============\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n // TAB DATA-API\n // ============\n\n var clickHandler = function (e) {\n e.preventDefault()\n Plugin.call($(this), 'show')\n }\n\n $(document)\n .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n var uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n ]\n\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n }\n\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n 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\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase()\n\n if ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n var regExp = $(allowedAttributeList).filter(function (index, value) {\n return value instanceof RegExp\n })\n\n // Check if a regular expression validates the attribute.\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n // IE 8 and below don't support createHTMLDocument\n if (!document.implementation || !document.implementation.createHTMLDocument) {\n return unsafeHtml\n }\n\n var createdDocument = document.implementation.createHTMLDocument('sanitization')\n createdDocument.body.innerHTML = unsafeHtml\n\n var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n var elements = $(createdDocument.body).find('*')\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var el = elements[i]\n var elName = el.nodeName.toLowerCase()\n\n if ($.inArray(elName, whitelistKeys) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n var attributeList = $.map(el.attributes, function (el) { return el })\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n el.removeAttribute(attributeList[j].nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n }\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.4.1'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '
',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n },\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n var dataAttributes = this.$element.data()\n\n for (var dataAttr in dataAttributes) {\n if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr]\n }\n }\n\n options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n if (options.sanitize) {\n options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n if (this.options.html) {\n if (this.options.sanitize) {\n title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n }\n\n $tip.find('.tooltip-inner').html(title)\n } else {\n $tip.find('.tooltip-inner').text(title)\n }\n\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n }\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n","/*global define:false */\n/**\n * Copyright 2012-2017 Craig Campbell\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n *\n * Mousetrap is a simple keyboard shortcut library for Javascript with\n * no external dependencies\n *\n * @version 1.6.5\n * @url craig.is/killing/mice\n */\n(function(window, document, undefined) {\n\n // Check if mousetrap is used inside browser, if not, return\n if (!window) {\n return;\n }\n\n /**\n * mapping of special keycodes to their corresponding keys\n *\n * everything in this dictionary cannot use keypress events\n * so it has to be here to map to the correct keycodes for\n * keyup/keydown events\n *\n * @type {Object}\n */\n var _MAP = {\n 8: 'backspace',\n 9: 'tab',\n 13: 'enter',\n 16: 'shift',\n 17: 'ctrl',\n 18: 'alt',\n 20: 'capslock',\n 27: 'esc',\n 32: 'space',\n 33: 'pageup',\n 34: 'pagedown',\n 35: 'end',\n 36: 'home',\n 37: 'left',\n 38: 'up',\n 39: 'right',\n 40: 'down',\n 45: 'ins',\n 46: 'del',\n 91: 'meta',\n 93: 'meta',\n 224: 'meta'\n };\n\n /**\n * mapping for special characters so they can support\n *\n * this dictionary is only used incase you want to bind a\n * keyup or keydown event to one of these keys\n *\n * @type {Object}\n */\n var _KEYCODE_MAP = {\n 106: '*',\n 107: '+',\n 109: '-',\n 110: '.',\n 111 : '/',\n 186: ';',\n 187: '=',\n 188: ',',\n 189: '-',\n 190: '.',\n 191: '/',\n 192: '`',\n 219: '[',\n 220: '\\\\',\n 221: ']',\n 222: '\\''\n };\n\n /**\n * this is a mapping of keys that require shift on a US keypad\n * back to the non shift equivelents\n *\n * this is so you can use keyup events with these keys\n *\n * note that this will only work reliably on US keyboards\n *\n * @type {Object}\n */\n var _SHIFT_MAP = {\n '~': '`',\n '!': '1',\n '@': '2',\n '#': '3',\n '$': '4',\n '%': '5',\n '^': '6',\n '&': '7',\n '*': '8',\n '(': '9',\n ')': '0',\n '_': '-',\n '+': '=',\n ':': ';',\n '\\\"': '\\'',\n '<': ',',\n '>': '.',\n '?': '/',\n '|': '\\\\'\n };\n\n /**\n * this is a list of special strings you can use to map\n * to modifier keys when you specify your keyboard shortcuts\n *\n * @type {Object}\n */\n var _SPECIAL_ALIASES = {\n 'option': 'alt',\n 'command': 'meta',\n 'return': 'enter',\n 'escape': 'esc',\n 'plus': '+',\n 'mod': /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? 'meta' : 'ctrl'\n };\n\n /**\n * variable to store the flipped version of _MAP from above\n * needed to check if we should use keypress or not when no action\n * is specified\n *\n * @type {Object|undefined}\n */\n var _REVERSE_MAP;\n\n /**\n * loop through the f keys, f1 to f19 and add them to the map\n * programatically\n */\n for (var i = 1; i < 20; ++i) {\n _MAP[111 + i] = 'f' + i;\n }\n\n /**\n * loop through to map numbers on the numeric keypad\n */\n for (i = 0; i <= 9; ++i) {\n\n // This needs to use a string cause otherwise since 0 is falsey\n // mousetrap will never fire for numpad 0 pressed as part of a keydown\n // event.\n //\n // @see https://github.com/ccampbell/mousetrap/pull/258\n _MAP[i + 96] = i.toString();\n }\n\n /**\n * cross browser add event method\n *\n * @param {Element|HTMLDocument} object\n * @param {string} type\n * @param {Function} callback\n * @returns void\n */\n function _addEvent(object, type, callback) {\n if (object.addEventListener) {\n object.addEventListener(type, callback, false);\n return;\n }\n\n object.attachEvent('on' + type, callback);\n }\n\n /**\n * takes the event and returns the key character\n *\n * @param {Event} e\n * @return {string}\n */\n function _characterFromEvent(e) {\n\n // for keypress events we should return the character as is\n if (e.type == 'keypress') {\n var character = String.fromCharCode(e.which);\n\n // if the shift key is not pressed then it is safe to assume\n // that we want the character to be lowercase. this means if\n // you accidentally have caps lock on then your key bindings\n // will continue to work\n //\n // the only side effect that might not be desired is if you\n // bind something like 'A' cause you want to trigger an\n // event when capital A is pressed caps lock will no longer\n // trigger the event. shift+a will though.\n if (!e.shiftKey) {\n character = character.toLowerCase();\n }\n\n return character;\n }\n\n // for non keypress events the special maps are needed\n if (_MAP[e.which]) {\n return _MAP[e.which];\n }\n\n if (_KEYCODE_MAP[e.which]) {\n return _KEYCODE_MAP[e.which];\n }\n\n // if it is not in the special map\n\n // with keydown and keyup events the character seems to always\n // come in as an uppercase character whether you are pressing shift\n // or not. we should make sure it is always lowercase for comparisons\n return String.fromCharCode(e.which).toLowerCase();\n }\n\n /**\n * checks if two arrays are equal\n *\n * @param {Array} modifiers1\n * @param {Array} modifiers2\n * @returns {boolean}\n */\n function _modifiersMatch(modifiers1, modifiers2) {\n return modifiers1.sort().join(',') === modifiers2.sort().join(',');\n }\n\n /**\n * takes a key event and figures out what the modifiers are\n *\n * @param {Event} e\n * @returns {Array}\n */\n function _eventModifiers(e) {\n var modifiers = [];\n\n if (e.shiftKey) {\n modifiers.push('shift');\n }\n\n if (e.altKey) {\n modifiers.push('alt');\n }\n\n if (e.ctrlKey) {\n modifiers.push('ctrl');\n }\n\n if (e.metaKey) {\n modifiers.push('meta');\n }\n\n return modifiers;\n }\n\n /**\n * prevents default for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _preventDefault(e) {\n if (e.preventDefault) {\n e.preventDefault();\n return;\n }\n\n e.returnValue = false;\n }\n\n /**\n * stops propogation for this event\n *\n * @param {Event} e\n * @returns void\n */\n function _stopPropagation(e) {\n if (e.stopPropagation) {\n e.stopPropagation();\n return;\n }\n\n e.cancelBubble = true;\n }\n\n /**\n * determines if the keycode specified is a modifier key or not\n *\n * @param {string} key\n * @returns {boolean}\n */\n function _isModifier(key) {\n return key == 'shift' || key == 'ctrl' || key == 'alt' || key == 'meta';\n }\n\n /**\n * reverses the map lookup so that we can look for specific keys\n * to see what can and can't use keypress\n *\n * @return {Object}\n */\n function _getReverseMap() {\n if (!_REVERSE_MAP) {\n _REVERSE_MAP = {};\n for (var key in _MAP) {\n\n // pull out the numeric keypad from here cause keypress should\n // be able to detect the keys from the character\n if (key > 95 && key < 112) {\n continue;\n }\n\n if (_MAP.hasOwnProperty(key)) {\n _REVERSE_MAP[_MAP[key]] = key;\n }\n }\n }\n return _REVERSE_MAP;\n }\n\n /**\n * picks the best action based on the key combination\n *\n * @param {string} key - character for key\n * @param {Array} modifiers\n * @param {string=} action passed in\n */\n function _pickBestAction(key, modifiers, action) {\n\n // if no action was picked in we should try to pick the one\n // that we think would work best for this key\n if (!action) {\n action = _getReverseMap()[key] ? 'keydown' : 'keypress';\n }\n\n // modifier keys don't work as expected with keypress,\n // switch to keydown\n if (action == 'keypress' && modifiers.length) {\n action = 'keydown';\n }\n\n return action;\n }\n\n /**\n * Converts from a string key combination to an array\n *\n * @param {string} combination like \"command+shift+l\"\n * @return {Array}\n */\n function _keysFromString(combination) {\n if (combination === '+') {\n return ['+'];\n }\n\n combination = combination.replace(/\\+{2}/g, '+plus');\n return combination.split('+');\n }\n\n /**\n * Gets info for a specific key combination\n *\n * @param {string} combination key combination (\"command+s\" or \"a\" or \"*\")\n * @param {string=} action\n * @returns {Object}\n */\n function _getKeyInfo(combination, action) {\n var keys;\n var key;\n var i;\n var modifiers = [];\n\n // take the keys from this pattern and figure out what the actual\n // pattern is all about\n keys = _keysFromString(combination);\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n\n // normalize key names\n if (_SPECIAL_ALIASES[key]) {\n key = _SPECIAL_ALIASES[key];\n }\n\n // if this is not a keypress event then we should\n // be smart about using shift keys\n // this will only work for US keyboards however\n if (action && action != 'keypress' && _SHIFT_MAP[key]) {\n key = _SHIFT_MAP[key];\n modifiers.push('shift');\n }\n\n // if this key is a modifier then add it to the list of modifiers\n if (_isModifier(key)) {\n modifiers.push(key);\n }\n }\n\n // depending on what the key combination is\n // we will try to pick the best event for it\n action = _pickBestAction(key, modifiers, action);\n\n return {\n key: key,\n modifiers: modifiers,\n action: action\n };\n }\n\n function _belongsTo(element, ancestor) {\n if (element === null || element === document) {\n return false;\n }\n\n if (element === ancestor) {\n return true;\n }\n\n return _belongsTo(element.parentNode, ancestor);\n }\n\n function Mousetrap(targetElement) {\n var self = this;\n\n targetElement = targetElement || document;\n\n if (!(self instanceof Mousetrap)) {\n return new Mousetrap(targetElement);\n }\n\n /**\n * element to attach key events to\n *\n * @type {Element}\n */\n self.target = targetElement;\n\n /**\n * a list of all the callbacks setup via Mousetrap.bind()\n *\n * @type {Object}\n */\n self._callbacks = {};\n\n /**\n * direct map of string combinations to callbacks used for trigger()\n *\n * @type {Object}\n */\n self._directMap = {};\n\n /**\n * keeps track of what level each sequence is at since multiple\n * sequences can start out with the same sequence\n *\n * @type {Object}\n */\n var _sequenceLevels = {};\n\n /**\n * variable to store the setTimeout call\n *\n * @type {null|number}\n */\n var _resetTimer;\n\n /**\n * temporary state where we will ignore the next keyup\n *\n * @type {boolean|string}\n */\n var _ignoreNextKeyup = false;\n\n /**\n * temporary state where we will ignore the next keypress\n *\n * @type {boolean}\n */\n var _ignoreNextKeypress = false;\n\n /**\n * are we currently inside of a sequence?\n * type of action (\"keyup\" or \"keydown\" or \"keypress\") or false\n *\n * @type {boolean|string}\n */\n var _nextExpectedAction = false;\n\n /**\n * resets all sequence counters except for the ones passed in\n *\n * @param {Object} doNotReset\n * @returns void\n */\n function _resetSequences(doNotReset) {\n doNotReset = doNotReset || {};\n\n var activeSequences = false,\n key;\n\n for (key in _sequenceLevels) {\n if (doNotReset[key]) {\n activeSequences = true;\n continue;\n }\n _sequenceLevels[key] = 0;\n }\n\n if (!activeSequences) {\n _nextExpectedAction = false;\n }\n }\n\n /**\n * finds all callbacks that match based on the keycode, modifiers,\n * and action\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event|Object} e\n * @param {string=} sequenceName - name of the sequence we are looking for\n * @param {string=} combination\n * @param {number=} level\n * @returns {Array}\n */\n function _getMatches(character, modifiers, e, sequenceName, combination, level) {\n var i;\n var callback;\n var matches = [];\n var action = e.type;\n\n // if there are no events related to this keycode\n if (!self._callbacks[character]) {\n return [];\n }\n\n // if a modifier key is coming up on its own we should allow it\n if (action == 'keyup' && _isModifier(character)) {\n modifiers = [character];\n }\n\n // loop through all callbacks for the key that was pressed\n // and see if any of them match\n for (i = 0; i < self._callbacks[character].length; ++i) {\n callback = self._callbacks[character][i];\n\n // if a sequence name is not specified, but this is a sequence at\n // the wrong level then move onto the next match\n if (!sequenceName && callback.seq && _sequenceLevels[callback.seq] != callback.level) {\n continue;\n }\n\n // if the action we are looking for doesn't match the action we got\n // then we should keep going\n if (action != callback.action) {\n continue;\n }\n\n // if this is a keypress event and the meta key and control key\n // are not pressed that means that we need to only look at the\n // character, otherwise check the modifiers as well\n //\n // chrome will not fire a keypress if meta or control is down\n // safari will fire a keypress if meta or meta+shift is down\n // firefox will fire a keypress if meta or control is down\n if ((action == 'keypress' && !e.metaKey && !e.ctrlKey) || _modifiersMatch(modifiers, callback.modifiers)) {\n\n // when you bind a combination or sequence a second time it\n // should overwrite the first one. if a sequenceName or\n // combination is specified in this call it does just that\n //\n // @todo make deleting its own method?\n var deleteCombo = !sequenceName && callback.combo == combination;\n var deleteSequence = sequenceName && callback.seq == sequenceName && callback.level == level;\n if (deleteCombo || deleteSequence) {\n self._callbacks[character].splice(i, 1);\n }\n\n matches.push(callback);\n }\n }\n\n return matches;\n }\n\n /**\n * actually calls the callback function\n *\n * if your callback function returns false this will use the jquery\n * convention - prevent default and stop propogation on the event\n *\n * @param {Function} callback\n * @param {Event} e\n * @returns void\n */\n function _fireCallback(callback, e, combo, sequence) {\n\n // if this event should not happen stop here\n if (self.stopCallback(e, e.target || e.srcElement, combo, sequence)) {\n return;\n }\n\n if (callback(e, combo) === false) {\n _preventDefault(e);\n _stopPropagation(e);\n }\n }\n\n /**\n * handles a character key event\n *\n * @param {string} character\n * @param {Array} modifiers\n * @param {Event} e\n * @returns void\n */\n self._handleKey = function(character, modifiers, e) {\n var callbacks = _getMatches(character, modifiers, e);\n var i;\n var doNotReset = {};\n var maxLevel = 0;\n var processedSequenceCallback = false;\n\n // Calculate the maxLevel for sequences so we can only execute the longest callback sequence\n for (i = 0; i < callbacks.length; ++i) {\n if (callbacks[i].seq) {\n maxLevel = Math.max(maxLevel, callbacks[i].level);\n }\n }\n\n // loop through matching callbacks for this key event\n for (i = 0; i < callbacks.length; ++i) {\n\n // fire for all sequence callbacks\n // this is because if for example you have multiple sequences\n // bound such as \"g i\" and \"g t\" they both need to fire the\n // callback for matching g cause otherwise you can only ever\n // match the first one\n if (callbacks[i].seq) {\n\n // only fire callbacks for the maxLevel to prevent\n // subsequences from also firing\n //\n // for example 'a option b' should not cause 'option b' to fire\n // even though 'option b' is part of the other sequence\n //\n // any sequences that do not match here will be discarded\n // below by the _resetSequences call\n if (callbacks[i].level != maxLevel) {\n continue;\n }\n\n processedSequenceCallback = true;\n\n // keep a list of which sequences were matches for later\n doNotReset[callbacks[i].seq] = 1;\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo, callbacks[i].seq);\n continue;\n }\n\n // if there were no sequence matches but we are still here\n // that means this is a regular match so we should fire that\n if (!processedSequenceCallback) {\n _fireCallback(callbacks[i].callback, e, callbacks[i].combo);\n }\n }\n\n // if the key you pressed matches the type of sequence without\n // being a modifier (ie \"keyup\" or \"keypress\") then we should\n // reset all sequences that were not matched by this event\n //\n // this is so, for example, if you have the sequence \"h a t\" and you\n // type \"h e a r t\" it does not match. in this case the \"e\" will\n // cause the sequence to reset\n //\n // modifier keys are ignored because you can have a sequence\n // that contains modifiers such as \"enter ctrl+space\" and in most\n // cases the modifier key will be pressed before the next key\n //\n // also if you have a sequence such as \"ctrl+b a\" then pressing the\n // \"b\" key will trigger a \"keypress\" and a \"keydown\"\n //\n // the \"keydown\" is expected when there is a modifier, but the\n // \"keypress\" ends up matching the _nextExpectedAction since it occurs\n // after and that causes the sequence to reset\n //\n // we ignore keypresses in a sequence that directly follow a keydown\n // for the same character\n var ignoreThisKeypress = e.type == 'keypress' && _ignoreNextKeypress;\n if (e.type == _nextExpectedAction && !_isModifier(character) && !ignoreThisKeypress) {\n _resetSequences(doNotReset);\n }\n\n _ignoreNextKeypress = processedSequenceCallback && e.type == 'keydown';\n };\n\n /**\n * handles a keydown event\n *\n * @param {Event} e\n * @returns void\n */\n function _handleKeyEvent(e) {\n\n // normalize e.which for key events\n // @see http://stackoverflow.com/questions/4285627/javascript-keycode-vs-charcode-utter-confusion\n if (typeof e.which !== 'number') {\n e.which = e.keyCode;\n }\n\n var character = _characterFromEvent(e);\n\n // no character found then stop\n if (!character) {\n return;\n }\n\n // need to use === for the character check because the character can be 0\n if (e.type == 'keyup' && _ignoreNextKeyup === character) {\n _ignoreNextKeyup = false;\n return;\n }\n\n self.handleKey(character, _eventModifiers(e), e);\n }\n\n /**\n * called to set a 1 second timeout on the specified sequence\n *\n * this is so after each key press in the sequence you have 1 second\n * to press the next key before you have to start over\n *\n * @returns void\n */\n function _resetSequenceTimer() {\n clearTimeout(_resetTimer);\n _resetTimer = setTimeout(_resetSequences, 1000);\n }\n\n /**\n * binds a key sequence to an event\n *\n * @param {string} combo - combo specified in bind call\n * @param {Array} keys\n * @param {Function} callback\n * @param {string=} action\n * @returns void\n */\n function _bindSequence(combo, keys, callback, action) {\n\n // start off by adding a sequence level record for this combination\n // and setting the level to 0\n _sequenceLevels[combo] = 0;\n\n /**\n * callback to increase the sequence level for this sequence and reset\n * all other sequences that were active\n *\n * @param {string} nextAction\n * @returns {Function}\n */\n function _increaseSequence(nextAction) {\n return function() {\n _nextExpectedAction = nextAction;\n ++_sequenceLevels[combo];\n _resetSequenceTimer();\n };\n }\n\n /**\n * wraps the specified callback inside of another function in order\n * to reset all sequence counters as soon as this sequence is done\n *\n * @param {Event} e\n * @returns void\n */\n function _callbackAndReset(e) {\n _fireCallback(callback, e, combo);\n\n // we should ignore the next key up if the action is key down\n // or keypress. this is so if you finish a sequence and\n // release the key the final key will not trigger a keyup\n if (action !== 'keyup') {\n _ignoreNextKeyup = _characterFromEvent(e);\n }\n\n // weird race condition if a sequence ends with the key\n // another sequence begins with\n setTimeout(_resetSequences, 10);\n }\n\n // loop through keys one at a time and bind the appropriate callback\n // function. for any key leading up to the final one it should\n // increase the sequence. after the final, it should reset all sequences\n //\n // if an action is specified in the original bind call then that will\n // be used throughout. otherwise we will pass the action that the\n // next key in the sequence should match. this allows a sequence\n // to mix and match keypress and keydown events depending on which\n // ones are better suited to the key provided\n for (var i = 0; i < keys.length; ++i) {\n var isFinal = i + 1 === keys.length;\n var wrappedCallback = isFinal ? _callbackAndReset : _increaseSequence(action || _getKeyInfo(keys[i + 1]).action);\n _bindSingle(keys[i], wrappedCallback, action, combo, i);\n }\n }\n\n /**\n * binds a single keyboard combination\n *\n * @param {string} combination\n * @param {Function} callback\n * @param {string=} action\n * @param {string=} sequenceName - name of sequence if part of sequence\n * @param {number=} level - what part of the sequence the command is\n * @returns void\n */\n function _bindSingle(combination, callback, action, sequenceName, level) {\n\n // store a direct mapped reference for use with Mousetrap.trigger\n self._directMap[combination + ':' + action] = callback;\n\n // make sure multiple spaces in a row become a single space\n combination = combination.replace(/\\s+/g, ' ');\n\n var sequence = combination.split(' ');\n var info;\n\n // if this pattern is a sequence of keys then run through this method\n // to reprocess each pattern one key at a time\n if (sequence.length > 1) {\n _bindSequence(combination, sequence, callback, action);\n return;\n }\n\n info = _getKeyInfo(combination, action);\n\n // make sure to initialize array if this is the first time\n // a callback is added for this key\n self._callbacks[info.key] = self._callbacks[info.key] || [];\n\n // remove an existing match if there is one\n _getMatches(info.key, info.modifiers, {type: info.action}, sequenceName, combination, level);\n\n // add this call back to the array\n // if it is a sequence put it at the beginning\n // if not put it at the end\n //\n // this is important because the way these are processed expects\n // the sequence ones to come first\n self._callbacks[info.key][sequenceName ? 'unshift' : 'push']({\n callback: callback,\n modifiers: info.modifiers,\n action: info.action,\n seq: sequenceName,\n level: level,\n combo: combination\n });\n }\n\n /**\n * binds multiple combinations to the same callback\n *\n * @param {Array} combinations\n * @param {Function} callback\n * @param {string|undefined} action\n * @returns void\n */\n self._bindMultiple = function(combinations, callback, action) {\n for (var i = 0; i < combinations.length; ++i) {\n _bindSingle(combinations[i], callback, action);\n }\n };\n\n // start!\n _addEvent(targetElement, 'keypress', _handleKeyEvent);\n _addEvent(targetElement, 'keydown', _handleKeyEvent);\n _addEvent(targetElement, 'keyup', _handleKeyEvent);\n }\n\n /**\n * binds an event to mousetrap\n *\n * can be a single key, a combination of keys separated with +,\n * an array of keys, or a sequence of keys separated by spaces\n *\n * be sure to list the modifier keys first to make sure that the\n * correct key ends up getting bound (the last key in the pattern)\n *\n * @param {string|Array} keys\n * @param {Function} callback\n * @param {string=} action - 'keypress', 'keydown', or 'keyup'\n * @returns void\n */\n Mousetrap.prototype.bind = function(keys, callback, action) {\n var self = this;\n keys = keys instanceof Array ? keys : [keys];\n self._bindMultiple.call(self, keys, callback, action);\n return self;\n };\n\n /**\n * unbinds an event to mousetrap\n *\n * the unbinding sets the callback function of the specified key combo\n * to an empty function and deletes the corresponding key in the\n * _directMap dict.\n *\n * TODO: actually remove this from the _callbacks dictionary instead\n * of binding an empty function\n *\n * the keycombo+action has to be exactly the same as\n * it was defined in the bind method\n *\n * @param {string|Array} keys\n * @param {string} action\n * @returns void\n */\n Mousetrap.prototype.unbind = function(keys, action) {\n var self = this;\n return self.bind.call(self, keys, function() {}, action);\n };\n\n /**\n * triggers an event that has already been bound\n *\n * @param {string} keys\n * @param {string=} action\n * @returns void\n */\n Mousetrap.prototype.trigger = function(keys, action) {\n var self = this;\n if (self._directMap[keys + ':' + action]) {\n self._directMap[keys + ':' + action]({}, keys);\n }\n return self;\n };\n\n /**\n * resets the library back to its initial state. this is useful\n * if you want to clear out the current keyboard shortcuts and bind\n * new ones - for example if you switch to another page\n *\n * @returns void\n */\n Mousetrap.prototype.reset = function() {\n var self = this;\n self._callbacks = {};\n self._directMap = {};\n return self;\n };\n\n /**\n * should we stop this event before firing off callbacks\n *\n * @param {Event} e\n * @param {Element} element\n * @return {boolean}\n */\n Mousetrap.prototype.stopCallback = function(e, element) {\n var self = this;\n\n // if the element has the class \"mousetrap\" then no need to stop\n if ((' ' + element.className + ' ').indexOf(' mousetrap ') > -1) {\n return false;\n }\n\n if (_belongsTo(element, self.target)) {\n return false;\n }\n\n // Events originating from a shadow DOM are re-targetted and `e.target` is the shadow host,\n // not the initial event target in the shadow tree. Note that not all events cross the\n // shadow boundary.\n // For shadow trees with `mode: 'open'`, the initial event target is the first element in\n // the event’s composed path. For shadow trees with `mode: 'closed'`, the initial event\n // target cannot be obtained.\n if ('composedPath' in e && typeof e.composedPath === 'function') {\n // For open shadow trees, update `element` so that the following check works.\n var initialEventTarget = e.composedPath()[0];\n if (initialEventTarget !== e.target) {\n element = initialEventTarget;\n }\n }\n\n // stop for input, select, and textarea\n return element.tagName == 'INPUT' || element.tagName == 'SELECT' || element.tagName == 'TEXTAREA' || element.isContentEditable;\n };\n\n /**\n * exposes _handleKey publicly so it can be overwritten by extensions\n */\n Mousetrap.prototype.handleKey = function() {\n var self = this;\n return self._handleKey.apply(self, arguments);\n };\n\n /**\n * allow custom key mappings\n */\n Mousetrap.addKeycodes = function(object) {\n for (var key in object) {\n if (object.hasOwnProperty(key)) {\n _MAP[key] = object[key];\n }\n }\n _REVERSE_MAP = null;\n };\n\n /**\n * Init the global mousetrap functions\n *\n * This method is needed to allow the global mousetrap functions to work\n * now that mousetrap is a constructor function.\n */\n Mousetrap.init = function() {\n var documentMousetrap = Mousetrap(document);\n for (var method in documentMousetrap) {\n if (method.charAt(0) !== '_') {\n Mousetrap[method] = (function(method) {\n return function() {\n return documentMousetrap[method].apply(documentMousetrap, arguments);\n };\n } (method));\n }\n }\n };\n\n Mousetrap.init();\n\n // expose mousetrap to the global object\n window.Mousetrap = Mousetrap;\n\n // expose as a common js module\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = Mousetrap;\n }\n\n // expose mousetrap as an AMD module\n if (typeof define === 'function' && define.amd) {\n define(function() {\n return Mousetrap;\n });\n }\n}) (typeof window !== 'undefined' ? window : null, typeof window !== 'undefined' ? document : null);\n"],"names":["$","Popover","element","options","this","init","fn","tooltip","Error","VERSION","DEFAULTS","extend","Constructor","placement","trigger","content","template","prototype","constructor","getDefaults","setContent","$tip","tip","title","getTitle","getContent","html","typeContent","sanitize","sanitizeHtml","find","children","detach","end","text","removeClass","hide","hasContent","$e","$element","o","attr","call","arrow","$arrow","old","popover","option","each","$this","data","test","noConflict","jQuery","Tab","Plugin","TRANSITION_DURATION","show","$ul","closest","selector","replace","parent","hasClass","$previous","hideEvent","Event","relatedTarget","showEvent","isDefaultPrevented","$target","document","activate","type","container","callback","$active","transition","support","length","next","addClass","offsetWidth","one","emulateTransitionEnd","tab","clickHandler","e","preventDefault","on","DISALLOWED_ATTRIBUTES","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","toLowerCase","inArray","Boolean","nodeValue","match","regExp","filter","index","value","RegExp","i","l","unsafeHtml","whiteList","sanitizeFn","implementation","createHTMLDocument","createdDocument","body","innerHTML","whitelistKeys","map","el","elements","len","elName","attributeList","attributes","whitelistedAttributes","concat","j","len2","removeAttribute","parentNode","removeChild","Tooltip","enabled","timeout","hoverState","inState","animation","delay","viewport","padding","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","getOptions","$viewport","isFunction","click","hover","focus","triggers","split","proxy","toggle","eventIn","eventOut","enter","leave","_options","fixTitle","dataAttributes","dataAttr","hasOwnProperty","getDelegateOptions","defaults","key","obj","self","currentTarget","clearTimeout","setTimeout","isInStateTrue","inDom","contains","ownerDocument","documentElement","that","tipId","getUID","autoToken","autoPlace","css","top","left","display","appendTo","insertAfter","pos","getPosition","actualWidth","actualHeight","offsetHeight","orgPlacement","viewportDim","bottom","right","width","calculatedOffset","getCalculatedOffset","applyPlacement","complete","prevHoverState","offset","height","marginTop","parseInt","marginLeft","isNaN","setOffset","using","props","Math","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","dimension","removeAttr","isBody","tagName","elRect","getBoundingClientRect","isSvg","window","SVGElement","elOffset","scroll","scrollTop","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","prefix","random","getElementById","enable","disable","toggleEnabled","destroy","off","removeData","_REVERSE_MAP","_MAP","_KEYCODE_MAP","_SHIFT_MAP","_SPECIAL_ALIASES","navigator","platform","toString","Mousetrap","bind","keys","action","Array","_bindMultiple","unbind","_directMap","reset","_callbacks","stopCallback","className","indexOf","_belongsTo","target","composedPath","initialEventTarget","isContentEditable","handleKey","_handleKey","apply","arguments","addKeycodes","object","documentMousetrap","method","charAt","module","exports","_addEvent","addEventListener","attachEvent","_characterFromEvent","character","String","fromCharCode","which","shiftKey","_isModifier","_pickBestAction","modifiers","_getReverseMap","_getKeyInfo","combination","_keysFromString","push","ancestor","targetElement","_resetTimer","_sequenceLevels","_ignoreNextKeyup","_ignoreNextKeypress","_nextExpectedAction","_resetSequences","doNotReset","activeSequences","_getMatches","sequenceName","level","modifiers1","modifiers2","matches","seq","metaKey","ctrlKey","sort","join","deleteCombo","combo","deleteSequence","splice","_fireCallback","sequence","srcElement","returnValue","_preventDefault","stopPropagation","cancelBubble","_stopPropagation","_handleKeyEvent","keyCode","altKey","_eventModifiers","_bindSingle","info","_increaseSequence","nextAction","_callbackAndReset","wrappedCallback","_bindSequence","callbacks","maxLevel","processedSequenceCallback","max","ignoreThisKeypress","combinations"],"sourceRoot":""}