treeloom 0.0.0-stage → 2.0.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 +72 -2
- package/browser/treeloom.js +11006 -0
- package/browser/treeloom.min.js +1 -0
- package/browser/treeloomRenderOnly.js +10530 -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/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 +154 -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 +8 -0
- package/dist/render/index.js +25 -0
- package/dist/render/index.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 +56 -0
- package/dist/render/updateChildNodes.min.js +1 -0
- package/dist/render/updateElement.d.ts +14 -0
- package/dist/render/updateElement.js +110 -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 +49 -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,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;
|
|
@@ -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")),documentItem_1=__importDefault(require("../../domItem/objects/documentItem")),registerListeners=(e,t=(0,documentItem_1.default)())=>(si_funciona_1.default.mergeObjectsMutable(t.eventActions,e),t);exports.default=registerListeners;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
import type { EventName, ListenerFunction, ListenerOptions } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Find and remove an event listener from a DomItem: detaches it from the element first (via
|
|
5
|
+
* {@link deactivateListener}) if it was active, then splices its descriptor out of eventListeners. A no-op if no
|
|
6
|
+
* matching listener is found.
|
|
7
|
+
*
|
|
8
|
+
* item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
|
|
9
|
+
* piped directly - see {@link fullAddEventListener} for an example of the pattern.
|
|
10
|
+
* @param eventName - The name of the trigger event the listener was registered under.
|
|
11
|
+
* @param listenerFunction - The listener function to match against.
|
|
12
|
+
* @param customArgs - The custom args the listener was registered with.
|
|
13
|
+
* @param options - The options the listener was registered with.
|
|
14
|
+
* @param item - The DomItem to remove the listener from.
|
|
15
|
+
* @returns The same DomItem, with the matching listener removed if one was found.
|
|
16
|
+
*/
|
|
17
|
+
declare const removeEventListener: (eventName: EventName, listenerFunction: string | ListenerFunction, customArgs: object | null | undefined, options: ListenerOptions | null | undefined, item: DomItem) => DomItem;
|
|
18
|
+
export default removeEventListener;
|
|
@@ -0,0 +1,42 @@
|
|
|
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 findEventListener_1 = __importDefault(require("./findEventListener"));
|
|
15
|
+
const deactivateListener_1 = __importDefault(require("./deactivateListener"));
|
|
16
|
+
/**
|
|
17
|
+
* Find and remove an event listener from a DomItem: detaches it from the element first (via
|
|
18
|
+
* {@link deactivateListener}) if it was active, then splices its descriptor out of eventListeners. A no-op if no
|
|
19
|
+
* matching listener is found.
|
|
20
|
+
*
|
|
21
|
+
* item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
|
|
22
|
+
* piped directly - see {@link fullAddEventListener} for an example of the pattern.
|
|
23
|
+
* @param eventName - The name of the trigger event the listener was registered under.
|
|
24
|
+
* @param listenerFunction - The listener function to match against.
|
|
25
|
+
* @param customArgs - The custom args the listener was registered with.
|
|
26
|
+
* @param options - The options the listener was registered with.
|
|
27
|
+
* @param item - The DomItem to remove the listener from.
|
|
28
|
+
* @returns The same DomItem, with the matching listener removed if one was found.
|
|
29
|
+
*/
|
|
30
|
+
const removeEventListener = (eventName, listenerFunction, customArgs, options, item) => {
|
|
31
|
+
const [listenerIndex, foundListener] = (0, findEventListener_1.default)(eventName, listenerFunction, customArgs, options, item);
|
|
32
|
+
if (listenerIndex < 0 || typeof foundListener === 'undefined') {
|
|
33
|
+
// listener not found
|
|
34
|
+
return item;
|
|
35
|
+
}
|
|
36
|
+
if (foundListener.listenerActive === true) {
|
|
37
|
+
item = (0, deactivateListener_1.default)(eventName, foundListener, item);
|
|
38
|
+
}
|
|
39
|
+
item.eventListeners[eventName].splice(listenerIndex, 1);
|
|
40
|
+
return item;
|
|
41
|
+
};
|
|
42
|
+
exports.default = removeEventListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const findEventListener_1=__importDefault(require("./findEventListener")),deactivateListener_1=__importDefault(require("./deactivateListener")),removeEventListener=(e,t,r,i,n)=>{const[s,u]=(0,findEventListener_1.default)(e,t,r,i,n);return s<0||void 0===u||(!0===u.listenerActive&&(n=(0,deactivateListener_1.default)(e,u,n)),n.eventListeners[e].splice(s,1)),n};exports.default=removeEventListener;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DomItemRoot } from '../../domItem/types';
|
|
2
|
+
import type { ListenerFunction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Based on the provided function / listener name, retrieve the associated function from the root domEvents.DomItem.
|
|
5
|
+
* If a raw function is passed instead of a registered name, it is returned as-is - see {@link EventListener}'s
|
|
6
|
+
* listenerFunc property for the tradeoffs of that discretionary path. When the root has forwardEvents set (render-
|
|
7
|
+
* only mode - see setForwardEvents), every name resolves to a forwarder instead, whether or not it is registered in
|
|
8
|
+
* eventActions: see makeForwardingListener.
|
|
9
|
+
* @param listenerName - The name of one of the registered listener functions, or an
|
|
10
|
+
* already-resolved listener function.
|
|
11
|
+
* @param parent - The parent DomItem which is DomItemRoot which stores eventListeners property.
|
|
12
|
+
*/
|
|
13
|
+
declare const retrieveListener: (listenerName: string | ListenerFunction, parent?: DomItemRoot) => ListenerFunction;
|
|
14
|
+
export default retrieveListener;
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
8
|
+
return mod && mod.__esModule ? mod : {
|
|
9
|
+
"default": mod
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", {
|
|
13
|
+
value: true
|
|
14
|
+
});
|
|
15
|
+
const documentItem_1 = __importDefault(require("../../domItem/objects/documentItem"));
|
|
16
|
+
const makeForwardingListener_1 = __importDefault(require("./makeForwardingListener"));
|
|
17
|
+
/**
|
|
18
|
+
* Based on the provided function / listener name, retrieve the associated function from the root domEvents.DomItem.
|
|
19
|
+
* If a raw function is passed instead of a registered name, it is returned as-is - see {@link EventListener}'s
|
|
20
|
+
* listenerFunc property for the tradeoffs of that discretionary path. When the root has forwardEvents set (render-
|
|
21
|
+
* only mode - see setForwardEvents), every name resolves to a forwarder instead, whether or not it is registered in
|
|
22
|
+
* eventActions: see makeForwardingListener.
|
|
23
|
+
* @param listenerName - The name of one of the registered listener functions, or an
|
|
24
|
+
* already-resolved listener function.
|
|
25
|
+
* @param parent - The parent DomItem which is DomItemRoot which stores eventListeners property.
|
|
26
|
+
*/
|
|
27
|
+
const retrieveListener = (listenerName, parent = (0, documentItem_1.default)()) => {
|
|
28
|
+
if (typeof listenerName === 'function') {
|
|
29
|
+
return listenerName;
|
|
30
|
+
}
|
|
31
|
+
if (parent.forwardEvents) {
|
|
32
|
+
return (0, makeForwardingListener_1.default)(listenerName, parent.forwardEvents);
|
|
33
|
+
}
|
|
34
|
+
if (!Object.keys(parent.eventActions).includes(listenerName)) {
|
|
35
|
+
throw new Error(`Undefined listener function on this DomItemRoot: ${listenerName}`);
|
|
36
|
+
}
|
|
37
|
+
return parent.eventActions[listenerName];
|
|
38
|
+
};
|
|
39
|
+
exports.default = retrieveListener;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/es.array.includes.js");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")),makeForwardingListener_1=__importDefault(require("./makeForwardingListener")),retrieveListener=(e,t=(0,documentItem_1.default)())=>{if("function"==typeof e)return e;if(t.forwardEvents)return(0,makeForwardingListener_1.default)(e,t.forwardEvents);if(!Object.keys(t.eventActions).includes(e))throw new Error(`Undefined listener function on this DomItemRoot: ${e}`);return t.eventActions[e]};exports.default=retrieveListener;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DomItem } from '../../domItem/types';
|
|
2
|
+
import type { EventName } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Detach every active listener for one event type from a DomItem's element, regardless of which EventListener
|
|
5
|
+
* descriptor each one belongs to, and clear that event's activeListeners bucket. Unlike {@link deactivateListener},
|
|
6
|
+
* this does not update the listenerActive/activeResponder state on the individual descriptors.
|
|
7
|
+
* @param eventName - The name of the trigger event whose active listeners will be revoked.
|
|
8
|
+
* @param item - The DomItem to revoke active listeners from.
|
|
9
|
+
* @returns The same DomItem, with all active listeners for this event detached.
|
|
10
|
+
*/
|
|
11
|
+
declare const revokeActiveListeners: (eventName: EventName, item: DomItem) => DomItem;
|
|
12
|
+
export default revokeActiveListeners;
|
|
@@ -0,0 +1,54 @@
|
|
|
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 numberToOptions_1 = __importDefault(require("../objects/options/numberToOptions"));
|
|
17
|
+
const unassignListener_1 = __importDefault(require("./unassignListener"));
|
|
18
|
+
/**
|
|
19
|
+
* Detach every active listener for one event type from a DomItem's element, regardless of which EventListener
|
|
20
|
+
* descriptor each one belongs to, and clear that event's activeListeners bucket. Unlike {@link deactivateListener},
|
|
21
|
+
* this does not update the listenerActive/activeResponder state on the individual descriptors.
|
|
22
|
+
* @param eventName - The name of the trigger event whose active listeners will be revoked.
|
|
23
|
+
* @param item - The DomItem to revoke active listeners from.
|
|
24
|
+
* @returns The same DomItem, with all active listeners for this event detached.
|
|
25
|
+
*/
|
|
26
|
+
const revokeActiveListeners = (eventName, item) => {
|
|
27
|
+
const listenerOptions = (0, getListenerOptions_1.default)();
|
|
28
|
+
const eventOptions = si_funciona_1.default.dotGet(item, `activeListeners.${eventName}`);
|
|
29
|
+
if (eventOptions === null) {
|
|
30
|
+
return item;
|
|
31
|
+
}
|
|
32
|
+
si_funciona_1.default.objectKeys(eventOptions).forEach(binaryOptions => {
|
|
33
|
+
const optionsToUse = (0, numberToOptions_1.default)(listenerOptions, parseInt(binaryOptions));
|
|
34
|
+
const usesSignal = !!optionsToUse.signal;
|
|
35
|
+
if (!usesSignal) {
|
|
36
|
+
// Abort signal must be undefined if it is not required.
|
|
37
|
+
delete optionsToUse.signal;
|
|
38
|
+
}
|
|
39
|
+
;
|
|
40
|
+
item.activeListeners[eventName][Number(binaryOptions)].forEach(eventResponder => {
|
|
41
|
+
if (!eventResponder.assignedHandler) {
|
|
42
|
+
// never actually attached to the element, nothing to detach
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const finalOptions = usesSignal ? Object.assign({}, optionsToUse, {
|
|
46
|
+
signal: eventResponder.abort.signal
|
|
47
|
+
}) : optionsToUse;
|
|
48
|
+
(0, unassignListener_1.default)(eventName, item.element, eventResponder.assignedHandler, finalOptions);
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
delete item.activeListeners[eventName];
|
|
52
|
+
return item;
|
|
53
|
+
};
|
|
54
|
+
exports.default = revokeActiveListeners;
|
|
@@ -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")),numberToOptions_1=__importDefault(require("../objects/options/numberToOptions")),unassignListener_1=__importDefault(require("./unassignListener")),revokeActiveListeners=(e,t)=>{const n=(0,getListenerOptions_1.default)(),s=si_funciona_1.default.dotGet(t,`activeListeners.${e}`);return null===s||(si_funciona_1.default.objectKeys(s).forEach(s=>{const i=(0,numberToOptions_1.default)(n,parseInt(s)),r=!!i.signal;r||delete i.signal,t.activeListeners[e][Number(s)].forEach(n=>{if(!n.assignedHandler)return;const s=r?Object.assign({},i,{signal:n.abort.signal}):i;(0,unassignListener_1.default)(e,t.element,n.assignedHandler,s)})}),delete t.activeListeners[e]),t};exports.default=revokeActiveListeners;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DomItemRoot } from '../../domItem/types';
|
|
2
|
+
import type { ForwardEventsFunction } from '../types';
|
|
3
|
+
/**
|
|
4
|
+
* Switch the root item into render-only mode: every registered listener name resolves to a forwarder instead of a
|
|
5
|
+
* local function (see retrieveListener, makeForwardingListener), so no local listener functions need to be
|
|
6
|
+
* registered at all.
|
|
7
|
+
* @param transport - Called with the envelope of each forwarded event.
|
|
8
|
+
* @param parent - The parent DomItem which is DomItemRoot to switch into render-only mode.
|
|
9
|
+
*/
|
|
10
|
+
declare const setForwardEvents: (transport: ForwardEventsFunction, parent?: DomItemRoot) => DomItemRoot;
|
|
11
|
+
export default setForwardEvents;
|
|
@@ -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 documentItem_1 = __importDefault(require("../../domItem/objects/documentItem"));
|
|
15
|
+
/**
|
|
16
|
+
* Switch the root item into render-only mode: every registered listener name resolves to a forwarder instead of a
|
|
17
|
+
* local function (see retrieveListener, makeForwardingListener), so no local listener functions need to be
|
|
18
|
+
* registered at all.
|
|
19
|
+
* @param transport - Called with the envelope of each forwarded event.
|
|
20
|
+
* @param parent - The parent DomItem which is DomItemRoot to switch into render-only mode.
|
|
21
|
+
*/
|
|
22
|
+
const setForwardEvents = (transport, parent = (0, documentItem_1.default)()) => {
|
|
23
|
+
parent.forwardEvents = transport;
|
|
24
|
+
return parent;
|
|
25
|
+
};
|
|
26
|
+
exports.default = setForwardEvents;
|
|
@@ -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")),setForwardEvents=(e,t=(0,documentItem_1.default)())=>(t.forwardEvents=e,t);exports.default=setForwardEvents;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { EventHandler, ListenerOptions, ListenerTarget } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Provide compatibility for unassigning listeners.
|
|
4
|
+
* @param trigger - The name of the event which will trigger the listenerFunction on the element. (keyof HTMLElementEventMap)
|
|
5
|
+
* @param elem - An element to append the listener onto
|
|
6
|
+
* @param fn - The function which will be invoked when the
|
|
7
|
+
* event is triggered
|
|
8
|
+
* @param options - Additional options to how the event will be
|
|
9
|
+
* fired
|
|
10
|
+
*/
|
|
11
|
+
declare const unassignListener: (trigger: string, elem: ListenerTarget, fn: EventHandler, options?: ListenerOptions) => EventHandler;
|
|
12
|
+
export default unassignListener;
|