@koine/dom 2.0.0-beta.72 → 2.0.0-beta.74
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/$.d.ts +1 -0
- package/$.js +2 -0
- package/$all.d.ts +1 -0
- package/$all.js +2 -0
- package/$each.d.ts +1 -0
- package/$each.js +8 -0
- package/_listen-delegation.d.ts +1 -10
- package/_listen-delegation.js +45 -0
- package/addClass.d.ts +1 -0
- package/addClass.js +11 -0
- package/calculateFixedOffset.d.ts +1 -0
- package/calculateFixedOffset.js +9 -0
- package/createElement.d.ts +1 -0
- package/createElement.js +9 -0
- package/emitEvent.d.ts +1 -0
- package/emitEvent.js +9 -0
- package/escapeSelector.d.ts +1 -0
- package/escapeSelector.js +2 -0
- package/exists.d.ts +1 -0
- package/exists.js +2 -0
- package/forEach.d.ts +1 -0
- package/forEach.js +6 -0
- package/getDataAttr.d.ts +1 -0
- package/getDataAttr.js +2 -0
- package/getDocumentHeight.d.ts +1 -0
- package/getDocumentHeight.js +5 -0
- package/getHeight.d.ts +1 -0
- package/getHeight.js +2 -0
- package/getListeners.d.ts +1 -0
- package/getListeners.js +9 -0
- package/getOffset.d.ts +1 -0
- package/getOffset.js +11 -0
- package/getOffsetTop.d.ts +1 -0
- package/getOffsetTop.js +11 -0
- package/getOffsetTopSlim.d.ts +1 -0
- package/getOffsetTopSlim.js +2 -0
- package/getScrollbarWidth.d.ts +1 -0
- package/getScrollbarWidth.js +2 -0
- package/getStyleValue.d.ts +1 -0
- package/getStyleValue.js +2 -0
- package/getVisualBackgroundColor.d.ts +1 -0
- package/getVisualBackgroundColor.js +16 -0
- package/index.cjs.js +20 -20
- package/index.esm.js +20 -20
- package/index.js +45 -0
- package/injectCss.d.ts +1 -0
- package/injectCss.js +11 -0
- package/isHidden.d.ts +1 -0
- package/isHidden.js +2 -0
- package/isInViewport.d.ts +1 -0
- package/isInViewport.js +10 -0
- package/isNodeList.d.ts +1 -0
- package/isNodeList.js +9 -0
- package/isTotallyScrolled.d.ts +1 -0
- package/isTotallyScrolled.js +2 -0
- package/listen.d.ts +1 -0
- package/listen.js +18 -0
- package/listenLoaded.d.ts +1 -0
- package/listenLoaded.js +3 -0
- package/listenOnce.d.ts +1 -0
- package/listenOnce.js +9 -0
- package/listenResize.d.ts +1 -0
- package/listenResize.js +3 -0
- package/listenResizeDebounced.d.ts +1 -0
- package/listenResizeDebounced.js +4 -0
- package/listenResizeThrottled.d.ts +1 -0
- package/listenResizeThrottled.js +4 -0
- package/listenScroll.d.ts +1 -0
- package/listenScroll.js +6 -0
- package/listenScrollDebounced.d.ts +1 -0
- package/listenScrollDebounced.js +4 -0
- package/listenScrollThrottled.d.ts +1 -0
- package/listenScrollThrottled.js +4 -0
- package/off.d.ts +1 -0
- package/off.js +10 -0
- package/on.d.ts +1 -0
- package/on.js +15 -0
- package/onClickOutside.d.ts +1 -0
- package/onClickOutside.js +17 -0
- package/once.d.ts +1 -0
- package/once.js +10 -0
- package/package.json +2 -2
- package/removeClass.d.ts +1 -0
- package/removeClass.js +11 -0
- package/scrollTo.d.ts +1 -0
- package/scrollTo.js +30 -0
- package/setDataAttr.d.ts +1 -0
- package/setDataAttr.js +8 -0
- package/setVendorCSS.d.ts +1 -0
- package/setVendorCSS.js +9 -0
- package/siblings.d.ts +1 -0
- package/siblings.js +14 -0
- package/toArray.d.ts +1 -0
- package/toArray.js +2 -0
- package/types.js +1 -0
- package/unlisten.d.ts +1 -0
- package/unlisten.js +20 -0
package/$.d.ts
CHANGED
package/$.js
ADDED
package/$all.d.ts
CHANGED
package/$all.js
ADDED
package/$each.d.ts
CHANGED
package/$each.js
ADDED
package/_listen-delegation.d.ts
CHANGED
|
@@ -1,10 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export type EventCallback<TTarget extends AnyDOMEventTarget = AnyDOMEventTarget, TType extends AnyDOMEventType = AnyDOMEventType> = (event: AnyDOMEvent<TType>, desiredTarget: TTarget) => any;
|
|
3
|
-
export type ListenEvent = {
|
|
4
|
-
selector: string;
|
|
5
|
-
callback: EventCallback;
|
|
6
|
-
};
|
|
7
|
-
export declare let activeEvents: Partial<Record<AnyDOMEventType, ListenEvent[]>>;
|
|
8
|
-
export declare let getIndex: (arr: ListenEvent[], selector: string, callback: EventCallback) => number;
|
|
9
|
-
export declare let getRunTarget: (target: Element, selector: string | Window | Document | Element) => false | Window | Document | Element | null;
|
|
10
|
-
export declare let eventHandler: (event: Event) => void;
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { isString } from "@koine/utils";
|
|
2
|
+
import { escapeSelector } from "./escapeSelector";
|
|
3
|
+
export let activeEvents = {};
|
|
4
|
+
export let getIndex = (arr, selector, callback) => {
|
|
5
|
+
for (let i = 0; i < arr.length; i++) {
|
|
6
|
+
if (arr[i].selector === selector &&
|
|
7
|
+
arr[i].callback.toString() === callback.toString())
|
|
8
|
+
return i;
|
|
9
|
+
}
|
|
10
|
+
return -1;
|
|
11
|
+
};
|
|
12
|
+
export let getRunTarget = (target, selector) => {
|
|
13
|
+
if (["*", "window", window].includes(selector)) {
|
|
14
|
+
return window;
|
|
15
|
+
}
|
|
16
|
+
if ([
|
|
17
|
+
"document",
|
|
18
|
+
"document.documentElement",
|
|
19
|
+
document,
|
|
20
|
+
document.documentElement,
|
|
21
|
+
].includes(selector))
|
|
22
|
+
return document;
|
|
23
|
+
if (isString(selector)) {
|
|
24
|
+
return target.closest(escapeSelector(selector));
|
|
25
|
+
}
|
|
26
|
+
if (typeof selector !== "string" && selector.contains) {
|
|
27
|
+
if (selector === target) {
|
|
28
|
+
return target;
|
|
29
|
+
}
|
|
30
|
+
if (selector.contains(target)) {
|
|
31
|
+
return selector;
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
37
|
+
export let eventHandler = (event) => {
|
|
38
|
+
activeEvents[event.type]?.forEach(function (listener) {
|
|
39
|
+
const target = getRunTarget(event.target, listener.selector);
|
|
40
|
+
if (!target) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
listener.callback(event, target);
|
|
44
|
+
});
|
|
45
|
+
};
|
package/addClass.d.ts
CHANGED
package/addClass.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export let addClass = (el, className = "") => {
|
|
2
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
3
|
+
if (!el) {
|
|
4
|
+
console.warn("[@koine/dom:addClass] unexisting DOM element");
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
if (el)
|
|
9
|
+
el.classList.add(className);
|
|
10
|
+
};
|
|
11
|
+
export default addClass;
|
package/createElement.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { LiteralUnion } from "@koine/utils";
|
|
2
2
|
export declare let createElement: <TType extends LiteralUnion<keyof HTMLElementTagNameMap, string>, TElement extends HTMLElement = TType extends keyof HTMLElementTagNameMap ? HTMLElementTagNameMap[TType] : HTMLElement>(type: TType, className?: string) => TElement;
|
|
3
|
+
export default createElement;
|
package/createElement.js
ADDED
package/emitEvent.d.ts
CHANGED
package/emitEvent.js
ADDED
package/escapeSelector.d.ts
CHANGED
package/exists.d.ts
CHANGED
package/exists.js
ADDED
package/forEach.d.ts
CHANGED
package/forEach.js
ADDED
package/getDataAttr.d.ts
CHANGED
package/getDataAttr.js
ADDED
package/getDocumentHeight.d.ts
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export let getDocumentHeight = () => {
|
|
2
|
+
const { body, documentElement } = document;
|
|
3
|
+
return Math.max(body.scrollHeight, documentElement.scrollHeight, body.offsetHeight, documentElement.offsetHeight, body.clientHeight, documentElement.clientHeight);
|
|
4
|
+
};
|
|
5
|
+
export default getDocumentHeight;
|
package/getHeight.d.ts
CHANGED
package/getHeight.js
ADDED
package/getListeners.d.ts
CHANGED
package/getListeners.js
ADDED
package/getOffset.d.ts
CHANGED
package/getOffset.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export let getOffset = (elem) => {
|
|
2
|
+
let left = 0;
|
|
3
|
+
let top = 0;
|
|
4
|
+
while (elem && !isNaN(elem.offsetLeft) && !isNaN(elem.offsetTop)) {
|
|
5
|
+
left += elem.offsetLeft - elem.scrollLeft;
|
|
6
|
+
top += elem.offsetTop - elem.scrollTop;
|
|
7
|
+
elem = elem.offsetParent;
|
|
8
|
+
}
|
|
9
|
+
return { top, left };
|
|
10
|
+
};
|
|
11
|
+
export default getOffset;
|
package/getOffsetTop.d.ts
CHANGED
package/getOffsetTop.js
ADDED
package/getOffsetTopSlim.d.ts
CHANGED
package/getScrollbarWidth.d.ts
CHANGED
package/getStyleValue.d.ts
CHANGED
package/getStyleValue.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export let getVisualBackgroundColor = (elem) => {
|
|
2
|
+
if (!elem)
|
|
3
|
+
return "#fff";
|
|
4
|
+
const transparent = "rgba(0, 0, 0, 0)";
|
|
5
|
+
const transparentIE11 = "transparent";
|
|
6
|
+
const bg = window.getComputedStyle(elem).backgroundColor;
|
|
7
|
+
if (bg === transparent || bg === transparentIE11) {
|
|
8
|
+
const parent = elem.parentElement;
|
|
9
|
+
if (parent) {
|
|
10
|
+
return getVisualBackgroundColor(parent);
|
|
11
|
+
}
|
|
12
|
+
return "#fff";
|
|
13
|
+
}
|
|
14
|
+
return bg;
|
|
15
|
+
};
|
|
16
|
+
export default getVisualBackgroundColor;
|
package/index.cjs.js
CHANGED
|
@@ -4,11 +4,11 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var utils = require('@koine/utils');
|
|
6
6
|
|
|
7
|
-
let $=(e,r
|
|
7
|
+
let $=(e,t,r)=>(t||document).querySelector(r?e:e.replace(/:/g,"\\:"));
|
|
8
8
|
|
|
9
|
-
let $all=(e,l,
|
|
9
|
+
let $all=(e,l,t)=>(l||document).querySelectorAll(t?e:e.replace(/:/g,"\\:"));
|
|
10
10
|
|
|
11
|
-
let $each=(
|
|
11
|
+
let $each=(l,t,a,o)=>{let r=$all(l,a);for(let e=0;e<r.length;e++)t.call(o,r[e],e);};
|
|
12
12
|
|
|
13
13
|
let addClass=(e,s="")=>{if("development"===process.env.NODE_ENV&&!e){console.warn("[@koine/dom:addClass] unexisting DOM element");return}e&&e.classList.add(s);};
|
|
14
14
|
|
|
@@ -22,7 +22,7 @@ let escapeSelector=e=>e.replace(/:/g,"\\:");
|
|
|
22
22
|
|
|
23
23
|
let exists=e=>e&&e instanceof window.HTMLElement;
|
|
24
24
|
|
|
25
|
-
let forEach=(l,
|
|
25
|
+
let forEach=(e,l,t)=>{for(let o=0;o<e.length;o++)l.call(t,e[o],o);};
|
|
26
26
|
|
|
27
27
|
let getDataAttr=(t,e)=>t.getAttribute("data-"+e);
|
|
28
28
|
|
|
@@ -34,7 +34,7 @@ let activeEvents={};let getIndex=(e,t,n)=>{for(let r=0;r<e.length;r++)if(e[r].se
|
|
|
34
34
|
|
|
35
35
|
let getListeners=()=>{let t={};for(let r in activeEvents)t[r]=activeEvents[r];return t};
|
|
36
36
|
|
|
37
|
-
let getOffset=
|
|
37
|
+
let getOffset=e=>{let f=0,t=0;for(;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)f+=e.offsetLeft-e.scrollLeft,t+=e.offsetTop-e.scrollTop,e=e.offsetParent;return {top:t,left:f}};
|
|
38
38
|
|
|
39
39
|
let getOffsetTop=e=>{let t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return t>=0?t:0};
|
|
40
40
|
|
|
@@ -56,43 +56,43 @@ let isNodeList=t=>{let e=Object.prototype.toString.call(t);return "object"==type
|
|
|
56
56
|
|
|
57
57
|
let isTotallyScrolled=l=>!!l&&l.scrollHeight-l.scrollTop<=l.clientHeight;
|
|
58
58
|
|
|
59
|
-
let off=(e,n,
|
|
59
|
+
let off=(e,o,n,t=!1)=>{"development"!==process.env.NODE_ENV||e||console.warn("[@koine/dom:off] unexisting DOM element"),e&&e.removeEventListener(o,n,t);};
|
|
60
60
|
|
|
61
|
-
let on=(n,t,i
|
|
61
|
+
let on=(n,t,r,i=!1)=>("development"!==process.env.NODE_ENV||n||console.warn("[@koine/dom:on] unexisting DOM element"),n)?(n.addEventListener(t,r,i),()=>off(n,t,r)):utils.noop;
|
|
62
62
|
|
|
63
|
-
let listenLoaded=
|
|
63
|
+
let listenLoaded=o=>on(document,"DOMContentLoaded",o);
|
|
64
64
|
|
|
65
|
-
let listen=(
|
|
65
|
+
let listen=(i,l,r)=>{l&&r&&i.split(",").forEach(function(i){activeEvents[i=i.trim()]||(activeEvents[i]=[],on(window,i,eventHandler,!0)),activeEvents[i]?.push({selector:l,callback:r});});};
|
|
66
66
|
|
|
67
|
-
let unlisten=(
|
|
67
|
+
let unlisten=(r,n,o)=>{r.split(",").forEach(r=>{let f=activeEvents[r=r.trim()];if(!f)return;if(f.length<2||!n){delete activeEvents[r],off(window,r,eventHandler,!0);return}let p=getIndex(f,n,o);p<0||activeEvents[r].splice(p,1);});};
|
|
68
68
|
|
|
69
|
-
let listenOnce=(
|
|
69
|
+
let listenOnce=(i,o,l)=>listen(i,o,function e(r){let m=getRunTarget(r.target,o);l(r,m||window),unlisten(i,o,e);});
|
|
70
70
|
|
|
71
|
-
let listenResize=(i,
|
|
71
|
+
let listenResize=(i,t)=>on(t||window,"resize",i);
|
|
72
72
|
|
|
73
|
-
let listenResizeDebounced=(o
|
|
73
|
+
let listenResizeDebounced=(t,...o)=>listenResize(utils.debounce(...o),t);
|
|
74
74
|
|
|
75
75
|
let listenResizeThrottled=(i,...o)=>listenResize(utils.throttle(...o),i);
|
|
76
76
|
|
|
77
|
-
let listenScroll=(
|
|
77
|
+
let listenScroll=(o,e)=>on(e||window,"scroll",o,{capture:!0,passive:!0});
|
|
78
78
|
|
|
79
|
-
let listenScrollDebounced=(
|
|
79
|
+
let listenScrollDebounced=(o,...t)=>listenScroll(utils.debounce(...t),o);
|
|
80
80
|
|
|
81
|
-
let listenScrollThrottled=(
|
|
81
|
+
let listenScrollThrottled=(o,...r)=>listenScroll(utils.throttle(...r),o);
|
|
82
82
|
|
|
83
|
-
let once=(t,
|
|
83
|
+
let once=(r,t,f,m=!1)=>{let n=e=>{f(e),off(r,t,n);};return on(r,t,n,m)};
|
|
84
84
|
|
|
85
|
-
let onClickOutside=(c,
|
|
85
|
+
let onClickOutside=(e,c,i=!1)=>{let r=t=>{!e.contains(t.target)&&(c(t),i&&n());},n=()=>{off(document,"click",r);};return on(document,"click",r),n};
|
|
86
86
|
|
|
87
87
|
let removeClass=(e,s="")=>{("development"!==process.env.NODE_ENV||e)&&e&&e.classList.remove(s);};
|
|
88
88
|
|
|
89
|
-
let scrollTo=(
|
|
89
|
+
let scrollTo=(t,e,i,r)=>{let w=t.toFixed();if(e){let t=!1,r=function(){window.pageYOffset.toFixed()===w&&(off(window,"scroll",r),t=!0,e());};on(window,"scroll",r),r(),i&&setTimeout(()=>{t||(off(window,"scroll",r),e());},i);}window.scrollTo({top:t,behavior:r||"smooth"});};
|
|
90
90
|
|
|
91
91
|
let setDataAttr=(t,e,r)=>{if(null==r){t.removeAttribute("data-"+e);return}t.setAttribute("data-"+e,r.toString());};
|
|
92
92
|
|
|
93
93
|
let setVendorCSS=(e,t,s)=>{let l=t.charAt(0).toUpperCase()+t.slice(1);e.style["webkit"+l]=s,e.style["moz"+l]=s,e.style["ms"+l]=s,e.style["o"+l]=s,e.style[t]=s;};
|
|
94
94
|
|
|
95
|
-
let siblings=e=>{if(e&&e.parentNode){let
|
|
95
|
+
let siblings=e=>{if(e&&e.parentNode){let t=e.parentNode.firstChild,r=[];for(;t;t=t.nextSibling)1===t.nodeType&&t!==e&&r.push(t);return r}return []};
|
|
96
96
|
|
|
97
97
|
let toArray=r=>Array.prototype.slice.call(r);
|
|
98
98
|
|
package/index.esm.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { isString, noop, debounce, throttle } from '@koine/utils';
|
|
2
2
|
|
|
3
|
-
let $=(e,r
|
|
3
|
+
let $=(e,t,r)=>(t||document).querySelector(r?e:e.replace(/:/g,"\\:"));
|
|
4
4
|
|
|
5
|
-
let $all=(e,l,
|
|
5
|
+
let $all=(e,l,t)=>(l||document).querySelectorAll(t?e:e.replace(/:/g,"\\:"));
|
|
6
6
|
|
|
7
|
-
let $each=(
|
|
7
|
+
let $each=(l,t,a,o)=>{let r=$all(l,a);for(let e=0;e<r.length;e++)t.call(o,r[e],e);};
|
|
8
8
|
|
|
9
9
|
let addClass=(e,s="")=>{if("development"===process.env.NODE_ENV&&!e){console.warn("[@koine/dom:addClass] unexisting DOM element");return}e&&e.classList.add(s);};
|
|
10
10
|
|
|
@@ -18,7 +18,7 @@ let escapeSelector=e=>e.replace(/:/g,"\\:");
|
|
|
18
18
|
|
|
19
19
|
let exists=e=>e&&e instanceof window.HTMLElement;
|
|
20
20
|
|
|
21
|
-
let forEach=(l,
|
|
21
|
+
let forEach=(e,l,t)=>{for(let o=0;o<e.length;o++)l.call(t,e[o],o);};
|
|
22
22
|
|
|
23
23
|
let getDataAttr=(t,e)=>t.getAttribute("data-"+e);
|
|
24
24
|
|
|
@@ -30,7 +30,7 @@ let activeEvents={};let getIndex=(e,t,n)=>{for(let r=0;r<e.length;r++)if(e[r].se
|
|
|
30
30
|
|
|
31
31
|
let getListeners=()=>{let t={};for(let r in activeEvents)t[r]=activeEvents[r];return t};
|
|
32
32
|
|
|
33
|
-
let getOffset=
|
|
33
|
+
let getOffset=e=>{let f=0,t=0;for(;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)f+=e.offsetLeft-e.scrollLeft,t+=e.offsetTop-e.scrollTop,e=e.offsetParent;return {top:t,left:f}};
|
|
34
34
|
|
|
35
35
|
let getOffsetTop=e=>{let t=0;if(e.offsetParent)for(;e;)t+=e.offsetTop,e=e.offsetParent;return t>=0?t:0};
|
|
36
36
|
|
|
@@ -52,43 +52,43 @@ let isNodeList=t=>{let e=Object.prototype.toString.call(t);return "object"==type
|
|
|
52
52
|
|
|
53
53
|
let isTotallyScrolled=l=>!!l&&l.scrollHeight-l.scrollTop<=l.clientHeight;
|
|
54
54
|
|
|
55
|
-
let off=(e,n,
|
|
55
|
+
let off=(e,o,n,t=!1)=>{"development"!==process.env.NODE_ENV||e||console.warn("[@koine/dom:off] unexisting DOM element"),e&&e.removeEventListener(o,n,t);};
|
|
56
56
|
|
|
57
|
-
let on=(n,t,i
|
|
57
|
+
let on=(n,t,r,i=!1)=>("development"!==process.env.NODE_ENV||n||console.warn("[@koine/dom:on] unexisting DOM element"),n)?(n.addEventListener(t,r,i),()=>off(n,t,r)):noop;
|
|
58
58
|
|
|
59
|
-
let listenLoaded=
|
|
59
|
+
let listenLoaded=o=>on(document,"DOMContentLoaded",o);
|
|
60
60
|
|
|
61
|
-
let listen=(
|
|
61
|
+
let listen=(i,l,r)=>{l&&r&&i.split(",").forEach(function(i){activeEvents[i=i.trim()]||(activeEvents[i]=[],on(window,i,eventHandler,!0)),activeEvents[i]?.push({selector:l,callback:r});});};
|
|
62
62
|
|
|
63
|
-
let unlisten=(
|
|
63
|
+
let unlisten=(r,n,o)=>{r.split(",").forEach(r=>{let f=activeEvents[r=r.trim()];if(!f)return;if(f.length<2||!n){delete activeEvents[r],off(window,r,eventHandler,!0);return}let p=getIndex(f,n,o);p<0||activeEvents[r].splice(p,1);});};
|
|
64
64
|
|
|
65
|
-
let listenOnce=(
|
|
65
|
+
let listenOnce=(i,o,l)=>listen(i,o,function e(r){let m=getRunTarget(r.target,o);l(r,m||window),unlisten(i,o,e);});
|
|
66
66
|
|
|
67
|
-
let listenResize=(i,
|
|
67
|
+
let listenResize=(i,t)=>on(t||window,"resize",i);
|
|
68
68
|
|
|
69
|
-
let listenResizeDebounced=(o
|
|
69
|
+
let listenResizeDebounced=(t,...o)=>listenResize(debounce(...o),t);
|
|
70
70
|
|
|
71
71
|
let listenResizeThrottled=(i,...o)=>listenResize(throttle(...o),i);
|
|
72
72
|
|
|
73
|
-
let listenScroll=(
|
|
73
|
+
let listenScroll=(o,e)=>on(e||window,"scroll",o,{capture:!0,passive:!0});
|
|
74
74
|
|
|
75
|
-
let listenScrollDebounced=(
|
|
75
|
+
let listenScrollDebounced=(o,...t)=>listenScroll(debounce(...t),o);
|
|
76
76
|
|
|
77
|
-
let listenScrollThrottled=(
|
|
77
|
+
let listenScrollThrottled=(o,...r)=>listenScroll(throttle(...r),o);
|
|
78
78
|
|
|
79
|
-
let once=(t,
|
|
79
|
+
let once=(r,t,f,m=!1)=>{let n=e=>{f(e),off(r,t,n);};return on(r,t,n,m)};
|
|
80
80
|
|
|
81
|
-
let onClickOutside=(c,
|
|
81
|
+
let onClickOutside=(e,c,i=!1)=>{let r=t=>{!e.contains(t.target)&&(c(t),i&&n());},n=()=>{off(document,"click",r);};return on(document,"click",r),n};
|
|
82
82
|
|
|
83
83
|
let removeClass=(e,s="")=>{("development"!==process.env.NODE_ENV||e)&&e&&e.classList.remove(s);};
|
|
84
84
|
|
|
85
|
-
let scrollTo=(
|
|
85
|
+
let scrollTo=(t,e,i,r)=>{let w=t.toFixed();if(e){let t=!1,r=function(){window.pageYOffset.toFixed()===w&&(off(window,"scroll",r),t=!0,e());};on(window,"scroll",r),r(),i&&setTimeout(()=>{t||(off(window,"scroll",r),e());},i);}window.scrollTo({top:t,behavior:r||"smooth"});};
|
|
86
86
|
|
|
87
87
|
let setDataAttr=(t,e,r)=>{if(null==r){t.removeAttribute("data-"+e);return}t.setAttribute("data-"+e,r.toString());};
|
|
88
88
|
|
|
89
89
|
let setVendorCSS=(e,t,s)=>{let l=t.charAt(0).toUpperCase()+t.slice(1);e.style["webkit"+l]=s,e.style["moz"+l]=s,e.style["ms"+l]=s,e.style["o"+l]=s,e.style[t]=s;};
|
|
90
90
|
|
|
91
|
-
let siblings=e=>{if(e&&e.parentNode){let
|
|
91
|
+
let siblings=e=>{if(e&&e.parentNode){let t=e.parentNode.firstChild,r=[];for(;t;t=t.nextSibling)1===t.nodeType&&t!==e&&r.push(t);return r}return []};
|
|
92
92
|
|
|
93
93
|
let toArray=r=>Array.prototype.slice.call(r);
|
|
94
94
|
|
package/index.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export { $ } from "./$";
|
|
2
|
+
export { $all } from "./$all";
|
|
3
|
+
export { $each } from "./$each";
|
|
4
|
+
export { addClass } from "./addClass";
|
|
5
|
+
export { calculateFixedOffset } from "./calculateFixedOffset";
|
|
6
|
+
export { createElement } from "./createElement";
|
|
7
|
+
export { emitEvent } from "./emitEvent";
|
|
8
|
+
export { escapeSelector } from "./escapeSelector";
|
|
9
|
+
export { exists } from "./exists";
|
|
10
|
+
export { forEach } from "./forEach";
|
|
11
|
+
export { getDataAttr } from "./getDataAttr";
|
|
12
|
+
export { getDocumentHeight } from "./getDocumentHeight";
|
|
13
|
+
export { getHeight } from "./getHeight";
|
|
14
|
+
export { getListeners } from "./getListeners";
|
|
15
|
+
export { getOffset } from "./getOffset";
|
|
16
|
+
export { getOffsetTop } from "./getOffsetTop";
|
|
17
|
+
export { getOffsetTopSlim } from "./getOffsetTopSlim";
|
|
18
|
+
export { getScrollbarWidth } from "./getScrollbarWidth";
|
|
19
|
+
export { getStyleValue } from "./getStyleValue";
|
|
20
|
+
export { getVisualBackgroundColor } from "./getVisualBackgroundColor";
|
|
21
|
+
export { injectCss } from "./injectCss";
|
|
22
|
+
export { isHidden } from "./isHidden";
|
|
23
|
+
export { isInViewport } from "./isInViewport";
|
|
24
|
+
export { isNodeList } from "./isNodeList";
|
|
25
|
+
export { isTotallyScrolled } from "./isTotallyScrolled";
|
|
26
|
+
export { listenLoaded } from "./listenLoaded";
|
|
27
|
+
export { listenOnce } from "./listenOnce";
|
|
28
|
+
export { listenResize } from "./listenResize";
|
|
29
|
+
export { listenResizeDebounced } from "./listenResizeDebounced";
|
|
30
|
+
export { listenResizeThrottled } from "./listenResizeThrottled";
|
|
31
|
+
export { listenScroll } from "./listenScroll";
|
|
32
|
+
export { listenScrollDebounced } from "./listenScrollDebounced";
|
|
33
|
+
export { listenScrollThrottled } from "./listenScrollThrottled";
|
|
34
|
+
export { listen } from "./listen";
|
|
35
|
+
export { off } from "./off";
|
|
36
|
+
export { once } from "./once";
|
|
37
|
+
export { onClickOutside } from "./onClickOutside";
|
|
38
|
+
export { on } from "./on";
|
|
39
|
+
export { removeClass } from "./removeClass";
|
|
40
|
+
export { scrollTo } from "./scrollTo";
|
|
41
|
+
export { setDataAttr } from "./setDataAttr";
|
|
42
|
+
export { setVendorCSS } from "./setVendorCSS";
|
|
43
|
+
export { siblings } from "./siblings";
|
|
44
|
+
export { toArray } from "./toArray";
|
|
45
|
+
export { unlisten } from "./unlisten";
|
package/injectCss.d.ts
CHANGED
package/injectCss.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { $ } from "./$";
|
|
2
|
+
export let injectCss = (id, cssString = "", root = document) => {
|
|
3
|
+
let styleblock = $("#" + id);
|
|
4
|
+
if (!styleblock) {
|
|
5
|
+
styleblock = root.createElement("style");
|
|
6
|
+
styleblock.id = id;
|
|
7
|
+
root.body.appendChild(styleblock);
|
|
8
|
+
}
|
|
9
|
+
styleblock.innerHTML = cssString;
|
|
10
|
+
};
|
|
11
|
+
export default injectCss;
|
package/isHidden.d.ts
CHANGED
package/isHidden.js
ADDED
package/isInViewport.d.ts
CHANGED
package/isInViewport.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export let isInViewport = (elem) => {
|
|
2
|
+
const distance = elem.getBoundingClientRect();
|
|
3
|
+
return (distance.top >= 0 &&
|
|
4
|
+
distance.left >= 0 &&
|
|
5
|
+
distance.bottom <=
|
|
6
|
+
(window.innerHeight || document.documentElement.clientHeight) &&
|
|
7
|
+
distance.right <=
|
|
8
|
+
(window.innerWidth || document.documentElement.clientWidth));
|
|
9
|
+
};
|
|
10
|
+
export default isInViewport;
|
package/isNodeList.d.ts
CHANGED
package/isNodeList.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export let isNodeList = (nodes) => {
|
|
2
|
+
const stringRepr = Object.prototype.toString.call(nodes);
|
|
3
|
+
return (typeof nodes === "object" &&
|
|
4
|
+
/^\[object (HTMLCollection|NodeList|Object)\]$/.test(stringRepr) &&
|
|
5
|
+
typeof nodes.length === "number" &&
|
|
6
|
+
(nodes.length === 0 ||
|
|
7
|
+
(typeof nodes[0] === "object" && nodes[0].nodeType > 0)));
|
|
8
|
+
};
|
|
9
|
+
export default isNodeList;
|
package/isTotallyScrolled.d.ts
CHANGED
package/listen.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { type EventCallback } from "./_listen-delegation";
|
|
2
2
|
import type { AnyDOMEventTarget, AnyDOMEventType } from "./types";
|
|
3
3
|
export declare let listen: <TTypes extends AnyDOMEventType, TTarget extends AnyDOMEventTarget = AnyDOMEventTarget>(types: TTypes, selector: string, callback: EventCallback<TTarget, TTypes>) => void;
|
|
4
|
+
export default listen;
|
package/listen.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { activeEvents, eventHandler, } from "./_listen-delegation";
|
|
2
|
+
import { on } from "./on";
|
|
3
|
+
export let listen = (types, selector, callback) => {
|
|
4
|
+
if (!selector || !callback)
|
|
5
|
+
return;
|
|
6
|
+
types.split(",").forEach(function (type) {
|
|
7
|
+
type = type.trim();
|
|
8
|
+
if (!activeEvents[type]) {
|
|
9
|
+
activeEvents[type] = [];
|
|
10
|
+
on(window, type, eventHandler, true);
|
|
11
|
+
}
|
|
12
|
+
activeEvents[type]?.push({
|
|
13
|
+
selector: selector,
|
|
14
|
+
callback: callback,
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export default listen;
|
package/listenLoaded.d.ts
CHANGED
package/listenLoaded.js
ADDED
package/listenOnce.d.ts
CHANGED
package/listenOnce.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getRunTarget } from "./_listen-delegation";
|
|
2
|
+
import { listen } from "./listen";
|
|
3
|
+
import { unlisten } from "./unlisten";
|
|
4
|
+
export let listenOnce = (types, selector, callback) => listen(types, selector, function temp(event) {
|
|
5
|
+
const target = getRunTarget(event.target, selector);
|
|
6
|
+
callback(event, target || window);
|
|
7
|
+
unlisten(types, selector, temp);
|
|
8
|
+
});
|
|
9
|
+
export default listenOnce;
|
package/listenResize.d.ts
CHANGED
package/listenResize.js
ADDED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { listenResize } from "./listenResize";
|
|
2
2
|
export declare let listenResizeDebounced: (el?: Parameters<typeof listenResize>[1], fn: (...args: any[]) => any, wait?: number | undefined, immediate?: boolean | undefined) => () => void;
|
|
3
|
+
export default listenResizeDebounced;
|
package/listenScroll.d.ts
CHANGED
package/listenScroll.js
ADDED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { listenScroll } from "./listenScroll";
|
|
2
2
|
export declare let listenScrollDebounced: (el?: Parameters<typeof listenScroll>[1], fn: (...args: any[]) => any, wait?: number | undefined, immediate?: boolean | undefined) => () => void;
|
|
3
|
+
export default listenScrollDebounced;
|
package/off.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { AnyDOMEvent, AnyDOMEventTargetLoose, AnyDOMEventType } from "./types";
|
|
2
2
|
export declare let off: <TType extends AnyDOMEventType>(el: AnyDOMEventTargetLoose, type: TType, handler: (event: AnyDOMEvent<TType>) => void, options?: EventListenerOptions | boolean) => void;
|
|
3
|
+
export default off;
|
package/off.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export let off = (el, type, handler, options = false) => {
|
|
2
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
3
|
+
if (!el) {
|
|
4
|
+
console.warn("[@koine/dom:off] unexisting DOM element");
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
if (el)
|
|
8
|
+
el.removeEventListener(type, handler, options);
|
|
9
|
+
};
|
|
10
|
+
export default off;
|
package/on.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import type { AnyDOMEvent, AnyDOMEventTargetLoose, AnyDOMEventType } from "./types";
|
|
2
2
|
export declare let on: <TType extends AnyDOMEventType>(el: AnyDOMEventTargetLoose, type: TType, handler: (event: AnyDOMEvent<TType>) => void, options?: AddEventListenerOptions | boolean) => () => void;
|
|
3
|
+
export default on;
|
package/on.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { noop } from "@koine/utils";
|
|
2
|
+
import { off } from "./off";
|
|
3
|
+
export let on = (el, type, handler, options = false) => {
|
|
4
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
5
|
+
if (!el) {
|
|
6
|
+
console.warn("[@koine/dom:on] unexisting DOM element");
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
if (el) {
|
|
10
|
+
el.addEventListener(type, handler, options);
|
|
11
|
+
return () => off(el, type, handler);
|
|
12
|
+
}
|
|
13
|
+
return noop;
|
|
14
|
+
};
|
|
15
|
+
export default on;
|
package/onClickOutside.d.ts
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { off } from "./off";
|
|
2
|
+
import { on } from "./on";
|
|
3
|
+
export let onClickOutside = (element, callback, autoUnbind = false) => {
|
|
4
|
+
const bind = (event) => {
|
|
5
|
+
if (!element.contains(event.target)) {
|
|
6
|
+
callback(event);
|
|
7
|
+
if (autoUnbind)
|
|
8
|
+
unbind();
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
const unbind = () => {
|
|
12
|
+
off(document, "click", bind);
|
|
13
|
+
};
|
|
14
|
+
on(document, "click", bind);
|
|
15
|
+
return unbind;
|
|
16
|
+
};
|
|
17
|
+
export default onClickOutside;
|
package/once.d.ts
CHANGED
package/once.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { off } from "./off";
|
|
2
|
+
import { on } from "./on";
|
|
3
|
+
export let once = (el, type, handler, options = false) => {
|
|
4
|
+
const handlerWrapper = (event) => {
|
|
5
|
+
handler(event);
|
|
6
|
+
off(el, type, handlerWrapper);
|
|
7
|
+
};
|
|
8
|
+
return on(el, type, handlerWrapper, options);
|
|
9
|
+
};
|
|
10
|
+
export default once;
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@koine/dom",
|
|
3
3
|
"sideEffects": false,
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@koine/utils": "2.0.0-beta.
|
|
5
|
+
"@koine/utils": "2.0.0-beta.74"
|
|
6
6
|
},
|
|
7
7
|
"exports": {
|
|
8
8
|
"./package.json": "./package.json",
|
|
@@ -14,5 +14,5 @@
|
|
|
14
14
|
},
|
|
15
15
|
"module": "./index.esm.js",
|
|
16
16
|
"main": "./index.cjs.js",
|
|
17
|
-
"version": "2.0.0-beta.
|
|
17
|
+
"version": "2.0.0-beta.74"
|
|
18
18
|
}
|
package/removeClass.d.ts
CHANGED
package/removeClass.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export let removeClass = (el, className = "") => {
|
|
2
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
3
|
+
if (!el) {
|
|
4
|
+
("[@koine/dom:removeClass] unexisting DOM element");
|
|
5
|
+
return;
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
if (el)
|
|
9
|
+
el.classList.remove(className);
|
|
10
|
+
};
|
|
11
|
+
export default removeClass;
|
package/scrollTo.d.ts
CHANGED
package/scrollTo.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { off } from "./off";
|
|
2
|
+
import { on } from "./on";
|
|
3
|
+
export let scrollTo = (destination, callback, fallbackTimeout, behavior) => {
|
|
4
|
+
const fixedDestination = destination.toFixed();
|
|
5
|
+
if (callback) {
|
|
6
|
+
let callbackFired = false;
|
|
7
|
+
const onScroll = function () {
|
|
8
|
+
if (window.pageYOffset.toFixed() === fixedDestination) {
|
|
9
|
+
off(window, "scroll", onScroll);
|
|
10
|
+
callbackFired = true;
|
|
11
|
+
callback();
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
on(window, "scroll", onScroll);
|
|
15
|
+
onScroll();
|
|
16
|
+
if (fallbackTimeout) {
|
|
17
|
+
setTimeout(() => {
|
|
18
|
+
if (!callbackFired) {
|
|
19
|
+
off(window, "scroll", onScroll);
|
|
20
|
+
callback();
|
|
21
|
+
}
|
|
22
|
+
}, fallbackTimeout);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
window.scrollTo({
|
|
26
|
+
top: destination,
|
|
27
|
+
behavior: behavior || "smooth",
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
export default scrollTo;
|
package/setDataAttr.d.ts
CHANGED
package/setDataAttr.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export let setDataAttr = (element, attribute, value) => {
|
|
2
|
+
if (value === null || typeof value === "undefined") {
|
|
3
|
+
element.removeAttribute("data-" + attribute);
|
|
4
|
+
return;
|
|
5
|
+
}
|
|
6
|
+
element.setAttribute("data-" + attribute, value.toString());
|
|
7
|
+
};
|
|
8
|
+
export default setDataAttr;
|
package/setVendorCSS.d.ts
CHANGED
package/setVendorCSS.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export let setVendorCSS = (element, prop, value) => {
|
|
2
|
+
const propUpper = prop.charAt(0).toUpperCase() + prop.slice(1);
|
|
3
|
+
element.style["webkit" + propUpper] = value;
|
|
4
|
+
element.style["moz" + propUpper] = value;
|
|
5
|
+
element.style["ms" + propUpper] = value;
|
|
6
|
+
element.style["o" + propUpper] = value;
|
|
7
|
+
element.style[prop] = value;
|
|
8
|
+
};
|
|
9
|
+
export default setVendorCSS;
|
package/siblings.d.ts
CHANGED
package/siblings.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export let siblings = (node) => {
|
|
2
|
+
if (node && node.parentNode) {
|
|
3
|
+
let n = node.parentNode.firstChild;
|
|
4
|
+
const matched = [];
|
|
5
|
+
for (; n; n = n.nextSibling) {
|
|
6
|
+
if (n.nodeType === 1 && n !== node) {
|
|
7
|
+
matched.push(n);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
return matched;
|
|
11
|
+
}
|
|
12
|
+
return [];
|
|
13
|
+
};
|
|
14
|
+
export default siblings;
|
package/toArray.d.ts
CHANGED
package/toArray.js
ADDED
package/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/unlisten.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import { type EventCallback } from "./_listen-delegation";
|
|
2
2
|
import type { AnyDOMEventTarget, AnyDOMEventType } from "./types";
|
|
3
3
|
export declare let unlisten: <TTypes extends AnyDOMEventType, TTarget extends AnyDOMEventTarget = AnyDOMEventTarget>(types: TTypes, selector: string, callback: EventCallback<TTarget, TTypes>) => void;
|
|
4
|
+
export default unlisten;
|
package/unlisten.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { activeEvents, eventHandler, getIndex, } from "./_listen-delegation";
|
|
2
|
+
import { off } from "./off";
|
|
3
|
+
export let unlisten = (types, selector, callback) => {
|
|
4
|
+
types.split(",").forEach((type) => {
|
|
5
|
+
type = type.trim();
|
|
6
|
+
const events = activeEvents[type];
|
|
7
|
+
if (!events)
|
|
8
|
+
return;
|
|
9
|
+
if (events.length < 2 || !selector) {
|
|
10
|
+
delete activeEvents[type];
|
|
11
|
+
off(window, type, eventHandler, true);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const index = getIndex(events, selector, callback);
|
|
15
|
+
if (index < 0)
|
|
16
|
+
return;
|
|
17
|
+
activeEvents[type].splice(index, 1);
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
export default unlisten;
|