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.
Files changed (289) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +91 -2
  3. package/browser/treeloom.js +11232 -0
  4. package/browser/treeloom.min.js +1 -0
  5. package/browser/treeloomRenderOnly.js +11115 -0
  6. package/browser/treeloomRenderOnly.min.js +1 -0
  7. package/dist/deflate/domItemToJson.d.ts +14 -0
  8. package/dist/deflate/domItemToJson.js +43 -0
  9. package/dist/deflate/domItemToJson.min.js +1 -0
  10. package/dist/deflate/index.d.ts +7 -0
  11. package/dist/deflate/index.js +19 -0
  12. package/dist/deflate/index.min.js +1 -0
  13. package/dist/deflate/removeEmptyProperties.d.ts +8 -0
  14. package/dist/deflate/removeEmptyProperties.js +43 -0
  15. package/dist/deflate/removeEmptyProperties.min.js +1 -0
  16. package/dist/diff/appliedSnapshot.d.ts +34 -0
  17. package/dist/diff/appliedSnapshot.js +134 -0
  18. package/dist/diff/appliedSnapshot.min.js +1 -0
  19. package/dist/diff/createChangeList.d.ts +9 -0
  20. package/dist/diff/createChangeList.js +44 -0
  21. package/dist/diff/createChangeList.min.js +1 -0
  22. package/dist/diff/domItemChanges.d.ts +9 -0
  23. package/dist/diff/domItemChanges.js +167 -0
  24. package/dist/diff/domItemChanges.min.js +1 -0
  25. package/dist/diff/domItemHasAttribute.d.ts +11 -0
  26. package/dist/diff/domItemHasAttribute.js +63 -0
  27. package/dist/diff/domItemHasAttribute.min.js +1 -0
  28. package/dist/diff/elementChanges.d.ts +10 -0
  29. package/dist/diff/elementChanges.js +151 -0
  30. package/dist/diff/elementChanges.min.js +1 -0
  31. package/dist/diff/elementHasAttribute.d.ts +10 -0
  32. package/dist/diff/elementHasAttribute.js +70 -0
  33. package/dist/diff/elementHasAttribute.min.js +1 -0
  34. package/dist/diff/getAssignedStyles.d.ts +9 -0
  35. package/dist/diff/getAssignedStyles.js +22 -0
  36. package/dist/diff/getAssignedStyles.min.js +1 -0
  37. package/dist/diff/index.d.ts +9 -0
  38. package/dist/diff/index.js +27 -0
  39. package/dist/diff/index.min.js +1 -0
  40. package/dist/diff/types.d.ts +17 -0
  41. package/dist/diff/types.js +8 -0
  42. package/dist/diff/types.min.js +1 -0
  43. package/dist/domItem/index.d.ts +34 -0
  44. package/dist/domItem/index.js +81 -0
  45. package/dist/domItem/index.min.js +1 -0
  46. package/dist/domItem/objects/addDomItemProperties.d.ts +7 -0
  47. package/dist/domItem/objects/addDomItemProperties.js +27 -0
  48. package/dist/domItem/objects/addDomItemProperties.min.js +1 -0
  49. package/dist/domItem/objects/createCoreItem.d.ts +9 -0
  50. package/dist/domItem/objects/createCoreItem.js +53 -0
  51. package/dist/domItem/objects/createCoreItem.min.js +1 -0
  52. package/dist/domItem/objects/createDomItem.d.ts +10 -0
  53. package/dist/domItem/objects/createDomItem.js +40 -0
  54. package/dist/domItem/objects/createDomItem.min.js +1 -0
  55. package/dist/domItem/objects/documentDomItem.d.ts +12 -0
  56. package/dist/domItem/objects/documentDomItem.js +36 -0
  57. package/dist/domItem/objects/documentDomItem.min.js +1 -0
  58. package/dist/domItem/objects/documentItem.d.ts +18 -0
  59. package/dist/domItem/objects/documentItem.js +40 -0
  60. package/dist/domItem/objects/documentItem.min.js +1 -0
  61. package/dist/domItem/objects/initChildren.d.ts +6 -0
  62. package/dist/domItem/objects/initChildren.js +44 -0
  63. package/dist/domItem/objects/initChildren.min.js +1 -0
  64. package/dist/domItem/objects/initRoot.d.ts +9 -0
  65. package/dist/domItem/objects/initRoot.js +32 -0
  66. package/dist/domItem/objects/initRoot.min.js +1 -0
  67. package/dist/domItem/query/gatherChildItems.d.ts +12 -0
  68. package/dist/domItem/query/gatherChildItems.js +19 -0
  69. package/dist/domItem/query/gatherChildItems.min.js +1 -0
  70. package/dist/domItem/query/getChildTest.d.ts +8 -0
  71. package/dist/domItem/query/getChildTest.js +15 -0
  72. package/dist/domItem/query/getChildTest.min.js +1 -0
  73. package/dist/domItem/query/getChildrenByClass.d.ts +11 -0
  74. package/dist/domItem/query/getChildrenByClass.js +26 -0
  75. package/dist/domItem/query/getChildrenByClass.min.js +1 -0
  76. package/dist/domItem/query/getChildrenByName.d.ts +9 -0
  77. package/dist/domItem/query/getChildrenByName.js +23 -0
  78. package/dist/domItem/query/getChildrenByName.min.js +1 -0
  79. package/dist/domItem/query/getChildrenFromAttribute.d.ts +13 -0
  80. package/dist/domItem/query/getChildrenFromAttribute.js +28 -0
  81. package/dist/domItem/query/getChildrenFromAttribute.min.js +1 -0
  82. package/dist/domItem/query/getItemByElement.d.ts +11 -0
  83. package/dist/domItem/query/getItemByElement.js +29 -0
  84. package/dist/domItem/query/getItemByElement.min.js +1 -0
  85. package/dist/domItem/query/getParentsByClass.d.ts +12 -0
  86. package/dist/domItem/query/getParentsByClass.js +40 -0
  87. package/dist/domItem/query/getParentsByClass.min.js +1 -0
  88. package/dist/domItem/query/getParentsByName.d.ts +9 -0
  89. package/dist/domItem/query/getParentsByName.js +23 -0
  90. package/dist/domItem/query/getParentsByName.min.js +1 -0
  91. package/dist/domItem/query/getParentsByTagName.d.ts +9 -0
  92. package/dist/domItem/query/getParentsByTagName.js +23 -0
  93. package/dist/domItem/query/getParentsByTagName.min.js +1 -0
  94. package/dist/domItem/query/getParentsFromAttribute.d.ts +13 -0
  95. package/dist/domItem/query/getParentsFromAttribute.js +39 -0
  96. package/dist/domItem/query/getParentsFromAttribute.min.js +1 -0
  97. package/dist/domItem/traits/defineTrait.d.ts +10 -0
  98. package/dist/domItem/traits/defineTrait.js +26 -0
  99. package/dist/domItem/traits/defineTrait.min.js +1 -0
  100. package/dist/domItem/traits/definitions.d.ts +7 -0
  101. package/dist/domItem/traits/definitions.js +20 -0
  102. package/dist/domItem/traits/definitions.min.js +1 -0
  103. package/dist/domItem/traits/getNonSerializableKeys.d.ts +9 -0
  104. package/dist/domItem/traits/getNonSerializableKeys.js +25 -0
  105. package/dist/domItem/traits/getNonSerializableKeys.min.js +1 -0
  106. package/dist/domItem/traits/getTraitDefinition.d.ts +7 -0
  107. package/dist/domItem/traits/getTraitDefinition.js +20 -0
  108. package/dist/domItem/traits/getTraitDefinition.min.js +1 -0
  109. package/dist/domItem/traits/hasTrait.d.ts +8 -0
  110. package/dist/domItem/traits/hasTrait.js +15 -0
  111. package/dist/domItem/traits/hasTrait.min.js +1 -0
  112. package/dist/domItem/traits/hasTraits.d.ts +9 -0
  113. package/dist/domItem/traits/hasTraits.js +16 -0
  114. package/dist/domItem/traits/hasTraits.min.js +1 -0
  115. package/dist/domItem/traits/isDomItem.d.ts +8 -0
  116. package/dist/domItem/traits/isDomItem.js +21 -0
  117. package/dist/domItem/traits/isDomItem.min.js +1 -0
  118. package/dist/domItem/traits/withTrait.d.ts +11 -0
  119. package/dist/domItem/traits/withTrait.js +30 -0
  120. package/dist/domItem/traits/withTrait.min.js +1 -0
  121. package/dist/domItem/tree/appendChild.d.ts +8 -0
  122. package/dist/domItem/tree/appendChild.js +19 -0
  123. package/dist/domItem/tree/appendChild.min.js +1 -0
  124. package/dist/domItem/tree/getItemByPath.d.ts +10 -0
  125. package/dist/domItem/tree/getItemByPath.js +23 -0
  126. package/dist/domItem/tree/getItemByPath.min.js +1 -0
  127. package/dist/domItem/tree/getItemPath.d.ts +9 -0
  128. package/dist/domItem/tree/getItemPath.js +31 -0
  129. package/dist/domItem/tree/getItemPath.min.js +1 -0
  130. package/dist/domItem/tree/getTopParentItem.d.ts +8 -0
  131. package/dist/domItem/tree/getTopParentItem.js +29 -0
  132. package/dist/domItem/tree/getTopParentItem.min.js +1 -0
  133. package/dist/domItem/tree/insertChild.d.ts +11 -0
  134. package/dist/domItem/tree/insertChild.js +22 -0
  135. package/dist/domItem/tree/insertChild.min.js +1 -0
  136. package/dist/domItem/tree/itemIdIndex.d.ts +43 -0
  137. package/dist/domItem/tree/itemIdIndex.js +118 -0
  138. package/dist/domItem/tree/itemIdIndex.min.js +1 -0
  139. package/dist/domItem/tree/removeChild.d.ts +8 -0
  140. package/dist/domItem/tree/removeChild.js +21 -0
  141. package/dist/domItem/tree/removeChild.min.js +1 -0
  142. package/dist/domItem/tree/setParentItemReferences.d.ts +7 -0
  143. package/dist/domItem/tree/setParentItemReferences.js +24 -0
  144. package/dist/domItem/tree/setParentItemReferences.min.js +1 -0
  145. package/dist/domItem/types.d.ts +131 -0
  146. package/dist/domItem/types.js +8 -0
  147. package/dist/domItem/types.min.js +1 -0
  148. package/dist/events/functions/activateListener.d.ts +10 -0
  149. package/dist/events/functions/activateListener.js +45 -0
  150. package/dist/events/functions/activateListener.min.js +1 -0
  151. package/dist/events/functions/addEventListener.d.ts +23 -0
  152. package/dist/events/functions/addEventListener.js +54 -0
  153. package/dist/events/functions/addEventListener.min.js +1 -0
  154. package/dist/events/functions/applyActiveListeners.d.ts +9 -0
  155. package/dist/events/functions/applyActiveListeners.js +52 -0
  156. package/dist/events/functions/applyActiveListeners.min.js +1 -0
  157. package/dist/events/functions/assignListener.d.ts +12 -0
  158. package/dist/events/functions/assignListener.js +39 -0
  159. package/dist/events/functions/assignListener.min.js +1 -0
  160. package/dist/events/functions/bindAllListeners.d.ts +10 -0
  161. package/dist/events/functions/bindAllListeners.js +28 -0
  162. package/dist/events/functions/bindAllListeners.min.js +1 -0
  163. package/dist/events/functions/bindElementListeners.d.ts +7 -0
  164. package/dist/events/functions/bindElementListeners.js +34 -0
  165. package/dist/events/functions/bindElementListeners.min.js +1 -0
  166. package/dist/events/functions/bindListeners.d.ts +9 -0
  167. package/dist/events/functions/bindListeners.js +23 -0
  168. package/dist/events/functions/bindListeners.min.js +1 -0
  169. package/dist/events/functions/deactivateListener.d.ts +13 -0
  170. package/dist/events/functions/deactivateListener.js +58 -0
  171. package/dist/events/functions/deactivateListener.min.js +1 -0
  172. package/dist/events/functions/deactivateListeners.d.ts +7 -0
  173. package/dist/events/functions/deactivateListeners.js +22 -0
  174. package/dist/events/functions/deactivateListeners.min.js +1 -0
  175. package/dist/events/functions/findEventListener.d.ts +22 -0
  176. package/dist/events/functions/findEventListener.js +61 -0
  177. package/dist/events/functions/findEventListener.min.js +1 -0
  178. package/dist/events/functions/fullAddEventListener.d.ts +20 -0
  179. package/dist/events/functions/fullAddEventListener.js +45 -0
  180. package/dist/events/functions/fullAddEventListener.min.js +1 -0
  181. package/dist/events/functions/fullRemoveEventListener.d.ts +22 -0
  182. package/dist/events/functions/fullRemoveEventListener.js +37 -0
  183. package/dist/events/functions/fullRemoveEventListener.min.js +1 -0
  184. package/dist/events/functions/listenerOptions.d.ts +12 -0
  185. package/dist/events/functions/listenerOptions.js +31 -0
  186. package/dist/events/functions/listenerOptions.min.js +1 -0
  187. package/dist/events/functions/makeEventHandler.d.ts +10 -0
  188. package/dist/events/functions/makeEventHandler.js +23 -0
  189. package/dist/events/functions/makeEventHandler.min.js +1 -0
  190. package/dist/events/functions/makeForwardingListener.d.ts +11 -0
  191. package/dist/events/functions/makeForwardingListener.js +46 -0
  192. package/dist/events/functions/makeForwardingListener.min.js +1 -0
  193. package/dist/events/functions/receiveForwardedEvent.d.ts +23 -0
  194. package/dist/events/functions/receiveForwardedEvent.js +40 -0
  195. package/dist/events/functions/receiveForwardedEvent.min.js +1 -0
  196. package/dist/events/functions/registerListener.d.ts +11 -0
  197. package/dist/events/functions/registerListener.js +25 -0
  198. package/dist/events/functions/registerListener.min.js +1 -0
  199. package/dist/events/functions/registerListeners.d.ts +10 -0
  200. package/dist/events/functions/registerListeners.js +26 -0
  201. package/dist/events/functions/registerListeners.min.js +1 -0
  202. package/dist/events/functions/removeEventListener.d.ts +18 -0
  203. package/dist/events/functions/removeEventListener.js +42 -0
  204. package/dist/events/functions/removeEventListener.min.js +1 -0
  205. package/dist/events/functions/retrieveListener.d.ts +14 -0
  206. package/dist/events/functions/retrieveListener.js +39 -0
  207. package/dist/events/functions/retrieveListener.min.js +1 -0
  208. package/dist/events/functions/revokeActiveListeners.d.ts +12 -0
  209. package/dist/events/functions/revokeActiveListeners.js +54 -0
  210. package/dist/events/functions/revokeActiveListeners.min.js +1 -0
  211. package/dist/events/functions/setForwardEvents.d.ts +11 -0
  212. package/dist/events/functions/setForwardEvents.js +26 -0
  213. package/dist/events/functions/setForwardEvents.min.js +1 -0
  214. package/dist/events/functions/unassignListener.d.ts +12 -0
  215. package/dist/events/functions/unassignListener.js +32 -0
  216. package/dist/events/functions/unassignListener.min.js +1 -0
  217. package/dist/events/index.d.ts +37 -0
  218. package/dist/events/index.js +72 -0
  219. package/dist/events/index.min.js +1 -0
  220. package/dist/events/objects/createEventListener.d.ts +13 -0
  221. package/dist/events/objects/createEventListener.js +30 -0
  222. package/dist/events/objects/createEventListener.min.js +1 -0
  223. package/dist/events/objects/createEventProxy.d.ts +10 -0
  224. package/dist/events/objects/createEventProxy.js +48 -0
  225. package/dist/events/objects/createEventProxy.min.js +1 -0
  226. package/dist/events/objects/createEventResponder.d.ts +8 -0
  227. package/dist/events/objects/createEventResponder.js +27 -0
  228. package/dist/events/objects/createEventResponder.min.js +1 -0
  229. package/dist/events/objects/options/getListenerOptions.d.ts +6 -0
  230. package/dist/events/objects/options/getListenerOptions.js +22 -0
  231. package/dist/events/objects/options/getListenerOptions.min.js +1 -0
  232. package/dist/events/objects/options/numberToOptions.d.ts +8 -0
  233. package/dist/events/objects/options/numberToOptions.js +21 -0
  234. package/dist/events/objects/options/numberToOptions.min.js +1 -0
  235. package/dist/events/objects/options/optionsToNumber.d.ts +9 -0
  236. package/dist/events/objects/options/optionsToNumber.js +27 -0
  237. package/dist/events/objects/options/optionsToNumber.min.js +1 -0
  238. package/dist/events/objects/options.d.ts +6 -0
  239. package/dist/events/objects/options.js +24 -0
  240. package/dist/events/objects/options.min.js +1 -0
  241. package/dist/events/types.d.ts +87 -0
  242. package/dist/events/types.js +8 -0
  243. package/dist/events/types.min.js +1 -0
  244. package/dist/inflate/index.d.ts +4 -0
  245. package/dist/inflate/index.js +17 -0
  246. package/dist/inflate/index.min.js +1 -0
  247. package/dist/inflate/jsonToDomItem.d.ts +7 -0
  248. package/dist/inflate/jsonToDomItem.js +30 -0
  249. package/dist/inflate/jsonToDomItem.min.js +1 -0
  250. package/dist/main.d.ts +2 -0
  251. package/dist/main.js +24 -0
  252. package/dist/main.min.js +1 -0
  253. package/dist/render/generateElement.d.ts +7 -0
  254. package/dist/render/generateElement.js +41 -0
  255. package/dist/render/generateElement.min.js +1 -0
  256. package/dist/render/index.d.ts +9 -0
  257. package/dist/render/index.js +27 -0
  258. package/dist/render/index.min.js +1 -0
  259. package/dist/render/reconcile.d.ts +16 -0
  260. package/dist/render/reconcile.js +169 -0
  261. package/dist/render/reconcile.min.js +1 -0
  262. package/dist/render/renderHtml.d.ts +16 -0
  263. package/dist/render/renderHtml.js +57 -0
  264. package/dist/render/renderHtml.min.js +1 -0
  265. package/dist/render/updateChildNodes.d.ts +7 -0
  266. package/dist/render/updateChildNodes.js +53 -0
  267. package/dist/render/updateChildNodes.min.js +1 -0
  268. package/dist/render/updateElement.d.ts +14 -0
  269. package/dist/render/updateElement.js +113 -0
  270. package/dist/render/updateElement.min.js +1 -0
  271. package/dist/render/updateElements.d.ts +9 -0
  272. package/dist/render/updateElements.js +33 -0
  273. package/dist/render/updateElements.min.js +1 -0
  274. package/dist/renderOnly.d.ts +2 -0
  275. package/dist/renderOnly.js +27 -0
  276. package/dist/renderOnly.min.js +1 -0
  277. package/dist/sync/index.d.ts +6 -0
  278. package/dist/sync/index.js +21 -0
  279. package/dist/sync/index.min.js +1 -0
  280. package/dist/sync/updateChildren.d.ts +7 -0
  281. package/dist/sync/updateChildren.js +38 -0
  282. package/dist/sync/updateChildren.min.js +1 -0
  283. package/dist/sync/updateDomItem.d.ts +8 -0
  284. package/dist/sync/updateDomItem.js +53 -0
  285. package/dist/sync/updateDomItem.min.js +1 -0
  286. package/dist/sync/updateDomItems.d.ts +9 -0
  287. package/dist/sync/updateDomItems.js +33 -0
  288. package/dist/sync/updateDomItems.min.js +1 -0
  289. 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;