mirror of
https://github.com/RGBCube/serenity
synced 2025-05-20 18:15:07 +00:00
LibWeb: Allow specifying a custom attribute name for [Reflect]
Sometimes the IDL attribute and the DOM attribute don't have the same exact name. In those cases, we can now do this: [Reflect=foobar] attribute DOMString fooBar;
This commit is contained in:
parent
cb35a8ea83
commit
8f31331e68
1 changed files with 21 additions and 2 deletions
|
@ -50,6 +50,17 @@ static String snake_name(const StringView& title_name)
|
|||
return builder.to_string();
|
||||
}
|
||||
|
||||
static String add_underscore_to_cpp_keywords(const String& input)
|
||||
{
|
||||
if (input == "class" || input == "template") {
|
||||
StringBuilder builder;
|
||||
builder.append(input);
|
||||
builder.append('_');
|
||||
return builder.to_string();
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
namespace IDL {
|
||||
|
||||
struct Type {
|
||||
|
@ -598,7 +609,11 @@ void generate_implementation(const IDL::Interface& interface)
|
|||
out() << " return {};";
|
||||
|
||||
if (attribute.extended_attributes.contains("Reflect")) {
|
||||
out() << " auto retval = impl->attribute(HTML::AttributeNames::" << attribute.name << ");";
|
||||
auto attribute_name = attribute.extended_attributes.get("Reflect").value();
|
||||
if (attribute_name.is_null())
|
||||
attribute_name = attribute.name;
|
||||
attribute_name = add_underscore_to_cpp_keywords(attribute_name);
|
||||
out() << " auto retval = impl->attribute(HTML::AttributeNames::" << attribute_name << ");";
|
||||
} else {
|
||||
out() << " auto retval = impl->" << snake_name(attribute.name) << "();";
|
||||
}
|
||||
|
@ -616,7 +631,11 @@ void generate_implementation(const IDL::Interface& interface)
|
|||
generate_to_cpp(attribute, "value", "", "cpp_value", true);
|
||||
|
||||
if (attribute.extended_attributes.contains("Reflect")) {
|
||||
out() << " impl->set_attribute(HTML::AttributeNames::" << attribute.name << ", cpp_value);";
|
||||
auto attribute_name = attribute.extended_attributes.get("Reflect").value();
|
||||
if (attribute_name.is_null())
|
||||
attribute_name = attribute.name;
|
||||
attribute_name = add_underscore_to_cpp_keywords(attribute_name);
|
||||
out() << " impl->set_attribute(HTML::AttributeNames::" << attribute_name << ", cpp_value);";
|
||||
} else {
|
||||
out() << " impl->set_" << snake_name(attribute.name) << "(cpp_value);";
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue