taggedjs 2.3.25 → 2.3.26

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 (315) hide show
  1. package/_js/ElementTarget.interface.d.ts +7 -0
  2. package/_js/ElementTarget.interface.js +2 -0
  3. package/_js/ElementTarget.interface.js.map +1 -0
  4. package/_js/ElementTargetEvent.interface.d.ts +6 -0
  5. package/_js/ElementTargetEvent.interface.js +2 -0
  6. package/_js/ElementTargetEvent.interface.js.map +1 -0
  7. package/_js/Tag.class.d.ts +69 -0
  8. package/_js/Tag.class.js +258 -0
  9. package/_js/Tag.class.js.map +1 -0
  10. package/_js/elementInitCheck.js.map +1 -0
  11. package/_js/gateway/gateway.web.component.d.ts +11 -0
  12. package/_js/gateway/gateway.web.component.js +20 -0
  13. package/_js/gateway/gateway.web.component.js.map +1 -0
  14. package/_js/gateway/index.d.ts +3 -0
  15. package/_js/gateway/index.js +4 -0
  16. package/_js/gateway/index.js.map +1 -0
  17. package/_js/gateway/loadTagGateway.function.d.ts +2 -0
  18. package/_js/gateway/loadTagGateway.function.js +18 -0
  19. package/_js/gateway/loadTagGateway.function.js.map +1 -0
  20. package/_js/gateway/tagGateway.function.d.ts +4 -0
  21. package/_js/gateway/tagGateway.function.js +49 -0
  22. package/_js/gateway/tagGateway.function.js.map +1 -0
  23. package/_js/gateway/tagGateway.utils.d.ts +21 -0
  24. package/_js/gateway/tagGateway.utils.js +139 -0
  25. package/_js/gateway/tagGateway.utils.js.map +1 -0
  26. package/_js/getCallback.d.ts +3 -0
  27. package/_js/getTagSupport.d.ts +21 -0
  28. package/_js/getTagSupport.js +110 -0
  29. package/_js/getTagSupport.js.map +1 -0
  30. package/_js/index.d.ts +20 -0
  31. package/_js/index.js +25 -0
  32. package/_js/index.js.map +1 -0
  33. package/_js/inputAttribute.js +19 -0
  34. package/_js/inputAttribute.js.map +1 -0
  35. package/_js/interpolateAttributes.js +135 -0
  36. package/_js/interpolateAttributes.js.map +1 -0
  37. package/_js/interpolateContentTemplates.d.ts +6 -0
  38. package/_js/interpolateContentTemplates.js +54 -0
  39. package/_js/interpolateContentTemplates.js.map +1 -0
  40. package/_js/interpolateElement.d.ts +9 -0
  41. package/_js/interpolateElement.js +39 -0
  42. package/_js/interpolateElement.js.map +1 -0
  43. package/_js/interpolations.d.ts +7 -0
  44. package/_js/interpolations.js +18 -0
  45. package/_js/interpolations.js.map +1 -0
  46. package/_js/js/Clones.type.d.ts +1 -0
  47. package/_js/js/Clones.type.js +2 -0
  48. package/_js/js/Clones.type.js.map +1 -0
  49. package/_js/js/Props.d.ts +1 -0
  50. package/_js/js/Props.js +2 -0
  51. package/_js/js/Props.js.map +1 -0
  52. package/_js/js/Subject.d.ts +17 -0
  53. package/_js/js/Subject.js +43 -0
  54. package/_js/js/Subject.js.map +1 -0
  55. package/_js/js/Tag.utils.d.ts +12 -0
  56. package/_js/js/Tag.utils.js +31 -0
  57. package/_js/js/Tag.utils.js.map +1 -0
  58. package/_js/js/ValueSubject.d.ts +6 -0
  59. package/_js/js/ValueSubject.js +15 -0
  60. package/_js/js/ValueSubject.js.map +1 -0
  61. package/_js/js/bindSubjectCallback.function.d.ts +5 -0
  62. package/_js/js/bindSubjectCallback.function.js +19 -0
  63. package/_js/js/bindSubjectCallback.function.js.map +1 -0
  64. package/_js/js/deepFunctions.d.ts +2 -0
  65. package/_js/js/deepFunctions.js +76 -0
  66. package/_js/js/deepFunctions.js.map +1 -0
  67. package/_js/js/elementDestroyCheck.function.d.ts +3 -0
  68. package/_js/js/elementDestroyCheck.function.js +17 -0
  69. package/_js/js/elementDestroyCheck.function.js.map +1 -0
  70. package/_js/js/elementInitCheck.d.ts +2 -0
  71. package/_js/js/elementInitCheck.js +18 -0
  72. package/_js/js/getCallback.js +50 -0
  73. package/_js/js/getCallback.js.map +1 -0
  74. package/_js/js/html.d.ts +2 -0
  75. package/_js/js/html.js +5 -0
  76. package/_js/js/html.js.map +1 -0
  77. package/_js/js/inputAttribute.d.ts +1 -0
  78. package/_js/js/interpolateAttributes.d.ts +4 -0
  79. package/_js/js/interpolateTemplate.d.ts +17 -0
  80. package/_js/js/interpolateTemplate.js +64 -0
  81. package/_js/js/interpolateTemplate.js.map +1 -0
  82. package/_js/js/isInstance.d.ts +6 -0
  83. package/_js/js/isInstance.js +10 -0
  84. package/_js/js/isInstance.js.map +1 -0
  85. package/_js/onDestroy.d.ts +2 -0
  86. package/_js/onDestroy.js +20 -0
  87. package/_js/onDestroy.js.map +1 -0
  88. package/_js/onInit.d.ts +2 -0
  89. package/_js/onInit.js +19 -0
  90. package/_js/onInit.js.map +1 -0
  91. package/_js/processSubjectComponent.function.d.ts +8 -0
  92. package/_js/processSubjectComponent.function.js +53 -0
  93. package/_js/processSubjectComponent.function.js.map +1 -0
  94. package/_js/processSubjectValue.function.d.ts +16 -0
  95. package/_js/processSubjectValue.function.js +122 -0
  96. package/_js/processSubjectValue.function.js.map +1 -0
  97. package/_js/processTagArray.d.ts +9 -0
  98. package/_js/processTagArray.js +60 -0
  99. package/_js/processTagArray.js.map +1 -0
  100. package/_js/processTagResult.function.d.ts +10 -0
  101. package/_js/processTagResult.function.js +40 -0
  102. package/_js/processTagResult.function.js.map +1 -0
  103. package/_js/providers.d.ts +17 -0
  104. package/_js/providers.js +86 -0
  105. package/_js/providers.js.map +1 -0
  106. package/_js/redrawTag.function.d.ts +7 -0
  107. package/_js/redrawTag.function.js +8 -0
  108. package/_js/redrawTag.function.js.map +1 -0
  109. package/_js/render.d.ts +1 -0
  110. package/_js/render.js +17 -0
  111. package/_js/render.js.map +1 -0
  112. package/_js/renderAppToElement.d.ts +14 -0
  113. package/_js/renderAppToElement.js +57 -0
  114. package/_js/renderAppToElement.js.map +1 -0
  115. package/_js/setUse.function.d.ts +23 -0
  116. package/_js/setUse.function.js +14 -0
  117. package/_js/setUse.function.js.map +1 -0
  118. package/_js/state.d.ts +21 -0
  119. package/_js/state.js +129 -0
  120. package/_js/state.js.map +1 -0
  121. package/_js/tag.d.ts +7 -0
  122. package/_js/tag.js +46 -0
  123. package/_js/tag.js.map +1 -0
  124. package/_js/tagElement.d.ts +14 -0
  125. package/_js/tagElement.js +57 -0
  126. package/_js/tagElement.js.map +1 -0
  127. package/_js/tagGateway.function.d.ts +14 -0
  128. package/_js/tagGateway.function.js +138 -0
  129. package/_js/tagGateway.function.js.map +1 -0
  130. package/_js/tagRunner.d.ts +6 -0
  131. package/_js/tagRunner.js +19 -0
  132. package/_js/tagRunner.js.map +1 -0
  133. package/_js/templater.utils.d.ts +27 -0
  134. package/_js/templater.utils.js +98 -0
  135. package/_js/templater.utils.js.map +1 -0
  136. package/_js/updateTag.utils.d.ts +6 -0
  137. package/_js/updateTag.utils.js +102 -0
  138. package/_js/updateTag.utils.js.map +1 -0
  139. package/index.js +1 -1
  140. package/js/ElementTarget.interface.d.ts +7 -0
  141. package/js/ElementTarget.interface.js +2 -0
  142. package/js/ElementTarget.interface.js.map +1 -0
  143. package/js/ElementTargetEvent.interface.d.ts +6 -0
  144. package/js/ElementTargetEvent.interface.js +2 -0
  145. package/js/ElementTargetEvent.interface.js.map +1 -0
  146. package/js/Tag.class.js +5 -5
  147. package/js/Tag.class.js.map +1 -1
  148. package/js/Tag.utils.d.ts +3 -2
  149. package/js/Tag.utils.js +4 -1
  150. package/js/Tag.utils.js.map +1 -1
  151. package/js/bindSubjectCallback.function.js +1 -0
  152. package/js/bindSubjectCallback.function.js.map +1 -1
  153. package/js/elementInitCheck.js.map +1 -1
  154. package/js/gateway/gateway.web.component.d.ts +1 -1
  155. package/js/gateway/gateway.web.component.js +1 -1
  156. package/js/gateway/gateway.web.component.js.map +1 -1
  157. package/js/gateway/index.d.ts +1 -1
  158. package/js/gateway/index.js +1 -0
  159. package/js/gateway/index.js.map +1 -1
  160. package/js/gateway/loadTagGateway.function.d.ts +1 -1
  161. package/js/gateway/loadTagGateway.function.js +1 -1
  162. package/js/gateway/loadTagGateway.function.js.map +1 -1
  163. package/js/gateway/tagGateway.function.d.ts +1 -28
  164. package/js/gateway/tagGateway.function.js +1 -139
  165. package/js/gateway/tagGateway.function.js.map +1 -1
  166. package/js/gateway/tagGateway.utils.d.ts +21 -0
  167. package/js/gateway/tagGateway.utils.js +139 -0
  168. package/js/gateway/tagGateway.utils.js.map +1 -0
  169. package/js/getCallback.d.ts +1 -1
  170. package/js/index.d.ts +1 -0
  171. package/js/index.js +1 -0
  172. package/js/index.js.map +1 -1
  173. package/js/interpolateAttributes.js +7 -4
  174. package/js/interpolateAttributes.js.map +1 -1
  175. package/js/processSubjectValue.function.d.ts +8 -1
  176. package/js/processSubjectValue.function.js +12 -5
  177. package/js/processSubjectValue.function.js.map +1 -1
  178. package/js/processTagArray.d.ts +10 -1
  179. package/js/processTagArray.js +9 -3
  180. package/js/processTagArray.js.map +1 -1
  181. package/js/processTagResult.function.d.ts +3 -1
  182. package/js/processTagResult.function.js +14 -10
  183. package/js/processTagResult.function.js.map +1 -1
  184. package/js/state.d.ts +3 -7
  185. package/js/state.js +27 -17
  186. package/js/state.js.map +1 -1
  187. package/js/tagElement.js +5 -2
  188. package/js/tagElement.js.map +1 -1
  189. package/js/updateTag.utils.d.ts +2 -1
  190. package/js/updateTag.utils.js +56 -11
  191. package/js/updateTag.utils.js.map +1 -1
  192. package/package.json +1 -1
  193. /package/{js/js → _js}/Clones.type.d.ts +0 -0
  194. /package/{js/js → _js}/Clones.type.js +0 -0
  195. /package/{js/js → _js}/Clones.type.js.map +0 -0
  196. /package/{js/js → _js}/Props.d.ts +0 -0
  197. /package/{js/js → _js}/Props.js +0 -0
  198. /package/{js/js → _js}/Props.js.map +0 -0
  199. /package/{js/js → _js}/Subject.d.ts +0 -0
  200. /package/{js/js → _js}/Subject.js +0 -0
  201. /package/{js/js → _js}/Subject.js.map +0 -0
  202. /package/{js/js → _js}/Tag.utils.d.ts +0 -0
  203. /package/{js/js → _js}/Tag.utils.js +0 -0
  204. /package/{js/js → _js}/Tag.utils.js.map +0 -0
  205. /package/{js/js → _js}/ValueSubject.d.ts +0 -0
  206. /package/{js/js → _js}/ValueSubject.js +0 -0
  207. /package/{js/js → _js}/ValueSubject.js.map +0 -0
  208. /package/{js/js → _js}/bindSubjectCallback.function.d.ts +0 -0
  209. /package/{js/js → _js}/bindSubjectCallback.function.js +0 -0
  210. /package/{js/js → _js}/bindSubjectCallback.function.js.map +0 -0
  211. /package/{js/js → _js}/deepFunctions.d.ts +0 -0
  212. /package/{js/js → _js}/deepFunctions.js +0 -0
  213. /package/{js/js → _js}/deepFunctions.js.map +0 -0
  214. /package/{js/js → _js}/elementDestroyCheck.function.d.ts +0 -0
  215. /package/{js/js → _js}/elementDestroyCheck.function.js +0 -0
  216. /package/{js/js → _js}/elementDestroyCheck.function.js.map +0 -0
  217. /package/{js/js → _js}/elementInitCheck.d.ts +0 -0
  218. /package/{js/js → _js}/elementInitCheck.js +0 -0
  219. /package/{js/js → _js}/getCallback.js +0 -0
  220. /package/{js/js → _js}/getCallback.js.map +0 -0
  221. /package/{js/js → _js}/html.d.ts +0 -0
  222. /package/{js/js → _js}/html.js +0 -0
  223. /package/{js/js → _js}/html.js.map +0 -0
  224. /package/{js/js → _js}/inputAttribute.d.ts +0 -0
  225. /package/{js/js → _js}/interpolateAttributes.d.ts +0 -0
  226. /package/{js/js → _js}/interpolateTemplate.d.ts +0 -0
  227. /package/{js/js → _js}/interpolateTemplate.js +0 -0
  228. /package/{js/js → _js}/interpolateTemplate.js.map +0 -0
  229. /package/{js/js → _js}/isInstance.d.ts +0 -0
  230. /package/{js/js → _js}/isInstance.js +0 -0
  231. /package/{js/js → _js}/isInstance.js.map +0 -0
  232. /package/{js → _js}/js/Tag.class.d.ts +0 -0
  233. /package/{js → _js}/js/Tag.class.js +0 -0
  234. /package/{js → _js}/js/Tag.class.js.map +0 -0
  235. /package/{js → _js}/js/elementInitCheck.js.map +0 -0
  236. /package/{js → _js}/js/getCallback.d.ts +0 -0
  237. /package/{js → _js}/js/getTagSupport.d.ts +0 -0
  238. /package/{js → _js}/js/getTagSupport.js +0 -0
  239. /package/{js → _js}/js/getTagSupport.js.map +0 -0
  240. /package/{js → _js}/js/index.d.ts +0 -0
  241. /package/{js → _js}/js/index.js +0 -0
  242. /package/{js → _js}/js/index.js.map +0 -0
  243. /package/{js → _js}/js/inputAttribute.js +0 -0
  244. /package/{js → _js}/js/inputAttribute.js.map +0 -0
  245. /package/{js → _js}/js/interpolateAttributes.js +0 -0
  246. /package/{js → _js}/js/interpolateAttributes.js.map +0 -0
  247. /package/{js → _js}/js/interpolateContentTemplates.d.ts +0 -0
  248. /package/{js → _js}/js/interpolateContentTemplates.js +0 -0
  249. /package/{js → _js}/js/interpolateContentTemplates.js.map +0 -0
  250. /package/{js → _js}/js/interpolateElement.d.ts +0 -0
  251. /package/{js → _js}/js/interpolateElement.js +0 -0
  252. /package/{js → _js}/js/interpolateElement.js.map +0 -0
  253. /package/{js → _js}/js/interpolations.d.ts +0 -0
  254. /package/{js → _js}/js/interpolations.js +0 -0
  255. /package/{js → _js}/js/interpolations.js.map +0 -0
  256. /package/{js → _js}/js/onDestroy.d.ts +0 -0
  257. /package/{js → _js}/js/onDestroy.js +0 -0
  258. /package/{js → _js}/js/onDestroy.js.map +0 -0
  259. /package/{js → _js}/js/onInit.d.ts +0 -0
  260. /package/{js → _js}/js/onInit.js +0 -0
  261. /package/{js → _js}/js/onInit.js.map +0 -0
  262. /package/{js → _js}/js/processSubjectComponent.function.d.ts +0 -0
  263. /package/{js → _js}/js/processSubjectComponent.function.js +0 -0
  264. /package/{js → _js}/js/processSubjectComponent.function.js.map +0 -0
  265. /package/{js → _js}/js/processSubjectValue.function.d.ts +0 -0
  266. /package/{js → _js}/js/processSubjectValue.function.js +0 -0
  267. /package/{js → _js}/js/processSubjectValue.function.js.map +0 -0
  268. /package/{js → _js}/js/processTagArray.d.ts +0 -0
  269. /package/{js → _js}/js/processTagArray.js +0 -0
  270. /package/{js → _js}/js/processTagArray.js.map +0 -0
  271. /package/{js → _js}/js/processTagResult.function.d.ts +0 -0
  272. /package/{js → _js}/js/processTagResult.function.js +0 -0
  273. /package/{js → _js}/js/processTagResult.function.js.map +0 -0
  274. /package/{js → _js}/js/providers.d.ts +0 -0
  275. /package/{js → _js}/js/providers.js +0 -0
  276. /package/{js → _js}/js/providers.js.map +0 -0
  277. /package/{js → _js}/js/redrawTag.function.d.ts +0 -0
  278. /package/{js → _js}/js/redrawTag.function.js +0 -0
  279. /package/{js → _js}/js/redrawTag.function.js.map +0 -0
  280. /package/{js → _js}/js/render.d.ts +0 -0
  281. /package/{js → _js}/js/render.js +0 -0
  282. /package/{js → _js}/js/render.js.map +0 -0
  283. /package/{js → _js}/js/renderAppToElement.d.ts +0 -0
  284. /package/{js → _js}/js/renderAppToElement.js +0 -0
  285. /package/{js → _js}/js/renderAppToElement.js.map +0 -0
  286. /package/{js → _js}/js/setUse.function.d.ts +0 -0
  287. /package/{js → _js}/js/setUse.function.js +0 -0
  288. /package/{js → _js}/js/setUse.function.js.map +0 -0
  289. /package/{js → _js}/js/state.d.ts +0 -0
  290. /package/{js → _js}/js/state.js +0 -0
  291. /package/{js → _js}/js/state.js.map +0 -0
  292. /package/{js → _js}/js/tag.d.ts +0 -0
  293. /package/{js → _js}/js/tag.js +0 -0
  294. /package/{js → _js}/js/tag.js.map +0 -0
  295. /package/{js → _js}/js/tagElement.d.ts +0 -0
  296. /package/{js → _js}/js/tagElement.js +0 -0
  297. /package/{js → _js}/js/tagElement.js.map +0 -0
  298. /package/{js → _js}/js/tagGateway.function.d.ts +0 -0
  299. /package/{js → _js}/js/tagGateway.function.js +0 -0
  300. /package/{js → _js}/js/tagGateway.function.js.map +0 -0
  301. /package/{js → _js}/js/tagRunner.d.ts +0 -0
  302. /package/{js → _js}/js/tagRunner.js +0 -0
  303. /package/{js → _js}/js/tagRunner.js.map +0 -0
  304. /package/{js → _js}/js/templater.utils.d.ts +0 -0
  305. /package/{js → _js}/js/templater.utils.js +0 -0
  306. /package/{js → _js}/js/templater.utils.js.map +0 -0
  307. /package/{js → _js}/js/updateTag.utils.d.ts +0 -0
  308. /package/{js → _js}/js/updateTag.utils.js +0 -0
  309. /package/{js → _js}/js/updateTag.utils.js.map +0 -0
  310. /package/{js → _js}/js/wait.d.ts +0 -0
  311. /package/{js → _js}/js/wait.js +0 -0
  312. /package/{js → _js}/js/wait.js.map +0 -0
  313. /package/{js → _js}/wait.d.ts +0 -0
  314. /package/{js → _js}/wait.js +0 -0
  315. /package/{js → _js}/wait.js.map +0 -0
