@awcrotwell/motion
Version:
Motion allows you to build reactive, real-time frontend UI components in your Amber application using pure Crystal that are reusable, testable & encapsulated. For brevity, we will call them MotionComponents.
27 lines (26 loc) • 818 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.beforeDocumentUnload = exports.documentLoaded = void 0;
function once(target, event, callback) {
target.addEventListener(event, function handler(event) {
target.removeEventListener(event, handler);
callback(event);
});
}
exports.documentLoaded = new Promise((resolve) => {
if (/^loaded|^i|^c/i.test(document.readyState)) {
resolve();
}
else {
once(document, 'DOMContentLoaded', resolve);
}
});
exports.beforeDocumentUnload = new Promise((resolve) => {
window.addEventListener('beforeunload', () => {
once(window, 'beforeunload', ({ defaultPrevented }) => {
if (!defaultPrevented) {
resolve();
}
});
}, true);
});