@dooboostore/dom-render 1.0.109 → 1.0.110

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 (176) hide show
  1. package/dist/cjs/DomRenderProxy.js +122 -57
  2. package/dist/cjs/DomRenderProxy.js.map +2 -2
  3. package/dist/cjs/components/ComponentBase.js +4 -4
  4. package/dist/cjs/components/ComponentBase.js.map +2 -2
  5. package/dist/cjs/components/appender/Appender.js +0 -3
  6. package/dist/cjs/components/appender/Appender.js.map +2 -2
  7. package/dist/cjs/components/checkbox/CheckBox.js.map +2 -2
  8. package/dist/cjs/components/choose/Choose.js +3 -1
  9. package/dist/cjs/components/choose/Choose.js.map +2 -2
  10. package/dist/cjs/components/details/Details.js +2 -2
  11. package/dist/cjs/components/details/Details.js.map +2 -2
  12. package/dist/cjs/components/forOf/ForOf.js.map +2 -2
  13. package/dist/cjs/components/if/If.js +2 -2
  14. package/dist/cjs/components/if/If.js.map +2 -2
  15. package/dist/cjs/components/input/Input.js +2 -2
  16. package/dist/cjs/components/input/Input.js.map +2 -2
  17. package/dist/cjs/components/promise/PromiseSwitch.js +6 -6
  18. package/dist/cjs/components/promise/PromiseSwitch.js.map +2 -2
  19. package/dist/cjs/components/radio/Radio.js.map +2 -2
  20. package/dist/cjs/components/router/Route.js +2 -2
  21. package/dist/cjs/components/router/Route.js.map +2 -2
  22. package/dist/cjs/components/router/RouterOutlet.js +2 -2
  23. package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
  24. package/dist/cjs/components/select/Select.js +6 -6
  25. package/dist/cjs/components/select/Select.js.map +2 -2
  26. package/dist/cjs/components/this/This.js +2 -2
  27. package/dist/cjs/components/this/This.js.map +2 -2
  28. package/dist/cjs/components/timer/Timer.js +2 -3
  29. package/dist/cjs/components/timer/Timer.js.map +2 -2
  30. package/dist/cjs/events/EventManager.js +9 -2
  31. package/dist/cjs/events/EventManager.js.map +2 -2
  32. package/dist/cjs/lifecycle/OnInitRender.js.map +1 -1
  33. package/dist/cjs/operators/DrForOf.js +24 -11
  34. package/dist/cjs/operators/DrForOf.js.map +2 -2
  35. package/dist/cjs/operators/DrIf.js +1 -2
  36. package/dist/cjs/operators/DrIf.js.map +2 -2
  37. package/dist/cjs/operators/DrInnerText.js +2 -2
  38. package/dist/cjs/operators/DrInnerText.js.map +2 -2
  39. package/dist/cjs/rawsets/RawSet.js +243 -46
  40. package/dist/cjs/rawsets/RawSet.js.map +3 -3
  41. package/dist/cjs/routers/PathRouter.js +13 -7
  42. package/dist/cjs/routers/PathRouter.js.map +2 -2
  43. package/dist/cjs/routers/Router.js +51 -27
  44. package/dist/cjs/routers/Router.js.map +2 -2
  45. package/dist/esm/DomRenderProxy.js +122 -57
  46. package/dist/esm/DomRenderProxy.js.map +2 -2
  47. package/dist/esm/components/ComponentBase.js +4 -4
  48. package/dist/esm/components/ComponentBase.js.map +2 -2
  49. package/dist/esm/components/appender/Appender.js +0 -3
  50. package/dist/esm/components/appender/Appender.js.map +2 -2
  51. package/dist/esm/components/checkbox/CheckBox.js.map +2 -2
  52. package/dist/esm/components/choose/Choose.js +3 -1
  53. package/dist/esm/components/choose/Choose.js.map +2 -2
  54. package/dist/esm/components/details/Details.js +2 -2
  55. package/dist/esm/components/details/Details.js.map +2 -2
  56. package/dist/esm/components/forOf/ForOf.js.map +2 -2
  57. package/dist/esm/components/if/If.js +2 -2
  58. package/dist/esm/components/if/If.js.map +2 -2
  59. package/dist/esm/components/input/Input.js +2 -2
  60. package/dist/esm/components/input/Input.js.map +2 -2
  61. package/dist/esm/components/promise/PromiseSwitch.js +6 -6
  62. package/dist/esm/components/promise/PromiseSwitch.js.map +2 -2
  63. package/dist/esm/components/radio/Radio.js.map +2 -2
  64. package/dist/esm/components/router/Route.js +2 -2
  65. package/dist/esm/components/router/Route.js.map +2 -2
  66. package/dist/esm/components/router/RouterOutlet.js +2 -2
  67. package/dist/esm/components/router/RouterOutlet.js.map +2 -2
  68. package/dist/esm/components/select/Select.js +6 -6
  69. package/dist/esm/components/select/Select.js.map +2 -2
  70. package/dist/esm/components/this/This.js +2 -2
  71. package/dist/esm/components/this/This.js.map +2 -2
  72. package/dist/esm/components/timer/Timer.js +2 -3
  73. package/dist/esm/components/timer/Timer.js.map +2 -2
  74. package/dist/esm/events/EventManager.js +9 -2
  75. package/dist/esm/events/EventManager.js.map +2 -2
  76. package/dist/esm/lifecycle/OnInitRender.js.map +1 -1
  77. package/dist/esm/operators/DrForOf.js +24 -11
  78. package/dist/esm/operators/DrForOf.js.map +2 -2
  79. package/dist/esm/operators/DrIf.js +1 -2
  80. package/dist/esm/operators/DrIf.js.map +2 -2
  81. package/dist/esm/operators/DrInnerText.js +2 -2
  82. package/dist/esm/operators/DrInnerText.js.map +2 -2
  83. package/dist/esm/rawsets/RawSet.js +243 -46
  84. package/dist/esm/rawsets/RawSet.js.map +3 -3
  85. package/dist/esm/routers/PathRouter.js +13 -7
  86. package/dist/esm/routers/PathRouter.js.map +2 -2
  87. package/dist/esm/routers/Router.js +51 -27
  88. package/dist/esm/routers/Router.js.map +2 -2
  89. package/dist/esm-bundle/dooboostore-dom-render.esm.js +1850 -319
  90. package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
  91. package/dist/types/DomRenderProxy.d.ts +2 -2
  92. package/dist/types/DomRenderProxy.d.ts.map +1 -1
  93. package/dist/types/components/ComponentBase.d.ts +1 -1
  94. package/dist/types/components/ComponentBase.d.ts.map +1 -1
  95. package/dist/types/components/appender/Appender.d.ts +0 -2
  96. package/dist/types/components/appender/Appender.d.ts.map +1 -1
  97. package/dist/types/components/checkbox/CheckBox.d.ts.map +1 -1
  98. package/dist/types/components/choose/Choose.d.ts.map +1 -1
  99. package/dist/types/components/details/Details.d.ts +1 -1
  100. package/dist/types/components/details/Details.d.ts.map +1 -1
  101. package/dist/types/components/forOf/ForOf.d.ts.map +1 -1
  102. package/dist/types/components/if/If.d.ts +1 -1
  103. package/dist/types/components/if/If.d.ts.map +1 -1
  104. package/dist/types/components/index.d.ts.map +1 -1
  105. package/dist/types/components/input/Input.d.ts +1 -1
  106. package/dist/types/components/input/Input.d.ts.map +1 -1
  107. package/dist/types/components/promise/PromiseSwitch.d.ts +1 -1
  108. package/dist/types/components/promise/PromiseSwitch.d.ts.map +1 -1
  109. package/dist/types/components/radio/Radio.d.ts.map +1 -1
  110. package/dist/types/components/router/Route.d.ts +1 -1
  111. package/dist/types/components/router/Route.d.ts.map +1 -1
  112. package/dist/types/components/router/RouterOutlet.d.ts +1 -1
  113. package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
  114. package/dist/types/components/select/Select.d.ts +3 -3
  115. package/dist/types/components/select/Select.d.ts.map +1 -1
  116. package/dist/types/components/this/This.d.ts +1 -1
  117. package/dist/types/components/this/This.d.ts.map +1 -1
  118. package/dist/types/components/timer/Timer.d.ts +1 -1
  119. package/dist/types/components/timer/Timer.d.ts.map +1 -1
  120. package/dist/types/events/EventManager.d.ts +8 -0
  121. package/dist/types/events/EventManager.d.ts.map +1 -1
  122. package/dist/types/index.d.ts +0 -101
  123. package/dist/types/lifecycle/OnInitRender.d.ts +1 -1
  124. package/dist/types/lifecycle/OnInitRender.d.ts.map +1 -1
  125. package/dist/types/operators/DrForOf.d.ts.map +1 -1
  126. package/dist/types/operators/DrInnerText.d.ts.map +1 -1
  127. package/dist/types/rawsets/RawSet.d.ts +6 -5
  128. package/dist/types/rawsets/RawSet.d.ts.map +1 -1
  129. package/dist/types/routers/PathRouter.d.ts.map +1 -1
  130. package/dist/types/routers/Router.d.ts +9 -11
  131. package/dist/types/routers/Router.d.ts.map +1 -1
  132. package/dist/umd-bundle/dooboostore-dom-render.umd.js +1850 -319
  133. package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
  134. package/package.json +7 -7
  135. package/src/DomRenderProxy.ts +258 -137
  136. package/src/components/ComponentBase.ts +4 -4
  137. package/src/components/appender/Appender.ts +0 -5
  138. package/src/components/checkbox/CheckBox.ts +22 -25
  139. package/src/components/choose/Choose.ts +16 -19
  140. package/src/components/details/Details.ts +40 -43
  141. package/src/components/forOf/ForOf.ts +6 -9
  142. package/src/components/if/If.ts +9 -11
  143. package/src/components/input/Input.ts +16 -22
  144. package/src/components/promise/PromiseSwitch.ts +67 -66
  145. package/src/components/radio/Radio.ts +23 -28
  146. package/src/components/router/Route.ts +10 -13
  147. package/src/components/router/RouterOutlet.ts +5 -4
  148. package/src/components/select/Select.ts +7 -7
  149. package/src/components/this/This.ts +13 -12
  150. package/src/components/timer/Timer.ts +12 -16
  151. package/src/events/EventManager.ts +15 -4
  152. package/src/lifecycle/OnInitRender.ts +1 -1
  153. package/src/node_modules/.bin/acorn +17 -0
  154. package/src/node_modules/.bin/browserslist +17 -0
  155. package/src/node_modules/.bin/eslint +17 -0
  156. package/src/node_modules/.bin/sbf +17 -0
  157. package/src/node_modules/.bin/ts-node +17 -0
  158. package/src/node_modules/.bin/ts-node-cwd +17 -0
  159. package/src/node_modules/.bin/ts-node-dev +17 -0
  160. package/src/node_modules/.bin/ts-node-esm +17 -0
  161. package/src/node_modules/.bin/ts-node-script +17 -0
  162. package/src/node_modules/.bin/ts-node-transpile-only +17 -0
  163. package/src/node_modules/.bin/ts-script +17 -0
  164. package/src/node_modules/.bin/tsc +17 -0
  165. package/src/node_modules/.bin/tsnd +17 -0
  166. package/src/node_modules/.bin/tsserver +17 -0
  167. package/src/node_modules/.bin/webpack +17 -0
  168. package/src/node_modules/.bin/webpack-cli +17 -0
  169. package/src/node_modules/.bin/webpack-dev-server +17 -0
  170. package/src/operators/DrForOf.ts +25 -10
  171. package/src/operators/DrIf.ts +1 -1
  172. package/src/operators/DrInnerText.ts +2 -1
  173. package/src/rawsets/RawSet.ts +387 -288
  174. package/src/routers/PathRouter.ts +14 -7
  175. package/src/routers/Router.ts +77 -48
  176. package/types.d.ts +0 -2873
