/* * Copyright (c) 2021, Linus Groh * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include namespace Web::CSS { // 4.2. The MediaQueryList Interface, https://drafts.csswg.org/cssom-view/#the-mediaquerylist-interface class MediaQueryList final : public RefCounted , public Weakable , public DOM::EventTarget , public Bindings::Wrappable { public: using WrapperType = Bindings::MediaQueryListWrapper; using RefCounted::ref; using RefCounted::unref; static NonnullRefPtr create(DOM::Document& document, NonnullRefPtrVector&& media_queries) { return adopt_ref(*new MediaQueryList(document, move(media_queries))); } virtual ~MediaQueryList() override; String media() const; bool matches() const; bool evaluate(); // ^EventTarget virtual void ref_event_target() override { ref(); } virtual void unref_event_target() override { unref(); } virtual JS::Object* create_wrapper(JS::GlobalObject&) override; void add_listener(RefPtr listener); void remove_listener(RefPtr listener); void set_onchange(HTML::EventHandler); HTML::EventHandler onchange(); private: MediaQueryList(DOM::Document&, NonnullRefPtrVector&&); DOM::Document& m_document; NonnullRefPtrVector m_media; }; } namespace Web::Bindings { MediaQueryListWrapper* wrap(JS::GlobalObject&, CSS::MediaQueryList&); }