treeloom 0.0.0-stage → 2.1.0
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/LICENSE +373 -0
- package/README.md +91 -2
- package/browser/treeloom.js +11232 -0
- package/browser/treeloom.min.js +1 -0
- package/browser/treeloomRenderOnly.js +11115 -0
- package/browser/treeloomRenderOnly.min.js +1 -0
- package/dist/deflate/domItemToJson.d.ts +14 -0
- package/dist/deflate/domItemToJson.js +43 -0
- package/dist/deflate/domItemToJson.min.js +1 -0
- package/dist/deflate/index.d.ts +7 -0
- package/dist/deflate/index.js +19 -0
- package/dist/deflate/index.min.js +1 -0
- package/dist/deflate/removeEmptyProperties.d.ts +8 -0
- package/dist/deflate/removeEmptyProperties.js +43 -0
- package/dist/deflate/removeEmptyProperties.min.js +1 -0
- package/dist/diff/appliedSnapshot.d.ts +34 -0
- package/dist/diff/appliedSnapshot.js +134 -0
- package/dist/diff/appliedSnapshot.min.js +1 -0
- package/dist/diff/createChangeList.d.ts +9 -0
- package/dist/diff/createChangeList.js +44 -0
- package/dist/diff/createChangeList.min.js +1 -0
- package/dist/diff/domItemChanges.d.ts +9 -0
- package/dist/diff/domItemChanges.js +167 -0
- package/dist/diff/domItemChanges.min.js +1 -0
- package/dist/diff/domItemHasAttribute.d.ts +11 -0
- package/dist/diff/domItemHasAttribute.js +63 -0
- package/dist/diff/domItemHasAttribute.min.js +1 -0
- package/dist/diff/elementChanges.d.ts +10 -0
- package/dist/diff/elementChanges.js +151 -0
- package/dist/diff/elementChanges.min.js +1 -0
- package/dist/diff/elementHasAttribute.d.ts +10 -0
- package/dist/diff/elementHasAttribute.js +70 -0
- package/dist/diff/elementHasAttribute.min.js +1 -0
- package/dist/diff/getAssignedStyles.d.ts +9 -0
- package/dist/diff/getAssignedStyles.js +22 -0
- package/dist/diff/getAssignedStyles.min.js +1 -0
- package/dist/diff/index.d.ts +9 -0
- package/dist/diff/index.js +27 -0
- package/dist/diff/index.min.js +1 -0
- package/dist/diff/types.d.ts +17 -0
- package/dist/diff/types.js +8 -0
- package/dist/diff/types.min.js +1 -0
- package/dist/domItem/index.d.ts +34 -0
- package/dist/domItem/index.js +81 -0
- package/dist/domItem/index.min.js +1 -0
- package/dist/domItem/objects/addDomItemProperties.d.ts +7 -0
- package/dist/domItem/objects/addDomItemProperties.js +27 -0
- package/dist/domItem/objects/addDomItemProperties.min.js +1 -0
- package/dist/domItem/objects/createCoreItem.d.ts +9 -0
- package/dist/domItem/objects/createCoreItem.js +53 -0
- package/dist/domItem/objects/createCoreItem.min.js +1 -0
- package/dist/domItem/objects/createDomItem.d.ts +10 -0
- package/dist/domItem/objects/createDomItem.js +40 -0
- package/dist/domItem/objects/createDomItem.min.js +1 -0
- package/dist/domItem/objects/documentDomItem.d.ts +12 -0
- package/dist/domItem/objects/documentDomItem.js +36 -0
- package/dist/domItem/objects/documentDomItem.min.js +1 -0
- package/dist/domItem/objects/documentItem.d.ts +18 -0
- package/dist/domItem/objects/documentItem.js +40 -0
- package/dist/domItem/objects/documentItem.min.js +1 -0
- package/dist/domItem/objects/initChildren.d.ts +6 -0
- package/dist/domItem/objects/initChildren.js +44 -0
- package/dist/domItem/objects/initChildren.min.js +1 -0
- package/dist/domItem/objects/initRoot.d.ts +9 -0
- package/dist/domItem/objects/initRoot.js +32 -0
- package/dist/domItem/objects/initRoot.min.js +1 -0
- package/dist/domItem/query/gatherChildItems.d.ts +12 -0
- package/dist/domItem/query/gatherChildItems.js +19 -0
- package/dist/domItem/query/gatherChildItems.min.js +1 -0
- package/dist/domItem/query/getChildTest.d.ts +8 -0
- package/dist/domItem/query/getChildTest.js +15 -0
- package/dist/domItem/query/getChildTest.min.js +1 -0
- package/dist/domItem/query/getChildrenByClass.d.ts +11 -0
- package/dist/domItem/query/getChildrenByClass.js +26 -0
- package/dist/domItem/query/getChildrenByClass.min.js +1 -0
- package/dist/domItem/query/getChildrenByName.d.ts +9 -0
- package/dist/domItem/query/getChildrenByName.js +23 -0
- package/dist/domItem/query/getChildrenByName.min.js +1 -0
- package/dist/domItem/query/getChildrenFromAttribute.d.ts +13 -0
- package/dist/domItem/query/getChildrenFromAttribute.js +28 -0
- package/dist/domItem/query/getChildrenFromAttribute.min.js +1 -0
- package/dist/domItem/query/getItemByElement.d.ts +11 -0
- package/dist/domItem/query/getItemByElement.js +29 -0
- package/dist/domItem/query/getItemByElement.min.js +1 -0
- package/dist/domItem/query/getParentsByClass.d.ts +12 -0
- package/dist/domItem/query/getParentsByClass.js +40 -0
- package/dist/domItem/query/getParentsByClass.min.js +1 -0
- package/dist/domItem/query/getParentsByName.d.ts +9 -0
- package/dist/domItem/query/getParentsByName.js +23 -0
- package/dist/domItem/query/getParentsByName.min.js +1 -0
- package/dist/domItem/query/getParentsByTagName.d.ts +9 -0
- package/dist/domItem/query/getParentsByTagName.js +23 -0
- package/dist/domItem/query/getParentsByTagName.min.js +1 -0
- package/dist/domItem/query/getParentsFromAttribute.d.ts +13 -0
- package/dist/domItem/query/getParentsFromAttribute.js +39 -0
- package/dist/domItem/query/getParentsFromAttribute.min.js +1 -0
- package/dist/domItem/traits/defineTrait.d.ts +10 -0
- package/dist/domItem/traits/defineTrait.js +26 -0
- package/dist/domItem/traits/defineTrait.min.js +1 -0
- package/dist/domItem/traits/definitions.d.ts +7 -0
- package/dist/domItem/traits/definitions.js +20 -0
- package/dist/domItem/traits/definitions.min.js +1 -0
- package/dist/domItem/traits/getNonSerializableKeys.d.ts +9 -0
- package/dist/domItem/traits/getNonSerializableKeys.js +25 -0
- package/dist/domItem/traits/getNonSerializableKeys.min.js +1 -0
- package/dist/domItem/traits/getTraitDefinition.d.ts +7 -0
- package/dist/domItem/traits/getTraitDefinition.js +20 -0
- package/dist/domItem/traits/getTraitDefinition.min.js +1 -0
- package/dist/domItem/traits/hasTrait.d.ts +8 -0
- package/dist/domItem/traits/hasTrait.js +15 -0
- package/dist/domItem/traits/hasTrait.min.js +1 -0
- package/dist/domItem/traits/hasTraits.d.ts +9 -0
- package/dist/domItem/traits/hasTraits.js +16 -0
- package/dist/domItem/traits/hasTraits.min.js +1 -0
- package/dist/domItem/traits/isDomItem.d.ts +8 -0
- package/dist/domItem/traits/isDomItem.js +21 -0
- package/dist/domItem/traits/isDomItem.min.js +1 -0
- package/dist/domItem/traits/withTrait.d.ts +11 -0
- package/dist/domItem/traits/withTrait.js +30 -0
- package/dist/domItem/traits/withTrait.min.js +1 -0
- package/dist/domItem/tree/appendChild.d.ts +8 -0
- package/dist/domItem/tree/appendChild.js +19 -0
- package/dist/domItem/tree/appendChild.min.js +1 -0
- package/dist/domItem/tree/getItemByPath.d.ts +10 -0
- package/dist/domItem/tree/getItemByPath.js +23 -0
- package/dist/domItem/tree/getItemByPath.min.js +1 -0
- package/dist/domItem/tree/getItemPath.d.ts +9 -0
- package/dist/domItem/tree/getItemPath.js +31 -0
- package/dist/domItem/tree/getItemPath.min.js +1 -0
- package/dist/domItem/tree/getTopParentItem.d.ts +8 -0
- package/dist/domItem/tree/getTopParentItem.js +29 -0
- package/dist/domItem/tree/getTopParentItem.min.js +1 -0
- package/dist/domItem/tree/insertChild.d.ts +11 -0
- package/dist/domItem/tree/insertChild.js +22 -0
- package/dist/domItem/tree/insertChild.min.js +1 -0
- package/dist/domItem/tree/itemIdIndex.d.ts +43 -0
- package/dist/domItem/tree/itemIdIndex.js +118 -0
- package/dist/domItem/tree/itemIdIndex.min.js +1 -0
- package/dist/domItem/tree/removeChild.d.ts +8 -0
- package/dist/domItem/tree/removeChild.js +21 -0
- package/dist/domItem/tree/removeChild.min.js +1 -0
- package/dist/domItem/tree/setParentItemReferences.d.ts +7 -0
- package/dist/domItem/tree/setParentItemReferences.js +24 -0
- package/dist/domItem/tree/setParentItemReferences.min.js +1 -0
- package/dist/domItem/types.d.ts +131 -0
- package/dist/domItem/types.js +8 -0
- package/dist/domItem/types.min.js +1 -0
- package/dist/events/functions/activateListener.d.ts +10 -0
- package/dist/events/functions/activateListener.js +45 -0
- package/dist/events/functions/activateListener.min.js +1 -0
- package/dist/events/functions/addEventListener.d.ts +23 -0
- package/dist/events/functions/addEventListener.js +54 -0
- package/dist/events/functions/addEventListener.min.js +1 -0
- package/dist/events/functions/applyActiveListeners.d.ts +9 -0
- package/dist/events/functions/applyActiveListeners.js +52 -0
- package/dist/events/functions/applyActiveListeners.min.js +1 -0
- package/dist/events/functions/assignListener.d.ts +12 -0
- package/dist/events/functions/assignListener.js +39 -0
- package/dist/events/functions/assignListener.min.js +1 -0
- package/dist/events/functions/bindAllListeners.d.ts +10 -0
- package/dist/events/functions/bindAllListeners.js +28 -0
- package/dist/events/functions/bindAllListeners.min.js +1 -0
- package/dist/events/functions/bindElementListeners.d.ts +7 -0
- package/dist/events/functions/bindElementListeners.js +34 -0
- package/dist/events/functions/bindElementListeners.min.js +1 -0
- package/dist/events/functions/bindListeners.d.ts +9 -0
- package/dist/events/functions/bindListeners.js +23 -0
- package/dist/events/functions/bindListeners.min.js +1 -0
- package/dist/events/functions/deactivateListener.d.ts +13 -0
- package/dist/events/functions/deactivateListener.js +58 -0
- package/dist/events/functions/deactivateListener.min.js +1 -0
- package/dist/events/functions/deactivateListeners.d.ts +7 -0
- package/dist/events/functions/deactivateListeners.js +22 -0
- package/dist/events/functions/deactivateListeners.min.js +1 -0
- package/dist/events/functions/findEventListener.d.ts +22 -0
- package/dist/events/functions/findEventListener.js +61 -0
- package/dist/events/functions/findEventListener.min.js +1 -0
- package/dist/events/functions/fullAddEventListener.d.ts +20 -0
- package/dist/events/functions/fullAddEventListener.js +45 -0
- package/dist/events/functions/fullAddEventListener.min.js +1 -0
- package/dist/events/functions/fullRemoveEventListener.d.ts +22 -0
- package/dist/events/functions/fullRemoveEventListener.js +37 -0
- package/dist/events/functions/fullRemoveEventListener.min.js +1 -0
- package/dist/events/functions/listenerOptions.d.ts +12 -0
- package/dist/events/functions/listenerOptions.js +31 -0
- package/dist/events/functions/listenerOptions.min.js +1 -0
- package/dist/events/functions/makeEventHandler.d.ts +10 -0
- package/dist/events/functions/makeEventHandler.js +23 -0
- package/dist/events/functions/makeEventHandler.min.js +1 -0
- package/dist/events/functions/makeForwardingListener.d.ts +11 -0
- package/dist/events/functions/makeForwardingListener.js +46 -0
- package/dist/events/functions/makeForwardingListener.min.js +1 -0
- package/dist/events/functions/receiveForwardedEvent.d.ts +23 -0
- package/dist/events/functions/receiveForwardedEvent.js +40 -0
- package/dist/events/functions/receiveForwardedEvent.min.js +1 -0
- package/dist/events/functions/registerListener.d.ts +11 -0
- package/dist/events/functions/registerListener.js +25 -0
- package/dist/events/functions/registerListener.min.js +1 -0
- package/dist/events/functions/registerListeners.d.ts +10 -0
- package/dist/events/functions/registerListeners.js +26 -0
- package/dist/events/functions/registerListeners.min.js +1 -0
- package/dist/events/functions/removeEventListener.d.ts +18 -0
- package/dist/events/functions/removeEventListener.js +42 -0
- package/dist/events/functions/removeEventListener.min.js +1 -0
- package/dist/events/functions/retrieveListener.d.ts +14 -0
- package/dist/events/functions/retrieveListener.js +39 -0
- package/dist/events/functions/retrieveListener.min.js +1 -0
- package/dist/events/functions/revokeActiveListeners.d.ts +12 -0
- package/dist/events/functions/revokeActiveListeners.js +54 -0
- package/dist/events/functions/revokeActiveListeners.min.js +1 -0
- package/dist/events/functions/setForwardEvents.d.ts +11 -0
- package/dist/events/functions/setForwardEvents.js +26 -0
- package/dist/events/functions/setForwardEvents.min.js +1 -0
- package/dist/events/functions/unassignListener.d.ts +12 -0
- package/dist/events/functions/unassignListener.js +32 -0
- package/dist/events/functions/unassignListener.min.js +1 -0
- package/dist/events/index.d.ts +37 -0
- package/dist/events/index.js +72 -0
- package/dist/events/index.min.js +1 -0
- package/dist/events/objects/createEventListener.d.ts +13 -0
- package/dist/events/objects/createEventListener.js +30 -0
- package/dist/events/objects/createEventListener.min.js +1 -0
- package/dist/events/objects/createEventProxy.d.ts +10 -0
- package/dist/events/objects/createEventProxy.js +48 -0
- package/dist/events/objects/createEventProxy.min.js +1 -0
- package/dist/events/objects/createEventResponder.d.ts +8 -0
- package/dist/events/objects/createEventResponder.js +27 -0
- package/dist/events/objects/createEventResponder.min.js +1 -0
- package/dist/events/objects/options/getListenerOptions.d.ts +6 -0
- package/dist/events/objects/options/getListenerOptions.js +22 -0
- package/dist/events/objects/options/getListenerOptions.min.js +1 -0
- package/dist/events/objects/options/numberToOptions.d.ts +8 -0
- package/dist/events/objects/options/numberToOptions.js +21 -0
- package/dist/events/objects/options/numberToOptions.min.js +1 -0
- package/dist/events/objects/options/optionsToNumber.d.ts +9 -0
- package/dist/events/objects/options/optionsToNumber.js +27 -0
- package/dist/events/objects/options/optionsToNumber.min.js +1 -0
- package/dist/events/objects/options.d.ts +6 -0
- package/dist/events/objects/options.js +24 -0
- package/dist/events/objects/options.min.js +1 -0
- package/dist/events/types.d.ts +87 -0
- package/dist/events/types.js +8 -0
- package/dist/events/types.min.js +1 -0
- package/dist/inflate/index.d.ts +4 -0
- package/dist/inflate/index.js +17 -0
- package/dist/inflate/index.min.js +1 -0
- package/dist/inflate/jsonToDomItem.d.ts +7 -0
- package/dist/inflate/jsonToDomItem.js +30 -0
- package/dist/inflate/jsonToDomItem.min.js +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +24 -0
- package/dist/main.min.js +1 -0
- package/dist/render/generateElement.d.ts +7 -0
- package/dist/render/generateElement.js +41 -0
- package/dist/render/generateElement.min.js +1 -0
- package/dist/render/index.d.ts +9 -0
- package/dist/render/index.js +27 -0
- package/dist/render/index.min.js +1 -0
- package/dist/render/reconcile.d.ts +16 -0
- package/dist/render/reconcile.js +169 -0
- package/dist/render/reconcile.min.js +1 -0
- package/dist/render/renderHtml.d.ts +16 -0
- package/dist/render/renderHtml.js +57 -0
- package/dist/render/renderHtml.min.js +1 -0
- package/dist/render/updateChildNodes.d.ts +7 -0
- package/dist/render/updateChildNodes.js +53 -0
- package/dist/render/updateChildNodes.min.js +1 -0
- package/dist/render/updateElement.d.ts +14 -0
- package/dist/render/updateElement.js +113 -0
- package/dist/render/updateElement.min.js +1 -0
- package/dist/render/updateElements.d.ts +9 -0
- package/dist/render/updateElements.js +33 -0
- package/dist/render/updateElements.min.js +1 -0
- package/dist/renderOnly.d.ts +2 -0
- package/dist/renderOnly.js +27 -0
- package/dist/renderOnly.min.js +1 -0
- package/dist/sync/index.d.ts +6 -0
- package/dist/sync/index.js +21 -0
- package/dist/sync/index.min.js +1 -0
- package/dist/sync/updateChildren.d.ts +7 -0
- package/dist/sync/updateChildren.js +38 -0
- package/dist/sync/updateChildren.min.js +1 -0
- package/dist/sync/updateDomItem.d.ts +8 -0
- package/dist/sync/updateDomItem.js +53 -0
- package/dist/sync/updateDomItem.min.js +1 -0
- package/dist/sync/updateDomItems.d.ts +9 -0
- package/dist/sync/updateDomItems.js +33 -0
- package/dist/sync/updateDomItems.min.js +1 -0
- package/package.json +74 -4
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const si_funciona_1 = __importDefault(require("si-funciona"));
|
|
15
|
+
const getListenerOptions_1 = __importDefault(require("../objects/options/getListenerOptions"));
|
|
16
|
+
const optionsToNumber_1 = __importDefault(require("../objects/options/optionsToNumber"));
|
|
17
|
+
const numberToOptions_1 = __importDefault(require("../objects/options/numberToOptions"));
|
|
18
|
+
const unassignListener_1 = __importDefault(require("./unassignListener"));
|
|
19
|
+
/**
|
|
20
|
+
* Deactivate a single listener: detach it from the element (if it was actually attached) and remove it from
|
|
21
|
+
* activeListeners, without disturbing any other listener sharing the same options bucket.
|
|
22
|
+
* @param eventName - The name of the trigger event the listener was activated under.
|
|
23
|
+
* @param eventListener - The EventListener descriptor to deactivate, as found via
|
|
24
|
+
* {@link findEventListener} or returned from {@link activateListener}.
|
|
25
|
+
* @param item - The DomItem the listener is attached to.
|
|
26
|
+
* @returns The same DomItem, with this listener detached and marked inactive.
|
|
27
|
+
*/
|
|
28
|
+
const deactivateListener = (eventName, eventListener, item) => {
|
|
29
|
+
const eventOptions = si_funciona_1.default.dotGet(item, `activeListeners.${eventName}`);
|
|
30
|
+
if (eventOptions === null || !eventListener.activeResponder) {
|
|
31
|
+
return item;
|
|
32
|
+
}
|
|
33
|
+
const listenerOptions = (0, getListenerOptions_1.default)();
|
|
34
|
+
const optionIdentifier = (0, optionsToNumber_1.default)(listenerOptions, eventListener.listenerOptions);
|
|
35
|
+
const active = item.activeListeners;
|
|
36
|
+
const bucket = active[eventName][optionIdentifier];
|
|
37
|
+
if (!bucket) {
|
|
38
|
+
return item;
|
|
39
|
+
}
|
|
40
|
+
if (eventListener.activeResponder.assignedHandler) {
|
|
41
|
+
const optionsToUse = (0, numberToOptions_1.default)(listenerOptions, optionIdentifier);
|
|
42
|
+
const finalOptions = optionsToUse.signal ? Object.assign({}, optionsToUse, {
|
|
43
|
+
signal: eventListener.activeResponder.abort.signal
|
|
44
|
+
}) : (delete optionsToUse.signal, optionsToUse);
|
|
45
|
+
(0, unassignListener_1.default)(eventName, item.element, eventListener.activeResponder.assignedHandler, finalOptions);
|
|
46
|
+
}
|
|
47
|
+
const responderIndex = bucket.indexOf(eventListener.activeResponder);
|
|
48
|
+
if (responderIndex > -1) {
|
|
49
|
+
bucket.splice(responderIndex, 1);
|
|
50
|
+
}
|
|
51
|
+
if (bucket.length === 0) {
|
|
52
|
+
delete active[eventName][optionIdentifier];
|
|
53
|
+
}
|
|
54
|
+
eventListener.activeResponder = null;
|
|
55
|
+
eventListener.listenerActive = false;
|
|
56
|
+
return item;
|
|
57
|
+
};
|
|
58
|
+
exports.default = deactivateListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const si_funciona_1=__importDefault(require("si-funciona")),getListenerOptions_1=__importDefault(require("../objects/options/getListenerOptions")),optionsToNumber_1=__importDefault(require("../objects/options/optionsToNumber")),numberToOptions_1=__importDefault(require("../objects/options/numberToOptions")),unassignListener_1=__importDefault(require("./unassignListener")),deactivateListener=(e,t,i)=>{if(null===si_funciona_1.default.dotGet(i,`activeListeners.${e}`)||!t.activeResponder)return i;const n=(0,getListenerOptions_1.default)(),s=(0,optionsToNumber_1.default)(n,t.listenerOptions),r=i.activeListeners,o=r[e][s];if(!o)return i;if(t.activeResponder.assignedHandler){const r=(0,numberToOptions_1.default)(n,s),o=r.signal?Object.assign({},r,{signal:t.activeResponder.abort.signal}):(delete r.signal,r);(0,unassignListener_1.default)(e,i.element,t.activeResponder.assignedHandler,o)}const a=o.indexOf(t.activeResponder);return a>-1&&o.splice(a,1),0===o.length&&delete r[e][s],t.activeResponder=null,t.listenerActive=!1,i};exports.default=deactivateListener;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
/**
|
|
3
|
+
* Set all the listeners for this DOMItem to be inactive.
|
|
4
|
+
* @param item - The DomItem which will have its eventListeners updated.
|
|
5
|
+
*/
|
|
6
|
+
declare const deactivateListeners: (item: DomItem) => DomItem;
|
|
7
|
+
export default deactivateListeners;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Set all the listeners for this DOMItem to be inactive.
|
|
11
|
+
* @param item - The DomItem which will have its eventListeners updated.
|
|
12
|
+
*/
|
|
13
|
+
const deactivateListeners = item => {
|
|
14
|
+
for (const eventName in item.eventListeners) {
|
|
15
|
+
item.eventListeners[eventName].forEach(eventListener => {
|
|
16
|
+
eventListener.listenerActive = false;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
delete item.activeListeners;
|
|
20
|
+
return item;
|
|
21
|
+
};
|
|
22
|
+
exports.default = deactivateListeners;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const deactivateListeners=e=>{for(const t in e.eventListeners)e.eventListeners[t].forEach(e=>{e.listenerActive=!1});return delete e.activeListeners,e};exports.default=deactivateListeners;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
import type { EventName, ListenerDescriptor, ListenerFunction, ListenerOptions } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Search a DOM item's eventListeners for a specific event listener, matched by listener function, custom args, and
|
|
5
|
+
* whether it listens in the capture phase. Returns its index and the matching descriptor as a tuple.
|
|
6
|
+
*
|
|
7
|
+
* As with the DOM's removeEventListener, only the capture flag tells two listeners of the same function apart: once,
|
|
8
|
+
* passive and signal only change how a listener behaves, not which listener it is.
|
|
9
|
+
*
|
|
10
|
+
* item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
|
|
11
|
+
* piped directly - see {@link fullAddEventListener} for an example of the pattern.
|
|
12
|
+
* @param eventName - The name of the trigger event the listener was registered under.
|
|
13
|
+
* @param listenerFunction - The listener function to match against.
|
|
14
|
+
* @param customArgs - The custom args the listener was registered with.
|
|
15
|
+
* @param options - The options the listener was registered with; only
|
|
16
|
+
* the capture flag is compared.
|
|
17
|
+
* @param item - The DomItem whose eventListeners will be searched.
|
|
18
|
+
* @returns A 2-element [index, matchingListener] tuple. If no match is
|
|
19
|
+
* found, index is -1 and matchingListener is undefined.
|
|
20
|
+
*/
|
|
21
|
+
declare const findEventListener: (eventName: EventName, listenerFunction: string | ListenerFunction, customArgs: object | null | undefined, options: ListenerOptions | null | undefined, item: DomItem) => [number, ListenerDescriptor | undefined];
|
|
22
|
+
export default findEventListener;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const si_funciona_1 = __importDefault(require("si-funciona"));
|
|
15
|
+
const getListenerOptions_1 = __importDefault(require("../objects/options/getListenerOptions"));
|
|
16
|
+
const optionsToNumber_1 = __importDefault(require("../objects/options/optionsToNumber"));
|
|
17
|
+
/**
|
|
18
|
+
* Whether the options ask for the capture phase.
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
const capturing = options => {
|
|
22
|
+
const template = (0, getListenerOptions_1.default)();
|
|
23
|
+
return ((0, optionsToNumber_1.default)(template, options) & template.capture) !== 0;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Search a DOM item's eventListeners for a specific event listener, matched by listener function, custom args, and
|
|
27
|
+
* whether it listens in the capture phase. Returns its index and the matching descriptor as a tuple.
|
|
28
|
+
*
|
|
29
|
+
* As with the DOM's removeEventListener, only the capture flag tells two listeners of the same function apart: once,
|
|
30
|
+
* passive and signal only change how a listener behaves, not which listener it is.
|
|
31
|
+
*
|
|
32
|
+
* item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
|
|
33
|
+
* piped directly - see {@link fullAddEventListener} for an example of the pattern.
|
|
34
|
+
* @param eventName - The name of the trigger event the listener was registered under.
|
|
35
|
+
* @param listenerFunction - The listener function to match against.
|
|
36
|
+
* @param customArgs - The custom args the listener was registered with.
|
|
37
|
+
* @param options - The options the listener was registered with; only
|
|
38
|
+
* the capture flag is compared.
|
|
39
|
+
* @param item - The DomItem whose eventListeners will be searched.
|
|
40
|
+
* @returns A 2-element [index, matchingListener] tuple. If no match is
|
|
41
|
+
* found, index is -1 and matchingListener is undefined.
|
|
42
|
+
*/
|
|
43
|
+
const findEventListener = (eventName, listenerFunction, customArgs, options, item) => {
|
|
44
|
+
customArgs = customArgs ?? null;
|
|
45
|
+
if (!si_funciona_1.default.isObject(item.eventListeners)) {
|
|
46
|
+
return [-1, undefined];
|
|
47
|
+
}
|
|
48
|
+
if (typeof item.eventListeners[eventName] === 'undefined') {
|
|
49
|
+
return [-1, undefined];
|
|
50
|
+
}
|
|
51
|
+
const findListener = {
|
|
52
|
+
listenerFunc: listenerFunction,
|
|
53
|
+
listenerArgs: si_funciona_1.default.describeObject(customArgs)
|
|
54
|
+
};
|
|
55
|
+
const listenerIndex = item.eventListeners[eventName].findIndex(eventListener => {
|
|
56
|
+
const argDescriptor = si_funciona_1.default.describeObject(eventListener.listenerArgs);
|
|
57
|
+
return eventListener.listenerFunc === findListener.listenerFunc && si_funciona_1.default.sameDescriptor(findListener.listenerArgs, argDescriptor) && capturing(eventListener.listenerOptions) === capturing(options);
|
|
58
|
+
});
|
|
59
|
+
return [listenerIndex, item.eventListeners[eventName][listenerIndex]];
|
|
60
|
+
};
|
|
61
|
+
exports.default = findEventListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const si_funciona_1=__importDefault(require("si-funciona")),getListenerOptions_1=__importDefault(require("../objects/options/getListenerOptions")),optionsToNumber_1=__importDefault(require("../objects/options/optionsToNumber")),capturing=e=>{const t=(0,getListenerOptions_1.default)();return 0!==((0,optionsToNumber_1.default)(t,e)&t.capture)},findEventListener=(e,t,n,i,r)=>{if(n=n??null,!si_funciona_1.default.isObject(r.eventListeners))return[-1,void 0];if(void 0===r.eventListeners[e])return[-1,void 0];const s={listenerFunc:t,listenerArgs:si_funciona_1.default.describeObject(n)},o=r.eventListeners[e].findIndex(e=>{const t=si_funciona_1.default.describeObject(e.listenerArgs);return e.listenerFunc===s.listenerFunc&&si_funciona_1.default.sameDescriptor(s.listenerArgs,t)&&capturing(e.listenerOptions)===capturing(i)});return[o,r.eventListeners[e][o]]};exports.default=findEventListener;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
import type { EventName, ListenerFunction, ListenerOptions } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Register the listener function, attach it as a descriptor on the item, then bind it onto the
|
|
5
|
+
* real element - the full setup sequence for a single event listener, in order:
|
|
6
|
+
* 1. {@link registerListener} - store the real function in the root DomItem's eventActions, keyed by name.
|
|
7
|
+
* 2. {@link addEventListener} - push an EventListener descriptor referencing that name onto item.eventListeners.
|
|
8
|
+
* 3. {@link bindListeners} - activate and apply any unbound descriptors, attaching them to item.element.
|
|
9
|
+
*
|
|
10
|
+
* item is the last parameter (instead of name/customArgs/options having literal defaults) so addEventListener can
|
|
11
|
+
* be curried directly into the pipe below without an argument-reordering wrapper.
|
|
12
|
+
* @param eventName - The name of the trigger event (e.g. 'click').
|
|
13
|
+
* @param listener - The function to be called when the event is triggered.
|
|
14
|
+
* @param name - The name the listener will be registered under in eventActions.
|
|
15
|
+
* @param customArgs - Additional args passed through to the listener when called.
|
|
16
|
+
* @param options - Options to be used when the listener is attached to the element.
|
|
17
|
+
* @param item - The DomItem which will receive the event listener.
|
|
18
|
+
*/
|
|
19
|
+
declare const fullAddEventListener: (eventName: EventName, listener: ListenerFunction, name: string | null | undefined, customArgs: object | null | undefined, options: ListenerOptions | null | undefined, item: DomItem) => DomItem;
|
|
20
|
+
export default fullAddEventListener;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const curry_1 = __importDefault(require("si-funciona/dist/helpers/functions/curry"));
|
|
15
|
+
const pipe_1 = __importDefault(require("si-funciona/dist/helpers/functions/pipe"));
|
|
16
|
+
const getTopParentItem_1 = __importDefault(require("../../domItem/tree/getTopParentItem"));
|
|
17
|
+
const registerListener_1 = __importDefault(require("./registerListener"));
|
|
18
|
+
const addEventListener_1 = __importDefault(require("./addEventListener"));
|
|
19
|
+
const bindListeners_1 = __importDefault(require("./bindListeners"));
|
|
20
|
+
/**
|
|
21
|
+
* Register the listener function, attach it as a descriptor on the item, then bind it onto the
|
|
22
|
+
* real element - the full setup sequence for a single event listener, in order:
|
|
23
|
+
* 1. {@link registerListener} - store the real function in the root DomItem's eventActions, keyed by name.
|
|
24
|
+
* 2. {@link addEventListener} - push an EventListener descriptor referencing that name onto item.eventListeners.
|
|
25
|
+
* 3. {@link bindListeners} - activate and apply any unbound descriptors, attaching them to item.element.
|
|
26
|
+
*
|
|
27
|
+
* item is the last parameter (instead of name/customArgs/options having literal defaults) so addEventListener can
|
|
28
|
+
* be curried directly into the pipe below without an argument-reordering wrapper.
|
|
29
|
+
* @param eventName - The name of the trigger event (e.g. 'click').
|
|
30
|
+
* @param listener - The function to be called when the event is triggered.
|
|
31
|
+
* @param name - The name the listener will be registered under in eventActions.
|
|
32
|
+
* @param customArgs - Additional args passed through to the listener when called.
|
|
33
|
+
* @param options - Options to be used when the listener is attached to the element.
|
|
34
|
+
* @param item - The DomItem which will receive the event listener.
|
|
35
|
+
*/
|
|
36
|
+
const fullAddEventListener = (eventName, listener, name, customArgs, options, item) => {
|
|
37
|
+
const listenerName = name ?? listener.name;
|
|
38
|
+
customArgs = customArgs ?? null;
|
|
39
|
+
options = options ?? false;
|
|
40
|
+
return (0, pipe_1.default)(currentItem => {
|
|
41
|
+
(0, registerListener_1.default)(listener, listenerName, (0, getTopParentItem_1.default)(currentItem));
|
|
42
|
+
return currentItem;
|
|
43
|
+
}, (0, curry_1.default)(addEventListener_1.default)(eventName, listenerName, customArgs, options), bindListeners_1.default)(item);
|
|
44
|
+
};
|
|
45
|
+
exports.default = fullAddEventListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const curry_1=__importDefault(require("si-funciona/dist/helpers/functions/curry")),pipe_1=__importDefault(require("si-funciona/dist/helpers/functions/pipe")),getTopParentItem_1=__importDefault(require("../../domItem/tree/getTopParentItem")),registerListener_1=__importDefault(require("./registerListener")),addEventListener_1=__importDefault(require("./addEventListener")),bindListeners_1=__importDefault(require("./bindListeners")),fullAddEventListener=(e,t,r,i,n,u)=>{const s=r??t.name;return i=i??null,n=n??!1,(0,pipe_1.default)(e=>((0,registerListener_1.default)(t,s,(0,getTopParentItem_1.default)(e)),e),(0,curry_1.default)(addEventListener_1.default)(e,s,i,n),bindListeners_1.default)(u)};exports.default=fullAddEventListener;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
import type { EventName, ListenerFunction, ListenerOptions } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Find and remove a listener that was registered by name (e.g. via {@link fullAddEventListener}) - the counterpart
|
|
5
|
+
* to fullAddEventListener. Resolves name the same way fullAddEventListener defaults it, so a caller only needs the
|
|
6
|
+
* original listener function (not the internal name string it was registered under) to remove it:
|
|
7
|
+
* 1. Resolve name (defaults to listener.name, same as {@link fullAddEventListener}).
|
|
8
|
+
* 2. {@link removeEventListener} - find the descriptor by that name, detach it from the element if active, and
|
|
9
|
+
* splice it out of item.eventListeners.
|
|
10
|
+
*
|
|
11
|
+
* Does not remove the function from the root DomItem's eventActions registry, since that name may still be shared
|
|
12
|
+
* by other DomItems - see {@link registerListener}.
|
|
13
|
+
* @param eventName - The name of the trigger event (e.g. 'click').
|
|
14
|
+
* @param listener - The same function originally passed to fullAddEventListener.
|
|
15
|
+
* @param name - The name the listener was registered under in eventActions.
|
|
16
|
+
* @param customArgs - The custom args the listener was registered with.
|
|
17
|
+
* @param options - The options the listener was registered with.
|
|
18
|
+
* @param item - The DomItem to remove the listener from.
|
|
19
|
+
* @returns The same DomItem, with the matching listener removed if one was found.
|
|
20
|
+
*/
|
|
21
|
+
declare const fullRemoveEventListener: (eventName: EventName, listener: ListenerFunction, name: string | null | undefined, customArgs: object | null | undefined, options: ListenerOptions | null | undefined, item: DomItem) => DomItem;
|
|
22
|
+
export default fullRemoveEventListener;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const removeEventListener_1 = __importDefault(require("./removeEventListener"));
|
|
15
|
+
/**
|
|
16
|
+
* Find and remove a listener that was registered by name (e.g. via {@link fullAddEventListener}) - the counterpart
|
|
17
|
+
* to fullAddEventListener. Resolves name the same way fullAddEventListener defaults it, so a caller only needs the
|
|
18
|
+
* original listener function (not the internal name string it was registered under) to remove it:
|
|
19
|
+
* 1. Resolve name (defaults to listener.name, same as {@link fullAddEventListener}).
|
|
20
|
+
* 2. {@link removeEventListener} - find the descriptor by that name, detach it from the element if active, and
|
|
21
|
+
* splice it out of item.eventListeners.
|
|
22
|
+
*
|
|
23
|
+
* Does not remove the function from the root DomItem's eventActions registry, since that name may still be shared
|
|
24
|
+
* by other DomItems - see {@link registerListener}.
|
|
25
|
+
* @param eventName - The name of the trigger event (e.g. 'click').
|
|
26
|
+
* @param listener - The same function originally passed to fullAddEventListener.
|
|
27
|
+
* @param name - The name the listener was registered under in eventActions.
|
|
28
|
+
* @param customArgs - The custom args the listener was registered with.
|
|
29
|
+
* @param options - The options the listener was registered with.
|
|
30
|
+
* @param item - The DomItem to remove the listener from.
|
|
31
|
+
* @returns The same DomItem, with the matching listener removed if one was found.
|
|
32
|
+
*/
|
|
33
|
+
const fullRemoveEventListener = (eventName, listener, name, customArgs, options, item) => {
|
|
34
|
+
const listenerName = name ?? listener.name;
|
|
35
|
+
return (0, removeEventListener_1.default)(eventName, listenerName, customArgs, options, item);
|
|
36
|
+
};
|
|
37
|
+
exports.default = fullRemoveEventListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const removeEventListener_1=__importDefault(require("./removeEventListener")),fullRemoveEventListener=(e,t,r,n,o,u)=>{const s=r??t.name;return(0,removeEventListener_1.default)(e,s,n,o,u)};exports.default=fullRemoveEventListener;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ListenerOptions } from '../types';
|
|
2
|
+
/** The options which will be used, and a flag remembering whether the browser understands an options object. */
|
|
3
|
+
type ListenerOptionsSupport = {
|
|
4
|
+
(options?: ListenerOptions | null): ListenerOptions | null;
|
|
5
|
+
supportsOptions?: boolean;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Provide compatibility for using the options parameter of addEventListener
|
|
9
|
+
* @param options - An object or boolean with the listener options
|
|
10
|
+
*/
|
|
11
|
+
declare const listenerOptions: ListenerOptionsSupport;
|
|
12
|
+
export default listenerOptions;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Provide compatibility for using the options parameter of addEventListener
|
|
11
|
+
* @param options - An object or boolean with the listener options
|
|
12
|
+
*/
|
|
13
|
+
const listenerOptions = options => {
|
|
14
|
+
if (typeof listenerOptions.supportsOptions === 'undefined') {
|
|
15
|
+
// Check if supportsOptions has been defined. This is a compatibility checking flag.
|
|
16
|
+
listenerOptions.supportsOptions = true;
|
|
17
|
+
try {
|
|
18
|
+
// If it is possible to use OptionsObject, then set our flag to true
|
|
19
|
+
window.addEventListener('test', null, {
|
|
20
|
+
capture: false,
|
|
21
|
+
once: false,
|
|
22
|
+
passive: false
|
|
23
|
+
});
|
|
24
|
+
} catch (err) {
|
|
25
|
+
// When using an OptionsObjects fails, it is only possible to pass the boolean UseCapture as the option
|
|
26
|
+
listenerOptions.supportsOptions = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return typeof options === 'object' && listenerOptions.supportsOptions ? options : false;
|
|
30
|
+
};
|
|
31
|
+
exports.default = listenerOptions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const listenerOptions=t=>{if(void 0===listenerOptions.supportsOptions){listenerOptions.supportsOptions=!0;try{window.addEventListener("test",null,{capture:!1,once:!1,passive:!1})}catch(t){listenerOptions.supportsOptions=!1}}return!("object"!=typeof t||!listenerOptions.supportsOptions)&&t};exports.default=listenerOptions;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
import type { EventHandler, ListenerFunction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Prepare a listener to be used before assigning to an element.
|
|
5
|
+
* @param listener
|
|
6
|
+
* @param item
|
|
7
|
+
* @param args
|
|
8
|
+
*/
|
|
9
|
+
declare const makeEventHandler: (listener: ListenerFunction, item: DomItem, ...args: unknown[]) => EventHandler;
|
|
10
|
+
export default makeEventHandler;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
/**
|
|
10
|
+
* Prepare a listener to be used before assigning to an element.
|
|
11
|
+
* @param listener
|
|
12
|
+
* @param item
|
|
13
|
+
* @param args
|
|
14
|
+
*/
|
|
15
|
+
const makeEventHandler = (listener, item, ...args) => {
|
|
16
|
+
return event => {
|
|
17
|
+
if (!event || event.immediatePropagationStopped) {
|
|
18
|
+
return event;
|
|
19
|
+
}
|
|
20
|
+
return listener(event, item, ...args);
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
exports.default = makeEventHandler;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const makeEventHandler=(e,t,...a)=>o=>!o||o.immediatePropagationStopped?o:e(o,t,...a);exports.default=makeEventHandler;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ForwardEventsFunction, ListenerFunction } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Build the listener function used in render-only mode: instead of running real logic locally, it packages the
|
|
4
|
+
* event as a plain envelope (the id of the item it fired on, the event type, the registered listener name, any
|
|
5
|
+
* custom args, and any live target state - see captureTargetState) and hands it to the injected transport
|
|
6
|
+
* function. See retrieveListener.
|
|
7
|
+
* @param listenerName - The registered name this forwarder stands in for.
|
|
8
|
+
* @param transport - Where the envelope is sent (set on the root item with setForwardEvents).
|
|
9
|
+
*/
|
|
10
|
+
declare const makeForwardingListener: (listenerName: string, transport: ForwardEventsFunction) => ListenerFunction;
|
|
11
|
+
export default makeForwardingListener;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
require("core-js/modules/es.array.includes.js");
|
|
7
|
+
Object.defineProperty(exports, "__esModule", {
|
|
8
|
+
value: true
|
|
9
|
+
});
|
|
10
|
+
/** Form-control elements whose state a listener might read directly off the event target. */
|
|
11
|
+
const FORM_CONTROL_TAGS = ['INPUT', 'SELECT', 'TEXTAREA'];
|
|
12
|
+
/**
|
|
13
|
+
* Whatever live state a listener commonly reads directly off the real event's target - a checkbox's checked, an
|
|
14
|
+
* input's value - captured here since the receiving end's corresponding element is otherwise an independent object
|
|
15
|
+
* with no way to know what the user actually set. Omitted for anything that is not a form control (every element
|
|
16
|
+
* has a non-undefined value or checked is not a safe enough check on its own - a plain button also has a value,
|
|
17
|
+
* defaulting to '', and any input has checked defaulting to false even when it is not a checkbox).
|
|
18
|
+
* @param target
|
|
19
|
+
*/
|
|
20
|
+
const captureTargetState = target => {
|
|
21
|
+
const element = target;
|
|
22
|
+
if (!element || !FORM_CONTROL_TAGS.includes(element.tagName)) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
return element.type === 'checkbox' || element.type === 'radio' ? {
|
|
26
|
+
checked: element.checked
|
|
27
|
+
} : {
|
|
28
|
+
value: element.value
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Build the listener function used in render-only mode: instead of running real logic locally, it packages the
|
|
33
|
+
* event as a plain envelope (the id of the item it fired on, the event type, the registered listener name, any
|
|
34
|
+
* custom args, and any live target state - see captureTargetState) and hands it to the injected transport
|
|
35
|
+
* function. See retrieveListener.
|
|
36
|
+
* @param listenerName - The registered name this forwarder stands in for.
|
|
37
|
+
* @param transport - Where the envelope is sent (set on the root item with setForwardEvents).
|
|
38
|
+
*/
|
|
39
|
+
const makeForwardingListener = (listenerName, transport) => (event, item, ...args) => transport({
|
|
40
|
+
itemId: (event.domItemTarget ?? item).id,
|
|
41
|
+
eventType: event.type,
|
|
42
|
+
listenerFunc: listenerName,
|
|
43
|
+
data: args,
|
|
44
|
+
targetState: captureTargetState(event.target)
|
|
45
|
+
});
|
|
46
|
+
exports.default = makeForwardingListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/es.array.includes.js"),Object.defineProperty(exports,"__esModule",{value:!0});const FORM_CONTROL_TAGS=["INPUT","SELECT","TEXTAREA"],captureTargetState=e=>{const t=e;if(t&&FORM_CONTROL_TAGS.includes(t.tagName))return"checkbox"===t.type||"radio"===t.type?{checked:t.checked}:{value:t.value}},makeForwardingListener=(e,t)=>(r,a,...c)=>t({itemId:(r.domItemTarget??a).id,eventType:r.type,listenerFunc:e,data:c,targetState:captureTargetState(r.target)});exports.default=makeForwardingListener;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { DomItem, DomItemRoot } from '../../domItem/types';
|
|
2
|
+
import type { ForwardedEvent } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Decides whether a resolved, incoming envelope may actually be dispatched. See receiveForwardedEvent's own
|
|
5
|
+
* validator parameter - an id only makes resolution correct, not authorized, so anything that needs to check
|
|
6
|
+
* who an id actually belongs to (not just that it resolves to a real item) plugs in here.
|
|
7
|
+
*/
|
|
8
|
+
export type ForwardedEventValidator = (resolvedItem: DomItem, envelope: ForwardedEvent) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* The receiving end of makeForwardingListener's envelope: resolve the item it was built for, replay any live target
|
|
11
|
+
* state it carried onto that item's real element (see captureTargetState in makeForwardingListener), then dispatch
|
|
12
|
+
* a real event of the same type on it. The resolved item's own, already-bound listener runs exactly as it would for
|
|
13
|
+
* a genuine local event - nothing here needs to know what that listener does.
|
|
14
|
+
* @param root - The tree to resolve the envelope's itemId against. Its listeners must be the real ones (not
|
|
15
|
+
* itself set up with setForwardEvents), or this would just forward the event again instead of running it.
|
|
16
|
+
* @param envelope - As produced by makeForwardingListener on the sending end.
|
|
17
|
+
* @param validator - Optional: when given and it returns false for the resolved item, the event is never
|
|
18
|
+
* dispatched. Resolving by id is correct (it finds the right item even if this root's own tree shape differs
|
|
19
|
+
* from the sender's), but not authorized on its own - a validator is the one place to plug an ownership check
|
|
20
|
+
* in, instead of every caller re-deriving "resolve first, then check, then dispatch" by hand.
|
|
21
|
+
*/
|
|
22
|
+
declare const receiveForwardedEvent: (root: DomItemRoot, envelope: ForwardedEvent, validator?: ForwardedEventValidator) => void;
|
|
23
|
+
export default receiveForwardedEvent;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
Object.defineProperty(exports, "__esModule", {
|
|
7
|
+
value: true
|
|
8
|
+
});
|
|
9
|
+
const itemIdIndex_1 = require("../../domItem/tree/itemIdIndex");
|
|
10
|
+
/**
|
|
11
|
+
* The receiving end of makeForwardingListener's envelope: resolve the item it was built for, replay any live target
|
|
12
|
+
* state it carried onto that item's real element (see captureTargetState in makeForwardingListener), then dispatch
|
|
13
|
+
* a real event of the same type on it. The resolved item's own, already-bound listener runs exactly as it would for
|
|
14
|
+
* a genuine local event - nothing here needs to know what that listener does.
|
|
15
|
+
* @param root - The tree to resolve the envelope's itemId against. Its listeners must be the real ones (not
|
|
16
|
+
* itself set up with setForwardEvents), or this would just forward the event again instead of running it.
|
|
17
|
+
* @param envelope - As produced by makeForwardingListener on the sending end.
|
|
18
|
+
* @param validator - Optional: when given and it returns false for the resolved item, the event is never
|
|
19
|
+
* dispatched. Resolving by id is correct (it finds the right item even if this root's own tree shape differs
|
|
20
|
+
* from the sender's), but not authorized on its own - a validator is the one place to plug an ownership check
|
|
21
|
+
* in, instead of every caller re-deriving "resolve first, then check, then dispatch" by hand.
|
|
22
|
+
*/
|
|
23
|
+
const receiveForwardedEvent = (root, envelope, validator) => {
|
|
24
|
+
const resolvedItem = (0, itemIdIndex_1.getItemById)(root, envelope.itemId);
|
|
25
|
+
if (validator && !validator(resolvedItem, envelope)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const element = resolvedItem.element;
|
|
29
|
+
if (!element) {
|
|
30
|
+
throw new Error('The resolved item has no element to dispatch the event on.');
|
|
31
|
+
}
|
|
32
|
+
if (envelope.targetState) {
|
|
33
|
+
Object.assign(element, envelope.targetState);
|
|
34
|
+
}
|
|
35
|
+
element.dispatchEvent(new Event(envelope.eventType, {
|
|
36
|
+
bubbles: true,
|
|
37
|
+
cancelable: true
|
|
38
|
+
}));
|
|
39
|
+
};
|
|
40
|
+
exports.default = receiveForwardedEvent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const itemIdIndex_1=require("../../domItem/tree/itemIdIndex"),receiveForwardedEvent=(e,t,r)=>{const n=(0,itemIdIndex_1.getItemById)(e,t.itemId);if(r&&!r(n,t))return;const d=n.element;if(!d)throw new Error("The resolved item has no element to dispatch the event on.");t.targetState&&Object.assign(d,t.targetState),d.dispatchEvent(new Event(t.eventType,{bubbles:!0,cancelable:!0}))};exports.default=receiveForwardedEvent;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DomItemRoot } from '../../domItem/types';
|
|
2
|
+
import type { ListenerFunction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Register a single listener function as part of the root domEvents.DomItem.
|
|
5
|
+
* @param listener - Provide a function which will be called
|
|
6
|
+
* when a Dom event is triggered.
|
|
7
|
+
* @param name - The name of the listener to be used.
|
|
8
|
+
* @param parent - The parent DomItem which is DomItemRoot which stores eventListeners property.
|
|
9
|
+
*/
|
|
10
|
+
declare const registerListener: (listener: ListenerFunction, name?: string, parent?: DomItemRoot) => Record<string, ListenerFunction>;
|
|
11
|
+
export default registerListener;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const documentItem_1 = __importDefault(require("../../domItem/objects/documentItem"));
|
|
15
|
+
/**
|
|
16
|
+
* Register a single listener function as part of the root domEvents.DomItem.
|
|
17
|
+
* @param listener - Provide a function which will be called
|
|
18
|
+
* when a Dom event is triggered.
|
|
19
|
+
* @param name - The name of the listener to be used.
|
|
20
|
+
* @param parent - The parent DomItem which is DomItemRoot which stores eventListeners property.
|
|
21
|
+
*/
|
|
22
|
+
const registerListener = (listener, name = listener.name, parent = (0, documentItem_1.default)()) => Object.assign(parent.eventActions, {
|
|
23
|
+
[name]: listener
|
|
24
|
+
});
|
|
25
|
+
exports.default = registerListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const documentItem_1=__importDefault(require("../../domItem/objects/documentItem")),registerListener=(e,t=e.name,r=(0,documentItem_1.default)())=>Object.assign(r.eventActions,{[t]:e});exports.default=registerListener;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DomItemRoot } from '../../domItem/types';
|
|
2
|
+
import type { ListenerFunction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Register multiple listeners from an array of functions.
|
|
5
|
+
* @param listeners - An array of functions to be
|
|
6
|
+
* used as the registered event listeners.
|
|
7
|
+
* @param parent - The parent DomItem which is DomItemRoot which has eventActions property.
|
|
8
|
+
*/
|
|
9
|
+
declare const registerListeners: (listeners: ListenerFunction[] | Record<string, ListenerFunction>, parent?: DomItemRoot) => DomItemRoot;
|
|
10
|
+
export default registerListeners;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const si_funciona_1 = __importDefault(require("si-funciona"));
|
|
15
|
+
const documentItem_1 = __importDefault(require("../../domItem/objects/documentItem"));
|
|
16
|
+
/**
|
|
17
|
+
* Register multiple listeners from an array of functions.
|
|
18
|
+
* @param listeners - An array of functions to be
|
|
19
|
+
* used as the registered event listeners.
|
|
20
|
+
* @param parent - The parent DomItem which is DomItemRoot which has eventActions property.
|
|
21
|
+
*/
|
|
22
|
+
const registerListeners = (listeners, parent = (0, documentItem_1.default)()) => {
|
|
23
|
+
si_funciona_1.default.mergeObjectsMutable(parent.eventActions, listeners);
|
|
24
|
+
return parent;
|
|
25
|
+
};
|
|
26
|
+
exports.default = registerListeners;
|