1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 05:47:35 +00:00

LibWeb: Add MediaList wrapper

Most of the pieces were already there, I'd just forgotten to actually
wire them up.
This commit is contained in:
Sam Atkins 2022-04-22 14:10:59 +01:00 committed by Andreas Kling
parent b8c0ebccfd
commit bc4c185aef
6 changed files with 27 additions and 6 deletions

View file

@ -230,6 +230,8 @@
#include <LibWeb/Bindings/KeyboardEventPrototype.h> #include <LibWeb/Bindings/KeyboardEventPrototype.h>
#include <LibWeb/Bindings/LocationConstructor.h> #include <LibWeb/Bindings/LocationConstructor.h>
#include <LibWeb/Bindings/LocationPrototype.h> #include <LibWeb/Bindings/LocationPrototype.h>
#include <LibWeb/Bindings/MediaListConstructor.h>
#include <LibWeb/Bindings/MediaListPrototype.h>
#include <LibWeb/Bindings/MediaQueryListConstructor.h> #include <LibWeb/Bindings/MediaQueryListConstructor.h>
#include <LibWeb/Bindings/MediaQueryListEventConstructor.h> #include <LibWeb/Bindings/MediaQueryListEventConstructor.h>
#include <LibWeb/Bindings/MediaQueryListEventPrototype.h> #include <LibWeb/Bindings/MediaQueryListEventPrototype.h>
@ -462,6 +464,7 @@
ADD_WINDOW_OBJECT_INTERFACE(Location) \ ADD_WINDOW_OBJECT_INTERFACE(Location) \
ADD_WINDOW_OBJECT_INTERFACE(MediaQueryList) \ ADD_WINDOW_OBJECT_INTERFACE(MediaQueryList) \
ADD_WINDOW_OBJECT_INTERFACE(MediaQueryListEvent) \ ADD_WINDOW_OBJECT_INTERFACE(MediaQueryListEvent) \
ADD_WINDOW_OBJECT_INTERFACE(MediaList) \
ADD_WINDOW_OBJECT_INTERFACE(MessageChannel) \ ADD_WINDOW_OBJECT_INTERFACE(MessageChannel) \
ADD_WINDOW_OBJECT_INTERFACE(MessageEvent) \ ADD_WINDOW_OBJECT_INTERFACE(MessageEvent) \
ADD_WINDOW_OBJECT_INTERFACE(MouseEvent) \ ADD_WINDOW_OBJECT_INTERFACE(MouseEvent) \

View file

@ -457,6 +457,7 @@ libweb_js_wrapper(CSS/CSSRuleList)
libweb_js_wrapper(CSS/CSSStyleDeclaration) libweb_js_wrapper(CSS/CSSStyleDeclaration)
libweb_js_wrapper(CSS/CSSStyleRule) libweb_js_wrapper(CSS/CSSStyleRule)
libweb_js_wrapper(CSS/CSSStyleSheet) libweb_js_wrapper(CSS/CSSStyleSheet)
libweb_js_wrapper(CSS/MediaList)
libweb_js_wrapper(CSS/MediaQueryList) libweb_js_wrapper(CSS/MediaQueryList)
libweb_js_wrapper(CSS/MediaQueryListEvent) libweb_js_wrapper(CSS/MediaQueryListEvent)
libweb_js_wrapper(CSS/Screen) libweb_js_wrapper(CSS/Screen)

View file

@ -29,10 +29,15 @@ void MediaList::set_media_text(String const& text)
m_media = parse_media_query_list({}, text); m_media = parse_media_query_list({}, text);
} }
// https://www.w3.org/TR/cssom-1/#dom-medialist-item bool MediaList::is_supported_property_index(u32 index) const
Optional<String> MediaList::item(size_t 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 {};
return m_media[index].to_string(); return m_media[index].to_string();

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2021, Sam Atkins <atkinssj@serenityos.org> * Copyright (c) 2021-2022, Sam Atkins <atkinssj@serenityos.org>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -9,13 +9,22 @@
#include <AK/NonnullRefPtrVector.h> #include <AK/NonnullRefPtrVector.h>
#include <AK/Optional.h> #include <AK/Optional.h>
#include <AK/RefCounted.h> #include <AK/RefCounted.h>
#include <LibWeb/Bindings/Wrappable.h>
#include <LibWeb/CSS/MediaQuery.h> #include <LibWeb/CSS/MediaQuery.h>
namespace Web::CSS { namespace Web::CSS {
// https://www.w3.org/TR/cssom-1/#the-medialist-interface // https://www.w3.org/TR/cssom-1/#the-medialist-interface
class MediaList final : public RefCounted<MediaList> { class MediaList final
: public RefCounted<MediaList>
, public Bindings::Wrappable
, public Weakable<MediaList> {
AK_MAKE_NONCOPYABLE(MediaList);
AK_MAKE_NONMOVABLE(MediaList);
public: public:
using WrapperType = Bindings::MediaListWrapper;
static NonnullRefPtr<MediaList> create(NonnullRefPtrVector<MediaQuery>&& media) static NonnullRefPtr<MediaList> create(NonnullRefPtrVector<MediaQuery>&& media)
{ {
return adopt_ref(*new MediaList(move(media))); return adopt_ref(*new MediaList(move(media)));
@ -25,7 +34,8 @@ public:
String media_text() const; String media_text() const;
void set_media_text(String const&); void set_media_text(String const&);
size_t length() const { return m_media.size(); } size_t length() const { return m_media.size(); }
Optional<String> item(size_t index) const; bool is_supported_property_index(u32 index) const;
String item(u32 index) const;
void append_medium(String); void append_medium(String);
void delete_medium(String); void delete_medium(String);

View file

@ -1,3 +1,4 @@
[Exposed=Window]
interface MediaList { interface MediaList {
[LegacyNullToEmptyString] stringifier attribute CSSOMString mediaText; [LegacyNullToEmptyString] stringifier attribute CSSOMString mediaText;
readonly attribute unsigned long length; readonly attribute unsigned long length;

View file

@ -509,6 +509,7 @@ class ImageDataWrapper;
class IntersectionObserverWrapper; class IntersectionObserverWrapper;
class KeyboardEventWrapper; class KeyboardEventWrapper;
class LocationObject; class LocationObject;
class MediaListWrapper;
class MediaQueryListEventWrapper; class MediaQueryListEventWrapper;
class MediaQueryListWrapper; class MediaQueryListWrapper;
class MessageChannelWrapper; class MessageChannelWrapper;