blob: d1966ebe399e8638b79f4d3f9a6d4335f72c7f75 [file] [log] [blame]
Victor Porof1a8a30d2022-06-13 13:07:10 +00001// Copyright 2022 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5/**
6 * All the specs relevant for generating the DOM pinned properties dataset.
7 * These strings represent file names. A list of all file names can be found at
8 * https://github.com/w3c/webref/tree/main/tr/idl or via the @webref/idl API.
9 *
10 * These spec names are included in the generated dataset. To keep it small,
11 * the values are bitwise or'd.
12 */
13export const SPECS = {
14 'html': 1,
15 'dom': 2,
16 'uievents': 4,
17 'pointerevents': 8,
18 'cssom': 16,
19 'wai-aria': 32
20};
21
22/**
23 * All the "global" attributes as defined in the DOM specification.
24 * Used to annotate the extracted properties from the WebIDL types.
25 */
26export const GLOBAL_ATTRIBUTES = new Set([
27 // https://html.spec.whatwg.org/multipage/dom.html#global-attributes
28 'accesskey', 'autocapitalize', 'autofocus', 'contenteditable', 'dir', 'draggable', 'enterkeyhint',
29 'hidden', 'inputmode', 'is', 'itemid', 'itemprop', 'itemref', 'itemscope',
30 'itemtype', 'lang', 'nonce', 'spellcheck', 'style', 'tabindex', 'title',
31 'translate',
32]);
33
34/**
35 * The "applicable" members for certain "states" that WebIDL types can be in.
36 * In other words, some members are "valid" only valid in certain situations:
37 * for example, with the HTML input element, the set of valid members are
Victor Porof7e0446e2022-06-15 12:03:33 +000038 * determined by the "type" property.
Victor Porof1a8a30d2022-06-13 13:07:10 +000039 */
Victor Porof7e0446e2022-06-15 12:03:33 +000040export const APPLICABLE_MEMBERS = {
Victor Porof1a8a30d2022-06-13 13:07:10 +000041 // https://html.spec.whatwg.org/multipage/input.html#input-type-attr-summary
Victor Porof7e0446e2022-06-15 12:03:33 +000042 HTMLInputElement: [
43 {
44 rule: {when: 'type', is: 'hidden'},
45 members: new Set([
46 'autocomplete',
47 'value',
48 ])
49 },
50 {
51 rule: {when: 'type', is: 'text'},
52 members: new Set([
53 'autocomplete',
54 'dirname',
55 'list',
56 'maxlength',
57 'minlength',
58 'pattern',
59 'placeholder',
60 'readonly',
61 'required',
62 'size',
63 'value',
64 'list',
65 'selectionstart',
66 'selectionend',
67 'selectiondirection',
68 ])
69 },
70 {
71 rule: {when: 'type', is: 'search'},
72 members: new Set([
73 'autocomplete',
74 'dirname',
75 'list',
76 'maxlength',
77 'minlength',
78 'pattern',
79 'placeholder',
80 'readonly',
81 'required',
82 'size',
83 'value',
84 'list',
85 'selectionstart',
86 'selectionend',
87 'selectiondirection',
88 ])
89 },
90 {
91 rule: {when: 'type', is: 'url'},
92 members: new Set([
93 'autocomplete',
94 'list',
95 'maxlength',
96 'minlength',
97 'pattern',
98 'placeholder',
99 'readonly',
100 'required',
101 'size',
102 'value',
103 'list',
104 'selectionstart',
105 'selectionend',
106 'selectiondirection',
107 ])
108 },
109 {
110 rule: {when: 'type', is: 'tel'},
111 members: new Set([
112 'autocomplete',
113 'list',
114 'maxlength',
115 'minlength',
116 'pattern',
117 'placeholder',
118 'readonly',
119 'required',
120 'size',
121 'value',
122 'list',
123 'selectionstart',
124 'selectionend',
125 'selectiondirection',
126 ])
127 },
128 {
129 rule: {when: 'type', is: 'email'},
130 members: new Set([
131 'autocomplete',
132 'list',
133 'maxlength',
134 'minlength',
135 'multiple',
136 'pattern',
137 'placeholder',
138 'readonly',
139 'required',
140 'size',
141 'value',
142 'list',
143 ])
144 },
145 {
146 rule: {when: 'type', is: 'password'},
147 members: new Set([
148 'autocomplete',
149 'maxlength',
150 'minlength',
151 'pattern',
152 'placeholder',
153 'readonly',
154 'required',
155 'size',
156 'value',
157 'selectionstart',
158 'selectionend',
159 'selectiondirection',
160 ])
161 },
162 {
163 rule: {when: 'type', is: 'date'},
164 members: new Set([
165 'autocomplete',
166 'list',
167 'max',
168 'min',
169 'readonly',
170 'required',
171 'step',
172 'value',
173 'valueasdate',
174 'valueasnumber',
175 'list',
176 ])
177 },
178 {
179 rule: {when: 'type', is: 'month'},
180 members: new Set([
181 'autocomplete',
182 'list',
183 'max',
184 'min',
185 'readonly',
186 'required',
187 'step',
188 'value',
189 'valueasdate',
190 'valueasnumber',
191 'list',
192 ])
193 },
194 {
195 rule: {when: 'type', is: 'week'},
196 members: new Set([
197 'autocomplete',
198 'list',
199 'max',
200 'min',
201 'readonly',
202 'required',
203 'step',
204 'value',
205 'valueasdate',
206 'valueasnumber',
207 'list',
208 ])
209 },
210 {
211 rule: {when: 'type', is: 'time'},
212 members: new Set([
213 'autocomplete',
214 'list',
215 'max',
216 'min',
217 'readonly',
218 'required',
219 'step',
220 'value',
221 'valueasdate',
222 'valueasnumber',
223 'list',
224 ])
225 },
226 {
227 rule: {when: 'type', is: 'datetime-local'},
228 members: new Set([
229 'autocomplete',
230 'list',
231 'max',
232 'min',
233 'readonly',
234 'required',
235 'step',
236 'value',
237 'valueasnumber',
238 'list',
239 ])
240 },
241 {
242 rule: {when: 'type', is: 'number'},
243 members: new Set([
244 'autocomplete',
245 'list',
246 'max',
247 'min',
248 'placeholder',
249 'readonly',
250 'required',
251 'step',
252 'value',
253 'valueasnumber',
254 'list',
255 ])
256 },
257 {
258 rule: {when: 'type', is: 'range'},
259 members: new Set([
260 'autocomplete',
261 'list',
262 'max',
263 'min',
264 'step',
265 'value',
266 'valueasnumber',
267 'list',
268 ])
269 },
270 {
271 rule: {when: 'type', is: 'color'},
272 members: new Set([
273 'autocomplete',
274 'list',
275 'value',
276 ])
277 },
278 {
279 rule: {when: 'type', is: 'checkbox'},
280 members: new Set([
281 'checked',
282 'required',
283 'checked',
284 'value',
285 ])
286 },
287 {
288 rule: {when: 'type', is: 'radio'},
289 members: new Set([
290 'checked',
291 'required',
292 'checked',
293 'value',
294 ])
295 },
296 {
297 rule: {when: 'type', is: 'file'},
298 members: new Set([
299 'accept',
300 'multiple',
301 'required',
302 'files',
303 'value',
304 ])
305 },
306 {
307 rule: {when: 'type', is: 'submit'},
308 members: new Set([
309 'formaction',
310 'formenctype',
311 'formmethod',
312 'formnovalidate',
313 'formtarget',
314 'value',
315 ])
316 },
317 {
318 rule: {when: 'type', is: 'image'},
319 members: new Set([
320 'alt',
321 'formaction',
322 'formenctype',
323 'formmethod',
324 'formnovalidate',
325 'formtarget',
326 'height',
327 'src',
328 'width',
329 'value',
330 ])
331 },
332 {
333 rule: {when: 'type', is: 'reset'},
334 members: new Set([
335 'value',
336 ])
337 },
338 {
339 rule: {when: 'type', is: 'button'},
340 members: new Set([
341 'value',
342 ])
343 },
344 ],
Victor Porof1a8a30d2022-06-13 13:07:10 +0000345};