haori 0.26.2 → 0.28.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/README.ja.md +3 -1
- package/README.md +3 -1
- package/dist/haori.cjs.js +22 -20
- package/dist/haori.es.js +3417 -1637
- package/dist/haori.iife.js +22 -20
- package/dist/index.d.ts +368 -3
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -60,6 +60,16 @@ export declare class Core {
|
|
|
60
60
|
private static readonly EVALUATE_ALL_EXCLUDED_ATTRIBUTE_SUFFIXES;
|
|
61
61
|
/** 属性内プレースホルダ検出用の正規表現 */
|
|
62
62
|
private static readonly ATTRIBUTE_PLACEHOLDER_REGEX;
|
|
63
|
+
/**
|
|
64
|
+
* 行スコープ判定で「属性値そのものが式」とみなす `data-*` 属性のサフィックス。
|
|
65
|
+
* `{{...}}` を伴わずに式を書く属性だけを列挙する。
|
|
66
|
+
*/
|
|
67
|
+
private static readonly ROW_LOCAL_EXPRESSION_ATTRIBUTES;
|
|
68
|
+
/**
|
|
69
|
+
* 行スコープ判定で「属性値が式ではない」とみなす `data-*` 属性のサフィックス。
|
|
70
|
+
* ここに無い `data-*` 属性は、行の外を参照し得るものとして安全側に扱う。
|
|
71
|
+
*/
|
|
72
|
+
private static readonly ROW_LOCAL_STATIC_ATTRIBUTES;
|
|
63
73
|
/** data-fetch の自動再評価状態 */
|
|
64
74
|
private static readonly REACTIVE_FETCH_STATES;
|
|
65
75
|
/** data-import の自動再評価状態 */
|
|
@@ -473,6 +483,16 @@ export declare class Core {
|
|
|
473
483
|
* @return 差分更新完了の Promise
|
|
474
484
|
*/
|
|
475
485
|
private static performEachUpdate;
|
|
486
|
+
/**
|
|
487
|
+
* 差分更新が不要な `data-each` の既存行について、子孫の再評価だけを行います。
|
|
488
|
+
*
|
|
489
|
+
* 行スコープの値だけで描画が決まるテンプレートでは、行の要素データが同値である
|
|
490
|
+
* 限り描画結果も変わらないため何もしません。
|
|
491
|
+
*
|
|
492
|
+
* @param fragment `data-each` コンテナのフラグメント
|
|
493
|
+
* @returns 再評価完了の Promise
|
|
494
|
+
*/
|
|
495
|
+
private static reevaluateEachRows;
|
|
476
496
|
/**
|
|
477
497
|
* data-each 属性値を仕様に従って配列へ正規化します。
|
|
478
498
|
*
|
|
@@ -488,6 +508,51 @@ export declare class Core {
|
|
|
488
508
|
* @returns 省略可能なら true
|
|
489
509
|
*/
|
|
490
510
|
private static canSkipUnchangedNestedEach;
|
|
511
|
+
/**
|
|
512
|
+
* `data-each` のテンプレートが行スコープの値だけで描画できるかどうかを返します。
|
|
513
|
+
*
|
|
514
|
+
* 行スコープとは `data-each-arg` と `data-each-index` で公開される名前です。
|
|
515
|
+
* テンプレート内の式がこの名前だけを参照している場合、要素データが同値なら
|
|
516
|
+
* 描画結果も変わらないため、行の子孫の再評価を省略できます。逆に行の外にある
|
|
517
|
+
* 名前(別の一覧や親スコープの値)を参照している場合は、要素データが同値でも
|
|
518
|
+
* 再評価が必要です。
|
|
519
|
+
*
|
|
520
|
+
* 判定できない場合はすべて「行スコープ外」(= 再評価が必要)へ倒します。
|
|
521
|
+
* 具体的には、テンプレート未確定、`data-each-arg` の無い構成(要素データのキーが
|
|
522
|
+
* 行スコープへ直接展開されるため参照名を静的に決められない)、解析できない式、
|
|
523
|
+
* 既知でない `data-*` 属性が該当します。
|
|
524
|
+
*
|
|
525
|
+
* 判定結果はテンプレート単位で不変なのでフラグメントへ保存して再利用します。
|
|
526
|
+
*
|
|
527
|
+
* @param fragment `data-each` コンテナのフラグメント
|
|
528
|
+
* @returns 行スコープの値だけで描画できるなら true
|
|
529
|
+
*/
|
|
530
|
+
private static isRowLocalEachTemplate;
|
|
531
|
+
/**
|
|
532
|
+
* フラグメントとその子孫の式が、指定した名前だけを参照しているかを判定します。
|
|
533
|
+
*
|
|
534
|
+
* @param fragment 判定対象フラグメント
|
|
535
|
+
* @param scopeNames 参照してよい名前の集合
|
|
536
|
+
* @returns 指定した名前だけを参照しているなら true
|
|
537
|
+
*/
|
|
538
|
+
private static isRowLocalSubtree;
|
|
539
|
+
/**
|
|
540
|
+
* 式の集合が、指定した名前だけを参照しているかを判定します。
|
|
541
|
+
*
|
|
542
|
+
* 参照名を取り出せなかった式は安全側(= 指定外を参照している)として扱います。
|
|
543
|
+
*
|
|
544
|
+
* @param expressions 判定対象の式
|
|
545
|
+
* @param scopeNames 参照してよい名前の集合
|
|
546
|
+
* @returns 指定した名前だけを参照しているなら true
|
|
547
|
+
*/
|
|
548
|
+
private static areExpressionsRowLocal;
|
|
549
|
+
/**
|
|
550
|
+
* 文字列から `{{式}}` の中身を取り出します。
|
|
551
|
+
*
|
|
552
|
+
* @param raw 評価前の文字列
|
|
553
|
+
* @returns 式の一覧(出現順)
|
|
554
|
+
*/
|
|
555
|
+
private static extractInterpolations;
|
|
491
556
|
/**
|
|
492
557
|
* data-derive subtree の入力が同値で、保守条件も満たす場合に
|
|
493
558
|
* 子走査を省略できるかどうかを返します。
|
|
@@ -532,6 +597,19 @@ export declare class Core {
|
|
|
532
597
|
* @returns プロファイル
|
|
533
598
|
*/
|
|
534
599
|
private static getOrCreateDerivedSubtreeProfile;
|
|
600
|
+
/**
|
|
601
|
+
* 要素の `id` 属性を安全に取得します。
|
|
602
|
+
*
|
|
603
|
+
* `<form>` は配下の入力要素の `name` が同名の組み込みプロパティを上書きします
|
|
604
|
+
* (HTML 仕様の named access)。そのため `<input name="id">` を含むフォームでは
|
|
605
|
+
* `form.id` が文字列ではなく input 要素を返し、文字列として扱うと
|
|
606
|
+
* `[object HTMLInputElement]` になったり `.trim()` で TypeError になります。
|
|
607
|
+
* 属性から直接読み取ってこの上書きを避けます。
|
|
608
|
+
*
|
|
609
|
+
* @param element 対象要素
|
|
610
|
+
* @returns `id` 属性の値。指定が無ければ空文字
|
|
611
|
+
*/
|
|
612
|
+
private static resolveElementId;
|
|
535
613
|
/**
|
|
536
614
|
* data-derive subtree host の識別子を作成します。
|
|
537
615
|
*
|
|
@@ -582,6 +660,39 @@ export declare class Core {
|
|
|
582
660
|
* @param newList 新しいリスト
|
|
583
661
|
*/
|
|
584
662
|
private static updateDiff;
|
|
663
|
+
/**
|
|
664
|
+
* 再利用した `data-each` の行を、新しい並び順の位置へ移動します。
|
|
665
|
+
*
|
|
666
|
+
* `insertTargets` は現在の子並びを表す作業用配列で、移動に合わせて更新します。
|
|
667
|
+
* すでに目的の位置にある場合は何もしません。
|
|
668
|
+
*
|
|
669
|
+
* @param parent `data-each` コンテナのフラグメント
|
|
670
|
+
* @param row 移動対象の行フラグメント
|
|
671
|
+
* @param insertTargets 現在の子並び(この呼び出しで更新される)
|
|
672
|
+
* @param targetIndex 移動先のインデックス
|
|
673
|
+
* @returns 移動完了の Promise
|
|
674
|
+
*/
|
|
675
|
+
private static repositionEachRow;
|
|
676
|
+
/**
|
|
677
|
+
* `data-each` の行の入力欄へ、その行の要素データを反映します。
|
|
678
|
+
*
|
|
679
|
+
* `data-each` と `data-form-list` を同一要素へ指定した「編集可能な繰り返し行」では、
|
|
680
|
+
* 行内の入力欄は要素データのキーと `name` で対応します。`Core.setBindingData()` の
|
|
681
|
+
* 逆方向同期(`Form.syncValues`)は `Core.evaluateAll`(= 行生成)より**前**に走る
|
|
682
|
+
* ため、その更新で生成・更新された行には値が入りません。ここで行単位に補います。
|
|
683
|
+
*
|
|
684
|
+
* 呼び出すのは「新規生成した行」と「要素データが変化した再利用行」だけです。
|
|
685
|
+
* 変化していない行へ再適用すると、描画の待ち時間中に利用者が編集した入力欄を
|
|
686
|
+
* 古い値で巻き戻す競合になります(0.26.1 で修正した問題と同種)。行の途中へ要素を
|
|
687
|
+
* 挿入すると以降の行は別の要素データを担当することになるため、変化した再利用行への
|
|
688
|
+
* 適用は必要です(これを省くと挿入位置以降の入力値が前の行のまま残ります)。
|
|
689
|
+
*
|
|
690
|
+
* @param parent `data-each` コンテナのフラグメント
|
|
691
|
+
* @param row 行のフラグメント
|
|
692
|
+
* @param item 行の要素データ
|
|
693
|
+
* @returns 反映完了の Promise
|
|
694
|
+
*/
|
|
695
|
+
private static applyRowFormValues;
|
|
585
696
|
/**
|
|
586
697
|
* リスト比較用のキーを生成します。
|
|
587
698
|
*
|
|
@@ -642,7 +753,7 @@ declare class ElementFragment extends Fragment {
|
|
|
642
753
|
/** HTML 真偽属性名のセット */
|
|
643
754
|
private static readonly BOOLEAN_ATTRIBUTES;
|
|
644
755
|
/** inputイベントを発生させるタイプ */
|
|
645
|
-
private readonly INPUT_EVENT_TYPES;
|
|
756
|
+
private static readonly INPUT_EVENT_TYPES;
|
|
646
757
|
/** 子フラグメントのリスト */
|
|
647
758
|
private readonly children;
|
|
648
759
|
/** 属性名に対する属性情報のマップ */
|
|
@@ -679,6 +790,11 @@ declare class ElementFragment extends Fragment {
|
|
|
679
790
|
private displayPriority;
|
|
680
791
|
/** each用のテンプレート */
|
|
681
792
|
private template;
|
|
793
|
+
/**
|
|
794
|
+
* each テンプレートが行スコープの値だけで描画できるかどうか(未判定は null)。
|
|
795
|
+
* テンプレートは差し替えられるまで不変なので、判定結果を保持して再利用する。
|
|
796
|
+
*/
|
|
797
|
+
private rowLocalTemplate;
|
|
682
798
|
/** each比較用のキー */
|
|
683
799
|
private listKey;
|
|
684
800
|
/** 直近に描画した each 行の入力署名 */
|
|
@@ -697,6 +813,13 @@ declare class ElementFragment extends Fragment {
|
|
|
697
813
|
private skipMutationAttributes;
|
|
698
814
|
/** 値変更スキップフラグ(更新イベントによる無限ループ対応) */
|
|
699
815
|
private skipChangeValue;
|
|
816
|
+
/** ユーザー編集の通し番号の発番元(全フラグメント共通、単調増加)。 */
|
|
817
|
+
private static userEditCounter;
|
|
818
|
+
/**
|
|
819
|
+
* この入力欄を最後にユーザーが編集したときの通し番号(未編集は 0)。
|
|
820
|
+
* 「ある時点より後に編集されたか」を比較するために使う。
|
|
821
|
+
*/
|
|
822
|
+
private userEditSequence;
|
|
700
823
|
/**
|
|
701
824
|
* エレメントフラグメントのコンストラクタ。
|
|
702
825
|
* アトリビュートや子フラグメントの作成も行います。
|
|
@@ -873,6 +996,18 @@ declare class ElementFragment extends Fragment {
|
|
|
873
996
|
* @param template フラグメントのテンプレート
|
|
874
997
|
*/
|
|
875
998
|
setTemplate(template: ElementFragment | null): void;
|
|
999
|
+
/**
|
|
1000
|
+
* `data-each` テンプレートが行スコープの値だけで描画できるかの判定結果を返します。
|
|
1001
|
+
*
|
|
1002
|
+
* @returns 判定済みなら真偽値、未判定なら null
|
|
1003
|
+
*/
|
|
1004
|
+
getRowLocalTemplate(): boolean | null;
|
|
1005
|
+
/**
|
|
1006
|
+
* `data-each` テンプレートが行スコープの値だけで描画できるかの判定結果を保存します。
|
|
1007
|
+
*
|
|
1008
|
+
* @param rowLocal 行スコープだけで描画できるなら true
|
|
1009
|
+
*/
|
|
1010
|
+
setRowLocalTemplate(rowLocal: boolean | null): void;
|
|
876
1011
|
/**
|
|
877
1012
|
* 比較用リストキーを設定します。
|
|
878
1013
|
*
|
|
@@ -979,6 +1114,31 @@ declare class ElementFragment extends Fragment {
|
|
|
979
1114
|
* @returns 入力エレメントの値
|
|
980
1115
|
*/
|
|
981
1116
|
getValue(): string | number | boolean | string[] | null;
|
|
1117
|
+
/**
|
|
1118
|
+
* 現在のユーザー編集の通し番号を返します。
|
|
1119
|
+
*
|
|
1120
|
+
* 通信を開始した時点の番号を控えておき、応答が届いたときに各入力欄の
|
|
1121
|
+
* `getUserEditSequence()` と比べることで「リクエスト送出後に編集されたか」を
|
|
1122
|
+
* 判定できます。
|
|
1123
|
+
*
|
|
1124
|
+
* @returns 直近に発番したユーザー編集の通し番号(未発番なら 0)
|
|
1125
|
+
*/
|
|
1126
|
+
static currentUserEditSequence(): number;
|
|
1127
|
+
/**
|
|
1128
|
+
* この入力欄がユーザーに編集されたことを記録します。
|
|
1129
|
+
*
|
|
1130
|
+
* `change` / `input` の委譲で内部値を DOM から同期した直後に呼び出します。
|
|
1131
|
+
* プログラムからの値反映(バインド由来の書き戻しなど)では呼び出しません。
|
|
1132
|
+
*
|
|
1133
|
+
* @returns 戻り値はありません。
|
|
1134
|
+
*/
|
|
1135
|
+
markUserEdit(): void;
|
|
1136
|
+
/**
|
|
1137
|
+
* この入力欄を最後にユーザーが編集したときの通し番号を返します。
|
|
1138
|
+
*
|
|
1139
|
+
* @returns ユーザー編集の通し番号(未編集なら 0)
|
|
1140
|
+
*/
|
|
1141
|
+
getUserEditSequence(): number;
|
|
982
1142
|
/**
|
|
983
1143
|
* 内部の値をクリアします。エレメントのvalue値は変化しません。
|
|
984
1144
|
*/
|
|
@@ -995,6 +1155,21 @@ declare class ElementFragment extends Fragment {
|
|
|
995
1155
|
* @returns 正規化後の値(`type="number"` なら数値または null)
|
|
996
1156
|
*/
|
|
997
1157
|
private normalizeValueForElement;
|
|
1158
|
+
/**
|
|
1159
|
+
* `value` の宣言バインド(テンプレート式・`data-attr-value`)で DOM プロパティと
|
|
1160
|
+
* 内部値を同期する対象要素かどうかを判定します。
|
|
1161
|
+
*
|
|
1162
|
+
* `value` 属性の反映だけでは `element.value` や内部値(値収集や式評価が参照する値)が
|
|
1163
|
+
* 更新されないため、これらの要素では属性に加えてプロパティも揃えます。
|
|
1164
|
+
* `type="hidden"` は利用者が編集できず送信される値を持つため対象に含めます
|
|
1165
|
+
* (`INPUT_EVENT_TYPES` は `input` イベント発火の可否を決める別目的の一覧なので、
|
|
1166
|
+
* そちらへは追加しません)。checkbox / radio の `value` は送信値であってチェック
|
|
1167
|
+
* 状態ではないため対象外です(状態は `checked` の同期で扱います)。
|
|
1168
|
+
*
|
|
1169
|
+
* @param element 判定対象のエレメント
|
|
1170
|
+
* @returns 同期対象の場合true
|
|
1171
|
+
*/
|
|
1172
|
+
static isValuePropertyTarget(element: Element): element is HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement;
|
|
998
1173
|
/**
|
|
999
1174
|
* 内部の値をDOMの値と同期します。
|
|
1000
1175
|
* changeイベント時など、DOM値が変更された後に呼び出されます。
|
|
@@ -1026,6 +1201,7 @@ declare class ElementFragment extends Fragment {
|
|
|
1026
1201
|
* @param rawName 生の属性名
|
|
1027
1202
|
* @param targetName 反映先の属性名
|
|
1028
1203
|
* @param value 生の属性値
|
|
1204
|
+
* @param fromObserver MutationObserver 経由の書き戻しかどうか
|
|
1029
1205
|
* @returns 属性更新の Promise
|
|
1030
1206
|
*/
|
|
1031
1207
|
setAliasedAttribute(rawName: string, targetName: string, value: string | null, fromObserver?: boolean): Promise<void>;
|
|
@@ -1044,6 +1220,7 @@ declare class ElementFragment extends Fragment {
|
|
|
1044
1220
|
* @param targetName 反映先の属性名
|
|
1045
1221
|
* @param value 生の属性値
|
|
1046
1222
|
* @param syncValueProperty value 属性更新時に DOM property も同期するかどうか
|
|
1223
|
+
* @param fromObserver MutationObserver 経由の書き戻しかどうか
|
|
1047
1224
|
* @returns 属性更新の Promise
|
|
1048
1225
|
*/
|
|
1049
1226
|
private setAttributeInternal;
|
|
@@ -1162,6 +1339,23 @@ declare class ElementFragment extends Fragment {
|
|
|
1162
1339
|
export declare class Env {
|
|
1163
1340
|
private static _prefix;
|
|
1164
1341
|
private static _runtime;
|
|
1342
|
+
private static _strictBind;
|
|
1343
|
+
/**
|
|
1344
|
+
* 厳格バインドモードが有効かどうかを取得します。
|
|
1345
|
+
*
|
|
1346
|
+
* 有効な場合、バインドに無いキーの参照を検出した時点で `error` ログを出力します。
|
|
1347
|
+
* 無効(既定)の場合は正常系として扱い、開発モードで集約警告のみを出します。
|
|
1348
|
+
*
|
|
1349
|
+
* @returns 厳格バインドモードなら true。
|
|
1350
|
+
*/
|
|
1351
|
+
static get strictBind(): boolean;
|
|
1352
|
+
/**
|
|
1353
|
+
* 厳格バインドモードを設定します。
|
|
1354
|
+
*
|
|
1355
|
+
* @param enabled 有効にする場合は true。
|
|
1356
|
+
* @return 戻り値はありません。
|
|
1357
|
+
*/
|
|
1358
|
+
static setStrictBind(enabled: boolean): void;
|
|
1165
1359
|
/**
|
|
1166
1360
|
* 実行モードを取得します。
|
|
1167
1361
|
*
|
|
@@ -1195,6 +1389,14 @@ export declare class Env {
|
|
|
1195
1389
|
* 入力要素の値をフォームにバインドし、フォームのバインド値を入力要素に反映します。
|
|
1196
1390
|
*/
|
|
1197
1391
|
export declare class Form {
|
|
1392
|
+
/**
|
|
1393
|
+
* 初期 `data-bind` からの入力欄復元を適用済みのフォーム要素。
|
|
1394
|
+
*
|
|
1395
|
+
* 復元は「そのフォームを初めてスキャンしたとき」の一度だけ行います。再スキャン
|
|
1396
|
+
* (`data-if` の表示切替など)で繰り返すと、利用者が編集した入力欄を初期値へ
|
|
1397
|
+
* 巻き戻してしまうためです。
|
|
1398
|
+
*/
|
|
1399
|
+
private static readonly INITIAL_RESTORED_FORMS;
|
|
1198
1400
|
/**
|
|
1199
1401
|
* フォーム内にある入力エレメントの値をオブジェクトとして取得します。
|
|
1200
1402
|
* data-form-object属性があると、そのエレメント内の値はオブジェクトとして処理されます。
|
|
@@ -1226,6 +1428,98 @@ export declare class Form {
|
|
|
1226
1428
|
* @returns boolean チェックボックスの場合 true
|
|
1227
1429
|
*/
|
|
1228
1430
|
private static isBooleanCheckbox;
|
|
1431
|
+
/** ラジオグループのスコープへ割り当てた識別番号 */
|
|
1432
|
+
private static readonly GROUP_SCOPE_IDS;
|
|
1433
|
+
/** ラジオグループのスコープ識別番号の連番 */
|
|
1434
|
+
private static groupScopeSequence;
|
|
1435
|
+
/**
|
|
1436
|
+
* 入力要素の収集キーを解決します。
|
|
1437
|
+
*
|
|
1438
|
+
* `data-form-name` があればそれを収集キーとし、無ければ `name` 属性を使います。
|
|
1439
|
+
* ラジオボタンのように DOM の `name` がグループ化の意味を持つ場合に、収集キーと
|
|
1440
|
+
* DOM の `name` を分けるために使います。
|
|
1441
|
+
*
|
|
1442
|
+
* @param fragment 対象フラグメント
|
|
1443
|
+
* @returns 収集キー。どちらも無い場合は null
|
|
1444
|
+
*/
|
|
1445
|
+
static resolveFieldName(fragment: ElementFragment): unknown;
|
|
1446
|
+
/**
|
|
1447
|
+
* `data-form-name` の初期化を行います。
|
|
1448
|
+
*
|
|
1449
|
+
* 収集キーが空になる指定を開発モードで警告し、ラジオボタンにはグループ用の
|
|
1450
|
+
* DOM `name` を生成します。
|
|
1451
|
+
*
|
|
1452
|
+
* HTML のラジオグループは「同じフォームオーナー内の同名要素」で構成されるため、
|
|
1453
|
+
* `data-form-list` の行内で同じ `name` を使うと行をまたいで排他になり、1 行しか
|
|
1454
|
+
* 選択を保持できません。収集キーを `data-form-name` で宣言した場合は、DOM の
|
|
1455
|
+
* `name` を行ごとにユニークな値へ生成してグループを行単位に分けます。
|
|
1456
|
+
*
|
|
1457
|
+
* 作者が `name` を書いている場合は尊重して生成しません(行をまたぐグループを
|
|
1458
|
+
* 意図している場合があるため)。自動生成した `name` は内部マーカーで区別し、
|
|
1459
|
+
* 行の複製で引き継がれたものは作り直します。
|
|
1460
|
+
*
|
|
1461
|
+
* 処理が不要な場合は Promise を返しません。要素初期化の共通経路から呼ばれるため、
|
|
1462
|
+
* 対象外の要素で Promise を挟むと初期化の非同期段数が全要素で増えてしまいます。
|
|
1463
|
+
*
|
|
1464
|
+
* @param fragment 対象フラグメント
|
|
1465
|
+
* @returns 属性設定の Promise。処理が不要な場合は undefined
|
|
1466
|
+
*/
|
|
1467
|
+
static prepareFormName(fragment: ElementFragment): Promise<void> | void;
|
|
1468
|
+
/**
|
|
1469
|
+
* ラジオグループのスコープとなるフラグメントを解決します。
|
|
1470
|
+
*
|
|
1471
|
+
* `data-form-list` のコンテナ直下の要素(= 行)が祖先にあればその行を、無ければ
|
|
1472
|
+
* 最近傍のフォーム(`<form>` または `data-form`)をスコープとします。行の外では
|
|
1473
|
+
* 通常の HTML と同じくフォーム単位のグループになります。
|
|
1474
|
+
*
|
|
1475
|
+
* @param fragment 対象フラグメント
|
|
1476
|
+
* @returns スコープとなるフラグメント
|
|
1477
|
+
*/
|
|
1478
|
+
private static resolveGroupScope;
|
|
1479
|
+
/**
|
|
1480
|
+
* ラジオグループのスコープへ識別番号を割り当てます。
|
|
1481
|
+
*
|
|
1482
|
+
* @param scope スコープとなるフラグメント
|
|
1483
|
+
* @returns スコープの識別番号
|
|
1484
|
+
*/
|
|
1485
|
+
private static resolveGroupScopeId;
|
|
1486
|
+
/**
|
|
1487
|
+
* 値または状態が宣言バインドで決まる入力かどうかを判定します。
|
|
1488
|
+
*
|
|
1489
|
+
* 属性にテンプレート式を書いた場合、または対応する `data-attr-*` を持つ場合は、
|
|
1490
|
+
* その値・状態の権威はバインドの評価結果にあります。値収集側から空で上書きして
|
|
1491
|
+
* はいけません。
|
|
1492
|
+
*
|
|
1493
|
+
* 判定する属性は要素の種類で変わります。checkbox / radio の `value` は送信値で
|
|
1494
|
+
* あってチェック状態ではないため、`value` ではなく `checked` を見ます(`value` で
|
|
1495
|
+
* 判定すると、送信値をテンプレート式で決めているだけのチェックボックスが解除
|
|
1496
|
+
* されなくなり、前の行のチェック状態が残る)。`<select>` は自身の `value` に加えて、
|
|
1497
|
+
* 配下の `<option>` が `selected` を宣言している場合も対象とします。
|
|
1498
|
+
*
|
|
1499
|
+
* @param fragment 対象フラグメント
|
|
1500
|
+
* @returns 宣言バインドで値または状態が決まる場合 true
|
|
1501
|
+
*/
|
|
1502
|
+
private static isDeclarativeStateBound;
|
|
1503
|
+
/**
|
|
1504
|
+
* 指定した属性が宣言バインド(テンプレート式または `data-attr-*`)かどうかを
|
|
1505
|
+
* 判定します。
|
|
1506
|
+
*
|
|
1507
|
+
* @param fragment 対象フラグメント
|
|
1508
|
+
* @param name 属性名
|
|
1509
|
+
* @returns 宣言バインドの場合 true
|
|
1510
|
+
*/
|
|
1511
|
+
private static hasDeclarativeBinding;
|
|
1512
|
+
/**
|
|
1513
|
+
* `<select>` 配下の `<option>` が選択状態を宣言バインドしているかどうかを
|
|
1514
|
+
* 判定します。
|
|
1515
|
+
*
|
|
1516
|
+
* `name` を持つ select の選択状態を `data-attr-selected` などで宣言している場合、
|
|
1517
|
+
* 選択の権威は option 側の式にあります。
|
|
1518
|
+
*
|
|
1519
|
+
* @param element 対象の select エレメント
|
|
1520
|
+
* @returns いずれかの option が selected を宣言している場合 true
|
|
1521
|
+
*/
|
|
1522
|
+
private static hasDeclarativeSelectedOption;
|
|
1229
1523
|
/**
|
|
1230
1524
|
* `input[type=file]` かどうかを判定します。
|
|
1231
1525
|
*
|
|
@@ -1233,12 +1527,29 @@ export declare class Form {
|
|
|
1233
1527
|
* @returns `input[type=file]` の場合 true
|
|
1234
1528
|
*/
|
|
1235
1529
|
private static isFileInput;
|
|
1530
|
+
/**
|
|
1531
|
+
* 指定した基準より後にユーザーが編集した入力欄の値だけを収集します。
|
|
1532
|
+
*
|
|
1533
|
+
* 収集結果は `getValues()` と同じ入れ子構造になりますが、編集されていない
|
|
1534
|
+
* 入力欄のキーは含みません。`data-form-list` の行は位置がずれないよう、編集の
|
|
1535
|
+
* 無い行も空オブジェクトで場所を確保します。
|
|
1536
|
+
*
|
|
1537
|
+
* 飛行中の通信の応答をバインドする直前に、その通信を開始した後の編集だけを
|
|
1538
|
+
* 上書きし直す用途で使います。
|
|
1539
|
+
*
|
|
1540
|
+
* @param fragment 対象のElementFragment
|
|
1541
|
+
* @param baseline ユーザー編集の通し番号の基準(これより大きいものが対象)
|
|
1542
|
+
* @returns 編集された入力欄だけを含む値のオブジェクト
|
|
1543
|
+
*/
|
|
1544
|
+
static getValuesEditedAfter(fragment: ElementFragment, baseline: number): Record<string, unknown>;
|
|
1236
1545
|
/**
|
|
1237
1546
|
* フォーム内の各入力エレメントから値を取得し、オブジェクトとして返します。
|
|
1238
1547
|
* 入力エレメントのname属性、data-form-object属性、data-form-list属性に基づいて値を整理します。
|
|
1239
1548
|
*
|
|
1240
1549
|
* @param fragment 対象のElementFragment
|
|
1241
1550
|
* @param values オブジェクトに追加する値のオブジェクト
|
|
1551
|
+
* @param minUserEditSequence 指定した場合、この通し番号より後にユーザーが編集した
|
|
1552
|
+
* 入力欄だけを収集する(`data-form-list` の行位置は空オブジェクトで保持する)
|
|
1242
1553
|
* @returns values と同じオブジェクト
|
|
1243
1554
|
*/
|
|
1244
1555
|
private static getPartValues;
|
|
@@ -1262,6 +1573,48 @@ export declare class Form {
|
|
|
1262
1573
|
* @returns Promise(DOMの更新が完了したら解決される)
|
|
1263
1574
|
*/
|
|
1264
1575
|
static syncValues(form: ElementFragment, values: Record<string, unknown>, force?: boolean): Promise<void>;
|
|
1576
|
+
/**
|
|
1577
|
+
* `data-form-list` の 1 行分の入力欄へ、その行の値をイベントなしで反映します。
|
|
1578
|
+
*
|
|
1579
|
+
* `data-each` が新しく生成した行に対して呼び出します。フォーム全体への逆方向同期
|
|
1580
|
+
* (`syncValues()`)は `Core.setBindingData()` の中で `data-each` の行生成より**前**に
|
|
1581
|
+
* 走るため、その更新で生成された行には値が入りません。行単位でここを補います。
|
|
1582
|
+
*
|
|
1583
|
+
* @param row 行のElementFragment
|
|
1584
|
+
* @param values 行に設定する値のオブジェクト
|
|
1585
|
+
* @returns 反映完了の Promise
|
|
1586
|
+
*/
|
|
1587
|
+
static syncRowValues(row: ElementFragment, values: Record<string, unknown>): Promise<void>;
|
|
1588
|
+
/**
|
|
1589
|
+
* バインディングデータから、入力欄へ書き戻す対象の値を切り出します。
|
|
1590
|
+
*
|
|
1591
|
+
* `data-form-arg` が指定されている場合はそのキー配下だけを対象とし、キーが
|
|
1592
|
+
* オブジェクトでなければ空オブジェクトを返します(フォーム外のキーを入力欄へ
|
|
1593
|
+
* 書き戻さないため)。指定が無ければバインディングデータ全体が対象です。
|
|
1594
|
+
*
|
|
1595
|
+
* @param form フォームのElementFragment
|
|
1596
|
+
* @param data 対象のバインディングデータ
|
|
1597
|
+
* @returns 入力欄へ書き戻す値
|
|
1598
|
+
*/
|
|
1599
|
+
static resolveSyncValues(form: ElementFragment, data: Record<string, unknown>): Record<string, unknown>;
|
|
1600
|
+
/**
|
|
1601
|
+
* 初期 `data-bind` の値を配下の入力欄へ反映します。
|
|
1602
|
+
*
|
|
1603
|
+
* `Core.setBindingData()` 経由の逆方向同期は `data-bind` 属性を**更新した**ときに
|
|
1604
|
+
* だけ走るため、初期スキャンで読み込んだ `data-bind` は入力欄へ反映されません。
|
|
1605
|
+
* その結果、`name` に対応する値を持つ `<select>` やチェックボックスが未選択のまま
|
|
1606
|
+
* 残り、最初の `change` で全項目を収集した際に空値として確定して他項目の値を失う
|
|
1607
|
+
* 問題がありました。本メソッドは初回スキャン時に一度だけ逆方向同期を適用します。
|
|
1608
|
+
*
|
|
1609
|
+
* 対象は `<form>` 要素のうち `data-bind` を持つものだけです(`Core.setBindingData()`
|
|
1610
|
+
* の逆方向同期と同じ範囲)。`data-bind` に含まれないキーの入力欄は
|
|
1611
|
+
* `setPartValues()` の規則により既存値が維持されるため、HTML の `value` 属性で
|
|
1612
|
+
* 与えた初期値は保たれます。
|
|
1613
|
+
*
|
|
1614
|
+
* @param root 走査の起点要素
|
|
1615
|
+
* @returns 反映完了の Promise
|
|
1616
|
+
*/
|
|
1617
|
+
static restoreInitialValues(root: HTMLElement): Promise<void>;
|
|
1265
1618
|
/**
|
|
1266
1619
|
* 値による上書きをグループ単位で扱うべき入力要素(boolean 型でない
|
|
1267
1620
|
* チェックボックス、またはラジオボタン)かどうかを判定します。
|
|
@@ -1291,8 +1644,11 @@ export declare class Form {
|
|
|
1291
1644
|
*
|
|
1292
1645
|
* @param fragment 対象フラグメント
|
|
1293
1646
|
* @param values フラグメントに設定する値のオブジェクト
|
|
1294
|
-
* @param index 配列の場合のインデックス
|
|
1295
1647
|
* @param force data-form-detach属性があるエレメントにも値を反映するかどうか
|
|
1648
|
+
* @param emitEvents input/change イベントを発火するかどうか
|
|
1649
|
+
* @param clearMissing values に無いキーの入力欄を空にするかどうか
|
|
1650
|
+
* @param listCursors 同名リストの出現位置。同じ `values` を共有する範囲で
|
|
1651
|
+
* 収集キーごとに何件目かを数え、配列の対応する要素を配るために使う
|
|
1296
1652
|
* @returns Promise(DOMの更新が完了したら解決される)
|
|
1297
1653
|
*/
|
|
1298
1654
|
private static setPartValues;
|
|
@@ -1912,6 +2268,15 @@ declare class TextFragment extends Fragment {
|
|
|
1912
2268
|
* @returns 評価式を含むなら true
|
|
1913
2269
|
*/
|
|
1914
2270
|
hasDynamicContent(): boolean;
|
|
2271
|
+
/**
|
|
2272
|
+
* 評価前の生のテキストを返します。
|
|
2273
|
+
*
|
|
2274
|
+
* `{{式}}` を展開する前の宣言そのものです。テンプレートが参照している識別子を
|
|
2275
|
+
* 静的に調べる用途で使います。
|
|
2276
|
+
*
|
|
2277
|
+
* @returns 評価前のテキスト
|
|
2278
|
+
*/
|
|
2279
|
+
getRawText(): string;
|
|
1915
2280
|
/**
|
|
1916
2281
|
* コンテンツを更新します。
|
|
1917
2282
|
*
|
|
@@ -1927,7 +2292,7 @@ declare class TextFragment extends Fragment {
|
|
|
1927
2292
|
evaluate(): Promise<void>;
|
|
1928
2293
|
}
|
|
1929
2294
|
|
|
1930
|
-
export declare const version = "0.
|
|
2295
|
+
export declare const version = "0.28.0";
|
|
1931
2296
|
|
|
1932
2297
|
/**
|
|
1933
2298
|
* すべてのレンダリングタスク(追従投入分を含む)の完了を待ちます。
|