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.
Files changed (283) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +72 -2
  3. package/browser/treeloom.js +11006 -0
  4. package/browser/treeloom.min.js +1 -0
  5. package/browser/treeloomRenderOnly.js +10530 -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/createChangeList.d.ts +9 -0
  17. package/dist/diff/createChangeList.js +44 -0
  18. package/dist/diff/createChangeList.min.js +1 -0
  19. package/dist/diff/domItemChanges.d.ts +9 -0
  20. package/dist/diff/domItemChanges.js +154 -0
  21. package/dist/diff/domItemChanges.min.js +1 -0
  22. package/dist/diff/domItemHasAttribute.d.ts +11 -0
  23. package/dist/diff/domItemHasAttribute.js +63 -0
  24. package/dist/diff/domItemHasAttribute.min.js +1 -0
  25. package/dist/diff/elementChanges.d.ts +10 -0
  26. package/dist/diff/elementChanges.js +151 -0
  27. package/dist/diff/elementChanges.min.js +1 -0
  28. package/dist/diff/elementHasAttribute.d.ts +10 -0
  29. package/dist/diff/elementHasAttribute.js +70 -0
  30. package/dist/diff/elementHasAttribute.min.js +1 -0
  31. package/dist/diff/getAssignedStyles.d.ts +9 -0
  32. package/dist/diff/getAssignedStyles.js +22 -0
  33. package/dist/diff/getAssignedStyles.min.js +1 -0
  34. package/dist/diff/index.d.ts +9 -0
  35. package/dist/diff/index.js +27 -0
  36. package/dist/diff/index.min.js +1 -0
  37. package/dist/diff/types.d.ts +17 -0
  38. package/dist/diff/types.js +8 -0
  39. package/dist/diff/types.min.js +1 -0
  40. package/dist/domItem/index.d.ts +34 -0
  41. package/dist/domItem/index.js +81 -0
  42. package/dist/domItem/index.min.js +1 -0
  43. package/dist/domItem/objects/addDomItemProperties.d.ts +7 -0
  44. package/dist/domItem/objects/addDomItemProperties.js +27 -0
  45. package/dist/domItem/objects/addDomItemProperties.min.js +1 -0
  46. package/dist/domItem/objects/createCoreItem.d.ts +9 -0
  47. package/dist/domItem/objects/createCoreItem.js +53 -0
  48. package/dist/domItem/objects/createCoreItem.min.js +1 -0
  49. package/dist/domItem/objects/createDomItem.d.ts +10 -0
  50. package/dist/domItem/objects/createDomItem.js +40 -0
  51. package/dist/domItem/objects/createDomItem.min.js +1 -0
  52. package/dist/domItem/objects/documentDomItem.d.ts +12 -0
  53. package/dist/domItem/objects/documentDomItem.js +36 -0
  54. package/dist/domItem/objects/documentDomItem.min.js +1 -0
  55. package/dist/domItem/objects/documentItem.d.ts +18 -0
  56. package/dist/domItem/objects/documentItem.js +40 -0
  57. package/dist/domItem/objects/documentItem.min.js +1 -0
  58. package/dist/domItem/objects/initChildren.d.ts +6 -0
  59. package/dist/domItem/objects/initChildren.js +44 -0
  60. package/dist/domItem/objects/initChildren.min.js +1 -0
  61. package/dist/domItem/objects/initRoot.d.ts +9 -0
  62. package/dist/domItem/objects/initRoot.js +32 -0
  63. package/dist/domItem/objects/initRoot.min.js +1 -0
  64. package/dist/domItem/query/gatherChildItems.d.ts +12 -0
  65. package/dist/domItem/query/gatherChildItems.js +19 -0
  66. package/dist/domItem/query/gatherChildItems.min.js +1 -0
  67. package/dist/domItem/query/getChildTest.d.ts +8 -0
  68. package/dist/domItem/query/getChildTest.js +15 -0
  69. package/dist/domItem/query/getChildTest.min.js +1 -0
  70. package/dist/domItem/query/getChildrenByClass.d.ts +11 -0
  71. package/dist/domItem/query/getChildrenByClass.js +26 -0
  72. package/dist/domItem/query/getChildrenByClass.min.js +1 -0
  73. package/dist/domItem/query/getChildrenByName.d.ts +9 -0
  74. package/dist/domItem/query/getChildrenByName.js +23 -0
  75. package/dist/domItem/query/getChildrenByName.min.js +1 -0
  76. package/dist/domItem/query/getChildrenFromAttribute.d.ts +13 -0
  77. package/dist/domItem/query/getChildrenFromAttribute.js +28 -0
  78. package/dist/domItem/query/getChildrenFromAttribute.min.js +1 -0
  79. package/dist/domItem/query/getItemByElement.d.ts +11 -0
  80. package/dist/domItem/query/getItemByElement.js +29 -0
  81. package/dist/domItem/query/getItemByElement.min.js +1 -0
  82. package/dist/domItem/query/getParentsByClass.d.ts +12 -0
  83. package/dist/domItem/query/getParentsByClass.js +40 -0
  84. package/dist/domItem/query/getParentsByClass.min.js +1 -0
  85. package/dist/domItem/query/getParentsByName.d.ts +9 -0
  86. package/dist/domItem/query/getParentsByName.js +23 -0
  87. package/dist/domItem/query/getParentsByName.min.js +1 -0
  88. package/dist/domItem/query/getParentsByTagName.d.ts +9 -0
  89. package/dist/domItem/query/getParentsByTagName.js +23 -0
  90. package/dist/domItem/query/getParentsByTagName.min.js +1 -0
  91. package/dist/domItem/query/getParentsFromAttribute.d.ts +13 -0
  92. package/dist/domItem/query/getParentsFromAttribute.js +39 -0
  93. package/dist/domItem/query/getParentsFromAttribute.min.js +1 -0
  94. package/dist/domItem/traits/defineTrait.d.ts +10 -0
  95. package/dist/domItem/traits/defineTrait.js +26 -0
  96. package/dist/domItem/traits/defineTrait.min.js +1 -0
  97. package/dist/domItem/traits/definitions.d.ts +7 -0
  98. package/dist/domItem/traits/definitions.js +20 -0
  99. package/dist/domItem/traits/definitions.min.js +1 -0
  100. package/dist/domItem/traits/getNonSerializableKeys.d.ts +9 -0
  101. package/dist/domItem/traits/getNonSerializableKeys.js +25 -0
  102. package/dist/domItem/traits/getNonSerializableKeys.min.js +1 -0
  103. package/dist/domItem/traits/getTraitDefinition.d.ts +7 -0
  104. package/dist/domItem/traits/getTraitDefinition.js +20 -0
  105. package/dist/domItem/traits/getTraitDefinition.min.js +1 -0
  106. package/dist/domItem/traits/hasTrait.d.ts +8 -0
  107. package/dist/domItem/traits/hasTrait.js +15 -0
  108. package/dist/domItem/traits/hasTrait.min.js +1 -0
  109. package/dist/domItem/traits/hasTraits.d.ts +9 -0
  110. package/dist/domItem/traits/hasTraits.js +16 -0
  111. package/dist/domItem/traits/hasTraits.min.js +1 -0
  112. package/dist/domItem/traits/isDomItem.d.ts +8 -0
  113. package/dist/domItem/traits/isDomItem.js +21 -0
  114. package/dist/domItem/traits/isDomItem.min.js +1 -0
  115. package/dist/domItem/traits/withTrait.d.ts +11 -0
  116. package/dist/domItem/traits/withTrait.js +30 -0
  117. package/dist/domItem/traits/withTrait.min.js +1 -0
  118. package/dist/domItem/tree/appendChild.d.ts +8 -0
  119. package/dist/domItem/tree/appendChild.js +19 -0
  120. package/dist/domItem/tree/appendChild.min.js +1 -0
  121. package/dist/domItem/tree/getItemByPath.d.ts +10 -0
  122. package/dist/domItem/tree/getItemByPath.js +23 -0
  123. package/dist/domItem/tree/getItemByPath.min.js +1 -0
  124. package/dist/domItem/tree/getItemPath.d.ts +9 -0
  125. package/dist/domItem/tree/getItemPath.js +31 -0
  126. package/dist/domItem/tree/getItemPath.min.js +1 -0
  127. package/dist/domItem/tree/getTopParentItem.d.ts +8 -0
  128. package/dist/domItem/tree/getTopParentItem.js +29 -0
  129. package/dist/domItem/tree/getTopParentItem.min.js +1 -0
  130. package/dist/domItem/tree/insertChild.d.ts +11 -0
  131. package/dist/domItem/tree/insertChild.js +22 -0
  132. package/dist/domItem/tree/insertChild.min.js +1 -0
  133. package/dist/domItem/tree/itemIdIndex.d.ts +43 -0
  134. package/dist/domItem/tree/itemIdIndex.js +118 -0
  135. package/dist/domItem/tree/itemIdIndex.min.js +1 -0
  136. package/dist/domItem/tree/removeChild.d.ts +8 -0
  137. package/dist/domItem/tree/removeChild.js +21 -0
  138. package/dist/domItem/tree/removeChild.min.js +1 -0
  139. package/dist/domItem/tree/setParentItemReferences.d.ts +7 -0
  140. package/dist/domItem/tree/setParentItemReferences.js +24 -0
  141. package/dist/domItem/tree/setParentItemReferences.min.js +1 -0
  142. package/dist/domItem/types.d.ts +131 -0
  143. package/dist/domItem/types.js +8 -0
  144. package/dist/domItem/types.min.js +1 -0
  145. package/dist/events/functions/activateListener.d.ts +10 -0
  146. package/dist/events/functions/activateListener.js +45 -0
  147. package/dist/events/functions/activateListener.min.js +1 -0
  148. package/dist/events/functions/addEventListener.d.ts +23 -0
  149. package/dist/events/functions/addEventListener.js +54 -0
  150. package/dist/events/functions/addEventListener.min.js +1 -0
  151. package/dist/events/functions/applyActiveListeners.d.ts +9 -0
  152. package/dist/events/functions/applyActiveListeners.js +52 -0
  153. package/dist/events/functions/applyActiveListeners.min.js +1 -0
  154. package/dist/events/functions/assignListener.d.ts +12 -0
  155. package/dist/events/functions/assignListener.js +39 -0
  156. package/dist/events/functions/assignListener.min.js +1 -0
  157. package/dist/events/functions/bindAllListeners.d.ts +10 -0
  158. package/dist/events/functions/bindAllListeners.js +28 -0
  159. package/dist/events/functions/bindAllListeners.min.js +1 -0
  160. package/dist/events/functions/bindElementListeners.d.ts +7 -0
  161. package/dist/events/functions/bindElementListeners.js +34 -0
  162. package/dist/events/functions/bindElementListeners.min.js +1 -0
  163. package/dist/events/functions/bindListeners.d.ts +9 -0
  164. package/dist/events/functions/bindListeners.js +23 -0
  165. package/dist/events/functions/bindListeners.min.js +1 -0
  166. package/dist/events/functions/deactivateListener.d.ts +13 -0
  167. package/dist/events/functions/deactivateListener.js +58 -0
  168. package/dist/events/functions/deactivateListener.min.js +1 -0
  169. package/dist/events/functions/deactivateListeners.d.ts +7 -0
  170. package/dist/events/functions/deactivateListeners.js +22 -0
  171. package/dist/events/functions/deactivateListeners.min.js +1 -0
  172. package/dist/events/functions/findEventListener.d.ts +22 -0
  173. package/dist/events/functions/findEventListener.js +61 -0
  174. package/dist/events/functions/findEventListener.min.js +1 -0
  175. package/dist/events/functions/fullAddEventListener.d.ts +20 -0
  176. package/dist/events/functions/fullAddEventListener.js +45 -0
  177. package/dist/events/functions/fullAddEventListener.min.js +1 -0
  178. package/dist/events/functions/fullRemoveEventListener.d.ts +22 -0
  179. package/dist/events/functions/fullRemoveEventListener.js +37 -0
  180. package/dist/events/functions/fullRemoveEventListener.min.js +1 -0
  181. package/dist/events/functions/listenerOptions.d.ts +12 -0
  182. package/dist/events/functions/listenerOptions.js +31 -0
  183. package/dist/events/functions/listenerOptions.min.js +1 -0
  184. package/dist/events/functions/makeEventHandler.d.ts +10 -0
  185. package/dist/events/functions/makeEventHandler.js +23 -0
  186. package/dist/events/functions/makeEventHandler.min.js +1 -0
  187. package/dist/events/functions/makeForwardingListener.d.ts +11 -0
  188. package/dist/events/functions/makeForwardingListener.js +46 -0
  189. package/dist/events/functions/makeForwardingListener.min.js +1 -0
  190. package/dist/events/functions/receiveForwardedEvent.d.ts +23 -0
  191. package/dist/events/functions/receiveForwardedEvent.js +40 -0
  192. package/dist/events/functions/receiveForwardedEvent.min.js +1 -0
  193. package/dist/events/functions/registerListener.d.ts +11 -0
  194. package/dist/events/functions/registerListener.js +25 -0
  195. package/dist/events/functions/registerListener.min.js +1 -0
  196. package/dist/events/functions/registerListeners.d.ts +10 -0
  197. package/dist/events/functions/registerListeners.js +26 -0
  198. package/dist/events/functions/registerListeners.min.js +1 -0
  199. package/dist/events/functions/removeEventListener.d.ts +18 -0
  200. package/dist/events/functions/removeEventListener.js +42 -0
  201. package/dist/events/functions/removeEventListener.min.js +1 -0
  202. package/dist/events/functions/retrieveListener.d.ts +14 -0
  203. package/dist/events/functions/retrieveListener.js +39 -0
  204. package/dist/events/functions/retrieveListener.min.js +1 -0
  205. package/dist/events/functions/revokeActiveListeners.d.ts +12 -0
  206. package/dist/events/functions/revokeActiveListeners.js +54 -0
  207. package/dist/events/functions/revokeActiveListeners.min.js +1 -0
  208. package/dist/events/functions/setForwardEvents.d.ts +11 -0
  209. package/dist/events/functions/setForwardEvents.js +26 -0
  210. package/dist/events/functions/setForwardEvents.min.js +1 -0
  211. package/dist/events/functions/unassignListener.d.ts +12 -0
  212. package/dist/events/functions/unassignListener.js +32 -0
  213. package/dist/events/functions/unassignListener.min.js +1 -0
  214. package/dist/events/index.d.ts +37 -0
  215. package/dist/events/index.js +72 -0
  216. package/dist/events/index.min.js +1 -0
  217. package/dist/events/objects/createEventListener.d.ts +13 -0
  218. package/dist/events/objects/createEventListener.js +30 -0
  219. package/dist/events/objects/createEventListener.min.js +1 -0
  220. package/dist/events/objects/createEventProxy.d.ts +10 -0
  221. package/dist/events/objects/createEventProxy.js +48 -0
  222. package/dist/events/objects/createEventProxy.min.js +1 -0
  223. package/dist/events/objects/createEventResponder.d.ts +8 -0
  224. package/dist/events/objects/createEventResponder.js +27 -0
  225. package/dist/events/objects/createEventResponder.min.js +1 -0
  226. package/dist/events/objects/options/getListenerOptions.d.ts +6 -0
  227. package/dist/events/objects/options/getListenerOptions.js +22 -0
  228. package/dist/events/objects/options/getListenerOptions.min.js +1 -0
  229. package/dist/events/objects/options/numberToOptions.d.ts +8 -0
  230. package/dist/events/objects/options/numberToOptions.js +21 -0
  231. package/dist/events/objects/options/numberToOptions.min.js +1 -0
  232. package/dist/events/objects/options/optionsToNumber.d.ts +9 -0
  233. package/dist/events/objects/options/optionsToNumber.js +27 -0
  234. package/dist/events/objects/options/optionsToNumber.min.js +1 -0
  235. package/dist/events/objects/options.d.ts +6 -0
  236. package/dist/events/objects/options.js +24 -0
  237. package/dist/events/objects/options.min.js +1 -0
  238. package/dist/events/types.d.ts +87 -0
  239. package/dist/events/types.js +8 -0
  240. package/dist/events/types.min.js +1 -0
  241. package/dist/inflate/index.d.ts +4 -0
  242. package/dist/inflate/index.js +17 -0
  243. package/dist/inflate/index.min.js +1 -0
  244. package/dist/inflate/jsonToDomItem.d.ts +7 -0
  245. package/dist/inflate/jsonToDomItem.js +30 -0
  246. package/dist/inflate/jsonToDomItem.min.js +1 -0
  247. package/dist/main.d.ts +2 -0
  248. package/dist/main.js +24 -0
  249. package/dist/main.min.js +1 -0
  250. package/dist/render/generateElement.d.ts +7 -0
  251. package/dist/render/generateElement.js +41 -0
  252. package/dist/render/generateElement.min.js +1 -0
  253. package/dist/render/index.d.ts +8 -0
  254. package/dist/render/index.js +25 -0
  255. package/dist/render/index.min.js +1 -0
  256. package/dist/render/renderHtml.d.ts +16 -0
  257. package/dist/render/renderHtml.js +57 -0
  258. package/dist/render/renderHtml.min.js +1 -0
  259. package/dist/render/updateChildNodes.d.ts +7 -0
  260. package/dist/render/updateChildNodes.js +56 -0
  261. package/dist/render/updateChildNodes.min.js +1 -0
  262. package/dist/render/updateElement.d.ts +14 -0
  263. package/dist/render/updateElement.js +110 -0
  264. package/dist/render/updateElement.min.js +1 -0
  265. package/dist/render/updateElements.d.ts +9 -0
  266. package/dist/render/updateElements.js +33 -0
  267. package/dist/render/updateElements.min.js +1 -0
  268. package/dist/renderOnly.d.ts +2 -0
  269. package/dist/renderOnly.js +27 -0
  270. package/dist/renderOnly.min.js +1 -0
  271. package/dist/sync/index.d.ts +6 -0
  272. package/dist/sync/index.js +21 -0
  273. package/dist/sync/index.min.js +1 -0
  274. package/dist/sync/updateChildren.d.ts +7 -0
  275. package/dist/sync/updateChildren.js +38 -0
  276. package/dist/sync/updateChildren.min.js +1 -0
  277. package/dist/sync/updateDomItem.d.ts +8 -0
  278. package/dist/sync/updateDomItem.js +49 -0
  279. package/dist/sync/updateDomItem.min.js +1 -0
  280. package/dist/sync/updateDomItems.d.ts +9 -0
  281. package/dist/sync/updateDomItems.js +33 -0
  282. package/dist/sync/updateDomItems.min.js +1 -0
  283. package/package.json +74 -4
