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/form.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview フォーム双方向バインディング
|
|
3
|
+
*
|
|
4
|
+
* フォームと入力要素の双方向バインディングを実現します。
|
|
5
|
+
*/
|
|
6
|
+
import Core from './core';
|
|
7
|
+
import Env from './env';
|
|
8
|
+
import Haori from './haori';
|
|
9
|
+
import Log from './log';
|
|
10
|
+
import Queue from './queue';
|
|
11
|
+
/**
|
|
12
|
+
* Formクラスは、フォームの双方向バインディングを提供します。
|
|
13
|
+
* 入力要素の値をフォームにバインドし、フォームのバインド値を入力要素に反映します。
|
|
14
|
+
*/
|
|
15
|
+
export default class Form {
|
|
16
|
+
/**
|
|
17
|
+
* フォーム内にある入力エレメントの値をオブジェクトとして取得します。
|
|
18
|
+
* data-form-object属性があると、そのエレメント内の値はオブジェクトとして処理されます。
|
|
19
|
+
* 入力エレメントにdata-form-list属性があると、そのエレメントの値はリストとして処理されます。
|
|
20
|
+
* 入力エレメント以外にdata-form-list属性があると、そのエレメントの値はオブジェクトのリストとして処理されます。
|
|
21
|
+
*
|
|
22
|
+
* @param form フォームのElementFragment
|
|
23
|
+
*/
|
|
24
|
+
static getValues(form) {
|
|
25
|
+
const values = {};
|
|
26
|
+
return Form.getPartValues(form, values);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* フォーム内の各入力エレメントから値を取得し、オブジェクトとして返します。
|
|
30
|
+
* 入力エレメントのname属性、data-form-object属性、data-form-list属性に基づいて値を整理します。
|
|
31
|
+
*
|
|
32
|
+
* @param fragment 対象のElementFragment
|
|
33
|
+
* @param values オブジェクトに追加する値のオブジェクト
|
|
34
|
+
* @returns values と同じオブジェクト
|
|
35
|
+
*/
|
|
36
|
+
static getPartValues(fragment, values) {
|
|
37
|
+
const name = fragment.getAttribute('name');
|
|
38
|
+
const objectName = fragment.getAttribute(`${Env.prefix}form-object`);
|
|
39
|
+
const listName = fragment.getAttribute(`${Env.prefix}form-list`);
|
|
40
|
+
if (name) {
|
|
41
|
+
if (listName) {
|
|
42
|
+
if (Array.isArray(values[String(name)])) {
|
|
43
|
+
values[String(name)].push(fragment.getValue());
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
values[String(name)] = [fragment.getValue()];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
values[String(name)] = fragment.getValue();
|
|
51
|
+
}
|
|
52
|
+
if (objectName) {
|
|
53
|
+
Log.warn('Haori', `Element cannot have both ${Env.prefix}form-object` +
|
|
54
|
+
' and name attributes.');
|
|
55
|
+
}
|
|
56
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
57
|
+
Form.getPartValues(child, values);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (objectName) {
|
|
61
|
+
const childValues = {};
|
|
62
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
63
|
+
Form.getPartValues(child, childValues);
|
|
64
|
+
}
|
|
65
|
+
if (Object.keys(childValues).length > 0) {
|
|
66
|
+
values[String(objectName)] = childValues;
|
|
67
|
+
}
|
|
68
|
+
if (listName) {
|
|
69
|
+
Log.warn('Haori', `Element cannot have both ${Env.prefix}form-list` +
|
|
70
|
+
` and ${Env.prefix}form-object attributes.`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (listName) {
|
|
74
|
+
const childList = [];
|
|
75
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
76
|
+
const childValues = {};
|
|
77
|
+
Form.getPartValues(child, childValues);
|
|
78
|
+
if (Object.keys(childValues).length > 0) {
|
|
79
|
+
childList.push(childValues);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (childList.length > 0) {
|
|
83
|
+
values[String(listName)] = childList;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
88
|
+
Form.getPartValues(child, values);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return values;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* フォーム内にある入力エレメントに値を設定します。
|
|
95
|
+
* フォームのdata-bind属性に値が反映されます。
|
|
96
|
+
*
|
|
97
|
+
* @param form フォームのElementFragment
|
|
98
|
+
* @param values フォームに設定する値のオブジェクト
|
|
99
|
+
* @param force data-form-detach属性があるエレメントにも値を反映するかどうか
|
|
100
|
+
* @returns Promise(DOMの更新が完了したら解決される)
|
|
101
|
+
*/
|
|
102
|
+
static setValues(form, values, force = false) {
|
|
103
|
+
return Form.setPartValues(form, values, null, force);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* フラグメント内にある各入力エレメントに値を設定します。
|
|
107
|
+
*
|
|
108
|
+
* @param fragment 対象フラグメント
|
|
109
|
+
* @param values フラグメントに設定する値のオブジェクト
|
|
110
|
+
* @param index 配列の場合のインデックス
|
|
111
|
+
* @param force data-form-detach属性があるエレメントにも値を反映するかどうか
|
|
112
|
+
* @returns Promise(DOMの更新が完了したら解決される)
|
|
113
|
+
*/
|
|
114
|
+
static setPartValues(fragment, values, index = null, force = false) {
|
|
115
|
+
const promises = [];
|
|
116
|
+
const name = fragment.getAttribute('name');
|
|
117
|
+
const objectName = fragment.getAttribute(`${Env.prefix}form-object`);
|
|
118
|
+
const listName = fragment.getAttribute(`${Env.prefix}form-list`);
|
|
119
|
+
const detach = fragment.getAttribute(`${Env.prefix}form-detach`);
|
|
120
|
+
if (name) {
|
|
121
|
+
if (!detach || force) {
|
|
122
|
+
const value = values[String(name)];
|
|
123
|
+
if (listName && Array.isArray(value) && index !== null) {
|
|
124
|
+
promises.push(fragment.setValue(value[index]));
|
|
125
|
+
}
|
|
126
|
+
else if (typeof value === 'string' ||
|
|
127
|
+
typeof value === 'number' ||
|
|
128
|
+
typeof value === 'boolean' ||
|
|
129
|
+
value === null) {
|
|
130
|
+
promises.push(fragment.setValue(value));
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
promises.push(fragment.setValue(String(value)));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else if (objectName) {
|
|
138
|
+
const childValues = values[String(objectName)];
|
|
139
|
+
if (childValues && typeof childValues === 'object') {
|
|
140
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
141
|
+
promises.push(Form.setPartValues(child, childValues, null, force));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else if (listName) {
|
|
146
|
+
const childList = values[String(listName)];
|
|
147
|
+
if (Array.isArray(childList)) {
|
|
148
|
+
const children = fragment.getChildElementFragments();
|
|
149
|
+
for (let i = 0; i < children.length; i++) {
|
|
150
|
+
const child = children[i];
|
|
151
|
+
if (childList.length > i) {
|
|
152
|
+
promises.push(Form.setPartValues(child, childList[i], i, force));
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
promises.push(Form.setPartValues(child, {}, i, force));
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
162
|
+
promises.push(Form.setPartValues(child, values, null, force));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return Promise.all(promises).then(() => undefined);
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 対象フラグメントとその子孫要素の値を初期化します。
|
|
169
|
+
* 値の初期化とメッセージのクリアを行います。
|
|
170
|
+
*
|
|
171
|
+
* @param fragment 対象フラグメント
|
|
172
|
+
* @returns すべての初期化処理が完了するPromise
|
|
173
|
+
*/
|
|
174
|
+
static async reset(fragment) {
|
|
175
|
+
// 値をクリア
|
|
176
|
+
Form.clearValues(fragment);
|
|
177
|
+
// メッセージをクリアし、data-eachの複製を削除
|
|
178
|
+
await Promise.all([
|
|
179
|
+
Form.clearMessages(fragment),
|
|
180
|
+
Form.clearEachClones(fragment),
|
|
181
|
+
]);
|
|
182
|
+
// フォーム要素をリセット
|
|
183
|
+
await Queue.enqueue(() => {
|
|
184
|
+
const element = fragment.getTarget();
|
|
185
|
+
if (element instanceof HTMLFormElement) {
|
|
186
|
+
element.reset();
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
const parent = element.parentElement;
|
|
190
|
+
if (parent) {
|
|
191
|
+
const next = element.nextElementSibling;
|
|
192
|
+
const form = document.createElement('form');
|
|
193
|
+
form.appendChild(element);
|
|
194
|
+
form.reset();
|
|
195
|
+
parent.insertBefore(element, next);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
// 再評価
|
|
200
|
+
await Core.evaluateAll(fragment);
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* data-each によって生成された複製(テンプレート以外)を削除します。
|
|
204
|
+
* 既存のテンプレートは保持し、その後の再評価で必要に応じて再生成されます。
|
|
205
|
+
* 対象エレメント自体がdata-eachを持つ場合はその子の複製を削除しますが、
|
|
206
|
+
* 対象エレメント自体は削除しません。
|
|
207
|
+
*/
|
|
208
|
+
static clearEachClones(fragment) {
|
|
209
|
+
const tasks = [];
|
|
210
|
+
const removeClones = (f) => {
|
|
211
|
+
if (f.hasAttribute(`${Env.prefix}each`)) {
|
|
212
|
+
for (const child of f.getChildElementFragments()) {
|
|
213
|
+
const isBefore = child.hasAttribute(`${Env.prefix}each-before`);
|
|
214
|
+
const isAfter = child.hasAttribute(`${Env.prefix}each-after`);
|
|
215
|
+
if (!isBefore && !isAfter) {
|
|
216
|
+
tasks.push(child.remove());
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
const processChildren = (f) => {
|
|
222
|
+
removeClones(f);
|
|
223
|
+
for (const child of f.getChildElementFragments()) {
|
|
224
|
+
processChildren(child);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
// 対象フラグメント自体のクローンを削除し、子エレメント以下を再帰処理
|
|
228
|
+
removeClones(fragment);
|
|
229
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
230
|
+
processChildren(child);
|
|
231
|
+
}
|
|
232
|
+
return Promise.all(tasks).then(() => undefined);
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* 再帰的に値を初期化します。
|
|
236
|
+
*
|
|
237
|
+
* @param fragment 対象フラグメント
|
|
238
|
+
*/
|
|
239
|
+
static clearValues(fragment) {
|
|
240
|
+
fragment.clearValue();
|
|
241
|
+
for (const child of fragment.getChildElementFragments()) {
|
|
242
|
+
Form.clearValues(child);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* フラグメントとその子要素のメッセージをクリアします。
|
|
247
|
+
*
|
|
248
|
+
* @param fragment 対象フラグメント
|
|
249
|
+
* @returns Promise(メッセージのクリアが完了したら解決される)
|
|
250
|
+
*/
|
|
251
|
+
static clearMessages(fragment) {
|
|
252
|
+
return Haori.clearMessages(fragment.getTarget());
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* キーに一致するフラグメントにエラーメッセージを追加します。
|
|
256
|
+
* キーに一致するフラグメントが見つからない場合は、指定されたフラグメントにメッセージを追加します。
|
|
257
|
+
*
|
|
258
|
+
* @param fragment 対象フラグメント
|
|
259
|
+
* @param key キー(ドット区切りの文字列)
|
|
260
|
+
* @param message 追加するエラーメッセージ]
|
|
261
|
+
* @return Promise(メッセージの追加が完了したら解決される)
|
|
262
|
+
*/
|
|
263
|
+
static addErrorMessage(fragment, key, message) {
|
|
264
|
+
const promises = [];
|
|
265
|
+
const targetFragments = Form.findFragmentsByKey(fragment, key);
|
|
266
|
+
targetFragments.forEach(targetFragment => {
|
|
267
|
+
promises.push(Haori.addErrorMessage(targetFragment.getTarget(), message));
|
|
268
|
+
});
|
|
269
|
+
if (targetFragments.length === 0) {
|
|
270
|
+
promises.push(Haori.addErrorMessage(fragment.getTarget(), message));
|
|
271
|
+
}
|
|
272
|
+
return Promise.all(promises).then(() => undefined);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* 指定されたキーに一致するフラグメントを検索します。
|
|
276
|
+
*
|
|
277
|
+
* @param fragment 対象フラグメント
|
|
278
|
+
* @param key キー(ドット区切りの文字列)
|
|
279
|
+
* @returns 一致するフラグメントの配列
|
|
280
|
+
*/
|
|
281
|
+
static findFragmentsByKey(fragment, key) {
|
|
282
|
+
return Form.findFragmentByKeyParts(fragment, key.split('.'));
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* 指定されたキーに一致するフラグメントを検索します。
|
|
286
|
+
* data-form-list属性で指定された場合はdata-row属性を持つ子要素の位置と添字が一致するものを対象とします。
|
|
287
|
+
*
|
|
288
|
+
* @param fragment 対象フラグメント
|
|
289
|
+
* @param parts キーのパーツ
|
|
290
|
+
* @returns 一致するフラグメントの配列
|
|
291
|
+
*/
|
|
292
|
+
static findFragmentByKeyParts(fragment, parts) {
|
|
293
|
+
const results = [];
|
|
294
|
+
const key = parts[0];
|
|
295
|
+
if (parts.length == 1) {
|
|
296
|
+
const name = fragment.getAttribute('name');
|
|
297
|
+
if (name === key) {
|
|
298
|
+
results.push(fragment);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (fragment.hasAttribute(`${Env.prefix}form-object`)) {
|
|
302
|
+
if (parts.length > 1) {
|
|
303
|
+
const objectName = fragment.getAttribute(`${Env.prefix}form-object`);
|
|
304
|
+
if (objectName === key) {
|
|
305
|
+
fragment.getChildElementFragments().forEach(child => {
|
|
306
|
+
results.push(...Form.findFragmentByKeyParts(child, parts.slice(1)));
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else if (fragment.hasAttribute(`${Env.prefix}form-list`)) {
|
|
312
|
+
if (parts.length > 1) {
|
|
313
|
+
const listName = fragment.getAttribute(`${Env.prefix}form-list`);
|
|
314
|
+
const firstPoint = key.lastIndexOf('[');
|
|
315
|
+
const lastPoint = key.lastIndexOf(']');
|
|
316
|
+
if (firstPoint !== -1 && lastPoint !== -1 && firstPoint < lastPoint) {
|
|
317
|
+
const rawKey = key.substring(0, firstPoint);
|
|
318
|
+
if (listName === rawKey) {
|
|
319
|
+
const indexString = key.substring(firstPoint + 1, lastPoint);
|
|
320
|
+
const index = Number(indexString);
|
|
321
|
+
if (isNaN(index)) {
|
|
322
|
+
Log.error('Haori', `Invalid index: ${key}`);
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
const rows = fragment
|
|
326
|
+
.getChildElementFragments()
|
|
327
|
+
.filter(child => child.hasAttribute(`${Env.prefix}row`));
|
|
328
|
+
if (index < rows.length) {
|
|
329
|
+
results.push(...Form.findFragmentByKeyParts(rows[index], parts.slice(1)));
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
fragment.getChildElementFragments().forEach(child => {
|
|
338
|
+
results.push(...Form.findFragmentByKeyParts(child, parts));
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
return results;
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* 対象のフラグメントがフォームフラグメントであればそれを返し、
|
|
345
|
+
* そうでなければ先祖要素をたどってフォームフラグメントを探します。
|
|
346
|
+
*
|
|
347
|
+
* @param fragment
|
|
348
|
+
*/
|
|
349
|
+
static getFormFragment(fragment) {
|
|
350
|
+
const element = fragment.getTarget();
|
|
351
|
+
if (element instanceof HTMLFormElement) {
|
|
352
|
+
return fragment;
|
|
353
|
+
}
|
|
354
|
+
const parent = fragment.getParent();
|
|
355
|
+
if (parent) {
|
|
356
|
+
return this.getFormFragment(parent);
|
|
357
|
+
}
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.js","sourceRoot":"","sources":["../../src/form.ts"],"names":[],"mappings":"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"}
|