@reidelsaltres/pureper 0.1.163 → 0.1.168
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/out/foundation/Triplet.d.ts.map +1 -1
- package/out/foundation/Triplet.js +5 -4
- package/out/foundation/Triplet.js.map +1 -1
- package/out/foundation/component_api/Component.d.ts +2 -2
- package/out/foundation/component_api/Component.d.ts.map +1 -1
- package/out/foundation/component_api/Component.js.map +1 -1
- package/out/foundation/component_api/UniHtml.d.ts +10 -4
- package/out/foundation/component_api/UniHtml.d.ts.map +1 -1
- package/out/foundation/component_api/UniHtml.js +15 -7
- package/out/foundation/component_api/UniHtml.js.map +1 -1
- package/out/foundation/engine/TemplateEngine.d.ts +4 -93
- package/out/foundation/engine/TemplateEngine.d.ts.map +1 -1
- package/out/foundation/engine/TemplateEngine.js +44 -221
- package/out/foundation/engine/TemplateEngine.js.map +1 -1
- package/out/foundation/engine/TemplateEngine.old.d.ts +96 -0
- package/out/foundation/engine/TemplateEngine.old.d.ts.map +1 -0
- package/out/foundation/engine/TemplateEngine.old.js +235 -0
- package/out/foundation/engine/TemplateEngine.old.js.map +1 -0
- package/out/foundation/worker/Router.js +1 -1
- package/out/foundation/worker/Router.js.map +1 -1
- package/package.json +1 -1
- package/src/foundation/Triplet.ts +6 -6
- package/src/foundation/component_api/Component.ts +1 -2
- package/src/foundation/component_api/UniHtml.ts +22 -12
- package/src/foundation/engine/TemplateEngine.old.ts +318 -0
- package/src/foundation/engine/TemplateEngine.ts +49 -299
- package/src/foundation/worker/Router.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../../src/foundation/engine/TemplateEngine.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../../src/foundation/engine/TemplateEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import Scope from './Scope.js';
|
|
2
|
+
import Expression from './Expression.js';
|
|
3
|
+
import TemplateInstance, { TemplateSection } from './TemplateInstance.js';
|
|
4
|
+
import Rule, { SyntaxRule, AttributeRule } from './Rule.js';
|
|
5
|
+
import Observable from '../api/Observer.js';
|
|
6
|
+
import ExpressionRule from './rules/syntax/ExpressionRule.js';
|
|
7
|
+
import IfRule from './rules/syntax/IfRule.js';
|
|
8
|
+
import ForRule from './rules/syntax/ForRule.js';
|
|
9
|
+
import RefRule from './rules/attribute/RefRule.js';
|
|
10
|
+
import EventRule from './rules/attribute/EventRule.js';
|
|
11
|
+
import InjectionRule from './rules/attribute/InjectionRule.js';
|
|
12
|
+
/**
|
|
13
|
+
* TemplateEngineOptions - настройки TemplateEngine
|
|
14
|
+
*/
|
|
15
|
+
export interface TemplateEngineOptions {
|
|
16
|
+
/** Оставлять синтаксис атрибутивных Rule в финальном HTML */
|
|
17
|
+
showAttributeRule?: boolean;
|
|
18
|
+
/** Включить предупреждения отладки */
|
|
19
|
+
debugWarnings?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* ProcessResult - результат обработки шаблона
|
|
23
|
+
*/
|
|
24
|
+
export interface ProcessResult {
|
|
25
|
+
output: string;
|
|
26
|
+
observables: Observable<any>[];
|
|
27
|
+
sections: TemplateSection[];
|
|
28
|
+
/** ID созданного фрагмента (если был создан) */
|
|
29
|
+
fragmentId?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* TemplateEngine - главный класс шаблонизатора.
|
|
33
|
+
* Обрабатывает HTML-шаблон с Rule и создаёт TemplateInstance.
|
|
34
|
+
*/
|
|
35
|
+
export default class TemplateEngine {
|
|
36
|
+
private readonly scope;
|
|
37
|
+
private readonly options;
|
|
38
|
+
private readonly syntaxRules;
|
|
39
|
+
private readonly attributeRules;
|
|
40
|
+
constructor(scope: Scope | object, options?: TemplateEngineOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Зарегистрировать стандартные правила
|
|
43
|
+
*/
|
|
44
|
+
private registerDefaultRules;
|
|
45
|
+
/**
|
|
46
|
+
* Добавить пользовательское правило
|
|
47
|
+
*/
|
|
48
|
+
addRule(rule: Rule): void;
|
|
49
|
+
/**
|
|
50
|
+
* Получить Scope
|
|
51
|
+
*/
|
|
52
|
+
getScope(): Scope;
|
|
53
|
+
/**
|
|
54
|
+
* Обработать шаблон и вернуть TemplateInstance
|
|
55
|
+
*/
|
|
56
|
+
parse(template: string): TemplateInstance;
|
|
57
|
+
/**
|
|
58
|
+
* Обработать шаблон с созданием фрагментов
|
|
59
|
+
*/
|
|
60
|
+
private processTemplateWithFragments;
|
|
61
|
+
/**
|
|
62
|
+
* Обработать шаблон (внутренний метод, используется Rule для рекурсии)
|
|
63
|
+
*/
|
|
64
|
+
processTemplate(template: string, scope: Scope): ProcessResult;
|
|
65
|
+
/**
|
|
66
|
+
* Обработать одно правило
|
|
67
|
+
*/
|
|
68
|
+
private processRule;
|
|
69
|
+
/**
|
|
70
|
+
* Удалить синтаксис атрибутивных Rule из финального HTML
|
|
71
|
+
*/
|
|
72
|
+
private removeAttributeSyntax;
|
|
73
|
+
/**
|
|
74
|
+
* Добавить новый шаблон в существующий TemplateInstance.
|
|
75
|
+
* Обрабатывает шаблон и добавляет результат как новый фрагмент.
|
|
76
|
+
* Если instance привязан к контейнерам, DOM обновится автоматически.
|
|
77
|
+
*
|
|
78
|
+
* @param instance - существующий TemplateInstance
|
|
79
|
+
* @param template - новый шаблон для добавления
|
|
80
|
+
* @param customScope - опциональный scope для нового шаблона
|
|
81
|
+
* @returns ID созданного фрагмента
|
|
82
|
+
*/
|
|
83
|
+
appendTemplate(instance: TemplateInstance, template: string, customScope?: Scope | object): string;
|
|
84
|
+
/**
|
|
85
|
+
* Статический метод для быстрой обработки
|
|
86
|
+
*/
|
|
87
|
+
static process(template: string, scope: object, options?: TemplateEngineOptions): string;
|
|
88
|
+
/**
|
|
89
|
+
* Создать TemplateInstance из шаблона
|
|
90
|
+
*/
|
|
91
|
+
static create(template: string, scope: object, options?: TemplateEngineOptions): TemplateInstance;
|
|
92
|
+
}
|
|
93
|
+
export { Scope, Expression, TemplateInstance, Rule, SyntaxRule, AttributeRule };
|
|
94
|
+
export { ExpressionRule, IfRule, ForRule, RefRule, EventRule, InjectionRule };
|
|
95
|
+
export * from './exceptions/TemplateExceptions.js';
|
|
96
|
+
//# sourceMappingURL=TemplateEngine.old.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateEngine.old.d.ts","sourceRoot":"","sources":["../../../src/foundation/engine/TemplateEngine.old.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAEzC,OAAO,gBAAgB,EAAE,EAAE,eAAe,EAAmB,MAAM,uBAAuB,CAAC;AAC3F,OAAO,IAAI,EAAE,EAAyB,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAG5C,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAC9D,OAAO,MAAM,MAAM,0BAA0B,CAAC;AAC9C,OAAO,OAAO,MAAM,2BAA2B,CAAC;AAChD,OAAO,OAAO,MAAM,8BAA8B,CAAC;AACnD,OAAO,SAAS,MAAM,gCAAgC,CAAC;AACvD,OAAO,aAAa,MAAM,oCAAoC,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,6DAA6D;IAC7D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;gBAE1C,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAYlE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAgB5B;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAUhC;;OAEG;IACI,QAAQ,IAAI,KAAK;IAIxB;;OAEG;IACI,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB;IAwBhD;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAsBpC;;OAEG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,aAAa;IAyCrE;;OAEG;IACH,OAAO,CAAC,WAAW;IA8CnB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;;;;;;OASG;IACI,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM;IAiCzG;;OAEG;WACW,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM;IAM/F;;OAEG;WACW,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,gBAAgB;CAI3G;AAGD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAC9E,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import Scope from './Scope.js';
|
|
2
|
+
import Expression from './Expression.js';
|
|
3
|
+
import EscapeHandler from './EscapeHandler.js';
|
|
4
|
+
import TemplateInstance from './TemplateInstance.js';
|
|
5
|
+
import Rule, { SyntaxRule, AttributeRule } from './Rule.js';
|
|
6
|
+
// Import rules
|
|
7
|
+
import ExpressionRule from './rules/syntax/ExpressionRule.js';
|
|
8
|
+
import IfRule from './rules/syntax/IfRule.js';
|
|
9
|
+
import ForRule from './rules/syntax/ForRule.js';
|
|
10
|
+
import RefRule from './rules/attribute/RefRule.js';
|
|
11
|
+
import EventRule from './rules/attribute/EventRule.js';
|
|
12
|
+
import InjectionRule from './rules/attribute/InjectionRule.js';
|
|
13
|
+
/**
|
|
14
|
+
* TemplateEngine - главный класс шаблонизатора.
|
|
15
|
+
* Обрабатывает HTML-шаблон с Rule и создаёт TemplateInstance.
|
|
16
|
+
*/
|
|
17
|
+
export default class TemplateEngine {
|
|
18
|
+
scope;
|
|
19
|
+
options;
|
|
20
|
+
syntaxRules = [];
|
|
21
|
+
attributeRules = [];
|
|
22
|
+
constructor(scope, options) {
|
|
23
|
+
this.scope = scope instanceof Scope ? scope : Scope.from(scope);
|
|
24
|
+
this.options = {
|
|
25
|
+
showAttributeRule: false,
|
|
26
|
+
debugWarnings: true,
|
|
27
|
+
...options
|
|
28
|
+
};
|
|
29
|
+
// Register default rules (sorted by priority)
|
|
30
|
+
this.registerDefaultRules();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Зарегистрировать стандартные правила
|
|
34
|
+
*/
|
|
35
|
+
registerDefaultRules() {
|
|
36
|
+
// Syntax rules
|
|
37
|
+
this.syntaxRules.push(new ForRule());
|
|
38
|
+
this.syntaxRules.push(new IfRule());
|
|
39
|
+
this.syntaxRules.push(new ExpressionRule());
|
|
40
|
+
// Attribute rules
|
|
41
|
+
this.attributeRules.push(new RefRule());
|
|
42
|
+
this.attributeRules.push(new EventRule());
|
|
43
|
+
this.attributeRules.push(new InjectionRule());
|
|
44
|
+
// Sort by priority
|
|
45
|
+
this.syntaxRules.sort((a, b) => a.priority - b.priority);
|
|
46
|
+
this.attributeRules.sort((a, b) => a.priority - b.priority);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Добавить пользовательское правило
|
|
50
|
+
*/
|
|
51
|
+
addRule(rule) {
|
|
52
|
+
if (rule.type === 'syntax') {
|
|
53
|
+
this.syntaxRules.push(rule);
|
|
54
|
+
this.syntaxRules.sort((a, b) => a.priority - b.priority);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.attributeRules.push(rule);
|
|
58
|
+
this.attributeRules.sort((a, b) => a.priority - b.priority);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Получить Scope
|
|
63
|
+
*/
|
|
64
|
+
getScope() {
|
|
65
|
+
return this.scope;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Обработать шаблон и вернуть TemplateInstance
|
|
69
|
+
*/
|
|
70
|
+
parse(template) {
|
|
71
|
+
const templateInstance = new TemplateInstance(this.scope);
|
|
72
|
+
const result = this.processTemplateWithFragments(template, this.scope, templateInstance, null);
|
|
73
|
+
// Устанавливаем корневой фрагмент
|
|
74
|
+
if (result.fragmentId) {
|
|
75
|
+
templateInstance.setRootFragment(result.fragmentId);
|
|
76
|
+
}
|
|
77
|
+
// Add sections and track observables
|
|
78
|
+
for (const section of result.sections) {
|
|
79
|
+
templateInstance.addSection(section);
|
|
80
|
+
// Track observables
|
|
81
|
+
for (const observable of section.result.observables || []) {
|
|
82
|
+
templateInstance.trackObservable(observable, section, (s) => {
|
|
83
|
+
return this.processTemplate(s.sourceTemplate, this.scope);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return templateInstance;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Обработать шаблон с созданием фрагментов
|
|
91
|
+
*/
|
|
92
|
+
processTemplateWithFragments(template, scope, instance, parentFragmentId) {
|
|
93
|
+
const result = this.processTemplate(template, scope);
|
|
94
|
+
// Создаём фрагмент для этого результата
|
|
95
|
+
const fragmentId = instance.createFragment(result.output, template, result.sections, parentFragmentId);
|
|
96
|
+
return {
|
|
97
|
+
...result,
|
|
98
|
+
fragmentId
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Обработать шаблон (внутренний метод, используется Rule для рекурсии)
|
|
103
|
+
*/
|
|
104
|
+
processTemplate(template, scope) {
|
|
105
|
+
const allObservables = [];
|
|
106
|
+
const allSections = [];
|
|
107
|
+
// Step 1: Handle @@ escape sequences
|
|
108
|
+
let processed = EscapeHandler.process(template, (escaped) => {
|
|
109
|
+
let result = escaped;
|
|
110
|
+
// Step 2: Process syntax rules (in priority order)
|
|
111
|
+
for (const rule of this.syntaxRules) {
|
|
112
|
+
result = this.processRule(rule, result, scope, allObservables, allSections);
|
|
113
|
+
}
|
|
114
|
+
// Step 3: Process attribute rules
|
|
115
|
+
for (const rule of this.attributeRules) {
|
|
116
|
+
// Skip injection - processed last
|
|
117
|
+
if (rule.name === 'injection')
|
|
118
|
+
continue;
|
|
119
|
+
result = this.processRule(rule, result, scope, allObservables, allSections);
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
});
|
|
123
|
+
// Step 4: Process injection rules last
|
|
124
|
+
const injectionRule = this.attributeRules.find(r => r.name === 'injection');
|
|
125
|
+
if (injectionRule) {
|
|
126
|
+
processed = this.processRule(injectionRule, processed, scope, allObservables, allSections);
|
|
127
|
+
}
|
|
128
|
+
// Step 5: Handle showAttributeRule option
|
|
129
|
+
if (!this.options.showAttributeRule) {
|
|
130
|
+
processed = this.removeAttributeSyntax(processed);
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
output: processed,
|
|
134
|
+
observables: allObservables,
|
|
135
|
+
sections: allSections
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Обработать одно правило
|
|
140
|
+
*/
|
|
141
|
+
processRule(rule, template, scope, observables, sections) {
|
|
142
|
+
const matches = rule.find(template);
|
|
143
|
+
// Sort matches by position (reverse to process from end)
|
|
144
|
+
matches.sort((a, b) => b.start - a.start);
|
|
145
|
+
let result = template;
|
|
146
|
+
for (const match of matches) {
|
|
147
|
+
try {
|
|
148
|
+
const ruleResult = rule.execute(match, scope, this);
|
|
149
|
+
// Track observables
|
|
150
|
+
if (ruleResult.observables) {
|
|
151
|
+
observables.push(...ruleResult.observables);
|
|
152
|
+
}
|
|
153
|
+
// Create section
|
|
154
|
+
const section = {
|
|
155
|
+
rule,
|
|
156
|
+
match,
|
|
157
|
+
result: ruleResult,
|
|
158
|
+
sourceTemplate: match.fullMatch,
|
|
159
|
+
children: [],
|
|
160
|
+
subscriptions: []
|
|
161
|
+
};
|
|
162
|
+
sections.push(section);
|
|
163
|
+
// Replace in template
|
|
164
|
+
result = result.slice(0, match.start) + ruleResult.output + result.slice(match.end);
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
console.error(`[TemplateEngine] Error processing rule "${rule.name}":`, error);
|
|
168
|
+
// Continue processing other rules
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Удалить синтаксис атрибутивных Rule из финального HTML
|
|
175
|
+
*/
|
|
176
|
+
removeAttributeSyntax(template) {
|
|
177
|
+
// Remove @[ref], @on[...], @injection[...] patterns that weren't processed
|
|
178
|
+
return template
|
|
179
|
+
.replace(/@\[ref\]\s*=\s*["'][^"']*["']/gi, '')
|
|
180
|
+
.replace(/@on\[[a-zA-Z]+\]\s*=\s*["'][^"']*["']/gi, '')
|
|
181
|
+
.replace(/@injection\[(head|tail)\]\s*=\s*["'][^"']*["']/gi, '');
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Добавить новый шаблон в существующий TemplateInstance.
|
|
185
|
+
* Обрабатывает шаблон и добавляет результат как новый фрагмент.
|
|
186
|
+
* Если instance привязан к контейнерам, DOM обновится автоматически.
|
|
187
|
+
*
|
|
188
|
+
* @param instance - существующий TemplateInstance
|
|
189
|
+
* @param template - новый шаблон для добавления
|
|
190
|
+
* @param customScope - опциональный scope для нового шаблона
|
|
191
|
+
* @returns ID созданного фрагмента
|
|
192
|
+
*/
|
|
193
|
+
appendTemplate(instance, template, customScope) {
|
|
194
|
+
const scope = customScope
|
|
195
|
+
? (customScope instanceof Scope ? customScope : Scope.from(customScope))
|
|
196
|
+
: instance.getScope();
|
|
197
|
+
// Обрабатываем шаблон
|
|
198
|
+
const result = this.processTemplate(template, scope);
|
|
199
|
+
// Создаём фрагмент
|
|
200
|
+
const fragmentId = instance.createFragment(result.output, template, result.sections, null // без родителя - это отдельный фрагмент
|
|
201
|
+
);
|
|
202
|
+
// Добавляем секции и отслеживаем Observable
|
|
203
|
+
for (const section of result.sections) {
|
|
204
|
+
instance.addSection(section);
|
|
205
|
+
for (const observable of section.result.observables || []) {
|
|
206
|
+
instance.trackObservable(observable, section, (s) => {
|
|
207
|
+
return this.processTemplate(s.sourceTemplate, scope);
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Вставляем в привязанные контейнеры
|
|
212
|
+
instance.insertAppendedFragment(fragmentId);
|
|
213
|
+
return fragmentId;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Статический метод для быстрой обработки
|
|
217
|
+
*/
|
|
218
|
+
static process(template, scope, options) {
|
|
219
|
+
const engine = new TemplateEngine(scope, options);
|
|
220
|
+
const TemplateInstance = engine.parse(template);
|
|
221
|
+
return TemplateInstance.getTemplate();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Создать TemplateInstance из шаблона
|
|
225
|
+
*/
|
|
226
|
+
static create(template, scope, options) {
|
|
227
|
+
const engine = new TemplateEngine(scope, options);
|
|
228
|
+
return engine.parse(template);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
// Re-export useful types
|
|
232
|
+
export { Scope, Expression, TemplateInstance, Rule, SyntaxRule, AttributeRule };
|
|
233
|
+
export { ExpressionRule, IfRule, ForRule, RefRule, EventRule, InjectionRule };
|
|
234
|
+
export * from './exceptions/TemplateExceptions.js';
|
|
235
|
+
//# sourceMappingURL=TemplateEngine.old.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateEngine.old.js","sourceRoot":"","sources":["../../../src/foundation/engine/TemplateEngine.old.ts"],"names":[],"mappings":"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"}
|
|
@@ -48,7 +48,7 @@ export class Router {
|
|
|
48
48
|
const page = this.createPage(found, urlH.searchParams);
|
|
49
49
|
page.load(document.getElementById('page'));
|
|
50
50
|
if (pushState && typeof window !== "undefined" && window.location) {
|
|
51
|
-
window.history.pushState(
|
|
51
|
+
window.history.pushState({}, '', urlH.href);
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../../../src/foundation/worker/Router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,OAAO,MAAM,eAAe,CAAC;AASpC,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,iDAAO,CAAA;IACP,+CAAM,CAAA;IACN,2CAAI,CAAA;AACN,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AAED,MAAM,CAAC,MAAM,MAAM,GAAY,EAAE,CAAC;AAClC,MAAM,CAAC,MAAM,QAAQ,GAAa,EAAE,CAAC;AAErC,MAAM,OAAgB,MAAM;IACnB,MAAM,CAAC,kBAAkB,CAAC,GAAQ;QACvC,IAAI,CAAC;YACH,cAAc,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IACM,MAAM,CAAC,iBAAiB;QAC7B,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACM,MAAM,CAAC,mBAAmB;QAC/B,IAAI,CAAC;YACH,cAAc,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,KAAa;QACvC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,GAAQ,EAAE,YAAqB,IAAI;QAC1D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,KAAK,GAAU,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAY,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEhE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAE,CAAC,CAAC;YAC5C,IAAI,SAAS,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBAClE,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../../../src/foundation/worker/Router.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -6,7 +6,6 @@ import Page from "./component_api/Page.js";
|
|
|
6
6
|
import Component from "./component_api/Component.js";
|
|
7
7
|
import { AnyConstructor, Constructor } from "./component_api/mixin/Proto.js";
|
|
8
8
|
import HMLEParser from "./HMLEParser.js";
|
|
9
|
-
import TemplateEngine, { TemplateInstance } from './engine/TemplateEngine.js';
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
export enum AccessType {
|
|
@@ -155,15 +154,15 @@ export default class Triplet {
|
|
|
155
154
|
}
|
|
156
155
|
};
|
|
157
156
|
let proto = ori.prototype as any;
|
|
158
|
-
const
|
|
157
|
+
const parser = new HMLEParser();
|
|
159
158
|
|
|
160
|
-
proto._init = async function (): Promise<
|
|
159
|
+
proto._init = async function (): Promise<DocumentFragment> {
|
|
161
160
|
const markupText = await that.markup;
|
|
162
|
-
if (!markupText) return
|
|
163
|
-
return
|
|
161
|
+
if (!markupText) return new DocumentFragment();
|
|
162
|
+
return parser.parseToDOM(markupText, this);
|
|
164
163
|
}
|
|
165
164
|
|
|
166
|
-
proto._postInit = async function (preHtml:
|
|
165
|
+
proto._postInit = async function (preHtml: DocumentFragment): Promise<DocumentFragment> {
|
|
167
166
|
const dmc: Document | ShadowRoot = this.shadowRoot ?? document;
|
|
168
167
|
const css = await that.css;
|
|
169
168
|
|
|
@@ -173,6 +172,7 @@ export default class Triplet {
|
|
|
173
172
|
style
|
|
174
173
|
];
|
|
175
174
|
|
|
175
|
+
//parser.hydrate(preHtml, this);
|
|
176
176
|
return preHtml;
|
|
177
177
|
}
|
|
178
178
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import IElementHolder from "../api/ElementHolder.js";
|
|
2
2
|
import UniHtml from "../component_api/UniHtml.js";
|
|
3
|
-
import { TemplateInstance } from "../engine/TemplateEngine.js";
|
|
4
3
|
import Attribute from "./Attribute.js";
|
|
5
4
|
import { Class, Mixined } from "./mixin/Proto.js";
|
|
6
5
|
|
|
@@ -57,7 +56,7 @@ export default class Component extends Class(HTMLElement).extend(UniHtml).build(
|
|
|
57
56
|
|
|
58
57
|
this.load(this.shadowRoot);
|
|
59
58
|
}
|
|
60
|
-
protected render(element:
|
|
59
|
+
protected render(element: IElementHolder, renderTarget: HTMLElement | ShadowRoot): Promise<void> {
|
|
61
60
|
(this.getMixin(UniHtml)?.instance.get() as any).render(element, renderTarget);
|
|
62
61
|
//super.render(element, renderTarget);
|
|
63
62
|
//this.shadowRoot!.appendChild(renderTarget);
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* Designed to replace legacy Page and Component base classes.
|
|
7
7
|
*/
|
|
8
8
|
import IElementHolder from "../api/ElementHolder.js";
|
|
9
|
-
import { TemplateInstance } from "../engine/TemplateEngine.js";
|
|
10
9
|
|
|
11
10
|
|
|
12
11
|
/**
|
|
@@ -14,6 +13,7 @@ import { TemplateInstance } from "../engine/TemplateEngine.js";
|
|
|
14
13
|
* Use static factory methods for instantiation.
|
|
15
14
|
*/
|
|
16
15
|
export default class UniHtml {
|
|
16
|
+
|
|
17
17
|
/**
|
|
18
18
|
* Unified component lifecycle entrypoint.
|
|
19
19
|
* Loads HTML, then calls preLoadJS, render, and postLoadJS hooks in order.
|
|
@@ -21,27 +21,30 @@ export default class UniHtml {
|
|
|
21
21
|
*/
|
|
22
22
|
public async load(element: HTMLElement | ShadowRoot): Promise<void> {;
|
|
23
23
|
await this.preInit();
|
|
24
|
-
const preHtml:
|
|
25
|
-
const html:
|
|
24
|
+
const preHtml: DocumentFragment = await this._init();
|
|
25
|
+
const html: DocumentFragment = await this._postInit(preHtml);
|
|
26
26
|
|
|
27
|
+
const localRoot = html;
|
|
28
|
+
|
|
29
|
+
const holder : IElementHolder = { element: localRoot };
|
|
27
30
|
|
|
28
31
|
// ВАЖНО: preLoad() вызывается ДО монтирования в DOM/Shadow DOM.
|
|
29
32
|
// Для компонентов (UniHtmlComponent) на этом этапе ещё нельзя полагаться на this.shadowRoot —
|
|
30
33
|
// используйте переданный localRoot для подготовки DOM, данных и навешивания обработчиков.
|
|
31
34
|
// Это предпочтительный этап инициализации для компонентов.
|
|
32
|
-
await this.preLoad(
|
|
35
|
+
await this.preLoad(holder);
|
|
33
36
|
// render() отвечает за помещение содержимого из localRoot в конечную цель (renderTarget).
|
|
34
37
|
// В UniHtmlComponent.render() после вызова базового render() происходит добавление wrapper в shadowRoot.
|
|
35
|
-
await this.render(
|
|
38
|
+
await this.render(holder, element);
|
|
36
39
|
// postLoad() вызывается ПОСЛЕ render(). Для компонентов к этому моменту содержимое уже добавлено
|
|
37
40
|
// внутрь shadowRoot, и можно безопасно работать с this.shadowRoot, измерениями layout и т.п.
|
|
38
|
-
await this.postLoad(
|
|
41
|
+
await this.postLoad(holder);
|
|
39
42
|
}
|
|
40
43
|
|
|
41
|
-
private async _postInit(html:
|
|
44
|
+
private async _postInit(html: DocumentFragment): Promise<DocumentFragment> {
|
|
42
45
|
throw new Error("Method not implemented.");
|
|
43
46
|
}
|
|
44
|
-
private async _init(): Promise<
|
|
47
|
+
private async _init(): Promise<DocumentFragment> {
|
|
45
48
|
throw new Error("Method not implemented.");
|
|
46
49
|
}
|
|
47
50
|
|
|
@@ -52,27 +55,34 @@ export default class UniHtml {
|
|
|
52
55
|
* РЕКОМЕНДАЦИЯ: предпочитайте выполнять основную подготовку, поиск элементов, навешивание обработчиков
|
|
53
56
|
* на узлы из localRoot именно здесь; затем render() вставит их в целевой контейнер/теневой DOM.
|
|
54
57
|
*/
|
|
55
|
-
protected async preLoad(
|
|
58
|
+
protected async preLoad(holder : IElementHolder) { }
|
|
56
59
|
/**
|
|
57
60
|
* Hook after rendering (e.g., event binding).
|
|
58
61
|
* Для компонентов вызывается после того, как содержимое вставлено в shadowRoot (см. UniHtmlComponent.render()).
|
|
59
62
|
* Используйте этот этап только когда необходим доступ к реально смонтированному DOM (layout/measurements,
|
|
60
63
|
* интеграции, требующие присутствия в документе). В остальных случаях предпочитайте preLoad().
|
|
61
64
|
*/
|
|
62
|
-
protected async postLoad(
|
|
65
|
+
protected async postLoad(holder: IElementHolder) { }
|
|
63
66
|
/**
|
|
64
67
|
* Main rendering step. By default, simply inserts HTML into the container.
|
|
65
68
|
* Override in subclasses for custom rendering logic.
|
|
66
69
|
* @param element Target container
|
|
67
70
|
* @param html HTML content
|
|
68
71
|
*/
|
|
69
|
-
protected async render(
|
|
72
|
+
protected async render(holder: IElementHolder, renderTarget: HTMLElement | DocumentFragment): Promise<void> {
|
|
70
73
|
// Clear renderTarget
|
|
71
74
|
while (renderTarget.firstChild) {
|
|
72
75
|
renderTarget.removeChild(renderTarget.firstChild);
|
|
73
76
|
}
|
|
74
|
-
|
|
77
|
+
|
|
78
|
+
// Move all children from holder.element to renderTarget
|
|
79
|
+
const children = Array.from(holder.element.childNodes);
|
|
80
|
+
for (const child of children) {
|
|
81
|
+
renderTarget.appendChild(child);
|
|
82
|
+
}
|
|
75
83
|
|
|
84
|
+
// Update holder to point to renderTarget (now contains the content)
|
|
85
|
+
(holder as { element: HTMLElement | DocumentFragment }).element = renderTarget;
|
|
76
86
|
return Promise.resolve();
|
|
77
87
|
}
|
|
78
88
|
}
|