Include applicable state information alongside all the other other property information
This makes it easier to consume the data in the frontend.
Bug: 1325812
Change-Id: I37979a7266af728399a9c4938bf97f77e5781b5b
Signed-off-by: Victor Porof <victorporof@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/3702682
Reviewed-by: Mathias Bynens <mathias@chromium.org>
diff --git a/scripts/webidl-properties/config.js b/scripts/webidl-properties/config.js
index ceddb72..d1966eb 100644
--- a/scripts/webidl-properties/config.js
+++ b/scripts/webidl-properties/config.js
@@ -35,245 +35,311 @@
* The "applicable" members for certain "states" that WebIDL types can be in.
* In other words, some members are "valid" only valid in certain situations:
* for example, with the HTML input element, the set of valid members are
- * determined by the "type" attribute.
+ * determined by the "type" property.
*/
-export const VALID_MEMBERS = {
+export const APPLICABLE_MEMBERS = {
// https://html.spec.whatwg.org/multipage/input.html#input-type-attr-summary
- HTMLInputElement: {
- '[type=hidden]': new Set([
- 'autocomplete',
- 'value',
- ]),
- '[type=text]': new Set([
- 'autocomplete',
- 'dirname',
- 'list',
- 'maxlength',
- 'minlength',
- 'pattern',
- 'placeholder',
- 'readonly',
- 'required',
- 'size',
- 'value',
- 'list',
- 'selectionstart',
- 'selectionend',
- 'selectiondirection',
- ]),
- '[type=search]': new Set([
- 'autocomplete',
- 'dirname',
- 'list',
- 'maxlength',
- 'minlength',
- 'pattern',
- 'placeholder',
- 'readonly',
- 'required',
- 'size',
- 'value',
- 'list',
- 'selectionstart',
- 'selectionend',
- 'selectiondirection',
- ]),
- '[type=url]': new Set([
- 'autocomplete',
- 'list',
- 'maxlength',
- 'minlength',
- 'pattern',
- 'placeholder',
- 'readonly',
- 'required',
- 'size',
- 'value',
- 'list',
- 'selectionstart',
- 'selectionend',
- 'selectiondirection',
- ]),
- '[type=tel]': new Set([
- 'autocomplete',
- 'list',
- 'maxlength',
- 'minlength',
- 'pattern',
- 'placeholder',
- 'readonly',
- 'required',
- 'size',
- 'value',
- 'list',
- 'selectionstart',
- 'selectionend',
- 'selectiondirection',
- ]),
- '[type=email]': new Set([
- 'autocomplete',
- 'list',
- 'maxlength',
- 'minlength',
- 'multiple',
- 'pattern',
- 'placeholder',
- 'readonly',
- 'required',
- 'size',
- 'value',
- 'list',
- ]),
- '[type=password]': new Set([
- 'autocomplete',
- 'maxlength',
- 'minlength',
- 'pattern',
- 'placeholder',
- 'readonly',
- 'required',
- 'size',
- 'value',
- 'selectionstart',
- 'selectionend',
- 'selectiondirection',
- ]),
- '[type=date]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'readonly',
- 'required',
- 'step',
- 'value',
- 'valueasdate',
- 'valueasnumber',
- 'list',
- ]),
- '[type=month]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'readonly',
- 'required',
- 'step',
- 'value',
- 'valueasdate',
- 'valueasnumber',
- 'list',
- ]),
- '[type=week]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'readonly',
- 'required',
- 'step',
- 'value',
- 'valueasdate',
- 'valueasnumber',
- 'list',
- ]),
- '[type=time]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'readonly',
- 'required',
- 'step',
- 'value',
- 'valueasdate',
- 'valueasnumber',
- 'list',
- ]),
- '[type=datetime-local]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'readonly',
- 'required',
- 'step',
- 'value',
- 'valueasnumber',
- 'list',
- ]),
- '[type=number]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'placeholder',
- 'readonly',
- 'required',
- 'step',
- 'value',
- 'valueasnumber',
- 'list',
- ]),
- '[type=range]': new Set([
- 'autocomplete',
- 'list',
- 'max',
- 'min',
- 'step',
- 'value',
- 'valueasnumber',
- 'list',
- ]),
- '[type=color]': new Set([
- 'autocomplete',
- 'list',
- 'value',
- ]),
- '[type=checkbox]': new Set([
- 'checked',
- 'required',
- 'checked',
- 'value',
- ]),
- '[type=radio]': new Set([
- 'checked',
- 'required',
- 'checked',
- 'value',
- ]),
- '[type=file]': new Set([
- 'accept',
- 'multiple',
- 'required',
- 'files',
- 'value',
- ]),
- '[type=submit]': new Set([
- 'formaction',
- 'formenctype',
- 'formmethod',
- 'formnovalidate',
- 'formtarget',
- 'value',
- ]),
- '[type=image]': new Set([
- 'alt',
- 'formaction',
- 'formenctype',
- 'formmethod',
- 'formnovalidate',
- 'formtarget',
- 'height',
- 'src',
- 'width',
- 'value',
- ]),
- '[type=reset]': new Set([
- 'value',
- ]),
- '[type=button]': new Set([
- 'value',
- ]),
- },
+ HTMLInputElement: [
+ {
+ rule: {when: 'type', is: 'hidden'},
+ members: new Set([
+ 'autocomplete',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'text'},
+ members: new Set([
+ 'autocomplete',
+ 'dirname',
+ 'list',
+ 'maxlength',
+ 'minlength',
+ 'pattern',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'size',
+ 'value',
+ 'list',
+ 'selectionstart',
+ 'selectionend',
+ 'selectiondirection',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'search'},
+ members: new Set([
+ 'autocomplete',
+ 'dirname',
+ 'list',
+ 'maxlength',
+ 'minlength',
+ 'pattern',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'size',
+ 'value',
+ 'list',
+ 'selectionstart',
+ 'selectionend',
+ 'selectiondirection',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'url'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'maxlength',
+ 'minlength',
+ 'pattern',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'size',
+ 'value',
+ 'list',
+ 'selectionstart',
+ 'selectionend',
+ 'selectiondirection',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'tel'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'maxlength',
+ 'minlength',
+ 'pattern',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'size',
+ 'value',
+ 'list',
+ 'selectionstart',
+ 'selectionend',
+ 'selectiondirection',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'email'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'maxlength',
+ 'minlength',
+ 'multiple',
+ 'pattern',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'size',
+ 'value',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'password'},
+ members: new Set([
+ 'autocomplete',
+ 'maxlength',
+ 'minlength',
+ 'pattern',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'size',
+ 'value',
+ 'selectionstart',
+ 'selectionend',
+ 'selectiondirection',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'date'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'readonly',
+ 'required',
+ 'step',
+ 'value',
+ 'valueasdate',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'month'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'readonly',
+ 'required',
+ 'step',
+ 'value',
+ 'valueasdate',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'week'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'readonly',
+ 'required',
+ 'step',
+ 'value',
+ 'valueasdate',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'time'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'readonly',
+ 'required',
+ 'step',
+ 'value',
+ 'valueasdate',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'datetime-local'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'readonly',
+ 'required',
+ 'step',
+ 'value',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'number'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'placeholder',
+ 'readonly',
+ 'required',
+ 'step',
+ 'value',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'range'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'max',
+ 'min',
+ 'step',
+ 'value',
+ 'valueasnumber',
+ 'list',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'color'},
+ members: new Set([
+ 'autocomplete',
+ 'list',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'checkbox'},
+ members: new Set([
+ 'checked',
+ 'required',
+ 'checked',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'radio'},
+ members: new Set([
+ 'checked',
+ 'required',
+ 'checked',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'file'},
+ members: new Set([
+ 'accept',
+ 'multiple',
+ 'required',
+ 'files',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'submit'},
+ members: new Set([
+ 'formaction',
+ 'formenctype',
+ 'formmethod',
+ 'formnovalidate',
+ 'formtarget',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'image'},
+ members: new Set([
+ 'alt',
+ 'formaction',
+ 'formenctype',
+ 'formmethod',
+ 'formnovalidate',
+ 'formtarget',
+ 'height',
+ 'src',
+ 'width',
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'reset'},
+ members: new Set([
+ 'value',
+ ])
+ },
+ {
+ rule: {when: 'type', is: 'button'},
+ members: new Set([
+ 'value',
+ ])
+ },
+ ],
};