@reidelsaltres/pureper 0.1.160 → 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/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/Rule.d.ts +2 -0
- package/out/foundation/engine/Rule.d.ts.map +1 -1
- package/out/foundation/engine/Rule.js.map +1 -1
- package/out/foundation/engine/Scope.d.ts +5 -1
- package/out/foundation/engine/Scope.d.ts.map +1 -1
- package/out/foundation/engine/Scope.js +12 -3
- package/out/foundation/engine/Scope.js.map +1 -1
- package/out/foundation/engine/TemplateEngine.d.ts +17 -0
- package/out/foundation/engine/TemplateEngine.d.ts.map +1 -1
- package/out/foundation/engine/TemplateEngine.js +51 -3
- package/out/foundation/engine/TemplateEngine.js.map +1 -1
- package/out/foundation/engine/TemplateInstance.d.ts +167 -47
- package/out/foundation/engine/TemplateInstance.d.ts.map +1 -1
- package/out/foundation/engine/TemplateInstance.js +500 -118
- package/out/foundation/engine/TemplateInstance.js.map +1 -1
- 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/rules/attribute/RefRule.d.ts.map +1 -1
- package/out/foundation/engine/rules/attribute/RefRule.js +7 -1
- package/out/foundation/engine/rules/attribute/RefRule.js.map +1 -1
- package/out/index.d.ts +0 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +0 -1
- package/out/index.js.map +1 -1
- package/package.json +1 -1
- package/src/foundation/Triplet.ts +6 -6
- package/src/foundation/component_api/Component.ts +2 -1
- package/src/foundation/component_api/UniHtml.ts +12 -22
- package/src/foundation/engine/Rule.ts +2 -0
- package/src/foundation/engine/Scope.ts +13 -3
- package/src/foundation/engine/TemplateEngine.ts +79 -4
- package/src/foundation/engine/TemplateInstance.md +110 -0
- package/src/foundation/engine/TemplateInstance.old.ts +673 -0
- package/src/foundation/engine/TemplateInstance.ts +635 -147
- package/src/foundation/engine/rules/attribute/RefRule.ts +8 -1
- package/src/index.ts +0 -1
|
@@ -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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefRule.d.ts","sourceRoot":"","sources":["../../../../../src/foundation/engine/rules/attribute/RefRule.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;AAInC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IAC9C,SAAgB,IAAI,SAAS;IAC7B,SAAgB,QAAQ,KAAK;IAEtB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IA6DnC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU;
|
|
1
|
+
{"version":3,"file":"RefRule.d.ts","sourceRoot":"","sources":["../../../../../src/foundation/engine/rules/attribute/RefRule.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;AAInC;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,aAAa;IAC9C,SAAgB,IAAI,SAAS;IAC7B,SAAgB,QAAQ,KAAK;IAEtB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE;IA6DnC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU;IA+BnD,kBAAkB,IAAI,OAAO;IAIpC;;OAEG;WACW,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAIhF;;OAEG;WACW,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;CAKnE"}
|
|
@@ -70,11 +70,17 @@ export default class RefRule extends AttributeRule {
|
|
|
70
70
|
console.error(`[RefRule] Expression must return a string (variable name), got: ${typeof refName}`);
|
|
71
71
|
return { output: '' };
|
|
72
72
|
}
|
|
73
|
+
// Сразу регистрируем ref в scope с null значением
|
|
74
|
+
// Будет заполнен реальным элементом при bindRefs()
|
|
75
|
+
if (!scope.has(refName)) {
|
|
76
|
+
scope.set(refName, null);
|
|
77
|
+
}
|
|
73
78
|
// Store placeholder - actual element will be set during DOM processing
|
|
74
79
|
// For now, return the attribute without the @[ref] syntax
|
|
75
80
|
return {
|
|
76
81
|
output: `data-ref="${refName}"`,
|
|
77
|
-
observables: []
|
|
82
|
+
observables: [],
|
|
83
|
+
data: { refName } // Сохраняем имя ref для быстрого доступа
|
|
78
84
|
};
|
|
79
85
|
}
|
|
80
86
|
supportsObservable() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefRule.js","sourceRoot":"","sources":["../../../../../src/foundation/engine/rules/attribute/RefRule.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RefRule.js","sourceRoot":"","sources":["../../../../../src/foundation/engine/rules/attribute/RefRule.ts"],"names":[],"mappings":"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"}
|
package/out/index.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export { default as Triplet, TripletStruct, AccessType } from './foundation/Trip
|
|
|
10
10
|
export { ReComponent, RePage } from './foundation/TripletDecorator.js';
|
|
11
11
|
export { default as Fetcher } from './foundation/Fetcher.js';
|
|
12
12
|
export { default as HMLEParser } from './foundation/HMLEParser.js';
|
|
13
|
-
export * from './foundation/engine/TemplateInstance.js';
|
|
14
13
|
export * from './foundation/engine/TemplateEngine.js';
|
|
15
14
|
export { InvalidDynamicRuleUsage, InvalidTemplateEngineSyntaxException } from './foundation/engine/exceptions/TemplateExceptions.js';
|
|
16
15
|
export { Router } from './foundation/worker/Router.js';
|
package/out/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EACH,uBAAuB,EACvB,oCAAoC,EACvC,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAEhF,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
|
package/out/index.js
CHANGED
|
@@ -8,7 +8,6 @@ export { default as Triplet, AccessType } from './foundation/Triplet.js';
|
|
|
8
8
|
export { ReComponent, RePage } from './foundation/TripletDecorator.js';
|
|
9
9
|
export { default as Fetcher } from './foundation/Fetcher.js';
|
|
10
10
|
export { default as HMLEParser } from './foundation/HMLEParser.js';
|
|
11
|
-
export * from './foundation/engine/TemplateInstance.js';
|
|
12
11
|
export * from './foundation/engine/TemplateEngine.js';
|
|
13
12
|
export { InvalidDynamicRuleUsage, InvalidTemplateEngineSyntaxException } from './foundation/engine/exceptions/TemplateExceptions.js';
|
|
14
13
|
export { Router } from './foundation/worker/Router.js';
|
package/out/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAiB,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAiB,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAEnE,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EACH,uBAAuB,EACvB,oCAAoC,EACvC,MAAM,sDAAsD,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAEhF,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAGtC,qEAAqE;AACrE;;WAEQ;AAER,yEAAyE"}
|
package/package.json
CHANGED
|
@@ -6,6 +6,7 @@ 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';
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
export enum AccessType {
|
|
@@ -154,15 +155,15 @@ export default class Triplet {
|
|
|
154
155
|
}
|
|
155
156
|
};
|
|
156
157
|
let proto = ori.prototype as any;
|
|
157
|
-
const
|
|
158
|
+
const engine = new TemplateEngine(proto);
|
|
158
159
|
|
|
159
|
-
proto._init = async function (): Promise<
|
|
160
|
+
proto._init = async function (): Promise<TemplateInstance> {
|
|
160
161
|
const markupText = await that.markup;
|
|
161
|
-
if (!markupText) return
|
|
162
|
-
return
|
|
162
|
+
if (!markupText) return engine.parse("");
|
|
163
|
+
return engine.parse(markupText);
|
|
163
164
|
}
|
|
164
165
|
|
|
165
|
-
proto._postInit = async function (preHtml:
|
|
166
|
+
proto._postInit = async function (preHtml: TemplateInstance): Promise<TemplateInstance> {
|
|
166
167
|
const dmc: Document | ShadowRoot = this.shadowRoot ?? document;
|
|
167
168
|
const css = await that.css;
|
|
168
169
|
|
|
@@ -172,7 +173,6 @@ export default class Triplet {
|
|
|
172
173
|
style
|
|
173
174
|
];
|
|
174
175
|
|
|
175
|
-
//parser.hydrate(preHtml, this);
|
|
176
176
|
return preHtml;
|
|
177
177
|
}
|
|
178
178
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import IElementHolder from "../api/ElementHolder.js";
|
|
2
2
|
import UniHtml from "../component_api/UniHtml.js";
|
|
3
|
+
import TemplateInstance from "../engine/TemplateInstance.js";
|
|
3
4
|
import Attribute from "./Attribute.js";
|
|
4
5
|
import { Class, Mixined } from "./mixin/Proto.js";
|
|
5
6
|
|
|
@@ -56,7 +57,7 @@ export default class Component extends Class(HTMLElement).extend(UniHtml).build(
|
|
|
56
57
|
|
|
57
58
|
this.load(this.shadowRoot);
|
|
58
59
|
}
|
|
59
|
-
protected render(element:
|
|
60
|
+
protected render(element: TemplateInstance, renderTarget: HTMLElement | ShadowRoot): Promise<void> {
|
|
60
61
|
(this.getMixin(UniHtml)?.instance.get() as any).render(element, renderTarget);
|
|
61
62
|
//super.render(element, renderTarget);
|
|
62
63
|
//this.shadowRoot!.appendChild(renderTarget);
|