@dooboostore/dom-render 1.0.110 → 1.0.112

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 (234) hide show
  1. package/README.MD +1 -2
  2. package/dist/cjs/DomRenderProxy.js +89 -48
  3. package/dist/cjs/DomRenderProxy.js.map +2 -2
  4. package/dist/cjs/components/ComponentBase.js +47 -1
  5. package/dist/cjs/components/ComponentBase.js.map +2 -2
  6. package/dist/cjs/components/a/A.js +22 -0
  7. package/dist/cjs/components/a/A.js.map +2 -2
  8. package/dist/cjs/components/appender/Appender.js +21 -4
  9. package/dist/cjs/components/appender/Appender.js.map +2 -2
  10. package/dist/cjs/components/details/Details.js +5 -0
  11. package/dist/cjs/components/details/Details.js.map +2 -2
  12. package/dist/cjs/components/forOf/ForOf.js +2 -2
  13. package/dist/cjs/components/forOf/ForOf.js.map +1 -1
  14. package/dist/cjs/components/if/If.js +1 -1
  15. package/dist/cjs/components/if/If.js.map +2 -2
  16. package/dist/cjs/components/index.js +3 -1
  17. package/dist/cjs/components/index.js.map +3 -3
  18. package/dist/cjs/components/router/RouterOutlet.js +41 -10
  19. package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
  20. package/dist/cjs/components/select/Select.js +39 -1
  21. package/dist/cjs/components/select/Select.js.map +2 -2
  22. package/dist/cjs/components/this/This.js +33 -5
  23. package/dist/cjs/components/this/This.js.map +2 -2
  24. package/dist/cjs/decorators/DomRenderNoProxy.js +3 -9
  25. package/dist/cjs/decorators/DomRenderNoProxy.js.map +2 -2
  26. package/dist/cjs/events/EventManager.js +103 -37
  27. package/dist/cjs/events/EventManager.js.map +2 -2
  28. package/dist/cjs/lifecycle/OnChangeAttrRender.js.map +1 -1
  29. package/dist/cjs/lifecycle/OnChildRawSetRendered.js +26 -0
  30. package/dist/cjs/lifecycle/OnChildRawSetRendered.js.map +7 -0
  31. package/dist/cjs/lifecycle/OnRawSetRendered.js.map +2 -2
  32. package/dist/cjs/operators/Appender.js +8 -1
  33. package/dist/cjs/operators/Appender.js.map +2 -2
  34. package/dist/cjs/operators/Dr.js +2 -2
  35. package/dist/cjs/operators/Dr.js.map +2 -2
  36. package/dist/cjs/operators/DrAppender.js +2 -2
  37. package/dist/cjs/operators/DrAppender.js.map +2 -2
  38. package/dist/cjs/operators/DrFor.js +2 -2
  39. package/dist/cjs/operators/DrFor.js.map +2 -2
  40. package/dist/cjs/operators/DrForOf.js +34 -6
  41. package/dist/cjs/operators/DrForOf.js.map +2 -2
  42. package/dist/cjs/operators/DrForm.js +6 -6
  43. package/dist/cjs/operators/DrForm.js.map +2 -2
  44. package/dist/cjs/operators/DrInnerHTML.js +2 -2
  45. package/dist/cjs/operators/DrInnerHTML.js.map +2 -2
  46. package/dist/cjs/operators/DrRepeat.js +2 -2
  47. package/dist/cjs/operators/DrRepeat.js.map +2 -2
  48. package/dist/cjs/operators/DrStripElement.js +2 -2
  49. package/dist/cjs/operators/DrStripElement.js.map +2 -2
  50. package/dist/cjs/operators/DrTargetElement.js +14 -5
  51. package/dist/cjs/operators/DrTargetElement.js.map +2 -2
  52. package/dist/cjs/operators/DrTargetElementIsElement.js +2 -2
  53. package/dist/cjs/operators/DrTargetElementIsElement.js.map +2 -2
  54. package/dist/cjs/operators/DrThis.js +2 -2
  55. package/dist/cjs/operators/DrThis.js.map +2 -2
  56. package/dist/cjs/operators/DrThisProperty.js +2 -1
  57. package/dist/cjs/operators/DrThisProperty.js.map +2 -2
  58. package/dist/cjs/rawsets/RawSet.js +87 -160
  59. package/dist/cjs/rawsets/RawSet.js.map +2 -2
  60. package/dist/cjs/routers/HashRouter.js +3 -0
  61. package/dist/cjs/routers/HashRouter.js.map +2 -2
  62. package/dist/cjs/routers/PathRouter.js +3 -0
  63. package/dist/cjs/routers/PathRouter.js.map +2 -2
  64. package/dist/cjs/routers/Router.js +25 -21
  65. package/dist/cjs/routers/Router.js.map +2 -2
  66. package/dist/esm/DomRenderProxy.js +89 -48
  67. package/dist/esm/DomRenderProxy.js.map +2 -2
  68. package/dist/esm/components/ComponentBase.js +47 -1
  69. package/dist/esm/components/ComponentBase.js.map +2 -2
  70. package/dist/esm/components/a/A.js +22 -0
  71. package/dist/esm/components/a/A.js.map +2 -2
  72. package/dist/esm/components/appender/Appender.js +22 -5
  73. package/dist/esm/components/appender/Appender.js.map +2 -2
  74. package/dist/esm/components/details/Details.js +5 -0
  75. package/dist/esm/components/details/Details.js.map +2 -2
  76. package/dist/esm/components/forOf/ForOf.js +2 -2
  77. package/dist/esm/components/forOf/ForOf.js.map +1 -1
  78. package/dist/esm/components/if/If.js +1 -1
  79. package/dist/esm/components/if/If.js.map +2 -2
  80. package/dist/esm/components/index.js +3 -1
  81. package/dist/esm/components/index.js.map +2 -2
  82. package/dist/esm/components/router/RouterOutlet.js +41 -10
  83. package/dist/esm/components/router/RouterOutlet.js.map +2 -2
  84. package/dist/esm/components/select/Select.js +39 -1
  85. package/dist/esm/components/select/Select.js.map +2 -2
  86. package/dist/esm/components/this/This.js +33 -5
  87. package/dist/esm/components/this/This.js.map +2 -2
  88. package/dist/esm/decorators/DomRenderNoProxy.js +3 -9
  89. package/dist/esm/decorators/DomRenderNoProxy.js.map +2 -2
  90. package/dist/esm/events/EventManager.js +103 -37
  91. package/dist/esm/events/EventManager.js.map +2 -2
  92. package/dist/esm/lifecycle/OnChangeAttrRender.js.map +1 -1
  93. package/dist/esm/lifecycle/OnChildRawSetRendered.js +7 -0
  94. package/dist/esm/lifecycle/OnChildRawSetRendered.js.map +7 -0
  95. package/dist/esm/lifecycle/OnRawSetRendered.js.map +2 -2
  96. package/dist/esm/operators/Appender.js +8 -1
  97. package/dist/esm/operators/Appender.js.map +2 -2
  98. package/dist/esm/operators/Dr.js +2 -2
  99. package/dist/esm/operators/Dr.js.map +2 -2
  100. package/dist/esm/operators/DrAppender.js +2 -2
  101. package/dist/esm/operators/DrAppender.js.map +2 -2
  102. package/dist/esm/operators/DrFor.js +2 -2
  103. package/dist/esm/operators/DrFor.js.map +2 -2
  104. package/dist/esm/operators/DrForOf.js +34 -6
  105. package/dist/esm/operators/DrForOf.js.map +2 -2
  106. package/dist/esm/operators/DrForm.js +6 -6
  107. package/dist/esm/operators/DrForm.js.map +2 -2
  108. package/dist/esm/operators/DrInnerHTML.js +2 -2
  109. package/dist/esm/operators/DrInnerHTML.js.map +2 -2
  110. package/dist/esm/operators/DrRepeat.js +2 -2
  111. package/dist/esm/operators/DrRepeat.js.map +2 -2
  112. package/dist/esm/operators/DrStripElement.js +2 -2
  113. package/dist/esm/operators/DrStripElement.js.map +2 -2
  114. package/dist/esm/operators/DrTargetElement.js +14 -5
  115. package/dist/esm/operators/DrTargetElement.js.map +2 -2
  116. package/dist/esm/operators/DrTargetElementIsElement.js +2 -2
  117. package/dist/esm/operators/DrTargetElementIsElement.js.map +2 -2
  118. package/dist/esm/operators/DrThis.js +2 -2
  119. package/dist/esm/operators/DrThis.js.map +2 -2
  120. package/dist/esm/operators/DrThisProperty.js +2 -1
  121. package/dist/esm/operators/DrThisProperty.js.map +2 -2
  122. package/dist/esm/rawsets/RawSet.js +87 -160
  123. package/dist/esm/rawsets/RawSet.js.map +2 -2
  124. package/dist/esm/routers/HashRouter.js +3 -0
  125. package/dist/esm/routers/HashRouter.js.map +2 -2
  126. package/dist/esm/routers/PathRouter.js +3 -0
  127. package/dist/esm/routers/PathRouter.js.map +2 -2
  128. package/dist/esm/routers/Router.js +25 -21
  129. package/dist/esm/routers/Router.js.map +2 -2
  130. package/dist/esm-bundle/dooboostore-dom-render.esm.js +830 -1533
  131. package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
  132. package/dist/types/DomRenderProxy.d.ts.map +1 -1
  133. package/dist/types/components/ComponentBase.d.ts +12 -1
  134. package/dist/types/components/ComponentBase.d.ts.map +1 -1
  135. package/dist/types/components/a/A.d.ts +6 -0
  136. package/dist/types/components/a/A.d.ts.map +1 -1
  137. package/dist/types/components/appender/Appender.d.ts +1 -0
  138. package/dist/types/components/appender/Appender.d.ts.map +1 -1
  139. package/dist/types/components/details/Details.d.ts +2 -0
  140. package/dist/types/components/details/Details.d.ts.map +1 -1
  141. package/dist/types/components/forOf/ForOf.d.ts +1 -1
  142. package/dist/types/components/forOf/ForOf.d.ts.map +1 -1
  143. package/dist/types/components/if/If.d.ts.map +1 -1
  144. package/dist/types/components/index.d.ts +1 -0
  145. package/dist/types/components/index.d.ts.map +1 -1
  146. package/dist/types/components/router/RouterOutlet.d.ts +6 -3
  147. package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
  148. package/dist/types/components/select/Select.d.ts +5 -3
  149. package/dist/types/components/select/Select.d.ts.map +1 -1
  150. package/dist/types/components/this/This.d.ts +5 -1
  151. package/dist/types/components/this/This.d.ts.map +1 -1
  152. package/dist/types/decorators/DomRenderNoProxy.d.ts.map +1 -1
  153. package/dist/types/events/EventManager.d.ts +1 -0
  154. package/dist/types/events/EventManager.d.ts.map +1 -1
  155. package/dist/types/lifecycle/OnChangeAttrRender.d.ts +1 -1
  156. package/dist/types/lifecycle/OnChangeAttrRender.d.ts.map +1 -1
  157. package/dist/types/lifecycle/OnChildRawSetRendered.d.ts +9 -0
  158. package/dist/types/lifecycle/OnChildRawSetRendered.d.ts.map +1 -0
  159. package/dist/types/lifecycle/OnRawSetRendered.d.ts +2 -0
  160. package/dist/types/lifecycle/OnRawSetRendered.d.ts.map +1 -1
  161. package/dist/types/operators/Appender.d.ts +1 -0
  162. package/dist/types/operators/Appender.d.ts.map +1 -1
  163. package/dist/types/operators/Dr.d.ts.map +1 -1
  164. package/dist/types/operators/DrAppender.d.ts.map +1 -1
  165. package/dist/types/operators/DrFor.d.ts.map +1 -1
  166. package/dist/types/operators/DrForOf.d.ts.map +1 -1
  167. package/dist/types/operators/DrForm.d.ts.map +1 -1
  168. package/dist/types/operators/DrInnerHTML.d.ts.map +1 -1
  169. package/dist/types/operators/DrRepeat.d.ts.map +1 -1
  170. package/dist/types/operators/DrStripElement.d.ts.map +1 -1
  171. package/dist/types/operators/DrTargetElement.d.ts.map +1 -1
  172. package/dist/types/operators/DrThisProperty.d.ts.map +1 -1
  173. package/dist/types/rawsets/RawSet.d.ts +4 -1
  174. package/dist/types/rawsets/RawSet.d.ts.map +1 -1
  175. package/dist/types/routers/HashRouter.d.ts +1 -0
  176. package/dist/types/routers/HashRouter.d.ts.map +1 -1
  177. package/dist/types/routers/PathRouter.d.ts +1 -0
  178. package/dist/types/routers/PathRouter.d.ts.map +1 -1
  179. package/dist/types/routers/Router.d.ts +3 -0
  180. package/dist/types/routers/Router.d.ts.map +1 -1
  181. package/dist/umd-bundle/dooboostore-dom-render.umd.js +830 -1533
  182. package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
  183. package/package.json +4 -4
  184. package/src/DomRenderProxy.ts +169 -75
  185. package/src/DomRenderProxy.ts_cache_back +1031 -0
  186. package/src/components/ComponentBase.ts +61 -5
  187. package/src/components/a/A.ts +25 -0
  188. package/src/components/appender/Appender.ts +3 -3
  189. package/src/components/details/Details.ts +7 -0
  190. package/src/components/forOf/ForOf.ts +2 -2
  191. package/src/components/if/If.ts +3 -2
  192. package/src/components/index.ts +3 -0
  193. package/src/components/router/RouterOutlet.ts +60 -22
  194. package/src/components/select/Select.ts +69 -30
  195. package/src/components/this/This.ts +41 -6
  196. package/src/decorators/DomRenderNoProxy.ts +17 -14
  197. package/src/events/EventManager.ts +180 -77
  198. package/src/lifecycle/OnChangeAttrRender.ts +1 -1
  199. package/src/lifecycle/OnChildRawSetRendered.ts +13 -0
  200. package/src/lifecycle/OnRawSetRendered.ts +3 -1
  201. package/src/operators/Appender.ts +8 -1
  202. package/src/operators/Dr.ts +2 -1
  203. package/src/operators/DrAppender.ts +2 -1
  204. package/src/operators/DrFor.ts +2 -1
  205. package/src/operators/DrForOf.ts +36 -6
  206. package/src/operators/DrForm.ts +6 -5
  207. package/src/operators/DrInnerHTML.ts +2 -1
  208. package/src/operators/DrRepeat.ts +2 -1
  209. package/src/operators/DrStripElement.ts +2 -1
  210. package/src/operators/DrTargetElement.ts +17 -5
  211. package/src/operators/DrTargetElementIsElement.ts +2 -2
  212. package/src/operators/DrThis.ts +2 -2
  213. package/src/operators/DrThisProperty.ts +2 -1
  214. package/src/rawsets/RawSet.ts +161 -237
  215. package/src/routers/HashRouter.ts +4 -0
  216. package/src/routers/PathRouter.ts +5 -0
  217. package/src/routers/Router.ts +64 -47
  218. package/src/node_modules/.bin/acorn +0 -17
  219. package/src/node_modules/.bin/browserslist +0 -17
  220. package/src/node_modules/.bin/eslint +0 -17
  221. package/src/node_modules/.bin/sbf +0 -17
  222. package/src/node_modules/.bin/ts-node +0 -17
  223. package/src/node_modules/.bin/ts-node-cwd +0 -17
  224. package/src/node_modules/.bin/ts-node-dev +0 -17
  225. package/src/node_modules/.bin/ts-node-esm +0 -17
  226. package/src/node_modules/.bin/ts-node-script +0 -17
  227. package/src/node_modules/.bin/ts-node-transpile-only +0 -17
  228. package/src/node_modules/.bin/ts-script +0 -17
  229. package/src/node_modules/.bin/tsc +0 -17
  230. package/src/node_modules/.bin/tsnd +0 -17
  231. package/src/node_modules/.bin/tsserver +0 -17
  232. package/src/node_modules/.bin/webpack +0 -17
  233. package/src/node_modules/.bin/webpack-cli +0 -17
  234. package/src/node_modules/.bin/webpack-dev-server +0 -17
