@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.
- package/dist/cjs/DomRenderProxy.js +122 -57
- package/dist/cjs/DomRenderProxy.js.map +2 -2
- package/dist/cjs/components/ComponentBase.js +4 -4
- package/dist/cjs/components/ComponentBase.js.map +2 -2
- package/dist/cjs/components/appender/Appender.js +0 -3
- package/dist/cjs/components/appender/Appender.js.map +2 -2
- package/dist/cjs/components/checkbox/CheckBox.js.map +2 -2
- package/dist/cjs/components/choose/Choose.js +3 -1
- package/dist/cjs/components/choose/Choose.js.map +2 -2
- package/dist/cjs/components/details/Details.js +2 -2
- package/dist/cjs/components/details/Details.js.map +2 -2
- package/dist/cjs/components/forOf/ForOf.js.map +2 -2
- package/dist/cjs/components/if/If.js +2 -2
- package/dist/cjs/components/if/If.js.map +2 -2
- package/dist/cjs/components/input/Input.js +2 -2
- package/dist/cjs/components/input/Input.js.map +2 -2
- package/dist/cjs/components/promise/PromiseSwitch.js +6 -6
- package/dist/cjs/components/promise/PromiseSwitch.js.map +2 -2
- package/dist/cjs/components/radio/Radio.js.map +2 -2
- package/dist/cjs/components/router/Route.js +2 -2
- package/dist/cjs/components/router/Route.js.map +2 -2
- package/dist/cjs/components/router/RouterOutlet.js +2 -2
- package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
- package/dist/cjs/components/select/Select.js +6 -6
- package/dist/cjs/components/select/Select.js.map +2 -2
- package/dist/cjs/components/this/This.js +2 -2
- package/dist/cjs/components/this/This.js.map +2 -2
- package/dist/cjs/components/timer/Timer.js +2 -3
- package/dist/cjs/components/timer/Timer.js.map +2 -2
- package/dist/cjs/events/EventManager.js +9 -2
- package/dist/cjs/events/EventManager.js.map +2 -2
- package/dist/cjs/lifecycle/OnInitRender.js.map +1 -1
- package/dist/cjs/operators/DrForOf.js +24 -11
- package/dist/cjs/operators/DrForOf.js.map +2 -2
- package/dist/cjs/operators/DrIf.js +1 -2
- package/dist/cjs/operators/DrIf.js.map +2 -2
- package/dist/cjs/operators/DrInnerText.js +2 -2
- package/dist/cjs/operators/DrInnerText.js.map +2 -2
- package/dist/cjs/rawsets/RawSet.js +243 -46
- package/dist/cjs/rawsets/RawSet.js.map +3 -3
- package/dist/cjs/routers/PathRouter.js +13 -7
- package/dist/cjs/routers/PathRouter.js.map +2 -2
- package/dist/cjs/routers/Router.js +51 -27
- package/dist/cjs/routers/Router.js.map +2 -2
- package/dist/esm/DomRenderProxy.js +122 -57
- package/dist/esm/DomRenderProxy.js.map +2 -2
- package/dist/esm/components/ComponentBase.js +4 -4
- package/dist/esm/components/ComponentBase.js.map +2 -2
- package/dist/esm/components/appender/Appender.js +0 -3
- package/dist/esm/components/appender/Appender.js.map +2 -2
- package/dist/esm/components/checkbox/CheckBox.js.map +2 -2
- package/dist/esm/components/choose/Choose.js +3 -1
- package/dist/esm/components/choose/Choose.js.map +2 -2
- package/dist/esm/components/details/Details.js +2 -2
- package/dist/esm/components/details/Details.js.map +2 -2
- package/dist/esm/components/forOf/ForOf.js.map +2 -2
- package/dist/esm/components/if/If.js +2 -2
- package/dist/esm/components/if/If.js.map +2 -2
- package/dist/esm/components/input/Input.js +2 -2
- package/dist/esm/components/input/Input.js.map +2 -2
- package/dist/esm/components/promise/PromiseSwitch.js +6 -6
- package/dist/esm/components/promise/PromiseSwitch.js.map +2 -2
- package/dist/esm/components/radio/Radio.js.map +2 -2
- package/dist/esm/components/router/Route.js +2 -2
- package/dist/esm/components/router/Route.js.map +2 -2
- package/dist/esm/components/router/RouterOutlet.js +2 -2
- package/dist/esm/components/router/RouterOutlet.js.map +2 -2
- package/dist/esm/components/select/Select.js +6 -6
- package/dist/esm/components/select/Select.js.map +2 -2
- package/dist/esm/components/this/This.js +2 -2
- package/dist/esm/components/this/This.js.map +2 -2
- package/dist/esm/components/timer/Timer.js +2 -3
- package/dist/esm/components/timer/Timer.js.map +2 -2
- package/dist/esm/events/EventManager.js +9 -2
- package/dist/esm/events/EventManager.js.map +2 -2
- package/dist/esm/lifecycle/OnInitRender.js.map +1 -1
- package/dist/esm/operators/DrForOf.js +24 -11
- package/dist/esm/operators/DrForOf.js.map +2 -2
- package/dist/esm/operators/DrIf.js +1 -2
- package/dist/esm/operators/DrIf.js.map +2 -2
- package/dist/esm/operators/DrInnerText.js +2 -2
- package/dist/esm/operators/DrInnerText.js.map +2 -2
- package/dist/esm/rawsets/RawSet.js +243 -46
- package/dist/esm/rawsets/RawSet.js.map +3 -3
- package/dist/esm/routers/PathRouter.js +13 -7
- package/dist/esm/routers/PathRouter.js.map +2 -2
- package/dist/esm/routers/Router.js +51 -27
- package/dist/esm/routers/Router.js.map +2 -2
- package/dist/esm-bundle/dooboostore-dom-render.esm.js +1850 -319
- package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
- package/dist/types/DomRenderProxy.d.ts +2 -2
- package/dist/types/DomRenderProxy.d.ts.map +1 -1
- package/dist/types/components/ComponentBase.d.ts +1 -1
- package/dist/types/components/ComponentBase.d.ts.map +1 -1
- package/dist/types/components/appender/Appender.d.ts +0 -2
- package/dist/types/components/appender/Appender.d.ts.map +1 -1
- package/dist/types/components/checkbox/CheckBox.d.ts.map +1 -1
- package/dist/types/components/choose/Choose.d.ts.map +1 -1
- package/dist/types/components/details/Details.d.ts +1 -1
- package/dist/types/components/details/Details.d.ts.map +1 -1
- package/dist/types/components/forOf/ForOf.d.ts.map +1 -1
- package/dist/types/components/if/If.d.ts +1 -1
- package/dist/types/components/if/If.d.ts.map +1 -1
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/input/Input.d.ts +1 -1
- package/dist/types/components/input/Input.d.ts.map +1 -1
- package/dist/types/components/promise/PromiseSwitch.d.ts +1 -1
- package/dist/types/components/promise/PromiseSwitch.d.ts.map +1 -1
- package/dist/types/components/radio/Radio.d.ts.map +1 -1
- package/dist/types/components/router/Route.d.ts +1 -1
- package/dist/types/components/router/Route.d.ts.map +1 -1
- package/dist/types/components/router/RouterOutlet.d.ts +1 -1
- package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
- package/dist/types/components/select/Select.d.ts +3 -3
- package/dist/types/components/select/Select.d.ts.map +1 -1
- package/dist/types/components/this/This.d.ts +1 -1
- package/dist/types/components/this/This.d.ts.map +1 -1
- package/dist/types/components/timer/Timer.d.ts +1 -1
- package/dist/types/components/timer/Timer.d.ts.map +1 -1
- package/dist/types/events/EventManager.d.ts +8 -0
- package/dist/types/events/EventManager.d.ts.map +1 -1
- package/dist/types/index.d.ts +0 -101
- package/dist/types/lifecycle/OnInitRender.d.ts +1 -1
- package/dist/types/lifecycle/OnInitRender.d.ts.map +1 -1
- package/dist/types/operators/DrForOf.d.ts.map +1 -1
- package/dist/types/operators/DrInnerText.d.ts.map +1 -1
- package/dist/types/rawsets/RawSet.d.ts +6 -5
- package/dist/types/rawsets/RawSet.d.ts.map +1 -1
- package/dist/types/routers/PathRouter.d.ts.map +1 -1
- package/dist/types/routers/Router.d.ts +9 -11
- package/dist/types/routers/Router.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-render.umd.js +1850 -319
- package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
- package/package.json +7 -7
- package/src/DomRenderProxy.ts +258 -137
- package/src/components/ComponentBase.ts +4 -4
- package/src/components/appender/Appender.ts +0 -5
- package/src/components/checkbox/CheckBox.ts +22 -25
- package/src/components/choose/Choose.ts +16 -19
- package/src/components/details/Details.ts +40 -43
- package/src/components/forOf/ForOf.ts +6 -9
- package/src/components/if/If.ts +9 -11
- package/src/components/input/Input.ts +16 -22
- package/src/components/promise/PromiseSwitch.ts +67 -66
- package/src/components/radio/Radio.ts +23 -28
- package/src/components/router/Route.ts +10 -13
- package/src/components/router/RouterOutlet.ts +5 -4
- package/src/components/select/Select.ts +7 -7
- package/src/components/this/This.ts +13 -12
- package/src/components/timer/Timer.ts +12 -16
- package/src/events/EventManager.ts +15 -4
- package/src/lifecycle/OnInitRender.ts +1 -1
- package/src/node_modules/.bin/acorn +17 -0
- package/src/node_modules/.bin/browserslist +17 -0
- package/src/node_modules/.bin/eslint +17 -0
- package/src/node_modules/.bin/sbf +17 -0
- package/src/node_modules/.bin/ts-node +17 -0
- package/src/node_modules/.bin/ts-node-cwd +17 -0
- package/src/node_modules/.bin/ts-node-dev +17 -0
- package/src/node_modules/.bin/ts-node-esm +17 -0
- package/src/node_modules/.bin/ts-node-script +17 -0
- package/src/node_modules/.bin/ts-node-transpile-only +17 -0
- package/src/node_modules/.bin/ts-script +17 -0
- package/src/node_modules/.bin/tsc +17 -0
- package/src/node_modules/.bin/tsnd +17 -0
- package/src/node_modules/.bin/tsserver +17 -0
- package/src/node_modules/.bin/webpack +17 -0
- package/src/node_modules/.bin/webpack-cli +17 -0
- package/src/node_modules/.bin/webpack-dev-server +17 -0
- package/src/operators/DrForOf.ts +25 -10
- package/src/operators/DrIf.ts +1 -1
- package/src/operators/DrInnerText.ts +2 -1
- package/src/rawsets/RawSet.ts +387 -288
- package/src/routers/PathRouter.ts +14 -7
- package/src/routers/Router.ts +77 -48
- package/types.d.ts +0 -2873
package/src/rawsets/RawSet.ts
CHANGED
|
@@ -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
|
-
|
|
87
|
-
|
|
88
|
-
public static readonly
|
|
89
|
-
public static readonly
|
|
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
|
|
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,
|
|
213
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
369
|
-
|
|
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(
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
new
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
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(
|
|
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
|
-
|
|
650
|
-
// console.log('
|
|
651
|
-
//
|
|
652
|
-
//
|
|
653
|
-
//
|
|
654
|
-
|
|
655
|
-
//
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
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 (
|
|
663
|
-
|
|
664
|
-
// console.log('
|
|
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
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
//
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
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
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
}
|
|
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.
|
|
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
|
-
|
|
1488
|
-
|
|
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',
|
|
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.
|
|
1749
|
-
const innerHTMLName = element.getAttribute(RawSet.
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
1793
|
-
|
|
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 (
|
|
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,
|
|
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:
|
|
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;
|