-
Notifications
You must be signed in to change notification settings - Fork 0
/
esintreport.json
1 lines (1 loc) · 198 KB
/
esintreport.json
1
[{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/index.esm.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/index.umd.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/alert.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/base-component.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/button.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/carousel.js","messages":[{"ruleId":"no-warning-comments","severity":1,"message":"Unexpected 'fixme' comment: 'FIXME TODO use...'.","line":129,"column":5,"nodeType":"Line","messageId":"unexpectedComment","endLine":129,"endColumn":49}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getElementFromSelector,\n getNextActiveElement,\n isRTL,\n isVisible,\n reflow,\n triggerTransitionEnd\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport Swipe from './util/swipe'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ARROW_LEFT_KEY = 'ArrowLeft'\nconst ARROW_RIGHT_KEY = 'ArrowRight'\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\n\nconst ORDER_NEXT = 'next'\nconst ORDER_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_END = 'carousel-item-end'\nconst CLASS_NAME_START = 'carousel-item-start'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-bs-ride=\"carousel\"]'\n\nconst KEY_TO_DIRECTION = {\n [ARROW_LEFT_KEY]: DIRECTION_RIGHT,\n [ARROW_RIGHT_KEY]: DIRECTION_LEFT\n}\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this._swipeHelper = null\n\n this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element)\n this._addEventListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n next() {\n this._slide(ORDER_NEXT)\n }\n\n nextWhenVisible() {\n // FIXME TODO use `document.visibilityState`\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden && isVisible(this._element)) {\n this.next()\n }\n }\n\n prev() {\n this._slide(ORDER_PREV)\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (SelectorEngine.findOne(SELECTOR_NEXT_PREV, this._element)) {\n triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n this._clearInterval()\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n this._clearInterval()\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval)\n }\n }\n\n to(index) {\n this._activeElement = this._getActive()\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n EventHandler.one(this._element, EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const order = index > activeIndex ?\n ORDER_NEXT :\n ORDER_PREV\n\n this._slide(order, this._items[index])\n }\n\n dispose() {\n if (this._swipeHelper) {\n this._swipeHelper.dispose()\n }\n\n super.dispose()\n }\n\n // Private\n _configAfterMerge(config) {\n config.defaultInterval = config.interval\n return config\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n EventHandler.on(this._element, EVENT_MOUSEENTER, event => this.pause(event))\n EventHandler.on(this._element, EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch && Swipe.isSupported()) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) {\n EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault())\n }\n\n const endCallBack = () => {\n if (this._config.pause !== 'hover') {\n return\n }\n\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n\n const swipeConfig = {\n leftCallback: () => this._slide(DIRECTION_LEFT),\n rightCallback: () => this._slide(DIRECTION_RIGHT),\n endCallback: endCallBack\n }\n\n this._swipeHelper = new Swipe(this._element, swipeConfig)\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n const direction = KEY_TO_DIRECTION[event.key]\n if (direction) {\n event.preventDefault()\n this._slide(direction)\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n SelectorEngine.find(SELECTOR_ITEM, element.parentNode) :\n []\n\n return this._items.indexOf(element)\n }\n\n _getItemByOrder(order, activeElement) {\n const isNext = order === ORDER_NEXT\n return getNextActiveElement(this._items, activeElement, isNext, this._config.wrap)\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._getActive())\n\n return EventHandler.trigger(this._element, EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n }\n\n _setActiveIndicatorElement(element) {\n if (!this._indicatorsElement) {\n return\n }\n\n const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement)\n\n activeIndicator.classList.remove(CLASS_NAME_ACTIVE)\n activeIndicator.removeAttribute('aria-current')\n\n const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to=\"${this._getItemIndex(element)}\"]`, this._indicatorsElement)\n\n if (newActiveIndicator) {\n newActiveIndicator.classList.add(CLASS_NAME_ACTIVE)\n newActiveIndicator.setAttribute('aria-current', 'true')\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._getActive()\n\n if (!element) {\n return\n }\n\n const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10)\n\n this._config.interval = elementInterval || this._config.defaultInterval\n }\n\n _slide(directionOrOrder, element) {\n const order = this._directionToOrder(directionOrOrder)\n const activeElement = this._getActive()\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || this._getItemByOrder(order, activeElement)\n\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n const isNext = order === ORDER_NEXT\n const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END\n const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV\n const eventDirectionName = this._orderToDirection(order)\n\n if (nextElement && nextElement.classList.contains(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n if (this._isSliding) {\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.defaultPrevented) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const triggerSlidEvent = () => {\n EventHandler.trigger(this._element, EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n }\n\n if (this._element.classList.contains(CLASS_NAME_SLIDE)) {\n nextElement.classList.add(orderClassName)\n\n reflow(nextElement)\n\n activeElement.classList.add(directionalClassName)\n nextElement.classList.add(directionalClassName)\n\n const completeCallBack = () => {\n nextElement.classList.remove(directionalClassName, orderClassName)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n activeElement.classList.remove(CLASS_NAME_ACTIVE, orderClassName, directionalClassName)\n\n this._isSliding = false\n\n setTimeout(triggerSlidEvent, 0)\n }\n\n this._queueCallback(completeCallBack, activeElement, true)\n } else {\n activeElement.classList.remove(CLASS_NAME_ACTIVE)\n nextElement.classList.add(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n triggerSlidEvent()\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n _getActive() {\n return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element)\n }\n\n _clearInterval() {\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n }\n\n _directionToOrder(direction) {\n if (![DIRECTION_RIGHT, DIRECTION_LEFT].includes(direction)) {\n return direction\n }\n\n if (isRTL()) {\n return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT\n }\n\n return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV\n }\n\n _orderToDirection(order) {\n if (![ORDER_NEXT, ORDER_PREV].includes(order)) {\n return order\n }\n\n if (isRTL()) {\n return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT\n }\n\n return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT\n }\n\n // Static\n static carouselInterface(element, config) {\n const data = Carousel.getOrCreateInstance(element, config)\n\n let { _config } = data\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n }\n\n static jQueryInterface(config) {\n return this.each(function () {\n Carousel.carouselInterface(this, config)\n })\n }\n\n static dataApiClickHandler(event) {\n const target = getElementFromSelector(this)\n\n if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...Manipulator.getDataAttributes(target),\n ...Manipulator.getDataAttributes(this)\n }\n const slideIndex = this.getAttribute('data-bs-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel.carouselInterface(target, config)\n\n if (slideIndex) {\n Carousel.getInstance(target).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel.dataApiClickHandler)\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE)\n\n for (const carousel of carousels) {\n Carousel.carouselInterface(carousel, Carousel.getInstance(carousel))\n }\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Carousel)\n\nexport default Carousel\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/collapse.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/dom/data.js","messages":[],"suppressedMessages":[{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":26,"column":7,"nodeType":"MemberExpression","messageId":"unexpected","endLine":26,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/dom/event-handler.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/dom/manipulator.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/dom/selector-engine.js","messages":[{"ruleId":"no-warning-comments","severity":1,"message":"Unexpected 'todo' comment: 'TODO: this is now unused; remove later...'.","line":52,"column":3,"nodeType":"Line","messageId":"unexpectedComment","endLine":52,"endColumn":62}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dom/selector-engine.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { isDisabled, isVisible } from '../util/index'\n\n/**\n * Constants\n */\n\nconst SelectorEngine = {\n find(selector, element = document.documentElement) {\n return [].concat(...Element.prototype.querySelectorAll.call(element, selector))\n },\n\n findOne(selector, element = document.documentElement) {\n return Element.prototype.querySelector.call(element, selector)\n },\n\n children(element, selector) {\n return [].concat(...element.children).filter(child => child.matches(selector))\n },\n\n parents(element, selector) {\n const parents = []\n let ancestor = element.parentNode.closest(selector)\n\n while (ancestor) {\n parents.push(ancestor)\n ancestor = ancestor.parentNode.closest(selector)\n }\n\n return parents\n },\n\n prev(element, selector) {\n let previous = element.previousElementSibling\n\n while (previous) {\n if (previous.matches(selector)) {\n return [previous]\n }\n\n previous = previous.previousElementSibling\n }\n\n return []\n },\n // TODO: this is now unused; remove later along with prev()\n next(element, selector) {\n let next = element.nextElementSibling\n\n while (next) {\n if (next.matches(selector)) {\n return [next]\n }\n\n next = next.nextElementSibling\n }\n\n return []\n },\n\n focusableChildren(element) {\n const focusables = [\n 'a',\n 'button',\n 'input',\n 'textarea',\n 'select',\n 'details',\n '[tabindex]',\n '[contenteditable=\"true\"]'\n ].map(selector => `${selector}:not([tabindex^=\"-\"])`).join(',')\n\n return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el))\n }\n}\n\nexport default SelectorEngine\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/dropdown.js","messages":[{"ruleId":"no-warning-comments","severity":1,"message":"Unexpected 'todo' comment: 'todo:v6 remove'.","line":297,"column":68,"nodeType":"Line","messageId":"unexpectedComment","endLine":297,"endColumn":85}],"suppressedMessages":[{"ruleId":"unicorn/no-lonely-if","severity":2,"message":"Unexpected `if` as the only statement in a `if` block without `else`.","line":399,"column":7,"nodeType":"IfStatement","messageId":"no-lonely-if","endLine":401,"endColumn":8,"fix":{"range":[11294,11470],"text":"(isInput && !isEscapeEvent && // eslint-disable-next-line unicorn/no-lonely-if\n (!isUpOrDownEvent || target.closest(SELECTOR_MENU))) {\n return\n }"},"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n getElement,\n getNextActiveElement,\n isDisabled,\n isElement,\n isRTL,\n isVisible,\n noop\n} from './util/index'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport SelectorEngine from './dom/selector-engine'\nimport BaseComponent from './base-component'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst ESCAPE_KEY = 'Escape'\nconst TAB_KEY = 'Tab'\nconst ARROW_UP_KEY = 'ArrowUp'\nconst ARROW_DOWN_KEY = 'ArrowDown'\nconst RIGHT_MOUSE_BUTTON = 2 // MouseEvent.button value for the secondary button, usually the right button\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPEND = 'dropend'\nconst CLASS_NAME_DROPSTART = 'dropstart'\n\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"dropdown\"]'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR = '.navbar'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'\nconst PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'\nconst PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'\nconst PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'\nconst PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'\nconst PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'\n\nconst Default = {\n offset: [0, 2],\n boundary: 'clippingParents',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null,\n autoClose: true\n}\n\nconst DefaultType = {\n offset: '(array|string|function)',\n boundary: '(string|element)',\n reference: '(string|element|object)',\n display: 'string',\n popperConfig: '(null|object|function)',\n autoClose: '(boolean|string)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._popper = null\n this._parent = this._element.parentNode // dropdown wrapper\n this._menu = SelectorEngine.findOne(SELECTOR_MENU, this._parent)\n this._inNavbar = this._detectNavbar()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle() {\n return this._isShown() ? this.hide() : this.show()\n }\n\n show() {\n if (isDisabled(this._element) || this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, relatedTarget)\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._createPopper()\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n this._menu.classList.add(CLASS_NAME_SHOW)\n this._element.classList.add(CLASS_NAME_SHOW)\n EventHandler.trigger(this._element, EVENT_SHOWN, relatedTarget)\n }\n\n hide() {\n if (isDisabled(this._element) || !this._isShown()) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n\n this._completeHide(relatedTarget)\n }\n\n dispose() {\n if (this._popper) {\n this._popper.destroy()\n }\n\n super.dispose()\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Private\n _completeHide(relatedTarget) {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE, relatedTarget)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._menu.classList.remove(CLASS_NAME_SHOW)\n this._element.classList.remove(CLASS_NAME_SHOW)\n this._element.setAttribute('aria-expanded', 'false')\n Manipulator.removeDataAttribute(this._menu, 'popper')\n EventHandler.trigger(this._element, EVENT_HIDDEN, relatedTarget)\n }\n\n _getConfig(config) {\n config = super._getConfig(config)\n\n if (typeof config.reference === 'object' && !isElement(config.reference) &&\n typeof config.reference.getBoundingClientRect !== 'function'\n ) {\n // Popper virtual elements require a getBoundingClientRect method\n throw new TypeError(`${NAME.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`)\n }\n\n return config\n }\n\n _createPopper() {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = this._parent\n } else if (isElement(this._config.reference)) {\n referenceElement = getElement(this._config.reference)\n } else if (typeof this._config.reference === 'object') {\n referenceElement = this._config.reference\n }\n\n const popperConfig = this._getPopperConfig()\n this._popper = Popper.createPopper(referenceElement, this._menu, popperConfig)\n }\n\n _isShown() {\n return this._menu.classList.contains(CLASS_NAME_SHOW)\n }\n\n _getPlacement() {\n const parentDropdown = this._parent\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {\n return PLACEMENT_RIGHT\n }\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) {\n return PLACEMENT_LEFT\n }\n\n // We need to trim the value because custom properties can also include spaces\n const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'\n\n if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) {\n return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP\n }\n\n return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM\n }\n\n _detectNavbar() {\n return this._element.closest(SELECTOR_NAVBAR) !== null\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const defaultBsPopperConfig = {\n placement: this._getPlacement(),\n modifiers: [{\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n }]\n }\n\n // Disable Popper if we have a static display or Dropdown is in Navbar\n if (this._inNavbar || this._config.display === 'static') {\n Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove\n defaultBsPopperConfig.modifiers = [{\n name: 'applyStyles',\n enabled: false\n }]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _selectMenuItem({ key, target }) {\n const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element))\n\n if (!items.length) {\n return\n }\n\n // if target isn't included in items (e.g. when expanding the dropdown)\n // allow cycling to get the last item in case key equals ARROW_UP_KEY\n getNextActiveElement(items, target, key === ARROW_DOWN_KEY, !items.includes(target)).focus()\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Dropdown.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n\n static clearMenus(event) {\n if (event.button === RIGHT_MOUSE_BUTTON || (event.type === 'keyup' && event.key !== TAB_KEY)) {\n return\n }\n\n const toggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE)\n\n for (const toggle of toggles) {\n const context = Dropdown.getInstance(toggle)\n if (!context || context._config.autoClose === false) {\n continue\n }\n\n if (!context._isShown()) {\n continue\n }\n\n const composedPath = event.composedPath()\n const isMenuTarget = composedPath.includes(context._menu)\n if (\n composedPath.includes(context._element) ||\n (context._config.autoClose === 'inside' && !isMenuTarget) ||\n (context._config.autoClose === 'outside' && isMenuTarget)\n ) {\n continue\n }\n\n // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu\n if (context._menu.contains(event.target) && ((event.type === 'keyup' && event.key === TAB_KEY) || /input|select|option|textarea|form/i.test(event.target.tagName))) {\n continue\n }\n\n const relatedTarget = { relatedTarget: context._element }\n\n if (event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n context._completeHide(relatedTarget)\n }\n }\n\n static dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in UP | DOWN | ESCAPE => not a dropdown command\n // If input/textarea && If key is other than ESCAPE\n // - If key is not UP or DOWN => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n\n const { target, key, delegateTarget } = event\n const isInput = /input|textarea/i.test(target.tagName)\n const isEscapeEvent = key === ESCAPE_KEY\n const isUpOrDownEvent = [ARROW_UP_KEY, ARROW_DOWN_KEY].includes(key)\n\n if (!isInput && !(isUpOrDownEvent || isEscapeEvent)) {\n return\n }\n\n if (isInput && !isEscapeEvent) {\n // eslint-disable-next-line unicorn/no-lonely-if\n if (!isUpOrDownEvent || target.closest(SELECTOR_MENU)) {\n return\n }\n }\n\n const isActive = delegateTarget.classList.contains(CLASS_NAME_SHOW)\n\n if (!isActive && isEscapeEvent) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (isDisabled(this)) {\n return\n }\n\n const getToggleButton = SelectorEngine.findOne(SELECTOR_DATA_TOGGLE, delegateTarget.parentNode)\n const instance = Dropdown.getOrCreateInstance(getToggleButton)\n\n if (isEscapeEvent) {\n instance.hide()\n getToggleButton.focus()\n return\n }\n\n if (isUpOrDownEvent) {\n instance.show()\n instance._selectMenuItem(event)\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler)\nEventHandler.on(document, EVENT_CLICK_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus)\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Dropdown.getOrCreateInstance(this).toggle()\n})\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Dropdown)\n\nexport default Dropdown\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/modal.js","messages":[{"ruleId":"no-multiple-empty-lines","severity":2,"message":"Too many blank lines at the end of file. Max of 1 allowed.","line":385,"column":1,"nodeType":"Program","messageId":"blankEndOfFile","endLine":421,"endColumn":1,"fix":{"range":[9484,9520],"text":""}}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":1,"fixableWarningCount":0,"source":"/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { defineJQueryPlugin, getElementFromSelector, isRTL, isVisible, reflow } from './util/index'\nimport EventHandler from './dom/event-handler'\nimport SelectorEngine from './dom/selector-engine'\nimport ScrollBarHelper from './util/scrollbar'\nimport BaseComponent from './base-component'\nimport Backdrop from './util/backdrop'\nimport FocusTrap from './util/focustrap'\nimport { enableDismissTrigger } from './util/component-functions'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst ESCAPE_KEY = 'Escape'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst OPEN_SELECTOR = '.modal.show'\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-bs-toggle=\"modal\"]'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal extends BaseComponent {\n constructor(element, config) {\n super(element, config)\n\n this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element)\n this._backdrop = this._initializeBackDrop()\n this._focustrap = this._initializeFocusTrap()\n this._isShown = false\n this._isTransitioning = false\n this._scrollBar = new ScrollBarHelper()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {\n relatedTarget\n })\n\n if (showEvent.defaultPrevented) {\n return\n }\n\n this._isShown = true\n this._isTransitioning = true\n\n this._scrollBar.hide()\n\n document.body.classList.add(CLASS_NAME_OPEN)\n\n this._adjustDialog()\n\n this._toggleEscapeEventListener(true)\n this._toggleResizeEventListener(true)\n\n this._backdrop.show(() => this._showElement(relatedTarget))\n }\n\n hide() {\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE)\n\n if (hideEvent.defaultPrevented) {\n return\n }\n\n this._isShown = false\n this._isTransitioning = true\n\n this._toggleEscapeEventListener(false)\n this._toggleResizeEventListener(false)\n\n this._focustrap.deactivate()\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n\n this._queueCallback(() => this._hideModal(), this._element, this._isAnimated())\n }\n\n dispose() {\n for (const htmlElement of [window, this._dialog]) {\n EventHandler.off(htmlElement, EVENT_KEY)\n }\n\n this._backdrop.dispose()\n this._focustrap.deactivate()\n super.dispose()\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _initializeBackDrop() {\n const clickCallback = () => {\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n return\n }\n\n this.hide()\n }\n\n // 'static' option will be translated to true, and booleans will keep their value\n const isVisible = Boolean(this._config.backdrop)\n\n return new Backdrop({\n isVisible,\n isAnimated: this._isAnimated(),\n clickCallback: isVisible ? clickCallback : null\n })\n }\n\n _initializeFocusTrap() {\n return new FocusTrap({\n trapElement: this._element\n })\n }\n\n _showElement(relatedTarget) {\n // try to append dynamic modal\n if (!document.body.contains(this._element)) {\n document.body.append(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n this._element.scrollTop = 0\n\n const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog)\n if (modalBody) {\n modalBody.scrollTop = 0\n }\n\n reflow(this._element)\n\n this._element.classList.add(CLASS_NAME_SHOW)\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._focustrap.activate()\n }\n\n this._isTransitioning = false\n EventHandler.trigger(this._element, EVENT_SHOWN, {\n relatedTarget\n })\n }\n\n this._queueCallback(transitionComplete, this._dialog, this._isAnimated())\n }\n\n _toggleEscapeEventListener(enable) {\n if (!enable) {\n EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS)\n return\n }\n\n EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => {\n if (event.key !== ESCAPE_KEY) {\n return\n }\n\n if (this._config.keyboard) {\n event.preventDefault()\n this.hide()\n return\n }\n\n this._triggerBackdropTransition()\n })\n }\n\n _toggleResizeEventListener(enable) {\n if (enable) {\n EventHandler.on(window, EVENT_RESIZE, () => this._adjustDialog())\n return\n }\n\n EventHandler.off(window, EVENT_RESIZE)\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n\n this._backdrop.hide(() => {\n document.body.classList.remove(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._scrollBar.reset()\n EventHandler.trigger(this._element, EVENT_HIDDEN)\n })\n }\n\n _isAnimated() {\n return this._element.classList.contains(CLASS_NAME_FADE)\n }\n\n _triggerBackdropTransition() {\n const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const initialOverflowY = this._element.style.overflowY\n // return if the following background transition hasn't yet completed\n if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {\n return\n }\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n this._queueCallback(() => {\n this._element.style.overflowY = initialOverflowY\n }, this._dialog)\n }, this._dialog)\n\n this._element.focus()\n }\n\n /**\n * The following methods are used to handle overflowing modals\n */\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n const scrollbarWidth = this._scrollBar.getWidth()\n const isBodyOverflowing = scrollbarWidth > 0\n\n if (isBodyOverflowing && !isModalOverflowing) {\n const property = isRTL() ? 'paddingLeft' : 'paddingRight'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n\n if (!isBodyOverflowing && isModalOverflowing) {\n const property = isRTL() ? 'paddingRight' : 'paddingLeft'\n this._element.style[property] = `${scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n // Static\n static jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n const data = Modal.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\nEventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n const target = getElementFromSelector(this)\n\n if (['A', 'AREA'].includes(this.tagName)) {\n event.preventDefault()\n }\n\n EventHandler.one(target, EVENT_SHOW, showEvent => {\n if (showEvent.defaultPrevented) {\n // only register focus restorer if modal will actually get shown\n return\n }\n\n EventHandler.one(target, EVENT_HIDDEN, () => {\n if (isVisible(this)) {\n this.focus()\n }\n })\n })\n\n // avoid conflict when clicking modal toggler while another one is open\n const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR)\n if (alreadyOpen) {\n Modal.getInstance(alreadyOpen).hide()\n }\n\n const data = Modal.getOrCreateInstance(target)\n\n data.toggle(this)\n})\n\nenableDismissTrigger(Modal)\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Modal)\n\nexport default Modal\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/offcanvas.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/popover.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/scrollspy.js","messages":[],"suppressedMessages":[{"ruleId":"no-new","severity":2,"message":"Do not use 'new' for side effects.","line":256,"column":5,"nodeType":"ExpressionStatement","messageId":"noNewStatement","endLine":256,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/tab.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/toast.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/tooltip.js","messages":[{"ruleId":"no-warning-comments","severity":1,"message":"Unexpected 'todo' comment: 'todo: remove this check on v6'.","line":334,"column":5,"nodeType":"Line","messageId":"unexpectedComment","endLine":334,"endColumn":37},{"ruleId":"no-warning-comments","severity":1,"message":"Unexpected 'todo' comment: 'todo: on v6 the following can be...'.","line":340,"column":5,"nodeType":"Line","messageId":"unexpectedComment","endLine":340,"endColumn":63}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.1.3): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport * as Popper from '@popperjs/core'\nimport {\n defineJQueryPlugin,\n findShadowRoot,\n getElement,\n getUID,\n isRTL,\n noop\n} from './util/index'\nimport { DefaultAllowlist } from './util/sanitizer'\nimport EventHandler from './dom/event-handler'\nimport Manipulator from './dom/manipulator'\nimport BaseComponent from './base-component'\nimport TemplateFactory from './util/template-factory'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn'])\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_MODAL = 'modal'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`\n\nconst EVENT_MODAL_HIDE = 'hide.bs.modal'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: isRTL() ? 'left' : 'right',\n BOTTOM: 'bottom',\n LEFT: isRTL() ? 'right' : 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"tooltip-arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div>' +\n '</div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: [0, 0],\n container: false,\n fallbackPlacements: ['top', 'right', 'bottom', 'left'],\n boundary: 'clippingParents',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n allowList: DefaultAllowlist,\n popperConfig: null\n}\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(array|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacements: 'array',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n allowList: 'object',\n popperConfig: '(null|object|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip extends BaseComponent {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n super(element, config)\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._isHovered = false\n this._activeTrigger = {}\n this._popper = null\n this._templateFactory = null\n\n // Protected\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get NAME() {\n return NAME\n }\n\n static get Event() {\n return Event\n }\n\n // Public\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 if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const context = this._initializeOnDelegatedTarget(event)\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter()\n } else {\n context._leave()\n }\n\n return\n }\n\n if (this._isShown()) {\n this._leave()\n return\n }\n\n this._enter()\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this.tip) {\n this.tip.remove()\n }\n\n this._disposePopper()\n super.dispose()\n }\n\n show() {\n if (this._element.style.display === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n if (!(this._isWithContent() && this._isEnabled)) {\n return\n }\n\n const showEvent = EventHandler.trigger(this._element, this.constructor.Event.SHOW)\n const shadowRoot = findShadowRoot(this._element)\n const isInTheDom = shadowRoot === null ?\n this._element.ownerDocument.documentElement.contains(this._element) :\n shadowRoot.contains(this._element)\n\n if (showEvent.defaultPrevented || !isInTheDom) {\n return\n }\n\n const tip = this._getTipElement()\n\n this._element.setAttribute('aria-describedby', tip.getAttribute('id'))\n\n const { container } = this._config\n\n if (!this._element.ownerDocument.documentElement.contains(this.tip)) {\n container.append(tip)\n EventHandler.trigger(this._element, this.constructor.Event.INSERTED)\n }\n\n if (this._popper) {\n this._popper.update()\n } else {\n this._createPopper(tip)\n }\n\n tip.classList.add(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.on(element, 'mouseover', noop)\n }\n }\n\n const complete = () => {\n const previousHoverState = this._isHovered\n\n this._isHovered = false\n EventHandler.trigger(this._element, this.constructor.Event.SHOWN)\n\n if (previousHoverState) {\n this._leave()\n }\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n hide() {\n if (!this._isShown()) {\n return\n }\n\n const hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE)\n if (hideEvent.defaultPrevented) {\n return\n }\n\n const tip = this._getTipElement()\n tip.classList.remove(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n for (const element of [].concat(...document.body.children)) {\n EventHandler.off(element, 'mouseover', noop)\n }\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n this._isHovered = false\n\n const complete = () => {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n if (!this._isHovered) {\n tip.remove()\n }\n\n this._element.removeAttribute('aria-describedby')\n EventHandler.trigger(this._element, this.constructor.Event.HIDDEN)\n\n this._disposePopper()\n }\n\n this._queueCallback(complete, this.tip, this._isAnimated())\n }\n\n update() {\n if (this._popper) {\n this._popper.update()\n }\n }\n\n // Protected\n _isWithContent() {\n return Boolean(this._getTitle())\n }\n\n _getTipElement() {\n if (!this.tip) {\n this.tip = this._createTipElement(this._getContentForTemplate())\n }\n\n return this.tip\n }\n\n _createTipElement(content) {\n const tip = this._getTemplateFactory(content).toHtml()\n\n // todo: remove this check on v6\n if (!tip) {\n return null\n }\n\n tip.classList.remove(CLASS_NAME_FADE, CLASS_NAME_SHOW)\n // todo: on v6 the following can be achieved with CSS only\n tip.classList.add(`bs-${this.constructor.NAME}-auto`)\n\n const tipId = getUID(this.constructor.NAME).toString()\n\n tip.setAttribute('id', tipId)\n\n if (this._isAnimated()) {\n tip.classList.add(CLASS_NAME_FADE)\n }\n\n return tip\n }\n\n setContent(content) {\n let isShown = false\n if (this.tip) {\n isShown = this._isShown()\n this.tip.remove()\n this.tip = null\n }\n\n this._disposePopper()\n this.tip = this._createTipElement(content)\n\n if (isShown) {\n this.show()\n }\n }\n\n _getTemplateFactory(content) {\n if (this._templateFactory) {\n this._templateFactory.changeContent(content)\n } else {\n this._templateFactory = new TemplateFactory({\n ...this._config,\n // the `content` var has to be after `this._config`\n // to override config.content in case of popover\n content,\n extraClass: this._resolvePossibleFunction(this._config.customClass)\n })\n }\n\n return this._templateFactory\n }\n\n _getContentForTemplate() {\n return {\n [SELECTOR_TOOLTIP_INNER]: this._getTitle()\n }\n }\n\n _getTitle() {\n return this._config.title\n }\n\n // Private\n _initializeOnDelegatedTarget(event) {\n return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig())\n }\n\n _isAnimated() {\n return this._config.animation || (this.tip && this.tip.classList.contains(CLASS_NAME_FADE))\n }\n\n _isShown() {\n return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW)\n }\n\n _createPopper(tip) {\n const placement = typeof this._config.placement === 'function' ?\n this._config.placement.call(this, tip, this._element) :\n this._config.placement\n const attachment = AttachmentMap[placement.toUpperCase()]\n this._popper = Popper.createPopper(this._element, tip, this._getPopperConfig(attachment))\n }\n\n _getOffset() {\n const { offset } = this._config\n\n if (typeof offset === 'string') {\n return offset.split(',').map(value => Number.parseInt(value, 10))\n }\n\n if (typeof offset === 'function') {\n return popperData => offset(popperData, this._element)\n }\n\n return offset\n }\n\n _resolvePossibleFunction(arg) {\n return typeof arg === 'function' ? arg.call(this._element) : arg\n }\n\n _getPopperConfig(attachment) {\n const defaultBsPopperConfig = {\n placement: attachment,\n modifiers: [\n {\n name: 'flip',\n options: {\n fallbackPlacements: this._config.fallbackPlacements\n }\n },\n {\n name: 'offset',\n options: {\n offset: this._getOffset()\n }\n },\n {\n name: 'preventOverflow',\n options: {\n boundary: this._config.boundary\n }\n },\n {\n name: 'arrow',\n options: {\n element: `.${this.constructor.NAME}-arrow`\n }\n },\n {\n name: 'preSetPlacement',\n enabled: true,\n phase: 'beforeMain',\n fn: data => {\n // Pre-set Popper's placement attribute in order to read the arrow sizes properly.\n // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement\n this._getTipElement().setAttribute('data-popper-placement', data.state.placement)\n }\n }\n ]\n }\n\n return {\n ...defaultBsPopperConfig,\n ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig)\n }\n }\n\n _setListeners() {\n const triggers = this._config.trigger.split(' ')\n\n for (const trigger of triggers) {\n if (trigger === 'click') {\n EventHandler.on(this._element, this.constructor.Event.CLICK, this._config.selector, event => this.toggle(event))\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n EventHandler.on(this._element, eventIn, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true\n context._enter()\n })\n EventHandler.on(this._element, eventOut, this._config.selector, event => {\n const context = this._initializeOnDelegatedTarget(event)\n context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] =\n context._element.contains(event.relatedTarget)\n\n context._leave()\n })\n }\n }\n\n this._hideModalHandler = () => {\n if (this._element) {\n this.hide()\n }\n }\n\n EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler)\n\n if (this._config.selector) {\n this._config = {\n ...this._config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const title = this._config.originalTitle\n\n if (!title) {\n return\n }\n\n if (!this._element.getAttribute('aria-label') && !this._element.textContent) {\n this._element.setAttribute('aria-label', title)\n }\n\n this._element.removeAttribute('title')\n }\n\n _enter() {\n if (this._isShown() || this._isHovered) {\n this._isHovered = true\n return\n }\n\n this._isHovered = true\n\n this._setTimeout(() => {\n if (this._isHovered) {\n this.show()\n }\n }, this._config.delay.show)\n }\n\n _leave() {\n if (this._isWithActiveTrigger()) {\n return\n }\n\n this._isHovered = false\n\n this._setTimeout(() => {\n if (!this._isHovered) {\n this.hide()\n }\n }, this._config.delay.hide)\n }\n\n _setTimeout(handler, timeout) {\n clearTimeout(this._timeout)\n this._timeout = setTimeout(handler, timeout)\n }\n\n _isWithActiveTrigger() {\n return Object.values(this._activeTrigger).includes(true)\n }\n\n _getConfig(config) {\n const dataAttributes = Manipulator.getDataAttributes(this._element)\n\n for (const dataAttribute of Object.keys(dataAttributes)) {\n if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) {\n delete dataAttributes[dataAttribute]\n }\n }\n\n config = {\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n config = this._mergeConfigObj(config)\n config = this._configAfterMerge(config)\n this._typeCheckConfig(config)\n return config\n }\n\n _configAfterMerge(config) {\n config.container = config.container === false ? document.body : getElement(config.container)\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n config.originalTitle = this._element.getAttribute('title') || ''\n config.title = this._resolvePossibleFunction(config.title) || config.originalTitle\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n for (const key in this._config) {\n if (this.constructor.Default[key] !== this._config[key]) {\n config[key] = this._config[key]\n }\n }\n\n // In the future can be replaced with:\n // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]])\n // `Object.fromEntries(keysWithDifferentValues)`\n return config\n }\n\n _disposePopper() {\n if (this._popper) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n // Static\n static jQueryInterface(config) {\n return this.each(function () {\n const data = Tooltip.getOrCreateInstance(this, config)\n\n if (typeof config !== 'string') {\n return\n }\n\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n })\n }\n}\n\n/**\n * jQuery\n */\n\ndefineJQueryPlugin(Tooltip)\n\nexport default Tooltip\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/backdrop.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/component-functions.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/config.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/focustrap.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/index.js","messages":[],"suppressedMessages":[{"ruleId":"no-unused-expressions","severity":2,"message":"Expected an assignment or function call and instead saw an expression.","line":203,"column":3,"nodeType":"ExpressionStatement","messageId":"unusedExpression","endLine":203,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/sanitizer.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/scrollbar.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/swipe.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/src/util/template-factory.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/README.md","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected character '#'","line":1,"column":2}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"## How does Bootstrap's test suite work?\n\nBootstrap uses [Jasmine](https://jasmine.github.io/). Each plugin has a file dedicated to its tests in `tests/unit/<plugin-name>.spec.js`.\n\n- `visual/` contains \"visual\" tests which are run interactively in real browsers and require manual verification by humans.\n\nTo run the unit test suite via [Karma](https://karma-runner.github.io/), run `npm run js-test`.\nTo run the unit test suite via [Karma](https://karma-runner.github.io/) and debug, run `npm run js-debug`.\n\n## How do I add a new unit test?\n\n1. Locate and open the file dedicated to the plugin which you need to add tests to (`tests/unit/<plugin-name>.spec.js`).\n2. Review the [Jasmine API Documentation](https://jasmine.github.io/pages/docs_home.html) and use the existing tests as references for how to structure your new tests.\n3. Write the necessary unit test(s) for the new or revised functionality.\n4. Run `npm run js-test` to see the results of your newly-added test(s).\n\n**Note:** Your new unit tests should fail before your changes are applied to the plugin, and should pass after your changes are applied to the plugin.\n\n## What should a unit test look like?\n\n- Each test should have a unique name clearly stating what unit is being tested.\n- Each test should be in the corresponding `describe`.\n- Each test should test only one unit per test, although one test can include several assertions. Create multiple tests for multiple units of functionality.\n- Each test should use [`expect`](https://jasmine.github.io/api/edge/matchers.html) to ensure something is expected.\n- Each test should follow the project's [JavaScript Code Guidelines](https://github.com/twbs/bootstrap/blob/main/.github/CONTRIBUTING.md#js)\n\n## Code coverage\n\nCurrently we're aiming for at least 90% test coverage for our code. To ensure your changes meet or exceed this limit, run `npm run js-test-karma` and open the file in `js/coverage/lcov-report/index.html` to see the code coverage for each plugin. See more details when you select a plugin and ensure your change is fully covered by unit tests.\n\n### Example tests\n\n```js\n// Synchronous test\ndescribe('getInstance', () => {\n it('should return null if there is no instance', () => {\n // Make assertion\n expect(Tab.getInstance(fixtureEl)).toBeNull()\n })\n\n it('should return this instance', () => {\n fixtureEl.innerHTML = '<div></div>'\n\n const divEl = fixtureEl.querySelector('div')\n const tab = new Tab(divEl)\n\n // Make assertion\n expect(Tab.getInstance(divEl)).toEqual(tab)\n })\n})\n\n// Asynchronous test\nit('should show a tooltip without the animation', () => {\n return new Promise(resolve => {\n fixtureEl.innerHTML = '<a href=\"#\" rel=\"tooltip\" title=\"Another tooltip\"></a>'\n\n const tooltipEl = fixtureEl.querySelector('a')\n const tooltip = new Tooltip(tooltipEl, {\n animation: false\n })\n\n tooltipEl.addEventListener('shown.bs.tooltip', () => {\n const tip = document.querySelector('.tooltip')\n\n expect(tip).not.toBeNull()\n expect(tip.classList.contains('fade')).toEqual(false)\n resolve()\n })\n\n tooltip.show()\n })\n})\n```\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/browsers.js","messages":[],"suppressedMessages":[{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":8,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":8,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":10,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":10,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":15,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":15,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":17,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":17,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":22,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":22,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":24,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":24,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":29,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":29,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":31,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":31,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":36,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":36,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":38,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":38,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":43,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":43,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":45,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":45,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":50,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":50,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'browser_version' is not in camel case.","line":52,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":52,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":57,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":57,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'real_mobile' is not in camel case.","line":59,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":59,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":64,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":64,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'real_mobile' is not in camel case.","line":66,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":66,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'os_version' is not in camel case.","line":71,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":71,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"camelcase","severity":2,"message":"Identifier 'real_mobile' is not in camel case.","line":73,"column":5,"nodeType":"Identifier","messageId":"notCamelCase","endLine":73,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/helpers/fixture.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/integration/bundle-modularity.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/integration/bundle.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/integration/index.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <!-- Required meta tags -->\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n <!-- Bootstrap CSS -->\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n\n <title>Hello, world!</title>\n </head>\n <body>\n <div class=\"container py-4\">\n <h1>Hello, world!</h1>\n\n <div class=\"mt-5\">\n <button type=\"button\" class=\"btn btn-secondary mb-3\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tooltip on top\">\n Tooltip on top\n </button>\n\n <div id=\"carouselExampleIndicators\" class=\"carousel slide mt-2\" data-bs-ride=\"carousel\">\n <div class=\"carousel-indicators\">\n <button type=\"button\" data-bs-target=\"#carouselExampleIndicators\" data-bs-slide-to=\"0\" aria-label=\"Slide 1\"></button>\n <button type=\"button\" data-bs-target=\"#carouselExampleIndicators\" data-bs-slide-to=\"1\" class=\"active\" aria-current=\"true\" aria-label=\"Slide 2\"></button>\n <button type=\"button\" data-bs-target=\"#carouselExampleIndicators\" data-bs-slide-to=\"2\" aria-label=\"Slide 3\"></button>\n </div>\n\n <div class=\"carousel-inner\">\n <div class=\"carousel-item\">\n <img class=\"d-block w-100\" alt=\"First slide\" src=\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22800%22%20height%3D%22400%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%20800%20400%22%3E%3Cpath%20fill%3D%22%23777%22%20d%3D%22M0%200h800v400H0z%22%2F%3E%3Ctext%20x%3D%22285.922%22%20y%3D%22217.7%22%20fill%3D%22%23555%22%20font-family%3D%22Helvetica%2Cmonospace%22%20font-size%3D%2240pt%22%20font-weight%3D%22400%22%3EFirst%20slide%3C%2Ftext%3E%3C%2Fsvg%3E\">\n <div class=\"carousel-caption d-none d-md-block\">\n <h5>First slide label</h5>\n <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p>\n </div>\n </div>\n <div class=\"carousel-item active\">\n <img class=\"d-block w-100\" alt=\"Second slide\" src=\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22800%22%20height%3D%22400%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%20800%20400%22%3E%3Cpath%20fill%3D%22%23777%22%20d%3D%22M0%200h800v400H0z%22%2F%3E%3Ctext%20x%3D%22285.922%22%20y%3D%22217.7%22%20fill%3D%22%23555%22%20font-family%3D%22Helvetica%2Cmonospace%22%20font-size%3D%2240pt%22%20font-weight%3D%22400%22%3ESecond%20slide%3C%2Ftext%3E%3C%2Fsvg%3E\">\n <div class=\"carousel-caption d-none d-md-block\">\n <h5>Second slide label</h5>\n <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>\n </div>\n </div>\n <div class=\"carousel-item\">\n <img class=\"d-block w-100\" alt=\"Third slide\" src=\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22800%22%20height%3D%22400%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%20800%20400%22%3E%3Cpath%20fill%3D%22%23777%22%20d%3D%22M0%200h800v400H0z%22%2F%3E%3Ctext%20x%3D%22285.922%22%20y%3D%22217.7%22%20fill%3D%22%23555%22%20font-family%3D%22Helvetica%2Cmonospace%22%20font-size%3D%2240pt%22%20font-weight%3D%22400%22%3EThird%20slide%3C%2Ftext%3E%3C%2Fsvg%3E\">\n <div class=\"carousel-caption d-none d-md-block\">\n <h5>Third slide label</h5>\n <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p>\n </div>\n </div>\n </div>\n\n <a class=\"carousel-control-prev\" href=\"#carouselExampleIndicators\" role=\"button\" data-bs-slide=\"prev\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </a>\n <a class=\"carousel-control-next\" href=\"#carouselExampleIndicators\" role=\"button\" data-bs-slide=\"next\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </a>\n </div>\n </div>\n </div>\n\n <script src=\"../../coverage/bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/integration/rollup.bundle-modularity.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/integration/rollup.bundle.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/karma.conf.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/.eslintrc.json","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token :","line":2,"column":12}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"{\n \"extends\": [\n \"../../../.eslintrc.json\"\n ],\n \"env\": {\n \"jasmine\": true\n },\n \"rules\": {\n \"unicorn/consistent-function-scoping\": \"off\",\n \"unicorn/no-useless-undefined\": \"off\",\n \"unicorn/prefer-add-event-listener\": \"off\"\n }\n}\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/alert.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/base-component.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-unused-expressions","severity":2,"message":"Expected an assignment or function call and instead saw an expression.","line":54,"column":11,"nodeType":"ExpressionStatement","messageId":"unusedExpression","endLine":54,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/button.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/carousel.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/collapse.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/dom/data.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":94,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":94,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":102,"column":12,"nodeType":"MemberExpression","messageId":"unexpected","endLine":102,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/dom/event-handler.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/dom/manipulator.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/dom/selector-engine.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/dropdown.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/jquery.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/modal.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/offcanvas.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/popover.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/scrollspy.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/tab.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/toast.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/tooltip.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/backdrop.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/component-functions.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/config.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/focustrap.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/index.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/sanitizer.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/scrollbar.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/swipe.spec.js","messages":[],"suppressedMessages":[{"ruleId":"no-new","severity":2,"message":"Do not use 'new' for side effects.","line":87,"column":9,"nodeType":"ExpressionStatement","messageId":"noNewStatement","endLine":94,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-new","severity":2,"message":"Do not use 'new' for side effects.","line":109,"column":9,"nodeType":"ExpressionStatement","messageId":"noNewStatement","endLine":116,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-new","severity":2,"message":"Do not use 'new' for side effects.","line":143,"column":9,"nodeType":"ExpressionStatement","messageId":"noNewStatement","endLine":145,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-new","severity":2,"message":"Do not use 'new' for side effects.","line":192,"column":9,"nodeType":"ExpressionStatement","messageId":"noNewStatement","endLine":198,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-new","severity":2,"message":"Do not use 'new' for side effects.","line":217,"column":9,"nodeType":"ExpressionStatement","messageId":"noNewStatement","endLine":223,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/unit/util/template-factory.spec.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/alert.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Alert</title>\n </head>\n <body>\n <div class=\"container\">\n <h1>Alert <small>Bootstrap Visual Test</small></h1>\n\n <div class=\"alert alert-warning alert-dismissible fade show\" role=\"alert\">\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n <strong>Holy guacamole!</strong> You should check in on some of those fields below.\n </div>\n\n <div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n <p>\n <strong>Oh snap!</strong> <a href=\"#\" class=\"alert-link\">Change a few things up</a> and try submitting again.\n </p>\n <p>\n <button type=\"button\" class=\"btn btn-danger\">Danger</button>\n <button type=\"button\" class=\"btn btn-secondary\">Secondary</button>\n </p>\n </div>\n\n <div class=\"alert alert-danger alert-dismissible fade show\" role=\"alert\">\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n <p>\n <strong>Oh snap!</strong> <a href=\"#\" class=\"alert-link\">Change a few things up</a> and try submitting again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.\n </p>\n <p>\n <button type=\"button\" class=\"btn btn-danger\">Take this action</button>\n <button type=\"button\" class=\"btn btn-primary\">Or do this</button>\n </p>\n </div>\n\n <div class=\"alert alert-warning alert-dismissible fade show\" role=\"alert\" style=\"transition-duration: 5s;\">\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"alert\" aria-label=\"Close\"></button>\n This alert will take 5 seconds to fade out.\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/button.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Button</title>\n </head>\n <body>\n <div class=\"container\">\n <h1>Button <small>Bootstrap Visual Test</small></h1>\n\n <button type=\"button\" class=\"btn btn-primary\" data-bs-toggle=\"button\" aria-pressed=\"false\" autocomplete=\"off\">\n Single toggle\n </button>\n\n <p>For checkboxes and radio buttons, ensure that keyboard behavior is functioning correctly.</p>\n <p>Navigate to the checkboxes with the keyboard (generally, using <kbd>TAB</kbd> / <kbd>SHIFT + TAB</kbd>), and ensure that <kbd>SPACE</kbd> toggles the currently focused checkbox. Click on one of the checkboxes using the mouse, ensure that focus was correctly set on the actual checkbox, and that <kbd>SPACE</kbd> toggles the checkbox again.</p>\n\n <div class=\"btn-group\" data-bs-toggle=\"buttons\">\n <label class=\"btn btn-primary active\">\n <input type=\"checkbox\" checked autocomplete=\"off\"> Checkbox 1 (pre-checked)\n </label>\n <label class=\"btn btn-primary\">\n <input type=\"checkbox\" autocomplete=\"off\"> Checkbox 2\n </label>\n <label class=\"btn btn-primary\">\n <input type=\"checkbox\" autocomplete=\"off\"> Checkbox 3\n </label>\n </div>\n\n <p>Navigate to the radio button group with the keyboard (generally, using <kbd>TAB</kbd> / <kbd>SHIFT + TAB</kbd>). If no radio button was initially set to be selected, the first/last radio button should receive focus (depending on whether you navigated \"forward\" to the group with <kbd>TAB</kbd> or \"backwards\" using <kbd>SHIFT + TAB</kbd>). If a radio button was already selected, navigating with the keyboard should set focus to that particular radio button. Only one radio button in a group should receive focus at any given time. Ensure that the selected radio button can be changed by using the <kbd>←</kbd> and <kbd>→</kbd> arrow keys. Click on one of the radio buttons with the mouse, ensure that focus was correctly set on the actual radio button, and that <kbd>←</kbd> and <kbd>→</kbd> change the selected radio button again.</p>\n\n <div class=\"btn-group\" data-bs-toggle=\"buttons\">\n <label class=\"btn btn-primary active\">\n <input type=\"radio\" name=\"options\" id=\"option1\" autocomplete=\"off\" checked> Radio 1 (preselected)\n </label>\n <label class=\"btn btn-primary\">\n <input type=\"radio\" name=\"options\" id=\"option2\" autocomplete=\"off\"> Radio 2\n </label>\n <label class=\"btn btn-primary\">\n <input type=\"radio\" name=\"options\" id=\"option3\" autocomplete=\"off\"> Radio 3\n </label>\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/carousel.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Carousel</title>\n <style>\n .carousel-item {\n transition: transform 2s ease, opacity .5s ease;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Carousel <small>Bootstrap Visual Test</small></h1>\n\n <p>The transition duration should be around 2s. Also, the carousel shouldn't slide when its window/tab is hidden. Check the console log.</p>\n\n <div id=\"carousel-example-generic\" class=\"carousel slide\" data-bs-ride=\"carousel\">\n <div class=\"carousel-indicators\">\n <button type=\"button\" data-bs-target=\"#carousel-example-generic\" data-bs-slide-to=\"0\" class=\"active\" aria-current=\"true\" aria-label=\"Slide 1\"></button>\n <button type=\"button\" data-bs-target=\"#carousel-example-generic\" data-bs-slide-to=\"1\" aria-label=\"Slide 2\"></button>\n <button type=\"button\" data-bs-target=\"#carousel-example-generic\" data-bs-slide-to=\"2\" aria-label=\"Slide 3\"></button>\n </div>\n <div class=\"carousel-inner\">\n <div class=\"carousel-item active\">\n <img src=\"https://i.imgur.com/iEZgY7Y.jpg\" alt=\"First slide\">\n </div>\n <div class=\"carousel-item\">\n <img src=\"https://i.imgur.com/eNWn1Xs.jpg\" alt=\"Second slide\">\n </div>\n <div class=\"carousel-item\">\n <img src=\"https://i.imgur.com/Nm7xoti.jpg\" alt=\"Third slide\">\n </div>\n </div>\n <button class=\"carousel-control-prev\" data-bs-target=\"#carousel-example-generic\" type=\"button\" data-bs-slide=\"prev\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" data-bs-target=\"#carousel-example-generic\" type=\"button\" data-bs-slide=\"next\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n <script>\n var t0\n var t1\n var carousel = document.getElementById('carousel-example-generic')\n\n // Test to show that the carousel doesn't slide when the current tab isn't visible\n // Test to show that transition-duration can be changed with css\n carousel.addEventListener('slid.bs.carousel', function (event) {\n t1 = performance.now()\n console.log('transition-duration took ' + (t1 - t0) + 'ms, slid at ' + event.timeStamp)\n })\n carousel.addEventListener('slide.bs.carousel', function () {\n t0 = performance.now()\n })\n </script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/collapse.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Collapse</title>\n </head>\n <body>\n <div class=\"container\">\n <h1>Collapse <small>Bootstrap Visual Test</small></h1>\n\n <div id=\"accordion\" role=\"tablist\">\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingOne\">\n <h5 class=\"mb-0\">\n <a data-bs-toggle=\"collapse\" href=\"#collapseOne\" aria-expanded=\"true\" aria-controls=\"collapseOne\">\n Collapsible Group Item #1\n </a>\n </h5>\n </div>\n\n <div id=\"collapseOne\" class=\"collapse show\" data-bs-parent=\"#accordion\" role=\"tabpanel\" aria-labelledby=\"headingOne\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingTwo\">\n <h5 class=\"mb-0\">\n <a class=\"collapsed\" data-bs-toggle=\"collapse\" href=\"#collapseTwo\" aria-expanded=\"false\" aria-controls=\"collapseTwo\">\n Collapsible Group Item #2\n </a>\n </h5>\n </div>\n <div id=\"collapseTwo\" class=\"collapse\" data-bs-parent=\"#accordion\" role=\"tabpanel\" aria-labelledby=\"headingTwo\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingThree\">\n <h5 class=\"mb-0\">\n <a class=\"collapsed\" data-bs-toggle=\"collapse\" href=\"#collapseThree\" aria-expanded=\"false\" aria-controls=\"collapseThree\">\n Collapsible Group Item #3\n </a>\n </h5>\n </div>\n <div id=\"collapseThree\" class=\"collapse\" data-bs-parent=\"#accordion\" role=\"tabpanel\" aria-labelledby=\"headingThree\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingFour\">\n <h5 class=\"mb-0\">\n <a class=\"collapsed\" data-bs-toggle=\"collapse\" href=\"#collapseFour\" aria-expanded=\"false\" aria-controls=\"collapseFour\">\n Collapsible Group Item with XSS in data-bs-parent\n </a>\n </h5>\n </div>\n <div id=\"collapseFour\" class=\"collapse\" data-bs-parent=\"<img src=1 onerror=alert(123)>\" role=\"tabpanel\" aria-labelledby=\"headingFour\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/dropdown.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Dropdown</title>\n </head>\n <body>\n <div class=\"container\">\n <h1>Dropdown <small>Bootstrap Visual Test</small></h1>\n\n <nav class=\"navbar navbar-expand-md bg-light\">\n <a class=\"navbar-brand\" href=\"#\">Navbar</a>\n <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarResponsive\" aria-controls=\"navbarResponsive\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n\n <div class=\"collapse navbar-collapse\" id=\"navbarResponsive\">\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" href=\"#\" aria-current=\"page\">Home</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#\">Link</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#\">Link</a>\n </li>\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"dropdown\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Dropdown</a>\n <ul class=\"dropdown-menu\" aria-labelledby=\"dropdown\">\n <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n </ul>\n </li>\n </ul>\n </div>\n </nav>\n\n <ul class=\"nav nav-pills mt-3\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" href=\"#\">Active</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#\">Link</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#\">Link</a>\n </li>\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"dropdown2\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Dropdown</a>\n <ul class=\"dropdown-menu\" aria-labelledby=\"dropdown2\">\n <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n </ul>\n </li>\n </ul>\n\n <div class=\"row\">\n <div class=\"col-sm-12 mt-4\">\n <div class=\"dropdown\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Dropdown</button>\n <div class=\"dropdown-menu\">\n <input id=\"textField\" type=\"text\">\n </div>\n </div>\n <div class=\"btn-group dropup\">\n <button type=\"button\" class=\"btn btn-secondary\">Dropup split</button>\n <button type=\"button\" class=\"btn btn-secondary dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n <span class=\"visually-hidden\">Dropup split</span>\n </button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n </ul>\n </div>\n </div>\n\n <div class=\"col-sm-12 mt-4\">\n <div class=\"btn-group dropup\">\n <button type=\"button\" class=\"btn btn-secondary dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Dropup</button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n </ul>\n </div>\n\n <div class=\"btn-group\">\n <button type=\"button\" class=\"btn btn-secondary dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n This dropdown's menu is end-aligned\n </button>\n <div class=\"dropdown-menu dropdown-menu-end\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here</button>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-12 mt-4\">\n <div class=\"btn-group dropup\" role=\"group\">\n <a href=\"#\" class=\"btn btn-secondary\">Dropup split align end</a>\n <button type=\"button\" id=\"dropdown-page-subheader-button-3\" class=\"btn btn-secondary dropdown-toggle dropdown-toggle-split\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n <span class=\"visually-hidden\">Product actions</span>\n </button>\n <div class=\"dropdown-menu dropdown-menu-end\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here with a long text</button>\n </div>\n </div>\n <div class=\"btn-group dropup\">\n <button type=\"button\" class=\"btn btn-secondary dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Dropup align end</button>\n <div class=\"dropdown-menu dropdown-menu-end\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here with a long text</button>\n </div>\n </div>\n </div>\n\n <div class=\"col-sm-12 mt-4\">\n <div class=\"btn-group dropend\" role=\"group\">\n <a href=\"#\" class=\"btn btn-secondary\">Dropend split</a>\n <button type=\"button\" id=\"dropdown-page-subheader-button-4\" class=\"btn btn-secondary dropdown-toggle dropdown-toggle-split\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n <span class=\"visually-hidden\">Product actions</span>\n </button>\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here with a long text</button>\n </div>\n </div>\n <div class=\"btn-group dropend\">\n <button class=\"btn btn-secondary dropdown-toggle\" type=\"button\" id=\"dropdownMenuRight\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n Dropend\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuRight\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here</button>\n </div>\n </div>\n <!-- dropstart -->\n <div class=\"btn-group dropstart\" role=\"group\">\n <a href=\"#\" class=\"btn btn-secondary\">Dropstart split</a>\n <button type=\"button\" id=\"dropdown-page-subheader-button-5\" class=\"btn btn-secondary dropdown-toggle dropdown-toggle-split\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n <span class=\"visually-hidden\">Product actions</span>\n </button>\n <div class=\"dropdown-menu\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here with a long text</button>\n </div>\n </div>\n <div class=\"btn-group dropstart\">\n <button class=\"btn btn-secondary dropdown-toggle\" type=\"button\" id=\"dropstartMenu\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n Dropstart\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropstartMenu\">\n <button class=\"dropdown-item\" type=\"button\">Action</button>\n <button class=\"dropdown-item\" type=\"button\">Another action</button>\n <button class=\"dropdown-item\" type=\"button\">Something else here</button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-sm-3 mt-4\">\n <div class=\"btn-group dropdown\">\n <button type=\"button\" class=\"btn btn-secondary\">Dropdown reference</button>\n <button type=\"button\" class=\"btn btn-secondary dropdown-toggle\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\" data-bs-reference=\"parent\">\n <span class=\"visually-hidden\">Dropdown split</span>\n </button>\n <ul class=\"dropdown-menu\">\n <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n </ul>\n </div>\n </div>\n <div class=\"col-sm-3 mt-4\">\n <div class=\"dropdown\">\n <button class=\"btn btn-secondary dropdown-toggle\" type=\"button\" id=\"dropdownMenuButton\" data-bs-toggle=\"dropdown\" data-bs-display=\"static\" aria-expanded=\"false\">\n Dropdown menu without Popper\n </button>\n <ul class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton\">\n <li><a class=\"dropdown-item\" href=\"#\">Action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Another action</a></li>\n <li><a class=\"dropdown-item\" href=\"#\">Something else here</a></li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/modal.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Modal</title>\n <style>\n #tall {\n height: 1500px;\n width: 100px;\n }\n </style>\n </head>\n <body>\n <nav class=\"navbar navbar-full navbar-dark bg-dark\">\n <button class=\"navbar-toggler hidden-lg-up\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarResponsive\" aria-controls=\"navbarResponsive\" aria-expanded=\"false\" aria-label=\"Toggle navigation\"></button>\n <div class=\"collapse navbar-expand-md\" id=\"navbarResponsive\">\n <a class=\"navbar-brand\" href=\"#\">This shouldn't jump!</a>\n <ul class=\"navbar-nav\">\n <li class=\"nav-item\">\n <a class=\"nav-link active\" href=\"#\" aria-current=\"page\">Home</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#\">Link</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#\">Link</a>\n </li>\n </ul>\n </div>\n </nav>\n\n <div class=\"container mt-3\">\n <h1>Modal <small>Bootstrap Visual Test</small></h1>\n\n <div class=\"modal fade\" id=\"myModal\" tabindex=\"-1\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" id=\"myModalLabel\">Modal title</h4>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <h4>Text in a modal</h4>\n <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p>\n\n <h4>Popover in a modal</h4>\n <p>This <button type=\"button\" class=\"btn btn-primary\" data-bs-toggle=\"popover\" data-bs-placement=\"left\" title=\"Popover title\" data-bs-content=\"And here's some amazing content. It's very engaging. Right?\">button</button> should trigger a popover on click.</p>\n\n\n <h4>Tooltips in a modal</h4>\n <p><a href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tooltip on top\">This link</a> and <a href=\"#\" data-bs-toggle=\"tooltip\" data-bs-placement=\"bottom\" title=\"Tooltip on bottom\">that link</a> should have tooltips on hover.</p>\n\n <div id=\"accordion\" role=\"tablist\">\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingOne\">\n <h5 class=\"mb-0\">\n <a data-bs-toggle=\"collapse\" href=\"#collapseOne\" aria-expanded=\"true\" aria-controls=\"collapseOne\">\n Collapsible Group Item #1\n </a>\n </h5>\n </div>\n\n <div id=\"collapseOne\" class=\"collapse show\" data-bs-parent=\"#accordion\" role=\"tabpanel\" aria-labelledby=\"headingOne\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingTwo\">\n <h5 class=\"mb-0\">\n <a class=\"collapsed\" data-bs-toggle=\"collapse\" href=\"#collapseTwo\" aria-expanded=\"false\" aria-controls=\"collapseTwo\">\n Collapsible Group Item #2\n </a>\n </h5>\n </div>\n <div id=\"collapseTwo\" class=\"collapse\" data-bs-parent=\"#accordion\" role=\"tabpanel\" aria-labelledby=\"headingTwo\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n <div class=\"card\" role=\"presentation\">\n <div class=\"card-header\" role=\"tab\" id=\"headingThree\">\n <h5 class=\"mb-0\">\n <a class=\"collapsed\" data-bs-toggle=\"collapse\" href=\"#collapseThree\" aria-expanded=\"false\" aria-controls=\"collapseThree\">\n Collapsible Group Item #3\n </a>\n </h5>\n </div>\n <div id=\"collapseThree\" class=\"collapse\" data-bs-parent=\"#accordion\" role=\"tabpanel\" aria-labelledby=\"headingThree\">\n <div class=\"card-body\">\n Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.\n </div>\n </div>\n </div>\n </div>\n\n <hr>\n\n <h4>Overflowing text to show scroll behavior</h4>\n <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>\n <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>\n <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p>\n <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>\n <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>\n <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p>\n <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p>\n <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p>\n <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"firefoxModal\" tabindex=\"-1\" aria-labelledby=\"firefoxModalLabel\" aria-hidden=\"true\">\n <div class=\"modal-dialog\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" id=\"firefoxModalLabel\">Firefox Bug Test</h4>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <ol>\n <li>Ensure you're using Firefox.</li>\n <li>Open a new tab and then switch back to this tab.</li>\n <li>Click into this input: <input type=\"text\" id=\"ff-bug-input\"></li>\n <li>Switch to the other tab and then back to this tab.</li>\n </ol>\n <p>Test result: <strong id=\"ff-bug-test-result\"></strong></p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal fade\" id=\"slowModal\" tabindex=\"-1\" aria-labelledby=\"slowModalLabel\" aria-hidden=\"true\" style=\"transition-duration: 5s;\">\n <div class=\"modal-dialog\" style=\"transition-duration: inherit;\">\n <div class=\"modal-content\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title\" id=\"slowModalLabel\">Lorem slowly</h4>\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\n </div>\n <div class=\"modal-body\">\n <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Nulla vitae elit libero, a pharetra augue.</p>\n </div>\n <div class=\"modal-footer\">\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\n <button type=\"button\" class=\"btn btn-primary\">Save changes</button>\n </div>\n </div>\n </div>\n </div>\n\n <button type=\"button\" class=\"btn btn-primary btn-lg\" data-bs-toggle=\"modal\" data-bs-target=\"#myModal\">\n Launch demo modal\n </button>\n\n <button type=\"button\" class=\"btn btn-primary btn-lg\" id=\"tall-toggle\">\n Toggle tall <body> content\n </button>\n\n <br><br>\n\n <button type=\"button\" class=\"btn btn-secondary btn-lg\" data-bs-toggle=\"modal\" data-bs-target=\"#firefoxModal\">\n Launch Firefox bug test modal\n </button>\n (<a href=\"https://github.com/twbs/bootstrap/issues/18365\">See Issue #18365</a>)\n\n <br><br>\n\n <button type=\"button\" class=\"btn btn-secondary btn-lg\" data-bs-toggle=\"modal\" data-bs-target=\"#slowModal\">\n Launch modal with slow transition\n </button>\n\n <br><br>\n\n <div class=\"bg-dark text-white p-2\" id=\"tall\" style=\"display: none;\">\n Tall body content to force the page to have a scrollbar.\n </div>\n\n <button type=\"button\" class=\"btn btn-secondary btn-lg\" data-bs-toggle=\"modal\" data-bs-target=\"<div class="modal fade the-bad" tabindex="-1"><div class="modal-dialog"><div class="modal-content"><div class="modal-header"><button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button><h4 class="modal-title">The Bad Modal</h4></div><div class="modal-body">This modal's HTTML source code is declared inline, inside the data-bs-target attribute of it's show-button</div></div></div></div>\">\n Modal with an XSS inside the data-bs-target\n </button>\n\n <br><br>\n\n <button type=\"button\" class=\"btn btn-secondary btn-lg\" id=\"btnPreventModal\">\n Launch prevented modal on hide (to see the result open your console)\n </button>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n <script>\n var ffBugTestResult = document.getElementById('ff-bug-test-result')\n var firefoxTestDone = false\n\n function reportFirefoxTestResult(result) {\n if (!firefoxTestDone) {\n ffBugTestResult.classList.add(result ? 'text-success' : 'text-danger')\n ffBugTestResult.textContent = result ? 'PASS' : 'FAIL'\n }\n }\n\n var popoverElements = document.querySelectorAll('[data-bs-toggle=\"popover\"]')\n for (const popoverEl of popoverElements) {\n new bootstrap.Popover(popoverEl)\n }\n var tooltipElements = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n for (const tooltipEl of tooltipElements) {\n new bootstrap.Tooltip(tooltipEl)\n }\n\n var tallToggle = document.getElementById('tall-toggle')\n var tall = document.getElementById('tall')\n tallToggle.addEventListener('click', function () {\n if (tall.style.display === 'none') {\n tall.style.display = 'block'\n } else {\n tall.style.display = 'none'\n }\n })\n\n var ffBugInput = document.getElementById('ff-bug-input')\n var firefoxModal = document.getElementById('firefoxModal')\n function handlerClickFfBugInput() {\n firefoxModal.addEventListener('focus', reportFirefoxTestResult.bind(false))\n ffBugInput.addEventListener('focus', reportFirefoxTestResult.bind(true))\n ffBugInput.removeEventListener('focus', handlerClickFfBugInput)\n }\n ffBugInput.addEventListener('focus', handlerClickFfBugInput)\n\n var btnPreventModal = document.getElementById('btnPreventModal')\n var modalFf = new bootstrap.Modal(firefoxModal)\n\n btnPreventModal.addEventListener('click', function () {\n function shownFirefoxModal() {\n modalFf.hide()\n firefoxModal.removeEventListener('shown.bs.modal', hideFirefoxModal)\n }\n\n function hideFirefoxModal(event) {\n event.preventDefault()\n firefoxModal.removeEventListener('hide.bs.modal', hideFirefoxModal)\n\n if (modalFf._isTransitioning) {\n console.error('Modal plugin should not set _isTransitioning when hide event is prevented')\n } else {\n console.log('Test passed')\n modalFf.hide() // work as expected\n }\n }\n\n firefoxModal.addEventListener('shown.bs.modal', shownFirefoxModal)\n firefoxModal.addEventListener('hide.bs.modal', hideFirefoxModal)\n modalFf.show()\n })\n\n // Test transition duration\n var t0\n var t1\n var slowModal = document.getElementById('slowModal')\n\n slowModal.addEventListener('shown.bs.modal', function () {\n t1 = performance.now()\n console.log('transition-duration took ' + (t1 - t0) + 'ms.')\n })\n\n slowModal.addEventListener('show.bs.modal', function () {\n t0 = performance.now()\n })\n </script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/popover.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Popover</title>\n </head>\n <body>\n <div class=\"container\">\n <h1>Popover <small>Bootstrap Visual Test</small></h1>\n\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-container=\"body\" data-bs-toggle=\"popover\" data-bs-placement=\"auto\" data-bs-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n Popover on auto\n </button>\n\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-container=\"body\" data-bs-toggle=\"popover\" data-bs-placement=\"top\" data-bs-content=\"Default placement was on top but not enough place\">\n Popover on top\n </button>\n\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-container=\"body\" data-bs-toggle=\"popover\" data-bs-placement=\"right\" data-bs-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n Popover on end\n </button>\n\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-container=\"body\" data-bs-toggle=\"popover\" data-bs-placement=\"bottom\" data-bs-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n Popover on bottom\n </button>\n\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-container=\"body\" data-bs-toggle=\"popover\" data-bs-placement=\"left\" data-bs-content=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\">\n Popover on start\n </button>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n <script>\n var popoverElements = document.querySelectorAll('[data-bs-toggle=\"popover\"]')\n for (const popoverEl of popoverElements) {\n new bootstrap.Popover(popoverEl)\n }\n </script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/scrollspy.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Scrollspy</title>\n <style>\n body { padding-top: 70px; }\n </style>\n </head>\n <body data-bs-spy=\"scroll\" data-bs-target=\".navbar\" data-bs-offset=\"70\">\n <nav class=\"navbar navbar-expand-md navbar-dark bg-dark fixed-top\">\n <a class=\"navbar-brand\" href=\"#\">Scrollspy test</a>\n <button class=\"navbar-toggler\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n <span class=\"navbar-toggler-icon\"></span>\n </button>\n <div class=\"navbar-collapse collapse\" id=\"navbarSupportedContent\">\n <ul class=\"navbar-nav me-auto\">\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#fat\">@fat</a>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#mdo\">@mdo</a>\n </li>\n <li class=\"nav-item dropdown\">\n <a class=\"nav-link dropdown-toggle\" href=\"#\" id=\"dropdown\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Dropdown</a>\n <ul class=\"dropdown-menu\" aria-labelledby=\"dropdown\">\n <li><a class=\"dropdown-item\" href=\"#one\">One</a></li>\n <li><a class=\"dropdown-item\" href=\"#two\">Two</a></li>\n <li><a class=\"dropdown-item\" href=\"#three\">Three</a></li>\n </ul>\n </li>\n <li class=\"nav-item\">\n <a class=\"nav-link\" href=\"#final\">Final</a>\n </li>\n </ul>\n </div>\n </nav>\n <div class=\"container\">\n <h2 id=\"fat\">@fat</h2>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <hr>\n <h2 id=\"mdo\">@mdo</h2>\n <p>Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <hr>\n <h2 id=\"one\">one</h2>\n <p>Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <hr>\n <h2 id=\"two\">two</h2>\n <p>In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <hr>\n <h2 id=\"three\">three</h2>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p>\n <hr>\n <h2 id=\"final\">Final section</h2>\n <p>Ad leggings keytar, brunch id art party dolor labore.</p>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/tab.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Tab</title>\n <style>\n h4 {\n margin: 40px 0 10px;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Tab <small>Bootstrap Visual Test</small></h1>\n\n <h4>Tabs without fade</h4>\n\n <ul class=\"nav nav-tabs\" role=\"tablist\">\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#home\" role=\"tab\" aria-selected=\"true\">Home</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#profile\" role=\"tab\">Profile</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#fat\" role=\"tab\">@fat</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#mdo\" role=\"tab\">@mdo</button>\n </li>\n </ul>\n\n <div class=\"tab-content\" role=\"tablist\">\n <div class=\"tab-pane active\" id=\"home\" role=\"tabpanel\">\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n </div>\n <div class=\"tab-pane\" id=\"profile\" role=\"tabpanel\">\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n </div>\n <div class=\"tab-pane\" id=\"fat\" role=\"tabpanel\">\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n </div>\n <div class=\"tab-pane\" id=\"mdo\" role=\"tabpanel\">\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n </div>\n </div>\n\n <h4>Tabs with fade</h4>\n\n <ul class=\"nav nav-tabs\" role=\"tablist\">\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#home2\" role=\"tab\" aria-selected=\"true\">Home</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#profile2\" role=\"tab\">Profile</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#fat2\" role=\"tab\">@fat</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#mdo2\" role=\"tab\">@mdo</button>\n </li>\n </ul>\n\n <div class=\"tab-content\" role=\"tablist\">\n <div class=\"tab-pane fade show active\" id=\"home2\" role=\"tabpanel\">\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"profile2\" role=\"tabpanel\">\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"fat2\" role=\"tabpanel\">\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"mdo2\" role=\"tabpanel\">\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n </div>\n </div>\n\n <h4>Tabs without fade (no initially active pane)</h4>\n\n <ul class=\"nav nav-tabs\" role=\"tablist\">\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#home3\" role=\"tab\">Home</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#profile3\" role=\"tab\">Profile</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#fat3\" role=\"tab\">@fat</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#mdo3\" role=\"tab\">@mdo</button>\n </li>\n </ul>\n\n <div class=\"tab-content\" role=\"tablist\">\n <div class=\"tab-pane\" id=\"home3\" role=\"tabpanel\">\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n </div>\n <div class=\"tab-pane\" id=\"profile3\" role=\"tabpanel\">\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n </div>\n <div class=\"tab-pane\" id=\"fat3\" role=\"tabpanel\">\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n </div>\n <div class=\"tab-pane\" id=\"mdo3\" role=\"tabpanel\">\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n </div>\n </div>\n\n <h4>Tabs with fade (no initially active pane)</h4>\n\n <ul class=\"nav nav-tabs\" role=\"tablist\">\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#home4\" role=\"tab\">Home</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#profile4\" role=\"tab\">Profile</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#fat4\" role=\"tab\">@fat</button>\n </li>\n <li class=\"nav-item\" role=\"presentation\">\n <button type=\"button\" class=\"nav-link\" data-bs-toggle=\"tab\" data-bs-target=\"#mdo4\" role=\"tab\">@mdo</button>\n </li>\n </ul>\n\n <div class=\"tab-content\">\n <div class=\"tab-pane fade\" id=\"home4\" role=\"tabpanel\">\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"profile4\" role=\"tabpanel\">\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"fat4\" role=\"tabpanel\">\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"mdo4\" role=\"tabpanel\">\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n </div>\n </div>\n\n <h4>Tabs with nav and using links (with fade)</h4>\n <nav>\n <div class=\"nav nav-pills\" id=\"nav-tab\" role=\"tablist\">\n <a class=\"nav-link nav-item active\" role=\"tab\" data-bs-toggle=\"tab\" href=\"#home5\">Home</a>\n <a class=\"nav-link nav-item\" role=\"tab\" data-bs-toggle=\"tab\" href=\"#profile5\">Profile</a>\n <a class=\"nav-link nav-item\" role=\"tab\" data-bs-toggle=\"tab\" href=\"#fat5\">@fat</a>\n <a class=\"nav-link nav-item\" role=\"tab\" data-bs-toggle=\"tab\" href=\"#mdo5\">@mdo</a>\n <a class=\"nav-link nav-item disabled\" role=\"tab\" href=\"#\">Disabled</a>\n </div>\n </nav>\n\n <div class=\"tab-content\">\n <div class=\"tab-pane fade show active\" id=\"home5\" role=\"tabpanel\">\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"profile5\" role=\"tabpanel\">\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"fat5\" role=\"tabpanel\">\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"mdo5\" role=\"tabpanel\">\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p>\n </div>\n </div>\n\n <h4>Tabs with list-group (with fade)</h4>\n <div class=\"row\">\n <div class=\"col-4\">\n <div class=\"list-group\" id=\"list-tab\" role=\"tablist\">\n <button type=\"button\" class=\"list-group-item list-group-item-action active\" id=\"list-home-list\" data-bs-toggle=\"tab\" data-bs-target=\"#list-home\" role=\"tab\" aria-controls=\"list-home\" aria-selected=\"true\">Home</button>\n <button type=\"button\" class=\"list-group-item list-group-item-action\" id=\"list-profile-list\" data-bs-toggle=\"tab\" data-bs-target=\"#list-profile\" role=\"tab\" aria-controls=\"list-profile\">Profile</button>\n <button type=\"button\" class=\"list-group-item list-group-item-action\" id=\"list-messages-list\" data-bs-toggle=\"tab\" data-bs-target=\"#list-messages\" role=\"tab\" aria-controls=\"list-messages\">Messages</button>\n <button type=\"button\" class=\"list-group-item list-group-item-action\" id=\"list-settings-list\" data-bs-toggle=\"tab\" data-bs-target=\"#list-settings\" role=\"tab\" aria-controls=\"list-settings\">Settings</button>\n </div>\n </div>\n <div class=\"col-8\">\n <div class=\"tab-content\" id=\"nav-tabContent\">\n <div class=\"tab-pane fade show active\" id=\"list-home\" role=\"tabpanel\" aria-labelledby=\"list-home-list\">\n <p>Velit aute mollit ipsum ad dolor consectetur nulla officia culpa adipisicing exercitation fugiat tempor. Voluptate deserunt sit sunt nisi aliqua fugiat proident ea ut. Mollit voluptate reprehenderit occaecat nisi ad non minim tempor sunt voluptate consectetur exercitation id ut nulla. Ea et fugiat aliquip nostrud sunt incididunt consectetur culpa aliquip eiusmod dolor. Anim ad Lorem aliqua in cupidatat nisi enim eu nostrud do aliquip veniam minim.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"list-profile\" role=\"tabpanel\" aria-labelledby=\"list-profile-list\">\n <p>Cupidatat quis ad sint excepteur laborum in esse qui. Et excepteur consectetur ex nisi eu do cillum ad laborum. Mollit et eu officia dolore sunt Lorem culpa qui commodo velit ex amet id ex. Officia anim incididunt laboris deserunt anim aute dolor incididunt veniam aute dolore do exercitation. Dolor nisi culpa ex ad irure in elit eu dolore. Ad laboris ipsum reprehenderit irure non commodo enim culpa commodo veniam incididunt veniam ad.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"list-messages\" role=\"tabpanel\" aria-labelledby=\"list-messages-list\">\n <p>Ut ut do pariatur aliquip aliqua aliquip exercitation do nostrud commodo reprehenderit aute ipsum voluptate. Irure Lorem et laboris nostrud amet cupidatat cupidatat anim do ut velit mollit consequat enim tempor. Consectetur est minim nostrud nostrud consectetur irure labore voluptate irure. Ipsum id Lorem sit sint voluptate est pariatur eu ad cupidatat et deserunt culpa sit eiusmod deserunt. Consectetur et fugiat anim do eiusmod aliquip nulla laborum elit adipisicing pariatur cillum.</p>\n </div>\n <div class=\"tab-pane fade\" id=\"list-settings\" role=\"tabpanel\" aria-labelledby=\"list-settings-list\">\n <p>Irure enim occaecat labore sit qui aliquip reprehenderit amet velit. Deserunt ullamco ex elit nostrud ut dolore nisi officia magna sit occaecat laboris sunt dolor. Nisi eu minim cillum occaecat aute est cupidatat aliqua labore aute occaecat ea aliquip sunt amet. Aute mollit dolor ut exercitation irure commodo non amet consectetur quis amet culpa. Quis ullamco nisi amet qui aute irure eu. Magna labore dolor quis ex labore id nostrud deserunt dolor eiusmod eu pariatur culpa mollit in irure.</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/toast.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Toast</title>\n <style>\n .notifications {\n position: absolute;\n top: 10px;\n right: 10px;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Toast <small>Bootstrap Visual Test</small></h1>\n\n <div class=\"row mt-3\">\n <div class=\"col-md-12\">\n <button id=\"btnShowToast\" class=\"btn btn-primary\">Show toast</button>\n <button id=\"btnHideToast\" class=\"btn btn-primary\">Hide toast</button>\n </div>\n </div>\n </div>\n\n <div class=\"notifications\">\n <div id=\"toastAutoHide\" class=\"toast\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" data-bs-delay=\"2000\">\n <div class=\"toast-header\">\n <span class=\"d-block bg-primary rounded me-2\" style=\"width: 20px; height: 20px;\"></span>\n <strong class=\"me-auto\">Bootstrap</strong>\n <small>11 mins ago</small>\n </div>\n <div class=\"toast-body\">\n Hello, world! This is a toast message with <strong>autohide</strong> in 2 seconds\n </div>\n </div>\n\n <div class=\"toast\" data-bs-autohide=\"false\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\">\n <div class=\"toast-header\">\n <span class=\"d-block bg-primary rounded me-2\" style=\"width: 20px; height: 20px;\"></span>\n <strong class=\"me-auto\">Bootstrap</strong>\n <small class=\"text-muted\">2 seconds ago</small>\n <button type=\"button\" class=\"ms-2 mb-1 btn-close\" data-bs-dismiss=\"toast\" aria-label=\"Close\"></button>\n </div>\n <div class=\"toast-body\">\n Heads up, toasts will stack automatically\n </div>\n </div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n <script>\n window.addEventListener('load', function () {\n var toastElements = document.querySelectorAll('.toast')\n for (const toastEl of toastElements) {\n new bootstrap.Toast(toastEl)\n }\n\n document.getElementById('btnShowToast').addEventListener('click', function () {\n var toastElements = document.querySelectorAll('.toast')\n for (const toastEl of toastElements) {\n var toast = bootstrap.Toast.getInstance(toastEl)\n toast.show()\n }\n })\n\n document.getElementById('btnHideToast').addEventListener('click', function () {\n var toastElements = document.querySelectorAll('.toast')\n for (const toastEl of toastElements) {\n var toast = bootstrap.Toast.getInstance(toastEl)\n toast.hide()\n }\n })\n })\n </script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]},{"filePath":"/Users/radmir.baembitov/WebstormProjects/bootstrap/js/tests/visual/tooltip.html","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: Unexpected token <","line":1,"column":1}],"suppressedMessages":[],"errorCount":1,"fatalErrorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <link href=\"../../../dist/css/bootstrap.min.css\" rel=\"stylesheet\">\n <title>Tooltip</title>\n <style>\n #target {\n border: 1px solid;\n width: 100px;\n height: 50px;\n margin-left: 50px;\n transform: rotate(270deg);\n margin-top: 100px;\n }\n </style>\n </head>\n <body>\n <div class=\"container\">\n <h1>Tooltip <small>Bootstrap Visual Test</small></h1>\n\n <p class=\"text-muted\">Tight pants next level keffiyeh <a href=\"#\" data-bs-toggle=\"tooltip\" title=\"Default tooltip\">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href=\"#\" data-bs-toggle=\"tooltip\" title=\"Another tooltip\">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href=\"#\" data-bs-toggle=\"tooltip\" title=\"Another one here too\">whatever keytar</a>, scenester farm-to-table banksy Austin <a href=\"#\" data-bs-toggle=\"tooltip\" title=\"The last tip!\">twitter handle</a> freegan cred raw denim single-origin coffee viral.</p>\n\n <hr>\n\n <div class=\"row\">\n <p>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"auto\" title=\"Tooltip on auto\">\n Tooltip on auto\n </button>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tooltip on top\">\n Tooltip on top\n </button>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" title=\"Tooltip on right\">\n Tooltip on end\n </button>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"bottom\" title=\"Tooltip on bottom\">\n Tooltip on bottom\n </button>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"left\" title=\"Tooltip on left\">\n Tooltip on start\n </button>\n </p>\n </div>\n <div class=\"row\">\n <p>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"left\" title=\"Tooltip with container (selector)\" data-bs-container=\"#customContainer\">\n Tooltip with container (selector)\n </button>\n <button id=\"tooltipElement\" type=\"button\" class=\"btn btn-secondary\" data-bs-placement=\"left\" title=\"Tooltip with container (element)\">\n Tooltip with container (element)\n </button>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-html=\"true\" title=\"<em>Tooltip</em> <u>with</u> <b>HTML</b>\">\n Tooltip with HTML\n </button>\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"left\" title=\"Tooltip with XSS\" data-bs-container=\"<img src=1 onerror=alert(123)>\">\n Tooltip with XSS\n </button>\n </p>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-3\">\n <div id=\"target\" title=\"Test tooltip on transformed element\"></div>\n </div>\n <div id=\"shadow\" class=\"pt-5\"></div>\n </div>\n <div id=\"customContainer\"></div>\n </div>\n\n <script src=\"../../../dist/js/bootstrap.bundle.js\"></script>\n <script>\n if (typeof document.body.attachShadow === 'function') {\n var shadowRoot = document.getElementById('shadow').attachShadow({ mode: 'open' })\n shadowRoot.innerHTML =\n '<button type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tooltip on top in a shadow dom\">' +\n ' Tooltip on top in a shadow dom' +\n '</button>' +\n '<button id=\"secondTooltip\" type=\"button\" class=\"btn btn-secondary\" data-bs-toggle=\"tooltip\" data-bs-placement=\"top\" title=\"Tooltip on top in a shadow dom with container option\">' +\n ' Tooltip on top in a shadow dom' +\n '</button>'\n\n var firstChildTooltip = new bootstrap.Tooltip(shadowRoot.firstChild)\n var secondChildTooltip = new bootstrap.Tooltip(shadowRoot.getElementById('secondTooltip'), {\n container: shadowRoot\n })\n }\n\n var tooltipElements = document.querySelectorAll('[data-bs-toggle=\"tooltip\"]')\n for (const tooltipEl of tooltipElements) {\n new bootstrap.Tooltip(tooltipEl)\n }\n\n var tooltipElement = document.getElementById('tooltipElement')\n var tooltipElementInstance = new bootstrap.Tooltip(tooltipElement, {\n container: document.getElementById('customContainer')\n })\n\n var target = document.getElementById('target')\n var targetTooltip = new bootstrap.Tooltip(target, {\n placement : 'top',\n trigger : 'manual'\n })\n targetTooltip.show()\n </script>\n </body>\n</html>\n","usedDeprecatedRules":[{"ruleId":"no-buffer-constructor","replacedBy":[]}]}]