@@ -44,6 +44,7 @@ import { ConvertUtils } from '@dooboostore/core/convert/ConvertUtils';
44
44
 
45
45
  export type RenderResult = { raws: RawSet[]; executedOperators: OperatorExecuter[] };
46
46
 
47
+ // let renderCnt = 0;
47
48
  export class RawSet {
48
49
  public static readonly DR_NAME = 'dr';
49
50
  public static readonly DR_IF_NAME = 'dr-if';
@@ -61,6 +62,8 @@ export class RawSet {
61
62
  public static readonly DR_STRIP_NAME = 'dr-strip';
62
63
  public static readonly DR_REPLACE_TARGET_ELEMENT_IS_NAME = 'dr-replace-target-element-is';
63
64
 
65
+ // elementName
66
+ public static readonly DR_TARGET_ELEMENT_ELEMENTNAME = 'dr-target-element';
64
67
  // 감지처리되는 옵션
65
68
  public static readonly DR_DETECT_IF_OPTIONNAME = 'dr-detect-option-if';
66
69
  public static readonly DR_DETECT_FILTER_OPTIONNAME = 'dr-detect-option-filter';
@@ -101,6 +104,7 @@ export class RawSet {
101
104
  public static readonly DR_ON_INIT_ARGUMENTS_OPTIONNAME = 'dr-on-init:arguments';
102
105
  public static readonly DR_ON_CONSTRUCTOR_ARGUMENTS_OPTIONNAME = 'dr-on-constructor:arguments';
103
106
 
107
+
104
108
  public static readonly drAttrsOriginName: Attrs = {
105
109
  dr: RawSet.DR_NAME,
106
110
  drIf: RawSet.DR_IF_NAME,
@@ -136,6 +140,10 @@ export class RawSet {
136
140
  // RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME
137
141
  // ]
138
142
 
143
+ public static readonly DR_ELEMENTS = [
144
+ RawSet.DR_TARGET_ELEMENT_ELEMENTNAME
145
+ ];
146
+
139
147
  public static readonly DR_ATTRIBUTES = [
140
148
  RawSet.DR_NAME,
141
149
  RawSet.DR_APPENDER_NAME,
@@ -149,7 +157,7 @@ export class RawSet {
149
157
  RawSet.DR_INNERHTML_NAME,
150
158
  RawSet.DR_INNERTEXT_NAME,
151
159
  RawSet.DR_REPEAT_NAME,
152
- RawSet.DR_DETECT_NAME,
160
+ // RawSet.DR_DETECT_NAME, // TODO: DrDetect 오퍼레이터 구현 필요
153
161
  RawSet.DR_STRIP_NAME
154
162
  ] as const;
155
163
 
@@ -271,8 +279,64 @@ export class RawSet {
271
279
  // 중요 render 처리 부분
272
280
  // public async render(obj: any, config: DomRenderConfig): Promise<RawSet[]> {
273
281
  // }
282
+ private lastRenderedValue: string | undefined;
274
283
  public async render(obj: any, config: DomRenderConfig): Promise<RenderResult> {
275
284
  // console.log('render!!!!!!!!!!!!!!')
285
+ // renderCnt++;
286
+ // const t0 = performance.now();
287
+ // console.group('RawSet render', this);
288
+ // Dirty Checking Optimization for Text Nodes
289
+ if (this.dataSet.fragment.childNodes.length === 1 && this.dataSet.fragment.childNodes[0].nodeType === Node.TEXT_NODE) {
290
+ const textContent = this.dataSet.fragment.childNodes[0].textContent;
291
+ if (textContent) {
292
+ const runText = RawSet.expressionGroups(textContent)[0][1];
293
+ const __render = {
294
+ rawSet: this,
295
+ scripts: EventManager.setBindProperty(config?.scripts, obj),
296
+ router: config?.router,
297
+ range: Range.range,
298
+ element: this.dataSet.fragment.childNodes[0],
299
+ attribute: {},
300
+ rootObject: obj,
301
+ scriptUtils: ObjectUtils.Script,
302
+ nearThis: this.findNearThis(obj),
303
+ parentThis: this.findParentThis(obj),
304
+ bindScript: ` /** render **/
305
+ const ${EventManager.SCRIPTS_VARNAME} = this.__render.scripts;
306
+ const ${EventManager.RAWSET_VARNAME} = this.__render.rawSet;
307
+ const ${EventManager.ELEMENT_VARNAME} = this.__render.element;
308
+ const ${EventManager.ATTRIBUTE_VARNAME} = this.__render.attribute;
309
+ const ${EventManager.RANGE_VARNAME} = this.__render.range;
310
+ const ${EventManager.ROUTER_VARNAME} = this.__render.router;
311
+ const ${EventManager.NEAR_THIS_VARNAME} = this.__render.nearThis;
312
+ const ${EventManager.PARENT_THIS_VARNAME} = this.__render.parentThis;
313
+ const ${EventManager.SCRIPT_UTILS_VARNAME} = this.__render.scriptUtils;
314
+ const ${EventManager.ROOT_OBJECT_VARNAME} = this.__render.rootObject;
315
+ `
316
+ };
317
+
318
+ try {
319
+ const newValue = ObjectUtils.Script.evaluateReturn({
320
+ bodyScript: __render.bindScript,
321
+ returnScript: runText
322
+ }, Object.assign(obj, { __render }));
323
+
324
+ const newValueStr = String(newValue);
325
+ if (this.lastRenderedValue === newValueStr) {
326
+ // console.log('✓ Skipping render: Value unchanged', newValue);
327
+ return { raws: [], executedOperators: [] };
328
+ }
329
+ // console.log('✗ Rendering: Value changed', this.lastRenderedValue, '->', newValue);
330
+ // Update lastRenderedValue BEFORE proceeding with render
331
+ // This ensures the value is cached even if render fails partway through
332
+ this.lastRenderedValue = newValueStr;
333
+ } catch (e) {
334
+ // Evaluation failed, proceed with normal render
335
+ // console.log('⚠ Dirty check failed, proceeding with render', e);
336
+ }
337
+ }
338
+ }
339
+
276
340
  const genNode = config.window.document.importNode(this.dataSet.fragment, true);
277
341
  const raws: RawSet[] = [];
278
342
  const onAttrInitCallBacks: AttrInitCallBack[] = [];
@@ -331,18 +395,13 @@ export class RawSet {
331
395
  // console.log('--->', RawSet.exporesionGrouops(textContent), textContent,runText, runText[0][1])
332
396
  let newNode: Node;
333
397
  if (textContent?.startsWith('#')) {
334
- const r = ObjectUtils.Script.evaluate(
335
- `${__render.bindScript} return ${runText}`,
336
- Object.assign(obj, { __render })
398
+ const r = ObjectUtils.Script.evaluateReturn({ bodyScript: __render.bindScript, returnScript: runText }, Object.assign(obj, { __render })
337
399
  );
338
400
  const template = config.window.document.createElement('template') as HTMLTemplateElement;
339
401
  template.innerHTML = r;
340
402
  newNode = template.content;
341
403
  } else {
342
- const r = ObjectUtils.Script.evaluate(
343
- `${__render.bindScript} return ${runText}`,
344
- Object.assign(obj, { __render })
345
- );
404
+ const r = ObjectUtils.Script.evaluateReturn({ bodyScript: __render.bindScript, returnScript: runText }, Object.assign(obj, { __render }));
346
405
  newNode = config.window.document.createTextNode(r);
347
406
  }
348
407
  cNode.parentNode?.replaceChild(newNode, cNode);
@@ -385,140 +444,23 @@ export class RawSet {
385
444
  drAttrs.push(drAttr);
386
445
  // 아래 순서 중요
387
446
  const operators = [
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
- ),
447
+ 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 }),
448
+ 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 }),
404
449
  // new Dr(this, __render, {raws, fag}, {element, attrName: EventManager.onRenderedInitAttrName, attr: drAttr.dr, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.dr}, {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
- )
450
+ 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 }),
451
+ 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 }),
452
+ 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 }),
453
+ 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 }),
454
+ 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 }),
455
+ 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 }),
456
+ 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 }),
457
+ 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 }),
458
+ 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 }),
459
+ 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 }),
460
+ 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 }),
461
+ 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 }),
462
+ new DrTargetElement(this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks }),
463
+ new DrTargetAttr(this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks })
522
464
  ];
