mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 05:22:45 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			285 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			285 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
|  * Copyright (c) 2023, Jonah Shafran <jonahshafran@gmail.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-2-Clause
 | |
|  */
 | |
| 
 | |
| #pragma once
 | |
| 
 | |
| #include <AK/NonnullOwnPtr.h>
 | |
| #include <AK/Vector.h>
 | |
| #include <LibWeb/ARIA/ARIAMixin.h>
 | |
| #include <LibWeb/Forward.h>
 | |
| 
 | |
| namespace Web::ARIA {
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#valuetype_tristate
 | |
| enum class Tristate {
 | |
|     True,
 | |
|     False,
 | |
|     Mixed,
 | |
|     Undefined
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-autocomplete
 | |
| enum class AriaAutocomplete {
 | |
|     // When a user is providing input, text suggesting one way to complete the provided input may be dynamically inserted after the caret.
 | |
|     Inline,
 | |
|     // When a user is providing input, an element containing a collection of values that could complete the provided input may be displayed.
 | |
|     List,
 | |
|     // When a user is providing input, an element containing a collection of values that could complete the provided input may be displayed.
 | |
|     // If displayed, one value in the collection is automatically selected, and the text needed to complete the automatically selected value appears after the caret in the input
 | |
|     Both,
 | |
|     // When a user is providing input, an automatic suggestion that attempts to predict how the user intends to complete the input is not displayed.
 | |
|     None
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-current
 | |
| enum class AriaCurrent {
 | |
|     // Represents the current page within a set of pages.
 | |
|     Page,
 | |
|     // Represents the current step within a process.
 | |
|     Step,
 | |
|     // Represents the current location within an environment or context.
 | |
|     Location,
 | |
|     // Represents the current date within a collection of dates.
 | |
|     Date,
 | |
|     // Represents the current time within a set of times.
 | |
|     Time,
 | |
|     // Represents the current item within a set.
 | |
|     True,
 | |
|     // Does not represent the current item within a set.
 | |
|     False
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-dropeffect
 | |
| enum class AriaDropEffect {
 | |
|     // A duplicate of the source object will be dropped into the target.
 | |
|     Copy,
 | |
|     // A function supported by the drop target is executed, using the drag source as an input.
 | |
|     Execute,
 | |
|     // A reference or shortcut to the dragged object will be created in the target object.
 | |
|     Link,
 | |
|     // The source object will be removed from its current location and dropped into the target.
 | |
|     Move,
 | |
|     // No operation can be performed; effectively cancels the drag operation if an attempt is made to drop on this object.
 | |
|     // Ignored if combined with any other token value. e.g., 'none copy' is equivalent to a 'copy' value.
 | |
|     None,
 | |
|     // There is a popup menu or dialog that allows the user to choose one of the drag operations (copy, move, link, execute) and any other drag functionality, such as cancel.
 | |
|     Popup
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-haspopup
 | |
| enum class AriaHasPopup {
 | |
|     // Indicates the element does not have a popup.
 | |
|     False,
 | |
|     // Indicates the popup is a menu.
 | |
|     True,
 | |
|     // Indicates the popup is a menu.
 | |
|     Menu,
 | |
|     // Indicates the popup is a listbox.
 | |
|     Listbox,
 | |
|     // Indicates the popup is a tree.
 | |
|     Tree,
 | |
|     // Indicates the popup is a grid.
 | |
|     Grid,
 | |
|     // Indicates the popup is a dialog.
 | |
|     Dialog
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-invalid
 | |
| enum class AriaInvalid {
 | |
|     // A grammatical error was detected.
 | |
|     Grammar,
 | |
|     // There are no detected errors in the value.
 | |
|     False,
 | |
|     // A spelling error was detected.
 | |
|     Spelling,
 | |
|     // The value entered by the user has failed validation.
 | |
|     True
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-live
 | |
| enum class AriaLive {
 | |
|     // Indicates that updates to the region have the highest priority and should be presented the user immediately.
 | |
|     Assertive,
 | |
|     // Indicates that updates to the region should not be presented to the user unless the user is currently focused on that region.
 | |
|     Off,
 | |
|     // Indicates that updates to the region should be presented at the next graceful opportunity, such as at the end of speaking the current sentence or when the user pauses typing.
 | |
|     Polite
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-orientation
 | |
| enum class AriaOrientation {
 | |
|     // The element is oriented horizontally.
 | |
|     Horizontal,
 | |
|     // The element's orientation is unknown/ambiguous.
 | |
|     Undefined,
 | |
|     // The element is oriented vertically.
 | |
|     Vertical
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-relevant
 | |
| enum class AriaRelevant {
 | |
|     // Element nodes are added to the accessibility tree within the live region.
 | |
|     Additions,
 | |
|     // Equivalent to the combination of values, "additions text".
 | |
|     AdditionsText,
 | |
|     // Equivalent to the combination of all values, "additions removals text".
 | |
|     All,
 | |
|     // Text content, a text alternative, or an element node within the live region is removed from the accessibility tree.
 | |
|     Removals,
 | |
|     // Text content or a text alternative is added to any descendant in the accessibility tree of the live region.
 | |
|     Text
 | |
| };
 | |
| 
 | |
| // https://www.w3.org/TR/wai-aria-1.2/#aria-sort
 | |
| enum class AriaSort {
 | |
|     // Items are sorted in ascending order by this column.
 | |
|     Ascending,
 | |
|     // Items are sorted in descending order by this column.
 | |
|     Descending,
 | |
|     // There is no defined sort applied to the column.
 | |
|     None,
 | |
|     // A sort algorithm other than ascending or descending has been applied.
 | |
|     Other
 | |
| };
 | |
| 
 | |
| class AriaData {
 | |
| public:
 | |
|     AriaData() { }
 | |
| 
 | |
|     static ErrorOr<NonnullOwnPtr<AriaData>> build_data(ARIAMixin const& mixin) { return adopt_nonnull_own_or_enomem(new (nothrow) AriaData(mixin)); }
 | |
| 
 | |
|     Optional<String> aria_active_descendant_or_default() const;
 | |
|     bool aria_atomic_or_default(bool default_value = false) const;
 | |
|     AriaAutocomplete aria_auto_complete_or_default() const;
 | |
|     bool aria_busy_or_default() const;
 | |
|     Tristate aria_checked_or_default() const;
 | |
|     Optional<i32> aria_col_count_or_default() const;
 | |
|     Optional<i32> aria_col_index_or_default() const;
 | |
|     Optional<i32> aria_col_span_or_default() const;
 | |
|     Vector<String> aria_controls_or_default() const;
 | |
|     AriaCurrent aria_current_or_default() const;
 | |
|     Vector<String> aria_described_by_or_default() const;
 | |
|     Optional<String> aria_details_or_default() const;
 | |
|     bool aria_disabled_or_default() const;
 | |
|     Vector<AriaDropEffect> aria_drop_effect_or_default() const;
 | |
|     Optional<String> aria_error_message_or_default() const;
 | |
|     Optional<bool> aria_expanded_or_default() const;
 | |
|     Vector<String> aria_flow_to_or_default() const;
 | |
|     Optional<bool> aria_grabbed_or_default() const;
 | |
|     AriaHasPopup aria_has_popup_or_default() const;
 | |
|     Optional<bool> aria_hidden_or_default() const;
 | |
|     AriaInvalid aria_invalid_or_default() const;
 | |
|     String aria_key_shortcuts_or_default() const;
 | |
|     String aria_label_or_default() const;
 | |
|     Vector<String> aria_labelled_by_or_default() const;
 | |
|     Optional<i32> aria_level_or_default() const;
 | |
|     AriaLive aria_live_or_default(AriaLive default_value = AriaLive::Off) const;
 | |
|     bool aria_modal_or_default() const;
 | |
|     bool aria_multi_line_or_default() const;
 | |
|     bool aria_multi_selectable_or_default() const;
 | |
|     AriaOrientation aria_orientation_or_default(AriaOrientation default_value = AriaOrientation::Undefined) const;
 | |
|     Vector<String> aria_owns_or_default() const;
 | |
|     String aria_placeholder_or_default() const;
 | |
|     Optional<i32> aria_pos_in_set_or_default() const;
 | |
|     Tristate aria_pressed_or_default() const;
 | |
|     bool aria_read_only_or_default() const;
 | |
|     Vector<AriaRelevant> aria_relevant_or_default() const;
 | |
|     bool aria_required_or_default() const;
 | |
|     String aria_role_description_or_default() const;
 | |
|     Optional<i32> aria_row_count_or_default() const;
 | |
|     Optional<i32> aria_row_index_or_default() const;
 | |
|     Optional<i32> aria_row_span_or_default() const;
 | |
|     Optional<bool> aria_selected_or_default() const;
 | |
|     Optional<i32> aria_set_size_or_default() const;
 | |
|     AriaSort aria_sort_or_default() const;
 | |
|     Optional<f64> aria_value_max_or_default(Optional<f64> default_value = {}) const;
 | |
|     Optional<f64> aria_value_min_or_default(Optional<f64> default_value = {}) const;
 | |
|     Optional<f64> aria_value_now_or_default() const;
 | |
|     String aria_value_text_or_default() const;
 | |
| 
 | |
| private:
 | |
|     explicit AriaData(ARIAMixin const&);
 | |
| 
 | |
|     // https://www.w3.org/TR/wai-aria-1.2/#valuetype_true-false
 | |
|     // The default value for this value type is false unless otherwise specified.
 | |
|     static bool parse_true_false(Optional<String> const&);
 | |
| 
 | |
|     // https://www.w3.org/TR/wai-aria-1.2/#valuetype_tristate
 | |
|     // The default value for this value type is undefined unless otherwise specified.
 | |
|     static Tristate parse_tristate(Optional<String> const&);
 | |
| 
 | |
|     // https://www.w3.org/TR/wai-aria-1.2/#valuetype_true-false-undefined
 | |
|     // The default value for this value type is undefined unless otherwise specified.
 | |
|     static Optional<bool> parse_true_false_undefined(Optional<String> const&);
 | |
| 
 | |
|     // https://www.w3.org/TR/wai-aria-1.2/#valuetype_integer
 | |
|     static Optional<i32> parse_integer(Optional<String> const&);
 | |
| 
 | |
|     // https://www.w3.org/TR/wai-aria-1.2/#valuetype_number
 | |
|     static Optional<f64> parse_number(Optional<String> const&);
 | |
| 
 | |
|     static AriaAutocomplete parse_aria_autocomplete(Optional<String> const&);
 | |
|     static AriaCurrent parse_aria_current(Optional<String> const&);
 | |
|     static Vector<AriaDropEffect> parse_aria_drop_effect(Optional<String> const&);
 | |
|     static AriaHasPopup parse_aria_has_popup(Optional<String> const&);
 | |
|     static AriaInvalid parse_aria_invalid(Optional<String> const&);
 | |
|     static Optional<AriaLive> parse_aria_live(Optional<String> const&);
 | |
|     static Optional<AriaOrientation> parse_aria_orientation(Optional<String> const&);
 | |
|     static Vector<AriaRelevant> parse_aria_relevant(Optional<String> const&);
 | |
|     static AriaSort parse_aria_sort(Optional<String> const&);
 | |
|     static Optional<bool> parse_optional_true_false(Optional<String> const&);
 | |
| 
 | |
|     Optional<String> m_aria_active_descendant;
 | |
|     Optional<bool> m_aria_atomic;
 | |
|     AriaAutocomplete m_aria_auto_complete;
 | |
|     bool m_aria_busy;
 | |
|     Tristate m_aria_checked;
 | |
|     Optional<i32> m_aria_col_count;
 | |
|     Optional<i32> m_aria_col_index;
 | |
|     Optional<i32> m_aria_col_span;
 | |
|     Vector<String> m_aria_controls;
 | |
|     AriaCurrent m_aria_current;
 | |
|     Vector<String> m_aria_described_by;
 | |
|     Optional<String> m_aria_details;
 | |
|     bool m_aria_disabled;
 | |
|     Vector<AriaDropEffect> m_aria_drop_effect;
 | |
|     Optional<String> m_aria_error_message;
 | |
|     Optional<bool> m_aria_expanded;
 | |
|     Vector<String> m_aria_flow_to;
 | |
|     Optional<bool> m_aria_grabbed;
 | |
|     AriaHasPopup m_aria_has_popup;
 | |
|     Optional<bool> m_aria_hidden;
 | |
|     AriaInvalid m_aria_invalid;
 | |
|     String m_aria_key_shortcuts;
 | |
|     String m_aria_label;
 | |
|     Vector<String> m_aria_labelled_by;
 | |
|     Optional<i32> m_aria_level;
 | |
|     Optional<AriaLive> m_aria_live;
 | |
|     bool m_aria_modal;
 | |
|     bool m_aria_multi_line;
 | |
|     bool m_aria_multi_selectable;
 | |
|     Optional<AriaOrientation> m_aria_orientation;
 | |
|     Vector<String> m_aria_owns;
 | |
|     String m_aria_placeholder;
 | |
|     Optional<i32> m_aria_pos_in_set;
 | |
|     Tristate m_aria_pressed;
 | |
|     bool m_aria_read_only;
 | |
|     Vector<AriaRelevant> m_aria_relevant;
 | |
|     bool m_aria_required;
 | |
|     String m_aria_role_description;
 | |
|     Optional<i32> m_aria_row_count;
 | |
|     Optional<i32> m_aria_row_index;
 | |
|     Optional<i32> m_aria_row_span;
 | |
|     Optional<bool> m_aria_selected;
 | |
|     Optional<i32> m_aria_set_size;
 | |
|     AriaSort m_aria_sort;
 | |
|     Optional<f64> m_aria_value_max;
 | |
|     Optional<f64> m_aria_value_min;
 | |
|     Optional<f64> m_aria_value_now;
 | |
|     String m_aria_value_text;
 | |
| };
 | |
| 
 | |
| }
 | 
