From 438e01b61c935409adca29cde3dbb66dd119eefd Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Wed, 8 May 2019 16:11:24 +0300 Subject: Rename `eventHandler` and `selectorEngine` files. --- js/src/alert.js | 4 +- js/src/button.js | 4 +- js/src/carousel.js | 4 +- js/src/collapse.js | 4 +- js/src/dom/event-handler.js | 345 ++++++++++++++++++++++++++++++++++++++++++ js/src/dom/eventHandler.js | 345 ------------------------------------------ js/src/dom/selector-engine.js | 97 ++++++++++++ js/src/dom/selectorEngine.js | 97 ------------ js/src/dropdown.js | 4 +- js/src/modal.js | 4 +- js/src/popover.js | 2 +- js/src/scrollspy.js | 4 +- js/src/tab.js | 4 +- js/src/toast.js | 2 +- js/src/tooltip.js | 4 +- 15 files changed, 462 insertions(+), 462 deletions(-) create mode 100644 js/src/dom/event-handler.js delete mode 100644 js/src/dom/eventHandler.js create mode 100644 js/src/dom/selector-engine.js delete mode 100644 js/src/dom/selectorEngine.js (limited to 'js/src') diff --git a/js/src/alert.js b/js/src/alert.js index f60ccfc91..23ac9f25d 100644 --- a/js/src/alert.js +++ b/js/src/alert.js @@ -13,8 +13,8 @@ import { getTransitionDurationFromElement } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' -import SelectorEngine from './dom/selectorEngine' +import EventHandler from './dom/event-handler' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/button.js b/js/src/button.js index 78b0fea8c..c69a8a390 100644 --- a/js/src/button.js +++ b/js/src/button.js @@ -7,8 +7,8 @@ import { jQuery as $ } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' -import SelectorEngine from './dom/selectorEngine' +import EventHandler from './dom/event-handler' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/carousel.js b/js/src/carousel.js index 1a185d037..7cd790f85 100644 --- a/js/src/carousel.js +++ b/js/src/carousel.js @@ -18,9 +18,9 @@ import { typeCheckConfig } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/collapse.js b/js/src/collapse.js index 372869b69..208e64c64 100644 --- a/js/src/collapse.js +++ b/js/src/collapse.js @@ -17,9 +17,9 @@ import { typeCheckConfig } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/dom/event-handler.js b/js/src/dom/event-handler.js new file mode 100644 index 000000000..9e590de88 --- /dev/null +++ b/js/src/dom/event-handler.js @@ -0,0 +1,345 @@ +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): dom/event-handler.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +import { jQuery as $ } from '../util/index' +import { createCustomEvent, defaultPreventedPreservedOnDispatch } from './polyfill' + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +const namespaceRegex = /[^.]*(?=\..*)\.|.*/ +const stripNameRegex = /\..*/ +const keyEventRegex = /^key/ +const stripUidRegex = /::\d+$/ +const eventRegistry = {} // Events storage +let uidEvent = 1 +const customEvents = { + mouseenter: 'mouseover', + mouseleave: 'mouseout' +} +const nativeEvents = [ + 'click', + 'dblclick', + 'mouseup', + 'mousedown', + 'contextmenu', + 'mousewheel', + 'DOMMouseScroll', + 'mouseover', + 'mouseout', + 'mousemove', + 'selectstart', + 'selectend', + 'keydown', + 'keypress', + 'keyup', + 'orientationchange', + 'touchstart', + 'touchmove', + 'touchend', + 'touchcancel', + 'pointerdown', + 'pointermove', + 'pointerup', + 'pointerleave', + 'pointercancel', + 'gesturestart', + 'gesturechange', + 'gestureend', + 'focus', + 'blur', + 'change', + 'reset', + 'select', + 'submit', + 'focusin', + 'focusout', + 'load', + 'unload', + 'beforeunload', + 'resize', + 'move', + 'DOMContentLoaded', + 'readystatechange', + 'error', + 'abort', + 'scroll' +] + +/** + * ------------------------------------------------------------------------ + * Private methods + * ------------------------------------------------------------------------ + */ + +function getUidEvent(element, uid) { + return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++ +} + +function getEvent(element) { + const uid = getUidEvent(element) + + element.uidEvent = uid + eventRegistry[uid] = eventRegistry[uid] || {} + + return eventRegistry[uid] +} + +function fixEvent(event, element) { + // Add which for key events + if (event.which === null && keyEventRegex.test(event.type)) { + event.which = event.charCode === null ? event.keyCode : event.charCode + } + + event.delegateTarget = element +} + +function bootstrapHandler(element, fn) { + return function handler(event) { + fixEvent(event, element) + if (handler.oneOff) { + EventHandler.off(element, event.type, fn) + } + + return fn.apply(element, [event]) + } +} + +function bootstrapDelegationHandler(element, selector, fn) { + return function handler(event) { + const domElements = element.querySelectorAll(selector) + + for (let { target } = event; target && target !== this; target = target.parentNode) { + for (let i = domElements.length; i--;) { + if (domElements[i] === target) { + fixEvent(event, target) + + if (handler.oneOff) { + EventHandler.off(element, event.type, fn) + } + + return fn.apply(target, [event]) + } + } + } + + // To please ESLint + return null + } +} + +function findHandler(events, handler, delegationSelector = null) { + for (const uid of Object.keys(events)) { + const event = events[uid] + + if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { + return events[uid] + } + } + + return null +} + +function normalizeParams(originalTypeEvent, handler, delegationFn) { + const delegation = typeof handler === 'string' + const originalHandler = delegation ? delegationFn : handler + + // allow to get the native events from namespaced events ('click.bs.button' --> 'click') + let typeEvent = originalTypeEvent.replace(stripNameRegex, '') + const custom = customEvents[typeEvent] + + if (custom) { + typeEvent = custom + } + + const isNative = nativeEvents.indexOf(typeEvent) > -1 + + if (!isNative) { + typeEvent = originalTypeEvent + } + + return [delegation, originalHandler, typeEvent] +} + +function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { + if (typeof originalTypeEvent !== 'string' || !element) { + return + } + + if (!handler) { + handler = delegationFn + delegationFn = null + } + + const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn) + const events = getEvent(element) + const handlers = events[typeEvent] || (events[typeEvent] = {}) + const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null) + + if (previousFn) { + previousFn.oneOff = previousFn.oneOff && oneOff + + return + } + + const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')) + const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler) + + fn.delegationSelector = delegation ? handler : null + fn.originalHandler = originalHandler + fn.oneOff = oneOff + fn.uidEvent = uid + handlers[uid] = fn + + element.addEventListener(typeEvent, fn, delegation) +} + +function removeHandler(element, events, typeEvent, handler, delegationSelector) { + const fn = findHandler(events[typeEvent], handler, delegationSelector) + + if (fn === null) { + return + } + + element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)) + delete events[typeEvent][fn.uidEvent] +} + +function removeNamespacedHandlers(element, events, typeEvent, namespace) { + const storeElementEvent = events[typeEvent] || {} + + Object.keys(storeElementEvent) + .forEach(handlerKey => { + if (handlerKey.indexOf(namespace) > -1) { + const event = storeElementEvent[handlerKey] + + removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector) + } + }) +} + +const EventHandler = { + on(element, event, handler, delegationFn) { + addHandler(element, event, handler, delegationFn, false) + }, + + one(element, event, handler, delegationFn) { + addHandler(element, event, handler, delegationFn, true) + }, + + off(element, originalTypeEvent, handler, delegationFn) { + if (typeof originalTypeEvent !== 'string' || !element) { + return + } + + const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn) + const inNamespace = typeEvent !== originalTypeEvent + const events = getEvent(element) + const isNamespace = originalTypeEvent.charAt(0) === '.' + + if (typeof originalHandler !== 'undefined') { + // Simplest case: handler is passed, remove that listener ONLY. + if (!events || !events[typeEvent]) { + return + } + + removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null) + return + } + + if (isNamespace) { + Object.keys(events) + .forEach(elementEvent => { + removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.substr(1)) + }) + } + + const storeElementEvent = events[typeEvent] || {} + Object.keys(storeElementEvent) + .forEach(keyHandlers => { + const handlerKey = keyHandlers.replace(stripUidRegex, '') + + if (!inNamespace || originalTypeEvent.indexOf(handlerKey) > -1) { + const event = storeElementEvent[keyHandlers] + + removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector) + } + }) + }, + + trigger(element, event, args) { + if (typeof event !== 'string' || !element) { + return null + } + + const typeEvent = event.replace(stripNameRegex, '') + const inNamespace = event !== typeEvent + const isNative = nativeEvents.indexOf(typeEvent) > -1 + + let jQueryEvent + let bubbles = true + let nativeDispatch = true + let defaultPrevented = false + let evt = null + + if (inNamespace && typeof $ !== 'undefined') { + jQueryEvent = $.Event(event, args) + + $(element).trigger(jQueryEvent) + bubbles = !jQueryEvent.isPropagationStopped() + nativeDispatch = !jQueryEvent.isImmediatePropagationStopped() + defaultPrevented = jQueryEvent.isDefaultPrevented() + } + + if (isNative) { + evt = document.createEvent('HTMLEvents') + evt.initEvent(typeEvent, bubbles, true) + } else { + evt = createCustomEvent(event, { + bubbles, + cancelable: true + }) + } + + // merge custom informations in our event + if (typeof args !== 'undefined') { + Object.keys(args) + .forEach(key => { + Object.defineProperty(evt, key, { + get() { + return args[key] + } + }) + }) + } + + if (defaultPrevented) { + evt.preventDefault() + + if (!defaultPreventedPreservedOnDispatch) { + Object.defineProperty(evt, 'defaultPrevented', { + get: () => true + }) + } + } + + if (nativeDispatch) { + element.dispatchEvent(evt) + } + + if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') { + jQueryEvent.preventDefault() + } + + return evt + } +} + +export default EventHandler diff --git a/js/src/dom/eventHandler.js b/js/src/dom/eventHandler.js deleted file mode 100644 index 9a1e37092..000000000 --- a/js/src/dom/eventHandler.js +++ /dev/null @@ -1,345 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): dom/eventHandler.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { jQuery as $ } from '../util/index' -import { createCustomEvent, defaultPreventedPreservedOnDispatch } from './polyfill' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const namespaceRegex = /[^.]*(?=\..*)\.|.*/ -const stripNameRegex = /\..*/ -const keyEventRegex = /^key/ -const stripUidRegex = /::\d+$/ -const eventRegistry = {} // Events storage -let uidEvent = 1 -const customEvents = { - mouseenter: 'mouseover', - mouseleave: 'mouseout' -} -const nativeEvents = [ - 'click', - 'dblclick', - 'mouseup', - 'mousedown', - 'contextmenu', - 'mousewheel', - 'DOMMouseScroll', - 'mouseover', - 'mouseout', - 'mousemove', - 'selectstart', - 'selectend', - 'keydown', - 'keypress', - 'keyup', - 'orientationchange', - 'touchstart', - 'touchmove', - 'touchend', - 'touchcancel', - 'pointerdown', - 'pointermove', - 'pointerup', - 'pointerleave', - 'pointercancel', - 'gesturestart', - 'gesturechange', - 'gestureend', - 'focus', - 'blur', - 'change', - 'reset', - 'select', - 'submit', - 'focusin', - 'focusout', - 'load', - 'unload', - 'beforeunload', - 'resize', - 'move', - 'DOMContentLoaded', - 'readystatechange', - 'error', - 'abort', - 'scroll' -] - -/** - * ------------------------------------------------------------------------ - * Private methods - * ------------------------------------------------------------------------ - */ - -function getUidEvent(element, uid) { - return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++ -} - -function getEvent(element) { - const uid = getUidEvent(element) - - element.uidEvent = uid - eventRegistry[uid] = eventRegistry[uid] || {} - - return eventRegistry[uid] -} - -function fixEvent(event, element) { - // Add which for key events - if (event.which === null && keyEventRegex.test(event.type)) { - event.which = event.charCode === null ? event.keyCode : event.charCode - } - - event.delegateTarget = element -} - -function bootstrapHandler(element, fn) { - return function handler(event) { - fixEvent(event, element) - if (handler.oneOff) { - EventHandler.off(element, event.type, fn) - } - - return fn.apply(element, [event]) - } -} - -function bootstrapDelegationHandler(element, selector, fn) { - return function handler(event) { - const domElements = element.querySelectorAll(selector) - - for (let { target } = event; target && target !== this; target = target.parentNode) { - for (let i = domElements.length; i--;) { - if (domElements[i] === target) { - fixEvent(event, target) - - if (handler.oneOff) { - EventHandler.off(element, event.type, fn) - } - - return fn.apply(target, [event]) - } - } - } - - // To please ESLint - return null - } -} - -function findHandler(events, handler, delegationSelector = null) { - for (const uid of Object.keys(events)) { - const event = events[uid] - - if (event.originalHandler === handler && event.delegationSelector === delegationSelector) { - return events[uid] - } - } - - return null -} - -function normalizeParams(originalTypeEvent, handler, delegationFn) { - const delegation = typeof handler === 'string' - const originalHandler = delegation ? delegationFn : handler - - // allow to get the native events from namespaced events ('click.bs.button' --> 'click') - let typeEvent = originalTypeEvent.replace(stripNameRegex, '') - const custom = customEvents[typeEvent] - - if (custom) { - typeEvent = custom - } - - const isNative = nativeEvents.indexOf(typeEvent) > -1 - - if (!isNative) { - typeEvent = originalTypeEvent - } - - return [delegation, originalHandler, typeEvent] -} - -function addHandler(element, originalTypeEvent, handler, delegationFn, oneOff) { - if (typeof originalTypeEvent !== 'string' || !element) { - return - } - - if (!handler) { - handler = delegationFn - delegationFn = null - } - - const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn) - const events = getEvent(element) - const handlers = events[typeEvent] || (events[typeEvent] = {}) - const previousFn = findHandler(handlers, originalHandler, delegation ? handler : null) - - if (previousFn) { - previousFn.oneOff = previousFn.oneOff && oneOff - - return - } - - const uid = getUidEvent(originalHandler, originalTypeEvent.replace(namespaceRegex, '')) - const fn = delegation ? bootstrapDelegationHandler(element, handler, delegationFn) : bootstrapHandler(element, handler) - - fn.delegationSelector = delegation ? handler : null - fn.originalHandler = originalHandler - fn.oneOff = oneOff - fn.uidEvent = uid - handlers[uid] = fn - - element.addEventListener(typeEvent, fn, delegation) -} - -function removeHandler(element, events, typeEvent, handler, delegationSelector) { - const fn = findHandler(events[typeEvent], handler, delegationSelector) - - if (fn === null) { - return - } - - element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)) - delete events[typeEvent][fn.uidEvent] -} - -function removeNamespacedHandlers(element, events, typeEvent, namespace) { - const storeElementEvent = events[typeEvent] || {} - - Object.keys(storeElementEvent) - .forEach(handlerKey => { - if (handlerKey.indexOf(namespace) > -1) { - const event = storeElementEvent[handlerKey] - - removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector) - } - }) -} - -const EventHandler = { - on(element, event, handler, delegationFn) { - addHandler(element, event, handler, delegationFn, false) - }, - - one(element, event, handler, delegationFn) { - addHandler(element, event, handler, delegationFn, true) - }, - - off(element, originalTypeEvent, handler, delegationFn) { - if (typeof originalTypeEvent !== 'string' || !element) { - return - } - - const [delegation, originalHandler, typeEvent] = normalizeParams(originalTypeEvent, handler, delegationFn) - const inNamespace = typeEvent !== originalTypeEvent - const events = getEvent(element) - const isNamespace = originalTypeEvent.charAt(0) === '.' - - if (typeof originalHandler !== 'undefined') { - // Simplest case: handler is passed, remove that listener ONLY. - if (!events || !events[typeEvent]) { - return - } - - removeHandler(element, events, typeEvent, originalHandler, delegation ? handler : null) - return - } - - if (isNamespace) { - Object.keys(events) - .forEach(elementEvent => { - removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.substr(1)) - }) - } - - const storeElementEvent = events[typeEvent] || {} - Object.keys(storeElementEvent) - .forEach(keyHandlers => { - const handlerKey = keyHandlers.replace(stripUidRegex, '') - - if (!inNamespace || originalTypeEvent.indexOf(handlerKey) > -1) { - const event = storeElementEvent[keyHandlers] - - removeHandler(element, events, typeEvent, event.originalHandler, event.delegationSelector) - } - }) - }, - - trigger(element, event, args) { - if (typeof event !== 'string' || !element) { - return null - } - - const typeEvent = event.replace(stripNameRegex, '') - const inNamespace = event !== typeEvent - const isNative = nativeEvents.indexOf(typeEvent) > -1 - - let jQueryEvent - let bubbles = true - let nativeDispatch = true - let defaultPrevented = false - let evt = null - - if (inNamespace && typeof $ !== 'undefined') { - jQueryEvent = $.Event(event, args) - - $(element).trigger(jQueryEvent) - bubbles = !jQueryEvent.isPropagationStopped() - nativeDispatch = !jQueryEvent.isImmediatePropagationStopped() - defaultPrevented = jQueryEvent.isDefaultPrevented() - } - - if (isNative) { - evt = document.createEvent('HTMLEvents') - evt.initEvent(typeEvent, bubbles, true) - } else { - evt = createCustomEvent(event, { - bubbles, - cancelable: true - }) - } - - // merge custom informations in our event - if (typeof args !== 'undefined') { - Object.keys(args) - .forEach(key => { - Object.defineProperty(evt, key, { - get() { - return args[key] - } - }) - }) - } - - if (defaultPrevented) { - evt.preventDefault() - - if (!defaultPreventedPreservedOnDispatch) { - Object.defineProperty(evt, 'defaultPrevented', { - get: () => true - }) - } - } - - if (nativeDispatch) { - element.dispatchEvent(evt) - } - - if (evt.defaultPrevented && typeof jQueryEvent !== 'undefined') { - jQueryEvent.preventDefault() - } - - return evt - } -} - -export default EventHandler diff --git a/js/src/dom/selector-engine.js b/js/src/dom/selector-engine.js new file mode 100644 index 000000000..eb6b680ac --- /dev/null +++ b/js/src/dom/selector-engine.js @@ -0,0 +1,97 @@ +/** + * -------------------------------------------------------------------------- + * Bootstrap (v4.3.1): dom/selector-engine.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * -------------------------------------------------------------------------- + */ + +import { find as findFn, findOne, matches, closest } from './polyfill' +import { makeArray } from '../util/index' + +/** + * ------------------------------------------------------------------------ + * Constants + * ------------------------------------------------------------------------ + */ + +const NODE_TEXT = 3 + +const SelectorEngine = { + matches(element, selector) { + return matches.call(element, selector) + }, + + find(selector, element = document.documentElement) { + if (typeof selector !== 'string') { + return null + } + + return findFn.call(element, selector) + }, + + findOne(selector, element = document.documentElement) { + if (typeof selector !== 'string') { + return null + } + + return findOne.call(element, selector) + }, + + children(element, selector) { + if (typeof selector !== 'string') { + return null + } + + const children = makeArray(element.children) + + return children.filter(child => this.matches(child, selector)) + }, + + parents(element, selector) { + if (typeof selector !== 'string') { + return null + } + + const parents = [] + let ancestor = element.parentNode + + while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { + if (this.matches(ancestor, selector)) { + parents.push(ancestor) + } + + ancestor = ancestor.parentNode + } + + return parents + }, + + closest(element, selector) { + if (typeof selector !== 'string') { + return null + } + + return closest.call(element, selector) + }, + + prev(element, selector) { + if (typeof selector !== 'string') { + return null + } + + const siblings = [] + let previous = element.previousSibling + + while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== NODE_TEXT) { + if (this.matches(previous, selector)) { + siblings.push(previous) + } + + previous = previous.previousSibling + } + + return siblings + } +} + +export default SelectorEngine diff --git a/js/src/dom/selectorEngine.js b/js/src/dom/selectorEngine.js deleted file mode 100644 index fad3a43b5..000000000 --- a/js/src/dom/selectorEngine.js +++ /dev/null @@ -1,97 +0,0 @@ -/** - * -------------------------------------------------------------------------- - * Bootstrap (v4.3.1): dom/selectorEngine.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - * -------------------------------------------------------------------------- - */ - -import { find as findFn, findOne, matches, closest } from './polyfill' -import { makeArray } from '../util/index' - -/** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - -const NODE_TEXT = 3 - -const SelectorEngine = { - matches(element, selector) { - return matches.call(element, selector) - }, - - find(selector, element = document.documentElement) { - if (typeof selector !== 'string') { - return null - } - - return findFn.call(element, selector) - }, - - findOne(selector, element = document.documentElement) { - if (typeof selector !== 'string') { - return null - } - - return findOne.call(element, selector) - }, - - children(element, selector) { - if (typeof selector !== 'string') { - return null - } - - const children = makeArray(element.children) - - return children.filter(child => this.matches(child, selector)) - }, - - parents(element, selector) { - if (typeof selector !== 'string') { - return null - } - - const parents = [] - let ancestor = element.parentNode - - while (ancestor && ancestor.nodeType === Node.ELEMENT_NODE && ancestor.nodeType !== NODE_TEXT) { - if (this.matches(ancestor, selector)) { - parents.push(ancestor) - } - - ancestor = ancestor.parentNode - } - - return parents - }, - - closest(element, selector) { - if (typeof selector !== 'string') { - return null - } - - return closest.call(element, selector) - }, - - prev(element, selector) { - if (typeof selector !== 'string') { - return null - } - - const siblings = [] - let previous = element.previousSibling - - while (previous && previous.nodeType === Node.ELEMENT_NODE && previous.nodeType !== NODE_TEXT) { - if (this.matches(previous, selector)) { - siblings.push(previous) - } - - previous = previous.previousSibling - } - - return siblings - } -} - -export default SelectorEngine diff --git a/js/src/dropdown.js b/js/src/dropdown.js index aa937afdb..6bae6a4b4 100644 --- a/js/src/dropdown.js +++ b/js/src/dropdown.js @@ -14,10 +14,10 @@ import { typeCheckConfig } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' import Popper from 'popper.js' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/modal.js b/js/src/modal.js index 59cea95bd..9943f93e0 100644 --- a/js/src/modal.js +++ b/js/src/modal.js @@ -17,9 +17,9 @@ import { typeCheckConfig } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/popover.js b/js/src/popover.js index f97e25adc..3cb5549df 100644 --- a/js/src/popover.js +++ b/js/src/popover.js @@ -7,7 +7,7 @@ import { jQuery as $ } from './util/index' import Data from './dom/data' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' import Tooltip from './tooltip' /** diff --git a/js/src/scrollspy.js b/js/src/scrollspy.js index beea560d4..bcaab8b67 100644 --- a/js/src/scrollspy.js +++ b/js/src/scrollspy.js @@ -13,9 +13,9 @@ import { typeCheckConfig } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/tab.js b/js/src/tab.js index cebc52df2..b9db64baa 100644 --- a/js/src/tab.js +++ b/js/src/tab.js @@ -15,8 +15,8 @@ import { reflow } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' -import SelectorEngine from './dom/selectorEngine' +import EventHandler from './dom/event-handler' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ diff --git a/js/src/toast.js b/js/src/toast.js index 7548befd8..9956fd406 100644 --- a/js/src/toast.js +++ b/js/src/toast.js @@ -13,7 +13,7 @@ import { typeCheckConfig } from './util/index' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' /** diff --git a/js/src/tooltip.js b/js/src/tooltip.js index 0b2ca1bfc..8a832a973 100644 --- a/js/src/tooltip.js +++ b/js/src/tooltip.js @@ -22,10 +22,10 @@ import { sanitizeHtml } from './util/sanitizer' import Data from './dom/data' -import EventHandler from './dom/eventHandler' +import EventHandler from './dom/event-handler' import Manipulator from './dom/manipulator' import Popper from 'popper.js' -import SelectorEngine from './dom/selectorEngine' +import SelectorEngine from './dom/selector-engine' /** * ------------------------------------------------------------------------ -- cgit v1.2.3