-
Notifications
You must be signed in to change notification settings - Fork 4
/
868.txt
220 lines (177 loc) · 11.5 KB
/
868.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
* 仕様書
[REFS[
- [53] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-05-23 15:35:03 +09:00]]) <https://html.spec.whatwg.org/#extensibility-2:cereactions>
- [7] '''[CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-05-14 09:55:50 +09:00]]) <https://html.spec.whatwg.org/#custom-element-reactions>'''
- [44] [CITE@en[DOM Standard]] ([TIME[2016-05-12 18:40:36 +09:00]]) <https://dom.spec.whatwg.org/#concept-node-insert>
- [40] [CITE@en[DOM Standard]] ([TIME[2016-05-12 18:40:36 +09:00]]) <https://dom.spec.whatwg.org/#concept-node-remove>
- [46] [CITE@en[DOM Standard]] ([TIME[2016-05-12 18:40:36 +09:00]]) <https://dom.spec.whatwg.org/#concept-element-attributes-change>
]REFS]
* 意味
[8] [DFN[[RUBYB[カスタム要素反応]@en[custom element reaction]]]] [SRC[>>7]] は、
[[カスタム要素]]に関する変化を通知する[[コールバック関数]]です。
次のものがあります。
[FIG(list members)[
: [[カスタム要素構築器]] :
[[要素の格上げ]]で実行されます。
: [CODE[connectedCallback]] :
[[要素]]が[[接続][節点の接続]]された際に実行されます。
: [CODE[disconnectedCallback]] :
[[要素]]が[[切断][節点の切断]]された際に実行されます。
: [CODE[attributeChangedCallback]] :
[[要素]]の[[内容属性]]の[[変更操作][属性の変更]]が発生した際に実行されます。
]FIG]
[9] [[カスタム要素構築器]]は、[[カスタム要素定義]]を作成する際に、
必ず指定します ([CODE(DOMm)@en[define]] [[メソッド]]の第2引数)。
それ以外は、[[カスタム要素構築器]]の [CODE[prototype]]
[[オブジェクト]]の[[プロパティー]]として、必要に応じて指定できます。
[12] [[カスタム要素構築器]]は、その時点ではまだ[F[カスタム][カスタム要素]]でない[[要素]]について実行されます。
それ以外の[[コールバック]]は、[[カスタム要素]]について実行されます。
[10] [[カスタム要素反応]]は、該当する [[DOM]] 操作が発生した時に実行されます。
複数の変更が発生する場合であっても、一連の変更がすべて適用された後、
呼び出し元に[[戻る]]直前にまとめて実行されます。
[[著者]]視点では [[DOM]] 操作中に同期的に呼び出されていますが、
[[利用者エージェント]]視点では [[DOM]] 操作直後に非同期的に呼び出しているので、
[[著者]]は [[DOM]] 操作の途中段階にアクセスすることはできませんし、
[[利用者エージェント]]は [[DOM]] 操作中の不安定な状態を[[著者]]に晒さずに済みます。
[11] ある[[カスタム要素]]について、ある操作群に対する[[カスタム要素反応]]群は、
必ず同じ順序で実行されることが保証されます。
複数の[[カスタム要素]]全体については ([[カスタム要素反応]]内で他の[[要素]]を変更する場合があるので)
保証されません。 [SRC[>>7]]
* キュー
[13] [[関連する類似起源閲覧文脈群の単位]]は、
[DFN[[F[[RUBYB[[[カスタム要素反応群スタック]]]@en[custom element reactions stack]]]]]]を持ちます。
これは、[[要素キュー]]の[[スタック]]で、初期状態は[[空]]です。 [SRC[>>7]]
[14] [DFN[[RUBYB[[[要素キュー]]]@en[element queue]]]]は、
[[要素]]の[[キュー]]で、初期状態は[[空]]です。 [SRC[>>7]]
[15] [[カスタム要素反応群スタック]]の最上にある[[要素キュー]]を、
[DFN[[RUBYB[現在要素キュー]@en[current element queue]]]]といいます [SRC[>>7]]。
[16] [[要素]]は、[DFN[[F[[RUBYB[[[カスタム要素反応キュー]]]@en[custom element reaction queue]]]]]]を持ちます。
これは、[[格上げ反応]]または[[コールバック反応]]の[[キュー]]で、
初期状態は[[空]]です。 [SRC[>>7]]
[17] キューへの追加は、[[格上げ反応]]と[[コールバック反応]]の項を参照。
[18] [[要素キュー]][VAR[キュー]]の[DFN[[RUBYB[カスタム要素反応群の呼び出し]@en[invoke custom element reactions]]]]は、
次のようにします [SRC[>>7]]。
[FIG(steps)[
= [19] [VAR[キュー]]の各[VAR[要素]]について、
== [20] [VAR[反応群]]を、[VAR[要素]]の[F[カスタム要素反応キュー]]に設定します。
== [21] [VAR[反応群]]が空でない限り、繰り返し、
=== [22] [VAR[反応]]を[VAR[反応群]]の最初の項目とし、これを[VAR[反応群]]から削除します。
=== [23] [VAR[反応群]]の種別により、
[FIG(switch)[
: [[格上げ反応]] :
[VAR[要素]]と[VAR[反応]]の[[カスタム要素定義]]について、[[要素の格上げ]]を実行します。
[[例外]]が[[投げ]]られたら、[[例外を報告]]します。
: [[コールバック反応]] :
[VAR[反応]]の[[コールバック関数]]を[[呼び出し][コールバック関数の呼び出し]]ます。
[VAR[反応群]]の引数リストを引き渡します。
[VAR[[[コールバックthis値]]]]は、[VAR[要素]]とします。
[[例外]]が[[投げ]]られたら、[[例外を報告]]します。
]FIG]
]FIG]
;; [24] これは、通常の [[DOM]] 操作に関しては [CODE(IDL xattr)@en[CEReactions]]
から、[[構文解析器]]に関しては[[字句の要素の作成]]から呼び出されます。
* 拡張属性 [CODE(IDL xattr)@en[CEReactions]]
[25] [[Web IDL]] のいくつかの[[メンバー]]には、
[CODE(IDL xattr)@en[CEReactions]] [[拡張属性]]を指定できます [SRC[>>7]]。
[CODE(IDL xattr)@en[CEReactions]] は、
[[カスタム要素反応]]を適宜実行しなければならないことを表しています。
[26] この[[拡張属性]]は、[[操作]]、[[IDL属性]]、[[設定器]]、[[削除器]]''以外''に指定しては[MUST[なりません]]。
[CODE(IDL xattr)@en[PutForwards]] が指定されている場合を除き、
[[読み取り専用属性]]に指定しては[MUST[なりません]]。 [SRC[>>7]]
[27] この[[拡張属性]]は、[[引数]]を指定しては[MUST[なりません]] [SRC[>>7]]。
[28] この[[拡張属性]]が指定されている場合は、
当該[[メンバー]]の処理の直前に、次のようにしなければ[MUST[なりません]] [SRC[>>7]]。
[FIG(steps)[
= [30] [[関連する類似起源閲覧文脈群の単位]]の[F[カスタム要素反応群スタック]]に、
[[要素キュー]]を [[push]] します。
]FIG]
[29] この[[拡張属性]]が指定されている場合は、
当該[[メンバー]]の処理の直後に、次のようにしなければ[MUST[なりません]] [SRC[>>7]]。
[FIG(steps)[
= [31] [VAR[キュー]]を、[[関連する類似起源閲覧文脈群の単位]]の[F[カスタム要素反応群スタック]]から [[pop]] した結果に設定します。
= [32] [VAR[キュー]]について[[カスタム要素反応群の呼び出し]]を実行します。
]FIG]
[33] つまり、当該メンバーの処理中に [[DOM]] 操作が発生し、
[[カスタム要素反応]]を実行しなければならないことになったら、
当該メンバーの処理の最後にまとめて順に実行されます。
[34] この[[拡張属性]]は、 [[DOM]] に変更を加えるあらゆる [[Web IDL]]
の[[メンバー]]に付与されています。
[52] [[vendor prefix]] 付きの[[内容属性]]を[[反映]]する[[IDL属性]]は、
[CODE(IDL xattr)@en[CEReactions]] 付きでなければ[MUST[なりません]]
[SRC[>>53]]。
* 挿入手順群
[35] [[カスタム要素]]が[[文書に接続]]された際は、その旨を通知するため[[スクリプト]]が実行される可能性があります。
([[仕様書]]上は[[挿入手順群]]ではなく、[[挿入手順群]]の直後の別の処理として定義されています。)
[36] [[挿入]]は、[VAR[子孫]]について次のようにすることになっています [SRC[>>44]]。
[FIG(steps)[
= [37] [VAR[子孫]]が[[影を含む文書中]]なら、
== [38] [VAR[子孫]]が[F[カスタム]]なら、
=== [39] [[カスタム要素コールバック反応をキューに追加]]します。
[FIG(list members)[
: [VAR[要素]] : [VAR[子孫]]
: [VAR[コールバック名]] : [CODE[connectedCallback]]
: [VAR[引数リスト]] : [[空]]
]FIG]
== [50] それ以外なら、
=== [51] [VAR[子孫]]について[[要素の格上げの試行]]をします。
]FIG]
* 削除手順群
[41] [CODE(DOM)@en[disconnectedCallback]] の呼び出しは、[[仕様書]]上は[[削除手順群]]ではなく、
[[削除手順群]]の直後の別の処理として定義されています。
[42] [VAR[節点]]について、次のようにします [SRC[>>40]]。
[FIG(steps)[
= [43] [VAR[節点]]が[F[カスタム]]なら、
== [45] [[カスタム要素コールバック反応をキューに追加]]します。
[FIG(list members)[
: [VAR[要素]] : [VAR[節点]]
: [VAR[コールバック名]] : [CODE[disconnectedCallback]]
: [VAR[引数リスト]] : [[空]]
]FIG]
]FIG]
* 属性変更手順群
[47] [[仕様書]]上は、[[属性変更手順群]]ではなく、その直前に実行される別の処理として規定されています。
[VAR[要素]]、[VAR[局所名]]、[VAR[古い値]]、[VAR[値]]、[VAR[名前空間]]について、
次のようにします [SRC[>>46]]。
[FIG(steps)[
= [48] [VAR[要素]]が[F[カスタム]]なら、
== [49] [[カスタム要素コールバック反応をキューに追加]]します。
[FIG(list members)[
: [VAR[要素]] : [VAR[要素]]
: [VAR[コールバック名]] : [CODE[attributeChangedCallback]]
: [VAR[引数リスト]] :
[FIG(list)[
- [VAR[局所名]]
- [VAR[古い値]]
- [VAR[値]]
- [VAR[名前空間]]
]FIG]
]FIG]
]FIG]
* 歴史
[1] [CITE@en[Add custom elements to HTML · whatwg/html@6e7eaa4]]
([TIME[2016-04-26 18:23:20 +09:00]] 版)
<https://github.com/whatwg/html/commit/6e7eaa4bd2912965fd83766f99f984f249531f3a>
[2] [CITE@en[Formalize custom element reactions · whatwg/html@27aa7bc]]
([TIME[2016-04-26 18:49:03 +09:00]] 版)
<https://github.com/whatwg/html/commit/27aa7bc4fa6f168654a8c858f0773e611f679b39>
[3] [CITE@en[Add ''''''[''''''CEReactions'''''']'''''' annotations to mutating methods · whatwg/dom@3cd02d1]]
([TIME[2016-04-26 19:05:42 +09:00]] 版)
<https://github.com/whatwg/dom/commit/3cd02d139c159a31fbb400e03932652c72fc7812>
[4] [CITE@en[Integrate callback invocation with IDL · Issue #186 · w3c/webcomponents]]
([TIME[2016-04-26 19:14:21 +09:00]] 版)
<https://github.com/w3c/webcomponents/issues/186>
[5] [CITE@en[DOM XSLTProcessor - WHATWG Wiki]]
([TIME[2016-04-21 04:49:20 +09:00]] 版)
<https://wiki.whatwg.org/wiki/DOM_XSLTProcessor>
[6] [CITE@en[Add ''''''[''''''CEReactions'''''']'''''' annotation to as · w3c/preload@b632000]]
([TIME[2016-05-01 14:00:58 +09:00]] 版)
<https://github.com/w3c/preload/commit/b632000d8bd32118d3b7833b7c0caca044329072>
[54] [CITE@en[Remove some redundant '''['''CEReactions''']''' for tables]]
( ([[domenic]]著, [TIME[2016-06-08 01:57:28 +09:00]]))
<https://github.com/whatwg/html/commit/c2dfb033b144775e37975c6740a2f5d7842e1b16>
[55] [CITE@en[Export the definitions of '''['''CEReactions''']''' and '''['''HTMLConstructor''']''']]
( ([[domenic]]著, [TIME[2016-06-21 07:33:25 +09:00]]))
<https://github.com/whatwg/html/commit/6e040bfecceb8aed7949abda383656e0bbf449e0>
[56] [CITE@en[Enqueue custom element reactions appropriately during upgrades]]
([[domenic]]著, [TIME[2016-06-06 16:44:11 +09:00]])
<https://github.com/whatwg/html/commit/2328ccf97b80cba7835df3dc5d1a687d51fbfcf4>