| 
									
										
										
										
											2024-09-02 16:45:25 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2024, Sam Atkins <sam@ladybird.org> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "CSSLayerStatementRule.h"
 | 
					
						
							|  |  |  | #include <LibWeb/Bindings/CSSLayerStatementRulePrototype.h>
 | 
					
						
							|  |  |  | #include <LibWeb/Bindings/Intrinsics.h>
 | 
					
						
							|  |  |  | #include <LibWeb/CSS/CSSLayerBlockRule.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::CSS { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | JS_DEFINE_ALLOCATOR(CSSLayerStatementRule); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | JS::NonnullGCPtr<CSSLayerStatementRule> CSSLayerStatementRule::create(JS::Realm& realm, Vector<FlyString> name_list) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2024-11-14 05:50:17 +13:00
										 |  |  |     return realm.create<CSSLayerStatementRule>(realm, move(name_list)); | 
					
						
							| 
									
										
										
										
											2024-09-02 16:45:25 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | CSSLayerStatementRule::CSSLayerStatementRule(JS::Realm& realm, Vector<FlyString> name_list) | 
					
						
							| 
									
										
										
										
											2024-10-28 20:16:28 +01:00
										 |  |  |     : CSSRule(realm, Type::LayerStatement) | 
					
						
							| 
									
										
										
										
											2024-09-02 16:45:25 +01:00
										 |  |  |     , m_name_list(move(name_list)) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CSSLayerStatementRule::initialize(JS::Realm& realm) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Base::initialize(realm); | 
					
						
							|  |  |  |     WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSLayerStatementRule); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | String CSSLayerStatementRule::serialized() const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     // AD-HOC: No spec yet.
 | 
					
						
							|  |  |  |     StringBuilder builder; | 
					
						
							|  |  |  |     builder.append("@layer "sv); | 
					
						
							|  |  |  |     builder.join(", "sv, m_name_list); | 
					
						
							|  |  |  |     builder.append(';'); | 
					
						
							|  |  |  |     return builder.to_string_without_validation(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Vector<FlyString> CSSLayerStatementRule::internal_qualified_name_list(Badge<StyleComputer>) const | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     Vector<FlyString> qualified_layer_names; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-09-07 11:45:50 +02:00
										 |  |  |     auto const& qualified_parent_layer_name = parent_layer_internal_qualified_name(); | 
					
						
							| 
									
										
										
										
											2024-09-02 16:45:25 +01:00
										 |  |  |     if (qualified_parent_layer_name.is_empty()) | 
					
						
							|  |  |  |         return m_name_list; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (auto const& name : m_name_list) | 
					
						
							|  |  |  |         qualified_layer_names.append(MUST(String::formatted("{}.{}", qualified_parent_layer_name, name))); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return qualified_layer_names; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |