@thednp/shorty 1.0.3 → 2.0.0-alpha10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +224 -0
- package/.lgtm.yml +9 -0
- package/.prettierrc.json +15 -0
- package/README.md +195 -198
- package/cypress/e2e/att.cy.ts +46 -0
- package/cypress/e2e/boolean.cy.ts +44 -0
- package/cypress/e2e/class.cy.ts +28 -0
- package/cypress/e2e/event.cy.ts +51 -0
- package/cypress/e2e/get.cy.ts +168 -0
- package/cypress/e2e/is.cy.ts +233 -0
- package/cypress/e2e/misc.cy.ts +331 -0
- package/cypress/e2e/selectors.cy.ts +85 -0
- package/cypress/fixtures/custom-elem.js +18 -0
- package/cypress/plugins/esbuild-istanbul.ts +50 -0
- package/cypress/plugins/tsCompile.ts +34 -0
- package/cypress/support/commands.ts +37 -0
- package/cypress/support/e2e.ts +21 -0
- package/cypress/support/index.js +22 -0
- package/cypress/test.html +63 -0
- package/cypress.config.ts +30 -0
- package/dist/shorty.cjs +2 -0
- package/dist/shorty.cjs.map +1 -0
- package/dist/shorty.d.ts +1502 -0
- package/dist/shorty.js +2 -2628
- package/dist/shorty.js.map +1 -0
- package/dist/shorty.mjs +552 -0
- package/dist/shorty.mjs.map +1 -0
- package/dts.config.ts +22 -0
- package/package.json +33 -38
- package/src/attr/getAttribute.ts +11 -0
- package/src/attr/getAttributeNS.ts +12 -0
- package/src/attr/hasAttribute.ts +10 -0
- package/src/attr/hasAttributeNS.ts +12 -0
- package/src/attr/removeAttribute.ts +9 -0
- package/src/attr/removeAttributeNS.ts +11 -0
- package/src/attr/setAttribute.ts +11 -0
- package/src/attr/setAttributeNS.ts +12 -0
- package/src/blocks/{documentBody.js → documentBody.ts} +0 -0
- package/src/blocks/{documentElement.js → documentElement.ts} +0 -0
- package/src/blocks/{documentHead.js → documentHead.ts} +0 -0
- package/src/boolean/isApple.ts +14 -0
- package/src/boolean/{isFirefox.js → isFirefox.ts} +2 -3
- package/src/boolean/{isMobile.js → isMobile.ts} +1 -2
- package/src/boolean/support3DTransform.ts +8 -0
- package/src/boolean/supportAnimation.ts +8 -0
- package/src/boolean/{supportPassive.js → supportPassive.ts} +3 -3
- package/src/boolean/supportTouch.ts +7 -0
- package/src/boolean/supportTransform.ts +8 -0
- package/src/boolean/supportTransition.ts +8 -0
- package/src/class/addClass.ts +11 -0
- package/src/class/hasClass.ts +11 -0
- package/src/class/removeClass.ts +11 -0
- package/src/event/off.ts +14 -0
- package/src/event/on.ts +14 -0
- package/src/event/one.ts +25 -0
- package/src/get/{getBoundingClientRect.js → getBoundingClientRect.ts} +14 -12
- package/src/get/{getDocument.js → getDocument.ts} +11 -7
- package/src/get/getDocumentBody.ts +13 -0
- package/src/get/getDocumentElement.ts +13 -0
- package/src/get/getDocumentHead.ts +12 -0
- package/src/get/{getElementAnimationDelay.js → getElementAnimationDelay.ts} +10 -9
- package/src/get/{getElementAnimationDuration.js → getElementAnimationDuration.ts} +10 -8
- package/src/get/getElementStyle.ts +25 -0
- package/src/get/{getElementTransitionDelay.js → getElementTransitionDelay.ts} +12 -8
- package/src/get/{getElementTransitionDuration.js → getElementTransitionDuration.ts} +12 -8
- package/src/get/{getNodeScroll.js → getNodeScroll.ts} +9 -5
- package/src/get/{getParentNode.js → getParentNode.ts} +11 -6
- package/src/get/{getRectRelativeToOffsetParent.js → getRectRelativeToOffsetParent.ts} +15 -7
- package/src/get/getUID.ts +42 -0
- package/src/get/{getWindow.js → getWindow.ts} +9 -6
- package/src/{index.js → index.ts} +37 -43
- package/src/interface/boundingClientRect.d.ts +10 -0
- package/src/interface/css4Declaration.d.ts +4 -0
- package/src/interface/customElement.d.ts +8 -0
- package/src/interface/navigatorUA.d.ts +15 -0
- package/src/interface/offsetRect.d.ts +6 -0
- package/src/interface/originalEvent.d.ts +4 -0
- package/src/is/isArray.ts +9 -0
- package/src/is/isCanvas.ts +13 -0
- package/src/is/isCustomElement.ts +13 -0
- package/src/is/isDocument.ts +13 -0
- package/src/is/{isElement.js → isElement.ts} +10 -5
- package/src/is/{isElementInScrollRange.js → isElementInScrollRange.ts} +4 -4
- package/src/is/{isElementInViewport.js → isElementInViewport.ts} +6 -12
- package/src/is/isElementsArray.ts +13 -0
- package/src/is/isFunction.ts +10 -0
- package/src/is/isHTMLCollection.ts +12 -0
- package/src/is/isHTMLElement.ts +13 -0
- package/src/is/isHTMLImageElement.ts +12 -0
- package/src/is/isJSON.ts +20 -0
- package/src/is/isMap.ts +11 -0
- package/src/is/isMedia.ts +20 -0
- package/src/is/isNode.ts +17 -0
- package/src/is/isNodeList.ts +13 -0
- package/src/is/isNumber.ts +9 -0
- package/src/is/isObject.ts +10 -0
- package/src/is/isRTL.ts +11 -0
- package/src/is/isSVGElement.ts +13 -0
- package/src/is/{isScaledElement.js → isScaledElement.ts} +9 -7
- package/src/is/isShadowRoot.ts +12 -0
- package/src/is/isString.ts +9 -0
- package/src/is/isTableElement.ts +14 -0
- package/src/is/isWeakMap.ts +11 -0
- package/src/is/isWindow.ts +13 -0
- package/src/misc/ArrayFrom.ts +11 -0
- package/src/misc/Float32ArrayFrom.ts +10 -0
- package/src/misc/Float64ArrayFrom.ts +10 -0
- package/src/misc/ObjectAssign.ts +43 -0
- package/src/misc/ObjectEntries.ts +11 -0
- package/src/misc/ObjectHasOwn.ts +17 -0
- package/src/misc/ObjectKeys.ts +10 -0
- package/src/misc/ObjectValues.ts +11 -0
- package/src/misc/createCustomEvent.ts +28 -0
- package/src/misc/createElement.ts +40 -0
- package/src/misc/createElementNS.ts +45 -0
- package/src/misc/data.ts +82 -0
- package/src/misc/dispatchEvent.ts +9 -0
- package/src/misc/distinct.ts +18 -0
- package/src/misc/{emulateAnimationEnd.js → emulateAnimationEnd.ts} +8 -9
- package/src/misc/{emulateTransitionEnd.js → emulateTransitionEnd.ts} +8 -9
- package/src/misc/focus.ts +9 -0
- package/src/misc/getInstance.ts +9 -0
- package/src/misc/{noop.js → noop.ts} +4 -1
- package/src/misc/normalizeOptions.ts +55 -0
- package/src/misc/normalizeValue.ts +30 -0
- package/src/misc/{passiveHandler.js → passiveHandler.ts} +1 -2
- package/src/misc/reflow.ts +9 -0
- package/src/misc/setElementStyle.ts +23 -0
- package/src/misc/timer.ts +84 -0
- package/src/misc/toLowerCase.ts +9 -0
- package/src/misc/toUpperCase.ts +9 -0
- package/src/selectors/closest.ts +20 -0
- package/src/selectors/{getCustomElements.js → getCustomElements.ts} +8 -4
- package/src/selectors/getElementById.ts +16 -0
- package/src/selectors/getElementsByClassName.ts +22 -0
- package/src/selectors/getElementsByTagName.ts +20 -0
- package/src/selectors/matches.ts +10 -0
- package/src/selectors/querySelector.ts +22 -0
- package/src/selectors/{querySelectorAll.js → querySelectorAll.ts} +7 -5
- package/src/strings/{DOMContentLoadedEvent.js → DOMContentLoadedEvent.ts} +0 -1
- package/src/strings/{DOMMouseScrollEvent.js → DOMMouseScrollEvent.ts} +0 -1
- package/src/strings/{abortEvent.js → abortEvent.ts} +0 -1
- package/src/strings/{addEventListener.js → addEventListener.ts} +0 -1
- package/src/strings/{animationDelay.js → animationDelay.ts} +0 -1
- package/src/strings/{animationDuration.js → animationDuration.ts} +0 -1
- package/src/strings/{animationEndEvent.js → animationEndEvent.ts} +0 -1
- package/src/strings/{animationName.js → animationName.ts} +0 -1
- package/src/strings/{ariaChecked.js → ariaChecked.ts} +0 -1
- package/src/strings/{ariaDescribedBy.js → ariaDescribedBy.ts} +0 -1
- package/src/strings/{ariaDescription.js → ariaDescription.ts} +0 -1
- package/src/strings/{ariaExpanded.js → ariaExpanded.ts} +0 -1
- package/src/strings/{ariaHasPopup.js → ariaHasPopup.ts} +0 -1
- package/src/strings/{ariaHidden.js → ariaHidden.ts} +0 -1
- package/src/strings/{ariaLabel.js → ariaLabel.ts} +0 -1
- package/src/strings/{ariaLabelledBy.js → ariaLabelledBy.ts} +0 -1
- package/src/strings/{ariaModal.js → ariaModal.ts} +0 -1
- package/src/strings/{ariaPressed.js → ariaPressed.ts} +0 -1
- package/src/strings/{ariaSelected.js → ariaSelected.ts} +0 -1
- package/src/strings/{ariaValueMax.js → ariaValueMax.ts} +0 -1
- package/src/strings/{ariaValueMin.js → ariaValueMin.ts} +0 -1
- package/src/strings/{ariaValueNow.js → ariaValueNow.ts} +0 -1
- package/src/strings/{ariaValueText.js → ariaValueText.ts} +0 -1
- package/src/strings/{beforeunloadEvent.js → beforeunloadEvent.ts} +0 -1
- package/src/strings/{bezierEasings.js → bezierEasings.ts} +0 -1
- package/src/strings/{blurEvent.js → blurEvent.ts} +0 -1
- package/src/strings/{changeEvent.js → changeEvent.ts} +0 -1
- package/src/strings/{contextmenuEvent.js → contextmenuEvent.ts} +0 -1
- package/src/strings/dragEvent.ts +5 -0
- package/src/strings/dragendEvent.ts +5 -0
- package/src/strings/dragenterEvent.ts +5 -0
- package/src/strings/dragleaveEvent.ts +5 -0
- package/src/strings/dragoverEvent.ts +5 -0
- package/src/strings/dragstartEvent.ts +5 -0
- package/src/strings/{errorEvent.js → errorEvent.ts} +0 -1
- package/src/strings/{focusEvent.js → focusEvent.ts} +0 -1
- package/src/strings/{focusEvents.js → focusEvents.ts} +0 -1
- package/src/strings/{focusinEvent.js → focusinEvent.ts} +0 -1
- package/src/strings/{focusoutEvent.js → focusoutEvent.ts} +0 -1
- package/src/strings/{gesturechangeEvent.js → gesturechangeEvent.ts} +0 -1
- package/src/strings/{gestureendEvent.js → gestureendEvent.ts} +0 -1
- package/src/strings/{gesturestartEvent.js → gesturestartEvent.ts} +0 -1
- package/src/strings/{keyAlt.js → keyAlt.ts} +1 -1
- package/src/strings/{keyArrowDown.js → keyArrowDown.ts} +1 -1
- package/src/strings/{keyArrowLeft.js → keyArrowLeft.ts} +1 -1
- package/src/strings/{keyArrowRight.js → keyArrowRight.ts} +1 -1
- package/src/strings/{keyArrowUp.js → keyArrowUp.ts} +1 -1
- package/src/strings/{keyBackspace.js → keyBackspace.ts} +1 -1
- package/src/strings/{keyCapsLock.js → keyCapsLock.ts} +1 -1
- package/src/strings/{keyControl.js → keyControl.ts} +1 -1
- package/src/strings/{keyDelete.js → keyDelete.ts} +1 -1
- package/src/strings/{keyEnter.js → keyEnter.ts} +1 -1
- package/src/strings/{keyEscape.js → keyEscape.ts} +1 -1
- package/src/strings/{keyInsert.js → keyInsert.ts} +1 -1
- package/src/strings/{keyMeta.js → keyMeta.ts} +1 -1
- package/src/strings/{keyPause.js → keyPause.ts} +1 -1
- package/src/strings/{keyScrollLock.js → keyScrollLock.ts} +1 -1
- package/src/strings/{keyShift.js → keyShift.ts} +1 -1
- package/src/strings/{keySpace.js → keySpace.ts} +1 -1
- package/src/strings/{keyTab.js → keyTab.ts} +1 -1
- package/src/strings/{keyboardEventKeys.js → keyboardEventKeys.ts} +0 -1
- package/src/strings/{keydownEvent.js → keydownEvent.ts} +0 -1
- package/src/strings/{keypressEvent.js → keypressEvent.ts} +0 -1
- package/src/strings/{keyupEvent.js → keyupEvent.ts} +0 -1
- package/src/strings/{loadEvent.js → loadEvent.ts} +0 -1
- package/src/strings/{loadstartEvent.js → loadstartEvent.ts} +0 -1
- package/src/strings/{mouseClickEvents.js → mouseClickEvents.ts} +0 -1
- package/src/strings/mouseHoverEvents.ts +8 -0
- package/src/strings/{mouseSwipeEvents.js → mouseSwipeEvents.ts} +4 -2
- package/src/strings/{mouseclickEvent.js → mouseclickEvent.ts} +0 -1
- package/src/strings/{mousedblclickEvent.js → mousedblclickEvent.ts} +0 -1
- package/src/strings/{mousedownEvent.js → mousedownEvent.ts} +0 -1
- package/src/strings/{mouseenterEvent.js → mouseenterEvent.ts} +0 -1
- package/src/strings/{mousehoverEvent.js → mousehoverEvent.ts} +0 -1
- package/src/strings/{mouseinEvent.js → mouseinEvent.ts} +0 -1
- package/src/strings/{mouseleaveEvent.js → mouseleaveEvent.ts} +0 -1
- package/src/strings/{mousemoveEvent.js → mousemoveEvent.ts} +0 -1
- package/src/strings/{mouseoutEvent.js → mouseoutEvent.ts} +0 -1
- package/src/strings/{mouseoverEvent.js → mouseoverEvent.ts} +0 -1
- package/src/strings/{mouseupEvent.js → mouseupEvent.ts} +0 -1
- package/src/strings/{mousewheelEvent.js → mousewheelEvent.ts} +0 -1
- package/src/strings/{moveEvent.js → moveEvent.ts} +0 -1
- package/src/strings/{nativeEvents.js → nativeEvents.ts} +0 -0
- package/src/strings/{offsetHeight.js → offsetHeight.ts} +0 -1
- package/src/strings/{offsetWidth.js → offsetWidth.ts} +0 -1
- package/src/strings/{orientationchangeEvent.js → orientationchangeEvent.ts} +0 -1
- package/src/strings/{pointercancelEvent.js → pointercancelEvent.ts} +0 -1
- package/src/strings/{pointerdownEvent.js → pointerdownEvent.ts} +0 -1
- package/src/strings/{pointerleaveEvent.js → pointerleaveEvent.ts} +0 -1
- package/src/strings/{pointermoveEvent.js → pointermoveEvent.ts} +0 -1
- package/src/strings/{pointerupEvent.js → pointerupEvent.ts} +0 -1
- package/src/strings/{readystatechangeEvent.js → readystatechangeEvent.ts} +0 -1
- package/src/strings/{removeEventListener.js → removeEventListener.ts} +0 -1
- package/src/strings/{resetEvent.js → resetEvent.ts} +0 -1
- package/src/strings/{resizeEvent.js → resizeEvent.ts} +0 -1
- package/src/strings/{scrollEvent.js → scrollEvent.ts} +0 -1
- package/src/strings/{scrollHeight.js → scrollHeight.ts} +0 -1
- package/src/strings/{scrollWidth.js → scrollWidth.ts} +0 -1
- package/src/strings/{selectEvent.js → selectEvent.ts} +0 -1
- package/src/strings/{selectendEvent.js → selectendEvent.ts} +0 -1
- package/src/strings/{selectstartEvent.js → selectstartEvent.ts} +0 -1
- package/src/strings/{submitEvent.js → submitEvent.ts} +0 -1
- package/src/strings/tabindex.ts +5 -0
- package/src/strings/touchEvents.ts +10 -0
- package/src/strings/{touchcancelEvent.js → touchcancelEvent.ts} +0 -1
- package/src/strings/{touchendEvent.js → touchendEvent.ts} +0 -1
- package/src/strings/{touchmoveEvent.js → touchmoveEvent.ts} +0 -1
- package/src/strings/{touchstartEvent.js → touchstartEvent.ts} +0 -1
- package/src/strings/{transitionDelay.js → transitionDelay.ts} +0 -1
- package/src/strings/{transitionDuration.js → transitionDuration.ts} +0 -1
- package/src/strings/{transitionEndEvent.js → transitionEndEvent.ts} +0 -1
- package/src/strings/{transitionProperty.js → transitionProperty.ts} +0 -2
- package/src/strings/{unloadEvent.js → unloadEvent.ts} +0 -1
- package/src/strings/{userAgent.js → userAgent.ts} +0 -0
- package/src/strings/userAgentData.ts +9 -0
- package/tsconfig.json +30 -0
- package/vite.config.ts +30 -0
- package/dist/shorty.esm.js +0 -2599
- package/dist/shorty.esm.min.js +0 -2
- package/dist/shorty.min.js +0 -2
- package/src/attr/getAttribute.js +0 -9
- package/src/attr/getAttributeNS.js +0 -10
- package/src/attr/hasAttribute.js +0 -9
- package/src/attr/hasAttributeNS.js +0 -10
- package/src/attr/removeAttribute.js +0 -9
- package/src/attr/removeAttributeNS.js +0 -10
- package/src/attr/setAttribute.js +0 -10
- package/src/attr/setAttributeNS.js +0 -11
- package/src/boolean/isApple.js +0 -13
- package/src/boolean/support3DTransform.js +0 -9
- package/src/boolean/supportAnimation.js +0 -9
- package/src/boolean/supportTouch.js +0 -7
- package/src/boolean/supportTransform.js +0 -9
- package/src/boolean/supportTransition.js +0 -9
- package/src/class/addClass.js +0 -10
- package/src/class/hasClass.js +0 -10
- package/src/class/removeClass.js +0 -10
- package/src/event/off.js +0 -9
- package/src/event/on.js +0 -9
- package/src/event/one.js +0 -23
- package/src/get/getDocumentBody.js +0 -10
- package/src/get/getDocumentElement.js +0 -11
- package/src/get/getDocumentHead.js +0 -10
- package/src/get/getElementAnimationDelayLegacy.js +0 -21
- package/src/get/getElementAnimationDurationLegacy.js +0 -21
- package/src/get/getElementStyle.js +0 -20
- package/src/get/getElementTransitionDelayLegacy.js +0 -21
- package/src/get/getElementTransitionDurationLegacy.js +0 -21
- package/src/get/getUID.js +0 -34
- package/src/is/isArray.js +0 -8
- package/src/is/isCustomElement.js +0 -8
- package/src/is/isDocument.js +0 -10
- package/src/is/isElementsArray.js +0 -12
- package/src/is/isFunction.js +0 -8
- package/src/is/isHTMLCollection.js +0 -8
- package/src/is/isHTMLElement.js +0 -9
- package/src/is/isHTMLImageElement.js +0 -8
- package/src/is/isMedia.js +0 -14
- package/src/is/isNode.js +0 -9
- package/src/is/isNodeList.js +0 -9
- package/src/is/isNumber.js +0 -8
- package/src/is/isObject.js +0 -8
- package/src/is/isRTL.js +0 -9
- package/src/is/isSVGElement.js +0 -11
- package/src/is/isShadowRoot.js +0 -9
- package/src/is/isString.js +0 -8
- package/src/is/isTableElement.js +0 -11
- package/src/is/isWindow.js +0 -9
- package/src/misc/ArrayFrom.js +0 -8
- package/src/misc/Float32ArrayFrom.js +0 -7
- package/src/misc/Float64ArrayFrom.js +0 -7
- package/src/misc/ObjectAssign.js +0 -7
- package/src/misc/ObjectEntries.js +0 -7
- package/src/misc/ObjectKeys.js +0 -7
- package/src/misc/ObjectValues.js +0 -7
- package/src/misc/OriginalEvent.js +0 -20
- package/src/misc/createElement.js +0 -27
- package/src/misc/createElementNS.js +0 -30
- package/src/misc/data.js +0 -78
- package/src/misc/dispatchEvent.js +0 -8
- package/src/misc/distinct.js +0 -10
- package/src/misc/emulateAnimationEndLegacy.js +0 -41
- package/src/misc/emulateTransitionEndLegacy.js +0 -41
- package/src/misc/focus.js +0 -7
- package/src/misc/normalizeOptions.js +0 -49
- package/src/misc/normalizeValue.js +0 -34
- package/src/misc/passiveHandlerLegacy.js +0 -10
- package/src/misc/reflow.js +0 -8
- package/src/misc/setElementStyle.js +0 -19
- package/src/misc/timer.js +0 -75
- package/src/misc/toLowerCase.js +0 -8
- package/src/misc/toUpperCase.js +0 -8
- package/src/misc/version.js +0 -8
- package/src/selectors/closest.js +0 -16
- package/src/selectors/getElementById.js +0 -14
- package/src/selectors/getElementsByClassName.js +0 -15
- package/src/selectors/getElementsByTagName.js +0 -15
- package/src/selectors/matches.js +0 -10
- package/src/selectors/matchesLegacy.js +0 -23
- package/src/selectors/querySelector.js +0 -19
- package/src/strings/animationDelayLegacy.js +0 -9
- package/src/strings/animationDurationLegacy.js +0 -9
- package/src/strings/animationEndEventLegacy.js +0 -9
- package/src/strings/animationNameLegacy.js +0 -9
- package/src/strings/mouseHoverEvents.js +0 -7
- package/src/strings/touchEvents.js +0 -8
- package/src/strings/transitionDelayLegacy.js +0 -9
- package/src/strings/transitionDurationLegacy.js +0 -9
- package/src/strings/transitionEndEventLegacy.js +0 -9
- package/src/strings/transitionPropertyLegacy.js +0 -12
- package/src/strings/userAgentData.js +0 -7
- package/types/index.d.ts +0 -257
- package/types/module/shorty.ts +0 -248
- package/types/shorty.d.ts +0 -2316
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import isMap from '../is/isMap';
|
|
2
|
+
import isHTMLElement from '../is/isHTMLElement';
|
|
3
|
+
import isNumber from '../is/isNumber';
|
|
4
|
+
|
|
5
|
+
type KeyMap = Map<string, number>;
|
|
6
|
+
type TimeMap = Map<HTMLElement, number | KeyMap>;
|
|
7
|
+
|
|
8
|
+
const TimeCache: TimeMap = new Map() as TimeMap;
|
|
9
|
+
/**
|
|
10
|
+
* An interface for one or more `TimerHandler`s per `Element`.
|
|
11
|
+
*
|
|
12
|
+
* @see https://github.com/thednp/navbar/
|
|
13
|
+
*/
|
|
14
|
+
const Timer = {
|
|
15
|
+
/**
|
|
16
|
+
* Sets a new timeout timer for an element, or element -> key association.
|
|
17
|
+
*
|
|
18
|
+
* @param element target element
|
|
19
|
+
* @param callback the callback
|
|
20
|
+
* @param delay the execution delay
|
|
21
|
+
* @param key a unique key
|
|
22
|
+
*/
|
|
23
|
+
set: (element: HTMLElement, callback: TimerHandler, delay: number, key?: string): void => {
|
|
24
|
+
if (!isHTMLElement(element)) return;
|
|
25
|
+
|
|
26
|
+
/* istanbul ignore else */
|
|
27
|
+
if (key && key.length) {
|
|
28
|
+
/* istanbul ignore else */
|
|
29
|
+
if (!TimeCache.has(element)) {
|
|
30
|
+
TimeCache.set(element, new Map());
|
|
31
|
+
}
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
33
|
+
(TimeCache.get(element) as KeyMap).set(key, setTimeout(callback, delay));
|
|
34
|
+
} else {
|
|
35
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
36
|
+
TimeCache.set(element, setTimeout(callback, delay));
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Returns the timer associated with the target.
|
|
42
|
+
*
|
|
43
|
+
* @param element target element
|
|
44
|
+
* @param key a unique
|
|
45
|
+
* @returns the timer
|
|
46
|
+
*/
|
|
47
|
+
get: (element: HTMLElement, key?: string): number | null => {
|
|
48
|
+
if (!isHTMLElement(element)) return null;
|
|
49
|
+
const keyTimers = TimeCache.get(element);
|
|
50
|
+
|
|
51
|
+
if (key && keyTimers && isMap(keyTimers as KeyMap)) {
|
|
52
|
+
return (keyTimers as KeyMap).get(key) || /* istanbul ignore next */ null;
|
|
53
|
+
} else if (isNumber(keyTimers as number)) {
|
|
54
|
+
return keyTimers as number;
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Clears the element's timer.
|
|
61
|
+
*
|
|
62
|
+
* @param element target element
|
|
63
|
+
* @param key a unique key
|
|
64
|
+
*/
|
|
65
|
+
clear: (element: HTMLElement, key?: string): void => {
|
|
66
|
+
if (!isHTMLElement(element)) return;
|
|
67
|
+
|
|
68
|
+
const keyTimers = TimeCache.get(element);
|
|
69
|
+
|
|
70
|
+
if (key && key.length && isMap(keyTimers as KeyMap)) {
|
|
71
|
+
clearTimeout((keyTimers as KeyMap).get(key));
|
|
72
|
+
(keyTimers as KeyMap).delete(key);
|
|
73
|
+
/* istanbul ignore else */
|
|
74
|
+
if ((keyTimers as KeyMap).size === 0) {
|
|
75
|
+
TimeCache.delete(element);
|
|
76
|
+
}
|
|
77
|
+
} else {
|
|
78
|
+
clearTimeout(keyTimers as number);
|
|
79
|
+
TimeCache.delete(element);
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export default Timer;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shortcut for `HTMLElement.closest` method which also works
|
|
3
|
+
* with children of `ShadowRoot`. The order of the parameters
|
|
4
|
+
* is intentional since they're both required.
|
|
5
|
+
*
|
|
6
|
+
* @see https://stackoverflow.com/q/54520554/803358
|
|
7
|
+
*
|
|
8
|
+
* @param element Element to look into
|
|
9
|
+
* @param selector the selector name
|
|
10
|
+
* @return the query result
|
|
11
|
+
*/
|
|
12
|
+
const closest = (element: HTMLElement, selector: string): HTMLElement | null => {
|
|
13
|
+
return element
|
|
14
|
+
? element.closest(selector) ||
|
|
15
|
+
// break out of `ShadowRoot`
|
|
16
|
+
closest((element.getRootNode() as HTMLElement & { host: HTMLElement }).host, selector)
|
|
17
|
+
: null;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default closest;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import isCustomElement from '../is/isCustomElement';
|
|
2
2
|
import getElementsByTagName from './getElementsByTagName';
|
|
3
|
+
import type { CustomElement } from '../interface/customElement';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Returns an `Array` of `Node` elements that are registered as
|
|
6
7
|
* `CustomElement`.
|
|
8
|
+
*
|
|
7
9
|
* @see https://stackoverflow.com/questions/27334365/how-to-get-list-of-registered-custom-elements
|
|
8
10
|
*
|
|
9
|
-
* @param
|
|
10
|
-
* @returns
|
|
11
|
+
* @param parent parent to look into
|
|
12
|
+
* @returns the query result
|
|
11
13
|
*/
|
|
12
|
-
|
|
14
|
+
const getCustomElements = (parent?: ParentNode): CustomElement[] => {
|
|
13
15
|
const collection = getElementsByTagName('*', parent);
|
|
14
16
|
|
|
15
17
|
return [...collection].filter(isCustomElement);
|
|
16
|
-
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default getCustomElements;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import getDocument from '../get/getDocument';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Returns an `HTMLElement` that matches the id in the document.
|
|
5
|
+
* Within multiple <iframe> elements, a `parent` parameter
|
|
6
|
+
* would decisively locate the correct element.
|
|
7
|
+
*
|
|
8
|
+
* @param id the ID selector
|
|
9
|
+
* @param context an element in it's document or document
|
|
10
|
+
* @returns the requested element
|
|
11
|
+
*/
|
|
12
|
+
const getElementById = (id: string, context?: Node): HTMLElement | null => {
|
|
13
|
+
return getDocument(context).getElementById(id) || null;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default getElementById;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import getDocument from '../get/getDocument';
|
|
2
|
+
import isNode from '../is/isNode';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Shortcut for `HTMLElement.getElementsByClassName` method. Some `Node` elements
|
|
6
|
+
* like `ShadowRoot` do not support `getElementsByClassName`.
|
|
7
|
+
*
|
|
8
|
+
* @param selector the class name
|
|
9
|
+
* @param parent optional Element to look into
|
|
10
|
+
* @return the 'HTMLCollection'
|
|
11
|
+
*/
|
|
12
|
+
const getElementsByClassName = (
|
|
13
|
+
selector: string,
|
|
14
|
+
parent?: ParentNode,
|
|
15
|
+
): HTMLCollectionOf<HTMLElement> => {
|
|
16
|
+
const lookUp = parent && isNode(parent) ? parent : getDocument();
|
|
17
|
+
return (lookUp as HTMLElement | Document).getElementsByClassName(
|
|
18
|
+
selector,
|
|
19
|
+
) as HTMLCollectionOf<HTMLElement>;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default getElementsByClassName;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import getDocument from '../get/getDocument';
|
|
2
|
+
import isNode from '../is/isNode';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Shortcut for `HTMLElement.getElementsByTagName` method. Some `Node` elements
|
|
6
|
+
* like `ShadowRoot` do not support `getElementsByTagName`.
|
|
7
|
+
*
|
|
8
|
+
* @param selector the tag name
|
|
9
|
+
* @param parent optional Element to look into
|
|
10
|
+
* @return the 'HTMLCollection'
|
|
11
|
+
*/
|
|
12
|
+
const getElementsByTagName = (
|
|
13
|
+
selector: string,
|
|
14
|
+
parent?: ParentNode,
|
|
15
|
+
): HTMLCollectionOf<HTMLElement> => {
|
|
16
|
+
const lookUp = isNode(parent) ? parent : getDocument();
|
|
17
|
+
return (lookUp as Document).getElementsByTagName(selector) as HTMLCollectionOf<HTMLElement>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default getElementsByTagName;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if element matches a CSS selector.
|
|
3
|
+
*
|
|
4
|
+
* @param target the target element
|
|
5
|
+
* @param selector the selector to match
|
|
6
|
+
* @returns the query result
|
|
7
|
+
*/
|
|
8
|
+
const matches = (target: Element, selector: string): boolean => target.matches(selector);
|
|
9
|
+
|
|
10
|
+
export default matches;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import getDocument from '../get/getDocument';
|
|
2
|
+
import isNode from '../is/isNode';
|
|
3
|
+
import isHTMLElement from '../is/isHTMLElement';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Utility to check if target is typeof `HTMLElement`, `Element`, `Node`
|
|
7
|
+
* or find one that matches a selector.
|
|
8
|
+
*
|
|
9
|
+
* @param selector the input selector or target element
|
|
10
|
+
* @param parent optional node to look into
|
|
11
|
+
* @return the `HTMLElement` or `querySelector` result
|
|
12
|
+
*/
|
|
13
|
+
const querySelector = (selector: HTMLElement | string, parent?: ParentNode): HTMLElement | null => {
|
|
14
|
+
if (isHTMLElement(selector)) {
|
|
15
|
+
return selector;
|
|
16
|
+
}
|
|
17
|
+
const lookUp = isNode(parent) ? parent : getDocument();
|
|
18
|
+
|
|
19
|
+
return lookUp.querySelector(selector);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export default querySelector;
|
|
@@ -4,11 +4,13 @@ import isNode from '../is/isNode';
|
|
|
4
4
|
/**
|
|
5
5
|
* A shortcut for `(document|Element).querySelectorAll`.
|
|
6
6
|
*
|
|
7
|
-
* @param
|
|
8
|
-
* @param
|
|
9
|
-
* @return
|
|
7
|
+
* @param selector the input selector
|
|
8
|
+
* @param parent optional node to look into
|
|
9
|
+
* @return the query result
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
const querySelectorAll = (selector: string, parent?: ParentNode): NodeListOf<HTMLElement> => {
|
|
12
12
|
const lookUp = isNode(parent) ? parent : getDocument();
|
|
13
13
|
return lookUp.querySelectorAll(selector);
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export default querySelectorAll;
|