@@ -1,6 +1,6 @@
1
1
  import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
2
2
  import { StringUtils } from '@dooboostore/core/string/StringUtils';
3
- import { EventManager } from '../events/EventManager';
3
+ import { EventManager, NormalAttrDataType } from '../events/EventManager';
4
4
  import type { DomRenderConfig } from '../configs/DomRenderConfig';
5
5
  import { Range } from '../iterators/Range';
6
6
  import { ElementUtils } from '@dooboostore/core-web/element/ElementUtils';
@@ -40,7 +40,7 @@ import { isOnDestroyRender, OnDestroyRenderParams } from '../lifecycle/OnDestroy
40
40
  import { DrTargetElementIsElement } from '../operators/DrTargetElementIsElement';
41
41
  import { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';
42
42
  import { NodeUtils } from '@dooboostore/core-web/node/NodeUtils';
43
-
43
+ import { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';
44
44
 
45
45
  export type RenderResult = { raws: RawSet[]; executedOperators: OperatorExecuter[] };
46
46
 
@@ -82,11 +82,14 @@ export class RawSet {
82
82
  public static readonly DR_DESTROY_OPTIONNAME = 'dr-option-destroy';
83
83
 
84
84
  public static readonly DR_THIS_NAME_OPTIONNAME = 'dr-option-this-name';
85
- /**
86
- * @deprecated
87
- */
88
- public static readonly DR_COMPONENT_NAME_OPTIONNAME = 'dr-option-component-name';
89
- public static readonly DR_COMPONENT_INNER_HTML_NAME_OPTIONNAME = 'dr-option-component-inner-html-name';
85
+
86
+ public static readonly DR_VARIABLE_NAME_OPTIONNAME = 'dr-option-variable-name';
87
+ public static readonly DR_ITEM_VARIABLE_NAME_OPTIONNAME = 'dr-option-item-variable-name';
88
+ public static readonly DR_ITEM_INDEX_VARIABLE_NAME_OPTIONNAME = 'dr-option-item-index-variable-name';
89
+ public static readonly DR_INNER_HTML_NAME_OPTIONNAME = 'dr-option-inner-html-name';
90
+ public static readonly DR_INNER_TEXT_NAME_OPTIONNAME = 'dr-option-inner-text-name';
91
+ public static readonly DR_INNER_HTML_ESCAPED_NAME_OPTIONNAME = 'dr-option-inner-html-escaped-name';
92
+
90
93
  public static readonly DR_KEY_OPTIONNAME = 'dr-option-key';
91
94
  public static readonly DR_HAS_KEYS_OPTIONNAME = 'dr-option-has-keys';
92
95
 
@@ -176,7 +179,9 @@ export class RawSet {
176
179
 
177
180
  get isConnected() {
178
181
  // console.log('isConnect???', this, this.point.start.isConnected, this.point.end.isConnected);
179
- return this.point && this.point.start && this.point.end && this.point.start.isConnected && this.point.end.isConnected;
182
+ return (
183
+ this.point && this.point.start && this.point.end && this.point.start.isConnected && this.point.end.isConnected
184
+ );
180
185
  }
181
186
 
182
187
  // 중요
@@ -209,8 +214,17 @@ export class RawSet {
209
214
  const targetAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);
210
215
  // console.log('targetAttrMap-->', targetAttrMap)
211
216
  if (targetAttrMap) {
212
- new Map<string, string>(JSON.parse(targetAttrMap)).forEach((v, k) => {
213
- targetScripts.push(`(${v})`);
217
+ new Map<string, NormalAttrDataType>(JSON.parse(targetAttrMap)).forEach((v, k) => {
218
+ const variablePaths = v.variablePaths;
219
+ // let targetScript = v.originalAttrValue;
220
+ // variablePaths.forEach(it => {
221
+ // let r = ObjectUtils.Path.toOptionalChainPath(it.inner);
222
+ // targetScript = targetScript.replaceAll(it.origin,`\${${r}}`);
223
+ // })
224
+ // targetScripts.push(`(${targetScript})`);
225
+ // 변수 체크만 하는거니깐 이렇게
226
+ variablePaths.forEach(it => targetScripts.push(`(${it.inner})`));
227
+ // console.log('targetScripts', targetScripts);
214
228
  });
215
229
  }
216
230
  // console.log('targetScriptstargetScripts', targetScripts)
@@ -317,12 +331,18 @@ export class RawSet {
317
331
  // console.log('--->', RawSet.exporesionGrouops(textContent), textContent,runText, runText[0][1])
318
332
  let newNode: Node;
319
333
  if (textContent?.startsWith('#')) {
320
- const r = ObjectUtils.Script.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, { __render }));
334
+ const r = ObjectUtils.Script.evaluate(
335
+ `${__render.bindScript} return ${runText}`,
336
+ Object.assign(obj, { __render })
337
+ );
321
338
  const template = config.window.document.createElement('template') as HTMLTemplateElement;
322
339
  template.innerHTML = r;
323
340
  newNode = template.content;
324
341
  } else {
325
- const r = ObjectUtils.Script.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, { __render }));
342
+ const r = ObjectUtils.Script.evaluate(
343
+ `${__render.bindScript} return ${runText}`,
344
+ Object.assign(obj, { __render })
345
+ );
326
346
  newNode = config.window.document.createTextNode(r);
327
347
  }
328
348
  cNode.parentNode?.replaceChild(newNode, cNode);
@@ -365,23 +385,140 @@ export class RawSet {
365
385
  drAttrs.push(drAttr);
366
386
  // 아래 순서 중요
367
387
  const operators = [
368
- new DrPre( this, __render, { raws, fag }, { element, attrName: RawSet.DR_PRE_NAME, attr: drAttr.drPre, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drPre }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
369
- new Dr( this, __render, { raws, fag }, { element, attrName: RawSet.DR_NAME, attr: drAttr.dr, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.dr }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
388
+ new DrPre(
389
+ this,
390
+ __render,
391
+ { raws, fag },
392
+ { element, attrName: RawSet.DR_PRE_NAME, attr: drAttr.drPre, attrs: drAttr },
393
+ { config, obj, operatorAround: config.operatorAround?.drPre },
394
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
395
+ ),
396
+ new Dr(
397
+ this,
398
+ __render,
399
+ { raws, fag },
400
+ { element, attrName: RawSet.DR_NAME, attr: drAttr.dr, attrs: drAttr },
401
+ { config, obj, operatorAround: config.operatorAround?.dr },
402
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
403
+ ),
370
404
  // new Dr(this, __render, {raws, fag}, {element, attrName: EventManager.onRenderedInitAttrName, attr: drAttr.dr, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.dr}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
371
- new DrIf( this, __render, { raws, fag }, { element, attrName: RawSet.DR_IF_NAME, attr: drAttr.drIf, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drIf }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
372
- new DrStripElement( this, __render, { raws, fag }, { element, attrName: RawSet.DR_STRIP_NAME, attr: drAttr.drStripElement, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThis }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
373
- new DrThis( this, __render, { raws, fag }, { element, attrName: RawSet.DR_THIS_NAME, attr: drAttr.drThis, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThis }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
374
- new DrForm( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drForm, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drForm }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
375
- new DrInnerText( this, __render, { raws, fag }, { element, attrName: RawSet.DR_INNERTEXT_NAME, attr: drAttr.drInnerText, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drInnerText }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
376
- new DrInnerHTML( this, __render, { raws, fag }, { element, attrName: RawSet.DR_INNERHTML_NAME, attr: drAttr.drInnerHTML, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drInnerHTML }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
377
- new DrFor( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drFor, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drFor }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
378
- new DrForOf( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_OF_NAME, attr: drAttr.drForOf, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drForOf }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
379
- new DrThisProperty( this, __render, { raws, fag }, { element, attrName: RawSet.DR_THIS_PROPERTY_NAME, attr: drAttr.drThisProperty, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThisProperty }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
380
- new DrAppender( this, __render, { raws, fag }, { element, attrName: RawSet.DR_APPENDER_NAME, attr: drAttr.drAppender, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drAppender }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
381
- new DrRepeat( this, __render, { raws, fag }, { element, attrName: RawSet.DR_REPEAT_NAME, attr: drAttr.drRepeat, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drRepeat }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
382
- new DrTargetElementIsElement( this, __render, { raws, fag }, { element, attrName: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME, attr: drAttr.drReplaceTargetElementIs, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
383
- new DrTargetElement( this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
384
- new DrTargetAttr( this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } )
405
+ new DrIf(
406
+ this,
407
+ __render,
408
+ { raws, fag },
409
+ { element, attrName: RawSet.DR_IF_NAME, attr: drAttr.drIf, attrs: drAttr },
410
+ { config, obj, operatorAround: config.operatorAround?.drIf },
411
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
412
+ ),
413
+ new DrStripElement(
414
+ this,
415
+ __render,
416
+ { raws, fag },
417
+ { element, attrName: RawSet.DR_STRIP_NAME, attr: drAttr.drStripElement, attrs: drAttr },
418
+ { config, obj, operatorAround: config.operatorAround?.drThis },
419
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
420
+ ),
421
+ new DrThis(
422
+ this,
423
+ __render,
424
+ { raws, fag },
425
+ { element, attrName: RawSet.DR_THIS_NAME, attr: drAttr.drThis, attrs: drAttr },
426
+ { config, obj, operatorAround: config.operatorAround?.drThis },
427
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
428
+ ),
429
+ new DrForm(
430
+ this,
431
+ __render,
432
+ { raws, fag },
433
+ { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drForm, attrs: drAttr },
434
+ { config, obj, operatorAround: config.operatorAround?.drForm },
435
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
436
+ ),
437
+ new DrInnerText(
438
+ this,
439
+ __render,
440
+ { raws, fag },
441
+ { element, attrName: RawSet.DR_INNERTEXT_NAME, attr: drAttr.drInnerText, attrs: drAttr },
442
+ { config, obj, operatorAround: config.operatorAround?.drInnerText },
443
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
444
+ ),
445
+ new DrInnerHTML(
446
+ this,
447
+ __render,
448
+ { raws, fag },
449
+ { element, attrName: RawSet.DR_INNERHTML_NAME, attr: drAttr.drInnerHTML, attrs: drAttr },
450
+ { config, obj, operatorAround: config.operatorAround?.drInnerHTML },
451
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
452
+ ),
453
+ new DrFor(
454
+ this,
455
+ __render,
456
+ { raws, fag },
457
+ { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drFor, attrs: drAttr },
458
+ { config, obj, operatorAround: config.operatorAround?.drFor },
459
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
460
+ ),
461
+ new DrForOf(
462
+ this,
463
+ __render,
464
+ { raws, fag },
465
+ { element, attrName: RawSet.DR_FOR_OF_NAME, attr: drAttr.drForOf, attrs: drAttr },
466
+ { config, obj, operatorAround: config.operatorAround?.drForOf },
467
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
468
+ ),
469
+ new DrThisProperty(
470
+ this,
471
+ __render,
472
+ { raws, fag },
473
+ { element, attrName: RawSet.DR_THIS_PROPERTY_NAME, attr: drAttr.drThisProperty, attrs: drAttr },
474
+ { config, obj, operatorAround: config.operatorAround?.drThisProperty },
475
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
476
+ ),
477
+ new DrAppender(
478
+ this,
479
+ __render,
480
+ { raws, fag },
481
+ { element, attrName: RawSet.DR_APPENDER_NAME, attr: drAttr.drAppender, attrs: drAttr },
482
+ { config, obj, operatorAround: config.operatorAround?.drAppender },
483
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
484
+ ),
485
+ new DrRepeat(
486
+ this,
487
+ __render,
488
+ { raws, fag },
489
+ { element, attrName: RawSet.DR_REPEAT_NAME, attr: drAttr.drRepeat, attrs: drAttr },
490
+ { config, obj, operatorAround: config.operatorAround?.drRepeat },
491
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
492
+ ),
493
+ new DrTargetElementIsElement(
494
+ this,
495
+ __render,
496
+ { raws, fag },
497
+ {
498
+ element,
499
+ attrName: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME,
500
+ attr: drAttr.drReplaceTargetElementIs,
501
+ attrs: drAttr
502
+ },
503
+ { config, obj },
504
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
505
+ ),
506
+ new DrTargetElement(
507
+ this,
508
+ __render,
509
+ { raws, fag },
510
+ { element, attrs: drAttr },
511
+ { config, obj },
512
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
513
+ ),
514
+ new DrTargetAttr(
515
+ this,
516
+ __render,
517
+ { raws, fag },
518
+ { element, attrs: drAttr },
519
+ { config, obj },
520
+ { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }
521
+ )
385
522
  ];
386
523
 
387
524
  for (const operator of operators) {
@@ -436,7 +573,7 @@ export class RawSet {
436
573
  // RawSet.generateStyleSheetsLocal(config);
437
574
  for (const it of onThisComponentSetCallBacks) {
438
575
  if (isOnInitRender(it.obj)) {
439
- it.obj?.onInitRender?.({}, this);
576
+ await it.obj?.onInitRender?.({}, this);
440
577
  }
441
578
  }
442
579
  for (const it of onElementInitCallBacks) {
@@ -465,7 +602,7 @@ export class RawSet {
465
602
  // it.targetElement.__render.component.onInitRender?.(...param);
466
603
  // }
467
604
  // }
468
- this.dataSet.render.currentThis.onInitRender({}, this);
605
+ await this.dataSet.render.currentThis.onInitRender({}, this);
469
606
  }
470
607
 
471
608
  config?.onElementInit?.(it.name, obj, this, it.targetElement);
@@ -606,7 +743,10 @@ export class RawSet {
606
743
  let data = element.getAttribute(RawSet.DR_APPENDER_NAME);
607
744
  // if (data && !/\[[0-9]+\]/g.test(data)) {
608
745
  if (data && !/\[.+\]/g.test(data)) {
609
- const currentIndex = ObjectUtils.Script.evaluateReturn(`${ObjectUtils.Path.toOptionalChainPath(data)}?.length -1`, obj);
746
+ const currentIndex = ObjectUtils.Script.evaluateReturn(
747
+ `${ObjectUtils.Path.toOptionalChainPath(data)}?.length -1`,
748
+ obj
749
+ );
610
750
  // console.log('------?', currentIndex)
611
751
  // if (currentIndex === undefined || isNaN(currentIndex)) {
612
752
  // return undefined;
@@ -644,106 +784,117 @@ export class RawSet {
644
784
  const Node = (config.window as any).Node;
645
785
  const processedNodes = new Set<Node>();
646
786
 
787
+ const findNodes = NodeUtils.findNodes(element, node => {
788
+ // console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);
789
+ // for (const processedNode of processedNodes) {
790
+ // console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));
791
+ // // if(processedNode.contains(node)){
792
+ // console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);
793
+ // // }
794
+ // if (processedNode !== node && processedNode.contains(node)) {
795
+ // console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);
796
+ // return NodeFilter.FILTER_REJECT;
797
+ // }
798
+ // }
647
799
 
648
-
649
- const findNodes = NodeUtils.findNodes(element, (node) => {
650
- // console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);
651
- // for (const processedNode of processedNodes) {
652
- // console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));
653
- // // if(processedNode.contains(node)){
654
- // console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);
655
- // // }
656
- // if (processedNode !== node && processedNode.contains(node)) {
657
- // console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);
658
- // return NodeFilter.FILTER_REJECT;
659
- // }
800
+ if (node.nodeType === Node.TEXT_NODE) {
801
+ // console.log('nodeText--->', node.textContent)
802
+ // console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));
803
+ // console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))
804
+ // TODO: 나중에
805
+ // const between = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', StringUtils.deleteEnter((node as Text).data ?? ''))
806
+ const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));
807
+ // console.log('bbbb', between)
808
+ const r =
809
+ between?.length > 0
810
+ ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN
811
+ : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
812
+ // console.log('acceptNodeReturn node', r);
813
+ return r;
814
+ // return /\$\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
815
+ // return /[$#]\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
816
+ } else if (node.nodeType === Node.ELEMENT_NODE) {
817
+ const element = node as Element;
818
+ // if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {
819
+ // return NodeFilter.FILTER_REJECT;
660
820
  // }
661
-
662
- if (node.nodeType === Node.TEXT_NODE) {
663
- // console.log('nodeText--->', node.textContent)
664
- // console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));
665
- // console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))
666
- // TODO: 나중에
667
- // const between = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', StringUtils.deleteEnter((node as Text).data ?? ''))
668
- const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));
669
- // console.log('bbbb', between)
670
- const r = between?.length > 0 ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
671
- // console.log('acceptNodeReturn node', r);
821
+ // console.log('nodeHTML-->', element.outerHTML);
822
+ if (element.hasAttribute(RawSet.DR_PRE_NAME)) {
823
+ let r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
824
+ // console.log('acceptNodeReturn', r);
672
825
  return r;
673
- // return /\$\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
674
- // return /[$#]\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
675
- } else if (node.nodeType === Node.ELEMENT_NODE) {
676
- const element = node as Element;
677
- // if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {
678
- // return NodeFilter.FILTER_REJECT;
679
- // }
680
- // console.log('nodeHTML-->', element.outerHTML);
681
- if (element.hasAttribute(RawSet.DR_PRE_NAME)) {
682
- let r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
683
- // console.log('acceptNodeReturn', r);
684
- return r;
685
- }
686
- if (element.hasAttribute(EventManager.attrAttrName)) {
687
- const script = element.getAttribute(EventManager.attrAttrName) ?? '';
688
- // console.log('scriptscriptscriptscriptscriptscript,', script)
689
- const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
690
- key: match[1],
691
- value: match[2]
692
- }));
693
- (keyValuePairs ?? []).forEach(it => {
694
- element.setAttribute(it.key, '${' + it.value + '}$');
695
- });
696
- }
697
- // element.setAttribute('dr-event-click', 'console.log(11)');
698
- const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
699
- const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
700
- const isElement =
701
- targetElementNames.includes(element.tagName.toLowerCase()) ||
702
- targetElementNames.includes(targetElementIs?.toLowerCase() as any);
703
- // if (isElement) {
704
- // (element as HTMLElement).style.display = 'none';
705
- // (element as HTMLElement).style.width = '100px';
706
- // (element as HTMLElement).style.height = '100px';
707
- // console.log((element as HTMLElement).outerHTML)
708
- // }
709
- // console.log('------targetElementIstargetElementIs>', targetElementNames, '---', isElement, targetElementIs);
710
- // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES,...EventManager.RAWSET_CHECK_ATTRIBUTE]);
711
- const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES]);
712
- const normalAttrs = new Map<string, string>();
713
- const linkVariables = new Map<string, string>();
714
- const linkNames = EventManager.linkAttrs.map(it => it.name);
715
- const isAttr =
716
- element.getAttributeNames().filter(it => {
717
- const value = element.getAttribute(it);
718
-
719
- // link일때
720
- if (value && linkNames.includes(it)) {
721
- linkVariables.set(it, value);
722
- } else if (value && RawSet.isExpression(value)) {
723
- // 표현식있을떄
724
- let variablePath: string = RawSet.expressionGroups(value)[0][1];
725
- // console.log('0-----',variablePath, node);
726
- // normal Attribute 초반에 셋팅해주기.
727
- // TODO: 이거 하긴했는데 사이드 이팩트?
728
- const originVariable = variablePath;
729
- variablePath = variablePath.replace(/#[^#]*#/g, '({})');
730
- // console.log('1-----',variablePath, node);
731
- const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
732
- // console.log('2-----',optionalChainPath);
733
- const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));
734
- // const cval = ScriptUtils.evalReturn(variablePath, Object.assign(obj));
735
- if (cval === null) {
736
- element.removeAttribute(it);
737
- } else {
738
- element.setAttribute(it, cval);
739
- }
740
- normalAttrs.set(it, originVariable);
741
- // console.log('normalAttribute', it, variablePath);
826
+ }
827
+ if (element.hasAttribute(EventManager.attrAttrName)) {
828
+ const script = element.getAttribute(EventManager.attrAttrName) ?? '';
829
+ // console.log('scriptscriptscriptscriptscriptscript,', script)
830
+ const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
831
+ key: match[1],
832
+ value: match[2]
833
+ }));
834
+ (keyValuePairs ?? []).forEach(it => {
835
+ element.setAttribute(it.key, '${' + it.value + '}$');
836
+ });
837
+ }
838
+ // element.setAttribute('dr-event-click', 'console.log(11)');
839
+ const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
840
+ const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
841
+ const isElement =
842
+ targetElementNames.includes(element.tagName.toLowerCase()) ||
843
+ targetElementNames.includes(targetElementIs?.toLowerCase() as any);
844
+ // if (isElement) {
845
+ // (element as HTMLElement).style.display = 'none';
846
+ // (element as HTMLElement).style.width = '100px';
847
+ // (element as HTMLElement).style.height = '100px';
848
+ // console.log((element as HTMLElement).outerHTML)
849
+ // }
850
+ // console.log('------targetElementIstargetElementIs>', targetElementNames, '---', isElement, targetElementIs);
851
+ // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES,...EventManager.RAWSET_CHECK_ATTRIBUTE]);
852
+ const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES]);
853
+ const normalAttrs = new Map<string, NormalAttrDataType>();
854
+ const linkVariables = new Map<string, string>();
855
+ const linkNames = EventManager.linkAttrs.map(it => it.name);
856
+ const isAttr =
857
+ element.getAttributeNames().filter(it=>!EventManager.noDetectAttr.includes(it)).filter(it => {
858
+ const value = element.getAttribute(it);
859
+
860
+ // link일때
861
+ if (value && linkNames.includes(it)) {
862
+ linkVariables.set(it, value);
863
+ } else if (value && RawSet.isExpression(value)) {
864
+ // 표현식있을떄
865
+ const variablePaths: { origin: string; inner: string }[] = RawSet.expressionGroups(value).map(it => ({
866
+ origin: it[0],
867
+ inner: it[1]
868
+ }));
869
+ // normal Attribute 초반에 셋팅해주기.
870
+ // TODO: 이거 하긴했는데 사이드 이팩트?
871
+ // let variablePath: string = RawSet.expressionGroups(value)[0][1];
872
+ // const originVariable = variablePath;
873
+ // variablePath = variablePath.replace(/#[^#]*#/g, '({})');
874
+ // const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
875
+ // const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));
876
+
877
+ let targetScript = value;
878
+ variablePaths.forEach(it => {
879
+ let r = it.inner.replace(/#[^#]*#/g, '({})');
880
+ r = ObjectUtils.Path.toOptionalChainPath(r);
881
+ targetScript = targetScript.replaceAll(it.origin, `\${${r}}`);
882
+ });
883
+ const cval = ObjectUtils.Script.evaluateReturn('`' + targetScript + '`', Object.assign(obj));
884
+
885
+ if (cval === null) {
886
+ element.removeAttribute(it);
887
+ } else {
888
+ element.setAttribute(it, cval);
742
889
  }
743
- // console.log(element.getAttribute(it), attrExpresion);
744
- const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
745
- return isTargetAttr;
746
- }).length > 0;
890
+ normalAttrs.set(it, { originalAttrValue: value, variablePaths: variablePaths });
891
+ // normalAttrs.set(it, originVariable);
892
+ // console.log('normalAttribute', it, variablePath);
893
+ }
894
+ // console.log(element.getAttribute(it), attrExpresion);
895
+ const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
896
+ return isTargetAttr;
897
+ }).length > 0;
747
898
 
748
899
  if (linkVariables.size) {
749
900
  element.setAttribute(
@@ -768,151 +919,6 @@ export class RawSet {
768
919
  }
769
920
  )
770
921
 
771
-
772
- /**
773
- nodeIterator.nextNode() 할때 그때 호출시점에 아래 로직에서 다음 노드를 찾는다.
774
- 브라우저는 nodeIterator.nextNode() 해서 동기로 dom을 조작하거나 옮기면 다음 nextNode할때 그 옮겨진 대상은 제외된다
775
- 하지만 jsdom은 그대로 남아있어 아주 예기치못한 사건이 발생된다 5시간은 삽질..했다.. 따라서 중복방지 처리하였다
776
- */
777
- // const nodeIterator = config.window.document?.createNodeIterator(element, NodeFilter.SHOW_ALL, {
778
- // acceptNode(node) {
779
- // console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);
780
- // for (const processedNode of processedNodes) {
781
- // console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));
782
- // // if(processedNode.contains(node)){
783
- // console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);
784
- // // }
785
- // if (processedNode !== node && processedNode.contains(node)) {
786
- // console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);
787
- // return NodeFilter.FILTER_REJECT;
788
- // }
789
- // }
790
- //
791
- // if (node.nodeType === Node.TEXT_NODE) {
792
- // console.log('nodeText--->', node.textContent)
793
- // // console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));
794
- // // console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))
795
- // // TODO: 나중에
796
- // // const between = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', StringUtils.deleteEnter((node as Text).data ?? ''))
797
- // const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));
798
- // // console.log('bbbb', between)
799
- // const r = between?.length > 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
800
- // console.log('acceptNodeReturn node', r);
801
- // return r;
802
- // // return /\$\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
803
- // // return /[$#]\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
804
- // } else if (node.nodeType === Node.ELEMENT_NODE) {
805
- // const element = node as Element;
806
- // // if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {
807
- // // return NodeFilter.FILTER_REJECT;
808
- // // }
809
- // console.log('nodeHTML-->', element.outerHTML);
810
- // if (element.hasAttribute(RawSet.DR_PRE_NAME)) {
811
- // console.log('acceptNodeReturn', NodeFilter.FILTER_REJECT);
812
- // return NodeFilter.FILTER_REJECT;
813
- // }
814
- // if (element.hasAttribute(EventManager.attrAttrName)) {
815
- // const script = element.getAttribute(EventManager.attrAttrName) ?? '';
816
- // // console.log('scriptscriptscriptscriptscriptscript,', script)
817
- // const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
818
- // key: match[1],
819
- // value: match[2]
820
- // }));
821
- // (keyValuePairs ?? []).forEach(it => {
822
- // element.setAttribute(it.key, '${' + it.value + '}$');
823
- // });
824
- // // console.log('-------k', keyValuePairs)
825
- //
826
- // // const drAttr = ScriptUtils.evalReturn(script, obj)
827
- // // Object.entries(drAttr).forEach(([key, value]) => {
828
- // // const keyValuePairs = Array.from(a.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({ key: match[1], value: match[2] }));
829
- // // console.log(keyValuePairs);
830
- // // // 출력: [{ key: 'value', value: 'this.child.obj.name' }, { key: 'wow', value: 'this.ww' }, { key: 'zz', value: '22' }, { key: 'v', value: '"ee"' }]
831
- // //
832
- // // console.log('-----------------', key,value)
833
- // // element.setAttribute(key, '${'+(value)+'}$');
834
- // // })
835
- // // EventManager.attrNames.filter(it => it in drAttr).forEach(it => {
836
- // // if (drAttr[it] === null) {
837
- // // element.removeAttribute(it);
838
- // // } else {
839
- // // element.setAttribute(it, drAttr[it]);
840
- // // }
841
- // // })
842
- // // console.log('-------->', Array.from(element.attributes), element.getAttribute('dr-attr'), obj)
843
- // }
844
- // // element.setAttribute('dr-event-click', 'console.log(11)');
845
- // const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
846
- // const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
847
- // const isElement =
848
- // targetElementNames.includes(element.tagName.toLowerCase()) ||
849
- // targetElementNames.includes(targetElementIs?.toLowerCase() as any);
850
- // // if (isElement) {
851
- // // (element as HTMLElement).style.display = 'none';
852
- // // (element as HTMLElement).style.width = '100px';
853
- // // (element as HTMLElement).style.height = '100px';
854
- // // console.log((element as HTMLElement).outerHTML)
855
- // // }
856
- // // console.log('------targetElementIstargetElementIs>', targetElementNames, '---', isElement, targetElementIs);
857
- // // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES,...EventManager.RAWSET_CHECK_ATTRIBUTE]);
858
- // const targetAttrNames = (config.targetAttrs?.map(it => it.name) ?? []).concat([...RawSet.DR_ATTRIBUTES]);
859
- // const normalAttrs = new Map<string, string>();
860
- // const linkVariables = new Map<string, string>();
861
- // const linkNames = EventManager.linkAttrs.map(it => it.name);
862
- // const isAttr =
863
- // element.getAttributeNames().filter(it => {
864
- // const value = element.getAttribute(it);
865
- //
866
- // // link일때
867
- // if (value && linkNames.includes(it)) {
868
- // linkVariables.set(it, value);
869
- // } else if (value && RawSet.isExpression(value)) {
870
- // // 표현식있을떄
871
- // let variablePath: string = RawSet.expressionGroups(value)[0][1];
872
- // // console.log('0-----',variablePath, node);
873
- // // normal Attribute 초반에 셋팅해주기.
874
- // // TODO: 이거 하긴했는데 사이드 이팩트?
875
- // const originVariable = variablePath;
876
- // variablePath = variablePath.replace(/#[^#]*#/g, '({})');
877
- // // console.log('1-----',variablePath, node);
878
- // const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
879
- // // console.log('2-----',optionalChainPath);
880
- // const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));
881
- // // const cval = ScriptUtils.evalReturn(variablePath, Object.assign(obj));
882
- // if (cval === null) {
883
- // element.removeAttribute(it);
884
- // } else {
885
- // element.setAttribute(it, cval);
886
- // }
887
- // normalAttrs.set(it, originVariable);
888
- // // console.log('normalAttribute', it, variablePath);
889
- // }
890
- // // console.log(element.getAttribute(it), attrExpresion);
891
- // const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
892
- // return isTargetAttr;
893
- // }).length > 0;
894
- //
895
- // if (linkVariables.size) {
896
- // element.setAttribute(
897
- // EventManager.linkTargetMapAttrName,
898
- // JSON.stringify(Array.from(linkVariables.entries()))
899
- // );
900
- // }
901
- // // 기본 attribute를 처리하기위해
902
- // if (normalAttrs.size) {
903
- // element.setAttribute(EventManager.normalAttrMapAttrName, JSON.stringify(Array.from(normalAttrs.entries())));
904
- // }
905
- // // if (isElement) {
906
- // // element.setAttribute('www', '@this@');
907
- // // }
908
- // const r = isAttr || isElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
909
- // console.log('acceptNodeReturn element', r);
910
- // return r;
911
- // }
912
- // console.log('acceptNodeReturn nothing', NodeFilter.FILTER_REJECT);
913
- // return NodeFilter.FILTER_REJECT;
914
- // }
915
- // });
916
922
  const pars: RawSet[] = [];
917
923
  let currentNode: Node | null;
918
924
  const name = RandomUtils.uuid();
@@ -1180,6 +1186,7 @@ export class RawSet {
1180
1186
 
1181
1187
  public static drThisEncoding(element: Element, drThis: string, config: { asIs: RegExp; toBe?: string }): string {
1182
1188
  const thisRandom = (config.toBe = config?.toBe ?? RandomUtils.uuid());
1189
+ // console.log('rrrrrrrrrrrrr', thisRandom);
1183
1190
  // const thisRegex = /(?<!(dr-|\.))this(?=.?)/g;
1184
1191
  // const thisRegex = /[^(dr\-)]this(?=.?)/g;
1185
1192
  // const thisRegex = /[^(dr\-)]this\./g;
@@ -1236,6 +1243,7 @@ export class RawSet {
1236
1243
  .map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:'))
1237
1244
  .join(',');
1238
1245
  const thisRandom = RandomUtils.uuid();
1246
+ // console.log('thisRandom', thisRandom, variable);
1239
1247
  element.querySelectorAll(targetElementNames).forEach(it => {
1240
1248
  it.innerHTML = it.innerHTML.replace(variable, thisRandom);
1241
1249
  });
@@ -1470,7 +1478,7 @@ export class RawSet {
1470
1478
  // console.log('targetElement',targetElement);
1471
1479
  // attribute
1472
1480
  // const componentName = element.getAttribute(RawSet.DR_COMPONENT_NAME_OPTIONNAME) ?? 'component';
1473
- const componentNameReplaceKey = RandomUtils.uuid();
1481
+ // const componentNameReplaceKey = RandomUtils.uuid();
1474
1482
  // if (componentName) {
1475
1483
  // RawSet.replaceInnerHTML(element, {asIs: `#${componentName}#`, toBe: 'this'})
1476
1484
  // }
@@ -1481,11 +1489,34 @@ export class RawSet {
1481
1489
  // }
1482
1490
 
1483
1491
  rawSet.point.innerHTML = element.innerHTML;
1492
+ const innerText = element.textContent?.trim() ?? '';
1493
+ const escapedInnerHTML = ConvertUtils.escapeHTML(element.innerHTML);
1484
1494
  // 이걸 왜 뺐었지... 다시넣었음 그런데 조금 로직이.. 검증이..
1485
- const innerHTMLName = targetElement.getAttribute(RawSet.DR_COMPONENT_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
1495
+ const innerHTMLName = targetElement.getAttribute(RawSet.DR_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
1496
+ const innerTEXTName = targetElement.getAttribute(RawSet.DR_INNER_TEXT_NAME_OPTIONNAME) ?? 'innerTEXT';
1497
+ const innerHTMLEscapedName = targetElement.getAttribute(RawSet.DR_INNER_HTML_ESCAPED_NAME_OPTIONNAME) ?? 'innerHTMLEscaped';
1498
+ const templateReplacements: StringUtils.SequentialReplacement[] = [];
1486
1499
  if (innerHTMLName) {
1487
- // console.log('---------', element.innerHTML);
1488
- RawSet.replaceInnerHTML(targetElement, { asIs: `#${innerHTMLName}#`, toBe: element.innerHTML });
1500
+ templateReplacements.push({
1501
+ regex: new RegExp(`#${innerHTMLName}#`, 'g'),
1502
+ callback: () => element.innerHTML
1503
+ });
1504
+ }
1505
+ if (innerTEXTName) {
1506
+ templateReplacements.push({
1507
+ regex: new RegExp(`#${innerTEXTName}#`, 'g'),
1508
+ callback: () => innerText
1509
+ });
1510
+ }
1511
+ if (innerHTMLEscapedName) {
1512
+ templateReplacements.push({
1513
+ regex: new RegExp(`#${innerHTMLEscapedName}#`, 'g'),
1514
+ callback: () => escapedInnerHTML
1515
+ });
1516
+ }
1517
+
1518
+ if (templateReplacements.length > 0) {
1519
+ targetElement.innerHTML = StringUtils.replaceSequentially(targetElement.innerHTML, templateReplacements);
1489
1520
  }
1490
1521
 
1491
1522
  // console.log('aa-asIs', targetElement.innerHTML);
@@ -1495,7 +1526,7 @@ export class RawSet {
1495
1526
  .getAttributeNames()
1496
1527
  .forEach(it => targetElement.setAttribute(it, targetElement.getAttribute(it)!.replace(/#this#/g, drThis)));
1497
1528
  const thisRandom = this.drThisEncoding(targetElement, drThis, { asIs: /@this@/g });
1498
- // console.log('@@@@@@@@@@@@@0', targetElement.innerHTML);
1529
+ // console.log('@@@@@@@@@@@@@0', thisRandom);
1499
1530
  // let thisNameRandom: string | undefined = undefined;
1500
1531
  if (optionThisName) {
1501
1532
  // console.log('-----0', element.innerHTML, '\n', targetElement.innerHTML)
@@ -1629,7 +1660,6 @@ export class RawSet {
1629
1660
  const domrenderComponents = obj.__domrender_components;
1630
1661
  // debugger;
1631
1662
  const renderScript = ` /*createComponentTargetElement*/
1632
- // console.log('-------------------',this.__render);
1633
1663
  var ${EventManager.RAWSET_VARNAME} = this.__render.rawSet;
1634
1664
  var ${EventManager.COMPONENT_VARNAME} = this.__render.component;
1635
1665
  var ${EventManager.ELEMENT_VARNAME} = this.__render.element;
@@ -1744,19 +1774,52 @@ export class RawSet {
1744
1774
  // instance?.onCreateRender?.(...createParam);
1745
1775
  // }
1746
1776
  let applayTemplate = element.innerHTML;
1777
+ let applayTemplateText = element.textContent?.trim() ?? '';
1778
+ let applayTemplateEscape = ConvertUtils.escapeHTML(element.innerHTML);
1747
1779
  let innerHTMLThisRandom;
1748
- const componentName = element.getAttribute(RawSet.DR_COMPONENT_NAME_OPTIONNAME) ?? 'component';
1749
- const innerHTMLName = element.getAttribute(RawSet.DR_COMPONENT_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
1780
+ const componentName = element.getAttribute(RawSet.DR_VARIABLE_NAME_OPTIONNAME) ?? 'component';
1781
+ const innerHTMLName = element.getAttribute(RawSet.DR_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
1782
+ const innerTEXTName = element.getAttribute(RawSet.DR_INNER_TEXT_NAME_OPTIONNAME) ?? 'innerTEXT';
1783
+ const innerHTMLEscapedName = element.getAttribute(RawSet.DR_INNER_HTML_ESCAPED_NAME_OPTIONNAME) ?? 'innerHTMLEscaped';
1784
+
1785
+ // if (element.getAttribute(RawSet.DR_COMPONENT_VARIABLE_NAME_OPTIONNAME)) {
1786
+ // console.log('vvvvvvv', element.getAttribute(RawSet.DR_COMPONENT_VARIABLE_NAME_OPTIONNAME));
1787
+ // }
1750
1788
  if (applayTemplate) {
1751
1789
  // if (rawSet.point.thisVariableName) {
1752
1790
  // 넘어온 innerHTML에 this가 있으면 해당안되게 우선 치환.
1753
1791
  innerHTMLThisRandom = RandomUtils.uuid();
1754
- applayTemplate = applayTemplate.replace(/this\./g, innerHTMLThisRandom);
1792
+ applayTemplate = StringUtils.replaceSequentially(applayTemplate, [
1793
+ {
1794
+ regex: /this\./g,
1795
+ callback: () => innerHTMLThisRandom
1796
+ },
1797
+ {
1798
+ regex: new RegExp(`#${componentName}#`, 'g'),
1799
+ callback: () => nearThisPath
1800
+ }
1801
+ ]);
1755
1802
  // }
1756
- applayTemplate = applayTemplate.replace(RegExp(`#${componentName}#`, 'g'), 'this');
1803
+ // applayTemplate = applayTemplate.replace(RegExp(`#${componentName}#`, 'g'), 'this');
1757
1804
  }
1758
1805
  // applayTemplate = template.replace(RegExp(`#${innerHTMLName}#`, 'g'), applayTemplate);
1759
- applayTemplate = (this.template ?? '').replace(RegExp(`#${innerHTMLName}#`, 'g'), applayTemplate);
1806
+ // RawSet.replaceInnerHTML(
1807
+ // applayTemplate = StringUtils.regexExecArrayReplace(this.template, RegExp(`#${innerHTMLName}#`, 'g'), applayTemplate)
1808
+ // applayTemplate = StringUtils.regexExecArrayReplace(this.template, [RegExp(`#${innerHTMLName}#`, 'g')], applayTemplate)
1809
+ applayTemplate = StringUtils.replaceSequentially((this.template ?? ''), [
1810
+ {
1811
+ regex: new RegExp(`#${innerHTMLName}#`, 'g'),
1812
+ callback: () => applayTemplate
1813
+ },
1814
+ {
1815
+ regex: new RegExp(`#${innerTEXTName}#`, 'g'),
1816
+ callback: () => applayTemplateText
1817
+ },
1818
+ {
1819
+ regex: new RegExp(`#${innerHTMLEscapedName}#`, 'g'),
1820
+ callback: () => applayTemplateEscape
1821
+ }
1822
+ ]);
1760
1823
  // dr-on-component-init
1761
1824
  // const oninit = element.getAttribute(`${EventManager.attrPrefix}on-component-init`); // dr-on-component-init
1762
1825
  // const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init
@@ -1787,10 +1850,21 @@ export class RawSet {
1787
1850
  // let data = await RawSet.drThisCreate(rawSet, element, `this.__domrender_components.${componentKey}`, '', false, obj, config);
1788
1851
 
1789
1852
  // 넘어온 innerHTML에 this가 있는걸 다시 복호화해서 제대로 작동하도록한다. 부모에서의 this면 부모껄로 작동되게
1853
+ // console.log('!!!!!@', (data && innerHTMLThisRandom) ,innerHTMLThisRandom);
1790
1854
  if (data && innerHTMLThisRandom) {
1791
1855
  const template = config.window.document.createElement('template') as HTMLTemplateElement;
1792
- template.content.append(data);
1793
- template.innerHTML = template.innerHTML.replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');
1856
+
1857
+ // console.log('------->', template.content);
1858
+ // 브라우저에서는 이게되는데 linkedom 에서는 안된다. 그래서 innerhtml로 처리함
1859
+ // template.content.append(data);
1860
+ // console.log('-------', template.innerHTML);
1861
+ // const d = config.window.document.createElement('div')
1862
+ // d.innerHTML='<a></a>'
1863
+ // console.log('-----XX', ElementUtils.toInnerHTML(data, {document: config.window.document}));
1864
+ // template.innerHTML = template.innerHTML.replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');
1865
+ template.innerHTML = ElementUtils.toInnerHTML(data, {document: config.window.document}).replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');;
1866
+ // console.log('ccc?', template.innerHTML);
1867
+ // template.innerHTML = '<div>zzzzzzz</div>'
1794
1868
  data = template.content;
1795
1869
  }
1796
1870
  // (data as any).render = render;
@@ -1866,7 +1940,11 @@ export class RawSet {
1866
1940
  const findPath = (rawSet: RawSet) => {
1867
1941
  if (rawSet && rawSet.point) {
1868
1942
  // jsDom에서 instranceof HTMLMetaElement가 안먹히는것같아? 간혈적으로?
1869
- if (rawSet.point?.start && ('getAttribute' in rawSet.point.start) && rawSet.point.start.getAttribute('this-path')) {
1943
+ if (
1944
+ rawSet.point?.start &&
1945
+ 'getAttribute' in rawSet.point.start &&
1946
+ rawSet.point.start.getAttribute('this-path')
1947
+ ) {
1870
1948
  paths.push(rawSet.point.start.getAttribute('this-path')!);
1871
1949
  }
1872
1950
  if (rawSet.point.parentRawSet) findPath(rawSet.point.parentRawSet);
@@ -1884,9 +1962,30 @@ export class RawSet {
1884
1962
  const attribute = ElementUtils.getAttributeToObject(element);
1885
1963
  const normalAttribute = attribute[EventManager.normalAttrMapAttrName];
1886
1964
  if (normalAttribute) {
1887
- new Map<string, string>(JSON.parse(normalAttribute)).forEach((v, k) => {
1965
+ new Map<string, NormalAttrDataType>(JSON.parse(normalAttribute)).forEach((v, k) => {
1966
+ const variablePaths = v.variablePaths;
1967
+ let targetScript = v.originalAttrValue.trim();
1968
+
1969
+ let checktargetScript = v.originalAttrValue.trim();
1970
+ variablePaths.forEach(it => {
1971
+ checktargetScript = targetScript.replaceAll(it.origin, '');
1972
+ })
1973
+
1974
+
1975
+ //중요!! expression 하나만 존재 및 그외것들이 없을때 그자체가 값이다 그외 여러개 있으면 문자열 합치는걸로 간주한다.
1976
+ let isScriptValue = checktargetScript.length === 0 && variablePaths.length === 1;
1977
+
1978
+ if (isScriptValue) {
1979
+ let r = ObjectUtils.Path.toOptionalChainPath(variablePaths[0].inner);
1980
+ targetScript = targetScript.replaceAll(variablePaths[0].origin, r);
1981
+ } else {
1982
+ variablePaths.forEach(it => {
1983
+ let r = ObjectUtils.Path.toOptionalChainPath(it.inner);
1984
+ targetScript = targetScript.replaceAll(it.origin, `\${${r}}`);
1985
+ });
1986
+ }
1888
1987
  const cval = ObjectUtils.Script.evaluateReturn(
1889
- { bodyScript: config.script, returnScript: v },
1988
+ { bodyScript: config.script, returnScript: isScriptValue ? targetScript : '`' + targetScript + '`' },
1890
1989
  Object.assign(config.obj, config.renderData ? { __render: config.renderData } : undefined)
1891
1990
  );
1892
1991
  attribute[k] = cval;