@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.
- package/README.MD +1 -2
- package/dist/cjs/DomRenderProxy.js +89 -48
- package/dist/cjs/DomRenderProxy.js.map +2 -2
- package/dist/cjs/components/ComponentBase.js +47 -1
- package/dist/cjs/components/ComponentBase.js.map +2 -2
- package/dist/cjs/components/a/A.js +22 -0
- package/dist/cjs/components/a/A.js.map +2 -2
- package/dist/cjs/components/appender/Appender.js +21 -4
- package/dist/cjs/components/appender/Appender.js.map +2 -2
- package/dist/cjs/components/details/Details.js +5 -0
- package/dist/cjs/components/details/Details.js.map +2 -2
- package/dist/cjs/components/forOf/ForOf.js +2 -2
- package/dist/cjs/components/forOf/ForOf.js.map +1 -1
- package/dist/cjs/components/if/If.js +1 -1
- package/dist/cjs/components/if/If.js.map +2 -2
- package/dist/cjs/components/index.js +3 -1
- package/dist/cjs/components/index.js.map +3 -3
- package/dist/cjs/components/router/RouterOutlet.js +41 -10
- package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
- package/dist/cjs/components/select/Select.js +39 -1
- package/dist/cjs/components/select/Select.js.map +2 -2
- package/dist/cjs/components/this/This.js +33 -5
- package/dist/cjs/components/this/This.js.map +2 -2
- package/dist/cjs/decorators/DomRenderNoProxy.js +3 -9
- package/dist/cjs/decorators/DomRenderNoProxy.js.map +2 -2
- package/dist/cjs/events/EventManager.js +103 -37
- package/dist/cjs/events/EventManager.js.map +2 -2
- package/dist/cjs/lifecycle/OnChangeAttrRender.js.map +1 -1
- package/dist/cjs/lifecycle/OnChildRawSetRendered.js +26 -0
- package/dist/cjs/lifecycle/OnChildRawSetRendered.js.map +7 -0
- package/dist/cjs/lifecycle/OnRawSetRendered.js.map +2 -2
- package/dist/cjs/operators/Appender.js +8 -1
- package/dist/cjs/operators/Appender.js.map +2 -2
- package/dist/cjs/operators/Dr.js +2 -2
- package/dist/cjs/operators/Dr.js.map +2 -2
- package/dist/cjs/operators/DrAppender.js +2 -2
- package/dist/cjs/operators/DrAppender.js.map +2 -2
- package/dist/cjs/operators/DrFor.js +2 -2
- package/dist/cjs/operators/DrFor.js.map +2 -2
- package/dist/cjs/operators/DrForOf.js +34 -6
- package/dist/cjs/operators/DrForOf.js.map +2 -2
- package/dist/cjs/operators/DrForm.js +6 -6
- package/dist/cjs/operators/DrForm.js.map +2 -2
- package/dist/cjs/operators/DrInnerHTML.js +2 -2
- package/dist/cjs/operators/DrInnerHTML.js.map +2 -2
- package/dist/cjs/operators/DrRepeat.js +2 -2
- package/dist/cjs/operators/DrRepeat.js.map +2 -2
- package/dist/cjs/operators/DrStripElement.js +2 -2
- package/dist/cjs/operators/DrStripElement.js.map +2 -2
- package/dist/cjs/operators/DrTargetElement.js +14 -5
- package/dist/cjs/operators/DrTargetElement.js.map +2 -2
- package/dist/cjs/operators/DrTargetElementIsElement.js +2 -2
- package/dist/cjs/operators/DrTargetElementIsElement.js.map +2 -2
- package/dist/cjs/operators/DrThis.js +2 -2
- package/dist/cjs/operators/DrThis.js.map +2 -2
- package/dist/cjs/operators/DrThisProperty.js +2 -1
- package/dist/cjs/operators/DrThisProperty.js.map +2 -2
- package/dist/cjs/rawsets/RawSet.js +87 -160
- package/dist/cjs/rawsets/RawSet.js.map +2 -2
- package/dist/cjs/routers/HashRouter.js +3 -0
- package/dist/cjs/routers/HashRouter.js.map +2 -2
- package/dist/cjs/routers/PathRouter.js +3 -0
- package/dist/cjs/routers/PathRouter.js.map +2 -2
- package/dist/cjs/routers/Router.js +25 -21
- package/dist/cjs/routers/Router.js.map +2 -2
- package/dist/esm/DomRenderProxy.js +89 -48
- package/dist/esm/DomRenderProxy.js.map +2 -2
- package/dist/esm/components/ComponentBase.js +47 -1
- package/dist/esm/components/ComponentBase.js.map +2 -2
- package/dist/esm/components/a/A.js +22 -0
- package/dist/esm/components/a/A.js.map +2 -2
- package/dist/esm/components/appender/Appender.js +22 -5
- package/dist/esm/components/appender/Appender.js.map +2 -2
- package/dist/esm/components/details/Details.js +5 -0
- package/dist/esm/components/details/Details.js.map +2 -2
- package/dist/esm/components/forOf/ForOf.js +2 -2
- package/dist/esm/components/forOf/ForOf.js.map +1 -1
- package/dist/esm/components/if/If.js +1 -1
- package/dist/esm/components/if/If.js.map +2 -2
- package/dist/esm/components/index.js +3 -1
- package/dist/esm/components/index.js.map +2 -2
- package/dist/esm/components/router/RouterOutlet.js +41 -10
- package/dist/esm/components/router/RouterOutlet.js.map +2 -2
- package/dist/esm/components/select/Select.js +39 -1
- package/dist/esm/components/select/Select.js.map +2 -2
- package/dist/esm/components/this/This.js +33 -5
- package/dist/esm/components/this/This.js.map +2 -2
- package/dist/esm/decorators/DomRenderNoProxy.js +3 -9
- package/dist/esm/decorators/DomRenderNoProxy.js.map +2 -2
- package/dist/esm/events/EventManager.js +103 -37
- package/dist/esm/events/EventManager.js.map +2 -2
- package/dist/esm/lifecycle/OnChangeAttrRender.js.map +1 -1
- package/dist/esm/lifecycle/OnChildRawSetRendered.js +7 -0
- package/dist/esm/lifecycle/OnChildRawSetRendered.js.map +7 -0
- package/dist/esm/lifecycle/OnRawSetRendered.js.map +2 -2
- package/dist/esm/operators/Appender.js +8 -1
- package/dist/esm/operators/Appender.js.map +2 -2
- package/dist/esm/operators/Dr.js +2 -2
- package/dist/esm/operators/Dr.js.map +2 -2
- package/dist/esm/operators/DrAppender.js +2 -2
- package/dist/esm/operators/DrAppender.js.map +2 -2
- package/dist/esm/operators/DrFor.js +2 -2
- package/dist/esm/operators/DrFor.js.map +2 -2
- package/dist/esm/operators/DrForOf.js +34 -6
- package/dist/esm/operators/DrForOf.js.map +2 -2
- package/dist/esm/operators/DrForm.js +6 -6
- package/dist/esm/operators/DrForm.js.map +2 -2
- package/dist/esm/operators/DrInnerHTML.js +2 -2
- package/dist/esm/operators/DrInnerHTML.js.map +2 -2
- package/dist/esm/operators/DrRepeat.js +2 -2
- package/dist/esm/operators/DrRepeat.js.map +2 -2
- package/dist/esm/operators/DrStripElement.js +2 -2
- package/dist/esm/operators/DrStripElement.js.map +2 -2
- package/dist/esm/operators/DrTargetElement.js +14 -5
- package/dist/esm/operators/DrTargetElement.js.map +2 -2
- package/dist/esm/operators/DrTargetElementIsElement.js +2 -2
- package/dist/esm/operators/DrTargetElementIsElement.js.map +2 -2
- package/dist/esm/operators/DrThis.js +2 -2
- package/dist/esm/operators/DrThis.js.map +2 -2
- package/dist/esm/operators/DrThisProperty.js +2 -1
- package/dist/esm/operators/DrThisProperty.js.map +2 -2
- package/dist/esm/rawsets/RawSet.js +87 -160
- package/dist/esm/rawsets/RawSet.js.map +2 -2
- package/dist/esm/routers/HashRouter.js +3 -0
- package/dist/esm/routers/HashRouter.js.map +2 -2
- package/dist/esm/routers/PathRouter.js +3 -0
- package/dist/esm/routers/PathRouter.js.map +2 -2
- package/dist/esm/routers/Router.js +25 -21
- package/dist/esm/routers/Router.js.map +2 -2
- package/dist/esm-bundle/dooboostore-dom-render.esm.js +830 -1533
- package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
- package/dist/types/DomRenderProxy.d.ts.map +1 -1
- package/dist/types/components/ComponentBase.d.ts +12 -1
- package/dist/types/components/ComponentBase.d.ts.map +1 -1
- package/dist/types/components/a/A.d.ts +6 -0
- package/dist/types/components/a/A.d.ts.map +1 -1
- package/dist/types/components/appender/Appender.d.ts +1 -0
- package/dist/types/components/appender/Appender.d.ts.map +1 -1
- package/dist/types/components/details/Details.d.ts +2 -0
- package/dist/types/components/details/Details.d.ts.map +1 -1
- package/dist/types/components/forOf/ForOf.d.ts +1 -1
- package/dist/types/components/forOf/ForOf.d.ts.map +1 -1
- package/dist/types/components/if/If.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +1 -0
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/router/RouterOutlet.d.ts +6 -3
- package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
- package/dist/types/components/select/Select.d.ts +5 -3
- package/dist/types/components/select/Select.d.ts.map +1 -1
- package/dist/types/components/this/This.d.ts +5 -1
- package/dist/types/components/this/This.d.ts.map +1 -1
- package/dist/types/decorators/DomRenderNoProxy.d.ts.map +1 -1
- package/dist/types/events/EventManager.d.ts +1 -0
- package/dist/types/events/EventManager.d.ts.map +1 -1
- package/dist/types/lifecycle/OnChangeAttrRender.d.ts +1 -1
- package/dist/types/lifecycle/OnChangeAttrRender.d.ts.map +1 -1
- package/dist/types/lifecycle/OnChildRawSetRendered.d.ts +9 -0
- package/dist/types/lifecycle/OnChildRawSetRendered.d.ts.map +1 -0
- package/dist/types/lifecycle/OnRawSetRendered.d.ts +2 -0
- package/dist/types/lifecycle/OnRawSetRendered.d.ts.map +1 -1
- package/dist/types/operators/Appender.d.ts +1 -0
- package/dist/types/operators/Appender.d.ts.map +1 -1
- package/dist/types/operators/Dr.d.ts.map +1 -1
- package/dist/types/operators/DrAppender.d.ts.map +1 -1
- package/dist/types/operators/DrFor.d.ts.map +1 -1
- package/dist/types/operators/DrForOf.d.ts.map +1 -1
- package/dist/types/operators/DrForm.d.ts.map +1 -1
- package/dist/types/operators/DrInnerHTML.d.ts.map +1 -1
- package/dist/types/operators/DrRepeat.d.ts.map +1 -1
- package/dist/types/operators/DrStripElement.d.ts.map +1 -1
- package/dist/types/operators/DrTargetElement.d.ts.map +1 -1
- package/dist/types/operators/DrThisProperty.d.ts.map +1 -1
- package/dist/types/rawsets/RawSet.d.ts +4 -1
- package/dist/types/rawsets/RawSet.d.ts.map +1 -1
- package/dist/types/routers/HashRouter.d.ts +1 -0
- package/dist/types/routers/HashRouter.d.ts.map +1 -1
- package/dist/types/routers/PathRouter.d.ts +1 -0
- package/dist/types/routers/PathRouter.d.ts.map +1 -1
- package/dist/types/routers/Router.d.ts +3 -0
- package/dist/types/routers/Router.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-render.umd.js +830 -1533
- package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
- package/package.json +4 -4
- package/src/DomRenderProxy.ts +169 -75
- package/src/DomRenderProxy.ts_cache_back +1031 -0
- package/src/components/ComponentBase.ts +61 -5
- package/src/components/a/A.ts +25 -0
- package/src/components/appender/Appender.ts +3 -3
- package/src/components/details/Details.ts +7 -0
- package/src/components/forOf/ForOf.ts +2 -2
- package/src/components/if/If.ts +3 -2
- package/src/components/index.ts +3 -0
- package/src/components/router/RouterOutlet.ts +60 -22
- package/src/components/select/Select.ts +69 -30
- package/src/components/this/This.ts +41 -6
- package/src/decorators/DomRenderNoProxy.ts +17 -14
- package/src/events/EventManager.ts +180 -77
- package/src/lifecycle/OnChangeAttrRender.ts +1 -1
- package/src/lifecycle/OnChildRawSetRendered.ts +13 -0
- package/src/lifecycle/OnRawSetRendered.ts +3 -1
- package/src/operators/Appender.ts +8 -1
- package/src/operators/Dr.ts +2 -1
- package/src/operators/DrAppender.ts +2 -1
- package/src/operators/DrFor.ts +2 -1
- package/src/operators/DrForOf.ts +36 -6
- package/src/operators/DrForm.ts +6 -5
- package/src/operators/DrInnerHTML.ts +2 -1
- package/src/operators/DrRepeat.ts +2 -1
- package/src/operators/DrStripElement.ts +2 -1
- package/src/operators/DrTargetElement.ts +17 -5
- package/src/operators/DrTargetElementIsElement.ts +2 -2
- package/src/operators/DrThis.ts +2 -2
- package/src/operators/DrThisProperty.ts +2 -1
- package/src/rawsets/RawSet.ts +161 -237
- package/src/routers/HashRouter.ts +4 -0
- package/src/routers/PathRouter.ts +5 -0
- package/src/routers/Router.ts +64 -47
- package/src/node_modules/.bin/acorn +0 -17
- package/src/node_modules/.bin/browserslist +0 -17
- package/src/node_modules/.bin/eslint +0 -17
- package/src/node_modules/.bin/sbf +0 -17
- package/src/node_modules/.bin/ts-node +0 -17
- package/src/node_modules/.bin/ts-node-cwd +0 -17
- package/src/node_modules/.bin/ts-node-dev +0 -17
- package/src/node_modules/.bin/ts-node-esm +0 -17
- package/src/node_modules/.bin/ts-node-script +0 -17
- package/src/node_modules/.bin/ts-node-transpile-only +0 -17
- package/src/node_modules/.bin/ts-script +0 -17
- package/src/node_modules/.bin/tsc +0 -17
- package/src/node_modules/.bin/tsnd +0 -17
- package/src/node_modules/.bin/tsserver +0 -17
- package/src/node_modules/.bin/webpack +0 -17
- package/src/node_modules/.bin/webpack-cli +0 -17
- package/src/node_modules/.bin/webpack-dev-server +0 -17
package/src/rawsets/RawSet.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
),
|
|
413
|
-
new
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
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+)
|
|
831
|
-
|
|
832
|
-
|
|
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
|
|
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
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
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
|
-
|
|
917
|
-
//
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
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)??'');
|