@x-oasis/bind-events 0.1.34
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/README.md +19 -0
- package/dist/bind-events.cjs.development.js +64 -0
- package/dist/bind-events.cjs.development.js.map +1 -0
- package/dist/bind-events.cjs.production.min.js +2 -0
- package/dist/bind-events.cjs.production.min.js.map +1 -0
- package/dist/bind-events.esm.js +60 -0
- package/dist/bind-events.esm.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +8 -0
- package/package.json +24 -0
- package/src/index.ts +91 -0
package/README.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# @x-oasis/bind-events
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
$ npm i @x-oasis/bind-events
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## How to use
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import bindEvents from '@x-oasis/bind-events'
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## How to run test
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
$ pnpm test
|
|
19
|
+
```
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
function _extends() {
|
|
6
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
7
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
8
|
+
var source = arguments[i];
|
|
9
|
+
for (var key in source) {
|
|
10
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
11
|
+
target[key] = source[key];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return target;
|
|
16
|
+
};
|
|
17
|
+
return _extends.apply(this, arguments);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function getOptions(shared, fromBinding) {
|
|
21
|
+
return _extends({}, shared, fromBinding);
|
|
22
|
+
}
|
|
23
|
+
function bindEvents(el, bindings, sharedOptions) {
|
|
24
|
+
var empty = [];
|
|
25
|
+
var nextBindings = empty.concat(bindings);
|
|
26
|
+
var unBindings = nextBindings.map(function (binding) {
|
|
27
|
+
var options = getOptions(sharedOptions, binding.options);
|
|
28
|
+
el.addEventListener(binding.eventName, binding.fn, options);
|
|
29
|
+
return function unbind() {
|
|
30
|
+
el.removeEventListener(binding.eventName, binding.fn, options);
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
return function unbindAll() {
|
|
34
|
+
unBindings.forEach(function (unbind) {
|
|
35
|
+
return unbind();
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function bindEventsOnce(el, bindings, sharedOptions) {
|
|
40
|
+
var empty = [];
|
|
41
|
+
var nextBindings = empty.concat(bindings);
|
|
42
|
+
var unBindings = nextBindings.map(function (binding) {
|
|
43
|
+
var options = getOptions(sharedOptions, binding.options);
|
|
44
|
+
var unbind = function unbind() {};
|
|
45
|
+
var wrappedFn = function wrappedFn(e) {
|
|
46
|
+
binding.fn.call(null, e);
|
|
47
|
+
unbind();
|
|
48
|
+
};
|
|
49
|
+
el.addEventListener(binding.eventName, wrappedFn, options);
|
|
50
|
+
unbind = function unbind() {
|
|
51
|
+
return el.removeEventListener(binding.eventName, wrappedFn, options);
|
|
52
|
+
};
|
|
53
|
+
return unbind;
|
|
54
|
+
});
|
|
55
|
+
return function unbindAll() {
|
|
56
|
+
unBindings.forEach(function (unbind) {
|
|
57
|
+
return unbind();
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
exports.bindEventsOnce = bindEventsOnce;
|
|
63
|
+
exports.default = bindEvents;
|
|
64
|
+
//# sourceMappingURL=bind-events.cjs.development.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind-events.cjs.development.js","sources":["../src/index.ts"],"sourcesContent":["// addEventListener<K extends keyof WindowEventMap>\n// (type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n\n// export interface Binding <K extends keyof WindowEventMap>{\n// eventName: K;\n// fn: (this: Window, ev: WindowEventMap[K]) => any;\n// options?: boolean | AddEventListenerOptions\n// }\nexport interface Binding {\n eventName: string;\n fn: (e: MouseEvent) => any;\n options?: AddEventListenerOptions;\n}\n\n// https://github.com/atlassian/react-beautiful-dnd/blob/master/src/view/event-bindings/bind-events.js\n\nfunction getOptions(\n shared?: AddEventListenerOptions,\n fromBinding?: AddEventListenerOptions\n) {\n return {\n ...shared,\n ...fromBinding,\n };\n}\n\nexport default function bindEvents(\n el: HTMLElement | Window | Document,\n bindings: Binding[] | Binding,\n sharedOptions?: AddEventListenerOptions\n) {\n const empty = [] as Binding[];\n const nextBindings = empty.concat(bindings);\n const unBindings = nextBindings.map((binding) => {\n const options = getOptions(sharedOptions, binding.options);\n // ts-hint: https://github.com/microsoft/TypeScript/issues/28357#issuecomment-436484705\n el.addEventListener(\n binding.eventName,\n binding.fn as EventListener,\n options\n );\n\n return function unbind() {\n el.removeEventListener(\n binding.eventName,\n binding.fn as EventListener,\n options\n );\n };\n });\n\n // Return a function to unbind events\n return function unbindAll() {\n unBindings.forEach((unbind) => unbind());\n };\n}\n\n// once event triggered. it will be teardown first...\nexport function bindEventsOnce(\n el: HTMLElement,\n bindings: Binding[] | Binding,\n sharedOptions?: AddEventListenerOptions\n) {\n const empty = [] as Binding[];\n const nextBindings = empty.concat(bindings);\n const unBindings = nextBindings.map((binding) => {\n const options = getOptions(sharedOptions, binding.options);\n let unbind = () => {};\n\n const wrappedFn = (e: MouseEvent) => {\n binding.fn.call(null, e);\n unbind();\n };\n\n el.addEventListener(binding.eventName, wrappedFn as EventListener, options);\n\n unbind = () =>\n el.removeEventListener(\n binding.eventName,\n wrappedFn as EventListener,\n options\n );\n\n return unbind;\n });\n\n // Return a function to unbind events\n return function unbindAll() {\n unBindings.forEach((unbind) => unbind());\n };\n}\n"],"names":["getOptions","shared","fromBinding","_extends","bindEvents","el","bindings","sharedOptions","empty","nextBindings","concat","unBindings","map","binding","options","addEventListener","eventName","fn","unbind","removeEventListener","unbindAll","forEach","bindEventsOnce","wrappedFn","e","call"],"mappings":";;;;;;;;;;;;;;;;;;;AAgBA,SAASA,UAAUA,CACjBC,MAAgC,EAChCC,WAAqC;EAErC,OAAAC,QAAA,KACKF,MAAM,EACNC,WAAW;AAElB;SAEwBE,UAAUA,CAChCC,EAAmC,EACnCC,QAA6B,EAC7BC,aAAuC;EAEvC,IAAMC,KAAK,GAAG,EAAe;EAC7B,IAAMC,YAAY,GAAGD,KAAK,CAACE,MAAM,CAACJ,QAAQ,CAAC;EAC3C,IAAMK,UAAU,GAAGF,YAAY,CAACG,GAAG,CAAC,UAACC,OAAO;IAC1C,IAAMC,OAAO,GAAGd,UAAU,CAACO,aAAa,EAAEM,OAAO,CAACC,OAAO,CAAC;IAE1DT,EAAE,CAACU,gBAAgB,CACjBF,OAAO,CAACG,SAAS,EACjBH,OAAO,CAACI,EAAmB,EAC3BH,OAAO,CACR;IAED,OAAO,SAASI,MAAMA;MACpBb,EAAE,CAACc,mBAAmB,CACpBN,OAAO,CAACG,SAAS,EACjBH,OAAO,CAACI,EAAmB,EAC3BH,OAAO,CACR;KACF;GACF,CAAC;EAGF,OAAO,SAASM,SAASA;IACvBT,UAAU,CAACU,OAAO,CAAC,UAACH,MAAM;MAAA,OAAKA,MAAM,EAAE;MAAC;GACzC;AACH;SAGgBI,cAAcA,CAC5BjB,EAAe,EACfC,QAA6B,EAC7BC,aAAuC;EAEvC,IAAMC,KAAK,GAAG,EAAe;EAC7B,IAAMC,YAAY,GAAGD,KAAK,CAACE,MAAM,CAACJ,QAAQ,CAAC;EAC3C,IAAMK,UAAU,GAAGF,YAAY,CAACG,GAAG,CAAC,UAACC,OAAO;IAC1C,IAAMC,OAAO,GAAGd,UAAU,CAACO,aAAa,EAAEM,OAAO,CAACC,OAAO,CAAC;IAC1D,IAAII,MAAM,GAAG,SAAAA,WAAQ;IAErB,IAAMK,SAAS,GAAG,SAAZA,SAASA,CAAIC,CAAa;MAC9BX,OAAO,CAACI,EAAE,CAACQ,IAAI,CAAC,IAAI,EAAED,CAAC,CAAC;MACxBN,MAAM,EAAE;KACT;IAEDb,EAAE,CAACU,gBAAgB,CAACF,OAAO,CAACG,SAAS,EAAEO,SAA0B,EAAET,OAAO,CAAC;IAE3EI,MAAM,GAAG,SAAAA;MAAA,OACPb,EAAE,CAACc,mBAAmB,CACpBN,OAAO,CAACG,SAAS,EACjBO,SAA0B,EAC1BT,OAAO,CACR;;IAEH,OAAOI,MAAM;GACd,CAAC;EAGF,OAAO,SAASE,SAASA;IACvBT,UAAU,CAACU,OAAO,CAAC,UAACH,MAAM;MAAA,OAAKA,MAAM,EAAE;MAAC;GACzC;AACH;;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";function n(){return(n=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n[r]=t[r])}return n}).apply(this,arguments)}function e(e,t){return n({},e,t)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.bindEventsOnce=function(n,t,r){var o=[].concat(t).map((function(t){var o=e(r,t.options),u=function(){},c=function(n){t.fn.call(null,n),u()};return n.addEventListener(t.eventName,c,o),u=function(){return n.removeEventListener(t.eventName,c,o)}}));return function(){o.forEach((function(n){return n()}))}},exports.default=function(n,t,r){var o=[].concat(t).map((function(t){var o=e(r,t.options);return n.addEventListener(t.eventName,t.fn,o),function(){n.removeEventListener(t.eventName,t.fn,o)}}));return function(){o.forEach((function(n){return n()}))}};
|
|
2
|
+
//# sourceMappingURL=bind-events.cjs.production.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind-events.cjs.production.min.js","sources":["../src/index.ts"],"sourcesContent":["// addEventListener<K extends keyof WindowEventMap>\n// (type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n\n// export interface Binding <K extends keyof WindowEventMap>{\n// eventName: K;\n// fn: (this: Window, ev: WindowEventMap[K]) => any;\n// options?: boolean | AddEventListenerOptions\n// }\nexport interface Binding {\n eventName: string;\n fn: (e: MouseEvent) => any;\n options?: AddEventListenerOptions;\n}\n\n// https://github.com/atlassian/react-beautiful-dnd/blob/master/src/view/event-bindings/bind-events.js\n\nfunction getOptions(\n shared?: AddEventListenerOptions,\n fromBinding?: AddEventListenerOptions\n) {\n return {\n ...shared,\n ...fromBinding,\n };\n}\n\nexport default function bindEvents(\n el: HTMLElement | Window | Document,\n bindings: Binding[] | Binding,\n sharedOptions?: AddEventListenerOptions\n) {\n const empty = [] as Binding[];\n const nextBindings = empty.concat(bindings);\n const unBindings = nextBindings.map((binding) => {\n const options = getOptions(sharedOptions, binding.options);\n // ts-hint: https://github.com/microsoft/TypeScript/issues/28357#issuecomment-436484705\n el.addEventListener(\n binding.eventName,\n binding.fn as EventListener,\n options\n );\n\n return function unbind() {\n el.removeEventListener(\n binding.eventName,\n binding.fn as EventListener,\n options\n );\n };\n });\n\n // Return a function to unbind events\n return function unbindAll() {\n unBindings.forEach((unbind) => unbind());\n };\n}\n\n// once event triggered. it will be teardown first...\nexport function bindEventsOnce(\n el: HTMLElement,\n bindings: Binding[] | Binding,\n sharedOptions?: AddEventListenerOptions\n) {\n const empty = [] as Binding[];\n const nextBindings = empty.concat(bindings);\n const unBindings = nextBindings.map((binding) => {\n const options = getOptions(sharedOptions, binding.options);\n let unbind = () => {};\n\n const wrappedFn = (e: MouseEvent) => {\n binding.fn.call(null, e);\n unbind();\n };\n\n el.addEventListener(binding.eventName, wrappedFn as EventListener, options);\n\n unbind = () =>\n el.removeEventListener(\n binding.eventName,\n wrappedFn as EventListener,\n options\n );\n\n return unbind;\n });\n\n // Return a function to unbind events\n return function unbindAll() {\n unBindings.forEach((unbind) => unbind());\n };\n}\n"],"names":["getOptions","shared","fromBinding","_extends","el","bindings","sharedOptions","unBindings","concat","map","binding","options","unbind","wrappedFn","e","fn","call","addEventListener","eventName","removeEventListener","forEach"],"mappings":"gPAgBA,SAASA,EACPC,EACAC,GAEA,OAAAC,KACKF,EACAC,0FAqCLE,EACAC,EACAC,GAEA,IAEMC,EAFQ,GACaC,OAAOH,GACFI,KAAI,SAACC,GACnC,IAAMC,EAAUX,EAAWM,EAAeI,EAAQC,SAC9CC,EAAS,aAEPC,EAAY,SAACC,GACjBJ,EAAQK,GAAGC,KAAK,KAAMF,GACtBF,KAYF,OATAR,EAAGa,iBAAiBP,EAAQQ,UAAWL,EAA4BF,GAEnEC,EAAS,WAAA,OACPR,EAAGe,oBACDT,EAAQQ,UACRL,EACAF,OAON,OAAO,WACLJ,EAAWa,SAAQ,SAACR,GAAM,OAAKA,kCA7DjCR,EACAC,EACAC,GAEA,IAEMC,EAFQ,GACaC,OAAOH,GACFI,KAAI,SAACC,GACnC,IAAMC,EAAUX,EAAWM,EAAeI,EAAQC,SAQlD,OANAP,EAAGa,iBACDP,EAAQQ,UACRR,EAAQK,GACRJ,GAGK,WACLP,EAAGe,oBACDT,EAAQQ,UACRR,EAAQK,GACRJ,OAMN,OAAO,WACLJ,EAAWa,SAAQ,SAACR,GAAM,OAAKA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
function _extends() {
|
|
2
|
+
_extends = Object.assign ? Object.assign.bind() : function (target) {
|
|
3
|
+
for (var i = 1; i < arguments.length; i++) {
|
|
4
|
+
var source = arguments[i];
|
|
5
|
+
for (var key in source) {
|
|
6
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
7
|
+
target[key] = source[key];
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return target;
|
|
12
|
+
};
|
|
13
|
+
return _extends.apply(this, arguments);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function getOptions(shared, fromBinding) {
|
|
17
|
+
return _extends({}, shared, fromBinding);
|
|
18
|
+
}
|
|
19
|
+
function bindEvents(el, bindings, sharedOptions) {
|
|
20
|
+
var empty = [];
|
|
21
|
+
var nextBindings = empty.concat(bindings);
|
|
22
|
+
var unBindings = nextBindings.map(function (binding) {
|
|
23
|
+
var options = getOptions(sharedOptions, binding.options);
|
|
24
|
+
el.addEventListener(binding.eventName, binding.fn, options);
|
|
25
|
+
return function unbind() {
|
|
26
|
+
el.removeEventListener(binding.eventName, binding.fn, options);
|
|
27
|
+
};
|
|
28
|
+
});
|
|
29
|
+
return function unbindAll() {
|
|
30
|
+
unBindings.forEach(function (unbind) {
|
|
31
|
+
return unbind();
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function bindEventsOnce(el, bindings, sharedOptions) {
|
|
36
|
+
var empty = [];
|
|
37
|
+
var nextBindings = empty.concat(bindings);
|
|
38
|
+
var unBindings = nextBindings.map(function (binding) {
|
|
39
|
+
var options = getOptions(sharedOptions, binding.options);
|
|
40
|
+
var unbind = function unbind() {};
|
|
41
|
+
var wrappedFn = function wrappedFn(e) {
|
|
42
|
+
binding.fn.call(null, e);
|
|
43
|
+
unbind();
|
|
44
|
+
};
|
|
45
|
+
el.addEventListener(binding.eventName, wrappedFn, options);
|
|
46
|
+
unbind = function unbind() {
|
|
47
|
+
return el.removeEventListener(binding.eventName, wrappedFn, options);
|
|
48
|
+
};
|
|
49
|
+
return unbind;
|
|
50
|
+
});
|
|
51
|
+
return function unbindAll() {
|
|
52
|
+
unBindings.forEach(function (unbind) {
|
|
53
|
+
return unbind();
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export default bindEvents;
|
|
59
|
+
export { bindEventsOnce };
|
|
60
|
+
//# sourceMappingURL=bind-events.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bind-events.esm.js","sources":["../src/index.ts"],"sourcesContent":["// addEventListener<K extends keyof WindowEventMap>\n// (type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;\n\n// export interface Binding <K extends keyof WindowEventMap>{\n// eventName: K;\n// fn: (this: Window, ev: WindowEventMap[K]) => any;\n// options?: boolean | AddEventListenerOptions\n// }\nexport interface Binding {\n eventName: string;\n fn: (e: MouseEvent) => any;\n options?: AddEventListenerOptions;\n}\n\n// https://github.com/atlassian/react-beautiful-dnd/blob/master/src/view/event-bindings/bind-events.js\n\nfunction getOptions(\n shared?: AddEventListenerOptions,\n fromBinding?: AddEventListenerOptions\n) {\n return {\n ...shared,\n ...fromBinding,\n };\n}\n\nexport default function bindEvents(\n el: HTMLElement | Window | Document,\n bindings: Binding[] | Binding,\n sharedOptions?: AddEventListenerOptions\n) {\n const empty = [] as Binding[];\n const nextBindings = empty.concat(bindings);\n const unBindings = nextBindings.map((binding) => {\n const options = getOptions(sharedOptions, binding.options);\n // ts-hint: https://github.com/microsoft/TypeScript/issues/28357#issuecomment-436484705\n el.addEventListener(\n binding.eventName,\n binding.fn as EventListener,\n options\n );\n\n return function unbind() {\n el.removeEventListener(\n binding.eventName,\n binding.fn as EventListener,\n options\n );\n };\n });\n\n // Return a function to unbind events\n return function unbindAll() {\n unBindings.forEach((unbind) => unbind());\n };\n}\n\n// once event triggered. it will be teardown first...\nexport function bindEventsOnce(\n el: HTMLElement,\n bindings: Binding[] | Binding,\n sharedOptions?: AddEventListenerOptions\n) {\n const empty = [] as Binding[];\n const nextBindings = empty.concat(bindings);\n const unBindings = nextBindings.map((binding) => {\n const options = getOptions(sharedOptions, binding.options);\n let unbind = () => {};\n\n const wrappedFn = (e: MouseEvent) => {\n binding.fn.call(null, e);\n unbind();\n };\n\n el.addEventListener(binding.eventName, wrappedFn as EventListener, options);\n\n unbind = () =>\n el.removeEventListener(\n binding.eventName,\n wrappedFn as EventListener,\n options\n );\n\n return unbind;\n });\n\n // Return a function to unbind events\n return function unbindAll() {\n unBindings.forEach((unbind) => unbind());\n };\n}\n"],"names":["getOptions","shared","fromBinding","_extends","bindEvents","el","bindings","sharedOptions","empty","nextBindings","concat","unBindings","map","binding","options","addEventListener","eventName","fn","unbind","removeEventListener","unbindAll","forEach","bindEventsOnce","wrappedFn","e","call"],"mappings":";;;;;;;;;;;;;;;AAgBA,SAASA,UAAUA,CACjBC,MAAgC,EAChCC,WAAqC;EAErC,OAAAC,QAAA,KACKF,MAAM,EACNC,WAAW;AAElB;SAEwBE,UAAUA,CAChCC,EAAmC,EACnCC,QAA6B,EAC7BC,aAAuC;EAEvC,IAAMC,KAAK,GAAG,EAAe;EAC7B,IAAMC,YAAY,GAAGD,KAAK,CAACE,MAAM,CAACJ,QAAQ,CAAC;EAC3C,IAAMK,UAAU,GAAGF,YAAY,CAACG,GAAG,CAAC,UAACC,OAAO;IAC1C,IAAMC,OAAO,GAAGd,UAAU,CAACO,aAAa,EAAEM,OAAO,CAACC,OAAO,CAAC;IAE1DT,EAAE,CAACU,gBAAgB,CACjBF,OAAO,CAACG,SAAS,EACjBH,OAAO,CAACI,EAAmB,EAC3BH,OAAO,CACR;IAED,OAAO,SAASI,MAAMA;MACpBb,EAAE,CAACc,mBAAmB,CACpBN,OAAO,CAACG,SAAS,EACjBH,OAAO,CAACI,EAAmB,EAC3BH,OAAO,CACR;KACF;GACF,CAAC;EAGF,OAAO,SAASM,SAASA;IACvBT,UAAU,CAACU,OAAO,CAAC,UAACH,MAAM;MAAA,OAAKA,MAAM,EAAE;MAAC;GACzC;AACH;SAGgBI,cAAcA,CAC5BjB,EAAe,EACfC,QAA6B,EAC7BC,aAAuC;EAEvC,IAAMC,KAAK,GAAG,EAAe;EAC7B,IAAMC,YAAY,GAAGD,KAAK,CAACE,MAAM,CAACJ,QAAQ,CAAC;EAC3C,IAAMK,UAAU,GAAGF,YAAY,CAACG,GAAG,CAAC,UAACC,OAAO;IAC1C,IAAMC,OAAO,GAAGd,UAAU,CAACO,aAAa,EAAEM,OAAO,CAACC,OAAO,CAAC;IAC1D,IAAII,MAAM,GAAG,SAAAA,WAAQ;IAErB,IAAMK,SAAS,GAAG,SAAZA,SAASA,CAAIC,CAAa;MAC9BX,OAAO,CAACI,EAAE,CAACQ,IAAI,CAAC,IAAI,EAAED,CAAC,CAAC;MACxBN,MAAM,EAAE;KACT;IAEDb,EAAE,CAACU,gBAAgB,CAACF,OAAO,CAACG,SAAS,EAAEO,SAA0B,EAAET,OAAO,CAAC;IAE3EI,MAAM,GAAG,SAAAA;MAAA,OACPb,EAAE,CAACc,mBAAmB,CACpBN,OAAO,CAACG,SAAS,EACjBO,SAA0B,EAC1BT,OAAO,CACR;;IAEH,OAAOI,MAAM;GACd,CAAC;EAGF,OAAO,SAASE,SAASA;IACvBT,UAAU,CAACU,OAAO,CAAC,UAACH,MAAM;MAAA,OAAKA,MAAM,EAAE;MAAC;GACzC;AACH;;;;;"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface Binding {
|
|
2
|
+
eventName: string;
|
|
3
|
+
fn: (e: MouseEvent) => any;
|
|
4
|
+
options?: AddEventListenerOptions;
|
|
5
|
+
}
|
|
6
|
+
export default function bindEvents(el: HTMLElement | Window | Document, bindings: Binding[] | Binding, sharedOptions?: AddEventListenerOptions): () => void;
|
|
7
|
+
export declare function bindEventsOnce(el: HTMLElement, bindings: Binding[] | Binding, sharedOptions?: AddEventListenerOptions): () => void;
|
package/dist/index.js
ADDED
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@x-oasis/bind-events",
|
|
3
|
+
"version": "0.1.34",
|
|
4
|
+
"description": "bind-events function",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"typings": "dist/index.d.ts",
|
|
7
|
+
"module": "dist/bind-events.esm.js",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"index.ts",
|
|
11
|
+
"src"
|
|
12
|
+
],
|
|
13
|
+
"author": "",
|
|
14
|
+
"license": "ISC",
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"tsdx": "^0.14.1"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "tsdx build --tsconfig tsconfig.build.json",
|
|
20
|
+
"clean": "rimraf ./dist",
|
|
21
|
+
"test": "vitest",
|
|
22
|
+
"compile": "tsc -p tsconfig.build.json"
|
|
23
|
+
}
|
|
24
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// addEventListener<K extends keyof WindowEventMap>
|
|
2
|
+
// (type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
|
|
3
|
+
|
|
4
|
+
// export interface Binding <K extends keyof WindowEventMap>{
|
|
5
|
+
// eventName: K;
|
|
6
|
+
// fn: (this: Window, ev: WindowEventMap[K]) => any;
|
|
7
|
+
// options?: boolean | AddEventListenerOptions
|
|
8
|
+
// }
|
|
9
|
+
export interface Binding {
|
|
10
|
+
eventName: string;
|
|
11
|
+
fn: (e: MouseEvent) => any;
|
|
12
|
+
options?: AddEventListenerOptions;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// https://github.com/atlassian/react-beautiful-dnd/blob/master/src/view/event-bindings/bind-events.js
|
|
16
|
+
|
|
17
|
+
function getOptions(
|
|
18
|
+
shared?: AddEventListenerOptions,
|
|
19
|
+
fromBinding?: AddEventListenerOptions
|
|
20
|
+
) {
|
|
21
|
+
return {
|
|
22
|
+
...shared,
|
|
23
|
+
...fromBinding,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export default function bindEvents(
|
|
28
|
+
el: HTMLElement | Window | Document,
|
|
29
|
+
bindings: Binding[] | Binding,
|
|
30
|
+
sharedOptions?: AddEventListenerOptions
|
|
31
|
+
) {
|
|
32
|
+
const empty = [] as Binding[];
|
|
33
|
+
const nextBindings = empty.concat(bindings);
|
|
34
|
+
const unBindings = nextBindings.map((binding) => {
|
|
35
|
+
const options = getOptions(sharedOptions, binding.options);
|
|
36
|
+
// ts-hint: https://github.com/microsoft/TypeScript/issues/28357#issuecomment-436484705
|
|
37
|
+
el.addEventListener(
|
|
38
|
+
binding.eventName,
|
|
39
|
+
binding.fn as EventListener,
|
|
40
|
+
options
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
return function unbind() {
|
|
44
|
+
el.removeEventListener(
|
|
45
|
+
binding.eventName,
|
|
46
|
+
binding.fn as EventListener,
|
|
47
|
+
options
|
|
48
|
+
);
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// Return a function to unbind events
|
|
53
|
+
return function unbindAll() {
|
|
54
|
+
unBindings.forEach((unbind) => unbind());
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// once event triggered. it will be teardown first...
|
|
59
|
+
export function bindEventsOnce(
|
|
60
|
+
el: HTMLElement,
|
|
61
|
+
bindings: Binding[] | Binding,
|
|
62
|
+
sharedOptions?: AddEventListenerOptions
|
|
63
|
+
) {
|
|
64
|
+
const empty = [] as Binding[];
|
|
65
|
+
const nextBindings = empty.concat(bindings);
|
|
66
|
+
const unBindings = nextBindings.map((binding) => {
|
|
67
|
+
const options = getOptions(sharedOptions, binding.options);
|
|
68
|
+
let unbind = () => {};
|
|
69
|
+
|
|
70
|
+
const wrappedFn = (e: MouseEvent) => {
|
|
71
|
+
binding.fn.call(null, e);
|
|
72
|
+
unbind();
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
el.addEventListener(binding.eventName, wrappedFn as EventListener, options);
|
|
76
|
+
|
|
77
|
+
unbind = () =>
|
|
78
|
+
el.removeEventListener(
|
|
79
|
+
binding.eventName,
|
|
80
|
+
wrappedFn as EventListener,
|
|
81
|
+
options
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
return unbind;
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Return a function to unbind events
|
|
88
|
+
return function unbindAll() {
|
|
89
|
+
unBindings.forEach((unbind) => unbind());
|
|
90
|
+
};
|
|
91
|
+
}
|