CSSLayerStatementRule.cpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. // TODO: Cache these?
  38. Vector<FlyString> qualified_layer_names;
  39. auto qualified_parent_layer_name = parent_layer_internal_qualified_name();
  40. if (qualified_parent_layer_name.is_empty())
  41. return m_name_list;
  42. for (auto const& name : m_name_list)
  43. qualified_layer_names.append(MUST(String::formatted("{}.{}", qualified_parent_layer_name, name)));
  44. return qualified_layer_names;
  45. }
  46. }