@@ -0,0 +1,139 @@
1
+ import { redrawTag, tagElement } from "../index.js";
2
+ import { loadTagGateway } from "./loadTagGateway.function.js";
3
+ const gateways = {};
4
+ export const gatewayTagIds = {};
5
+ export function checkAllGateways() {
6
+ Object.entries(gateways).forEach(([id, gateways]) => checkGateways(gateways));
7
+ }
8
+ export function checkGateways(gateways) {
9
+ gateways.forEach(gateway => checkGateway(gateway));
10
+ }
11
+ function checkGateway(gateway) {
12
+ const { element } = gateway;
13
+ if (document.body.contains(element)) {
14
+ return; // its still good, do not continue to destroy
15
+ }
16
+ destroyGateway(gateway);
17
+ return false;
18
+ }
19
+ export function destroyGateway(gateway) {
20
+ const { id, observer, tag } = gateway;
21
+ observer.disconnect();
22
+ tag.destroy();
23
+ delete gateways[id];
24
+ }
25
+ export function getTagId(component) {
26
+ const componentString = functionToHtmlId(component);
27
+ return '__tagTemplate_' + componentString;
28
+ }
29
+ function parsePropsString(element) {
30
+ const propsString = element.getAttribute('props');
31
+ if (!propsString) {
32
+ return { element };
33
+ }
34
+ try {
35
+ const props = JSON.parse(propsString);
36
+ // attribute eventProps as output bindings
37
+ const eventPropsString = element.getAttribute('events');
38
+ if (eventPropsString) {
39
+ eventPropsString.split(',').map(x => x.trim()).map((name) => {
40
+ props[name] = (value) => dispatchEvent(name, { detail: { [name]: value } });
41
+ });
42
+ }
43
+ const dispatchEvent = function (name, eventData) {
44
+ const event = new CustomEvent(name, eventData);
45
+ element.dispatchEvent(event);
46
+ };
47
+ // props.dispatchEvent = dispatchEvent
48
+ return props;
49
+ }
50
+ catch (err) {
51
+ console.warn('Failed to parse props on element', { element, propsString });
52
+ throw err;
53
+ }
54
+ }
55
+ /** adds to gateways[id].push */
56
+ function watchElement(id, targetNode, tag, component) {
57
+ let lastTag = tag;
58
+ const observer = new MutationObserver(mutationsList => {
59
+ if (!checkGateway(gateway)) {
60
+ return;
61
+ }
62
+ for (const mutation of mutationsList) {
63
+ if (mutation.type === 'attributes') {
64
+ updateTag();
65
+ }
66
+ }
67
+ });
68
+ function updateTag() {
69
+ const templater = tag.tagSupport.templater;
70
+ const oldProps = templater.tagSupport.props;
71
+ const newProps = parsePropsString(targetNode);
72
+ templater.tagSupport.props = newProps;
73
+ const isSameProps = JSON.stringify(oldProps) === JSON.stringify(newProps);
74
+ if (isSameProps) {
75
+ return; // no reason to update, same props
76
+ }
77
+ templater.tagSupport.latestProps = newProps;
78
+ const result = redrawTag(lastTag, templater);
79
+ // update records
80
+ gateway.tag = lastTag = result.retag;
81
+ }
82
+ loadTagGateway(component);
83
+ const gateway = {
84
+ id, tag, observer, component, element: targetNode, updateTag,
85
+ };
86
+ gateways[id] = gateways[id] || [];
87
+ gateways[id].push(gateway);
88
+ targetNode.gateway = gateway;
89
+ // Configure the observer to watch for changes in child nodes and attributes
90
+ const config = { attributes: true };
91
+ // Start observing the target node for specified changes
92
+ observer.observe(targetNode, config);
93
+ return gateway;
94
+ }
95
+ function functionToHtmlId(func) {
96
+ // Convert function to string
97
+ let funcString = func.toString();
98
+ // Remove spaces and replace special characters with underscores
99
+ let cleanedString = funcString.replace(/\s+/g, '_')
100
+ .replace(/[^\w\d]/g, '_');
101
+ // Ensure the ID starts with a letter
102
+ if (!/^[a-zA-Z]/.test(cleanedString)) {
103
+ cleanedString = 'fn_' + cleanedString;
104
+ }
105
+ return cleanedString;
106
+ }
107
+ export function checkByElement(element) {
108
+ const id = element.id || element.getAttribute('id');
109
+ if (!id) {
110
+ const message = 'Cannot check a tag on element with no id attribute';
111
+ console.warn(message, { id, element });
112
+ throw new Error(message);
113
+ }
114
+ const component = gatewayTagIds[id];
115
+ if (!component) {
116
+ const message = `Cannot find a tag registered by id of ${id}`;
117
+ console.warn(message, { id, element });
118
+ throw new Error(message);
119
+ }
120
+ return checkElement(id, element, component);
121
+ }
122
+ export function checkElement(id, element, component) {
123
+ const gateway = element.gateway;
124
+ if (gateway) {
125
+ gateway.updateTag();
126
+ return gateway;
127
+ }
128
+ const props = parsePropsString(element);
129
+ try {
130
+ const { tag } = tagElement(component, element, props);
131
+ // watch element AND add to gateways[id].push()
132
+ return watchElement(id, element, tag, component);
133
+ }
134
+ catch (err) {
135
+ console.warn('Failed to render component to element', { component, element, props });
136
+ throw err;
137
+ }
138
+ }
139
+ //# sourceMappingURL=tagGateway.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tagGateway.utils.js","sourceRoot":"","sources":["../../ts/gateway/tagGateway.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ type Callback = <T>(...args: unknown[]) => (T | void);
2
+ export declare let getCallback: () => (callback: Callback) => () => void;
3
+ export {};
@@ -0,0 +1,21 @@
1
+ import { Props } from "./Props.js";
2
+ import { Tag, TagMemory } from "./Tag.class.js";
3
+ import { TemplaterResult } from "./templater.utils.js";
4
+ export declare class TagSupport {
5
+ templater: TemplaterResult;
6
+ props?: unknown;
7
+ clonedProps: Props;
8
+ latestProps: Props;
9
+ latestClonedProps: Props;
10
+ memory: TagMemory;
11
+ constructor(templater: TemplaterResult, props?: unknown);
12
+ oldest?: Tag;
13
+ newest?: Tag;
14
+ hasPropChanges(props: any, // natural props
15
+ pastCloneProps: any, // previously cloned props
16
+ compareToProps: any): boolean;
17
+ mutatingRender(): Tag;
18
+ render(): Tag;
19
+ renderExistingTag(tag: Tag, newTemplater: TemplaterResult): boolean;
20
+ }
21
+ export declare function getTagSupport(templater: TemplaterResult, props?: Props): TagSupport;
@@ -0,0 +1,110 @@
1
+ import { deepClone, deepEqual } from "./deepFunctions.js";
2
+ import { getNewProps } from "./templater.utils.js";
3
+ export class TagSupport {
4
+ templater;
5
+ props;
6
+ // props from **constructor** are converted for comparing over renders
7
+ clonedProps;
8
+ latestProps; // new props NOT cloned props
9
+ latestClonedProps;
10
+ memory = {
11
+ context: {}, // populated after reading interpolated.values array converted to an object {variable0, variable:1}
12
+ state: {
13
+ newest: [],
14
+ },
15
+ providers: [],
16
+ /** Indicator of re-rending. Saves from double rending something already rendered */
17
+ renderCount: 0,
18
+ };
19
+ constructor(templater, props) {
20
+ this.templater = templater;
21
+ this.props = props;
22
+ this.latestProps = props; // getNewProps(props, templater)
23
+ const latestProps = getNewProps(props, templater);
24
+ this.latestClonedProps = deepClone(latestProps);
25
+ this.clonedProps = this.latestClonedProps;
26
+ }
27
+ // TODO: these below may not be in use
28
+ oldest;
29
+ newest;
30
+ hasPropChanges(props, // natural props
31
+ pastCloneProps, // previously cloned props
32
+ compareToProps) {
33
+ const oldProps = this.props;
34
+ const isCommonEqual = props === undefined && props === compareToProps;
35
+ const isEqual = isCommonEqual || deepEqual(pastCloneProps, oldProps);
36
+ return !isEqual;
37
+ }
38
+ mutatingRender() {
39
+ const message = 'Tag function "render()" was called in sync but can only be called async';
40
+ console.error(message, { tagSupport: this });
41
+ throw new Error(message);
42
+ } // loaded later and only callable async
43
+ render() {
44
+ ++this.memory.renderCount;
45
+ return this.mutatingRender();
46
+ } // ensure this function still works even during deconstructing
47
+ renderExistingTag(tag, newTemplater) {
48
+ const preRenderCount = this.memory.renderCount;
49
+ providersChangeCheck(tag);
50
+ // When the providers were checked, a render to myself occurred and I do not need to re-render again
51
+ if (preRenderCount !== this.memory.renderCount) {
52
+ return true;
53
+ }
54
+ const oldTemplater = tag.tagSupport.templater;
55
+ const nowProps = newTemplater.tagSupport.props; // natural props
56
+ const oldProps = oldTemplater?.tagSupport.props; // previously cloned props
57
+ const newProps = newTemplater.tagSupport.clonedProps; // new props cloned
58
+ console.log('rendering existing tag');
59
+ return renderTag(this, nowProps, oldProps, newProps, this.templater);
60
+ }
61
+ }
62
+ export function getTagSupport(templater, props) {
63
+ const tagSupport = new TagSupport(templater, props);
64
+ return tagSupport;
65
+ }
66
+ function providersChangeCheck(tag) {
67
+ const providersWithChanges = tag.tagSupport.memory.providers.filter(provider => {
68
+ return !deepEqual(provider.instance, provider.clone);
69
+ });
70
+ // reset clones
71
+ providersWithChanges.forEach(provider => {
72
+ const appElement = tag.getAppElement();
73
+ handleProviderChanges(appElement, provider);
74
+ provider.clone = deepClone(provider.instance);
75
+ });
76
+ }
77
+ function handleProviderChanges(appElement, provider) {
78
+ const tagsWithProvider = getTagsWithProvider(appElement, provider);
79
+ tagsWithProvider.forEach(({ tag, renderCount, provider }) => {
80
+ const unRendered = renderCount === tag.tagSupport.memory.renderCount;
81
+ if (unRendered) {
82
+ provider.clone = deepClone(provider.instance);
83
+ tag.tagSupport.render();
84
+ }
85
+ });
86
+ }
87
+ function getTagsWithProvider(tag, provider, memory = []) {
88
+ const hasProvider = tag.tagSupport.memory.providers.find(xProvider => xProvider.constructMethod === provider.constructMethod);
89
+ if (hasProvider) {
90
+ memory.push({
91
+ tag,
92
+ renderCount: tag.tagSupport.memory.renderCount,
93
+ provider: hasProvider
94
+ });
95
+ }
96
+ tag.children.forEach(child => getTagsWithProvider(child, provider, memory));
97
+ return memory;
98
+ }
99
+ function renderTag(tagSupport, nowProps, // natural props
100
+ oldProps, // previously NOT cloned props
101
+ newProps, // now props cloned
102
+ templater) {
103
+ const hasPropsChanged = tagSupport.hasPropChanges(nowProps, newProps, oldProps);
104
+ tagSupport.newest = templater.redraw(); // No change detected, just redraw me only
105
+ if (!hasPropsChanged) {
106
+ return true;
107
+ }
108
+ return false;
109
+ }
110
+ //# sourceMappingURL=getTagSupport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getTagSupport.js","sourceRoot":"","sources":["../ts/getTagSupport.ts"],"names":[],"mappings":"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"}
package/_js/index.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ /** Must use .js and NOT .ts extensions here */
2
+ export * from "./ElementTargetEvent.interface.js";
3
+ export * from "./html.js";
4
+ export * from "./Subject.js";
5
+ export * from "./interpolateElement.js";
6
+ export * from "./getTagSupport.js";
7
+ export * from "./redrawTag.function.js";
8
+ export * from "./gateway/index.js";
9
+ export { isTagComponent } from "./isInstance.js";
10
+ export { tags, tag } from "./tag.js";
11
+ export { TagComponent } from "./templater.utils.js";
12
+ export { tagElement } from "./tagElement.js";
13
+ export { Tag } from "./Tag.class.js";
14
+ export { runBeforeRender } from "./tagRunner.js";
15
+ export { setUse } from "./setUse.function.js";
16
+ export { providers } from "./providers.js";
17
+ export { state0, state } from "./state.js";
18
+ export * from "./onInit.js";
19
+ export * from "./onDestroy.js";
20
+ export * from "./getCallback.js";
package/_js/index.js ADDED
@@ -0,0 +1,25 @@
1
+ /** Must use .js and NOT .ts extensions here */
2
+ export * from "./ElementTargetEvent.interface.js";
3
+ export * from "./html.js";
4
+ export * from "./Subject.js";
5
+ export * from "./interpolateElement.js";
6
+ export * from "./getTagSupport.js";
7
+ export * from "./redrawTag.function.js";
8
+ export * from "./gateway/index.js";
9
+ // TODO: export *
10
+ export { isTagComponent } from "./isInstance.js";
11
+ export { tags, tag } from "./tag.js";
12
+ export { tagElement } from "./tagElement.js";
13
+ export { Tag } from "./Tag.class.js";
14
+ export { runBeforeRender } from "./tagRunner.js";
15
+ export { setUse } from "./setUse.function.js";
16
+ /* hooks */
17
+ // TODO: export *
18
+ export { providers } from "./providers.js";
19
+ // TODO: export *
20
+ export { state0, state } from "./state.js";
21
+ export * from "./onInit.js";
22
+ export * from "./onDestroy.js";
23
+ export * from "./getCallback.js";
24
+ /* end: hooks */
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,+CAA+C;AAE/C,cAAc,mCAAmC,CAAA;AAEjD,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAElC,iBAAiB;AACjB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAChD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAEpC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAA;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAE7C,WAAW;AACT,iBAAiB;AACjB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,iBAAiB;AACjB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAClC,gBAAgB"}
@@ -0,0 +1,19 @@
1
+ export function inputAttribute(name, value, element) {
2
+ const names = name.split('.');
3
+ // style.position = "absolute"
4
+ if (names[0] === 'style') {
5
+ element.style[names[1]] = value;
6
+ }
7
+ // Example: class.width-full = "true"
8
+ if (names[0] === 'class') {
9
+ names.shift();
10
+ if (value) {
11
+ names.forEach(name => element.classList.add(name));
12
+ }
13
+ else {
14
+ names.forEach(name => element.classList.remove(name));
15
+ }
16
+ return;
17
+ }
18
+ }
19
+ //# sourceMappingURL=inputAttribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputAttribute.js","sourceRoot":"","sources":["../ts/inputAttribute.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,KAAU,EACV,OAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAE7B,8BAA8B;IAC9B,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACvB,OAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;IAC1C,CAAC;IAED,qCAAqC;IACrC,IAAG,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,IAAG,KAAK,EAAE,CAAC;YACT,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACvD,CAAC;QACD,OAAM;IACR,CAAC;AACH,CAAC"}
@@ -0,0 +1,135 @@
1
+ import { inputAttribute } from "./inputAttribute.js";
2
+ import { isSubjectInstance } from "./isInstance.js";
3
+ export function interpolateAttributes(child, scope, ownerTag) {
4
+ const attrNames = child.getAttributeNames();
5
+ const isTextArea = child.nodeName === 'TEXTAREA';
6
+ if (isTextArea && !attrNames.includes('value')) {
7
+ const value = child.getAttribute('textVarValue'); // (child as any).value
8
+ processAttribute('textVarValue', value, child, scope, ownerTag, (_name, value) => child.value = value);
9
+ }
10
+ const howToSet = (name, value) => {
11
+ /*
12
+ if(name === 'class'){
13
+ value.split(' ').forEach(className => child.classList.add(className))
14
+ return
15
+ }
16
+ */
17
+ child.setAttribute(name, value);
18
+ };
19
+ attrNames.forEach(attrName => {
20
+ const value = child.getAttribute(attrName);
21
+ processAttribute(attrName, value, child, scope, ownerTag, howToSet);
22
+ });
23
+ }
24
+ /** Looking for (class | style) followed by a period */
25
+ export function isSpecialAttr(attrName) {
26
+ return attrName.search(/^(class|style)(\.)/) >= 0;
27
+ }
28
+ function processAttribute(attrName, value, child, scope, ownerTag, howToSet) {
29
+ if (isTagVar(value)) {
30
+ return processScopedNameValueAttr(attrName, value, child, scope, ownerTag, howToSet);
31
+ }
32
+ if (isTagVar(attrName)) {
33
+ const contextValueSubject = getContextValueByVarString(scope, attrName);
34
+ let lastValue;
35
+ // the above callback gets called immediately since its a ValueSubject()
36
+ const sub = contextValueSubject.subscribe((value) => {
37
+ processNameOnlyAttr(value, lastValue, child, ownerTag, howToSet);
38
+ lastValue = value;
39
+ });
40
+ ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
41
+ child.removeAttribute(attrName);
42
+ return;
43
+ }
44
+ // Non dynamic
45
+ const isSpecial = isSpecialAttr(attrName);
46
+ if (isSpecial) {
47
+ return inputAttribute(attrName, value, child);
48
+ }
49
+ }
50
+ const startRegX = /^\s*{__tagvar/;
51
+ const endRegX = /}\s*$/;
52
+ function isTagVar(value) {
53
+ return value && value.search(startRegX) >= 0 && value.search(endRegX) >= 0;
54
+ }
55
+ function processNameOnlyAttr(attrValue, lastValue, child, ownerTag, howToSet) {
56
+ if (lastValue && lastValue != attrValue) {
57
+ if (typeof (lastValue) === 'string') {
58
+ child.removeAttribute(lastValue);
59
+ }
60
+ else if (lastValue instanceof Object) {
61
+ Object.entries(lastValue).forEach(([name]) => child.removeAttribute(name));
62
+ }
63
+ }
64
+ if (typeof (attrValue) === 'string') {
65
+ if (!attrValue.length) {
66
+ return;
67
+ }
68
+ processNameValueAttr(attrValue, '', child, ownerTag, howToSet);
69
+ return;
70
+ }
71
+ if (attrValue instanceof Object) {
72
+ Object.entries(attrValue).forEach(([name, value]) => processNameValueAttr(name, value, child, ownerTag, howToSet));
73
+ return;
74
+ }
75
+ }
76
+ function getContextValueByVarString(scope, value) {
77
+ const code = value.replace('{', '').split('').reverse().join('').replace('}', '').split('').reverse().join('');
78
+ return scope[code];
79
+ }
80
+ function processNameValueAttr(attrName, result, child, ownerTag, howToSet) {
81
+ const isSpecial = isSpecialAttr(attrName);
82
+ // attach as callback
83
+ if (result instanceof Function) {
84
+ const action = function (...args) {
85
+ return result(child, args);
86
+ };
87
+ child[attrName].action = action;
88
+ // child.addEventListener(attrName, action)
89
+ }
90
+ if (isSubjectInstance(result)) {
91
+ child.removeAttribute(attrName);
92
+ const callback = (newAttrValue) => processSubjectValue(newAttrValue, child, attrName, isSpecial, howToSet);
93
+ // the above callback gets called immediately since its a ValueSubject()
94
+ const sub = result.subscribe(callback);
95
+ ownerTag.cloneSubs.push(sub); // this is where unsubscribe is picked up
96
+ return;
97
+ }
98
+ howToSet(attrName, result);
99
+ // child.setAttribute(attrName, result.value)
100
+ return;
101
+ }
102
+ function processSubjectValue(newAttrValue, child, attrName, isSpecial, howToSet) {
103
+ if (newAttrValue instanceof Function) {
104
+ ;
105
+ child[attrName] = function (...args) {
106
+ return newAttrValue(child, args);
107
+ };
108
+ child[attrName].tagFunction = newAttrValue;
109
+ return;
110
+ }
111
+ if (isSpecial) {
112
+ inputAttribute(attrName, newAttrValue, child);
113
+ return;
114
+ }
115
+ if (newAttrValue) {
116
+ howToSet(attrName, newAttrValue);
117
+ // child.setAttribute(attrName, newAttrValue)
118
+ return;
119
+ }
120
+ const isDeadValue = newAttrValue === undefined || newAttrValue === false || newAttrValue === null;
121
+ if (isDeadValue) {
122
+ child.removeAttribute(attrName);
123
+ return;
124
+ }
125
+ // value is 0
126
+ howToSet(attrName, newAttrValue);
127
+ // child.setAttribute(attrName, newAttrValue)
128
+ }
129
+ function processScopedNameValueAttr(attrName, value, // {__tagVarN}
130
+ child, scope, ownerTag, howToSet) {
131
+ // get the code inside the brackets like "variable0" or "{variable0}"
132
+ const result = getContextValueByVarString(scope, value);
133
+ return processNameValueAttr(attrName, result, child, ownerTag, howToSet);
134
+ }
135
+ //# sourceMappingURL=interpolateAttributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateAttributes.js","sourceRoot":"","sources":["../ts/interpolateAttributes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Clones } from "./Clones.type.js";
2
+ import { Tag } from "./Tag.class.js";
3
+ import { InterpolateOptions } from "./interpolateElement.js";
4
+ /** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
5
+ export declare function interpolateContentTemplates(element: Element, // <div><div></div><template tag-wrap="22">...</template></div>
6
+ variable: any, tag: Tag, options: InterpolateOptions, children: HTMLCollection): Clones;
@@ -0,0 +1,54 @@
1
+ import { interpolateTemplate } from "./interpolateTemplate.js";
2
+ const templateSearch = new RegExp('\\s*<template interpolate end id="__tagvar(\\d{1,4})"([^>]*)></template>(\\s*)');
3
+ /** Returns subscriptions[] that will need to be unsubscribed from when element is destroyed */
4
+ export function interpolateContentTemplates(element, // <div><div></div><template tag-wrap="22">...</template></div>
5
+ variable, tag, options, children) {
6
+ if (!children || element.tagName === 'TEMPLATE') {
7
+ return []; // done
8
+ }
9
+ const counts = {
10
+ added: 0,
11
+ removed: 0,
12
+ };
13
+ const clones = [];
14
+ const childArray = new Array(...children);
15
+ if (element.tagName === 'TEXTAREA') {
16
+ scanTextAreaValue(element);
17
+ }
18
+ childArray.forEach(child => {
19
+ const nextClones = interpolateTemplate(child, variable, tag, counts, options);
20
+ if (child.tagName === 'TEXTAREA') {
21
+ scanTextAreaValue(child);
22
+ }
23
+ clones.push(...nextClones);
24
+ if (child.children) {
25
+ const nextKids = new Array(...child.children);
26
+ nextKids.forEach(subChild => {
27
+ if (isRenderEndTemplate(subChild)) {
28
+ interpolateTemplate(subChild, variable, tag, counts, options);
29
+ }
30
+ const nextClones = interpolateContentTemplates(subChild, variable, tag, options, subChild.children);
31
+ clones.push(...nextClones);
32
+ });
33
+ }
34
+ });
35
+ return clones;
36
+ }
37
+ function isRenderEndTemplate(child) {
38
+ const isTemplate = child.tagName === 'TEMPLATE';
39
+ return isTemplate &&
40
+ child.getAttribute('interpolate') !== undefined &&
41
+ child.getAttribute('end') !== undefined;
42
+ }
43
+ function scanTextAreaValue(textarea) {
44
+ const value = textarea.value;
45
+ if (value.search(templateSearch) >= 0) {
46
+ const match = value.match(/__tagvar(\d{1,4})/);
47
+ const result = match ? match[0] : '';
48
+ const token = '{' + result + '}';
49
+ // textarea.value = token
50
+ textarea.value = '';
51
+ textarea.setAttribute('textVarValue', token);
52
+ }
53
+ }
54
+ //# sourceMappingURL=interpolateContentTemplates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateContentTemplates.js","sourceRoot":"","sources":["../ts/interpolateContentTemplates.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAEhF,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,gFAAgF,CAAC,CAAA;AAEnH,+FAA+F;AAC/F,MAAM,UAAU,2BAA2B,CACzC,OAAgB,EAAE,+DAA+D;AACjF,QAAa,EACb,GAAQ,EACR,OAA2B,EAC3B,QAAwB;IAGxB,IAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,OAAO,KAAK,UAAU,EAAG,CAAC;QAClD,OAAO,EAAE,CAAA,CAAC,OAAO;IACnB,CAAC;IAED,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC;KACX,CAAA;IACD,MAAM,MAAM,GAAW,EAAE,CAAA;IAEzB,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;IAEzC,IAAG,OAAO,CAAC,OAAO,KAAG,UAAU,EAAE,CAAC;QAChC,iBAAiB,CAAC,OAA8B,CAAC,CAAA;IACnD,CAAC;IAED,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACzB,MAAM,UAAU,GAAG,mBAAmB,CACpC,KAAiB,EACjB,QAAQ,EACR,GAAG,EACH,MAAM,EACN,OAAO,CACR,CAAA;QAED,IAAG,KAAK,CAAC,OAAO,KAAG,UAAU,EAAE,CAAC;YAC9B,iBAAiB,CAAC,KAA4B,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAA;QAE1B,IAAK,KAAK,CAAC,QAAQ,EAAG,CAAC;YACrB,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAC1B,IAAK,mBAAmB,CAAC,QAAQ,CAAC,EAAG,CAAC;oBACpC,mBAAmB,CAAC,QAAoB,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;gBAC3E,CAAC;gBAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;gBACnG,MAAM,CAAC,IAAI,CAAE,GAAG,UAAU,CAAE,CAAA;YAC9B,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAc;IACzC,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,KAAG,UAAU,CAAA;IAC7C,OAAO,UAAU;QACjB,KAAK,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,SAAS;QAC/C,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,SAAS,CAAA;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA6B;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;IAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,IAAG,CAAC,EAAG,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,CAAA;QAChC,yBAAyB;QACzB,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAA;QACnB,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAC9C,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Context, Tag, TagTemplate } from "./Tag.class.js";
2
+ import { Clones } from "./Clones.type.js";
3
+ export type InterpolateOptions = {
4
+ /** make the element go on document */
5
+ forceElement?: boolean;
6
+ };
7
+ export declare function interpolateElement(element: Element, context: Context, // variables used to evaluate
8
+ interpolatedTemplates: TagTemplate, tagOwner: Tag, options: InterpolateOptions): Clones;
9
+ export declare function interpolateString(string: string): import("./interpolations.js").InterpolatedTemplates;
@@ -0,0 +1,39 @@
1
+ import { interpolateAttributes } from "./interpolateAttributes.js";
2
+ import { interpolateToTemplates } from "./interpolations.js";
3
+ import { interpolateContentTemplates } from "./interpolateContentTemplates.js";
4
+ import { escapeSearch, variablePrefix } from "./Tag.class.js";
5
+ export function interpolateElement(element, context, // variables used to evaluate
6
+ interpolatedTemplates, tagOwner, options) {
7
+ const clones = [];
8
+ const result = interpolatedTemplates.interpolation; // interpolateElementChild(element)
9
+ // const result = interpolateElementChild(element)
10
+ const template = element.children[0];
11
+ const children = template.content.children;
12
+ if (result.keys.length) {
13
+ const nextClones = interpolateContentTemplates(element, context, tagOwner, options, children);
14
+ clones.push(...nextClones);
15
+ }
16
+ interpolateAttributes(element, context, tagOwner);
17
+ processChildrenAttributes(children, context, tagOwner);
18
+ return clones;
19
+ }
20
+ function processChildrenAttributes(children, context, ownerTag) {
21
+ new Array(...children).forEach(child => {
22
+ interpolateAttributes(child, context, ownerTag);
23
+ if (child.children) {
24
+ processChildrenAttributes(child.children, context, ownerTag);
25
+ }
26
+ });
27
+ }
28
+ /** Convert interpolations into template tags */
29
+ function interpolateElementChild(child) {
30
+ const result = interpolateString(child.innerHTML);
31
+ child.innerHTML = result.string;
32
+ return result;
33
+ }
34
+ export function interpolateString(string) {
35
+ const result = interpolateToTemplates(string);
36
+ result.string = result.string.replace(escapeSearch, variablePrefix);
37
+ return result;
38
+ }
39
+ //# sourceMappingURL=interpolateElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpolateElement.js","sourceRoot":"","sources":["../ts/interpolateElement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAA;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAA;AAC9E,OAAO,EAA6B,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAQxF,MAAM,UAAU,kBAAkB,CAChC,OAAgB,EAChB,OAAgB,EAAE,6BAA6B;AAC/C,qBAAkC,EAClC,QAAa,EACb,OAA2B;IAE3B,MAAM,MAAM,GAAG,EAAE,CAAA;IACjB,MAAM,MAAM,GAAG,qBAAqB,CAAC,aAAa,CAAA,CAAC,mCAAmC;IACtF,kDAAkD;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAwB,CAAA;IAC3D,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAA;IAE1C,IAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,UAAU,GAAG,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC7F,MAAM,CAAC,IAAI,CAAE,GAAG,UAAU,CAAE,CAAA;IAC9B,CAAC;IAED,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IACjD,yBAAyB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEtD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,yBAAyB,CAChC,QAAwB,EACxB,OAAgB,EAChB,QAAa;IAEb,IAAI,KAAK,CAAC,GAAG,QAAe,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QAC5C,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAE/C,IAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClB,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,gDAAgD;AAChD,SAAS,uBAAuB,CAC9B,KAAc;IAEd,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IACjD,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;IAC/B,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC,CAAA;IACnE,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const interpolateReplace: RegExp;
2
+ export type InterpolatedTemplates = {
3
+ string: string;
4
+ keys: string[];
5
+ };
6
+ /** replaces ${x} with <template id="x-start"></template><template id="x-end"></template> */
7
+ export declare function interpolateToTemplates(template: string): InterpolatedTemplates;