523
465
 
524
466
  for (const operator of operators) {
@@ -538,17 +480,21 @@ export class RawSet {
538
480
  it.point.parentRawSet = this;
539
481
  });
540
482
 
483
+
541
484
  // console.log('pppppppppppppp', this);
542
485
 
543
486
  // replaceBody와 applyEvent 순서를 바꿨다 20250511
544
487
  const childrenNodes = Array.from(genNode.childNodes);
488
+ // console.log(`RawSet aa took ${performance.now() - t0} milliseconds. children`, childrenNodes);
545
489
  this.applyEvent(obj, genNode, config);
490
+ // console.log(`RawSet xxxxxxxxxx took ${performance.now() - t0} milliseconds.`);
546
491
  this.replaceBody(genNode); // 중요 여기서 마지막에 연션된 값을 그려준다.
492
+ // console.log(`RawSet replaceBody took ${performance.now() - t0} milliseconds.`);
547
493
  // console.log('rawSEt!!!!!!!', obj, this.near)
548
494
  // console.log('rawSEt!!!!!!!', obj, this.findNearThis(obj),childrenNodes,config)
549
495
  // console.log('rawSEt!!!!!!!', obj, drAttrs)
550
496
  this.onRenderedEvent(obj, childrenNodes, config);
551
-
497
+ // console.log(`RawSet onRenderedEvent took ${performance.now() - t0} milliseconds.`);
552
498
  drAttrs.forEach(it => {
553
499
  if (it.drCompleteOption) {
554
500
  // genNode.childNodes
@@ -567,6 +513,7 @@ export class RawSet {
567
513
  );
568
514
  }
569
515
  });
