haori 0.1.0
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/LICENSE +21 -0
- package/README.ja.md +157 -0
- package/README.md +158 -0
- package/dist/haori.cjs.js +13 -0
- package/dist/haori.cjs.js.map +1 -0
- package/dist/haori.es.js +2929 -0
- package/dist/haori.es.js.map +1 -0
- package/dist/haori.iife.js +13 -0
- package/dist/haori.iife.js.map +1 -0
- package/dist/index.d.ts +824 -0
- package/dist/src/core.d.ts +144 -0
- package/dist/src/core.d.ts.map +1 -0
- package/dist/src/core.js +605 -0
- package/dist/src/core.js.map +1 -0
- package/dist/src/dev.d.ts +35 -0
- package/dist/src/dev.d.ts.map +1 -0
- package/dist/src/dev.js +44 -0
- package/dist/src/dev.js.map +1 -0
- package/dist/src/env.d.ts +25 -0
- package/dist/src/env.d.ts.map +1 -0
- package/dist/src/env.js +64 -0
- package/dist/src/env.js.map +1 -0
- package/dist/src/event.d.ts +144 -0
- package/dist/src/event.d.ts.map +1 -0
- package/dist/src/event.js +221 -0
- package/dist/src/event.js.map +1 -0
- package/dist/src/event_dispatcher.d.ts +50 -0
- package/dist/src/event_dispatcher.d.ts.map +1 -0
- package/dist/src/event_dispatcher.js +99 -0
- package/dist/src/event_dispatcher.js.map +1 -0
- package/dist/src/expression.d.ts +39 -0
- package/dist/src/expression.d.ts.map +1 -0
- package/dist/src/expression.js +148 -0
- package/dist/src/expression.js.map +1 -0
- package/dist/src/form.d.ts +113 -0
- package/dist/src/form.d.ts.map +1 -0
- package/dist/src/form.js +361 -0
- package/dist/src/form.js.map +1 -0
- package/dist/src/fragment.d.ts +427 -0
- package/dist/src/fragment.d.ts.map +1 -0
- package/dist/src/fragment.js +1168 -0
- package/dist/src/fragment.js.map +1 -0
- package/dist/src/haori.d.ts +54 -0
- package/dist/src/haori.d.ts.map +1 -0
- package/dist/src/haori.js +120 -0
- package/dist/src/haori.js.map +1 -0
- package/dist/src/import.d.ts +19 -0
- package/dist/src/import.d.ts.map +1 -0
- package/dist/src/import.js +64 -0
- package/dist/src/import.js.map +1 -0
- package/dist/src/index.d.ts +17 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +21 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/log.d.ts +32 -0
- package/dist/src/log.d.ts.map +1 -0
- package/dist/src/log.js +43 -0
- package/dist/src/log.js.map +1 -0
- package/dist/src/observer.d.ts +17 -0
- package/dist/src/observer.d.ts.map +1 -0
- package/dist/src/observer.js +102 -0
- package/dist/src/observer.js.map +1 -0
- package/dist/src/procedure.d.ts +203 -0
- package/dist/src/procedure.d.ts.map +1 -0
- package/dist/src/procedure.js +1040 -0
- package/dist/src/procedure.js.map +1 -0
- package/dist/src/queue.d.ts +28 -0
- package/dist/src/queue.d.ts.map +1 -0
- package/dist/src/queue.js +150 -0
- package/dist/src/queue.js.map +1 -0
- package/dist/src/url.d.ts +14 -0
- package/dist/src/url.d.ts.map +1 -0
- package/dist/src/url.js +22 -0
- package/dist/src/url.js.map +1 -0
- package/dist/tests/click-attributes.test.d.ts +2 -0
- package/dist/tests/click-attributes.test.d.ts.map +1 -0
- package/dist/tests/click-attributes.test.js +95 -0
- package/dist/tests/click-attributes.test.js.map +1 -0
- package/dist/tests/core.test.d.ts +5 -0
- package/dist/tests/core.test.d.ts.map +1 -0
- package/dist/tests/core.test.js +158 -0
- package/dist/tests/core.test.js.map +1 -0
- package/dist/tests/data-each-browserlike.test.d.ts +2 -0
- package/dist/tests/data-each-browserlike.test.d.ts.map +1 -0
- package/dist/tests/data-each-browserlike.test.js +48 -0
- package/dist/tests/data-each-browserlike.test.js.map +1 -0
- package/dist/tests/data-each-fragment-debug.test.d.ts +2 -0
- package/dist/tests/data-each-fragment-debug.test.d.ts.map +1 -0
- package/dist/tests/data-each-fragment-debug.test.js +119 -0
- package/dist/tests/data-each-fragment-debug.test.js.map +1 -0
- package/dist/tests/data-each-table.test.d.ts +2 -0
- package/dist/tests/data-each-table.test.d.ts.map +1 -0
- package/dist/tests/data-each-table.test.js +63 -0
- package/dist/tests/data-each-table.test.js.map +1 -0
- package/dist/tests/dev.test.d.ts +2 -0
- package/dist/tests/dev.test.d.ts.map +1 -0
- package/dist/tests/dev.test.js +51 -0
- package/dist/tests/dev.test.js.map +1 -0
- package/dist/tests/each_arg.test.d.ts +2 -0
- package/dist/tests/each_arg.test.d.ts.map +1 -0
- package/dist/tests/each_arg.test.js +41 -0
- package/dist/tests/each_arg.test.js.map +1 -0
- package/dist/tests/env.test.d.ts +2 -0
- package/dist/tests/env.test.d.ts.map +1 -0
- package/dist/tests/env.test.js +96 -0
- package/dist/tests/env.test.js.map +1 -0
- package/dist/tests/event.test.d.ts +2 -0
- package/dist/tests/event.test.d.ts.map +1 -0
- package/dist/tests/event.test.js +287 -0
- package/dist/tests/event.test.js.map +1 -0
- package/dist/tests/expression.test.d.ts +2 -0
- package/dist/tests/expression.test.d.ts.map +1 -0
- package/dist/tests/expression.test.js +281 -0
- package/dist/tests/expression.test.js.map +1 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.d.ts +2 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.d.ts.map +1 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.js +133 -0
- package/dist/tests/fetch-and-procedure-scenarios.test.js.map +1 -0
- package/dist/tests/form.test.d.ts +2 -0
- package/dist/tests/form.test.d.ts.map +1 -0
- package/dist/tests/form.test.js +607 -0
- package/dist/tests/form.test.js.map +1 -0
- package/dist/tests/fragment.test.d.ts +2 -0
- package/dist/tests/fragment.test.d.ts.map +1 -0
- package/dist/tests/fragment.test.js +164 -0
- package/dist/tests/fragment.test.js.map +1 -0
- package/dist/tests/import.test.d.ts +2 -0
- package/dist/tests/import.test.d.ts.map +1 -0
- package/dist/tests/import.test.js +148 -0
- package/dist/tests/import.test.js.map +1 -0
- package/dist/tests/log.test.d.ts +2 -0
- package/dist/tests/log.test.d.ts.map +1 -0
- package/dist/tests/log.test.js +58 -0
- package/dist/tests/log.test.js.map +1 -0
- package/dist/tests/procedure-action-operations.test.d.ts +2 -0
- package/dist/tests/procedure-action-operations.test.d.ts.map +1 -0
- package/dist/tests/procedure-action-operations.test.js +148 -0
- package/dist/tests/procedure-action-operations.test.js.map +1 -0
- package/dist/tests/procedure-fetch-options.test.d.ts +2 -0
- package/dist/tests/procedure-fetch-options.test.d.ts.map +1 -0
- package/dist/tests/procedure-fetch-options.test.js +131 -0
- package/dist/tests/procedure-fetch-options.test.js.map +1 -0
- package/dist/tests/procedure.test.d.ts +2 -0
- package/dist/tests/procedure.test.d.ts.map +1 -0
- package/dist/tests/procedure.test.js +136 -0
- package/dist/tests/procedure.test.js.map +1 -0
- package/dist/tests/procedure_events.test.d.ts +7 -0
- package/dist/tests/procedure_events.test.d.ts.map +1 -0
- package/dist/tests/procedure_events.test.js +96 -0
- package/dist/tests/procedure_events.test.js.map +1 -0
- package/dist/tests/reset_each.test.d.ts +2 -0
- package/dist/tests/reset_each.test.d.ts.map +1 -0
- package/dist/tests/reset_each.test.js +215 -0
- package/dist/tests/reset_each.test.js.map +1 -0
- package/dist/tests/row-move.test.d.ts +2 -0
- package/dist/tests/row-move.test.d.ts.map +1 -0
- package/dist/tests/row-move.test.js +197 -0
- package/dist/tests/row-move.test.js.map +1 -0
- package/dist/tests/row-operations.test.d.ts +2 -0
- package/dist/tests/row-operations.test.d.ts.map +1 -0
- package/dist/tests/row-operations.test.js +238 -0
- package/dist/tests/row-operations.test.js.map +1 -0
- package/dist/tests/url.test.d.ts +2 -0
- package/dist/tests/url.test.d.ts.map +1 -0
- package/dist/tests/url.test.js +150 -0
- package/dist/tests/url.test.js.map +1 -0
- package/dist/vite.config.d.ts +3 -0
- package/dist/vite.config.d.ts.map +1 -0
- package/dist/vite.config.js +28 -0
- package/dist/vite.config.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +19 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +68 -0
package/dist/src/core.js
ADDED
|
@@ -0,0 +1,605 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Core機能
|
|
3
|
+
*
|
|
4
|
+
* Fragmentの管理、属性変化の監視、条件分岐・繰り返し処理など、
|
|
5
|
+
* アプリケーションの中心的な機能を提供します。
|
|
6
|
+
*/
|
|
7
|
+
import Env from './env';
|
|
8
|
+
import Form from './form';
|
|
9
|
+
import Fragment, { ElementFragment, TextFragment } from './fragment';
|
|
10
|
+
import Log from './log';
|
|
11
|
+
import Procedure from './procedure';
|
|
12
|
+
import Url from './url';
|
|
13
|
+
import { Import } from './import';
|
|
14
|
+
import Queue from './queue';
|
|
15
|
+
import HaoriEvent from './event';
|
|
16
|
+
/**
|
|
17
|
+
* アプリケーションの中心的な制御を行うクラスです。
|
|
18
|
+
* Fragment の初期化、属性変化の処理、条件分岐・繰り返し処理を管理します。
|
|
19
|
+
*/
|
|
20
|
+
class Core {
|
|
21
|
+
/**
|
|
22
|
+
* 遅延属性かどうか(完全名で判定)を判定します。
|
|
23
|
+
*
|
|
24
|
+
* @param name 属性名
|
|
25
|
+
* @returns 遅延属性かどうか
|
|
26
|
+
*/
|
|
27
|
+
static isDeferredAttributeName(name) {
|
|
28
|
+
return Core.DEFERRED_ATTRIBUTE_SUFFIXES.some(suffix => name === `${Env.prefix}${suffix}`);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 指定された要素と、その子要素をスキャンし、Fragmentを生成します。
|
|
32
|
+
*
|
|
33
|
+
* @param element スキャン対象の要素
|
|
34
|
+
* @returns Promise (スキャンが完了したときに解決される)
|
|
35
|
+
*/
|
|
36
|
+
static scan(element) {
|
|
37
|
+
const fragment = Fragment.get(element);
|
|
38
|
+
if (!fragment) {
|
|
39
|
+
return Promise.resolve();
|
|
40
|
+
}
|
|
41
|
+
// DOMに組み込まれている場合はmountedをtrueにする
|
|
42
|
+
if (element.parentNode) {
|
|
43
|
+
const parentFragment = Fragment.get(element.parentNode);
|
|
44
|
+
if (parentFragment?.isMounted()) {
|
|
45
|
+
fragment.setMounted(true);
|
|
46
|
+
}
|
|
47
|
+
else if (document.body.contains(element)) {
|
|
48
|
+
// document.bodyに含まれている場合はマウント済みとする
|
|
49
|
+
fragment.setMounted(true);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
fragment.setMounted(false);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
const promises = [];
|
|
56
|
+
const processedAttributes = new Set();
|
|
57
|
+
for (const suffix of Core.PRIORITY_ATTRIBUTE_SUFFIXES) {
|
|
58
|
+
// 優先属性の処理
|
|
59
|
+
const name = Env.prefix + suffix;
|
|
60
|
+
if (fragment.hasAttribute(name)) {
|
|
61
|
+
promises.push(Core.setAttribute(fragment.getTarget(), name, fragment.getRawAttribute(name)));
|
|
62
|
+
processedAttributes.add(name);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const name of fragment.getAttributeNames()) {
|
|
66
|
+
if (processedAttributes.has(name) || Core.isDeferredAttributeName(name)) {
|
|
67
|
+
// すでに処理済みもしくは遅延処理の属性はスキップ
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const value = fragment.getRawAttribute(name);
|
|
71
|
+
if (value !== null) {
|
|
72
|
+
promises.push(Core.setAttribute(fragment.getTarget(), name, value));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
for (const suffix of Core.DEFERRED_ATTRIBUTE_SUFFIXES) {
|
|
76
|
+
// 遅延属性の処理
|
|
77
|
+
const name = Env.prefix + suffix;
|
|
78
|
+
if (fragment.hasAttribute(name)) {
|
|
79
|
+
promises.push(Core.setAttribute(fragment.getTarget(), name, fragment.getRawAttribute(name)));
|
|
80
|
+
processedAttributes.add(name);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
fragment.getChildren().forEach(child => {
|
|
84
|
+
if (child instanceof ElementFragment) {
|
|
85
|
+
promises.push(Core.scan(child.getTarget()));
|
|
86
|
+
}
|
|
87
|
+
else if (child instanceof TextFragment) {
|
|
88
|
+
promises.push(Core.evaluateText(child));
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
return Promise.all(promises).then(() => undefined);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* エレメントに属性を設定します。
|
|
95
|
+
* 属性固有の処理も行います。
|
|
96
|
+
*
|
|
97
|
+
* @param element エレメント
|
|
98
|
+
* @param name 属性名
|
|
99
|
+
* @param value 属性値
|
|
100
|
+
* @returns Promise (DOM操作が完了したときに解決される)
|
|
101
|
+
*/
|
|
102
|
+
static setAttribute(element, name, value) {
|
|
103
|
+
const fragment = Fragment.get(element);
|
|
104
|
+
const promises = [];
|
|
105
|
+
switch (name) {
|
|
106
|
+
case `${Env.prefix}bind`: {
|
|
107
|
+
if (value === null) {
|
|
108
|
+
fragment.clearBindingDataCache();
|
|
109
|
+
fragment.setBindingData({});
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
fragment.setBindingData(Core.parseDataBind(value));
|
|
113
|
+
}
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case `${Env.prefix}if`:
|
|
117
|
+
promises.push(Core.evaluateIf(fragment));
|
|
118
|
+
break;
|
|
119
|
+
case `${Env.prefix}each`:
|
|
120
|
+
promises.push(Core.evaluateEach(fragment));
|
|
121
|
+
break;
|
|
122
|
+
case `${Env.prefix}fetch`:
|
|
123
|
+
promises.push(new Procedure(fragment, null).run());
|
|
124
|
+
break;
|
|
125
|
+
case `${Env.prefix}import`: {
|
|
126
|
+
if (typeof value === 'string') {
|
|
127
|
+
const target = fragment.getTarget();
|
|
128
|
+
const startedAt = performance.now();
|
|
129
|
+
HaoriEvent.importStart(target, value);
|
|
130
|
+
promises.push(Import.load(value)
|
|
131
|
+
.then(html => {
|
|
132
|
+
const bytes = new TextEncoder().encode(html).length;
|
|
133
|
+
// DOM 更新はキュー内で実行し、オブザーバーに差分を拾わせる
|
|
134
|
+
return Queue.enqueue(() => {
|
|
135
|
+
target.innerHTML = html;
|
|
136
|
+
}).then(() => {
|
|
137
|
+
HaoriEvent.importEnd(target, value, bytes, startedAt);
|
|
138
|
+
});
|
|
139
|
+
})
|
|
140
|
+
.catch(error => {
|
|
141
|
+
HaoriEvent.importError(target, value, error);
|
|
142
|
+
Log.error('[Haori]', 'Failed to import HTML:', value, error);
|
|
143
|
+
}));
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case `${Env.prefix}url-param`: {
|
|
148
|
+
const arg = fragment.getAttribute(`${Env.prefix}url-arg`);
|
|
149
|
+
const params = Url.readParams();
|
|
150
|
+
if (arg === null) {
|
|
151
|
+
Core.setBindingData(element, params);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
const data = fragment.getRawBindingData() || {};
|
|
155
|
+
data[String(arg)] = params;
|
|
156
|
+
Core.setBindingData(element, data);
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (value === null) {
|
|
162
|
+
promises.push(fragment.removeAttribute(name));
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
promises.push(fragment.setAttribute(name, value));
|
|
166
|
+
}
|
|
167
|
+
return Promise.all(promises).then(() => undefined);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* エレメントに属性を設定し、評価を行います。
|
|
171
|
+
*
|
|
172
|
+
* @param element エレメント
|
|
173
|
+
* @param name 属性名
|
|
174
|
+
* @param value 属性値
|
|
175
|
+
* @returns Promise (DOM操作が完了したときに解決される)
|
|
176
|
+
*/
|
|
177
|
+
static setBindingData(element, data) {
|
|
178
|
+
const fragment = Fragment.get(element);
|
|
179
|
+
const previous = fragment.getRawBindingData();
|
|
180
|
+
fragment.setBindingData(data);
|
|
181
|
+
const promises = [];
|
|
182
|
+
promises.push(fragment.setAttribute(`${Env.prefix}bind`, JSON.stringify(data)));
|
|
183
|
+
promises.push(Core.evaluateAll(fragment));
|
|
184
|
+
// bindchangeイベントを発火
|
|
185
|
+
HaoriEvent.bindChange(element, previous, data, 'manual');
|
|
186
|
+
return Promise.all(promises).then(() => undefined);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* data-bind 属性の値をパースします。
|
|
190
|
+
*
|
|
191
|
+
* @param data data-bind 属性の値
|
|
192
|
+
* @returns パースされたデータオブジェクト
|
|
193
|
+
*/
|
|
194
|
+
static parseDataBind(data) {
|
|
195
|
+
if (data.startsWith('{') || data.startsWith('[')) {
|
|
196
|
+
// JSONとしてパース
|
|
197
|
+
try {
|
|
198
|
+
return JSON.parse(data);
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
Log.error('[Haori]', 'Invalid JSON in data-bind:', e);
|
|
202
|
+
return {};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// URLSearchParamsでパース
|
|
207
|
+
const params = new URLSearchParams(data);
|
|
208
|
+
const result = {};
|
|
209
|
+
for (const [key, value] of params.entries()) {
|
|
210
|
+
if (result[key] !== undefined) {
|
|
211
|
+
// すでに値がある場合は配列化
|
|
212
|
+
if (Array.isArray(result[key])) {
|
|
213
|
+
result[key].push(value);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
result[key] = [result[key], value];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
result[key] = value;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return result;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* ノードを親要素に追加し評価を行います。
|
|
228
|
+
*
|
|
229
|
+
* @param parentElement 親エレメント
|
|
230
|
+
* @param node 追加するノード
|
|
231
|
+
*/
|
|
232
|
+
static addNode(parentElement, node) {
|
|
233
|
+
const parent = Fragment.get(parentElement);
|
|
234
|
+
// skipMutationNodesが設定されている場合は処理をスキップ
|
|
235
|
+
if (parent.isSkipMutationNodes()) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const next = Fragment.get(node.nextSibling);
|
|
239
|
+
const fragment = Fragment.get(node);
|
|
240
|
+
if (fragment) {
|
|
241
|
+
parent.insertBefore(fragment, next);
|
|
242
|
+
if (fragment instanceof ElementFragment) {
|
|
243
|
+
// 新規追加ノードは属性評価(bind/if/each/import など含む)のフルスキャンを行う。
|
|
244
|
+
// これにより、取り込まれた断片内の data-import の入れ子や data-bind も正しく処理される。
|
|
245
|
+
Core.scan(fragment.getTarget());
|
|
246
|
+
}
|
|
247
|
+
else if (fragment instanceof TextFragment) {
|
|
248
|
+
Core.evaluateText(fragment);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* ノードを親要素から削除します。
|
|
254
|
+
*
|
|
255
|
+
* @param node 削除するノード
|
|
256
|
+
*/
|
|
257
|
+
static removeNode(node) {
|
|
258
|
+
const fragment = Fragment.get(node);
|
|
259
|
+
if (fragment) {
|
|
260
|
+
const parent = fragment.getParent();
|
|
261
|
+
// skipMutationNodesが設定されている場合は処理をスキップ
|
|
262
|
+
if (parent && parent.isSkipMutationNodes()) {
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
fragment.remove();
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* ノードのテキストを変更します。
|
|
270
|
+
*
|
|
271
|
+
* @param node 変更するノード
|
|
272
|
+
* @param text 新しいテキスト
|
|
273
|
+
*/
|
|
274
|
+
static changeText(node, text) {
|
|
275
|
+
const fragment = Fragment.get(node);
|
|
276
|
+
if (fragment) {
|
|
277
|
+
fragment.setContent(text);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* エレメントの値を変更します。
|
|
282
|
+
* フォームの双方向バインディングを考慮し、フォームのバインドデータも更新します。
|
|
283
|
+
*
|
|
284
|
+
* @param element 変更するエレメント
|
|
285
|
+
* @param value 新しい値
|
|
286
|
+
* @returns Promise (DOM操作が完了したときに解決される)
|
|
287
|
+
*/
|
|
288
|
+
static changeValue(element, value) {
|
|
289
|
+
const fragment = Fragment.get(element);
|
|
290
|
+
if (fragment.getValue() === value) {
|
|
291
|
+
return Promise.resolve();
|
|
292
|
+
}
|
|
293
|
+
const promises = [];
|
|
294
|
+
promises.push(fragment.setValue(value));
|
|
295
|
+
const formFragment = Core.getFormFragment(fragment);
|
|
296
|
+
if (formFragment) {
|
|
297
|
+
const values = Form.getValues(formFragment);
|
|
298
|
+
const arg = formFragment.getAttribute(`${Env.prefix}form-arg`);
|
|
299
|
+
let bindingData;
|
|
300
|
+
if (arg) {
|
|
301
|
+
bindingData = formFragment.getRawBindingData();
|
|
302
|
+
if (!bindingData) {
|
|
303
|
+
bindingData = {};
|
|
304
|
+
}
|
|
305
|
+
bindingData[String(arg)] = values;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
bindingData = values;
|
|
309
|
+
}
|
|
310
|
+
promises.push(Core.setBindingData(formFragment.getTarget(), bindingData));
|
|
311
|
+
}
|
|
312
|
+
return Promise.all(promises).then(() => undefined);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* フォームフラグメントを取得します。
|
|
316
|
+
*
|
|
317
|
+
* @param fragment フラグメント
|
|
318
|
+
* @returns フォームフラグメントまたはnull
|
|
319
|
+
*/
|
|
320
|
+
static getFormFragment(fragment) {
|
|
321
|
+
if (fragment.getTarget() instanceof HTMLFormElement) {
|
|
322
|
+
return fragment;
|
|
323
|
+
}
|
|
324
|
+
const parent = fragment.getParent();
|
|
325
|
+
if (parent) {
|
|
326
|
+
return Core.getFormFragment(parent);
|
|
327
|
+
}
|
|
328
|
+
return null;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* フラグメントとその子要素を評価します。
|
|
332
|
+
*
|
|
333
|
+
* @param fragment 対象フラグメント
|
|
334
|
+
* @return Promise (DOM操作が完了したときに解決される)
|
|
335
|
+
*/
|
|
336
|
+
static evaluateAll(fragment) {
|
|
337
|
+
const promises = [];
|
|
338
|
+
if (fragment.hasAttribute(`${Env.prefix}if`)) {
|
|
339
|
+
promises.push(Core.evaluateIf(fragment));
|
|
340
|
+
}
|
|
341
|
+
if (fragment.hasAttribute(`${Env.prefix}each`)) {
|
|
342
|
+
promises.push(Core.evaluateEach(fragment));
|
|
343
|
+
}
|
|
344
|
+
fragment.getChildren().forEach(child => {
|
|
345
|
+
if (child instanceof ElementFragment) {
|
|
346
|
+
promises.push(Core.evaluateAll(child));
|
|
347
|
+
}
|
|
348
|
+
else if (child instanceof TextFragment) {
|
|
349
|
+
promises.push(Core.evaluateText(child));
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
return Promise.all(promises).then(() => undefined);
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* テキストフラグメントを評価します。
|
|
356
|
+
*
|
|
357
|
+
* @param fragment 対象フラグメント
|
|
358
|
+
* @returns Promise (DOM操作が完了したときに解決される)
|
|
359
|
+
*/
|
|
360
|
+
static evaluateText(fragment) {
|
|
361
|
+
return fragment.evaluate();
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* if要素を評価します。
|
|
365
|
+
* 値がfalse、null、undefined、NaNの場合は非表示にし、それ以外の場合は表示します。
|
|
366
|
+
*
|
|
367
|
+
* @param fragment 対象フラグメント
|
|
368
|
+
* @return Promise (DOM操作が完了したときに解決される)
|
|
369
|
+
*/
|
|
370
|
+
static evaluateIf(fragment) {
|
|
371
|
+
const promises = [];
|
|
372
|
+
const condition = fragment.getAttribute(`${Env.prefix}if`);
|
|
373
|
+
if (condition === false ||
|
|
374
|
+
condition === undefined ||
|
|
375
|
+
condition === null ||
|
|
376
|
+
Number.isNaN(condition)) {
|
|
377
|
+
if (fragment.isVisible()) {
|
|
378
|
+
promises.push(fragment.hide().then(() => {
|
|
379
|
+
HaoriEvent.hide(fragment.getTarget());
|
|
380
|
+
}));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
if (!fragment.isVisible()) {
|
|
385
|
+
promises.push(fragment.show().then(() => {
|
|
386
|
+
HaoriEvent.show(fragment.getTarget());
|
|
387
|
+
}));
|
|
388
|
+
promises.push(Core.evaluateAll(fragment));
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
return Promise.all(promises).then(() => undefined);
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* each要素を評価します。
|
|
395
|
+
* 非表示または未マウントの場合は処理をスキップします。
|
|
396
|
+
*
|
|
397
|
+
* @param fragment 対象フラグメント
|
|
398
|
+
*/
|
|
399
|
+
static evaluateEach(fragment) {
|
|
400
|
+
if (!fragment.isVisible() || !fragment.isMounted()) {
|
|
401
|
+
return Promise.resolve();
|
|
402
|
+
}
|
|
403
|
+
let template = fragment.getTemplate();
|
|
404
|
+
if (template === null) {
|
|
405
|
+
// テンプレートの作成
|
|
406
|
+
const unmountPromises = [];
|
|
407
|
+
fragment.getChildren().forEach(child => {
|
|
408
|
+
if (child instanceof ElementFragment) {
|
|
409
|
+
if (child.hasAttribute(`${Env.prefix}each-before`) ||
|
|
410
|
+
child.hasAttribute(`${Env.prefix}each-after`)) {
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
if (template === null) {
|
|
414
|
+
template = child;
|
|
415
|
+
// テンプレートを children から切り離し、DOM からも除去する
|
|
416
|
+
fragment.removeChild(child);
|
|
417
|
+
// 直接DOMから削除
|
|
418
|
+
const templateTarget = child.getTarget();
|
|
419
|
+
if (templateTarget.parentNode) {
|
|
420
|
+
unmountPromises.push(Queue.enqueue(() => {
|
|
421
|
+
if (templateTarget.parentNode) {
|
|
422
|
+
templateTarget.parentNode.removeChild(templateTarget);
|
|
423
|
+
}
|
|
424
|
+
child.setMounted(false);
|
|
425
|
+
}));
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
Log.warn('[Haori]', 'Template must be a single child element.');
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// TextNodeやCommentNodeはテンプレートにならないので無視
|
|
433
|
+
});
|
|
434
|
+
fragment.setTemplate(template);
|
|
435
|
+
const data = fragment.getAttribute(`${Env.prefix}each`);
|
|
436
|
+
if (!Array.isArray(data)) {
|
|
437
|
+
Log.error('[Haori]', 'Invalid each attribute:', data);
|
|
438
|
+
return Promise.reject(new Error('Invalid each attribute.'));
|
|
439
|
+
}
|
|
440
|
+
// テンプレートの unmount 完了後に updateDiff を実行
|
|
441
|
+
return Promise.all(unmountPromises).then(() => this.updateDiff(fragment, data));
|
|
442
|
+
}
|
|
443
|
+
const data = fragment.getAttribute(`${Env.prefix}each`);
|
|
444
|
+
if (!Array.isArray(data)) {
|
|
445
|
+
Log.error('[Haori]', 'Invalid each attribute:', data);
|
|
446
|
+
return Promise.reject(new Error('Invalid each attribute.'));
|
|
447
|
+
}
|
|
448
|
+
return this.updateDiff(fragment, data);
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* 差分を更新します。
|
|
452
|
+
*
|
|
453
|
+
* @param parent 親フラグメント
|
|
454
|
+
* @param newList 新しいリスト
|
|
455
|
+
*/
|
|
456
|
+
static updateDiff(parent, newList) {
|
|
457
|
+
const template = parent.getTemplate();
|
|
458
|
+
if (template === null) {
|
|
459
|
+
Log.error('[Haori]', 'Template is not set for each element.');
|
|
460
|
+
return Promise.resolve();
|
|
461
|
+
}
|
|
462
|
+
let indexKey = parent.getAttribute(`${Env.prefix}each-index`);
|
|
463
|
+
if (indexKey) {
|
|
464
|
+
indexKey = String(indexKey);
|
|
465
|
+
}
|
|
466
|
+
const keyArg = parent.getAttribute(`${Env.prefix}each-key`);
|
|
467
|
+
const itemArg = parent.getAttribute(`${Env.prefix}each-arg`);
|
|
468
|
+
const keyDataMap = new Map();
|
|
469
|
+
const newKeys = [];
|
|
470
|
+
newList.forEach((item, itemIndex) => {
|
|
471
|
+
const listKey = Core.createListKey(item, keyArg ? String(keyArg) : null, itemIndex);
|
|
472
|
+
newKeys.push(listKey);
|
|
473
|
+
keyDataMap.set(listKey, { item, itemIndex });
|
|
474
|
+
});
|
|
475
|
+
const removalPromises = [];
|
|
476
|
+
let childElements = parent
|
|
477
|
+
.getChildren()
|
|
478
|
+
.filter(child => child instanceof ElementFragment)
|
|
479
|
+
.filter(child => !child.hasAttribute(`${Env.prefix}each-before`) &&
|
|
480
|
+
!child.hasAttribute(`${Env.prefix}each-after`));
|
|
481
|
+
childElements = childElements.filter(child => {
|
|
482
|
+
const index = newKeys.indexOf(String(child.getListKey()));
|
|
483
|
+
if (index === -1) {
|
|
484
|
+
removalPromises.push(child.remove());
|
|
485
|
+
return false;
|
|
486
|
+
}
|
|
487
|
+
return true;
|
|
488
|
+
});
|
|
489
|
+
const srcKeys = childElements.map(child => child.getListKey());
|
|
490
|
+
const baseInsertIndex = parent
|
|
491
|
+
.getChildren()
|
|
492
|
+
.filter(child => child instanceof ElementFragment)
|
|
493
|
+
.filter(child => child.hasAttribute(`${Env.prefix}each-before`)).length;
|
|
494
|
+
let chain = Promise.resolve();
|
|
495
|
+
newKeys.forEach((newKey, loopIndex) => {
|
|
496
|
+
const srcIndex = srcKeys.indexOf(newKey);
|
|
497
|
+
const { item, itemIndex } = keyDataMap.get(newKey);
|
|
498
|
+
let child;
|
|
499
|
+
if (srcIndex !== -1) {
|
|
500
|
+
// 既存の要素を再利用
|
|
501
|
+
child = childElements[srcIndex];
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
// 新しい要素を追加
|
|
505
|
+
child = template.clone();
|
|
506
|
+
}
|
|
507
|
+
Core.updateRowFragment(child, item, indexKey, itemIndex, itemArg ? String(itemArg) : null, newKey);
|
|
508
|
+
const currentInsertIndex = baseInsertIndex + loopIndex;
|
|
509
|
+
chain = chain.then(() => parent
|
|
510
|
+
.insertBefore(child, parent.getChildren()[currentInsertIndex] || null)
|
|
511
|
+
.then(() => Core.evaluateAll(child)));
|
|
512
|
+
});
|
|
513
|
+
return Promise.all(removalPromises)
|
|
514
|
+
.then(() => chain)
|
|
515
|
+
.then(() => {
|
|
516
|
+
// eachupdateイベントを発火
|
|
517
|
+
const validNewKeys = newKeys.filter((key) => key !== null);
|
|
518
|
+
const validSrcKeys = srcKeys.filter((key) => key !== null);
|
|
519
|
+
const addedKeys = validNewKeys.filter(key => !validSrcKeys.includes(key));
|
|
520
|
+
const removedKeys = validSrcKeys.filter(key => !validNewKeys.includes(key));
|
|
521
|
+
HaoriEvent.eachUpdate(parent.getTarget(), addedKeys, removedKeys, validNewKeys);
|
|
522
|
+
return undefined;
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* リスト比較用のキーを生成します。
|
|
527
|
+
*
|
|
528
|
+
* @param item 対象オブジェクト
|
|
529
|
+
* @param keyArg リストキーに使用するプロパティ名
|
|
530
|
+
* @param index 配列のインデックス
|
|
531
|
+
* @returns リストキー
|
|
532
|
+
*/
|
|
533
|
+
static createListKey(item, keyArg, index) {
|
|
534
|
+
let listKey;
|
|
535
|
+
if (typeof item === 'object' && item !== null) {
|
|
536
|
+
if (keyArg) {
|
|
537
|
+
const key = item[keyArg];
|
|
538
|
+
if (key === null || key === undefined) {
|
|
539
|
+
listKey = `__index_${index}`;
|
|
540
|
+
}
|
|
541
|
+
else if (typeof key == 'object') {
|
|
542
|
+
listKey = JSON.stringify(key);
|
|
543
|
+
}
|
|
544
|
+
else {
|
|
545
|
+
listKey = String(key);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
// data-each-key がない場合はインデックスをキーとして使用
|
|
550
|
+
listKey = `__index_${index}`;
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
listKey = String(item);
|
|
555
|
+
}
|
|
556
|
+
return listKey;
|
|
557
|
+
}
|
|
558
|
+
/**
|
|
559
|
+
* 行フラグメントにデータを設定します。
|
|
560
|
+
*
|
|
561
|
+
* @param rowFragment 行フラグメント
|
|
562
|
+
* @param data 行データ
|
|
563
|
+
* @param indexKey インデックスキー
|
|
564
|
+
* @param index インデックス番号
|
|
565
|
+
* @param arg バインドデータパラメータ名
|
|
566
|
+
* @param listKey リストキー
|
|
567
|
+
*/
|
|
568
|
+
static updateRowFragment(rowFragment, data, indexKey, index, arg, listKey) {
|
|
569
|
+
let bindingData = data;
|
|
570
|
+
if (typeof data === 'object' && data !== null) {
|
|
571
|
+
bindingData = { ...data };
|
|
572
|
+
if (indexKey) {
|
|
573
|
+
bindingData[indexKey] = index;
|
|
574
|
+
}
|
|
575
|
+
if (arg) {
|
|
576
|
+
bindingData = {
|
|
577
|
+
[arg]: bindingData,
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
else {
|
|
582
|
+
if (arg) {
|
|
583
|
+
bindingData = {
|
|
584
|
+
[arg]: data,
|
|
585
|
+
};
|
|
586
|
+
if (indexKey) {
|
|
587
|
+
bindingData[indexKey] = index;
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
else {
|
|
591
|
+
Log.error('[Haori]', `Primitive value requires '${Env.prefix}each-arg' attribute: ${data}`);
|
|
592
|
+
return;
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
rowFragment.setListKey(listKey);
|
|
596
|
+
rowFragment.setAttribute(`${Env.prefix}row`, listKey);
|
|
597
|
+
rowFragment.setBindingData(bindingData);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
/** 優先処理する属性のサフィックス(処理順序で定義) */
|
|
601
|
+
Core.PRIORITY_ATTRIBUTE_SUFFIXES = ['bind', 'if', 'each'];
|
|
602
|
+
/** 遅延処理する属性のサフィックス */
|
|
603
|
+
Core.DEFERRED_ATTRIBUTE_SUFFIXES = ['fetch', 'url-param'];
|
|
604
|
+
export default Core;
|
|
605
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Haori開発モード管理機能
|
|
3
|
+
*
|
|
4
|
+
* 開発モードの有効/無効を管理し、デバッグ機能の制御を行います。
|
|
5
|
+
* プロダクション環境では開発向け機能を無効化することで、
|
|
6
|
+
* パフォーマンスとセキュリティを向上させます。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 開発モード管理クラスです。
|
|
10
|
+
*/
|
|
11
|
+
export default class Dev {
|
|
12
|
+
/** 開発モードフラグ */
|
|
13
|
+
private static devMode;
|
|
14
|
+
/**
|
|
15
|
+
* 開発モードの状態を取得します。
|
|
16
|
+
*
|
|
17
|
+
* @returns 開発モードならtrue、そうでなければfalse
|
|
18
|
+
*/
|
|
19
|
+
static isEnabled(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* 開発モードを有効化します。
|
|
22
|
+
*/
|
|
23
|
+
static enable(): void;
|
|
24
|
+
/**
|
|
25
|
+
* 開発モードを無効化します。
|
|
26
|
+
*/
|
|
27
|
+
static disable(): void;
|
|
28
|
+
/**
|
|
29
|
+
* 開発モードを切り替えます。
|
|
30
|
+
*
|
|
31
|
+
* @param enabled trueで有効化、falseで無効化
|
|
32
|
+
*/
|
|
33
|
+
static set(enabled: boolean): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=dev.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/dev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,eAAe;IACf,OAAO,CAAC,MAAM,CAAC,OAAO,CAAS;IAE/B;;;;OAIG;IACH,MAAM,CAAC,SAAS,IAAI,OAAO;IAI3B;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,IAAI;IAIrB;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,IAAI;IAItB;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAGnC"}
|