/
866.txt
131 lines (118 loc) · 7.76 KB
/
866.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
* 仕様書
[REFS[
- [2] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2016-05-14 09:55:50 +09:00]]) <https://html.spec.whatwg.org/#element-definition>
]REFS]
* 意味
[3] [CODE(DOMi)@en[CustomElementsRegistry]] [[インターフェイス]]の
[DFN[[CODE(DOMm)@en[define]]]] [[メソッド]]は、
[DFN[[RUBYB[[[要素定義]]]@en[element definition]]]]、すなわち
[CODE(DOMi)@en[CustomElementsRegistry]]
[[オブジェクト]]への[[カスタム要素定義]]の追加を行います [SRC[>>2]]。
* 引数
[52] 本[[メソッド]]は、次の[[引数]]を受け取ります。
[FIG(list members)[
: 名前 : 作成する[[カスタム要素定義]]の[F[名前][定義名]]となる[[妥当なカスタム要素名]]。
[CODE[extends]] を指定する場合
([[カスタム化組み込み要素]]) は [CODE[is][is=""]] [[属性値]]、
指定しない場合 ([[自律カスタム要素]]) は[[要素名]]に相当します。
この引数は必須で、既存の他の[[カスタム要素定義]]の[F[名前][定義名]]と違っていなければなりません。
: 構築器 : 作成する[[カスタム要素定義]]の[F[構築器][カスタム要素構築器]]となる[[関数]]。
この引数は必須で、既存の他の[[カスタム要素定義]]の[F[構築器][カスタム要素構築器]]と違っていなければなりません。
[[カスタム要素構築器]]の条件を満たすものである必要があります。
: オプション群 : [[辞書]] [CODE(DOMi)@en[ElementDefinitionOptions]]。
省略可能です。
]FIG]
[53] [[辞書]] [DFN[[CODE(DOMi)@en[ElementDefinitionOptions]]]] [SRC[>>2]] は、
次の[[メンバー]]を持ちます。
[FIG(list short)[
- [CODE(DOMa)@en[extends]]
]FIG]
[54] [[辞書]] [CODE(DOMi)@en[ElementDefinitionOptions]] の[[メンバー]]
[DFN[[CODE(DOMa)@en[extends]]]] は、 [CODE(IDL)@en[DOMString]] で、
必須です [SRC[>>3]]。
[CODE(DOMa)@en[extends]] は、[[カスタム化組み込み要素]]における、
拡張する元の[[要素]]の[[名前][要素名]]を指定するものです。
指定する[[要素名]]は、正規の [[HTML要素]]の[[名前][要素名]]でなければなりません。
* 処理
[4] 本[[メソッド]]は、次のようにしなければ[MUST[なりません]] [SRC[>>2]]。
[FIG(steps)[
= [5] 次の[[引数]]が指定されたものとして処理します。
[FIG(list members)[
: [VAR[名前]] : 第1引数 [CODE(DOMi)@en[DOMString]] ([[必須]])
: [VAR[構築器]] : 第2引数 [CODE(DOMi)@en[Function]] ([[必須]])
: [VAR[オプション群]] : 第3引数 [CODE(DOMi)@en[ElementDefinitionOptions]] ([[省略可能]])
]FIG]
= [6] [CODE(IDL xattr)[CEReactions]] の事前処理を行います。
= [8] [VAR[構築器]]に [CODE[IsConstructor]] を適用した結果が[[偽]]なら、
== [9] [CODE[TypeError]] を[[投げ]]、ここで停止します。
= [10] [VAR[名前]]が[[妥当なカスタム要素名]]でなければ、
== [11] [CODE[SyntaxError]] [CODE(DOMi)@en[DOMException]] を[[投げ]]、ここで停止します。
= [12] [[文脈オブジェクト]]に[F[名前][定義名]]が[VAR[名前]]の項目があれば、
== [13] [CODE[NotSupportedError]] を[[投げ]]、ここで停止します。
= [14] [[文脈オブジェクト]]に[F[構築器][カスタム要素構築器]]の項目があれば、
== [15] [CODE[NotSupportedError]] を[[投げ]]、ここで停止します。
= [17] [VAR[extends]] を、[VAR[オプション群]]の [F[[CODE[extends]]]] に設定します。
= [18] [VAR[extends]] が [[null]] なら、
== [16] [VAR[局所名]]を、[VAR[名前]]に設定します。
= [24] それ以外なら、
== [19] [VAR[extends]] が[[妥当なカスタム要素名]]でなければ、
=== [20] [CODE[NotSupportedError]] を[[投げ]]、ここで停止します。
== [21] [VAR[extends]] と [[HTML名前空間]]に関する[[要素インターフェイス]]が
[CODE(DOMi)@en[HTMLUnknownElement]] なら、
=== [22] [CODE[NotSupportedError]] を[[投げ]]、ここで停止します。
== [23] [VAR[局所名]]を、[VAR[extends]] に設定します。
= [25] [VAR[iterable]] を、 [CODE[[[Get]]([VAR[構築器]], [CODE[observedAttributes]])]]
の結果に設定します。[[例外]]が[[投げ]]られれば、改めて[[投げ]]て停止します。
= [26] [VAR[iterable]] が[[未定義]]なら、
== [27] [VAR[被観察属性群]]を、空の[[列][sequence<>]]に設定します。
= [28] それ以外なら、
== [29] [VAR[被観察属性群]]を、 [VAR[iterable]] を [CODE(IDL)@en[[[sequence][sequence<>]]<[[DOMString]]>]]
に[[変換][変換 (WebIDL)]]した結果に設定します。
[[例外]]が[[投げ]]られれば、改めて[[投げ]]て停止します。
= [30] [VAR[プロトタイプ]]を、 [CODE[[[Get]]([VAR[構築器]], [CODE[prototype]])]]
に設定します。[[例外]]が[[投げ]]られれば、改めて[[投げ]]て停止します。
= [31] [VAR[プロトタイプ]]に [CODE[Type]] を適用した結果が [CODE[Object]]
でなければ、
== [32] [CODE[TypeError]] を[[投げ]]、ここで停止します。
= [33] [VAR[コールバック群]]を、[[写像]]に設定します。
= [34] [VAR[コールバック名]]として [CODE[connectedCallback]], [CODE[disconnectedCallback]],
[CODE[attributeChangedCallback]] について順に、
== [35] [VAR[コールバック]]を、 [CODE[[[Get]]([VAR[プロトタイプ]], [VAR[コールバック名]])]]
の結果に設定します。[[例外]]が[[投げ]]られれば、改めて[[投げ]]て停止します。
== [36] [VAR[コールバック]]が[[未定義]]でなく、
[VAR[コールバック]]に [CODE[IsCallback]] を適用した結果が[[偽]]なら、
=== [37] [CODE[TypeError]] を[[投げ]]、ここで停止します。
== [38] [VAR[写像]]に[[キー]][VAR[コールバック名]]、値[VAR[コールバック]]の組を追加します。
= [39] [VAR[定義]]を、[[カスタム要素定義]]に設定します。
[FIG(list members middle)[
[FIGCAPTION[
[[カスタム要素定義]]
]FIGCAPTION]
: [F[名前][定義名]] : [VAR[名前]]
: [F[局所名]] : [VAR[局所名]]
: [F[構築器][カスタム要素構築器]] : [VAR[構築器]]
: [F[プロトタイプ]] : [VAR[プロトタイプ]]
: [F[被観察属性群]] : [VAR[被観察属性群]]
: [F[生活環コールバック群]] : [VAR[写像]]
]FIG]
= [40] [VAR[定義]]を、[[文脈オブジェクト]]に追加します。
= [41] [VAR[文書]]を、[[文脈オブジェクト]]の[F[大域オブジェクト]]の[F[文書]]に設定します。
= [42] [VAR[格上げ候補]]を、[VAR[文書]]中の次のすべての[[要素]]の[[木順]]のリストに設定します。
[FIG(list)[
- [43] [F[名前空間]]が[[HTML名前空間]]
- [44] [F[局所名]]が[VAR[局所名]]
- [45] [VAR[extends]] が [[null]] でない場合、
[CODE(HTMLa)@en[is][is=""]] [[属性値]]が[VAR[名前]]
]FIG]
= [46] [VAR[格上げ候補]]の各[VAR[要素]]について、順に、
== [48] [[enqueue a custom element upgrade reaction]] を[VAR[要素]]と[VAR[定義]]について実行します。
= [49] [[文脈オブジェクト]]の[F[定義時約束写像]]に[F[キー]]が[VAR[名前]]の項目[VAR[項目]]が含まれていれば、
== [50] [VAR[項目]]の[F[値]]を[[未定義]]について[[解決][約束の解決]]します。
== [51] [VAR[項目]]を[[文脈オブジェクト]]の[F[定義時約束写像]]から削除します。
= [7] [CODE(IDL xattr)[CEReactions]] の事後処理を行います。
]FIG]
;; [47] >>42 の「文書中」が具体的に何を指すのかは不明です。
* 歴史
[1] [CITE@en[Add custom elements to HTML · whatwg/html@6e7eaa4]]
([TIME[2016-04-26 18:19:26 +09:00]] 版)
<https://github.com/whatwg/html/commit/6e7eaa4bd2912965fd83766f99f984f249531f3a>