516
+ // console.log(`RawSet drAttrs.forEach took ${performance.now() - t0} milliseconds.`);
570
517
 
571
518
  // 중요 style isolation 나중에 :scope로 대체 가능할듯.
572
519
  // 2023.9.4일 없앰 style 처음들어올때 처리하는걸로 바꿈
@@ -576,6 +523,9 @@ export class RawSet {
576
523
  await it.obj?.onInitRender?.({}, this);
577
524
  }
578
525
  }
526
+ // console.log(`RawSet const it of onThisComponentSetCallBacks took ${performance.now() - t0} milliseconds.`);
527
+
528
+
579
529
  for (const it of onElementInitCallBacks) {
580
530
  if (isOnInitRender(this.dataSet.render?.currentThis)) {
581
531
  // TODO: 나중에 파라미터 들어가야될듯. 지금은 리팩토링하느라 빠짐
@@ -607,11 +557,13 @@ export class RawSet {
607
557
 
608
558
  config?.onElementInit?.(it.name, obj, this, it.targetElement);
609
559
  }
560
+ // console.log(`RawSet for (const it of onElementInitCallBacks) { took ${performance.now() - t0} milliseconds.`);
610
561
 
611
562
  // TODO: 이부분도 위에 targetElement 처럼 해야될까?
612
563
  for (const it of onAttrInitCallBacks) {
613
564
  config?.onAttrInit?.(it.attrName, it.attrValue, obj, this);
614
565
  }
566
+ // console.log(`RawSet for (const it of onAttrInitCallBacks) { took ${performance.now() - t0} milliseconds.`);
615
567
 
616
568
  // component destroy
617
569
  if (obj.__domrender_components) {
@@ -625,7 +577,10 @@ export class RawSet {
625
577
  }
626
578
  });
627
579
  }
