@web-atoms/core
Version:
117 lines (116 loc) • 3.38 kB
JavaScript
System.register(["@web-atoms/date-time/dist/DateTime", "./types"], function (_export, _context) {
"use strict";
var DateTime, CancelToken, EventScope, key, id;
_export("default", void 0);
return {
setters: [function (_webAtomsDateTimeDistDateTime) {
DateTime = _webAtomsDateTimeDistDateTime.default;
}, function (_types) {
CancelToken = _types.CancelToken;
}],
execute: function () {
key = DateTime.now.msSinceEpoch;
id = 1;
_export("default", EventScope = class EventScope {
static create() {
return new EventScope(`eventScopeE${key}${id++}`);
}
bindEvent(fx) {
return {
[this.eventName]: fx
};
}
constructor(eventType) {
this.eventType = eventType;
this.eventName = `event-${this.eventType}`;
}
subscribe(control, handler) {
return control.bindEvent(window, this.eventType, handler);
}
listen(fx) {
const asyncHandler = ce => {
if (ce.defaultPrevented) {
return;
}
try {
const p = fx(ce);
if (p === null || p === void 0 ? void 0 : p.catch) {
p.catch(r => {
if (CancelToken.isCancelled(r)) {
return;
}
console.error(r);
});
}
} catch (e) {
if (CancelToken.isCancelled(e)) {
return;
}
console.error(e);
}
};
window.addEventListener(this.eventType, asyncHandler);
return {
dispose: () => {
window.removeEventListener(this.eventType, asyncHandler);
}
};
}
listenOn(target, fx) {
const asyncHandler = ce => {
if (ce.defaultPrevented) {
return;
}
try {
const p = fx(ce);
if (p === null || p === void 0 ? void 0 : p.catch) {
p.catch(r => {
if (CancelToken.isCancelled(r)) {
return;
}
console.error(r);
});
}
} catch (e) {
if (CancelToken.isCancelled(e)) {
return;
}
console.error(e);
}
};
target.addEventListener(this.eventType, asyncHandler);
return {
dispose: () => {
target.removeEventListener(this.eventType, asyncHandler);
}
};
}
dispatch(target, detail, {
cancelable = true,
bubbles = true
} = {}) {
const ce = new CustomEvent(this.eventType, {
detail,
cancelable,
bubbles
});
target.dispatchEvent(ce);
return ce;
}
dispatchEvent(detail, cancelable = true) {
const ce = new CustomEvent(this.eventType, {
detail,
cancelable,
bubbles: false
});
window.dispatchEvent(ce);
return ce;
}
toString() {
return this.eventType;
}
});
}
};
});
//# sourceMappingURL=EventScope.js.map