/* * Copyright (c) 2022, Jonah Shafran * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace Web::ARIA { class ARIAMixin { public: virtual ~ARIAMixin() = default; #define __ENUMERATE_ARIA_ATTRIBUTE(name, attribute) \ virtual Optional name() const = 0; \ virtual WebIDL::ExceptionOr set_##name(Optional const&) = 0; ENUMERATE_ARIA_ATTRIBUTES #undef __ENUMERATE_ARIA_ATTRIBUTE // https://www.w3.org/TR/html-aria/#docconformance virtual Optional default_role() const { return {}; } virtual DOM::Element const* to_element() const { return {}; } Optional role_from_role_attribute_value() const; Optional role_or_default() const; // https://www.w3.org/TR/wai-aria-1.2/#tree_exclusion virtual bool exclude_from_accessibility_tree() const = 0; // https://www.w3.org/TR/wai-aria-1.2/#tree_inclusion virtual bool include_in_accessibility_tree() const = 0; bool has_global_aria_attribute() const; // https://www.w3.org/TR/wai-aria-1.2/#valuetype_idref Optional parse_id_reference(Optional const&) const; // https://www.w3.org/TR/wai-aria-1.2/#valuetype_idref_list Vector parse_id_reference_list(Optional const&) const; protected: ARIAMixin() = default; virtual bool id_reference_exists(String const&) const = 0; }; }