From bc4c185aef7d6f28144633a235ad6e8dad4e78e3 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 22 Apr 2022 14:10:59 +0100 Subject: [PATCH] LibWeb: Add MediaList wrapper Most of the pieces were already there, I'd just forgotten to actually wire them up. --- .../LibWeb/Bindings/WindowObjectHelper.h | 3 +++ Userland/Libraries/LibWeb/CMakeLists.txt | 1 + Userland/Libraries/LibWeb/CSS/MediaList.cpp | 11 ++++++++--- Userland/Libraries/LibWeb/CSS/MediaList.h | 16 +++++++++++++--- Userland/Libraries/LibWeb/CSS/MediaList.idl | 1 + Userland/Libraries/LibWeb/Forward.h | 1 + 6 files changed, 27 insertions(+), 6 deletions(-) diff --git a/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h b/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h index 7c4e90dda8..9073de1fd1 100644 --- a/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h +++ b/Userland/Libraries/LibWeb/Bindings/WindowObjectHelper.h @@ -230,6 +230,8 @@ #include #include #include +#include +#include #include #include #include @@ -462,6 +464,7 @@ ADD_WINDOW_OBJECT_INTERFACE(Location) \ ADD_WINDOW_OBJECT_INTERFACE(MediaQueryList) \ ADD_WINDOW_OBJECT_INTERFACE(MediaQueryListEvent) \ + ADD_WINDOW_OBJECT_INTERFACE(MediaList) \ ADD_WINDOW_OBJECT_INTERFACE(MessageChannel) \ ADD_WINDOW_OBJECT_INTERFACE(MessageEvent) \ ADD_WINDOW_OBJECT_INTERFACE(MouseEvent) \ diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 35a57f6733..2d7bd9e890 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -457,6 +457,7 @@ libweb_js_wrapper(CSS/CSSRuleList) libweb_js_wrapper(CSS/CSSStyleDeclaration) libweb_js_wrapper(CSS/CSSStyleRule) libweb_js_wrapper(CSS/CSSStyleSheet) +libweb_js_wrapper(CSS/MediaList) libweb_js_wrapper(CSS/MediaQueryList) libweb_js_wrapper(CSS/MediaQueryListEvent) libweb_js_wrapper(CSS/Screen) diff --git a/Userland/Libraries/LibWeb/CSS/MediaList.cpp b/Userland/Libraries/LibWeb/CSS/MediaList.cpp index 3edf00a746..13e6fc9923 100644 --- a/Userland/Libraries/LibWeb/CSS/MediaList.cpp +++ b/Userland/Libraries/LibWeb/CSS/MediaList.cpp @@ -29,10 +29,15 @@ void MediaList::set_media_text(String const& text) m_media = parse_media_query_list({}, text); } -// https://www.w3.org/TR/cssom-1/#dom-medialist-item -Optional MediaList::item(size_t index) const +bool MediaList::is_supported_property_index(u32 index) const { - if (index >= length()) + return index < length(); +} + +// https://www.w3.org/TR/cssom-1/#dom-medialist-item +String MediaList::item(u32 index) const +{ + if (!is_supported_property_index(index)) return {}; return m_media[index].to_string(); diff --git a/Userland/Libraries/LibWeb/CSS/MediaList.h b/Userland/Libraries/LibWeb/CSS/MediaList.h index 772a57c8e8..925707edb1 100644 --- a/Userland/Libraries/LibWeb/CSS/MediaList.h +++ b/Userland/Libraries/LibWeb/CSS/MediaList.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, Sam Atkins + * Copyright (c) 2021-2022, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ @@ -9,13 +9,22 @@ #include #include #include +#include #include namespace Web::CSS { // https://www.w3.org/TR/cssom-1/#the-medialist-interface -class MediaList final : public RefCounted { +class MediaList final + : public RefCounted + , public Bindings::Wrappable + , public Weakable { + AK_MAKE_NONCOPYABLE(MediaList); + AK_MAKE_NONMOVABLE(MediaList); + public: + using WrapperType = Bindings::MediaListWrapper; + static NonnullRefPtr create(NonnullRefPtrVector&& media) { return adopt_ref(*new MediaList(move(media))); @@ -25,7 +34,8 @@ public: String media_text() const; void set_media_text(String const&); size_t length() const { return m_media.size(); } - Optional item(size_t index) const; + bool is_supported_property_index(u32 index) const; + String item(u32 index) const; void append_medium(String); void delete_medium(String); diff --git a/Userland/Libraries/LibWeb/CSS/MediaList.idl b/Userland/Libraries/LibWeb/CSS/MediaList.idl index f4fd20a209..63eb6bfc5a 100644 --- a/Userland/Libraries/LibWeb/CSS/MediaList.idl +++ b/Userland/Libraries/LibWeb/CSS/MediaList.idl @@ -1,3 +1,4 @@ +[Exposed=Window] interface MediaList { [LegacyNullToEmptyString] stringifier attribute CSSOMString mediaText; readonly attribute unsigned long length; diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index c0fcefde03..f6f4282747 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -509,6 +509,7 @@ class ImageDataWrapper; class IntersectionObserverWrapper; class KeyboardEventWrapper; class LocationObject; +class MediaListWrapper; class MediaQueryListEventWrapper; class MediaQueryListWrapper; class MessageChannelWrapper;