@@ -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 createEventListener_1 = __importDefault(require("../objects/createEventListener"));
15
+ /**
16
+ * Create an EventListener descriptor and push it onto a DomItem's eventListeners for the given event name.
17
+ * Does not attach anything to the real element - see {@link bindListeners} or {@link fullAddEventListener} for that.
18
+ *
19
+ * item is the last parameter (instead of customArgs/options having literal defaults) so this can be curried and
20
+ * piped directly - see {@link fullAddEventListener} for an example.
21
+ *
22
+ * Prefer calling this through {@link fullAddEventListener} with a registered name (see {@link registerListener}).
23
+ * Passing a raw function directly here works, but logs a console warning - see {@link EventListener}'s
24
+ * listenerFunc property for what that discretionary path gives up.
25
+ * @param eventName - The name of the trigger event (e.g. 'click').
26
+ * @param listenerFunction - Preferably a name registered via
27
+ * {@link registerListener}; a raw listener function is also accepted, at the caller's discretion.
28
+ * @param customArgs - Additional args passed through to the listener when called.
29
+ * @param options - Options to be used when the listener is attached
30
+ * to the element.
31
+ * @param item - The DomItem which will receive the event listener.
32
+ * @returns The same DomItem, with the new EventListener descriptor appended.
33
+ */
34
+ const addEventListener = (eventName, listenerFunction, customArgs, options, item) => {
35
+ customArgs = customArgs ?? null;
36
+ options = options ?? false;
37
+ if (typeof listenerFunction === 'function') {
38
+ console.warn(`addEventListener: attaching a raw function directly for "${eventName}" instead of a name registered via ` + 'registerListener. This works, but the listener will not be discoverable via eventActions, cannot be ' + 'shared by name across DomItems, and will be silently dropped by domItemToJson (JSON.stringify omits ' + 'function values). Prefer fullAddEventListener with a name unless this one-off behavior is intentional.');
39
+ }
40
+ if (typeof item.eventListeners === 'undefined') {
41
+ item.eventListeners = {};
42
+ }
43
+ if (typeof item.eventListeners[eventName] === 'undefined') {
44
+ item.eventListeners[eventName] = [];
45
+ }
46
+ // check if the listener already exists and don't add if it does
47
+ item.eventListeners[eventName].push((0, createEventListener_1.default)({
48
+ listenerFunc: listenerFunction,
49
+ listenerArgs: customArgs,
50
+ listenerOptions: options
51
+ }));
52
+ return item;
53
+ };
54
+ exports.default = addEventListener;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const createEventListener_1=__importDefault(require("../objects/createEventListener")),addEventListener=(e,t,n,s,i)=>(n=n??null,s=s??!1,"function"==typeof t&&console.warn(`addEventListener: attaching a raw function directly for "${e}" instead of a name registered via registerListener. This works, but the listener will not be discoverable via eventActions, cannot be shared by name across DomItems, and will be silently dropped by domItemToJson (JSON.stringify omits function values). Prefer fullAddEventListener with a name unless this one-off behavior is intentional.`),void 0===i.eventListeners&&(i.eventListeners={}),void 0===i.eventListeners[e]&&(i.eventListeners[e]=[]),i.eventListeners[e].push((0,createEventListener_1.default)({listenerFunc:t,listenerArgs:n,listenerOptions:s})),i);exports.default=addEventListener;
@@ -0,0 +1,9 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ import type { EventName } from '../types';
3
+ /**
4
+ * Apply each active event listener for event type to the DOM Item's element.
5
+ * @param eventName
6
+ * @param item
7
+ */
8
+ declare const applyActiveListeners: (eventName: EventName, item: DomItem) => DomItem;
9
+ export default applyActiveListeners;
@@ -0,0 +1,52 @@
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 assignListener_1 = __importDefault(require("./assignListener"));
18
+ const createEventProxy_1 = __importDefault(require("../objects/createEventProxy"));
19
+ /**
20
+ * Apply each active event listener for event type to the DOM Item's element.
21
+ * @param eventName
22
+ * @param item
23
+ */
24
+ const applyActiveListeners = (eventName, item) => {
25
+ const listenerOptions = (0, getListenerOptions_1.default)();
26
+ const eventOptions = si_funciona_1.default.dotGet(item, `activeListeners.${eventName}`);
27
+ if (eventOptions === null) {
28
+ return item;
29
+ }
30
+ si_funciona_1.default.objectKeys(eventOptions).forEach(binaryOptions => {
31
+ const optionsToUse = (0, numberToOptions_1.default)(listenerOptions, parseInt(binaryOptions));
32
+ const usesSignal = !!optionsToUse.signal;
33
+ if (!usesSignal) {
34
+ // Abort signal must be undefined if it is not required.
35
+ delete optionsToUse.signal;
36
+ }
37
+ ;
38
+ item.activeListeners[eventName][Number(binaryOptions)].forEach(eventResponder => {
39
+ if (eventResponder.assignedHandler) {
40
+ // already attached to the element
41
+ return;
42
+ }
43
+ const finalOptions = usesSignal ? Object.assign({}, optionsToUse, {
44
+ signal: eventResponder.abort.signal
45
+ }) : optionsToUse;
46
+ eventResponder.assignedHandler = e => eventResponder.handler((0, createEventProxy_1.default)(e, item));
47
+ (0, assignListener_1.default)(eventName, item.element, eventResponder.assignedHandler, finalOptions);
48
+ });
49
+ });
50
+ return item;
51
+ };
52
+ exports.default = applyActiveListeners;
@@ -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")),assignListener_1=__importDefault(require("./assignListener")),createEventProxy_1=__importDefault(require("../objects/createEventProxy")),applyActiveListeners=(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;n.assignedHandler=e=>n.handler((0,createEventProxy_1.default)(e,t)),(0,assignListener_1.default)(e,t.element,n.assignedHandler,s)})}),t};exports.default=applyActiveListeners;
@@ -0,0 +1,12 @@
1
+ import type { EventHandler, ListenerOptions, ListenerTarget } from '../types';
2
+ /**
3
+ * Provide compatibility for assigning 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 assignListener: (trigger: string, elem: ListenerTarget, fn: EventHandler, options?: ListenerOptions) => EventHandler;
12
+ export default assignListener;
@@ -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
+ 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 listenerOptions_1 = __importDefault(require("./listenerOptions"));
15
+ /**
16
+ * Provide compatibility for assigning listeners.
17
+ * @param trigger - The name of the event which will trigger the listenerFunction on the element. (keyof HTMLElementEventMap)
18
+ * @param elem - An element to append the listener onto
19
+ * @param fn - The function which will be invoked when the
20
+ * event is triggered
21
+ * @param options - Additional options to how the event will be
22
+ * fired
23
+ */
24
+ const assignListener = (trigger, elem, fn, options = false) => {
25
+ // Attaching a listener may be done differently based on the browser support
26
+ if (elem.addEventListener) {
27
+ // Latest support is provided from addEventListener with the options parameter varying slightly
28
+ elem.addEventListener(trigger, fn, (0, listenerOptions_1.default)(options));
29
+ } else if (elem.attachEvent) {
30
+ // Older browsers, especially Internet Explorer
31
+ elem.attachEvent(`on${trigger}`, fn);
32
+ } else {
33
+ // General support for adding a new function onto the element which can be called to trigger the function
34
+ ;
35
+ elem[`on${trigger}`] = fn;
36
+ }
37
+ return fn;
38
+ };
39
+ exports.default = assignListener;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const listenerOptions_1=__importDefault(require("./listenerOptions")),assignListener=(e,t,n,s=!1)=>(t.addEventListener?t.addEventListener(e,n,(0,listenerOptions_1.default)(s)):t.attachEvent?t.attachEvent(`on${e}`,n):t[`on${e}`]=n,n);exports.default=assignListener;
@@ -0,0 +1,10 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ /**
3
+ * Based on the eventListeners property of the provided item, bind the listeners to the associated element property
4
+ * for each item in the domEvents.DomItem structure.
5
+ * WARNING: This is a recursive function.
6
+ * @param item - The DomItem with an associated HTMLElement to have a listener
7
+ * assigned
8
+ */
9
+ declare const bindAllListeners: (item: DomItem) => DomItem;
10
+ export default bindAllListeners;
@@ -0,0 +1,28 @@
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 bindListeners_1 = __importDefault(require("./bindListeners"));
15
+ /**
16
+ * Based on the eventListeners property of the provided item, bind the listeners to the associated element property
17
+ * for each item in the domEvents.DomItem structure.
18
+ * WARNING: This is a recursive function.
19
+ * @param item - The DomItem with an associated HTMLElement to have a listener
20
+ * assigned
21
+ */
22
+ const bindAllListeners = item => {
23
+ for (const child of item.children) {
24
+ bindAllListeners(child);
25
+ }
26
+ return (0, bindListeners_1.default)(item);
27
+ };
28
+ exports.default = bindAllListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const bindListeners_1=__importDefault(require("./bindListeners")),bindAllListeners=e=>{for(const t of e.children)bindAllListeners(t);return(0,bindListeners_1.default)(e)};exports.default=bindAllListeners;
@@ -0,0 +1,7 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ /**
3
+ * Receive a DomItem with eventListeners and apply the event listeners onto the Dom element.
4
+ * @param item - The DomItem which has eventListeners to apply to its element
5
+ */
6
+ declare const bindElementListeners: (item: DomItem) => DomItem;
7
+ export default bindElementListeners;
@@ -0,0 +1,34 @@
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 activateListener_1 = __importDefault(require("./activateListener"));
15
+ const applyActiveListeners_1 = __importDefault(require("./applyActiveListeners"));
16
+ /**
17
+ * Receive a DomItem with eventListeners and apply the event listeners onto the Dom element.
18
+ * @param item - The DomItem which has eventListeners to apply to its element
19
+ */
20
+ const bindElementListeners = item => {
21
+ for (const eventName in item.eventListeners) {
22
+ const listeners = item.eventListeners[eventName];
23
+ listeners.forEach(eventAttributes => {
24
+ if (eventAttributes.listenerActive) {
25
+ return;
26
+ }
27
+ item = (0, activateListener_1.default)(eventName, eventAttributes, item);
28
+ eventAttributes.listenerActive = true;
29
+ });
30
+ item = (0, applyActiveListeners_1.default)(eventName, item);
31
+ }
32
+ return item;
33
+ };
34
+ exports.default = bindElementListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const activateListener_1=__importDefault(require("./activateListener")),applyActiveListeners_1=__importDefault(require("./applyActiveListeners")),bindElementListeners=e=>{for(const t in e.eventListeners){e.eventListeners[t].forEach(i=>{i.listenerActive||(e=(0,activateListener_1.default)(t,i,e),i.listenerActive=!0)}),e=(0,applyActiveListeners_1.default)(t,e)}return e};exports.default=bindElementListeners;
@@ -0,0 +1,9 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ /**
3
+ * Based on the eventListeners property of the provided item, bind the
4
+ * listeners to the associated element property for the provided domEvents.DomItem.
5
+ * @param item - The DomItem which may have eventListeners to apply to its
6
+ * element
7
+ */
8
+ declare const bindListeners: (item: DomItem) => DomItem;
9
+ export default bindListeners;
@@ -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
+ 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 bindElementListeners_1 = __importDefault(require("./bindElementListeners"));
15
+ const si_funciona_1 = __importDefault(require("si-funciona"));
16
+ /**
17
+ * Based on the eventListeners property of the provided item, bind the
18
+ * listeners to the associated element property for the provided domEvents.DomItem.
19
+ * @param item - The DomItem which may have eventListeners to apply to its
20
+ * element
21
+ */
22
+ const bindListeners = item => !si_funciona_1.default.emptyObject(item.eventListeners) && item.element ? (0, bindElementListeners_1.default)(item) : item;
23
+ exports.default = bindListeners;
@@ -0,0 +1 @@
1
+ "use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const bindElementListeners_1=__importDefault(require("./bindElementListeners")),si_funciona_1=__importDefault(require("si-funciona")),bindListeners=e=>!si_funciona_1.default.emptyObject(e.eventListeners)&&e.element?(0,bindElementListeners_1.default)(e):e;exports.default=bindListeners;
@@ -0,0 +1,13 @@
1
+ import type { DomItem } from '../../domItem/types';
2
+ import type { EventName, ListenerDescriptor } from '../types';
3
+ /**
4
+ * Deactivate a single listener: detach it from the element (if it was actually attached) and remove it from
5
+ * activeListeners, without disturbing any other listener sharing the same options bucket.
6
+ * @param eventName - The name of the trigger event the listener was activated under.
7
+ * @param eventListener - The EventListener descriptor to deactivate, as found via
8
+ * {@link findEventListener} or returned from {@link activateListener}.
9
+ * @param item - The DomItem the listener is attached to.
10
+ * @returns The same DomItem, with this listener detached and marked inactive.
11
+ */
12
+ declare const deactivateListener: (eventName: EventName, eventListener: ListenerDescriptor, item: DomItem) => DomItem;
13
+ export default deactivateListener;
@@ -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;