1
|
{"version":3,"file":"scrollspy.js","sources":["../src/util/index.js","../src/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): util/index.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\nconst TRANSITION_END = 'transitionend'\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nconst toType = obj => {\n if (obj === null || obj === undefined) {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\n/**\n * --------------------------------------------------------------------------\n * Public Util Api\n * --------------------------------------------------------------------------\n */\n\nconst getUID = prefix => {\n do {\n prefix += Math.floor(Math.random() * MAX_UID)\n } while (document.getElementById(prefix))\n\n return prefix\n}\n\nconst getSelector = element => {\n let selector = element.getAttribute('data-bs-target')\n\n if (!selector || selector === '#') {\n let hrefAttr = element.getAttribute('href')\n\n // The only valid content that could double as a selector are IDs or classes,\n // so everything starting with `#` or `.`. If a \"real\" URL is used as the selector,\n // `document.querySelector` will rightfully complain it is invalid.\n // See https://github.com/twbs/bootstrap/issues/32273\n if (!hrefAttr || (!hrefAttr.includes('#') && !hrefAttr.startsWith('.'))) {\n return null\n }\n\n // Just in case some CMS puts out a full URL with the anchor appended\n if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {\n hrefAttr = '#' + hrefAttr.split('#')[1]\n }\n\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null\n }\n\n return selector\n}\n\nconst getSelectorFromElement = element => {\n const selector = getSelector(element)\n\n if (selector) {\n return document.querySelector(selector) ? selector : null\n }\n\n return null\n}\n\nconst getElementFromSelector = element => {\n const selector = getSelector(element)\n\n return selector ? document.querySelector(selector) : null\n}\n\nconst getTransitionDurationFromElement = element => {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let { transitionDuration, transitionDelay } = window.getComputedStyle(element)\n\n const floatTransitionDuration = Number.parseFloat(transitionDuration)\n const floatTransitionDelay = Number.parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n}\n\nconst triggerTransitionEnd = element => {\n element.dispatchEvent(new Event(TRANSITION_END))\n}\n\nconst isElement = obj => (obj[0] || obj).nodeType\n\nconst emulateTransitionEnd = (element, duration) => {\n let called = false\n const durationPadding = 5\n const emulatedDuration = duration + durationPadding\n\n function listener() {\n called = true\n element.removeEventListener(TRANSITION_END, listener)\n }\n\n element.addEventListener(TRANSITION_END, listener)\n setTimeout(() => {\n if (!called) {\n triggerTransitionEnd(element)\n }\n }, emulatedDuration)\n}\n\nconst typeCheckConfig = (componentName, config, configTypes) => {\n Object.keys(configTypes).forEach(property => {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && isElement(value) ? 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new TypeError(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`\n )\n }\n })\n}\n\nconst isVisible = element => {\n if (!element) {\n return false\n }\n\n if (element.style && element.parentNode && element.parentNode.style) {\n const elementStyle = getComputedStyle(element)\n const parentNodeStyle = getComputedStyle(element.parentNode)\n\n return elementStyle.display !== 'none' &&\n parentNodeStyle.display !== 'none' &&\n elementStyle.visibility !== 'hidden'\n }\n\n return false\n}\n\nconst findShadowRoot = element => {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return findShadowRoot(element.parentNode)\n}\n\nconst noop = () => function () {}\n\nconst reflow = element => element.offsetHeight\n\nconst getjQuery = () => {\n const { jQuery } = window\n\n if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {\n return jQuery\n }\n\n return null\n}\n\nconst onDOMContentLoaded = callback => {\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', callback)\n } else {\n callback()\n }\n}\n\nconst isRTL = document.documentElement.dir === 'rtl'\n\nconst defineJQueryPlugin = (name, plugin) => {\n onDOMContentLoaded(() => {\n const $ = getjQuery()\n /* istanbul ignore if */\n if ($) {\n const JQUERY_NO_CONFLICT = $.fn[name]\n $.fn[name] = plugin.jQueryInterface\n $.fn[name].Constructor = plugin\n $.fn[name].noConflict = () => {\n $.fn[name] = JQUERY_NO_CONFLICT\n return plugin.jQueryInterface\n }\n }\n })\n}\n\nexport {\n getUID,\n getSelectorFromElement,\n getElementFromSelector,\n getTransitionDurationFromElement,\n triggerTransitionEnd,\n isElement,\n emulateTransitionEnd,\n typeCheckConfig,\n isVisible,\n findShadowRoot,\n noop,\n reflow,\n getjQuery,\n onDOMContentLoaded,\n isRTL,\n defineJQueryPlugin\n}\n","/**\n * --------------------------------------------------------------------------\n * Bootstrap (v5.0.0-beta2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport {\n defineJQueryPlugin,\n getSelectorFromElement,\n getUID,\n isElement,\n typeCheckConfig\n} from './util/index'\nimport Data from './dom/data'\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 * ------------------------------------------------------------------------\n * Constants\n * ------------------------------------------------------------------------\n */\n\nconst NAME = 'scrollspy'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst SELECTOR_DATA_SPY = '[data-bs-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\n/**\n * ------------------------------------------------------------------------\n * Class Definition\n * ------------------------------------------------------------------------\n */\n\nclass ScrollSpy extends BaseComponent {\n constructor(element, config) {\n super(element)\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS}, ${this._config.target} ${SELECTOR_LIST_ITEMS}, ${this._config.target} .${CLASS_NAME_DROPDOWN_ITEM}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n EventHandler.on(this._scrollElement, EVENT_SCROLL, () => this._process())\n\n this.refresh()\n this._process()\n }\n\n // Getters\n\n static get Default() {\n return Default\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n // Public\n\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET :\n METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod :\n this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() :\n 0\n\n this._offsets = []\n this._targets = []\n this._scrollHeight = this._getScrollHeight()\n\n const targets = SelectorEngine.find(this._selector)\n\n targets.map(element => {\n const targetSelector = getSelectorFromElement(element)\n const target = targetSelector ? SelectorEngine.findOne(targetSelector) : null\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n return [\n Manipulator[offsetMethod](target).top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(item => item)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n super.dispose()\n EventHandler.off(this._scrollElement, EVENT_KEY)\n\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && isElement(config.target)) {\n let { id } = config.target\n if (!id) {\n id = getUID(NAME)\n config.target.id = id\n }\n\n config.target = `#${id}`\n }\n\n typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset :\n this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight :\n this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector.split(',')\n .map(selector => `${selector}[data-bs-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const link = SelectorEngine.findOne(queries.join(','))\n\n if (link.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) {\n SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE, link.closest(SELECTOR_DROPDOWN))\n .classList.add(CLASS_NAME_ACTIVE)\n\n link.classList.add(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n link.classList.add(CLASS_NAME_ACTIVE)\n\n SelectorEngine.parents(link, SELECTOR_NAV_LIST_GROUP)\n .forEach(listGroup => {\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n SelectorEngine.prev(listGroup, `${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n\n // Handle special case when .nav-link is inside .nav-item\n SelectorEngine.prev(listGroup, SELECTOR_NAV_ITEMS)\n .forEach(navItem => {\n SelectorEngine.children(navItem, SELECTOR_NAV_LINKS)\n .forEach(item => item.classList.add(CLASS_NAME_ACTIVE))\n })\n })\n }\n\n EventHandler.trigger(this._scrollElement, EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n SelectorEngine.find(this._selector)\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n\n static jQueryInterface(config) {\n return this.each(function () {\n let data = Data.getData(this, DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n }\n\n if (typeof config === 'string') {\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/**\n * ------------------------------------------------------------------------\n * Data Api implementation\n * ------------------------------------------------------------------------\n */\n\nEventHandler.on(window, EVENT_LOAD_DATA_API, () => {\n SelectorEngine.find(SELECTOR_DATA_SPY)\n .forEach(spy => new ScrollSpy(spy, Manipulator.getDataAttributes(spy)))\n})\n\n/**\n * ------------------------------------------------------------------------\n * jQuery\n * ------------------------------------------------------------------------\n * add .ScrollSpy to jQuery only if jQuery is present\n */\n\ndefineJQueryPlugin(NAME, ScrollSpy)\n\nexport default ScrollSpy\n"],"names":["MAX_UID","toType","obj","undefined","toString","call","match","toLowerCase","getUID","prefix","Math","floor","random","document","getElementById","getSelector","element","selector","getAttribute","hrefAttr","includes","startsWith","split","trim","getSelectorFromElement","querySelector","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","Object","keys","forEach","property","expectedTypes","value","valueType","RegExp","test","TypeError","toUpperCase","getjQuery","window","jQuery","body","hasAttribute","onDOMContentLoaded","callback","readyState","addEventListener","documentElement","dir","defineJQueryPlugin","name","plugin","$","JQUERY_NO_CONFLICT","fn","jQueryInterface","Constructor","noConflict","NAME","DATA_KEY","EVENT_KEY","DATA_API_KEY","Default","offset","method","target","DefaultType","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","CLASS_NAME_DROPDOWN_ITEM","CLASS_NAME_ACTIVE","SELECTOR_DATA_SPY","SELECTOR_NAV_LIST_GROUP","SELECTOR_NAV_LINKS","SELECTOR_NAV_ITEMS","SELECTOR_LIST_ITEMS","SELECTOR_DROPDOWN","SELECTOR_DROPDOWN_TOGGLE","METHOD_OFFSET","METHOD_POSITION","ScrollSpy","_scrollElement","tagName","_config","_getConfig","_selector","_offsets","_targets","_activeTarget","_scrollHeight","EventHandler","on","_process","refresh","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targets","SelectorEngine","find","map","targetSelector","findOne","targetBCR","getBoundingClientRect","width","height","Manipulator","top","filter","item","sort","a","b","push","dispose","off","id","pageYOffset","scrollTop","scrollHeight","max","_getOffsetHeight","innerHeight","maxScroll","length","_activate","_clear","i","isActiveTarget","queries","link","join","classList","contains","closest","add","parents","listGroup","prev","navItem","children","trigger","relatedTarget","node","remove","each","data","Data","getData","BaseComponent","spy","getDataAttributes"],"mappings":"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"}
|