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/dev.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Haori開発モード管理機能
|
|
3
|
+
*
|
|
4
|
+
* 開発モードの有効/無効を管理し、デバッグ機能の制御を行います。
|
|
5
|
+
* プロダクション環境では開発向け機能を無効化することで、
|
|
6
|
+
* パフォーマンスとセキュリティを向上させます。
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* 開発モード管理クラスです。
|
|
10
|
+
*/
|
|
11
|
+
class Dev {
|
|
12
|
+
/**
|
|
13
|
+
* 開発モードの状態を取得します。
|
|
14
|
+
*
|
|
15
|
+
* @returns 開発モードならtrue、そうでなければfalse
|
|
16
|
+
*/
|
|
17
|
+
static isEnabled() {
|
|
18
|
+
return Dev.devMode;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 開発モードを有効化します。
|
|
22
|
+
*/
|
|
23
|
+
static enable() {
|
|
24
|
+
Dev.devMode = true;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 開発モードを無効化します。
|
|
28
|
+
*/
|
|
29
|
+
static disable() {
|
|
30
|
+
Dev.devMode = false;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 開発モードを切り替えます。
|
|
34
|
+
*
|
|
35
|
+
* @param enabled trueで有効化、falseで無効化
|
|
36
|
+
*/
|
|
37
|
+
static set(enabled) {
|
|
38
|
+
Dev.devMode = enabled;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/** 開発モードフラグ */
|
|
42
|
+
Dev.devMode = false;
|
|
43
|
+
export default Dev;
|
|
44
|
+
//# sourceMappingURL=dev.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/dev.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAqB,GAAG;IAItB;;;;OAIG;IACH,MAAM,CAAC,SAAS;QACd,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,MAAM;QACX,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,OAAO;QACZ,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,OAAgB;QACzB,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;;AAjCD,eAAe;AACA,WAAO,GAAG,KAAK,CAAC;eAFZ,GAAG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Haori環境検出機能
|
|
3
|
+
*
|
|
4
|
+
* 実行環境を管理します。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 実行環境を管理するクラスです。
|
|
8
|
+
*/
|
|
9
|
+
export default class Env {
|
|
10
|
+
private static _prefix;
|
|
11
|
+
/**
|
|
12
|
+
* 実行環境からプレフィックスと開発モードかどうかを自動検出します。
|
|
13
|
+
* scriptタグにdata-prefixがある場合は、その値+"-"をプレフィックスとして使用します。
|
|
14
|
+
* scriptタグにdata-dev属性がある場合、
|
|
15
|
+
* もしくはローカルホスト系ドメインであれば開発モードを有効化します。
|
|
16
|
+
*/
|
|
17
|
+
static detect(): void;
|
|
18
|
+
/**
|
|
19
|
+
* プレフィックスを取得します。
|
|
20
|
+
*
|
|
21
|
+
* @returns プレフィックス
|
|
22
|
+
*/
|
|
23
|
+
static get prefix(): string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,GAAG;IACtB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAmB;IAEzC;;;;;OAKG;IACH,MAAM,CAAC,MAAM,IAAI,IAAI;IAqCrB;;;;OAIG;IACH,WAAkB,MAAM,IAAI,MAAM,CAEjC;CACF"}
|
package/dist/src/env.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Haori環境検出機能
|
|
3
|
+
*
|
|
4
|
+
* 実行環境を管理します。
|
|
5
|
+
*/
|
|
6
|
+
import Dev from './dev';
|
|
7
|
+
/**
|
|
8
|
+
* 実行環境を管理するクラスです。
|
|
9
|
+
*/
|
|
10
|
+
class Env {
|
|
11
|
+
/**
|
|
12
|
+
* 実行環境からプレフィックスと開発モードかどうかを自動検出します。
|
|
13
|
+
* scriptタグにdata-prefixがある場合は、その値+"-"をプレフィックスとして使用します。
|
|
14
|
+
* scriptタグにdata-dev属性がある場合、
|
|
15
|
+
* もしくはローカルホスト系ドメインであれば開発モードを有効化します。
|
|
16
|
+
*/
|
|
17
|
+
static detect() {
|
|
18
|
+
try {
|
|
19
|
+
const currentScript = document.currentScript ||
|
|
20
|
+
document.querySelector('script[src*="haori"]');
|
|
21
|
+
if (currentScript instanceof HTMLScriptElement) {
|
|
22
|
+
const prefix = currentScript.getAttribute('data-prefix') || Env._prefix;
|
|
23
|
+
Env._prefix = prefix.endsWith('-') ? prefix : prefix + '-';
|
|
24
|
+
}
|
|
25
|
+
if (currentScript instanceof HTMLScriptElement &&
|
|
26
|
+
currentScript.hasAttribute(`${Env._prefix}dev`)) {
|
|
27
|
+
Dev.set(true);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// ローカルホスト系ドメインの場合
|
|
31
|
+
const host = window.location.hostname;
|
|
32
|
+
if (host === 'localhost' ||
|
|
33
|
+
host.endsWith('.localhost') ||
|
|
34
|
+
host === '127.0.0.1' ||
|
|
35
|
+
host === '::1' ||
|
|
36
|
+
host.endsWith('.local')) {
|
|
37
|
+
Dev.set(true);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
// それ以外は開発モードを無効化
|
|
41
|
+
Dev.set(false);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// SSRや非ブラウザ環境では無視
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* プレフィックスを取得します。
|
|
49
|
+
*
|
|
50
|
+
* @returns プレフィックス
|
|
51
|
+
*/
|
|
52
|
+
static get prefix() {
|
|
53
|
+
return Env._prefix;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
Env._prefix = 'data-';
|
|
57
|
+
export default Env;
|
|
58
|
+
if (document.readyState === 'loading') {
|
|
59
|
+
document.addEventListener('DOMContentLoaded', Env.detect);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
Env.detect();
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/env.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,GAAG,MAAM,OAAO,CAAC;AAExB;;GAEG;AACH,MAAqB,GAAG;IAGtB;;;;;OAKG;IACH,MAAM,CAAC,MAAM;QACX,IAAI,CAAC;YACH,MAAM,aAAa,GACjB,QAAQ,CAAC,aAAa;gBACtB,QAAQ,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;YACjD,IAAI,aAAa,YAAY,iBAAiB,EAAE,CAAC;gBAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC;gBACxE,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;YAC7D,CAAC;YACD,IACE,aAAa,YAAY,iBAAiB;gBAC1C,aAAa,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,OAAO,KAAK,CAAC,EAC/C,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,kBAAkB;YAClB,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtC,IACE,IAAI,KAAK,WAAW;gBACpB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAC3B,IAAI,KAAK,WAAW;gBACpB,IAAI,KAAK,KAAK;gBACd,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACd,OAAO;YACT,CAAC;YAED,iBAAiB;YACjB,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,kBAAkB;QACpB,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,MAAM,KAAK,MAAM;QACtB,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;;AApDc,WAAO,GAAW,OAAO,CAAC;eADtB,GAAG;AAwDxB,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5D,CAAC;KAAM,CAAC;IACN,GAAG,CAAC,MAAM,EAAE,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Haoriイベント発火ユーティリティ
|
|
3
|
+
*
|
|
4
|
+
* Haoriライブラリが発火するカスタムイベントの統一的な発火機能を提供します。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Haoriイベントを発火するユーティリティクラス
|
|
8
|
+
*/
|
|
9
|
+
export default class HaoriEvent {
|
|
10
|
+
/**
|
|
11
|
+
* カスタムイベントを発火します。
|
|
12
|
+
*
|
|
13
|
+
* @param target イベントを発火する対象要素
|
|
14
|
+
* @param eventName イベント名(haori:プレフィックスは自動追加)
|
|
15
|
+
* @param detail イベントの詳細データ
|
|
16
|
+
* @param options イベントオプション
|
|
17
|
+
*/
|
|
18
|
+
static dispatch(target: EventTarget, eventName: string, detail?: unknown, options?: {
|
|
19
|
+
bubbles?: boolean;
|
|
20
|
+
cancelable?: boolean;
|
|
21
|
+
composed?: boolean;
|
|
22
|
+
}): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* readyイベントを発火します。
|
|
25
|
+
*
|
|
26
|
+
* @param version ライブラリバージョン
|
|
27
|
+
*/
|
|
28
|
+
static ready(version?: string): void;
|
|
29
|
+
/**
|
|
30
|
+
* renderイベントを発火します。
|
|
31
|
+
*
|
|
32
|
+
* @param target 評価対象要素
|
|
33
|
+
*/
|
|
34
|
+
static render(target: HTMLElement): void;
|
|
35
|
+
/**
|
|
36
|
+
* importstartイベントを発火します。
|
|
37
|
+
*
|
|
38
|
+
* @param target data-import要素
|
|
39
|
+
* @param url インポート対象URL
|
|
40
|
+
*/
|
|
41
|
+
static importStart(target: HTMLElement, url: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* importendイベントを発火します。
|
|
44
|
+
*
|
|
45
|
+
* @param target data-import要素
|
|
46
|
+
* @param url インポート対象URL
|
|
47
|
+
* @param bytes 取得バイト数
|
|
48
|
+
* @param startedAt 開始時刻
|
|
49
|
+
*/
|
|
50
|
+
static importEnd(target: HTMLElement, url: string, bytes: number, startedAt: number): void;
|
|
51
|
+
/**
|
|
52
|
+
* importerrorイベントを発火します。
|
|
53
|
+
*
|
|
54
|
+
* @param target data-import要素
|
|
55
|
+
* @param url インポート対象URL
|
|
56
|
+
* @param error エラー内容
|
|
57
|
+
*/
|
|
58
|
+
static importError(target: HTMLElement, url: string, error: unknown): void;
|
|
59
|
+
/**
|
|
60
|
+
* bindchangeイベントを発火します。
|
|
61
|
+
*
|
|
62
|
+
* @param target バインド対象要素
|
|
63
|
+
* @param previous 変更前のデータ
|
|
64
|
+
* @param next 変更後のデータ
|
|
65
|
+
* @param reason 変更理由
|
|
66
|
+
*/
|
|
67
|
+
static bindChange(target: HTMLElement, previous: Record<string, unknown> | null, next: Record<string, unknown>, reason?: 'form' | 'fetch' | 'manual' | 'import' | 'other'): void;
|
|
68
|
+
/**
|
|
69
|
+
* eachupdateイベントを発火します。
|
|
70
|
+
*
|
|
71
|
+
* @param target data-each要素
|
|
72
|
+
* @param added 追加された行のキー
|
|
73
|
+
* @param removed 削除された行のキー
|
|
74
|
+
* @param order 現在の順序
|
|
75
|
+
*/
|
|
76
|
+
static eachUpdate(target: HTMLElement, added: string[], removed: string[], order: string[]): void;
|
|
77
|
+
/**
|
|
78
|
+
* rowaddイベントを発火します。
|
|
79
|
+
*
|
|
80
|
+
* @param target 行要素
|
|
81
|
+
* @param key 行キー
|
|
82
|
+
* @param index インデックス
|
|
83
|
+
* @param item 行データ
|
|
84
|
+
*/
|
|
85
|
+
static rowAdd(target: HTMLElement, key: string, index: number, item: unknown): void;
|
|
86
|
+
/**
|
|
87
|
+
* rowremoveイベントを発火します。
|
|
88
|
+
*
|
|
89
|
+
* @param target 行要素
|
|
90
|
+
* @param key 行キー
|
|
91
|
+
* @param index インデックス
|
|
92
|
+
*/
|
|
93
|
+
static rowRemove(target: HTMLElement, key: string, index: number): void;
|
|
94
|
+
/**
|
|
95
|
+
* rowmoveイベントを発火します。
|
|
96
|
+
*
|
|
97
|
+
* @param target 行要素
|
|
98
|
+
* @param key 行キー
|
|
99
|
+
* @param from 移動前インデックス
|
|
100
|
+
* @param to 移動後インデックス
|
|
101
|
+
*/
|
|
102
|
+
static rowMove(target: HTMLElement, key: string, from: number, to: number): void;
|
|
103
|
+
/**
|
|
104
|
+
* showイベントを発火します。
|
|
105
|
+
*
|
|
106
|
+
* @param target data-if要素
|
|
107
|
+
*/
|
|
108
|
+
static show(target: HTMLElement): void;
|
|
109
|
+
/**
|
|
110
|
+
* hideイベントを発火します。
|
|
111
|
+
*
|
|
112
|
+
* @param target data-if要素
|
|
113
|
+
*/
|
|
114
|
+
static hide(target: HTMLElement): void;
|
|
115
|
+
/**
|
|
116
|
+
* fetchstartイベントを発火します。
|
|
117
|
+
*
|
|
118
|
+
* @param target 起点要素
|
|
119
|
+
* @param url フェッチURL
|
|
120
|
+
* @param options フェッチオプション
|
|
121
|
+
* @param payload 送信データ
|
|
122
|
+
*/
|
|
123
|
+
static fetchStart(target: HTMLElement, url: string, options?: RequestInit, payload?: Record<string, unknown>): void;
|
|
124
|
+
/**
|
|
125
|
+
* fetchendイベントを発火します。
|
|
126
|
+
*
|
|
127
|
+
* @param target 起点要素
|
|
128
|
+
* @param url フェッチURL
|
|
129
|
+
* @param status HTTPステータス
|
|
130
|
+
* @param startedAt 開始時刻
|
|
131
|
+
*/
|
|
132
|
+
static fetchEnd(target: HTMLElement, url: string, status: number, startedAt: number): void;
|
|
133
|
+
/**
|
|
134
|
+
* fetcherrorイベントを発火します。
|
|
135
|
+
*
|
|
136
|
+
* @param target 起点要素
|
|
137
|
+
* @param url フェッチURL
|
|
138
|
+
* @param error エラー内容
|
|
139
|
+
* @param status HTTPステータス(存在する場合)
|
|
140
|
+
* @param startedAt 開始時刻(存在する場合)
|
|
141
|
+
*/
|
|
142
|
+
static fetchError(target: HTMLElement, url: string, error: unknown, status?: number, startedAt?: number): void;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=event.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/event.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B;;;;;;;OAOG;WACW,QAAQ,CACpB,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,GACA,OAAO;IAWV;;;;OAIG;WACW,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAI3C;;;;OAIG;WACW,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI/C;;;;;OAKG;WACW,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAOjE;;;;;;;OAOG;WACW,SAAS,CACrB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,IAAI;IAQP;;;;;;OAMG;WACW,WAAW,CACvB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,IAAI;IAIP;;;;;;;OAOG;WACW,UAAU,CACtB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,GAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAiB,GACjE,IAAI;IAwBP;;;;;;;OAOG;WACW,UAAU,CACtB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EAAE,GACd,IAAI;IASP;;;;;;;OAOG;WACW,MAAM,CAClB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GACZ,IAAI;IAIP;;;;;;OAMG;WACW,SAAS,CACrB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ,IAAI;IAIP;;;;;;;OAOG;WACW,OAAO,CACnB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,IAAI;IAIP;;;;OAIG;WACW,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI7C;;;;OAIG;WACW,IAAI,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI7C;;;;;;;OAOG;WACW,UAAU,CACtB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,WAAW,EACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,IAAI;IASP;;;;;;;OAOG;WACW,QAAQ,CACpB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,GAChB,IAAI;IAQP;;;;;;;;OAQG;WACW,UAAU,CACtB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;CAQR"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Haoriイベント発火ユーティリティ
|
|
3
|
+
*
|
|
4
|
+
* Haoriライブラリが発火するカスタムイベントの統一的な発火機能を提供します。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Haoriイベントを発火するユーティリティクラス
|
|
8
|
+
*/
|
|
9
|
+
export default class HaoriEvent {
|
|
10
|
+
/**
|
|
11
|
+
* カスタムイベントを発火します。
|
|
12
|
+
*
|
|
13
|
+
* @param target イベントを発火する対象要素
|
|
14
|
+
* @param eventName イベント名(haori:プレフィックスは自動追加)
|
|
15
|
+
* @param detail イベントの詳細データ
|
|
16
|
+
* @param options イベントオプション
|
|
17
|
+
*/
|
|
18
|
+
static dispatch(target, eventName, detail, options) {
|
|
19
|
+
const event = new CustomEvent(`haori:${eventName}`, {
|
|
20
|
+
bubbles: options?.bubbles ?? true,
|
|
21
|
+
cancelable: options?.cancelable ?? false,
|
|
22
|
+
composed: options?.composed ?? true,
|
|
23
|
+
detail,
|
|
24
|
+
});
|
|
25
|
+
return target.dispatchEvent(event);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* readyイベントを発火します。
|
|
29
|
+
*
|
|
30
|
+
* @param version ライブラリバージョン
|
|
31
|
+
*/
|
|
32
|
+
static ready(version) {
|
|
33
|
+
HaoriEvent.dispatch(document, 'ready', { version });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* renderイベントを発火します。
|
|
37
|
+
*
|
|
38
|
+
* @param target 評価対象要素
|
|
39
|
+
*/
|
|
40
|
+
static render(target) {
|
|
41
|
+
HaoriEvent.dispatch(target, 'render', { target });
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* importstartイベントを発火します。
|
|
45
|
+
*
|
|
46
|
+
* @param target data-import要素
|
|
47
|
+
* @param url インポート対象URL
|
|
48
|
+
*/
|
|
49
|
+
static importStart(target, url) {
|
|
50
|
+
HaoriEvent.dispatch(target, 'importstart', {
|
|
51
|
+
url,
|
|
52
|
+
startedAt: performance.now(),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* importendイベントを発火します。
|
|
57
|
+
*
|
|
58
|
+
* @param target data-import要素
|
|
59
|
+
* @param url インポート対象URL
|
|
60
|
+
* @param bytes 取得バイト数
|
|
61
|
+
* @param startedAt 開始時刻
|
|
62
|
+
*/
|
|
63
|
+
static importEnd(target, url, bytes, startedAt) {
|
|
64
|
+
HaoriEvent.dispatch(target, 'importend', {
|
|
65
|
+
url,
|
|
66
|
+
bytes,
|
|
67
|
+
durationMs: performance.now() - startedAt,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* importerrorイベントを発火します。
|
|
72
|
+
*
|
|
73
|
+
* @param target data-import要素
|
|
74
|
+
* @param url インポート対象URL
|
|
75
|
+
* @param error エラー内容
|
|
76
|
+
*/
|
|
77
|
+
static importError(target, url, error) {
|
|
78
|
+
HaoriEvent.dispatch(target, 'importerror', { url, error });
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* bindchangeイベントを発火します。
|
|
82
|
+
*
|
|
83
|
+
* @param target バインド対象要素
|
|
84
|
+
* @param previous 変更前のデータ
|
|
85
|
+
* @param next 変更後のデータ
|
|
86
|
+
* @param reason 変更理由
|
|
87
|
+
*/
|
|
88
|
+
static bindChange(target, previous, next, reason = 'other') {
|
|
89
|
+
const changedKeys = [];
|
|
90
|
+
// 変更されたキーを検出
|
|
91
|
+
const prevKeys = new Set(Object.keys(previous || {}));
|
|
92
|
+
const nextKeys = new Set(Object.keys(next));
|
|
93
|
+
const allKeys = new Set([...prevKeys, ...nextKeys]);
|
|
94
|
+
for (const key of allKeys) {
|
|
95
|
+
const prevValue = previous?.[key];
|
|
96
|
+
const nextValue = next[key];
|
|
97
|
+
if (prevValue !== nextValue) {
|
|
98
|
+
changedKeys.push(key);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
HaoriEvent.dispatch(target, 'bindchange', {
|
|
102
|
+
previous: previous || {},
|
|
103
|
+
next,
|
|
104
|
+
changedKeys,
|
|
105
|
+
reason,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* eachupdateイベントを発火します。
|
|
110
|
+
*
|
|
111
|
+
* @param target data-each要素
|
|
112
|
+
* @param added 追加された行のキー
|
|
113
|
+
* @param removed 削除された行のキー
|
|
114
|
+
* @param order 現在の順序
|
|
115
|
+
*/
|
|
116
|
+
static eachUpdate(target, added, removed, order) {
|
|
117
|
+
HaoriEvent.dispatch(target, 'eachupdate', {
|
|
118
|
+
added,
|
|
119
|
+
removed,
|
|
120
|
+
order,
|
|
121
|
+
total: order.length,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* rowaddイベントを発火します。
|
|
126
|
+
*
|
|
127
|
+
* @param target 行要素
|
|
128
|
+
* @param key 行キー
|
|
129
|
+
* @param index インデックス
|
|
130
|
+
* @param item 行データ
|
|
131
|
+
*/
|
|
132
|
+
static rowAdd(target, key, index, item) {
|
|
133
|
+
HaoriEvent.dispatch(target, 'rowadd', { key, index, item });
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* rowremoveイベントを発火します。
|
|
137
|
+
*
|
|
138
|
+
* @param target 行要素
|
|
139
|
+
* @param key 行キー
|
|
140
|
+
* @param index インデックス
|
|
141
|
+
*/
|
|
142
|
+
static rowRemove(target, key, index) {
|
|
143
|
+
HaoriEvent.dispatch(target, 'rowremove', { key, index });
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* rowmoveイベントを発火します。
|
|
147
|
+
*
|
|
148
|
+
* @param target 行要素
|
|
149
|
+
* @param key 行キー
|
|
150
|
+
* @param from 移動前インデックス
|
|
151
|
+
* @param to 移動後インデックス
|
|
152
|
+
*/
|
|
153
|
+
static rowMove(target, key, from, to) {
|
|
154
|
+
HaoriEvent.dispatch(target, 'rowmove', { key, from, to });
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* showイベントを発火します。
|
|
158
|
+
*
|
|
159
|
+
* @param target data-if要素
|
|
160
|
+
*/
|
|
161
|
+
static show(target) {
|
|
162
|
+
HaoriEvent.dispatch(target, 'show', { visible: true });
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* hideイベントを発火します。
|
|
166
|
+
*
|
|
167
|
+
* @param target data-if要素
|
|
168
|
+
*/
|
|
169
|
+
static hide(target) {
|
|
170
|
+
HaoriEvent.dispatch(target, 'hide', { visible: false });
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* fetchstartイベントを発火します。
|
|
174
|
+
*
|
|
175
|
+
* @param target 起点要素
|
|
176
|
+
* @param url フェッチURL
|
|
177
|
+
* @param options フェッチオプション
|
|
178
|
+
* @param payload 送信データ
|
|
179
|
+
*/
|
|
180
|
+
static fetchStart(target, url, options, payload) {
|
|
181
|
+
HaoriEvent.dispatch(target, 'fetchstart', {
|
|
182
|
+
url,
|
|
183
|
+
options: options || {},
|
|
184
|
+
payload,
|
|
185
|
+
startedAt: performance.now(),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* fetchendイベントを発火します。
|
|
190
|
+
*
|
|
191
|
+
* @param target 起点要素
|
|
192
|
+
* @param url フェッチURL
|
|
193
|
+
* @param status HTTPステータス
|
|
194
|
+
* @param startedAt 開始時刻
|
|
195
|
+
*/
|
|
196
|
+
static fetchEnd(target, url, status, startedAt) {
|
|
197
|
+
HaoriEvent.dispatch(target, 'fetchend', {
|
|
198
|
+
url,
|
|
199
|
+
status,
|
|
200
|
+
durationMs: performance.now() - startedAt,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* fetcherrorイベントを発火します。
|
|
205
|
+
*
|
|
206
|
+
* @param target 起点要素
|
|
207
|
+
* @param url フェッチURL
|
|
208
|
+
* @param error エラー内容
|
|
209
|
+
* @param status HTTPステータス(存在する場合)
|
|
210
|
+
* @param startedAt 開始時刻(存在する場合)
|
|
211
|
+
*/
|
|
212
|
+
static fetchError(target, url, error, status, startedAt) {
|
|
213
|
+
HaoriEvent.dispatch(target, 'fetcherror', {
|
|
214
|
+
url,
|
|
215
|
+
status,
|
|
216
|
+
error,
|
|
217
|
+
durationMs: startedAt ? performance.now() - startedAt : undefined,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview イベント振り分け機能
|
|
3
|
+
*
|
|
4
|
+
* クリック/変更/ロードイベントを検出し Procedure に委譲します。
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* イベントの振り分けを行うクラスです。
|
|
8
|
+
*/
|
|
9
|
+
export default class EventDispatcher {
|
|
10
|
+
/** ルート要素 */
|
|
11
|
+
private readonly root;
|
|
12
|
+
/** クリックデリゲータ */
|
|
13
|
+
private readonly onClick;
|
|
14
|
+
/** 変更デリゲータ */
|
|
15
|
+
private readonly onChange;
|
|
16
|
+
/** ロードデリゲータ(キャプチャで拾う) */
|
|
17
|
+
private readonly onLoadCapture;
|
|
18
|
+
/** ページ全体のロード完了時の処理 */
|
|
19
|
+
private readonly onWindowLoad;
|
|
20
|
+
/**
|
|
21
|
+
* コンストラクタ。
|
|
22
|
+
*
|
|
23
|
+
* @param root 監視対象のルート要素(デフォルトは document )
|
|
24
|
+
*/
|
|
25
|
+
constructor(root?: Document | HTMLElement);
|
|
26
|
+
/**
|
|
27
|
+
* イベントリスナーの登録を開始します。
|
|
28
|
+
* クリック、変更、ロードイベントを監視し、対応するProcedureを実行します。
|
|
29
|
+
*/
|
|
30
|
+
start(): void;
|
|
31
|
+
/**
|
|
32
|
+
* イベントリスナーの登録を停止します。
|
|
33
|
+
*/
|
|
34
|
+
stop(): void;
|
|
35
|
+
/**
|
|
36
|
+
* イベントを処理し、対応するProcedureを実行します。
|
|
37
|
+
*
|
|
38
|
+
* @param event 発生したイベント
|
|
39
|
+
* @param type イベントタイプ('click', 'change', 'load'など)
|
|
40
|
+
*/
|
|
41
|
+
private delegate;
|
|
42
|
+
/**
|
|
43
|
+
* イベントのターゲットから HTMLElement を取得します。
|
|
44
|
+
*
|
|
45
|
+
* @param target イベントのターゲット
|
|
46
|
+
* @returns HTMLElement または null
|
|
47
|
+
*/
|
|
48
|
+
private getElementFromTarget;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=event_dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"event_dispatcher.d.ts","sourceRoot":"","sources":["../../src/event_dispatcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAE9C,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmD;IAE3E,cAAc;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAE7E,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CACC;IAE/B,sBAAsB;IACtB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAO3B;IAEF;;;;OAIG;gBACS,IAAI,GAAE,QAAQ,GAAG,WAAsB;IAInD;;;OAGG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;;;;OAKG;IACH,OAAO,CAAC,QAAQ;IAoBhB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CAY7B"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview イベント振り分け機能
|
|
3
|
+
*
|
|
4
|
+
* クリック/変更/ロードイベントを検出し Procedure に委譲します。
|
|
5
|
+
*/
|
|
6
|
+
import Fragment, { ElementFragment } from './fragment';
|
|
7
|
+
import Procedure from './procedure';
|
|
8
|
+
import Log from './log';
|
|
9
|
+
/**
|
|
10
|
+
* イベントの振り分けを行うクラスです。
|
|
11
|
+
*/
|
|
12
|
+
export default class EventDispatcher {
|
|
13
|
+
/**
|
|
14
|
+
* コンストラクタ。
|
|
15
|
+
*
|
|
16
|
+
* @param root 監視対象のルート要素(デフォルトは document )
|
|
17
|
+
*/
|
|
18
|
+
constructor(root = document) {
|
|
19
|
+
/** クリックデリゲータ */
|
|
20
|
+
this.onClick = (event) => this.delegate(event, 'click');
|
|
21
|
+
/** 変更デリゲータ */
|
|
22
|
+
this.onChange = (event) => this.delegate(event, 'change');
|
|
23
|
+
/** ロードデリゲータ(キャプチャで拾う) */
|
|
24
|
+
this.onLoadCapture = (event) => this.delegate(event, 'load');
|
|
25
|
+
/** ページ全体のロード完了時の処理 */
|
|
26
|
+
this.onWindowLoad = () => {
|
|
27
|
+
// ページロード時にも load を1回ディスパッチ
|
|
28
|
+
const html = document.documentElement;
|
|
29
|
+
const fragment = Fragment.get(html);
|
|
30
|
+
if (fragment) {
|
|
31
|
+
void new Procedure(fragment, 'load').run();
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
this.root = root;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* イベントリスナーの登録を開始します。
|
|
38
|
+
* クリック、変更、ロードイベントを監視し、対応するProcedureを実行します。
|
|
39
|
+
*/
|
|
40
|
+
start() {
|
|
41
|
+
this.root.addEventListener('click', this.onClick);
|
|
42
|
+
this.root.addEventListener('change', this.onChange);
|
|
43
|
+
// load は非バブルなのでキャプチャで拾う
|
|
44
|
+
this.root.addEventListener('load', this.onLoadCapture, true);
|
|
45
|
+
// ページ全体のロード
|
|
46
|
+
window.addEventListener('load', this.onWindowLoad, { once: true });
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* イベントリスナーの登録を停止します。
|
|
50
|
+
*/
|
|
51
|
+
stop() {
|
|
52
|
+
this.root.removeEventListener('click', this.onClick);
|
|
53
|
+
this.root.removeEventListener('change', this.onChange);
|
|
54
|
+
this.root.removeEventListener('load', this.onLoadCapture, true);
|
|
55
|
+
window.removeEventListener('load', this.onWindowLoad);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* イベントを処理し、対応するProcedureを実行します。
|
|
59
|
+
*
|
|
60
|
+
* @param event 発生したイベント
|
|
61
|
+
* @param type イベントタイプ('click', 'change', 'load'など)
|
|
62
|
+
*/
|
|
63
|
+
delegate(event, type) {
|
|
64
|
+
const element = this.getElementFromTarget(event.target);
|
|
65
|
+
if (!element) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const fragment = Fragment.get(element);
|
|
69
|
+
if (!fragment) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// changeイベントの場合、DOM値と同期
|
|
73
|
+
if (type === 'change' && fragment instanceof ElementFragment) {
|
|
74
|
+
fragment.syncValue();
|
|
75
|
+
}
|
|
76
|
+
new Procedure(fragment, type).run().catch(error => {
|
|
77
|
+
Log.error('[Haori]', 'Procedure execution error:', error);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* イベントのターゲットから HTMLElement を取得します。
|
|
82
|
+
*
|
|
83
|
+
* @param target イベントのターゲット
|
|
84
|
+
* @returns HTMLElement または null
|
|
85
|
+
*/
|
|
86
|
+
getElementFromTarget(target) {
|
|
87
|
+
if (!target) {
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
if (target instanceof HTMLElement) {
|
|
91
|
+
return target;
|
|
92
|
+
}
|
|
93
|
+
if (target instanceof Node) {
|
|
94
|
+
return target.parentElement;
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=event_dispatcher.js.map
|