CSSLayerStatementRule.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. /*
  2. * Copyright (c) 2024, Sam Atkins <sam@ladybird.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "CSSLayerStatementRule.h"
  7. #include <LibWeb/Bindings/CSSLayerStatementRulePrototype.h>
  8. #include <LibWeb/Bindings/Intrinsics.h>
  9. #include <LibWeb/CSS/CSSLayerBlockRule.h>
  10. namespace Web::CSS {
  11. JS_DEFINE_ALLOCATOR(CSSLayerStatementRule);
  12. JS::NonnullGCPtr<CSSLayerStatementRule> CSSLayerStatementRule::create(JS::Realm& realm, Vector<FlyString> name_list)
  13. {
  14. return realm.heap().allocate<CSSLayerStatementRule>(realm, realm, move(name_list));
  15. }
  16. CSSLayerStatementRule::CSSLayerStatementRule(JS::Realm& realm, Vector<FlyString> name_list)
  17. : CSSRule(realm)
  18. , m_name_list(move(name_list))
  19. {
  20. }
  21. void CSSLayerStatementRule::initialize(JS::Realm& realm)
  22. {
  23. Base::initialize(realm);
  24. WEB_SET_PROTOTYPE_FOR_INTERFACE(CSSLayerStatementRule);
  25. }
  26. String CSSLayerStatementRule::serialized() const
  27. {
  28. // AD-HOC: No spec yet.
  29. StringBuilder builder;
  30. builder.append("@layer "sv);
  31. builder.join(", "sv, m_name_list);
  32. builder.append(';');
  33. return builder.to_string_without_validation();
  34. }
  35. Vector<FlyString> CSSLayerStatementRule::internal_qualified_name_list(Badge<StyleComputer>) const
  36. {
  37. Vector<FlyString> qualified_layer_names;
  38. auto const& qualified_parent_layer_name = parent_layer_internal_qualified_name();
  39. if (qualified_parent_layer_name.is_empty())
  40. return m_name_list;
  41. for (auto const& name : m_name_list)
  42. qualified_layer_names.append(MUST(String::formatted("{}.{}", qualified_parent_layer_name, name)));
  43. return qualified_layer_names;
  44. }
  45. }