580
+ // console.log(`RawSet if (obj.__domrender_components) { took ${performance.now() - t0} milliseconds.`);
628
581
  // console.log('-------raws',raws)
582
+ // console.log(`RawSet render took ${performance.now() - t0} milliseconds. END!!`, renderCnt);
583
+ console.groupEnd();
629
584
  return { raws: raws, executedOperators: executedOperators };
630
585
  }
631
586
 
@@ -714,11 +669,13 @@ export class RawSet {
714
669
  }
715
670
 
716
671
  public applyEvent(obj: any, fragment = this.dataSet.fragment, config?: DomRenderConfig) {
672
+ // const t0 = performance.now();
717
673
  this.dataSet.config.eventManager.applyEvent(
718
674
  obj,
719
675
  this.dataSet.config.eventManager.findAttrElements(fragment, config),
720
676
  config
721
677
  );
678
+ // console.log(`RawSet applyEvent took ${performance.now() - t0} milliseconds.`);
722
679
  }
723
680
 
724
681
  public onRenderedEvent(obj: any, nodes: Node[], config?: DomRenderConfig) {
@@ -825,12 +782,16 @@ export class RawSet {
825
782
  return r;
826
783
  }
827
784
  if (element.hasAttribute(EventManager.attrAttrName)) {
785
+ // console.log('elementAttrAttrName-->', element.outerHTML);
828
786
  const script = element.getAttribute(EventManager.attrAttrName) ?? '';
829
787
  // 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
- }));
788
+ // const keyValuePairs = Array.from(script.matchAll(/['"]?(\w+)['"]?:\s*([^,}]+)/g))
789
+ const keyValuePairs = Array.from(script.matchAll(/['"]?([\w-_]+)['"]?:\s*([^,}]+)/g))
790
+ .map(match => ({
791
+ key: match[1],
792
+ value: match[2]
793
+ }));
794
+
834
795
  (keyValuePairs ?? []).forEach(it => {
835
796
  element.setAttribute(it.key, '${' + it.value + '}$');
836
797
  });
@@ -838,6 +799,7 @@ export class RawSet {
838
799
  // element.setAttribute('dr-event-click', 'console.log(11)');
839
800
  const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
840
801
  const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
802
+ targetElementNames.push(...RawSet.DR_ELEMENTS)
841
803
  const isElement =
842
804
  targetElementNames.includes(element.tagName.toLowerCase()) ||
843
805
  targetElementNames.includes(targetElementIs?.toLowerCase() as any);
@@ -854,8 +816,8 @@ export class RawSet {
854
816
  const linkVariables = new Map<string, string>();
855
817
  const linkNames = EventManager.linkAttrs.map(it => it.name);
856
818
  const isAttr =
857
- element.getAttributeNames().filter(it=>!EventManager.noDetectAttr.includes(it)).filter(it => {
858
- const value = element.getAttribute(it);
819
+ element.getAttributeNames().filter(it => !EventManager.noDetectAttr.includes(it)).filter(it => {
820
+ const value = element.getAttribute(it)?.trim();
859
821
 
860
822
  // link일때
861
823
  if (value && linkNames.includes(it)) {
@@ -863,9 +825,10 @@ export class RawSet {
863
825
  } else if (value && RawSet.isExpression(value)) {
864
826
  // 표현식있을떄
865
827
  const variablePaths: { origin: string; inner: string }[] = RawSet.expressionGroups(value).map(it => ({
866
- origin: it[0],
867
- inner: it[1]
828
+ origin: it[0].trim(),
829
+ inner: it[1].trim()
868
830
  }));
831
+ const isStringTemplate = variablePaths.length > 1 || (variablePaths[0] && variablePaths[0].origin !== value);
869
832
  // normal Attribute 초반에 셋팅해주기.
870
833
  // TODO: 이거 하긴했는데 사이드 이팩트?
871
834
  // let variablePath: string = RawSet.expressionGroups(value)[0][1];
@@ -884,10 +847,24 @@ export class RawSet {
884
847
 
885
848
  if (cval === null) {
886
849
  element.removeAttribute(it);
850
+ /* TODO: 여기 더 추가되어야될듯
851
+ TODO: 훔..... 없어도될듯?
852
+ *
853
+ <select dr-event-change="@this@.onMarketChange($event)" class="market-select">
854
+ <option>마켓 선택 (${@this@.markets?.length??0}$개)</option>
855
+ <option dr-for-of="@this@.markets" dr-option-item-variable-name="market" value="${#market#.uuid}$" dr-attr="{selected: #market#.uuid === @this@.marketUUID ? 'selected' : null}">
856
+ ${#market#.name}$
857
+ </option>
858
+ </select>
859
+ */
860
+ // } else if (
861
+ // !(element.hasAttribute(RawSet.DR_VARIABLE_NAME_OPTIONNAME) || element.hasAttribute(RawSet.DR_ITEM_VARIABLE_NAME_OPTIONNAME) || element.hasAttribute(RawSet.DR_ITEM_INDEX_VARIABLE_NAME_OPTIONNAME))
862
+ // ) {
863
+ // element.setAttribute(it, cval);
887
864
  } else {
888
865
  element.setAttribute(it, cval);
889
866
  }
890
- normalAttrs.set(it, { originalAttrValue: value, variablePaths: variablePaths });
867
+ normalAttrs.set(it, { originalAttrValue: value, variablePaths: variablePaths, isStringTemplate });
891
868
  // normalAttrs.set(it, originVariable);
892
869
  // console.log('normalAttribute', it, variablePath);
893
870
  }
@@ -896,27 +873,27 @@ export class RawSet {
896
873
  return isTargetAttr;
897
874
  }).length > 0;
898
875
 
899
- if (linkVariables.size) {
900
- element.setAttribute(
901
- EventManager.linkTargetMapAttrName,
902
- JSON.stringify(Array.from(linkVariables.entries()))
903
- );
904
- }
905
- // 기본 attribute를 처리하기위해
906
- if (normalAttrs.size) {
907
- element.setAttribute(EventManager.normalAttrMapAttrName, JSON.stringify(Array.from(normalAttrs.entries())));
908
- }
909
- // if (isElement) {
910
- // element.setAttribute('www', '@this@');
911
- // }
912
- const r = isAttr || isElement ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
913
- // console.log('acceptNodeReturn element', r);
914
- return r;
876
+ if (linkVariables.size) {
877
+ element.setAttribute(
878
+ EventManager.linkTargetMapAttrName,
879
+ JSON.stringify(Array.from(linkVariables.entries()))
880
+ );
881
+ }
882
+ // 기본 attribute를 처리하기위해
883
+ if (normalAttrs.size) {
884
+ element.setAttribute(EventManager.normalAttrMapAttrName, JSON.stringify(Array.from(normalAttrs.entries())));
915
885
  }
916
- const r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
917
- // console.log('acceptNodeReturn nothing', r);
886
+ // if (isElement) {
887
+ // element.setAttribute('www', '@this@');
888
+ // }
889
+ const r = isAttr || isElement ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
890
+ // console.log('acceptNodeReturn element', r);
918
891
  return r;
919
892
  }
893
+ const r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
894
+ // console.log('acceptNodeReturn nothing', r);
895
+ return r;
896
+ }
920
897
  )
921
898
 
922
899
  const pars: RawSet[] = [];
@@ -991,7 +968,8 @@ export class RawSet {
991
968
  lasterIndex = regexArr.index + it.content.length;
992
969
  }
993
970
  template.content.append(config.window.document.createTextNode(text.substring(lasterIndex, text.length)));
994
- currentNode?.parentNode?.replaceChild(template.content, currentNode); // <-- 여기서 text를 fragment로 replace했기때문에 추적 변경이 가능하다.
971
+ const p = currentNode?.parentNode;
972
+ p?.replaceChild(template.content, currentNode); // <-- 여기서 text를 fragment로 replace했기때문에 추적 변경이 가능하다.
995
973
  } else if (currentNode.nodeType === Node.ELEMENT_NODE) {
996
974
  // const uuid = `${RandomUtils.alphabet(40)}___${obj?.constructor?.name}`;
997
975
  const uuid = `${RandomUtils.alphabet(40)}`;
@@ -1003,6 +981,7 @@ export class RawSet {
1003
981
  // 여기서 등록한 component 추가한다.
1004
982
  const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
1005
983
  const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
984
+ targetElementNames.push(...RawSet.DR_ELEMENTS)
1006
985
  const isElement =
1007
986
  targetElementNames.includes(element.tagName.toLowerCase()) ||
1008
987
  targetElementNames.includes(targetElementIs?.toLowerCase() as any);
@@ -1520,6 +1499,7 @@ export class RawSet {
1520
1499
  }
1521
1500
 
1522
1501
  // console.log('aa-asIs', targetElement.innerHTML);
1502
+ const componentName = targetElement.getAttribute(RawSet.DR_VARIABLE_NAME_OPTIONNAME) ?? 'component';
1523
1503
  const optionThisName = targetElement.getAttribute(RawSet.DR_THIS_NAME_OPTIONNAME);
1524
1504
  // console.log('11111111111111', optionThisName)
1525
1505
  targetElement
@@ -1528,6 +1508,8 @@ export class RawSet {
1528
1508
  const thisRandom = this.drThisEncoding(targetElement, drThis, { asIs: /@this@/g });
1529
1509
  // console.log('@@@@@@@@@@@@@0', thisRandom);
1530
1510
  // let thisNameRandom: string | undefined = undefined;
1511
+ targetElement.innerHTML = targetElement.innerHTML.replaceAll(`#${componentName}#`, drThis);
1512
+
1531
1513
  if (optionThisName) {
1532
1514
  // console.log('-----0', element.innerHTML, '\n', targetElement.innerHTML)
1533
1515
  targetElement.innerHTML = targetElement.innerHTML.replaceAll(`@${optionThisName}@`, drThis);
@@ -1721,61 +1703,9 @@ export class RawSet {
1721
1703
  // 추적 및 destroy 위해.
1722
1704
  instance.__rawSet = rawSet;
1723
1705
 
1724
- //
1725
- // const i = instance.__domrender_component_new = (instance.__domrender_component_new ?? new Proxy({}, new DomRenderFinalProxy())) as CreatorMetaData;
1726
- // i.thisVariableName = rawSet.point.thisVariableName;
1727
- // i.thisFullVariableName = `this.__domrender_components.${componentKey}`;
1728
- // i.componentKey = componentKey;
1729
- // i.rawSet = rawSet;
1730
- // i.attribute = attribute;
1731
- // i.router = config.router;
1732
- // i.scripts = render.scripts;
1733
- // i.drAttrs = attrs;
1734
- // i.innerHTML = element.innerHTML;
1735
- // i.rootCreator = new Proxy(obj, new DomRenderFinalProxy());
1736
- // i.creator = new Proxy(rawSet.point.thisVariableName ? ObjectUtils.Script.evalReturn(rawSet.point.thisVariableName, obj) : obj, new DomRenderFinalProxy());
1737
- // this.__creatorMetaData = i;
1738
- // render = {
1739
- // component: instance,
1740
- // creatorMetaData: i,
1741
- // ...render
1742
- // };
1743
- //
1744
- // // 중요 dr-normal-attr-map
1745
- // const normalAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);
1746
- // if (isOnChangeAttrRender(instance) && normalAttrMap) {
1747
- // new Map<string, string>(JSON.parse(normalAttrMap)).forEach((value, key) => {
1748
- // const script = `${renderScript} return ${value} `;
1749
- // const cval = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));
1750
- // // element.setAttribute(key, cval);
1751
- // instance.onChangeAttrRender(key, cval);
1752
- // });
1753
- // }
1754
- //
1755
- // // dr-on-create data
1756
- // const onCreateDataScript = `return {rootParent: this, render: this.__render}`;
1757
- // const onCreateDataParam = ObjectUtils.Script.eval(onCreateDataScript, Object.assign(obj, { __render: render }));
1758
- // if (isOnCreateRenderData(instance)) {
1759
- // instance?.onCreateRenderData(onCreateDataParam);
1760
- // }
1761
- //
1762
- // // dr-on-create onCreateRender
1763
- // const onCreate = element.getAttribute(RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME);
1764
- // this.__render = render;
1765
- // let createParam = [];
1766
- // if (onCreate) {
1767
- // const script = `${renderScript} return ${onCreate} `;
1768
- // createParam = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));
1769
- // if (!Array.isArray(createParam)) {
1770
- // createParam = [createParam];
1771
- // }
1772
- // }
1773
- // if (isOnCreateRender(instance)) {
1774
- // instance?.onCreateRender?.(...createParam);
1775
- // }
1776
1706
  let applayTemplate = element.innerHTML;
1777
1707
  let applayTemplateText = element.textContent?.trim() ?? '';
1778
- let applayTemplateEscape = ConvertUtils.escapeHTML(element.innerHTML);
1708
+ let applayTemplateEscape = ConvertUtils.escapeHTML(element.innerHTML);
1779
1709
  let innerHTMLThisRandom;
1780
1710
  const componentName = element.getAttribute(RawSet.DR_VARIABLE_NAME_OPTIONNAME) ?? 'component';
1781
1711
  const innerHTMLName = element.getAttribute(RawSet.DR_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
@@ -1862,7 +1792,8 @@ export class RawSet {
1862
1792
  // d.innerHTML='<a></a>'
1863
1793
  // console.log('-----XX', ElementUtils.toInnerHTML(data, {document: config.window.document}));
1864
1794
  // template.innerHTML = template.innerHTML.replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');
1865
- template.innerHTML = ElementUtils.toInnerHTML(data, {document: config.window.document}).replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');;
1795
+ let s = ElementUtils.toInnerHTML(data, { document: config.window.document });
1796
+ template.innerHTML = s.replace(RegExp(innerHTMLThisRandom, 'g'), 'this.');;
1866
1797
  // console.log('ccc?', template.innerHTML);
1867
1798
  // template.innerHTML = '<div>zzzzzzz</div>'
1868
1799
  data = template.content;
@@ -1966,31 +1897,24 @@ export class RawSet {
1966
1897
  const variablePaths = v.variablePaths;
1967
1898
  let targetScript = v.originalAttrValue.trim();
1968
1899
 
1969
- let checktargetScript = v.originalAttrValue.trim();
1970
- variablePaths.forEach(it => {
1971
- checktargetScript = targetScript.replaceAll(it.origin, '');
1972
- })
1973
-
1974
-
1975
1900
  //중요!! 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 {
1901
+ if (v.isStringTemplate) {
1982
1902
  variablePaths.forEach(it => {
1983
1903
  let r = ObjectUtils.Path.toOptionalChainPath(it.inner);
1984
1904
  targetScript = targetScript.replaceAll(it.origin, `\${${r}}`);
1985
1905
  });
1906
+ } else {
1907
+ let r = ObjectUtils.Path.toOptionalChainPath(variablePaths[0].inner);
1908
+ targetScript = targetScript.replaceAll(variablePaths[0].origin, r);
1986
1909
  }
1987
1910
  const cval = ObjectUtils.Script.evaluateReturn(
1988
- { bodyScript: config.script, returnScript: isScriptValue ? targetScript : '`' + targetScript + '`' },
1911
+ { bodyScript: config.script, returnScript: v.isStringTemplate ? '`' + targetScript + '`' : targetScript },
1989
1912
  Object.assign(config.obj, config.renderData ? { __render: config.renderData } : undefined)
1990
1913
  );
1991
1914
  attribute[k] = cval;
1992
1915
  });
1993
1916
  }
1917
+ // console.log('attribute', attribute);
1994
1918
  return attribute;
1995
1919
  }
1996
1920
  }
@@ -89,6 +89,10 @@ export class HashRouter extends Router {
89
89
  return LocationUtils.hashPath(this.config.window) || '/';
90
90
  }
91
91
 
92
+ getSearch(): string {
93
+ return LocationUtils.hashSearch(this.config.window);
94
+ }
95
+
92
96
  getHashSearchParams(data?:{delete?:string[], append?:[[string, string]]}): URLSearchParams {
93
97
  const hash = this.config.window.location.hash;
94
98
  const queryIndex = hash.indexOf('?');
@@ -66,6 +66,7 @@ export class PathRouter extends Router {
66
66
 
67
67
  getUrl(): string {
68
68
  if (!this.config.window.document?.location?.href) {
69
+ //if ((!this.config.window.document?.location?.href) || (this.config.window.document?.location?.href === 'about:blank')) {
69
70
  return '/';
70
71
  }
71
72
  const url = new URL(this.config.window.document.location?.href);
@@ -80,6 +81,10 @@ export class PathRouter extends Router {
80
81
  return this.config.window.location?.pathname??'/';
81
82
  }
82
83
 
84
+ getSearch(): string {
85
+ return this.config.window.location?.search??'';
86
+ }
87
+
83
88
  getHashSearchParams(data?:{delete?:string[], append?:[[string, string]]}): URLSearchParams {
84
89
  // http://local.com/#wow=222&wow=bb&z=2
85
90
  const searchParams = new URLSearchParams(this.config.window.location?.hash.slice(1)??'');