StyleSheetList.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /*
  2. * Copyright (c) 2020-2022, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/NonnullRefPtrVector.h>
  8. #include <AK/RefCounted.h>
  9. #include <LibWeb/Bindings/LegacyPlatformObject.h>
  10. #include <LibWeb/Bindings/Wrappable.h>
  11. #include <LibWeb/CSS/CSSStyleSheet.h>
  12. #include <LibWeb/Forward.h>
  13. namespace Web::CSS {
  14. class StyleSheetList : public Bindings::LegacyPlatformObject {
  15. JS_OBJECT(StyleSheetList, Bindings::LegacyPlatformObject);
  16. public:
  17. StyleSheetList& impl() { return *this; }
  18. static StyleSheetList* create(DOM::Document& document);
  19. explicit StyleSheetList(DOM::Document&);
  20. void add_sheet(CSSStyleSheet&);
  21. void remove_sheet(CSSStyleSheet&);
  22. Vector<CSSStyleSheet&> const& sheets() const { return m_sheets; }
  23. Vector<CSSStyleSheet&>& sheets() { return m_sheets; }
  24. CSSStyleSheet* item(size_t index) const
  25. {
  26. if (index >= m_sheets.size())
  27. return {};
  28. return &const_cast<CSSStyleSheet&>(m_sheets[index]);
  29. }
  30. size_t length() const { return m_sheets.size(); }
  31. virtual bool is_supported_property_index(u32 index) const override;
  32. virtual JS::Value item_value(size_t index) const override;
  33. DOM::Document& document() { return m_document; }
  34. DOM::Document const& document() const { return m_document; }
  35. private:
  36. virtual void visit_edges(Cell::Visitor&) override;
  37. DOM::Document& m_document;
  38. Vector<CSSStyleSheet&> m_sheets;
  39. };
  40. }
  41. namespace Web::Bindings {
  42. inline JS::Object* wrap(JS::Realm&, Web::CSS::StyleSheetList& object) { return &object; }
  43. using StyleSheetListWrapper = Web::CSS::StyleSheetList;
  44. }