mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-01-08 04:15:23 +03:00
LibWeb: Add support for reflected boolean values
Also throw in some missing reflected DOMString values
This commit is contained in:
parent
e7173e946f
commit
e2e6b03a45
Notes:
sideshowbarker
2024-07-19 01:29:26 +09:00
Author: https://github.com/Lubrsi Commit: https://github.com/SerenityOS/serenity/commit/e2e6b03a459 Pull-request: https://github.com/SerenityOS/serenity/pull/4003
@ -55,7 +55,7 @@ static String snake_name(const StringView& title_name)
|
||||
|
||||
static String make_input_acceptable_cpp(const String& input)
|
||||
{
|
||||
if (input == "class" || input == "template" || input == "for") {
|
||||
if (input == "class" || input == "template" || input == "for" || input == "default") {
|
||||
StringBuilder builder;
|
||||
builder.append(input);
|
||||
builder.append('_');
|
||||
@ -755,9 +755,15 @@ JS_DEFINE_NATIVE_GETTER(@wrapper_class@::@attribute.getter_callback@)
|
||||
}
|
||||
|
||||
if (attribute.extended_attributes.contains("Reflect")) {
|
||||
attribute_generator.append(R"~~~(
|
||||
if (attribute.type.name != "boolean") {
|
||||
attribute_generator.append(R"~~~(
|
||||
auto retval = impl->attribute(HTML::AttributeNames::@attribute.reflect_name@);
|
||||
)~~~");
|
||||
} else {
|
||||
attribute_generator.append(R"~~~(
|
||||
auto retval = impl->has_attribute(HTML::AttributeNames::@attribute.reflect_name@);
|
||||
)~~~");
|
||||
}
|
||||
} else {
|
||||
attribute_generator.append(R"~~~(
|
||||
auto retval = impl->@attribute.name:snakecase@();
|
||||
@ -782,9 +788,18 @@ JS_DEFINE_NATIVE_SETTER(@wrapper_class@::@attribute.setter_callback@)
|
||||
generate_to_cpp(attribute, "value", "", "cpp_value", true);
|
||||
|
||||
if (attribute.extended_attributes.contains("Reflect")) {
|
||||
attribute_generator.append(R"~~~(
|
||||
if (attribute.type.name != "boolean") {
|
||||
attribute_generator.append(R"~~~(
|
||||
impl->set_attribute(HTML::AttributeNames::@attribute.reflect_name@, cpp_value);
|
||||
)~~~");
|
||||
} else {
|
||||
attribute_generator.append(R"~~~(
|
||||
if (!cpp_value)
|
||||
impl->remove_attribute(HTML::AttributeNames::@attribute.reflect_name@);
|
||||
else
|
||||
impl->set_attribute(HTML::AttributeNames::@attribute.reflect_name@, String::empty());
|
||||
)~~~");
|
||||
}
|
||||
} else {
|
||||
attribute_generator.append(R"~~~(
|
||||
impl->set_@attribute.name:snakecase@(cpp_value);
|
||||
|
@ -51,6 +51,7 @@ ENUMERATE_HTML_ATTRIBUTES
|
||||
// NOTE: Special case for the class and for attributes since they're C++ keywords.
|
||||
class_ = "class";
|
||||
for_ = "for";
|
||||
default_ = "default";
|
||||
|
||||
// NOTE: Special cases for attributes with dashes in them.
|
||||
accept_charset = "accept-charset";
|
||||
|
@ -39,8 +39,10 @@ namespace AttributeNames {
|
||||
__ENUMERATE_HTML_ATTRIBUTE(action) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(align) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(allow) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(allowfullscreen) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(alt) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(async) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(autoplay) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(behaviour) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(bgcolor) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(checked) \
|
||||
@ -51,18 +53,23 @@ namespace AttributeNames {
|
||||
__ENUMERATE_HTML_ATTRIBUTE(colspan) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(content) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(contenteditable) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(controls) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(data) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(datetime) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(default_) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(defer) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(disabled) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(download) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(defer) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(direction) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(dirname) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(face) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(for_) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(formnovalidate) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(formtarget) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(frameborder) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(headers) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(height) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(hidden) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(href) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(hreflang) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(http_equiv) \
|
||||
@ -70,21 +77,32 @@ namespace AttributeNames {
|
||||
__ENUMERATE_HTML_ATTRIBUTE(imagesizes) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(imagesrcset) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(integrity) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(ismap) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(label) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(lang) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(longdesc) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(loop) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(max) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(media) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(method) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(min) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(multiple) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(name) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(nomodule) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(novalidate) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(open) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(pattern) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(ping) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(placeholder) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(playsinline) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(poster) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(readonly) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rel) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(required) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(reversed) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(rows) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(scrolling) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(selected) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(size) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(sizes) \
|
||||
__ENUMERATE_HTML_ATTRIBUTE(src) \
|
||||
|
@ -1,5 +1,8 @@
|
||||
interface HTMLButtonElement : HTMLElement {
|
||||
|
||||
[Reflect=formnovalidate] attribute boolean formNoValidate;
|
||||
[Reflect=formtarget] attribute DOMString formTarget;
|
||||
[Reflect] attribute DOMString name;
|
||||
[Reflect] attribute DOMString value;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
interface HTMLDetailsElement : HTMLElement {
|
||||
|
||||
|
||||
[Reflect] attribute boolean open;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
interface HTMLDialogElement : HTMLElement {
|
||||
|
||||
|
||||
[Reflect] attribute boolean open;
|
||||
|
||||
}
|
||||
|
@ -3,6 +3,8 @@ interface HTMLElement : Element {
|
||||
[Reflect] attribute DOMString title;
|
||||
[Reflect] attribute DOMString lang;
|
||||
|
||||
[Reflect] attribute boolean hidden;
|
||||
|
||||
attribute DOMString contentEditable;
|
||||
|
||||
}
|
||||
|
@ -3,5 +3,6 @@ interface HTMLFormElement : HTMLElement {
|
||||
[Reflect] attribute DOMString name;
|
||||
[Reflect] attribute DOMString rel;
|
||||
[Reflect=accept-charset] attribute DOMString acceptCharset;
|
||||
[Reflect=novalidate] attribute boolean noValidate;
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ interface HTMLIFrameElement : HTMLElement {
|
||||
[Reflect] attribute DOMString allow;
|
||||
[Reflect] attribute DOMString width;
|
||||
[Reflect] attribute DOMString height;
|
||||
[Reflect=allowfullscreen] attribute boolean allowFullscreen;
|
||||
|
||||
[ReturnNullIfCrossOrigin] readonly attribute Document? contentDocument;
|
||||
}
|
||||
|
@ -5,5 +5,6 @@ interface HTMLImageElement : HTMLElement {
|
||||
[Reflect] attribute DOMString srcset;
|
||||
[Reflect] attribute DOMString sizes;
|
||||
[Reflect=usemap] attribute DOMString useMap;
|
||||
[Reflect=ismap] attribute boolean isMap;
|
||||
|
||||
}
|
||||
|
@ -12,4 +12,13 @@ interface HTMLInputElement : HTMLElement {
|
||||
[Reflect=value] attribute DOMString defaultValue;
|
||||
|
||||
attribute boolean checked;
|
||||
|
||||
[Reflect] attribute boolean disabled;
|
||||
[Reflect=checked] attribute boolean defaultChecked;
|
||||
[Reflect=formnovalidate] attribute boolean formNoValidate;
|
||||
[Reflect=formtarget] attribute DOMString formTarget;
|
||||
[Reflect] attribute boolean multiple;
|
||||
[Reflect=readonly] attribute boolean readOnly;
|
||||
[Reflect] attribute boolean required;
|
||||
|
||||
}
|
||||
|
@ -8,5 +8,6 @@ interface HTMLLinkElement : HTMLElement {
|
||||
[Reflect] attribute DOMString type;
|
||||
[Reflect=imagesrcset] attribute DOMString imageSrcset;
|
||||
[Reflect=imagesizes] attribute DOMString imageSizes;
|
||||
[Reflect] attribute boolean disabled;
|
||||
|
||||
}
|
||||
|
@ -2,4 +2,9 @@ interface HTMLMediaElement : HTMLElement {
|
||||
|
||||
[Reflect] attribute DOMString src;
|
||||
|
||||
[Reflect] attribute boolean autoplay;
|
||||
[Reflect] attribute boolean loop;
|
||||
|
||||
[Reflect] attribute boolean controls;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
interface HTMLOListElement : HTMLElement {
|
||||
|
||||
[Reflect] attribute boolean reversed;
|
||||
[Reflect] attribute DOMString type;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
interface HTMLOptGroupElement : HTMLElement {
|
||||
|
||||
[Reflect] attribute boolean disabled;
|
||||
[Reflect] attribute DOMString label;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
interface HTMLOptionElement : HTMLElement {
|
||||
|
||||
|
||||
[Reflect] attribute boolean disabled;
|
||||
[Reflect=selected] attribute boolean defaultSelected;
|
||||
|
||||
}
|
||||
|
@ -2,6 +2,8 @@ interface HTMLScriptElement : HTMLElement {
|
||||
|
||||
[Reflect] attribute DOMString src;
|
||||
[Reflect] attribute DOMString type;
|
||||
[Reflect=nomodule] attribute boolean noModule;
|
||||
[Reflect] attribute boolean defer;
|
||||
[Reflect] attribute DOMString integrity;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
interface HTMLSelectElement : HTMLElement {
|
||||
|
||||
|
||||
[Reflect] attribute boolean disabled;
|
||||
[Reflect] attribute boolean multiple;
|
||||
[Reflect] attribute boolean required;
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,12 @@
|
||||
interface HTMLTextAreaElement : HTMLElement {
|
||||
|
||||
[Reflect] attribute DOMString placeholder;
|
||||
[Reflect] attribute DOMString name;
|
||||
[Reflect] attribute DOMString wrap;
|
||||
readonly attribute DOMString type;
|
||||
|
||||
[Reflect] attribute boolean disabled;
|
||||
[Reflect=readonly] attribute boolean readOnly;
|
||||
[Reflect] attribute boolean required;
|
||||
|
||||
}
|
||||
|
@ -3,5 +3,6 @@ interface HTMLTrackElement : HTMLElement {
|
||||
[Reflect] attribute DOMString src;
|
||||
[Reflect] attribute DOMString srclang;
|
||||
[Reflect] attribute DOMString label;
|
||||
[Reflect] attribute boolean default;
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
interface HTMLVideoElement : HTMLMediaElement {
|
||||
|
||||
[Reflect] attribute DOMString poster;
|
||||
[Reflect=playsinline] attribute boolean playsInline;
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user