@dooboostore/dom-render 1.0.108 → 1.0.109
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 +27 -1451
- package/dist/cjs/DomRender.js +41 -26
- package/dist/cjs/DomRender.js.map +2 -2
- package/dist/cjs/DomRenderProxy.js +12 -5
- package/dist/cjs/DomRenderProxy.js.map +2 -2
- package/dist/cjs/bundle-entry.js +32 -21
- package/dist/cjs/bundle-entry.js.map +2 -2
- package/dist/cjs/components/ComponentBase.js +20 -2
- package/dist/cjs/components/ComponentBase.js.map +2 -2
- package/dist/cjs/components/ComponentRouterBase.js +11 -1
- package/dist/cjs/components/ComponentRouterBase.js.map +2 -2
- package/dist/cjs/components/choose/Choose.js +4 -0
- package/dist/cjs/components/choose/Choose.js.map +2 -2
- package/dist/cjs/components/router/RouterOutlet.js +15 -1
- package/dist/cjs/components/router/RouterOutlet.js.map +2 -2
- package/dist/cjs/components/select/Select.js +20 -6
- package/dist/cjs/components/select/Select.js.map +2 -2
- package/dist/cjs/components/timer/Timer.js +14 -11
- package/dist/cjs/components/timer/Timer.js.map +2 -2
- package/dist/cjs/decorators/DomRenderNoProxy.js +2 -1
- package/dist/cjs/decorators/DomRenderNoProxy.js.map +2 -2
- package/dist/cjs/lifecycle/OnRawSetRendered.js +26 -0
- package/dist/cjs/lifecycle/OnRawSetRendered.js.map +7 -0
- package/dist/cjs/lifecycle/index.js +1 -0
- package/dist/cjs/lifecycle/index.js.map +2 -2
- package/dist/cjs/operators/DrTargetElement.js +2 -0
- package/dist/cjs/operators/DrTargetElement.js.map +2 -2
- package/dist/cjs/operators/OperatorExecuter.js +1 -2
- package/dist/cjs/operators/OperatorExecuter.js.map +2 -2
- package/dist/cjs/package.json +5 -0
- package/dist/cjs/rawsets/RawSet.js +154 -74
- package/dist/cjs/rawsets/RawSet.js.map +3 -3
- package/dist/cjs/rawsets/Render.js.map +1 -1
- package/dist/cjs/routers/Router.js +31 -15
- package/dist/cjs/routers/Router.js.map +3 -3
- package/dist/esm/DomRender.js +41 -26
- package/dist/esm/DomRender.js.map +2 -2
- package/dist/esm/DomRenderProxy.js +12 -5
- package/dist/esm/DomRenderProxy.js.map +2 -2
- package/dist/esm/bundle-entry.js +22 -21
- package/dist/esm/bundle-entry.js.map +2 -2
- package/dist/esm/components/ComponentBase.js +20 -2
- package/dist/esm/components/ComponentBase.js.map +2 -2
- package/dist/esm/components/ComponentRouterBase.js +11 -1
- package/dist/esm/components/ComponentRouterBase.js.map +2 -2
- package/dist/esm/components/choose/Choose.js +4 -0
- package/dist/esm/components/choose/Choose.js.map +2 -2
- package/dist/esm/components/router/RouterOutlet.js +16 -2
- package/dist/esm/components/router/RouterOutlet.js.map +2 -2
- package/dist/esm/components/select/Select.js +20 -6
- package/dist/esm/components/select/Select.js.map +2 -2
- package/dist/esm/components/timer/Timer.js +14 -11
- package/dist/esm/components/timer/Timer.js.map +2 -2
- package/dist/esm/decorators/DomRenderNoProxy.js +2 -1
- package/dist/esm/decorators/DomRenderNoProxy.js.map +2 -2
- package/dist/esm/lifecycle/OnRawSetRendered.js +7 -0
- package/dist/esm/lifecycle/OnRawSetRendered.js.map +7 -0
- package/dist/esm/lifecycle/index.js +1 -0
- package/dist/esm/lifecycle/index.js.map +2 -2
- package/dist/esm/operators/DrTargetElement.js +2 -0
- package/dist/esm/operators/DrTargetElement.js.map +2 -2
- package/dist/esm/operators/OperatorExecuter.js +1 -2
- package/dist/esm/operators/OperatorExecuter.js.map +2 -2
- package/dist/esm/rawsets/RawSet.js +154 -74
- package/dist/esm/rawsets/RawSet.js.map +3 -3
- package/dist/esm/routers/Router.js +31 -15
- package/dist/esm/routers/Router.js.map +3 -3
- package/dist/esm-bundle/dooboostore-dom-render.esm.js +12586 -6496
- package/dist/esm-bundle/dooboostore-dom-render.esm.js.map +4 -4
- package/dist/types/DomRender.d.ts +11 -5
- package/dist/types/DomRender.d.ts.map +1 -1
- package/dist/types/DomRenderProxy.d.ts.map +1 -1
- package/dist/types/bundle-entry.d.ts +5 -2
- package/dist/types/bundle-entry.d.ts.map +1 -1
- package/dist/types/components/ComponentBase.d.ts +7 -1
- package/dist/types/components/ComponentBase.d.ts.map +1 -1
- package/dist/types/components/ComponentRouterBase.d.ts +8 -0
- package/dist/types/components/ComponentRouterBase.d.ts.map +1 -1
- package/dist/types/components/choose/Choose.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +2 -1
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/router/RouterOutlet.d.ts +5 -1
- package/dist/types/components/router/RouterOutlet.d.ts.map +1 -1
- package/dist/types/components/select/Select.d.ts +2 -2
- package/dist/types/components/select/Select.d.ts.map +1 -1
- package/dist/types/components/timer/Timer.d.ts +5 -3
- package/dist/types/components/timer/Timer.d.ts.map +1 -1
- package/dist/types/decorators/DomRenderNoProxy.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/lifecycle/OnRawSetRendered.d.ts +10 -0
- package/dist/types/lifecycle/OnRawSetRendered.d.ts.map +1 -0
- package/dist/types/lifecycle/index.d.ts +1 -0
- package/dist/types/lifecycle/index.d.ts.map +1 -1
- package/dist/types/operators/DrTargetElement.d.ts.map +1 -1
- package/dist/types/operators/OperatorExecuter.d.ts.map +1 -1
- package/dist/types/rawsets/RawSet.d.ts +11 -4
- package/dist/types/rawsets/RawSet.d.ts.map +1 -1
- package/dist/types/rawsets/Render.d.ts +1 -0
- package/dist/types/rawsets/Render.d.ts.map +1 -1
- package/dist/types/routers/Router.d.ts +2 -3
- package/dist/types/routers/Router.d.ts.map +1 -1
- package/dist/umd-bundle/dooboostore-dom-render.umd.js +12600 -6529
- package/dist/umd-bundle/dooboostore-dom-render.umd.js.map +4 -4
- package/package.json +6 -5
- package/src/DomRender.ts +62 -34
- package/src/DomRenderProxy.ts +20 -8
- package/src/bundle-entry.ts +5 -3
- package/src/components/ComponentBase.ts +29 -7
- package/src/components/ComponentRouterBase.ts +17 -2
- package/src/components/choose/Choose.ts +4 -0
- package/src/components/router/RouterOutlet.ts +25 -5
- package/src/components/select/Select.ts +40 -26
- package/src/components/timer/Timer.ts +19 -51
- package/src/decorators/DomRenderNoProxy.ts +3 -1
- package/src/lifecycle/OnRawSetRendered.ts +15 -0
- package/src/lifecycle/index.ts +1 -0
- package/src/operators/DrTargetElement.ts +14 -0
- package/src/operators/OperatorExecuter.ts +1 -2
- package/src/rawsets/RawSet.ts +572 -257
- package/src/rawsets/Render.ts +1 -0
- package/src/routers/Router.ts +40 -23
- package/types.d.ts +68 -20
package/src/rawsets/RawSet.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { RandomUtils } from '@dooboostore/core/random/RandomUtils';
|
|
2
2
|
import { StringUtils } from '@dooboostore/core/string/StringUtils';
|
|
3
|
-
import { ScriptUtils } from '@dooboostore/core-web/script/ScriptUtils';
|
|
4
3
|
import { EventManager } from '../events/EventManager';
|
|
5
4
|
import type { DomRenderConfig } from '../configs/DomRenderConfig';
|
|
6
5
|
import { Range } from '../iterators/Range';
|
|
@@ -9,7 +8,7 @@ import { ComponentSet } from '../components/ComponentSet';
|
|
|
9
8
|
import { DrPre } from '../operators/DrPre';
|
|
10
9
|
import { Dr } from '../operators/Dr';
|
|
11
10
|
import { DrIf } from '../operators/DrIf';
|
|
12
|
-
import { ExecuteState } from '../operators/OperatorExecuter';
|
|
11
|
+
import { ExecuteState, OperatorExecuter } from '../operators/OperatorExecuter';
|
|
13
12
|
import { DrThis } from '../operators/DrThis';
|
|
14
13
|
import { DrForm } from '../operators/DrForm';
|
|
15
14
|
import { DrInnerText } from '../operators/DrInnerText';
|
|
@@ -40,8 +39,11 @@ import { isOnCreatedThisChild } from '../lifecycle/OnCreatedThisChild';
|
|
|
40
39
|
import { isOnDestroyRender, OnDestroyRenderParams } from '../lifecycle/OnDestroyRender';
|
|
41
40
|
import { DrTargetElementIsElement } from '../operators/DrTargetElementIsElement';
|
|
42
41
|
import { ObjectUtils } from '@dooboostore/core/object/ObjectUtils';
|
|
42
|
+
import { NodeUtils } from '@dooboostore/core-web/node/NodeUtils';
|
|
43
43
|
|
|
44
44
|
|
|
45
|
+
export type RenderResult = { raws: RawSet[]; executedOperators: OperatorExecuter[] };
|
|
46
|
+
|
|
45
47
|
export class RawSet {
|
|
46
48
|
public static readonly DR_NAME = 'dr';
|
|
47
49
|
public static readonly DR_IF_NAME = 'dr-if';
|
|
@@ -64,7 +66,6 @@ export class RawSet {
|
|
|
64
66
|
public static readonly DR_DETECT_FILTER_OPTIONNAME = 'dr-detect-option-filter';
|
|
65
67
|
public static readonly DR_DETECT_ATTR_OPTIONNAME = 'dr-detect-option-attr';
|
|
66
68
|
|
|
67
|
-
|
|
68
69
|
/**
|
|
69
70
|
* @deprecated
|
|
70
71
|
*/
|
|
@@ -146,27 +147,28 @@ export class RawSet {
|
|
|
146
147
|
RawSet.DR_INNERTEXT_NAME,
|
|
147
148
|
RawSet.DR_REPEAT_NAME,
|
|
148
149
|
RawSet.DR_DETECT_NAME,
|
|
149
|
-
RawSet.DR_STRIP_NAME
|
|
150
|
+
RawSet.DR_STRIP_NAME
|
|
150
151
|
] as const;
|
|
151
152
|
|
|
152
153
|
constructor(
|
|
153
154
|
public uuid: string,
|
|
154
155
|
public type: RawSetType,
|
|
155
156
|
public point: {
|
|
156
|
-
start:
|
|
157
|
-
node: Node
|
|
158
|
-
end: Comment | Text | HTMLMetaElement
|
|
157
|
+
start: Comment | Text | HTMLMetaElement;
|
|
158
|
+
node: Node;
|
|
159
|
+
end: Comment | Text | HTMLMetaElement;
|
|
160
|
+
innerHTML?: string;
|
|
159
161
|
// thisVariableName?: string | null,
|
|
160
|
-
parent?: Node | null
|
|
161
|
-
parentRawSet?: RawSet
|
|
162
|
-
childrenRawSets?: RawSet[]
|
|
162
|
+
parent?: Node | null;
|
|
163
|
+
parentRawSet?: RawSet;
|
|
164
|
+
childrenRawSets?: RawSet[];
|
|
163
165
|
},
|
|
164
166
|
public dataSet: {
|
|
165
167
|
config: DomRenderConfig;
|
|
166
|
-
fragment: DocumentFragment
|
|
168
|
+
fragment: DocumentFragment;
|
|
167
169
|
render?: Render;
|
|
168
170
|
},
|
|
169
|
-
public detect?: { action: Function }
|
|
171
|
+
public detect?: { action: Function }
|
|
170
172
|
) {
|
|
171
173
|
// point.start.rawSet = this;
|
|
172
174
|
// console.log('rawset constructor->', (this.point.node as Element).getAttributeNames());
|
|
@@ -174,7 +176,7 @@ export class RawSet {
|
|
|
174
176
|
|
|
175
177
|
get isConnected() {
|
|
176
178
|
// console.log('isConnect???', this, this.point.start.isConnected, this.point.end.isConnected);
|
|
177
|
-
return this.point.start.isConnected && this.point.end.isConnected;
|
|
179
|
+
return this.point && this.point.start && this.point.end && this.point.start.isConnected && this.point.end.isConnected;
|
|
178
180
|
}
|
|
179
181
|
|
|
180
182
|
// 중요
|
|
@@ -186,17 +188,24 @@ export class RawSet {
|
|
|
186
188
|
let script = '';
|
|
187
189
|
if (cNode.nodeType === Node.TEXT_NODE) {
|
|
188
190
|
script = `\`${(cNode as Text).textContent ?? ''}\``;
|
|
189
|
-
const expressionGroups = RawSet.expressionGroups(script)
|
|
191
|
+
const expressionGroups = RawSet.expressionGroups(script);
|
|
190
192
|
// console.log('???????', script, expressionGroups)
|
|
191
|
-
if (expressionGroups[0].length >1) {
|
|
193
|
+
if (expressionGroups[0].length > 1) {
|
|
192
194
|
script = expressionGroups[0][1] as string;
|
|
193
195
|
}
|
|
194
196
|
// console.log('--', expressionGroups, script)
|
|
195
197
|
} else if (cNode.nodeType === Node.ELEMENT_NODE) {
|
|
196
198
|
const element = cNode as Element;
|
|
197
|
-
const targetAttrNames = (config?.targetAttrs?.map(it => it.name) ?? [])
|
|
198
|
-
|
|
199
|
-
|
|
199
|
+
const targetAttrNames = (config?.targetAttrs?.map(it => it.name) ?? []).concat(
|
|
200
|
+
RawSet.DR_ATTRIBUTES,
|
|
201
|
+
RawSet.DR_DETECT_FILTER_OPTIONNAME,
|
|
202
|
+
RawSet.DR_DETECT_IF_OPTIONNAME,
|
|
203
|
+
RawSet.DR_DETECT_ATTR_OPTIONNAME
|
|
204
|
+
); // .concat(EventManager.normalAttrMapAttrName);
|
|
205
|
+
const targetScripts = targetAttrNames
|
|
206
|
+
.map(it => element.getAttribute(it))
|
|
207
|
+
.filter(it => it)
|
|
208
|
+
.map(it => `(${it})`);
|
|
200
209
|
const targetAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);
|
|
201
210
|
// console.log('targetAttrMap-->', targetAttrMap)
|
|
202
211
|
if (targetAttrMap) {
|
|
@@ -218,7 +227,6 @@ export class RawSet {
|
|
|
218
227
|
// script += ';' + otherAttrs
|
|
219
228
|
}
|
|
220
229
|
if (script) {
|
|
221
|
-
|
|
222
230
|
// console.log('------1-',script)
|
|
223
231
|
script = script.replace(/#[^#]*#/g, '({})');
|
|
224
232
|
// console.log('------2-',script)
|
|
@@ -237,7 +245,9 @@ export class RawSet {
|
|
|
237
245
|
// script = script.replaceAll('#{','${').replaceAll('}#', '}')
|
|
238
246
|
// console.log('--------2--', script);
|
|
239
247
|
// TODO: 훔.. 꼭필요한가..? 트리거될때 스크립트변수 까지 감지해야될까?
|
|
240
|
-
Array.from(ObjectUtils.Path.detectPathFromScript(script,{excludeThis: true
|
|
248
|
+
Array.from(ObjectUtils.Path.detectPathFromScript(script, { excludeThis: true }))
|
|
249
|
+
.filter(it => !it.startsWith(`___${EventManager.SCRIPTS_VARNAME}`))
|
|
250
|
+
.forEach(it => usingTriggerVariables.add(it));
|
|
241
251
|
}
|
|
242
252
|
});
|
|
243
253
|
// console.log('usingTriggerVariable----------->', usingTriggerVariables)
|
|
@@ -245,7 +255,9 @@ export class RawSet {
|
|
|
245
255
|
}
|
|
246
256
|
|
|
247
257
|
// 중요 render 처리 부분
|
|
248
|
-
public async render(obj: any, config: DomRenderConfig): Promise<RawSet[]> {
|
|
258
|
+
// public async render(obj: any, config: DomRenderConfig): Promise<RawSet[]> {
|
|
259
|
+
// }
|
|
260
|
+
public async render(obj: any, config: DomRenderConfig): Promise<RenderResult> {
|
|
249
261
|
// console.log('render!!!!!!!!!!!!!!')
|
|
250
262
|
const genNode = config.window.document.importNode(this.dataSet.fragment, true);
|
|
251
263
|
const raws: RawSet[] = [];
|
|
@@ -254,6 +266,7 @@ export class RawSet {
|
|
|
254
266
|
const onThisComponentSetCallBacks: ComponentSet[] = [];
|
|
255
267
|
const drAttrs: Attrs[] = [];
|
|
256
268
|
// console.log('rawSet render!!', obj, config, this, Array.from(genNode.childNodes.values()));
|
|
269
|
+
const executedOperators: OperatorExecuter[] = [];
|
|
257
270
|
for (const cNode of Array.from(genNode.childNodes.values())) {
|
|
258
271
|
// console.log('cNodecNodecNode', cNode);
|
|
259
272
|
let attribute = {};
|
|
@@ -269,7 +282,7 @@ export class RawSet {
|
|
|
269
282
|
element: cNode,
|
|
270
283
|
attribute: attribute,
|
|
271
284
|
rootObject: obj,
|
|
272
|
-
scriptUtils:
|
|
285
|
+
scriptUtils: ObjectUtils.Script,
|
|
273
286
|
nearThis: this.findNearThis(obj),
|
|
274
287
|
parentThis: this.findParentThis(obj),
|
|
275
288
|
bindScript: ` /** render **/
|
|
@@ -286,7 +299,6 @@ export class RawSet {
|
|
|
286
299
|
`
|
|
287
300
|
}) as unknown as Render;
|
|
288
301
|
|
|
289
|
-
|
|
290
302
|
// const normalAttribute = attribute[EventManager.normalAttrMapAttrName];
|
|
291
303
|
// if (normalAttribute) {
|
|
292
304
|
// new Map<string, string>(JSON.parse(normalAttribute)).forEach((v, k) => {
|
|
@@ -296,7 +308,6 @@ export class RawSet {
|
|
|
296
308
|
// });
|
|
297
309
|
// }
|
|
298
310
|
|
|
299
|
-
|
|
300
311
|
const fag = config.window.document.createDocumentFragment();
|
|
301
312
|
if (cNode.nodeType === Node.TEXT_NODE && cNode.textContent) {
|
|
302
313
|
// console.log('text-->', this, obj, config, cNode.textContent);
|
|
@@ -306,12 +317,12 @@ export class RawSet {
|
|
|
306
317
|
// console.log('--->', RawSet.exporesionGrouops(textContent), textContent,runText, runText[0][1])
|
|
307
318
|
let newNode: Node;
|
|
308
319
|
if (textContent?.startsWith('#')) {
|
|
309
|
-
const r =
|
|
320
|
+
const r = ObjectUtils.Script.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, { __render }));
|
|
310
321
|
const template = config.window.document.createElement('template') as HTMLTemplateElement;
|
|
311
322
|
template.innerHTML = r;
|
|
312
323
|
newNode = template.content;
|
|
313
324
|
} else {
|
|
314
|
-
const r =
|
|
325
|
+
const r = ObjectUtils.Script.evaluate(`${__render.bindScript} return ${runText}`, Object.assign(obj, { __render }));
|
|
315
326
|
newNode = config.window.document.createTextNode(r);
|
|
316
327
|
}
|
|
317
328
|
cNode.parentNode?.replaceChild(newNode, cNode);
|
|
@@ -323,7 +334,7 @@ export class RawSet {
|
|
|
323
334
|
} else if (cNode.nodeType === Node.ELEMENT_NODE) {
|
|
324
335
|
const element = cNode as Element;
|
|
325
336
|
// console.log('target-->', element)
|
|
326
|
-
const drAttr:Attrs = {
|
|
337
|
+
const drAttr: Attrs = {
|
|
327
338
|
dr: this.getAttributeAndDelete(element, RawSet.DR_NAME),
|
|
328
339
|
drIf: this.getAttributeAndDelete(element, RawSet.DR_IF_NAME),
|
|
329
340
|
drFor: this.getAttributeAndDelete(element, RawSet.DR_FOR_NAME),
|
|
@@ -349,36 +360,37 @@ export class RawSet {
|
|
|
349
360
|
drDestroyOption: this.getAttributeAndDelete(element, RawSet.DR_DESTROY_OPTIONNAME),
|
|
350
361
|
drKeyOption: this.getAttributeAndDelete(element, RawSet.DR_KEY_OPTIONNAME),
|
|
351
362
|
drDetectIfOption: this.getAttribute(element, RawSet.DR_DETECT_IF_OPTIONNAME),
|
|
352
|
-
drHasKeysOption: this.getAttribute(element, RawSet.DR_HAS_KEYS_OPTIONNAME)
|
|
363
|
+
drHasKeysOption: this.getAttribute(element, RawSet.DR_HAS_KEYS_OPTIONNAME)
|
|
353
364
|
};
|
|
354
365
|
drAttrs.push(drAttr);
|
|
355
366
|
// 아래 순서 중요
|
|
356
367
|
const operators = [
|
|
357
|
-
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}),
|
|
358
|
-
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}),
|
|
368
|
+
new DrPre( this, __render, { raws, fag }, { element, attrName: RawSet.DR_PRE_NAME, attr: drAttr.drPre, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drPre }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
369
|
+
new Dr( this, __render, { raws, fag }, { element, attrName: RawSet.DR_NAME, attr: drAttr.dr, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.dr }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
359
370
|
// new Dr(this, __render, {raws, fag}, {element, attrName: EventManager.onRenderedInitAttrName, attr: drAttr.dr, attrs: drAttr}, {config, obj, operatorAround: config.operatorAround?.dr}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
|
|
360
|
-
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}),
|
|
361
|
-
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}),
|
|
362
|
-
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}),
|
|
363
|
-
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}),
|
|
364
|
-
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}),
|
|
365
|
-
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}),
|
|
366
|
-
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}),
|
|
367
|
-
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}),
|
|
368
|
-
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}),
|
|
369
|
-
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}),
|
|
370
|
-
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}),
|
|
371
|
-
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}),
|
|
372
|
-
new DrTargetElement(this, __render, {raws, fag}, {element, attrs: drAttr}, {config, obj}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks}),
|
|
373
|
-
new DrTargetAttr(this, __render, {raws, fag}, {element, attrs: drAttr}, {config, obj}, {onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks})
|
|
371
|
+
new DrIf( this, __render, { raws, fag }, { element, attrName: RawSet.DR_IF_NAME, attr: drAttr.drIf, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drIf }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
372
|
+
new DrStripElement( this, __render, { raws, fag }, { element, attrName: RawSet.DR_STRIP_NAME, attr: drAttr.drStripElement, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThis }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
373
|
+
new DrThis( this, __render, { raws, fag }, { element, attrName: RawSet.DR_THIS_NAME, attr: drAttr.drThis, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThis }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
374
|
+
new DrForm( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drForm, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drForm }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
375
|
+
new DrInnerText( this, __render, { raws, fag }, { element, attrName: RawSet.DR_INNERTEXT_NAME, attr: drAttr.drInnerText, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drInnerText }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
376
|
+
new DrInnerHTML( this, __render, { raws, fag }, { element, attrName: RawSet.DR_INNERHTML_NAME, attr: drAttr.drInnerHTML, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drInnerHTML }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
377
|
+
new DrFor( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_NAME, attr: drAttr.drFor, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drFor }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
378
|
+
new DrForOf( this, __render, { raws, fag }, { element, attrName: RawSet.DR_FOR_OF_NAME, attr: drAttr.drForOf, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drForOf }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
379
|
+
new DrThisProperty( this, __render, { raws, fag }, { element, attrName: RawSet.DR_THIS_PROPERTY_NAME, attr: drAttr.drThisProperty, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drThisProperty }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
380
|
+
new DrAppender( this, __render, { raws, fag }, { element, attrName: RawSet.DR_APPENDER_NAME, attr: drAttr.drAppender, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drAppender }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
381
|
+
new DrRepeat( this, __render, { raws, fag }, { element, attrName: RawSet.DR_REPEAT_NAME, attr: drAttr.drRepeat, attrs: drAttr }, { config, obj, operatorAround: config.operatorAround?.drRepeat }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
382
|
+
new DrTargetElementIsElement( this, __render, { raws, fag }, { element, attrName: RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME, attr: drAttr.drReplaceTargetElementIs, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
383
|
+
new DrTargetElement( this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } ),
|
|
384
|
+
new DrTargetAttr( this, __render, { raws, fag }, { element, attrs: drAttr }, { config, obj }, { onAttrInitCallBacks, onElementInitCallBacks, onThisComponentSetCallBacks } )
|
|
374
385
|
];
|
|
375
386
|
|
|
376
387
|
for (const operator of operators) {
|
|
377
388
|
const state = await operator.start();
|
|
378
389
|
if (state === ExecuteState.EXECUTE) {
|
|
390
|
+
executedOperators.push(operator);
|
|
379
391
|
break;
|
|
380
392
|
} else if (state === ExecuteState.STOP) {
|
|
381
|
-
return raws;
|
|
393
|
+
return { raws, executedOperators };
|
|
382
394
|
}
|
|
383
395
|
}
|
|
384
396
|
}
|
|
@@ -391,12 +403,11 @@ export class RawSet {
|
|
|
391
403
|
|
|
392
404
|
// console.log('pppppppppppppp', this);
|
|
393
405
|
|
|
394
|
-
|
|
395
406
|
// replaceBody와 applyEvent 순서를 바꿨다 20250511
|
|
396
407
|
const childrenNodes = Array.from(genNode.childNodes);
|
|
397
408
|
this.applyEvent(obj, genNode, config);
|
|
398
409
|
this.replaceBody(genNode); // 중요 여기서 마지막에 연션된 값을 그려준다.
|
|
399
|
-
// console.log('rawSEt!!!!!!!', obj,
|
|
410
|
+
// console.log('rawSEt!!!!!!!', obj, this.near)
|
|
400
411
|
// console.log('rawSEt!!!!!!!', obj, this.findNearThis(obj),childrenNodes,config)
|
|
401
412
|
// console.log('rawSEt!!!!!!!', obj, drAttrs)
|
|
402
413
|
this.onRenderedEvent(obj, childrenNodes, config);
|
|
@@ -409,15 +420,17 @@ export class RawSet {
|
|
|
409
420
|
fag: genNode,
|
|
410
421
|
scripts: EventManager.setBindProperty(config?.scripts, obj)
|
|
411
422
|
} as Render);
|
|
412
|
-
|
|
423
|
+
ObjectUtils.Script.evaluate(
|
|
424
|
+
`
|
|
413
425
|
const ${EventManager.FAG_VARNAME} = this.__render.fag;
|
|
414
426
|
const ${EventManager.SCRIPTS_VARNAME} = this.__render.scripts;
|
|
415
427
|
const ${EventManager.RAWSET_VARNAME} = this.__render.rawSet;
|
|
416
|
-
${it.drCompleteOption}`,
|
|
428
|
+
${it.drCompleteOption}`,
|
|
429
|
+
Object.assign(obj, { __render: render })
|
|
430
|
+
);
|
|
417
431
|
}
|
|
418
432
|
});
|
|
419
433
|
|
|
420
|
-
|
|
421
434
|
// 중요 style isolation 나중에 :scope로 대체 가능할듯.
|
|
422
435
|
// 2023.9.4일 없앰 style 처음들어올때 처리하는걸로 바꿈
|
|
423
436
|
// RawSet.generateStyleSheetsLocal(config);
|
|
@@ -455,7 +468,6 @@ export class RawSet {
|
|
|
455
468
|
this.dataSet.render.currentThis.onInitRender({}, this);
|
|
456
469
|
}
|
|
457
470
|
|
|
458
|
-
|
|
459
471
|
config?.onElementInit?.(it.name, obj, this, it.targetElement);
|
|
460
472
|
}
|
|
461
473
|
|
|
@@ -471,16 +483,15 @@ export class RawSet {
|
|
|
471
483
|
const drAttrs: Attrs | undefined = rawSet?.dataSet.render?.attribute;
|
|
472
484
|
if (rawSet && !rawSet.isConnected) {
|
|
473
485
|
const destroyOptions = drAttrs?.drDestroyOption?.split(',') ?? [];
|
|
474
|
-
RawSet.destroy(obj.__domrender_components[key], {rawSet: rawSet}, config, destroyOptions);
|
|
486
|
+
RawSet.destroy(obj.__domrender_components[key], { rawSet: rawSet }, config, destroyOptions);
|
|
475
487
|
delete obj.__domrender_components[key];
|
|
476
488
|
}
|
|
477
489
|
});
|
|
478
490
|
}
|
|
479
491
|
// console.log('-------raws',raws)
|
|
480
|
-
return raws;
|
|
492
|
+
return { raws: raws, executedOperators: executedOperators };
|
|
481
493
|
}
|
|
482
494
|
|
|
483
|
-
|
|
484
495
|
// 중요 스타일 적용 부분
|
|
485
496
|
private static generateRuleSelector(start: string, end: string, sit: string) {
|
|
486
497
|
const selectorText = `:is(${start} ~ *:not(${start} ~ ${end} ~ *))`;
|
|
@@ -517,30 +528,26 @@ export class RawSet {
|
|
|
517
528
|
// const before = styleBody;
|
|
518
529
|
// console.log('before@@@@@@@@@@@', before)
|
|
519
530
|
const cssParser = new CssParser(styleBody);
|
|
520
|
-
|
|
531
|
+
|
|
521
532
|
const processRule = (rule: CssRule) => {
|
|
522
533
|
if (isStyleRule(rule)) {
|
|
523
534
|
const isRoot = rule.selector.includes(':root');
|
|
524
535
|
if (!isRoot) {
|
|
525
536
|
// Handle comma-separated selectors
|
|
526
537
|
const selectors = rule.selector.split(',').map(s => s.trim());
|
|
527
|
-
const transformedSelectors = selectors.map(selector =>
|
|
528
|
-
this.generateRuleSelector(start, end, selector)
|
|
529
|
-
);
|
|
538
|
+
const transformedSelectors = selectors.map(selector => this.generateRuleSelector(start, end, selector));
|
|
530
539
|
rule.selector = transformedSelectors.join(', ');
|
|
531
540
|
}
|
|
532
541
|
} else if (isAtRule(rule)) {
|
|
533
542
|
if (rule.name === 'media') {
|
|
534
|
-
const hasRoot = rule.children.some(
|
|
535
|
-
isStyleRule(childRule) && childRule.selector.includes(':root')
|
|
543
|
+
const hasRoot = rule.children.some(
|
|
544
|
+
childRule => isStyleRule(childRule) && childRule.selector.includes(':root')
|
|
536
545
|
);
|
|
537
546
|
if (!hasRoot) {
|
|
538
547
|
rule.children.forEach(childRule => {
|
|
539
548
|
if (isStyleRule(childRule)) {
|
|
540
549
|
const selectors = childRule.selector.split(',').map(s => s.trim());
|
|
541
|
-
const transformedSelectors = selectors.map(selector =>
|
|
542
|
-
this.generateRuleSelector(start, end, selector)
|
|
543
|
-
);
|
|
550
|
+
const transformedSelectors = selectors.map(selector => this.generateRuleSelector(start, end, selector));
|
|
544
551
|
childRule.selector = transformedSelectors.join(', ');
|
|
545
552
|
}
|
|
546
553
|
});
|
|
@@ -550,7 +557,7 @@ export class RawSet {
|
|
|
550
557
|
};
|
|
551
558
|
|
|
552
559
|
cssParser.rules.forEach(processRule);
|
|
553
|
-
|
|
560
|
+
|
|
554
561
|
let after = cssParser.stringify();
|
|
555
562
|
// let after = StringUtils.regexExecArrayReplace(stringify as string, /(var\(--domrender-(\$\{.*?\}\$)?\))/g, (data) => {
|
|
556
563
|
// return data[2];
|
|
@@ -558,9 +565,8 @@ export class RawSet {
|
|
|
558
565
|
// console.log('after@@@@@@@@@@@', after)
|
|
559
566
|
|
|
560
567
|
// 여기서 선언 selector 자체에도 처리가능하도록 한다 20250518
|
|
561
|
-
after = after.replaceAll('/*$', '${')
|
|
562
|
-
after = after.replaceAll('$*/', '}$')
|
|
563
|
-
|
|
568
|
+
after = after.replaceAll('/*$', '${');
|
|
569
|
+
after = after.replaceAll('$*/', '}$');
|
|
564
570
|
|
|
565
571
|
if (styleTagWrap) {
|
|
566
572
|
styleBody = `<style id='${componentKey}-style' domstyle>${after}</style>`;
|
|
@@ -571,7 +577,11 @@ export class RawSet {
|
|
|
571
577
|
}
|
|
572
578
|
|
|
573
579
|
public applyEvent(obj: any, fragment = this.dataSet.fragment, config?: DomRenderConfig) {
|
|
574
|
-
this.dataSet.config.eventManager.applyEvent(
|
|
580
|
+
this.dataSet.config.eventManager.applyEvent(
|
|
581
|
+
obj,
|
|
582
|
+
this.dataSet.config.eventManager.findAttrElements(fragment, config),
|
|
583
|
+
config
|
|
584
|
+
);
|
|
575
585
|
}
|
|
576
586
|
|
|
577
587
|
public onRenderedEvent(obj: any, nodes: Node[], config?: DomRenderConfig) {
|
|
@@ -596,7 +606,7 @@ export class RawSet {
|
|
|
596
606
|
let data = element.getAttribute(RawSet.DR_APPENDER_NAME);
|
|
597
607
|
// if (data && !/\[[0-9]+\]/g.test(data)) {
|
|
598
608
|
if (data && !/\[.+\]/g.test(data)) {
|
|
599
|
-
const currentIndex =
|
|
609
|
+
const currentIndex = ObjectUtils.Script.evaluateReturn(`${ObjectUtils.Path.toOptionalChainPath(data)}?.length -1`, obj);
|
|
600
610
|
// console.log('------?', currentIndex)
|
|
601
611
|
// if (currentIndex === undefined || isNaN(currentIndex)) {
|
|
602
612
|
// return undefined;
|
|
@@ -628,57 +638,68 @@ export class RawSet {
|
|
|
628
638
|
// console.log('!@@@@@@@@@@@@@@@@', obj);
|
|
629
639
|
// const NodeFilter = (config.window as any).NodeFilter;
|
|
630
640
|
// const thisVariableName = (element as any).__domrender_this_variable_name;
|
|
631
|
-
//
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
641
|
+
// let html = element instanceof DocumentFragment ? ElementUtils.toInnerHTML(element, {document: config.window.document}) : (element as HTMLElement).outerHTML;
|
|
642
|
+
// console.log('==============html-->', element, html);
|
|
643
|
+
const NodeFilter = (config.window as any).NodeFilter;
|
|
644
|
+
const Node = (config.window as any).Node;
|
|
645
|
+
const processedNodes = new Set<Node>();
|
|
646
|
+
|
|
647
|
+
|
|
648
|
+
|
|
649
|
+
const findNodes = NodeUtils.findNodes(element, (node) => {
|
|
650
|
+
// console.log('nodeType', node.nodeType, node, (node as any).tagName, (node as any).data);
|
|
651
|
+
// for (const processedNode of processedNodes) {
|
|
652
|
+
// console.log('pre check!!', Array.from(processedNodes),processedNode !== node , processedNode.contains(node));
|
|
653
|
+
// // if(processedNode.contains(node)){
|
|
654
|
+
// console.log('---prechecker--html', (processedNode as HTMLElement).outerHTML,'------', (node as HTMLElement).outerHTML);
|
|
655
|
+
// // }
|
|
656
|
+
// if (processedNode !== node && processedNode.contains(node)) {
|
|
657
|
+
// console.log('acceptNodeReturn contain', NodeFilter.FILTER_REJECT);
|
|
658
|
+
// return NodeFilter.FILTER_REJECT;
|
|
659
|
+
// }
|
|
660
|
+
// }
|
|
661
|
+
|
|
635
662
|
if (node.nodeType === Node.TEXT_NODE) {
|
|
636
|
-
// console.log('
|
|
663
|
+
// console.log('nodeText--->', node.textContent)
|
|
637
664
|
// console.log('????????', node.parentElement, node.parentElement?.getAttribute('dr-pre'));
|
|
638
665
|
// console.log('???????/',node.textContent, node.parentElement?.getAttribute('dr-pre'))
|
|
639
666
|
// TODO: 나중에
|
|
640
667
|
// const between = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', StringUtils.deleteEnter((node as Text).data ?? ''))
|
|
641
668
|
const between = RawSet.expressionGroups(StringUtils.deleteEnter((node as Text).data ?? ''));
|
|
642
669
|
// console.log('bbbb', between)
|
|
643
|
-
|
|
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);
|
|
672
|
+
return r;
|
|
644
673
|
// return /\$\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
|
|
645
674
|
// return /[$#]\{.*?\}/g.test(StringUtils.deleteEnter((node as Text).data ?? '')) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;
|
|
646
675
|
} else if (node.nodeType === Node.ELEMENT_NODE) {
|
|
647
676
|
const element = node as Element;
|
|
677
|
+
// if (typeof Window === 'undefined' && element.getAttribute('ttt') === 'visual') {
|
|
678
|
+
// return NodeFilter.FILTER_REJECT;
|
|
679
|
+
// }
|
|
680
|
+
// console.log('nodeHTML-->', element.outerHTML);
|
|
648
681
|
if (element.hasAttribute(RawSet.DR_PRE_NAME)) {
|
|
649
|
-
|
|
682
|
+
let r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_SKIP_CHILDREN;
|
|
683
|
+
// console.log('acceptNodeReturn', r);
|
|
684
|
+
return r;
|
|
650
685
|
}
|
|
651
686
|
if (element.hasAttribute(EventManager.attrAttrName)) {
|
|
652
687
|
const script = element.getAttribute(EventManager.attrAttrName) ?? '';
|
|
653
688
|
// console.log('scriptscriptscriptscriptscriptscript,', script)
|
|
654
|
-
const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
|
|
689
|
+
const keyValuePairs = Array.from(script.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({
|
|
690
|
+
key: match[1],
|
|
691
|
+
value: match[2]
|
|
692
|
+
}));
|
|
655
693
|
(keyValuePairs ?? []).forEach(it => {
|
|
656
|
-
element.setAttribute(it.key, '${' + it.value + '}$')
|
|
657
|
-
})
|
|
658
|
-
// console.log('-------k', keyValuePairs)
|
|
659
|
-
|
|
660
|
-
// const drAttr = ScriptUtils.evalReturn(script, obj)
|
|
661
|
-
// Object.entries(drAttr).forEach(([key, value]) => {
|
|
662
|
-
// const keyValuePairs = Array.from(a.matchAll(/(\w+):\s*([^,}]+)/g)).map(match => ({ key: match[1], value: match[2] }));
|
|
663
|
-
// console.log(keyValuePairs);
|
|
664
|
-
// // 출력: [{ key: 'value', value: 'this.child.obj.name' }, { key: 'wow', value: 'this.ww' }, { key: 'zz', value: '22' }, { key: 'v', value: '"ee"' }]
|
|
665
|
-
//
|
|
666
|
-
// console.log('-----------------', key,value)
|
|
667
|
-
// element.setAttribute(key, '${'+(value)+'}$');
|
|
668
|
-
// })
|
|
669
|
-
// EventManager.attrNames.filter(it => it in drAttr).forEach(it => {
|
|
670
|
-
// if (drAttr[it] === null) {
|
|
671
|
-
// element.removeAttribute(it);
|
|
672
|
-
// } else {
|
|
673
|
-
// element.setAttribute(it, drAttr[it]);
|
|
674
|
-
// }
|
|
675
|
-
// })
|
|
676
|
-
// console.log('-------->', Array.from(element.attributes), element.getAttribute('dr-attr'), obj)
|
|
694
|
+
element.setAttribute(it.key, '${' + it.value + '}$');
|
|
695
|
+
});
|
|
677
696
|
}
|
|
678
697
|
// element.setAttribute('dr-event-click', 'console.log(11)');
|
|
679
698
|
const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
|
|
680
699
|
const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
|
|
681
|
-
const isElement =
|
|
700
|
+
const isElement =
|
|
701
|
+
targetElementNames.includes(element.tagName.toLowerCase()) ||
|
|
702
|
+
targetElementNames.includes(targetElementIs?.toLowerCase() as any);
|
|
682
703
|
// if (isElement) {
|
|
683
704
|
// (element as HTMLElement).style.display = 'none';
|
|
684
705
|
// (element as HTMLElement).style.width = '100px';
|
|
@@ -691,39 +712,44 @@ export class RawSet {
|
|
|
691
712
|
const normalAttrs = new Map<string, string>();
|
|
692
713
|
const linkVariables = new Map<string, string>();
|
|
693
714
|
const linkNames = EventManager.linkAttrs.map(it => it.name);
|
|
694
|
-
const isAttr =
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
715
|
+
const isAttr =
|
|
716
|
+
element.getAttributeNames().filter(it => {
|
|
717
|
+
const value = element.getAttribute(it);
|
|
718
|
+
|
|
719
|
+
// link일때
|
|
720
|
+
if (value && linkNames.includes(it)) {
|
|
721
|
+
linkVariables.set(it, value);
|
|
722
|
+
} else if (value && RawSet.isExpression(value)) {
|
|
723
|
+
// 표현식있을떄
|
|
724
|
+
let variablePath: string = RawSet.expressionGroups(value)[0][1];
|
|
725
|
+
// console.log('0-----',variablePath, node);
|
|
726
|
+
// normal Attribute 초반에 셋팅해주기.
|
|
727
|
+
// TODO: 이거 하긴했는데 사이드 이팩트?
|
|
728
|
+
const originVariable = variablePath;
|
|
729
|
+
variablePath = variablePath.replace(/#[^#]*#/g, '({})');
|
|
730
|
+
// console.log('1-----',variablePath, node);
|
|
731
|
+
const optionalChainPath = ObjectUtils.Path.toOptionalChainPath(variablePath);
|
|
732
|
+
// console.log('2-----',optionalChainPath);
|
|
733
|
+
const cval = ObjectUtils.Script.evaluateReturn(optionalChainPath, Object.assign(obj));
|
|
734
|
+
// const cval = ScriptUtils.evalReturn(variablePath, Object.assign(obj));
|
|
735
|
+
if (cval === null) {
|
|
736
|
+
element.removeAttribute(it);
|
|
737
|
+
} else {
|
|
738
|
+
element.setAttribute(it, cval);
|
|
739
|
+
}
|
|
740
|
+
normalAttrs.set(it, originVariable);
|
|
741
|
+
// console.log('normalAttribute', it, variablePath);
|
|
716
742
|
}
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
|
|
722
|
-
return isTargetAttr;
|
|
723
|
-
}).length > 0;
|
|
743
|
+
// console.log(element.getAttribute(it), attrExpresion);
|
|
744
|
+
const isTargetAttr = targetAttrNames.includes(it.toLowerCase());
|
|
745
|
+
return isTargetAttr;
|
|
746
|
+
}).length > 0;
|
|
724
747
|
|
|
725
748
|
if (linkVariables.size) {
|
|
726
|
-
element.setAttribute(
|
|
749
|
+
element.setAttribute(
|
|
750
|
+
EventManager.linkTargetMapAttrName,
|
|
751
|
+
JSON.stringify(Array.from(linkVariables.entries()))
|
|
752
|
+
);
|
|
727
753
|
}
|
|
728
754
|
// 기본 attribute를 처리하기위해
|
|
729
755
|
if (normalAttrs.size) {
|
|
@@ -732,16 +758,172 @@ export class RawSet {
|
|
|
732
758
|
// if (isElement) {
|
|
733
759
|
// element.setAttribute('www', '@this@');
|
|
734
760
|
// }
|
|
735
|
-
const r =
|
|
761
|
+
const r = isAttr || isElement ? NodeUtils.FindNodesFilterResult.MATCH_AND_SKIP_CHILDREN : NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
|
|
762
|
+
// console.log('acceptNodeReturn element', r);
|
|
736
763
|
return r;
|
|
737
764
|
}
|
|
738
|
-
|
|
765
|
+
const r = NodeUtils.FindNodesFilterResult.NO_MATCH_AND_CONTINUE;
|
|
766
|
+
// console.log('acceptNodeReturn nothing', r);
|
|
767
|
+
return r;
|
|
739
768
|
}
|
|
740
|
-
|
|
769
|
+
)
|
|
770
|
+
|
|
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
|
+
// });
|
|
741
916
|
const pars: RawSet[] = [];
|
|
742
917
|
let currentNode: Node | null;
|
|
918
|
+
const name = RandomUtils.uuid();
|
|
919
|
+
// console.log('name==', name);
|
|
743
920
|
// eslint-disable-next-line no-cond-assign
|
|
744
|
-
while (currentNode = nodeIterator?.nextNode()) {
|
|
921
|
+
// while ((currentNode = nodeIterator?.nextNode())) {
|
|
922
|
+
// console.log('findNodes~~', findNodes);
|
|
923
|
+
for (const currentNode of findNodes) {
|
|
924
|
+
// 여기에서 부모인거 인지시켜준다 위쪽 에서 다시찾을떄 걸러진다.. JSDOM ..이놈이 즉각적인 처리를 못해줘서 수동 검증 로직 넣었다.
|
|
925
|
+
processedNodes.add(currentNode);
|
|
926
|
+
// console.log('currentNode!!!!', currentNode);
|
|
745
927
|
if (currentNode.nodeType === Node.TEXT_NODE) {
|
|
746
928
|
const text = (currentNode as Text).textContent ?? '';
|
|
747
929
|
const template = config.window.document?.createElement('template');
|
|
@@ -750,7 +932,12 @@ export class RawSet {
|
|
|
750
932
|
// const a = StringUtils.regexExec(/[$#]\{.*?\}/g, text);
|
|
751
933
|
// const a = StringUtils.betweenRegexpStr('[$#]\\{', '\\}', text); // <--TODO: 나중에..
|
|
752
934
|
const groups = RawSet.expressionGroups(text);
|
|
753
|
-
const map = groups.map(it => ({
|
|
935
|
+
const map = groups.map(it => ({
|
|
936
|
+
uuid: `${RandomUtils.alphabet(40)}_${obj?.constructor?.name}`,
|
|
937
|
+
content: it[0],
|
|
938
|
+
regexArr: it
|
|
939
|
+
}));
|
|
940
|
+
// console.log('create!!',map);
|
|
754
941
|
let lasterIndex = 0;
|
|
755
942
|
for (let i = 0; i < map.length; i++) {
|
|
756
943
|
const it = map[i];
|
|
@@ -769,8 +956,8 @@ export class RawSet {
|
|
|
769
956
|
} else {
|
|
770
957
|
type = RawSetType.TEXT;
|
|
771
958
|
}
|
|
772
|
-
const node = document.createTextNode(preparedText);
|
|
773
|
-
const startEndPoint = RawSet.createStartEndPoint({id: it.uuid, type}, config);
|
|
959
|
+
const node = config.window.document.createTextNode(preparedText);
|
|
960
|
+
const startEndPoint = RawSet.createStartEndPoint({ id: it.uuid, type }, config);
|
|
774
961
|
// layout setting
|
|
775
962
|
// console.log('createTextNode', node);
|
|
776
963
|
template.content.append(node); // expression 앞 부분 넣어줘야 앞부분 일반 text 안짤린다.
|
|
@@ -781,13 +968,20 @@ export class RawSet {
|
|
|
781
968
|
const fragment = config.window.document.createDocumentFragment();
|
|
782
969
|
fragment.append(config.window.document.createTextNode(it.content));
|
|
783
970
|
// (startEndPoint.start as any).khh = RandomUtils.decimal(0,10)
|
|
784
|
-
pars.push(
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
971
|
+
pars.push(
|
|
972
|
+
new RawSet(
|
|
973
|
+
it.uuid,
|
|
974
|
+
type,
|
|
975
|
+
{
|
|
976
|
+
start: startEndPoint.start,
|
|
977
|
+
node: currentNode,
|
|
978
|
+
end: startEndPoint.end,
|
|
979
|
+
parent: currentNode.parentNode
|
|
980
|
+
// thisVariableName: thisVariableName
|
|
981
|
+
},
|
|
982
|
+
{ fragment: fragment, config: config }
|
|
983
|
+
)
|
|
984
|
+
);
|
|
791
985
|
lasterIndex = regexArr.index + it.content.length;
|
|
792
986
|
}
|
|
793
987
|
template.content.append(config.window.document.createTextNode(text.substring(lasterIndex, text.length)));
|
|
@@ -796,13 +990,16 @@ export class RawSet {
|
|
|
796
990
|
// const uuid = `${RandomUtils.alphabet(40)}___${obj?.constructor?.name}`;
|
|
797
991
|
const uuid = `${RandomUtils.alphabet(40)}`;
|
|
798
992
|
const element = currentNode as Element;
|
|
993
|
+
// console.log('create ElementTarget', uuid, element.outerHTML);
|
|
799
994
|
const fragment = config.window.document.createDocumentFragment();
|
|
800
995
|
const elementType: RawSetType = RawSetType.TARGET_ELEMENT;
|
|
801
|
-
const startEndPoint = RawSet.createStartEndPoint({node: element, id: uuid, type: elementType}, config);
|
|
996
|
+
const startEndPoint = RawSet.createStartEndPoint({ node: element, id: uuid, type: elementType }, config);
|
|
802
997
|
// 여기서 등록한 component 추가한다.
|
|
803
998
|
const targetElementIs = element.getAttribute(RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME);
|
|
804
999
|
const targetElementNames = config.targetElements?.map(it => it.name.toLowerCase()) ?? [];
|
|
805
|
-
const isElement =
|
|
1000
|
+
const isElement =
|
|
1001
|
+
targetElementNames.includes(element.tagName.toLowerCase()) ||
|
|
1002
|
+
targetElementNames.includes(targetElementIs?.toLowerCase() as any);
|
|
806
1003
|
// if (isElement) {
|
|
807
1004
|
// (element as HTMLElement).style.display = 'none'
|
|
808
1005
|
// }
|
|
@@ -816,21 +1013,49 @@ export class RawSet {
|
|
|
816
1013
|
// tempDiv.appendChild(fragment.cloneNode(true)); // fragment 복사본 추가
|
|
817
1014
|
// console.log('------',tempDiv.innerHTML);
|
|
818
1015
|
// console.log();
|
|
819
|
-
const rawSet = new RawSet(
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
1016
|
+
const rawSet = new RawSet(
|
|
1017
|
+
uuid,
|
|
1018
|
+
isElement ? elementType : isAttr ? RawSetType.TARGET_ATTR : RawSetType.UNKOWN,
|
|
1019
|
+
{
|
|
1020
|
+
start: startEndPoint.start,
|
|
1021
|
+
node: currentNode,
|
|
1022
|
+
end: startEndPoint.end,
|
|
1023
|
+
parent: currentNode.parentNode
|
|
1024
|
+
// thisVariableName: thisVariableName
|
|
1025
|
+
},
|
|
1026
|
+
{ config: config, fragment: fragment }
|
|
1027
|
+
);
|
|
826
1028
|
pars.push(rawSet);
|
|
827
1029
|
}
|
|
828
1030
|
}
|
|
829
|
-
//
|
|
1031
|
+
// config
|
|
1032
|
+
const util = ElementUtils;
|
|
1033
|
+
// console.log('parsparsparsparsparsparsparsparsparspars', pars, name);
|
|
830
1034
|
return pars;
|
|
1035
|
+
// const lastpars: RawSet[] = []
|
|
1036
|
+
//
|
|
1037
|
+
// pars.forEach(it => {
|
|
1038
|
+
// // it.uuid
|
|
1039
|
+
// const parents = pars.filter(it => it.dataSet.fragment.getElementById(it.uuid+'-start'))
|
|
1040
|
+
//
|
|
1041
|
+
// console.log('vvvvvvvvv', parents);
|
|
1042
|
+
// if (parents.length>0) {
|
|
1043
|
+
// parents.forEach(sit => {
|
|
1044
|
+
// sit.dataSet.fragment.getElementById(sit.uuid + '-start')?.replaceWith(it.dataSet.fragment);
|
|
1045
|
+
// it.dataSet.fragment.getElementById(sit.uuid + '-end').remove();
|
|
1046
|
+
// console.log('rrr');
|
|
1047
|
+
// // ElementUtils.toInnerHTML(it.dataSet.fragment, {document: config.window.document});
|
|
1048
|
+
// // ElementUtils.toInnerHTML(it.dataSet.fragment
|
|
1049
|
+
// });
|
|
1050
|
+
// } else {
|
|
1051
|
+
// lastpars.push(it)
|
|
1052
|
+
// }
|
|
1053
|
+
// })
|
|
1054
|
+
// console.log('zzzzzz', lastpars);
|
|
1055
|
+
// return lastpars;
|
|
831
1056
|
}
|
|
832
1057
|
|
|
833
|
-
public static createStartEndPoint(data: { node?: Node
|
|
1058
|
+
public static createStartEndPoint(data: { node?: Node; id: string; type: RawSetType }, config: DomRenderConfig) {
|
|
834
1059
|
if (data.type === RawSetType.TARGET_ELEMENT && data.node) {
|
|
835
1060
|
const element = data.node as Element;
|
|
836
1061
|
const start: HTMLMetaElement = config.window.document.createElement('meta');
|
|
@@ -848,13 +1073,14 @@ export class RawSet {
|
|
|
848
1073
|
}
|
|
849
1074
|
end.setAttribute('id', `${data.id}-end`);
|
|
850
1075
|
end.setAttribute('dr-end-point', '');
|
|
851
|
-
return {start, end};
|
|
1076
|
+
return { start, end };
|
|
852
1077
|
} else if (data.type === RawSetType.STYLE_TEXT) {
|
|
853
1078
|
return {
|
|
854
1079
|
start: config.window.document.createTextNode(`/*start text ${data.id}*/`),
|
|
855
1080
|
end: config.window.document.createTextNode(`/*end text ${data.id}*/`)
|
|
856
1081
|
};
|
|
857
|
-
} else {
|
|
1082
|
+
} else {
|
|
1083
|
+
// text
|
|
858
1084
|
return {
|
|
859
1085
|
start: config.window.document.createComment(`start text ${data.id}`),
|
|
860
1086
|
end: config.window.document.createComment(`end text ${data.id}`)
|
|
@@ -894,7 +1120,7 @@ export class RawSet {
|
|
|
894
1120
|
|
|
895
1121
|
public getHasRawSet(key: string) {
|
|
896
1122
|
let rawSet: RawSet | undefined;
|
|
897
|
-
this.childs(
|
|
1123
|
+
this.childs(node => {
|
|
898
1124
|
const drKey = (node as Element).getAttribute?.(RawSet.DR_KEY_OPTIONNAME);
|
|
899
1125
|
if (drKey && drKey === key) {
|
|
900
1126
|
rawSet = (node as any).rawSet as RawSet;
|
|
@@ -906,32 +1132,44 @@ export class RawSet {
|
|
|
906
1132
|
}
|
|
907
1133
|
|
|
908
1134
|
public static drItOtherEncoding(element: Element | DocumentFragment, postFix?: string) {
|
|
909
|
-
|
|
910
1135
|
const random = RandomUtils.uuid() + postFix;
|
|
911
1136
|
const regex = /#it#/g;
|
|
912
|
-
element
|
|
913
|
-
|
|
914
|
-
|
|
1137
|
+
element
|
|
1138
|
+
.querySelectorAll(
|
|
1139
|
+
`[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`
|
|
1140
|
+
)
|
|
1141
|
+
.forEach(it => {
|
|
1142
|
+
it.innerHTML = it.innerHTML.replace(regex, random);
|
|
1143
|
+
});
|
|
915
1144
|
return random;
|
|
916
1145
|
}
|
|
917
1146
|
|
|
918
1147
|
public static drItOtherDecoding(element: Element | DocumentFragment, random: string) {
|
|
919
|
-
element
|
|
920
|
-
|
|
921
|
-
|
|
1148
|
+
element
|
|
1149
|
+
.querySelectorAll(
|
|
1150
|
+
`[${RawSet.DR_IT_OPTIONNAME}], [${RawSet.DR_FOR_OF_NAME}], [${RawSet.DR_REPEAT_NAME}], [${RawSet.DR_APPENDER_NAME}]`
|
|
1151
|
+
)
|
|
1152
|
+
.forEach(it => {
|
|
1153
|
+
it.innerHTML = it.innerHTML.replace(RegExp(random, 'g'), '#it#');
|
|
1154
|
+
});
|
|
922
1155
|
}
|
|
923
1156
|
|
|
924
|
-
public static drVarDecoding(
|
|
1157
|
+
public static drVarDecoding(
|
|
1158
|
+
element: Element,
|
|
1159
|
+
vars: { name: string; value: string; regex: RegExp; random: string }[]
|
|
1160
|
+
) {
|
|
925
1161
|
element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {
|
|
926
|
-
vars
|
|
927
|
-
|
|
928
|
-
|
|
1162
|
+
vars
|
|
1163
|
+
.filter(vit => vit.value && vit.name)
|
|
1164
|
+
.forEach(vit => {
|
|
1165
|
+
it.innerHTML = it.innerHTML.replace(RegExp(vit.random, 'g'), vit.value);
|
|
1166
|
+
});
|
|
929
1167
|
});
|
|
930
1168
|
}
|
|
931
1169
|
|
|
932
|
-
public static replaceInnerHTML(element: Element, config: { asIs: string | RegExp
|
|
1170
|
+
public static replaceInnerHTML(element: Element, config: { asIs: string | RegExp; toBe?: string }): string {
|
|
933
1171
|
const innerHTML = element.innerHTML;
|
|
934
|
-
const tobe = config.toBe = config.toBe ?? RandomUtils.uuid();
|
|
1172
|
+
const tobe = (config.toBe = config.toBe ?? RandomUtils.uuid());
|
|
935
1173
|
if (config.asIs instanceof RegExp) {
|
|
936
1174
|
element.innerHTML = innerHTML.replace(config.asIs, config.toBe);
|
|
937
1175
|
} else {
|
|
@@ -940,8 +1178,8 @@ export class RawSet {
|
|
|
940
1178
|
return tobe;
|
|
941
1179
|
}
|
|
942
1180
|
|
|
943
|
-
public static drThisEncoding(element: Element, drThis: string, config: { asIs: RegExp
|
|
944
|
-
const thisRandom = config.toBe = config?.toBe ?? RandomUtils.uuid();
|
|
1181
|
+
public static drThisEncoding(element: Element, drThis: string, config: { asIs: RegExp; toBe?: string }): string {
|
|
1182
|
+
const thisRandom = (config.toBe = config?.toBe ?? RandomUtils.uuid());
|
|
945
1183
|
// const thisRegex = /(?<!(dr-|\.))this(?=.?)/g;
|
|
946
1184
|
// const thisRegex = /[^(dr\-)]this(?=.?)/g;
|
|
947
1185
|
// const thisRegex = /[^(dr\-)]this\./g;
|
|
@@ -956,34 +1194,47 @@ export class RawSet {
|
|
|
956
1194
|
// console.log('rrrrrrrrand?', drThis,config);
|
|
957
1195
|
let message = it.innerHTML;
|
|
958
1196
|
// StringUtils.regexExec(/([^(dr\-)])?this(?=.?)/g, message).reverse().forEach(it => {
|
|
959
|
-
StringUtils.regexExec(config.asIs, message)
|
|
960
|
-
|
|
961
|
-
|
|
1197
|
+
StringUtils.regexExec(config.asIs, message)
|
|
1198
|
+
.reverse()
|
|
1199
|
+
.forEach(it => {
|
|
1200
|
+
message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);
|
|
1201
|
+
});
|
|
962
1202
|
it.innerHTML = message;
|
|
963
1203
|
});
|
|
964
1204
|
|
|
965
1205
|
// console.log('changggg', element.innerHTML);
|
|
966
1206
|
let message = element.innerHTML;
|
|
967
|
-
StringUtils.regexExec(config.asIs, message)
|
|
968
|
-
|
|
969
|
-
|
|
1207
|
+
StringUtils.regexExec(config.asIs, message)
|
|
1208
|
+
.reverse()
|
|
1209
|
+
.forEach(it => {
|
|
1210
|
+
message = message.substr(0, it.index) + message.substr(it.index).replace(it[0], `${it[1] ?? ''}${drThis}`);
|
|
1211
|
+
});
|
|
970
1212
|
element.innerHTML = message;
|
|
971
1213
|
return thisRandom;
|
|
972
1214
|
}
|
|
973
1215
|
|
|
974
|
-
public static drThisBindEncoding(
|
|
1216
|
+
public static drThisBindEncoding(
|
|
1217
|
+
element: Element,
|
|
1218
|
+
variable: RegExp,
|
|
1219
|
+
config: { config: DomRenderConfig; otherReplaceVariablePath?: string }
|
|
1220
|
+
) {
|
|
975
1221
|
element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(eIt => {
|
|
976
1222
|
let message = eIt.innerHTML;
|
|
977
1223
|
// StringUtils.regexExec(/([^(dr\-)])?this(?=.?)/g, message).reverse().forEach(it => {
|
|
978
|
-
StringUtils.regexExec(variable, message)
|
|
979
|
-
|
|
980
|
-
|
|
1224
|
+
StringUtils.regexExec(variable, message)
|
|
1225
|
+
.reverse()
|
|
1226
|
+
.forEach(it => {
|
|
1227
|
+
message =
|
|
1228
|
+
message.substr(0, it.index) +
|
|
1229
|
+
message.substr(it.index).replace(it[0], `${it[1] ?? ''}${eIt.getAttribute(RawSet.DR_THIS_NAME)}`);
|
|
1230
|
+
});
|
|
981
1231
|
eIt.innerHTML = message;
|
|
982
1232
|
});
|
|
983
1233
|
|
|
984
|
-
|
|
985
1234
|
const targetElements = config.config.targetElements ?? [];
|
|
986
|
-
const targetElementNames = targetElements
|
|
1235
|
+
const targetElementNames = targetElements
|
|
1236
|
+
.map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:'))
|
|
1237
|
+
.join(',');
|
|
987
1238
|
const thisRandom = RandomUtils.uuid();
|
|
988
1239
|
element.querySelectorAll(targetElementNames).forEach(it => {
|
|
989
1240
|
it.innerHTML = it.innerHTML.replace(variable, thisRandom);
|
|
@@ -991,31 +1242,36 @@ export class RawSet {
|
|
|
991
1242
|
|
|
992
1243
|
element.querySelectorAll(`[${RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME}]`).forEach(it => {
|
|
993
1244
|
it.innerHTML = it.innerHTML.replace(variable, thisRandom);
|
|
994
|
-
})
|
|
995
|
-
|
|
1245
|
+
});
|
|
996
1246
|
|
|
997
1247
|
if (config.otherReplaceVariablePath) {
|
|
998
1248
|
let message = element.innerHTML;
|
|
999
|
-
StringUtils.regexExec(variable, message)
|
|
1000
|
-
|
|
1001
|
-
|
|
1249
|
+
StringUtils.regexExec(variable, message)
|
|
1250
|
+
.reverse()
|
|
1251
|
+
.forEach(it => {
|
|
1252
|
+
message =
|
|
1253
|
+
message.substr(0, it.index) +
|
|
1254
|
+
message.substr(it.index).replace(it[0], `${it[1] ?? ''}${config.otherReplaceVariablePath}`);
|
|
1255
|
+
});
|
|
1002
1256
|
element.innerHTML = message;
|
|
1003
1257
|
}
|
|
1004
1258
|
return thisRandom;
|
|
1005
1259
|
}
|
|
1006
1260
|
|
|
1007
|
-
public static drThisBindDecoding(element: Element, config: { asIs: string
|
|
1261
|
+
public static drThisBindDecoding(element: Element, config: { asIs: string; toBe: string; config: DomRenderConfig }) {
|
|
1008
1262
|
const targetElements = config.config.targetElements ?? [];
|
|
1009
|
-
const targetElementNames = targetElements
|
|
1263
|
+
const targetElementNames = targetElements
|
|
1264
|
+
.map(it => it.name.replaceAll('.', '\\.').replaceAll(':', '\\:'))
|
|
1265
|
+
.join(',');
|
|
1010
1266
|
element.querySelectorAll(targetElementNames).forEach(it => {
|
|
1011
1267
|
it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);
|
|
1012
1268
|
});
|
|
1013
1269
|
element.querySelectorAll(`[${RawSet.DR_REPLACE_TARGET_ELEMENT_IS_NAME}]`).forEach(it => {
|
|
1014
1270
|
it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);
|
|
1015
|
-
})
|
|
1271
|
+
});
|
|
1016
1272
|
}
|
|
1017
1273
|
|
|
1018
|
-
public static drThisDecoding(element: Element, config: { asIs: string
|
|
1274
|
+
public static drThisDecoding(element: Element, config: { asIs: string; toBe: string }) {
|
|
1019
1275
|
element.querySelectorAll(`[${RawSet.DR_PRE_NAME}]`).forEach(it => {
|
|
1020
1276
|
it.innerHTML = it.innerHTML.replace(RegExp(config.asIs, 'g'), config.toBe);
|
|
1021
1277
|
});
|
|
@@ -1039,7 +1295,7 @@ export class RawSet {
|
|
|
1039
1295
|
|
|
1040
1296
|
let node;
|
|
1041
1297
|
// eslint-disable-next-line no-cond-assign
|
|
1042
|
-
while (node = nodeIterator?.nextNode()) {
|
|
1298
|
+
while ((node = nodeIterator?.nextNode())) {
|
|
1043
1299
|
const element = node as Element;
|
|
1044
1300
|
element.setAttribute(to, element.getAttribute(as) ?? '');
|
|
1045
1301
|
element.removeAttribute(as);
|
|
@@ -1063,21 +1319,34 @@ export class RawSet {
|
|
|
1063
1319
|
// console.log('asd', element.innerHTML);
|
|
1064
1320
|
// element.querySelectorAll(`[${RawSet.DR_THIS_NAME}]`).forEach(it => {
|
|
1065
1321
|
element.querySelectorAll(`[${RawSet.DR_VAR_OPTIONNAME}]`).forEach(it => {
|
|
1066
|
-
vars
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
element.innerHTML = element.innerHTML.replace(vit.regex, vit.value);
|
|
1322
|
+
vars
|
|
1323
|
+
.filter(vit => vit.value && vit.name)
|
|
1324
|
+
.forEach(vit => {
|
|
1325
|
+
it.innerHTML = it.innerHTML.replace(vit.regex, vit.random);
|
|
1326
|
+
});
|
|
1072
1327
|
});
|
|
1328
|
+
vars
|
|
1329
|
+
.filter(vit => vit.value && vit.name)
|
|
1330
|
+
.forEach(vit => {
|
|
1331
|
+
element.innerHTML = element.innerHTML.replace(vit.regex, vit.value);
|
|
1332
|
+
});
|
|
1073
1333
|
return vars;
|
|
1074
1334
|
}
|
|
1075
1335
|
|
|
1076
|
-
public static async drThisCreate(
|
|
1336
|
+
public static async drThisCreate(
|
|
1337
|
+
rawSet: RawSet,
|
|
1338
|
+
element: Element,
|
|
1339
|
+
drThis: string,
|
|
1340
|
+
drVarOption: string,
|
|
1341
|
+
drStripOption: boolean | string | null,
|
|
1342
|
+
obj: any,
|
|
1343
|
+
config: DomRenderConfig,
|
|
1344
|
+
set?: ComponentSet
|
|
1345
|
+
): Promise<DocumentFragment | undefined> {
|
|
1077
1346
|
// console.log('ttttttttttttttttttttt',element.innerHTML, drThis, set, obj);
|
|
1078
1347
|
const fag = config.window.document?.createDocumentFragment();
|
|
1079
|
-
if(!fag) {
|
|
1080
|
-
return
|
|
1348
|
+
if (!fag) {
|
|
1349
|
+
return;
|
|
1081
1350
|
}
|
|
1082
1351
|
const targetElement = element.cloneNode(true) as Element;
|
|
1083
1352
|
let targetObj = obj;
|
|
@@ -1087,7 +1356,7 @@ export class RawSet {
|
|
|
1087
1356
|
const style = RawSet.generateStyleTransform(set.styles ?? [], rawSet.uuid, true);
|
|
1088
1357
|
targetElement.innerHTML = style + (set.template ?? '');
|
|
1089
1358
|
} else {
|
|
1090
|
-
targetObj =
|
|
1359
|
+
targetObj = ObjectUtils.Script.evaluateReturn(ObjectUtils.Path.toOptionalChainPath(drThis), obj);
|
|
1091
1360
|
}
|
|
1092
1361
|
|
|
1093
1362
|
const componentKey = rawSet.uuid;
|
|
@@ -1133,12 +1402,15 @@ export class RawSet {
|
|
|
1133
1402
|
scripts: EventManager.setBindProperty(config.scripts ?? {}, obj)
|
|
1134
1403
|
} as Render;
|
|
1135
1404
|
// const attribute = DomUtils.getAttributeToObject(element);
|
|
1136
|
-
render.attribute = RawSet.getAttributeObject(element, {script: renderScript, obj: obj, renderData: render})
|
|
1405
|
+
render.attribute = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });
|
|
1137
1406
|
render = Object.freeze(render);
|
|
1138
1407
|
|
|
1139
1408
|
// dr-on-create data onCreateRender
|
|
1140
1409
|
const onCreateDataScript = `return {rootParent: this, render: this.__render}`;
|
|
1141
|
-
const onCreateDataParam =
|
|
1410
|
+
const onCreateDataParam = ObjectUtils.Script.evaluate<OnCreateRenderDataParams>(
|
|
1411
|
+
onCreateDataScript,
|
|
1412
|
+
Object.assign(obj, { __render: render })
|
|
1413
|
+
);
|
|
1142
1414
|
if (isOnCreateRenderData(targetObj)) {
|
|
1143
1415
|
targetObj?.onCreateRenderData(onCreateDataParam as OnCreateRenderDataParams);
|
|
1144
1416
|
}
|
|
@@ -1147,12 +1419,14 @@ export class RawSet {
|
|
|
1147
1419
|
onCreateDataParam.render.parentThis.onCreatedThisChild(targetObj, onCreateDataParam as OnCreateRenderDataParams);
|
|
1148
1420
|
}
|
|
1149
1421
|
|
|
1150
|
-
|
|
1151
1422
|
// dr-on-create onCreateRender
|
|
1152
1423
|
const onCreate = element.getAttribute(RawSet.DR_ON_CREATE_ARGUMENTS_OPTIONNAME);
|
|
1153
1424
|
let createParam: any[] = [];
|
|
1154
1425
|
if (onCreate) {
|
|
1155
|
-
createParam =
|
|
1426
|
+
createParam = ObjectUtils.Script.evaluateReturn<any[]>(
|
|
1427
|
+
{ bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(onCreate) },
|
|
1428
|
+
obj
|
|
1429
|
+
);
|
|
1156
1430
|
if (!Array.isArray(createParam)) {
|
|
1157
1431
|
createParam = [createParam];
|
|
1158
1432
|
}
|
|
@@ -1165,7 +1439,7 @@ export class RawSet {
|
|
|
1165
1439
|
// console.log('매번타나?');
|
|
1166
1440
|
// 중요 dr-normal-attr-map
|
|
1167
1441
|
// const normalAttrMap = element.getAttribute(EventManager.normalAttrMapAttrName);
|
|
1168
|
-
const targetAttrObject = RawSet.getAttributeObject(element, {script: renderScript, obj: obj, renderData: render});
|
|
1442
|
+
const targetAttrObject = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });
|
|
1169
1443
|
if (targetAttrObject) {
|
|
1170
1444
|
rawSet.dataSet.render ??= {};
|
|
1171
1445
|
rawSet.dataSet.render.attribute = targetAttrObject;
|
|
@@ -1175,19 +1449,18 @@ export class RawSet {
|
|
|
1175
1449
|
// const cval = ScriptUtils.eval(script, Object.assign(obj, { __render: render }));
|
|
1176
1450
|
// // element.setAttribute(key, cval);
|
|
1177
1451
|
if (isOnChangeAttrRender(targetObj)) {
|
|
1178
|
-
targetObj.onChangeAttrRender(key, cval, {rawSet: rawSet});
|
|
1452
|
+
targetObj.onChangeAttrRender(key, cval, { rawSet: rawSet });
|
|
1179
1453
|
}
|
|
1180
1454
|
});
|
|
1181
1455
|
}
|
|
1182
1456
|
|
|
1183
|
-
|
|
1184
1457
|
// dr-on-component-init
|
|
1185
1458
|
// const oninit = element.getAttribute(`${EventManager.attrPrefix}on-component-init`); // dr-on-component-init
|
|
1186
1459
|
const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init
|
|
1187
1460
|
// console.log('--------drThisCreate!!!', oninit)
|
|
1188
1461
|
if (oninit) {
|
|
1189
1462
|
const script = `${renderScript} ${oninit} `;
|
|
1190
|
-
|
|
1463
|
+
ObjectUtils.Script.evaluate(script, Object.assign(obj, { __render: render }));
|
|
1191
1464
|
}
|
|
1192
1465
|
|
|
1193
1466
|
targetElement.querySelectorAll(EventManager.attrNames.map(it => `[${it}]`).join(',')).forEach(it => {
|
|
@@ -1206,17 +1479,22 @@ export class RawSet {
|
|
|
1206
1479
|
// if (innerHTMLName) {
|
|
1207
1480
|
// RawSet.replaceInnerHTML(element, {asIs: `#${innerHTMLName}#`, toBe: innerHTMLNameReplaceKey})
|
|
1208
1481
|
// }
|
|
1482
|
+
|
|
1483
|
+
rawSet.point.innerHTML = element.innerHTML;
|
|
1209
1484
|
// 이걸 왜 뺐었지... 다시넣었음 그런데 조금 로직이.. 검증이..
|
|
1210
1485
|
const innerHTMLName = targetElement.getAttribute(RawSet.DR_COMPONENT_INNER_HTML_NAME_OPTIONNAME) ?? 'innerHTML';
|
|
1211
1486
|
if (innerHTMLName) {
|
|
1212
|
-
|
|
1487
|
+
// console.log('---------', element.innerHTML);
|
|
1488
|
+
RawSet.replaceInnerHTML(targetElement, { asIs: `#${innerHTMLName}#`, toBe: element.innerHTML });
|
|
1213
1489
|
}
|
|
1214
1490
|
|
|
1215
1491
|
// console.log('aa-asIs', targetElement.innerHTML);
|
|
1216
1492
|
const optionThisName = targetElement.getAttribute(RawSet.DR_THIS_NAME_OPTIONNAME);
|
|
1217
1493
|
// console.log('11111111111111', optionThisName)
|
|
1218
|
-
targetElement
|
|
1219
|
-
|
|
1494
|
+
targetElement
|
|
1495
|
+
.getAttributeNames()
|
|
1496
|
+
.forEach(it => targetElement.setAttribute(it, targetElement.getAttribute(it)!.replace(/#this#/g, drThis)));
|
|
1497
|
+
const thisRandom = this.drThisEncoding(targetElement, drThis, { asIs: /@this@/g });
|
|
1220
1498
|
// console.log('@@@@@@@@@@@@@0', targetElement.innerHTML);
|
|
1221
1499
|
// let thisNameRandom: string | undefined = undefined;
|
|
1222
1500
|
if (optionThisName) {
|
|
@@ -1225,8 +1503,14 @@ export class RawSet {
|
|
|
1225
1503
|
// console.log('-----1', element.innerHTML, '\n', targetElement.innerHTML)
|
|
1226
1504
|
// thisNameRandom = this.drThisBindEncoding(targetElement, new RegExp(`@${optionThisName}@`, 'g'), {config: config, otherReplaceVariablePath: drThis});
|
|
1227
1505
|
}
|
|
1228
|
-
const nearThisRandom = this.drThisBindEncoding(targetElement, /@nearThis@/g, {
|
|
1229
|
-
|
|
1506
|
+
const nearThisRandom = this.drThisBindEncoding(targetElement, /@nearThis@/g, {
|
|
1507
|
+
config: config,
|
|
1508
|
+
otherReplaceVariablePath: rawSet.findNearThisPath()
|
|
1509
|
+
});
|
|
1510
|
+
const parentThisRandom = this.drThisBindEncoding(targetElement, /@parentThis@/g, {
|
|
1511
|
+
config: config,
|
|
1512
|
+
otherReplaceVariablePath: rawSet.findParentThisPath()
|
|
1513
|
+
});
|
|
1230
1514
|
// console.log('@@@@@@@@@@@@@1', targetElement.innerHTML, rawSet.findParentThisPath());
|
|
1231
1515
|
// console.log('@@@@@@@@@@@@@-----------', rawSet.point?.parentRawSet?.point?.start, rawSet.point?.parentRawSet?.point?.start instanceof HTMLMetaElement);
|
|
1232
1516
|
// if (rawSet.point?.parentRawSet?.point?.start instanceof HTMLMetaElement) {
|
|
@@ -1240,11 +1524,11 @@ export class RawSet {
|
|
|
1240
1524
|
// console.log('------', rawSet.findParentThisPath());
|
|
1241
1525
|
const vars = this.drVarEncoding(targetElement, drVarOption);
|
|
1242
1526
|
this.drVarDecoding(targetElement, vars);
|
|
1243
|
-
this.drThisDecoding(targetElement, {asIs: thisRandom, toBe: '@this@'});
|
|
1527
|
+
this.drThisDecoding(targetElement, { asIs: thisRandom, toBe: '@this@' });
|
|
1244
1528
|
// if (optionThisName && thisNameRandom)
|
|
1245
1529
|
// this.drThisBindDecoding(targetElement, {config: config, asIs: thisNameRandom, toBe: `@${optionThisName}@`});
|
|
1246
|
-
this.drThisBindDecoding(targetElement, {config: config, asIs: nearThisRandom, toBe: '@nearThis@'});
|
|
1247
|
-
this.drThisBindDecoding(targetElement, {config: config, asIs: parentThisRandom, toBe: '@parentThis@'});
|
|
1530
|
+
this.drThisBindDecoding(targetElement, { config: config, asIs: nearThisRandom, toBe: '@nearThis@' });
|
|
1531
|
+
this.drThisBindDecoding(targetElement, { config: config, asIs: parentThisRandom, toBe: '@parentThis@' });
|
|
1248
1532
|
// if (componentName) {
|
|
1249
1533
|
// RawSet.replaceInnerHTML(element, {asIs: componentNameReplaceKey, toBe: `#${componentName}#`})
|
|
1250
1534
|
// }
|
|
@@ -1256,7 +1540,7 @@ export class RawSet {
|
|
|
1256
1540
|
// console.log('------childNodes', Array.from(n.childNodes))
|
|
1257
1541
|
Array.from(targetElement.childNodes).forEach(it => fag.append(it));
|
|
1258
1542
|
} else {
|
|
1259
|
-
targetElement.classList.add(`${rawSet.uuid}`)
|
|
1543
|
+
targetElement.classList.add(`${rawSet.uuid}`);
|
|
1260
1544
|
fag.append(targetElement);
|
|
1261
1545
|
}
|
|
1262
1546
|
// (fag as any).__domrender_this_variable_name = drThis;
|
|
@@ -1264,10 +1548,13 @@ export class RawSet {
|
|
|
1264
1548
|
return fag;
|
|
1265
1549
|
}
|
|
1266
1550
|
|
|
1267
|
-
private static async fetchTemplateStyle(set: { template?: string
|
|
1551
|
+
private static async fetchTemplateStyle(set: { template?: string; styles?: string | string[] }) {
|
|
1268
1552
|
// const id = RandomUtils.getRandomString(20);
|
|
1269
1553
|
const stylePromises: Promise<string>[] = [];
|
|
1270
|
-
const templatePromise =
|
|
1554
|
+
const templatePromise =
|
|
1555
|
+
set.template && set.template.startsWith('lazy://')
|
|
1556
|
+
? (await fetch(set.template.substring(6))).text()
|
|
1557
|
+
: Promise.resolve(set.template);
|
|
1271
1558
|
if (Array.isArray(set.styles)) {
|
|
1272
1559
|
for (let i = 0; set.styles && i < (set.styles.length ?? 0); i++) {
|
|
1273
1560
|
const it = set.styles[i];
|
|
@@ -1285,7 +1572,11 @@ export class RawSet {
|
|
|
1285
1572
|
};
|
|
1286
1573
|
}
|
|
1287
1574
|
|
|
1288
|
-
public static createComponentTargetAttribute(
|
|
1575
|
+
public static createComponentTargetAttribute(
|
|
1576
|
+
name: string,
|
|
1577
|
+
getThisObj: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => any,
|
|
1578
|
+
factory: (element: Element, attrValue: string, obj: any, rawSet: RawSet) => DocumentFragment
|
|
1579
|
+
) {
|
|
1289
1580
|
const targetAttribute: TargetAttr = {
|
|
1290
1581
|
name,
|
|
1291
1582
|
callBack(element: Element, attrValue: string, obj: any, rawSet: RawSet): DocumentFragment {
|
|
@@ -1302,28 +1593,36 @@ export class RawSet {
|
|
|
1302
1593
|
}
|
|
1303
1594
|
return data;
|
|
1304
1595
|
}
|
|
1305
|
-
|
|
1306
1596
|
};
|
|
1307
1597
|
return targetAttribute;
|
|
1308
1598
|
}
|
|
1309
1599
|
|
|
1310
|
-
public static createComponentTargetElement(
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1600
|
+
public static createComponentTargetElement({
|
|
1601
|
+
name,
|
|
1602
|
+
objFactory,
|
|
1603
|
+
template = '',
|
|
1604
|
+
styles = [],
|
|
1605
|
+
noStrip
|
|
1606
|
+
}: {
|
|
1607
|
+
name: string;
|
|
1608
|
+
noStrip?: boolean;
|
|
1609
|
+
objFactory: (element: Element, obj: any, rawSet: RawSet, counstructorParam: any[]) => any;
|
|
1610
|
+
template?: string;
|
|
1611
|
+
styles?: string | string[];
|
|
1612
|
+
}): TargetElement {
|
|
1320
1613
|
const targetElement: TargetElement = {
|
|
1321
1614
|
name,
|
|
1322
1615
|
styles,
|
|
1323
1616
|
template,
|
|
1324
1617
|
noStrip,
|
|
1325
|
-
async callBack(
|
|
1326
|
-
|
|
1618
|
+
async callBack(
|
|
1619
|
+
element: Element,
|
|
1620
|
+
obj: any,
|
|
1621
|
+
rawSet: RawSet,
|
|
1622
|
+
attrs: Attrs,
|
|
1623
|
+
config: DomRenderConfig
|
|
1624
|
+
): Promise<DocumentFragment | undefined> {
|
|
1625
|
+
const templateStyle = await RawSet.fetchTemplateStyle({ template: this.template, styles: this.styles });
|
|
1327
1626
|
this.template = templateStyle.template;
|
|
1328
1627
|
this.styles = templateStyle.styles;
|
|
1329
1628
|
obj.__domrender_components ??= {};
|
|
@@ -1365,21 +1664,24 @@ export class RawSet {
|
|
|
1365
1664
|
const constructor = element.getAttribute(RawSet.DR_ON_CONSTRUCTOR_ARGUMENTS_OPTIONNAME);
|
|
1366
1665
|
let constructorParam = [];
|
|
1367
1666
|
// script 부분은 처리되어 바인딩 시켜준다
|
|
1368
|
-
render.attribute = RawSet.getAttributeObject(element, {script: renderScript, obj: obj, renderData: render})
|
|
1667
|
+
render.attribute = RawSet.getAttributeObject(element, { script: renderScript, obj: obj, renderData: render });
|
|
1369
1668
|
render = Object.freeze(render);
|
|
1370
1669
|
//
|
|
1371
1670
|
// // dr-constructor
|
|
1372
1671
|
if (constructor) {
|
|
1373
|
-
let param =
|
|
1672
|
+
let param =
|
|
1673
|
+
ObjectUtils.Script.evaluateReturn(
|
|
1674
|
+
{ bodyScript: renderScript, returnScript: ObjectUtils.Path.toOptionalChainPath(constructor) },
|
|
1675
|
+
Object.assign(obj, { __render: render })
|
|
1676
|
+
) ?? [];
|
|
1374
1677
|
if (!Array.isArray(param)) {
|
|
1375
1678
|
param = [param];
|
|
1376
1679
|
}
|
|
1377
1680
|
constructorParam = param;
|
|
1378
1681
|
}
|
|
1379
1682
|
|
|
1380
|
-
|
|
1381
1683
|
// // console.log('------22', attrs);
|
|
1382
|
-
const instance = domrenderComponents[rawSet.uuid] = objFactory(element, obj, rawSet, constructorParam);
|
|
1684
|
+
const instance = (domrenderComponents[rawSet.uuid] = objFactory(element, obj, rawSet, constructorParam));
|
|
1383
1685
|
render = {
|
|
1384
1686
|
currentThis: instance,
|
|
1385
1687
|
// creatorMetaData: i,
|
|
@@ -1401,7 +1703,7 @@ export class RawSet {
|
|
|
1401
1703
|
// i.drAttrs = attrs;
|
|
1402
1704
|
// i.innerHTML = element.innerHTML;
|
|
1403
1705
|
// i.rootCreator = new Proxy(obj, new DomRenderFinalProxy());
|
|
1404
|
-
// i.creator = new Proxy(rawSet.point.thisVariableName ?
|
|
1706
|
+
// i.creator = new Proxy(rawSet.point.thisVariableName ? ObjectUtils.Script.evalReturn(rawSet.point.thisVariableName, obj) : obj, new DomRenderFinalProxy());
|
|
1405
1707
|
// this.__creatorMetaData = i;
|
|
1406
1708
|
// render = {
|
|
1407
1709
|
// component: instance,
|
|
@@ -1414,7 +1716,7 @@ export class RawSet {
|
|
|
1414
1716
|
// if (isOnChangeAttrRender(instance) && normalAttrMap) {
|
|
1415
1717
|
// new Map<string, string>(JSON.parse(normalAttrMap)).forEach((value, key) => {
|
|
1416
1718
|
// const script = `${renderScript} return ${value} `;
|
|
1417
|
-
// const cval =
|
|
1719
|
+
// const cval = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));
|
|
1418
1720
|
// // element.setAttribute(key, cval);
|
|
1419
1721
|
// instance.onChangeAttrRender(key, cval);
|
|
1420
1722
|
// });
|
|
@@ -1422,7 +1724,7 @@ export class RawSet {
|
|
|
1422
1724
|
//
|
|
1423
1725
|
// // dr-on-create data
|
|
1424
1726
|
// const onCreateDataScript = `return {rootParent: this, render: this.__render}`;
|
|
1425
|
-
// const onCreateDataParam =
|
|
1727
|
+
// const onCreateDataParam = ObjectUtils.Script.eval(onCreateDataScript, Object.assign(obj, { __render: render }));
|
|
1426
1728
|
// if (isOnCreateRenderData(instance)) {
|
|
1427
1729
|
// instance?.onCreateRenderData(onCreateDataParam);
|
|
1428
1730
|
// }
|
|
@@ -1433,7 +1735,7 @@ export class RawSet {
|
|
|
1433
1735
|
// let createParam = [];
|
|
1434
1736
|
// if (onCreate) {
|
|
1435
1737
|
// const script = `${renderScript} return ${onCreate} `;
|
|
1436
|
-
// createParam =
|
|
1738
|
+
// createParam = ObjectUtils.Script.eval(script, Object.assign(obj, { __render: render }));
|
|
1437
1739
|
// if (!Array.isArray(createParam)) {
|
|
1438
1740
|
// createParam = [createParam];
|
|
1439
1741
|
// }
|
|
@@ -1460,7 +1762,7 @@ export class RawSet {
|
|
|
1460
1762
|
// const oninit = element.getAttribute(RawSet.DR_ON_CREATED_CALLBACK_OPTIONNAME); // dr-on-component-init
|
|
1461
1763
|
// if (oninit) {
|
|
1462
1764
|
// const script = `${renderScript} ${oninit} `;
|
|
1463
|
-
//
|
|
1765
|
+
// ObjectUtils.Script.eval(script, Object.assign(obj, {
|
|
1464
1766
|
// __render: render
|
|
1465
1767
|
// }));
|
|
1466
1768
|
// }
|
|
@@ -1470,7 +1772,15 @@ export class RawSet {
|
|
|
1470
1772
|
|
|
1471
1773
|
// 여기서 targetElement의 옷을 벗긴다.
|
|
1472
1774
|
// console.log('---createComponentTargetElement', element);
|
|
1473
|
-
let data = await RawSet.drThisCreate(
|
|
1775
|
+
let data = await RawSet.drThisCreate(
|
|
1776
|
+
rawSet,
|
|
1777
|
+
element,
|
|
1778
|
+
`this.__domrender_components.${rawSet.uuid}`,
|
|
1779
|
+
'',
|
|
1780
|
+
!noStrip,
|
|
1781
|
+
obj,
|
|
1782
|
+
config
|
|
1783
|
+
);
|
|
1474
1784
|
// const tempDiv = document.createElement("div");
|
|
1475
1785
|
// tempDiv.appendChild(data.cloneNode(true)); // 원본 보존
|
|
1476
1786
|
// console.log('-------------ddddddddddddd', element.innerHTML, tempDiv.innerHTML);
|
|
@@ -1504,7 +1814,12 @@ export class RawSet {
|
|
|
1504
1814
|
return StringUtils.regexExec(reg, data ?? '');
|
|
1505
1815
|
}
|
|
1506
1816
|
|
|
1507
|
-
public static destroy(
|
|
1817
|
+
public static destroy(
|
|
1818
|
+
obj: any | undefined,
|
|
1819
|
+
parameter: OnDestroyRenderParams,
|
|
1820
|
+
config: DomRenderConfig,
|
|
1821
|
+
destroyOptions: (DestroyOptionType | string)[] = []
|
|
1822
|
+
): void {
|
|
1508
1823
|
// console.log('destroy destroydestroydestroydestroy', obj, parameter, config, destroyOptions);
|
|
1509
1824
|
if (!destroyOptions.some(it => it === DestroyOptionType.NO_DESTROY)) {
|
|
1510
1825
|
if (!destroyOptions.some(it => it === DestroyOptionType.NO_MESSENGER_DESTROY)) {
|
|
@@ -1519,13 +1834,12 @@ export class RawSet {
|
|
|
1519
1834
|
}
|
|
1520
1835
|
}
|
|
1521
1836
|
|
|
1522
|
-
|
|
1523
1837
|
public findNearThis = (obj: any, rawSet: RawSet = this) => {
|
|
1524
1838
|
const path = this.findNearThisPath(rawSet);
|
|
1525
1839
|
if (path) {
|
|
1526
1840
|
const optionalPath = ObjectUtils.Path.toOptionalChainPath(path);
|
|
1527
1841
|
// console.log('ppppp-', path, optionalPath)
|
|
1528
|
-
return
|
|
1842
|
+
return ObjectUtils.Script.evaluateReturn(optionalPath, obj);
|
|
1529
1843
|
}
|
|
1530
1844
|
};
|
|
1531
1845
|
|
|
@@ -1533,7 +1847,7 @@ export class RawSet {
|
|
|
1533
1847
|
const path = this.findParentThisPath(rawSet);
|
|
1534
1848
|
if (path) {
|
|
1535
1849
|
const optionalPath = ObjectUtils.Path.toOptionalChainPath(path);
|
|
1536
|
-
return
|
|
1850
|
+
return ObjectUtils.Script.evaluateReturn(optionalPath, obj);
|
|
1537
1851
|
}
|
|
1538
1852
|
};
|
|
1539
1853
|
|
|
@@ -1552,11 +1866,10 @@ export class RawSet {
|
|
|
1552
1866
|
const findPath = (rawSet: RawSet) => {
|
|
1553
1867
|
if (rawSet && rawSet.point) {
|
|
1554
1868
|
// jsDom에서 instranceof HTMLMetaElement가 안먹히는것같아? 간혈적으로?
|
|
1555
|
-
if ('getAttribute' in rawSet.point.start && rawSet.point.start.getAttribute('this-path')) {
|
|
1869
|
+
if (rawSet.point?.start && ('getAttribute' in rawSet.point.start) && rawSet.point.start.getAttribute('this-path')) {
|
|
1556
1870
|
paths.push(rawSet.point.start.getAttribute('this-path')!);
|
|
1557
1871
|
}
|
|
1558
|
-
if (rawSet.point.parentRawSet)
|
|
1559
|
-
findPath(rawSet.point.parentRawSet);
|
|
1872
|
+
if (rawSet.point.parentRawSet) findPath(rawSet.point.parentRawSet);
|
|
1560
1873
|
}
|
|
1561
1874
|
};
|
|
1562
1875
|
findPath(rawSet);
|
|
@@ -1564,7 +1877,7 @@ export class RawSet {
|
|
|
1564
1877
|
return paths.reverse();
|
|
1565
1878
|
};
|
|
1566
1879
|
|
|
1567
|
-
public static getAttributeObject(element: Element, config: { script: string
|
|
1880
|
+
public static getAttributeObject(element: Element, config: { script: string; obj: any; renderData?: any }) {
|
|
1568
1881
|
if (!element) {
|
|
1569
1882
|
return undefined;
|
|
1570
1883
|
}
|
|
@@ -1572,11 +1885,13 @@ export class RawSet {
|
|
|
1572
1885
|
const normalAttribute = attribute[EventManager.normalAttrMapAttrName];
|
|
1573
1886
|
if (normalAttribute) {
|
|
1574
1887
|
new Map<string, string>(JSON.parse(normalAttribute)).forEach((v, k) => {
|
|
1575
|
-
const cval =
|
|
1888
|
+
const cval = ObjectUtils.Script.evaluateReturn(
|
|
1889
|
+
{ bodyScript: config.script, returnScript: v },
|
|
1890
|
+
Object.assign(config.obj, config.renderData ? { __render: config.renderData } : undefined)
|
|
1891
|
+
);
|
|
1576
1892
|
attribute[k] = cval;
|
|
1577
1893
|
});
|
|
1578
1894
|
}
|
|
1579
1895
|
return attribute;
|
|
1580
1896
|
}
|
|
1581
|
-
|
|
1582
1897
|
}
|