MediaList.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. /*
  2. * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
  3. * Copyright (c) 2022, Andreas Kling <kling@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/NonnullRefPtrVector.h>
  9. #include <AK/Optional.h>
  10. #include <LibJS/Runtime/Object.h>
  11. #include <LibWeb/Bindings/LegacyPlatformObject.h>
  12. #include <LibWeb/CSS/MediaQuery.h>
  13. namespace Web::CSS {
  14. // https://www.w3.org/TR/cssom-1/#the-medialist-interface
  15. class MediaList final : public Bindings::LegacyPlatformObject {
  16. AK_MAKE_NONCOPYABLE(MediaList);
  17. AK_MAKE_NONMOVABLE(MediaList);
  18. JS_OBJECT(MediaList, Bindings::LegacyPlatformObject);
  19. public:
  20. static MediaList* create(Bindings::WindowObject&, NonnullRefPtrVector<MediaQuery>&& media);
  21. explicit MediaList(Bindings::WindowObject&, NonnullRefPtrVector<MediaQuery>&&);
  22. ~MediaList() = default;
  23. MediaList& impl() { return *this; }
  24. String media_text() const;
  25. void set_media_text(String const&);
  26. size_t length() const { return m_media.size(); }
  27. String item(u32 index) const;
  28. void append_medium(String);
  29. void delete_medium(String);
  30. virtual bool is_supported_property_index(u32 index) const override;
  31. virtual JS::Value item_value(size_t index) const override;
  32. bool evaluate(HTML::Window const&);
  33. bool matches() const;
  34. private:
  35. NonnullRefPtrVector<MediaQuery> m_media;
  36. };
  37. }
  38. namespace Web::Bindings {
  39. inline JS::Object* wrap(JS::Realm&, Web::CSS::MediaList& object) { return &object; }
  40. using MediaListWrapper = Web::CSS::MediaList;
  41. }