mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 11:22:45 +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
	
	 Andreas Kling
						Andreas Kling