tool-shack 0.0.1
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/.editorconfig +16 -0
- package/README.md +1 -0
- package/dist/dom/addAsyncEventListener.d.ts +1 -0
- package/dist/dom/addAsyncEventListener.js +18 -0
- package/dist/dom/addAsyncEventListener.js.map +1 -0
- package/dist/dom/addEventListener.d.ts +1 -0
- package/dist/dom/addEventListener.js +12 -0
- package/dist/dom/addEventListener.js.map +1 -0
- package/dist/dom/createElement.d.ts +2 -0
- package/dist/dom/createElement.js +21 -0
- package/dist/dom/createElement.js.map +1 -0
- package/dist/dom/index.d.ts +3 -0
- package/dist/dom/index.js +4 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/dom/interfaces/createElement.d.ts +4 -0
- package/dist/dom/interfaces/createElement.js +2 -0
- package/dist/dom/interfaces/createElement.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/schedule/index.d.ts +1 -0
- package/dist/schedule/index.js +2 -0
- package/dist/schedule/index.js.map +1 -0
- package/dist/schedule/runAsync.d.ts +1 -0
- package/dist/schedule/runAsync.js +14 -0
- package/dist/schedule/runAsync.js.map +1 -0
- package/package.json +22 -0
- package/src/dom/addAsyncEventListener.ts +24 -0
- package/src/dom/addEventListener.ts +20 -0
- package/src/dom/createElement.ts +25 -0
- package/src/dom/index.ts +3 -0
- package/src/dom/interfaces/createElement.ts +4 -0
- package/src/index.ts +2 -0
- package/src/schedule/index.ts +1 -0
- package/src/schedule/runAsync.ts +17 -0
- package/tsconfig.json +24 -0
package/.editorconfig
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Editor configuration, see https://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
charset = utf-8
|
|
6
|
+
indent_style = space
|
|
7
|
+
indent_size = 2
|
|
8
|
+
insert_final_newline = true
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
|
|
11
|
+
[*.ts]
|
|
12
|
+
quote_type = single
|
|
13
|
+
|
|
14
|
+
[*.md]
|
|
15
|
+
max_line_length = off
|
|
16
|
+
trim_trailing_whitespace = false
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# tool-shack
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const addAsyncEventListener: (elementSelector: string, listeners: Record<string, EventListener | EventListener[]>, acceptBubbling?: boolean) => void;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const addAsyncEventListener = (elementSelector, listeners, acceptBubbling = true) => {
|
|
2
|
+
for (let eventName in listeners) {
|
|
3
|
+
const functionList = (listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]);
|
|
4
|
+
functionList.forEach((fn) => document.addEventListener(eventName, (event) => {
|
|
5
|
+
const target = event.target;
|
|
6
|
+
if (!target) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (!acceptBubbling && target.matches(elementSelector)) {
|
|
10
|
+
fn.call(this, event);
|
|
11
|
+
}
|
|
12
|
+
else if (acceptBubbling && target.closest(elementSelector)) {
|
|
13
|
+
fn.call(this, event);
|
|
14
|
+
}
|
|
15
|
+
}));
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=addAsyncEventListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addAsyncEventListener.js","sourceRoot":"","sources":["../../src/dom/addAsyncEventListener.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,eAAuB,EACvB,SAA0D,EAC1D,cAAc,GAAG,IAAI,EACf,EAAE;IACR,KAAK,IAAI,SAAS,IAAI,SAAS,EAAE;QAC/B,MAAM,YAAY,GAAG,CACnB,SAAS,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CACnE,CAAC;QAErB,YAAY,CAAC,OAAO,CAAC,CAAC,EAAiB,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;YAChG,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO;aACR;YAED,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBACtD,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtB;iBAAM,IAAI,cAAc,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBAC5D,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;aACtB;QACH,CAAC,CAAC,CAAC,CAAC;KACL;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const addEventListener: (element: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | HTMLCollectionOf<HTMLElement>, listeners: Record<string, EventListenerOrEventListenerObject | EventListenerOrEventListenerObject[]>) => void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const addEventListener = (element, listeners) => {
|
|
2
|
+
const elementList = (element instanceof Array || element instanceof HTMLCollection || element instanceof NodeList ?
|
|
3
|
+
Array.from(element) :
|
|
4
|
+
[element]);
|
|
5
|
+
elementList.forEach((element) => {
|
|
6
|
+
for (let eventName in listeners) {
|
|
7
|
+
const functionList = (listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]);
|
|
8
|
+
functionList.forEach((fn) => element.addEventListener(eventName, fn));
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=addEventListener.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addEventListener.js","sourceRoot":"","sources":["../../src/dom/addEventListener.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAA8F,EAC9F,SAAoG,EAC9F,EAAE;IACR,MAAM,WAAW,GAAG,CAClB,OAAO,YAAY,KAAK,IAAI,OAAO,YAAY,cAAc,IAAI,OAAO,YAAY,QAAQ,CAAC,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACrB,CAAC,OAAO,CAAC,CACO,CAAC;IAErB,WAAW,CAAC,OAAO,CAAC,CAAC,OAAoB,EAAE,EAAE;QAC3C,KAAK,IAAI,SAAS,IAAI,SAAS,EAAE;YAC/B,MAAM,YAAY,GAAG,CACnB,SAAS,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAC9C,CAAC;YAE1C,YAAY,CAAC,OAAO,CAAC,CAAC,EAAsC,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3G;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const createElement = (tagName, props) => {
|
|
2
|
+
const element = document.createElement(tagName);
|
|
3
|
+
if (props) {
|
|
4
|
+
for (let key in props) {
|
|
5
|
+
if (key === 'children') {
|
|
6
|
+
props.children.forEach((child) => element.appendChild(child));
|
|
7
|
+
}
|
|
8
|
+
else if (key === 'listeners') {
|
|
9
|
+
for (let eventName in props.listeners) {
|
|
10
|
+
const functionList = (props.listeners[eventName] instanceof Array ? props.listeners[eventName] : [props.listeners[eventName]]);
|
|
11
|
+
functionList.forEach((fn) => element.addEventListener(eventName, fn));
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
element[key] = props[key];
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return element;
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=createElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createElement.js","sourceRoot":"","sources":["../../src/dom/createElement.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAmB,OAAe,EAAE,KAA2C,EAAK,EAAE;IACjH,MAAM,OAAO,GAAgB,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAE7D,IAAI,KAAK,EAAE;QACT,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE;YACrB,IAAI,GAAG,KAAG,UAAU,EAAE;gBACpB,KAAK,CAAC,QAAS,CAAC,OAAO,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7E;iBAAM,IAAI,GAAG,KAAG,WAAW,EAAE;gBAC5B,KAAK,IAAI,SAAS,IAAI,KAAK,CAAC,SAAU,EAAE;oBACtC,MAAM,YAAY,GAAG,CACnB,KAAK,CAAC,SAAU,CAAC,SAAS,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,SAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAU,CAAC,SAAS,CAAC,CAAC,CACnE,CAAC;oBAE1C,YAAY,CAAC,OAAO,CAAC,CAAC,EAAsC,EAAE,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC3G;aACF;iBAAM;gBACJ,OAAe,CAAC,GAAG,CAAC,GAAI,KAAa,CAAC,GAAG,CAAC,CAAC;aAC7C;SACF;KACF;IAED,OAAO,OAAuB,CAAC;AACjC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dom/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createElement.js","sourceRoot":"","sources":["../../../src/dom/interfaces/createElement.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './runAsync';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schedule/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const runAsync: <T>(fn: () => any) => Promise<T>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const runAsync = (fn) => {
|
|
2
|
+
const worker = new Worker(URL.createObjectURL(new Blob([`postMessage((${fn})());`])));
|
|
3
|
+
return new Promise((res, rej) => {
|
|
4
|
+
worker.onmessage = ({ data }) => {
|
|
5
|
+
res(data);
|
|
6
|
+
worker.terminate();
|
|
7
|
+
};
|
|
8
|
+
worker.onerror = err => {
|
|
9
|
+
rej(err);
|
|
10
|
+
worker.terminate();
|
|
11
|
+
};
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=runAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runAsync.js","sourceRoot":"","sources":["../../src/schedule/runAsync.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAK,EAAa,EAAc,EAAE;IACxD,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,CAC3D,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC9B,MAAM,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAC9B,GAAG,CAAC,IAAI,CAAC,CAAC;YACV,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC;QAEF,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,EAAE;YACrB,GAAG,CAAC,GAAG,CAAC,CAAC;YACT,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tool-shack",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Collection of usefull functions to ease work",
|
|
5
|
+
"main": "src",
|
|
6
|
+
"author": "David Myška",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"bugs": {
|
|
9
|
+
"url": "https://www.davidmyska.com/tool-shack/issues"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://www.davidmyska.com/tool-shack#readme",
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "git+https://www.davidmyska.com/tool-shack.git"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p ."
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"typescript": "^4.5.2"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const addAsyncEventListener = (
|
|
2
|
+
elementSelector: string,
|
|
3
|
+
listeners: Record<string, EventListener | EventListener[]>,
|
|
4
|
+
acceptBubbling = true
|
|
5
|
+
): void => {
|
|
6
|
+
for (let eventName in listeners) {
|
|
7
|
+
const functionList = (
|
|
8
|
+
listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]
|
|
9
|
+
) as EventListener[];
|
|
10
|
+
|
|
11
|
+
functionList.forEach((fn: EventListener) => document.addEventListener(eventName, (event: Event) => {
|
|
12
|
+
const target = event.target as HTMLElement;
|
|
13
|
+
if (!target) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (!acceptBubbling && target.matches(elementSelector)) {
|
|
18
|
+
fn.call(this, event);
|
|
19
|
+
} else if (acceptBubbling && target.closest(elementSelector)) {
|
|
20
|
+
fn.call(this, event);
|
|
21
|
+
}
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export const addEventListener = (
|
|
2
|
+
element: HTMLElement | HTMLElement[] | NodeListOf<HTMLElement> | HTMLCollectionOf<HTMLElement>,
|
|
3
|
+
listeners: Record<string, EventListenerOrEventListenerObject | EventListenerOrEventListenerObject[]>
|
|
4
|
+
): void => {
|
|
5
|
+
const elementList = (
|
|
6
|
+
element instanceof Array || element instanceof HTMLCollection || element instanceof NodeList ?
|
|
7
|
+
Array.from(element) :
|
|
8
|
+
[element]
|
|
9
|
+
) as HTMLElement[];
|
|
10
|
+
|
|
11
|
+
elementList.forEach((element: HTMLElement) => {
|
|
12
|
+
for (let eventName in listeners) {
|
|
13
|
+
const functionList = (
|
|
14
|
+
listeners[eventName] instanceof Array ? listeners[eventName] : [listeners[eventName]]
|
|
15
|
+
) as EventListenerOrEventListenerObject[];
|
|
16
|
+
|
|
17
|
+
functionList.forEach((fn: EventListenerOrEventListenerObject) => element.addEventListener(eventName, fn));
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { IExtendingElementProps } from './interfaces/createElement';
|
|
2
|
+
|
|
3
|
+
export const createElement = <T = HTMLElement> (tagName: string, props?: Partial<T> & IExtendingElementProps): T => {
|
|
4
|
+
const element: HTMLElement = document.createElement(tagName);
|
|
5
|
+
|
|
6
|
+
if (props) {
|
|
7
|
+
for (let key in props) {
|
|
8
|
+
if (key==='children') {
|
|
9
|
+
props.children!.forEach((child: HTMLElement) => element.appendChild(child));
|
|
10
|
+
} else if (key==='listeners') {
|
|
11
|
+
for (let eventName in props.listeners!) {
|
|
12
|
+
const functionList = (
|
|
13
|
+
props.listeners![eventName] instanceof Array ? props.listeners![eventName] : [props.listeners![eventName]]
|
|
14
|
+
) as EventListenerOrEventListenerObject[];
|
|
15
|
+
|
|
16
|
+
functionList.forEach((fn: EventListenerOrEventListenerObject) => element.addEventListener(eventName, fn));
|
|
17
|
+
}
|
|
18
|
+
} else {
|
|
19
|
+
(element as any)[key] = (props as any)[key];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return element as unknown as T;
|
|
25
|
+
};
|
package/src/dom/index.ts
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './runAsync';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export const runAsync = <T> (fn: () => any): Promise<T> => {
|
|
2
|
+
const worker = new Worker(
|
|
3
|
+
URL.createObjectURL(new Blob([`postMessage((${fn})());`])),
|
|
4
|
+
);
|
|
5
|
+
|
|
6
|
+
return new Promise((res, rej) => {
|
|
7
|
+
worker.onmessage = ({ data }) => {
|
|
8
|
+
res(data);
|
|
9
|
+
worker.terminate();
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
worker.onerror = err => {
|
|
13
|
+
rej(err);
|
|
14
|
+
worker.terminate();
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
};
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES6",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"strict": true,
|
|
7
|
+
"noImplicitThis": true,
|
|
8
|
+
"alwaysStrict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"preserveConstEnums": true,
|
|
11
|
+
"sourceMap": true,
|
|
12
|
+
"importHelpers": true,
|
|
13
|
+
"baseUrl": ".",
|
|
14
|
+
"declaration": true,
|
|
15
|
+
"outDir": "./dist",
|
|
16
|
+
"lib": [
|
|
17
|
+
"dom",
|
|
18
|
+
"es2018"
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
"include": [
|
|
22
|
+
"src/**/*.ts"
|
|
23
|
+
]
|
|
24
|
+
}
|