@reidelsaltres/pureper 0.1.157 → 0.1.162
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 +4 -5
- package/out/foundation/Triplet.js.map +1 -1
- package/out/foundation/api/Observer.d.ts +30 -0
- package/out/foundation/api/Observer.d.ts.map +1 -1
- package/out/foundation/api/Observer.js +48 -0
- package/out/foundation/api/Observer.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 +4 -10
- package/out/foundation/component_api/UniHtml.d.ts.map +1 -1
- package/out/foundation/component_api/UniHtml.js +7 -15
- package/out/foundation/component_api/UniHtml.js.map +1 -1
- package/out/foundation/engine/BalancedParser.d.ts +58 -0
- package/out/foundation/engine/BalancedParser.d.ts.map +1 -0
- package/out/foundation/engine/BalancedParser.js +301 -0
- package/out/foundation/engine/BalancedParser.js.map +1 -0
- package/out/foundation/engine/EscapeHandler.d.ts +27 -0
- package/out/foundation/engine/EscapeHandler.d.ts.map +1 -0
- package/out/foundation/engine/EscapeHandler.js +47 -0
- package/out/foundation/engine/EscapeHandler.js.map +1 -0
- package/out/foundation/engine/Expression.d.ts +83 -0
- package/out/foundation/engine/Expression.d.ts.map +1 -0
- package/out/foundation/engine/Expression.js +256 -0
- package/out/foundation/engine/Expression.js.map +1 -0
- package/out/foundation/engine/Rule.d.ts +85 -0
- package/out/foundation/engine/Rule.d.ts.map +1 -0
- package/out/foundation/engine/Rule.js +69 -0
- package/out/foundation/engine/Rule.js.map +1 -0
- package/out/foundation/engine/Scope.d.ts +61 -0
- package/out/foundation/engine/Scope.d.ts.map +1 -0
- package/out/foundation/engine/Scope.js +156 -0
- package/out/foundation/engine/Scope.js.map +1 -0
- package/out/foundation/engine/TemplateEngine.d.ts +96 -0
- package/out/foundation/engine/TemplateEngine.d.ts.map +1 -0
- package/out/foundation/engine/TemplateEngine.js +235 -0
- package/out/foundation/engine/TemplateEngine.js.map +1 -0
- package/out/foundation/engine/TemplateInstance.d.ts +241 -0
- package/out/foundation/engine/TemplateInstance.d.ts.map +1 -0
- package/out/foundation/engine/TemplateInstance.js +637 -0
- package/out/foundation/engine/TemplateInstance.js.map +1 -0
- package/out/foundation/engine/TemplateInstance.old.d.ts +219 -0
- package/out/foundation/engine/TemplateInstance.old.d.ts.map +1 -0
- package/out/foundation/engine/TemplateInstance.old.js +487 -0
- package/out/foundation/engine/TemplateInstance.old.js.map +1 -0
- package/out/foundation/engine/exceptions/TemplateExceptions.d.ts +21 -0
- package/out/foundation/engine/exceptions/TemplateExceptions.d.ts.map +1 -0
- package/out/foundation/engine/exceptions/TemplateExceptions.js +26 -0
- package/out/foundation/engine/exceptions/TemplateExceptions.js.map +1 -0
- package/out/foundation/engine/index.d.ts +18 -0
- package/out/foundation/engine/index.d.ts.map +1 -0
- package/out/foundation/engine/index.js +19 -0
- package/out/foundation/engine/index.js.map +1 -0
- package/out/foundation/engine/rules/attribute/EventRule.d.ts +22 -0
- package/out/foundation/engine/rules/attribute/EventRule.d.ts.map +1 -0
- package/out/foundation/engine/rules/attribute/EventRule.js +129 -0
- package/out/foundation/engine/rules/attribute/EventRule.js.map +1 -0
- package/out/foundation/engine/rules/attribute/InjectionRule.d.ts +20 -0
- package/out/foundation/engine/rules/attribute/InjectionRule.d.ts.map +1 -0
- package/out/foundation/engine/rules/attribute/InjectionRule.js +108 -0
- package/out/foundation/engine/rules/attribute/InjectionRule.js.map +1 -0
- package/out/foundation/engine/rules/attribute/RefRule.d.ts +23 -0
- package/out/foundation/engine/rules/attribute/RefRule.d.ts.map +1 -0
- package/out/foundation/engine/rules/attribute/RefRule.js +104 -0
- package/out/foundation/engine/rules/attribute/RefRule.js.map +1 -0
- package/out/foundation/engine/rules/syntax/ExpressionRule.d.ts +19 -0
- package/out/foundation/engine/rules/syntax/ExpressionRule.d.ts.map +1 -0
- package/out/foundation/engine/rules/syntax/ExpressionRule.js +82 -0
- package/out/foundation/engine/rules/syntax/ExpressionRule.js.map +1 -0
- package/out/foundation/engine/rules/syntax/ForRule.d.ts +19 -0
- package/out/foundation/engine/rules/syntax/ForRule.d.ts.map +1 -0
- package/out/foundation/engine/rules/syntax/ForRule.js +226 -0
- package/out/foundation/engine/rules/syntax/ForRule.js.map +1 -0
- package/out/foundation/engine/rules/syntax/IfRule.d.ts +17 -0
- package/out/foundation/engine/rules/syntax/IfRule.d.ts.map +1 -0
- package/out/foundation/engine/rules/syntax/IfRule.js +220 -0
- package/out/foundation/engine/rules/syntax/IfRule.js.map +1 -0
- package/out/foundation/worker/Router.d.ts.map +1 -1
- package/out/foundation/worker/Router.js.map +1 -1
- package/out/index.d.ts +2 -0
- package/out/index.d.ts.map +1 -1
- package/out/index.js +2 -0
- package/out/index.js.map +1 -1
- package/package.json +1 -1
- package/src/foundation/Triplet.ts +6 -6
- package/src/foundation/api/Observer.ts +60 -0
- package/src/foundation/component_api/Component.ts +2 -1
- package/src/foundation/component_api/UniHtml.ts +12 -22
- package/src/foundation/engine/BalancedParser.ts +353 -0
- package/src/foundation/engine/EscapeHandler.ts +54 -0
- package/src/foundation/engine/Expression.ts +285 -0
- package/src/foundation/engine/Rule.ts +138 -0
- package/src/foundation/engine/Scope.ts +176 -0
- package/src/foundation/engine/TemplateEngine.ts +318 -0
- package/src/foundation/engine/TemplateInstance.md +110 -0
- package/src/foundation/engine/TemplateInstance.old.ts +673 -0
- package/src/foundation/engine/TemplateInstance.ts +843 -0
- package/src/foundation/engine/exceptions/TemplateExceptions.ts +27 -0
- package/src/foundation/engine/rules/attribute/EventRule.ts +171 -0
- package/src/foundation/engine/rules/attribute/InjectionRule.ts +140 -0
- package/src/foundation/engine/rules/attribute/RefRule.ts +126 -0
- package/src/foundation/engine/rules/syntax/ExpressionRule.ts +102 -0
- package/src/foundation/engine/rules/syntax/ForRule.ts +267 -0
- package/src/foundation/engine/rules/syntax/IfRule.ts +261 -0
- package/src/foundation/worker/Router.ts +1 -1
- package/src/index.ts +8 -0
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
import { MutationObserver } from '../api/Observer.js';
|
|
2
|
+
import Expression from './Expression.js';
|
|
3
|
+
/**
|
|
4
|
+
* PageTemplate - динамический шаблон страницы.
|
|
5
|
+
* Хранит обработанные Rule и поддерживает реактивное обновление.
|
|
6
|
+
*
|
|
7
|
+
* При изменении Observable обновляются только те фрагменты,
|
|
8
|
+
* которые зависят от изменённого Observable.
|
|
9
|
+
*/
|
|
10
|
+
export default class TemplateInstance {
|
|
11
|
+
template;
|
|
12
|
+
scope;
|
|
13
|
+
sections = [];
|
|
14
|
+
/** Фрагменты шаблона (каждый обновляется независимо) */
|
|
15
|
+
fragments = new Map();
|
|
16
|
+
/** Счётчик для генерации ID фрагментов */
|
|
17
|
+
fragmentIdCounter = 0;
|
|
18
|
+
/** Observers for template changes */
|
|
19
|
+
changeObserver = new MutationObserver();
|
|
20
|
+
/** Observers for fragment changes */
|
|
21
|
+
fragmentChangeObserver = new MutationObserver();
|
|
22
|
+
/** Группировка секций по Observable */
|
|
23
|
+
observableTrackings = new Map();
|
|
24
|
+
/** Функции отписки от событий */
|
|
25
|
+
eventUnbinders = [];
|
|
26
|
+
/** Кэшированный главный фрагмент */
|
|
27
|
+
cachedFragment = null;
|
|
28
|
+
constructor(template, scope) {
|
|
29
|
+
this.template = template;
|
|
30
|
+
this.scope = scope;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Получить текущий шаблон
|
|
34
|
+
*/
|
|
35
|
+
getTemplate() {
|
|
36
|
+
return this.template;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Установить новый шаблон (вызывает событие изменения)
|
|
40
|
+
*/
|
|
41
|
+
setTemplate(newTemplate) {
|
|
42
|
+
const oldTemplate = this.template;
|
|
43
|
+
this.template = newTemplate;
|
|
44
|
+
this.changeObserver.notify({ oldValue: null, newValue: null, oldTemplate, newTemplate }, { oldValue: null, newValue: null, oldTemplate, newTemplate });
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Получить Scope
|
|
48
|
+
*/
|
|
49
|
+
getScope() {
|
|
50
|
+
return this.scope;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Подписаться на изменения шаблона
|
|
54
|
+
*/
|
|
55
|
+
onTemplateChange(listener) {
|
|
56
|
+
const wrapper = (oldEvent, newEvent) => {
|
|
57
|
+
listener(newEvent.oldValue, newEvent.newValue, newEvent.oldTemplate, newEvent.newTemplate);
|
|
58
|
+
};
|
|
59
|
+
this.changeObserver.subscribe(wrapper);
|
|
60
|
+
return () => this.changeObserver.unsubscribe(wrapper);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Подписаться на изменения фрагментов
|
|
64
|
+
*/
|
|
65
|
+
onFragmentChange(listener) {
|
|
66
|
+
const wrapper = (_oldEvent, newEvent) => {
|
|
67
|
+
listener(newEvent);
|
|
68
|
+
};
|
|
69
|
+
this.fragmentChangeObserver.subscribe(wrapper);
|
|
70
|
+
return () => this.fragmentChangeObserver.unsubscribe(wrapper);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Добавить секцию шаблона
|
|
74
|
+
*/
|
|
75
|
+
addSection(section) {
|
|
76
|
+
this.sections.push(section);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Получить все секции
|
|
80
|
+
*/
|
|
81
|
+
getSections() {
|
|
82
|
+
return this.sections;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Создать новый фрагмент и вернуть его ID
|
|
86
|
+
*/
|
|
87
|
+
createFragmentBinding(html, sections = []) {
|
|
88
|
+
const id = `fragment-${this.fragmentIdCounter++}`;
|
|
89
|
+
const binding = {
|
|
90
|
+
id,
|
|
91
|
+
html,
|
|
92
|
+
fragment: null,
|
|
93
|
+
sections,
|
|
94
|
+
observables: new Set(),
|
|
95
|
+
nodes: []
|
|
96
|
+
};
|
|
97
|
+
// Привязываем секции к фрагменту
|
|
98
|
+
for (const section of sections) {
|
|
99
|
+
section.fragmentId = id;
|
|
100
|
+
}
|
|
101
|
+
this.fragments.set(id, binding);
|
|
102
|
+
return id;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Получить привязку фрагмента по ID
|
|
106
|
+
*/
|
|
107
|
+
getFragmentBinding(id) {
|
|
108
|
+
return this.fragments.get(id);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Получить все фрагменты
|
|
112
|
+
*/
|
|
113
|
+
getAllFragments() {
|
|
114
|
+
return this.fragments;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Подписаться на Observable и автоматически пересоздавать секцию.
|
|
118
|
+
* Обновляются только фрагменты, зависящие от изменённого Observable.
|
|
119
|
+
*/
|
|
120
|
+
trackObservable(observable, section, rebuild) {
|
|
121
|
+
// Проверяем, есть ли уже отслеживание для этого Observable
|
|
122
|
+
let tracking = this.observableTrackings.get(observable);
|
|
123
|
+
if (!tracking) {
|
|
124
|
+
// Создаём новое отслеживание
|
|
125
|
+
const listener = (newValue) => {
|
|
126
|
+
this.rebuildFragmentsForObservable(observable, newValue);
|
|
127
|
+
};
|
|
128
|
+
observable.subscribe(listener);
|
|
129
|
+
tracking = {
|
|
130
|
+
observable,
|
|
131
|
+
sections: [],
|
|
132
|
+
fragmentIds: new Set(),
|
|
133
|
+
unsubscribe: () => observable.unsubscribe(listener)
|
|
134
|
+
};
|
|
135
|
+
this.observableTrackings.set(observable, tracking);
|
|
136
|
+
}
|
|
137
|
+
// Добавляем секцию в отслеживание
|
|
138
|
+
tracking.sections.push({ section, rebuild });
|
|
139
|
+
// Связываем Observable с фрагментом секции
|
|
140
|
+
if (section.fragmentId) {
|
|
141
|
+
tracking.fragmentIds.add(section.fragmentId);
|
|
142
|
+
const binding = this.fragments.get(section.fragmentId);
|
|
143
|
+
if (binding) {
|
|
144
|
+
binding.observables.add(observable);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Возвращаем функцию отписки для этой конкретной секции
|
|
148
|
+
return () => {
|
|
149
|
+
if (tracking) {
|
|
150
|
+
tracking.sections = tracking.sections.filter(s => s.section !== section);
|
|
151
|
+
// Если больше нет секций, отписываемся от Observable
|
|
152
|
+
if (tracking.sections.length === 0) {
|
|
153
|
+
tracking.unsubscribe();
|
|
154
|
+
this.observableTrackings.delete(observable);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Перестроить только те фрагменты, которые зависят от Observable
|
|
161
|
+
*/
|
|
162
|
+
rebuildFragmentsForObservable(observable, newValue) {
|
|
163
|
+
const tracking = this.observableTrackings.get(observable);
|
|
164
|
+
if (!tracking || tracking.sections.length === 0)
|
|
165
|
+
return;
|
|
166
|
+
const oldTemplate = this.template;
|
|
167
|
+
let currentTemplate = this.template;
|
|
168
|
+
// Собираем все замены: старый output -> новый output
|
|
169
|
+
const replacements = [];
|
|
170
|
+
for (const { section, rebuild } of tracking.sections) {
|
|
171
|
+
// Unsubscribe old nested observables
|
|
172
|
+
this.unsubscribeSectionNested(section);
|
|
173
|
+
// Rebuild section
|
|
174
|
+
const newResult = rebuild(section);
|
|
175
|
+
const oldOutput = section.result.output;
|
|
176
|
+
replacements.push({
|
|
177
|
+
oldOutput,
|
|
178
|
+
newOutput: newResult.output,
|
|
179
|
+
section
|
|
180
|
+
});
|
|
181
|
+
section.result = newResult;
|
|
182
|
+
}
|
|
183
|
+
// Применяем все замены к шаблону
|
|
184
|
+
for (const { oldOutput, newOutput } of replacements) {
|
|
185
|
+
currentTemplate = currentTemplate.replace(oldOutput, newOutput);
|
|
186
|
+
}
|
|
187
|
+
this.template = currentTemplate;
|
|
188
|
+
// Обновляем только затронутые фрагменты
|
|
189
|
+
const affectedFragmentIds = new Set();
|
|
190
|
+
for (const { section } of tracking.sections) {
|
|
191
|
+
if (section.fragmentId) {
|
|
192
|
+
affectedFragmentIds.add(section.fragmentId);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Пересоздаём только затронутые фрагменты
|
|
196
|
+
for (const fragmentId of affectedFragmentIds) {
|
|
197
|
+
const binding = this.fragments.get(fragmentId);
|
|
198
|
+
if (!binding)
|
|
199
|
+
continue;
|
|
200
|
+
// Обновляем HTML фрагмента на основе секций
|
|
201
|
+
let newHtml = binding.html;
|
|
202
|
+
for (const { oldOutput, newOutput, section } of replacements) {
|
|
203
|
+
if (section.fragmentId === fragmentId) {
|
|
204
|
+
newHtml = newHtml.replace(oldOutput, newOutput);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const oldFragment = binding.fragment;
|
|
208
|
+
binding.html = newHtml;
|
|
209
|
+
binding.fragment = null; // Инвалидируем кэш
|
|
210
|
+
// Создаём новый фрагмент
|
|
211
|
+
const newFragment = this.createFragmentFromHtml(newHtml);
|
|
212
|
+
binding.fragment = newFragment;
|
|
213
|
+
// Обновляем DOM если фрагмент вставлен
|
|
214
|
+
if (binding.startMarker && binding.endMarker) {
|
|
215
|
+
this.replaceFragmentInDOM(binding, newFragment);
|
|
216
|
+
}
|
|
217
|
+
// Уведомляем об изменении фрагмента
|
|
218
|
+
this.fragmentChangeObserver.notify({ fragmentId, oldFragment, newFragment, affectedObservables: [observable] }, { fragmentId, oldFragment, newFragment, affectedObservables: [observable] });
|
|
219
|
+
}
|
|
220
|
+
// Одно событие для всех изменений шаблона
|
|
221
|
+
this.changeObserver.notify({ oldValue: null, newValue, oldTemplate, newTemplate: this.template }, { oldValue: null, newValue, oldTemplate, newTemplate: this.template });
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Заменить фрагмент в DOM между маркерами
|
|
225
|
+
*/
|
|
226
|
+
replaceFragmentInDOM(binding, newFragment) {
|
|
227
|
+
if (!binding.startMarker || !binding.endMarker)
|
|
228
|
+
return;
|
|
229
|
+
const parent = binding.startMarker.parentNode;
|
|
230
|
+
if (!parent)
|
|
231
|
+
return;
|
|
232
|
+
// Удаляем старые ноды между маркерами
|
|
233
|
+
for (const node of binding.nodes) {
|
|
234
|
+
parent.removeChild(node);
|
|
235
|
+
}
|
|
236
|
+
// Вставляем новые ноды
|
|
237
|
+
const newNodes = [];
|
|
238
|
+
const childNodes = Array.from(newFragment.childNodes);
|
|
239
|
+
for (const node of childNodes) {
|
|
240
|
+
newNodes.push(node);
|
|
241
|
+
parent.insertBefore(node, binding.endMarker);
|
|
242
|
+
}
|
|
243
|
+
binding.nodes = newNodes;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Создать DocumentFragment из HTML строки
|
|
247
|
+
*/
|
|
248
|
+
createFragmentFromHtml(html) {
|
|
249
|
+
if (typeof document === 'undefined') {
|
|
250
|
+
throw new Error('createFragmentFromHtml requires DOM environment');
|
|
251
|
+
}
|
|
252
|
+
const template = document.createElement('template');
|
|
253
|
+
template.innerHTML = html;
|
|
254
|
+
return template.content.cloneNode(true);
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Отписаться от вложенных Observable в секции (но не от главного)
|
|
258
|
+
*/
|
|
259
|
+
unsubscribeSectionNested(section) {
|
|
260
|
+
// Отписываемся только от подписок, сохранённых непосредственно в секции
|
|
261
|
+
for (const sub of section.subscriptions) {
|
|
262
|
+
sub.unsubscribe();
|
|
263
|
+
}
|
|
264
|
+
section.subscriptions = [];
|
|
265
|
+
// Recursively unsubscribe children
|
|
266
|
+
for (const child of section.children) {
|
|
267
|
+
this.unsubscribeSectionNested(child);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Отписаться от всех Observable в секции
|
|
272
|
+
*/
|
|
273
|
+
unsubscribeSection(section) {
|
|
274
|
+
for (const sub of section.subscriptions) {
|
|
275
|
+
sub.unsubscribe();
|
|
276
|
+
}
|
|
277
|
+
section.subscriptions = [];
|
|
278
|
+
// Recursively unsubscribe children
|
|
279
|
+
for (const child of section.children) {
|
|
280
|
+
this.unsubscribeSection(child);
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Создать DocumentFragment из текущего шаблона (весь шаблон).
|
|
285
|
+
* Кэширует фрагмент - повторные вызовы возвращают тот же фрагмент.
|
|
286
|
+
* После appendChild фрагмент будет пустым, но ссылки на элементы остаются валидными.
|
|
287
|
+
*/
|
|
288
|
+
createFragment() {
|
|
289
|
+
if (!this.cachedFragment) {
|
|
290
|
+
this.cachedFragment = this.createFragmentFromHtml(this.template);
|
|
291
|
+
}
|
|
292
|
+
return this.cachedFragment;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Инвалидировать кэш фрагмента (для пересоздания)
|
|
296
|
+
*/
|
|
297
|
+
invalidateFragment() {
|
|
298
|
+
this.cachedFragment = null;
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Создать и вставить все фрагменты в контейнер с маркерами
|
|
302
|
+
*/
|
|
303
|
+
createAllFragmentsWithMarkers(container) {
|
|
304
|
+
for (const [id, binding] of this.fragments) {
|
|
305
|
+
const startMarker = document.createComment(`fragment-start:${id}`);
|
|
306
|
+
const endMarker = document.createComment(`fragment-end:${id}`);
|
|
307
|
+
container.appendChild(startMarker);
|
|
308
|
+
const fragment = this.createFragmentFromHtml(binding.html);
|
|
309
|
+
binding.fragment = fragment;
|
|
310
|
+
// Сохраняем ноды
|
|
311
|
+
const nodes = [];
|
|
312
|
+
const childNodes = Array.from(fragment.childNodes);
|
|
313
|
+
for (const node of childNodes) {
|
|
314
|
+
nodes.push(node);
|
|
315
|
+
container.appendChild(node);
|
|
316
|
+
}
|
|
317
|
+
container.appendChild(endMarker);
|
|
318
|
+
binding.startMarker = startMarker;
|
|
319
|
+
binding.endMarker = endMarker;
|
|
320
|
+
binding.nodes = nodes;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Получить DocumentFragment для конкретного фрагмента
|
|
325
|
+
*/
|
|
326
|
+
getFragmentById(id) {
|
|
327
|
+
const binding = this.fragments.get(id);
|
|
328
|
+
if (!binding)
|
|
329
|
+
return null;
|
|
330
|
+
if (!binding.fragment) {
|
|
331
|
+
binding.fragment = this.createFragmentFromHtml(binding.html);
|
|
332
|
+
}
|
|
333
|
+
return binding.fragment;
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Получить кэшированный DocumentFragment (deprecated)
|
|
337
|
+
* @deprecated Используйте getFragmentById
|
|
338
|
+
*/
|
|
339
|
+
getFragment() {
|
|
340
|
+
// Возвращаем первый фрагмент для обратной совместимости
|
|
341
|
+
const firstBinding = this.fragments.values().next().value;
|
|
342
|
+
return firstBinding?.fragment || null;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Пересоздать все фрагменты
|
|
346
|
+
*/
|
|
347
|
+
rebuildAllFragments() {
|
|
348
|
+
for (const [_id, binding] of this.fragments) {
|
|
349
|
+
binding.fragment = null;
|
|
350
|
+
binding.fragment = this.createFragmentFromHtml(binding.html);
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Пересоздать fragment (deprecated)
|
|
355
|
+
* @deprecated Используйте rebuildAllFragments или конкретный фрагмент
|
|
356
|
+
*/
|
|
357
|
+
rebuildFragment() {
|
|
358
|
+
this.rebuildAllFragments();
|
|
359
|
+
return this.createFragment();
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Очистить все подписки
|
|
363
|
+
*/
|
|
364
|
+
dispose() {
|
|
365
|
+
// Отписываемся от всех Observable
|
|
366
|
+
for (const tracking of this.observableTrackings.values()) {
|
|
367
|
+
tracking.unsubscribe();
|
|
368
|
+
}
|
|
369
|
+
this.observableTrackings.clear();
|
|
370
|
+
// Отвязываем события
|
|
371
|
+
this.unbindEvents();
|
|
372
|
+
// Очищаем секции
|
|
373
|
+
for (const section of this.sections) {
|
|
374
|
+
this.unsubscribeSection(section);
|
|
375
|
+
}
|
|
376
|
+
this.sections = [];
|
|
377
|
+
// Очищаем фрагменты
|
|
378
|
+
this.fragments.clear();
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Привязать refs к элементам
|
|
382
|
+
* @param root - DOM элемент для поиска refs. Если не указан, создаётся фрагмент из шаблона
|
|
383
|
+
*/
|
|
384
|
+
bindRefs() {
|
|
385
|
+
// Если root не передан, создаём фрагмент из шаблона
|
|
386
|
+
const targetRoot = this.createFragment();
|
|
387
|
+
const refElements = targetRoot.querySelectorAll('[data-ref]');
|
|
388
|
+
for (const element of Array.from(refElements)) {
|
|
389
|
+
const refName = element.getAttribute('data-ref');
|
|
390
|
+
if (refName) {
|
|
391
|
+
this.scope.set(refName, element);
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Обработать инжекции (@injection[head/tail])
|
|
397
|
+
* Должен вызываться после bindRefs
|
|
398
|
+
*/
|
|
399
|
+
processInjections(root) {
|
|
400
|
+
// Find all elements with injection attributes
|
|
401
|
+
const injectElements = root.querySelectorAll('[data-injection-type][data-injection-target]');
|
|
402
|
+
for (const element of Array.from(injectElements)) {
|
|
403
|
+
const type = element.getAttribute('data-injection-type');
|
|
404
|
+
const targetRefName = decodeURIComponent(element.getAttribute('data-injection-target') || '');
|
|
405
|
+
if (!targetRefName)
|
|
406
|
+
continue;
|
|
407
|
+
// Get target element from scope
|
|
408
|
+
const targetElement = this.scope.get(targetRefName);
|
|
409
|
+
if (!targetElement || !(targetElement instanceof Element)) {
|
|
410
|
+
console.warn(`[PageTemplate] Injection target "${targetRefName}" not found in scope or is not an Element`);
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
// Remove injection attributes
|
|
414
|
+
element.removeAttribute('data-injection-type');
|
|
415
|
+
element.removeAttribute('data-injection-target');
|
|
416
|
+
// Perform injection
|
|
417
|
+
if (type === 'head') {
|
|
418
|
+
targetElement.prepend(element);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
targetElement.append(element);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Привязать события к элементам из кэшированного фрагмента
|
|
427
|
+
*/
|
|
428
|
+
bindEvents() {
|
|
429
|
+
// Используем кэшированный фрагмент (тот же что и для bindRefs)
|
|
430
|
+
const fragment = this.createFragment();
|
|
431
|
+
// Собираем все элементы из фрагмента
|
|
432
|
+
const allElements = fragment.querySelectorAll('*');
|
|
433
|
+
for (const element of Array.from(allElements)) {
|
|
434
|
+
const unbinders = this.bindEventsToElement(element);
|
|
435
|
+
this.eventUnbinders.push(...unbinders);
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Привязать события к одному элементу
|
|
440
|
+
*/
|
|
441
|
+
bindEventsToElement(element) {
|
|
442
|
+
const unbinders = [];
|
|
443
|
+
const attributes = Array.from(element.attributes);
|
|
444
|
+
for (const attr of attributes) {
|
|
445
|
+
if (attr.name.startsWith('data-event-')) {
|
|
446
|
+
const eventName = attr.name.slice('data-event-'.length);
|
|
447
|
+
const exprCode = decodeURIComponent(attr.value);
|
|
448
|
+
const handler = (event) => {
|
|
449
|
+
const localScope = this.scope.createChild({ event });
|
|
450
|
+
const expr = new Expression(exprCode);
|
|
451
|
+
try {
|
|
452
|
+
expr.execute(localScope);
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
console.error(`[TemplateInstance] Error executing handler for ${eventName}:`, error);
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
element.addEventListener(eventName, handler);
|
|
459
|
+
unbinders.push(() => element.removeEventListener(eventName, handler));
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
return unbinders;
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Отвязать все события
|
|
466
|
+
*/
|
|
467
|
+
unbindEvents() {
|
|
468
|
+
for (const unbind of this.eventUnbinders) {
|
|
469
|
+
unbind();
|
|
470
|
+
}
|
|
471
|
+
this.eventUnbinders = [];
|
|
472
|
+
}
|
|
473
|
+
/**
|
|
474
|
+
* Отвязать refs (установить null)
|
|
475
|
+
*/
|
|
476
|
+
unbindRefs() {
|
|
477
|
+
for (const section of this.sections) {
|
|
478
|
+
if (section.rule.name === 'ref' && section.match.data?.expression) {
|
|
479
|
+
const refName = section.match.data.expression;
|
|
480
|
+
if (this.scope.has(refName)) {
|
|
481
|
+
this.scope.set(refName, null);
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=TemplateInstance.old.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateInstance.old.js","sourceRoot":"","sources":["../../../src/foundation/engine/TemplateInstance.old.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InvalidDynamicRuleUsage - исключение при использовании Observable
|
|
3
|
+
* в правилах, которые не поддерживают динамическое обновление.
|
|
4
|
+
* Например: @[ref], @injection
|
|
5
|
+
*/
|
|
6
|
+
export declare class InvalidDynamicRuleUsage extends Error {
|
|
7
|
+
constructor(ruleName: string, message?: string);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* InvalidTemplateEngineSyntaxException - исключение при синтаксических ошибках
|
|
11
|
+
* в шаблоне. Например: @if без boolean, @for с неверным типом.
|
|
12
|
+
*/
|
|
13
|
+
export declare class InvalidTemplateEngineSyntaxException extends Error {
|
|
14
|
+
readonly line?: number;
|
|
15
|
+
readonly column?: number;
|
|
16
|
+
constructor(message: string, options?: {
|
|
17
|
+
line?: number;
|
|
18
|
+
column?: number;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=TemplateExceptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateExceptions.d.ts","sourceRoot":"","sources":["../../../../src/foundation/engine/exceptions/TemplateExceptions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;gBAClC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAIjD;AAED;;;GAGG;AACH,qBAAa,oCAAqC,SAAQ,KAAK;IAC3D,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAM5E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InvalidDynamicRuleUsage - исключение при использовании Observable
|
|
3
|
+
* в правилах, которые не поддерживают динамическое обновление.
|
|
4
|
+
* Например: @[ref], @injection
|
|
5
|
+
*/
|
|
6
|
+
export class InvalidDynamicRuleUsage extends Error {
|
|
7
|
+
constructor(ruleName, message) {
|
|
8
|
+
super(message ?? `Rule "${ruleName}" does not support Observable values. Use a static value instead.`);
|
|
9
|
+
this.name = 'InvalidDynamicRuleUsage';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* InvalidTemplateEngineSyntaxException - исключение при синтаксических ошибках
|
|
14
|
+
* в шаблоне. Например: @if без boolean, @for с неверным типом.
|
|
15
|
+
*/
|
|
16
|
+
export class InvalidTemplateEngineSyntaxException extends Error {
|
|
17
|
+
line;
|
|
18
|
+
column;
|
|
19
|
+
constructor(message, options) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = 'InvalidTemplateEngineSyntaxException';
|
|
22
|
+
this.line = options?.line;
|
|
23
|
+
this.column = options?.column;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=TemplateExceptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TemplateExceptions.js","sourceRoot":"","sources":["../../../../src/foundation/engine/exceptions/TemplateExceptions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAC9C,YAAY,QAAgB,EAAE,OAAgB;QAC1C,KAAK,CAAC,OAAO,IAAI,SAAS,QAAQ,mEAAmE,CAAC,CAAC;QACvG,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IAC1C,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,OAAO,oCAAqC,SAAQ,KAAK;IAC3C,IAAI,CAAU;IACd,MAAM,CAAU;IAEhC,YAAY,OAAe,EAAE,OAA4C;QACrE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,sCAAsC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;IAClC,CAAC;CACJ"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { default as TemplateEngine } from './TemplateEngine.js';
|
|
2
|
+
export { default as Scope } from './Scope.js';
|
|
3
|
+
export { default as Expression } from './Expression.js';
|
|
4
|
+
export { default as PageTemplate } from './PageTemplate.js';
|
|
5
|
+
export { default as BalancedParser } from './BalancedParser.js';
|
|
6
|
+
export { default as EscapeHandler } from './EscapeHandler.js';
|
|
7
|
+
export { default as Rule, SyntaxRule, AttributeRule } from './Rule.js';
|
|
8
|
+
export type { RuleMatch, RuleResult, RuleType } from './Rule.js';
|
|
9
|
+
export { default as ExpressionRule } from './rules/syntax/ExpressionRule.js';
|
|
10
|
+
export { default as IfRule } from './rules/syntax/IfRule.js';
|
|
11
|
+
export { default as ForRule } from './rules/syntax/ForRule.js';
|
|
12
|
+
export { default as RefRule } from './rules/attribute/RefRule.js';
|
|
13
|
+
export { default as EventRule } from './rules/attribute/EventRule.js';
|
|
14
|
+
export { default as InjectionRule } from './rules/attribute/InjectionRule.js';
|
|
15
|
+
export { InvalidDynamicRuleUsage, InvalidTemplateEngineSyntaxException } from './exceptions/TemplateExceptions.js';
|
|
16
|
+
export type { TemplateEngineOptions, ProcessResult } from './TemplateEngine.js';
|
|
17
|
+
export type { TemplateSection, TemplateChangeEvent } from './PageTemplate.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/foundation/engine/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGjE,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAG9E,OAAO,EACH,uBAAuB,EACvB,oCAAoC,EACvC,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAChF,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// Export all engine components
|
|
2
|
+
export { default as TemplateEngine } from './TemplateEngine.js';
|
|
3
|
+
export { default as Scope } from './Scope.js';
|
|
4
|
+
export { default as Expression } from './Expression.js';
|
|
5
|
+
export { default as PageTemplate } from './PageTemplate.js';
|
|
6
|
+
export { default as BalancedParser } from './BalancedParser.js';
|
|
7
|
+
export { default as EscapeHandler } from './EscapeHandler.js';
|
|
8
|
+
// Export Rule system
|
|
9
|
+
export { default as Rule, SyntaxRule, AttributeRule } from './Rule.js';
|
|
10
|
+
// Export concrete rules
|
|
11
|
+
export { default as ExpressionRule } from './rules/syntax/ExpressionRule.js';
|
|
12
|
+
export { default as IfRule } from './rules/syntax/IfRule.js';
|
|
13
|
+
export { default as ForRule } from './rules/syntax/ForRule.js';
|
|
14
|
+
export { default as RefRule } from './rules/attribute/RefRule.js';
|
|
15
|
+
export { default as EventRule } from './rules/attribute/EventRule.js';
|
|
16
|
+
export { default as InjectionRule } from './rules/attribute/InjectionRule.js';
|
|
17
|
+
// Export exceptions
|
|
18
|
+
export { InvalidDynamicRuleUsage, InvalidTemplateEngineSyntaxException } from './exceptions/TemplateExceptions.js';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/foundation/engine/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,qBAAqB;AACrB,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGvE,wBAAwB;AACxB,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAE9E,oBAAoB;AACpB,OAAO,EACH,uBAAuB,EACvB,oCAAoC,EACvC,MAAM,oCAAoC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { AttributeRule } from '../../Rule.js';
|
|
2
|
+
import type { RuleMatch, RuleResult } from '../../Rule.js';
|
|
3
|
+
import Scope from '../../Scope.js';
|
|
4
|
+
/**
|
|
5
|
+
* EventRule - обработка @on[eventName]="expression"
|
|
6
|
+
* Подписывает элемент на событие.
|
|
7
|
+
*/
|
|
8
|
+
export default class EventRule extends AttributeRule {
|
|
9
|
+
readonly name = "event";
|
|
10
|
+
readonly priority = 30;
|
|
11
|
+
find(template: string): RuleMatch[];
|
|
12
|
+
execute(match: RuleMatch, scope: Scope): RuleResult;
|
|
13
|
+
/**
|
|
14
|
+
* Постобработка: привязать события к элементам
|
|
15
|
+
*/
|
|
16
|
+
static bindEvents(element: Element, scope: Scope): (() => void)[];
|
|
17
|
+
/**
|
|
18
|
+
* Привязать событие с поддержкой Observable
|
|
19
|
+
*/
|
|
20
|
+
static bindEventWithObservable(element: Element, eventName: string, exprCode: string, scope: Scope): () => void;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=EventRule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventRule.d.ts","sourceRoot":"","sources":["../../../../../src/foundation/engine/rules/attribute/EventRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAWnC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,aAAa;IAChD,SAAgB,IAAI,WAAW;IAC/B,SAAgB,QAAQ,MAAM;IAEvB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IAsDnC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU;IAa1D;;OAEG;WACW,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;IAkCxE;;OAEG;WACW,uBAAuB,CACjC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,GACb,MAAM,IAAI;CAqChB"}
|