ladybird/Userland/Libraries/LibWeb/DOM/ARIARoleNames.cpp
Timothy Flynn f3db548a3d AK+Everywhere: Rename FlyString to DeprecatedFlyString
DeprecatedFlyString relies heavily on DeprecatedString's StringImpl, so
let's rename it to A) match the name of DeprecatedString, B) write a new
FlyString class that is tied to String.
2023-01-09 23:00:24 +00:00

167 lines
4.8 KiB
C++

/*
* Copyright (c) 2022, Jonah Shafran <jonahshafran@gmail.com>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <LibWeb/DOM/ARIARoleNames.h>
namespace Web::DOM::ARIARoleNames {
#define __ENUMERATE_ARIA_ROLE(name) DeprecatedFlyString name;
ENUMERATE_ARIA_ROLES
#undef __ENUMERATE_ARIA_ROLE
[[gnu::constructor]] static void initialize()
{
static bool s_initialized = false;
if (s_initialized)
return;
#define __ENUMERATE_ARIA_ROLE(name) name = #name;
ENUMERATE_ARIA_ROLES
#undef __ENUMERATE_ARIA_ROLE
// Special case for C++ keyword
switch_ = "switch";
s_initialized = true;
}
// https://www.w3.org/TR/wai-aria-1.2/#abstract_roles
bool is_abstract_aria_role(DeprecatedFlyString const& role)
{
return role.is_one_of(
ARIARoleNames::command,
ARIARoleNames::composite,
ARIARoleNames::input,
ARIARoleNames::landmark,
ARIARoleNames::range,
ARIARoleNames::roletype,
ARIARoleNames::section,
ARIARoleNames::sectionhead,
ARIARoleNames::select,
ARIARoleNames::structure,
ARIARoleNames::widget,
ARIARoleNames::window);
}
// https://www.w3.org/TR/wai-aria-1.2/#widget_roles
bool is_widget_aria_role(DeprecatedFlyString const& role)
{
return role.to_lowercase().is_one_of(
ARIARoleNames::button,
ARIARoleNames::checkbox,
ARIARoleNames::gridcell,
ARIARoleNames::link,
ARIARoleNames::menuitem,
ARIARoleNames::menuitemcheckbox,
ARIARoleNames::option,
ARIARoleNames::progressbar,
ARIARoleNames::radio,
ARIARoleNames::scrollbar,
ARIARoleNames::searchbox,
ARIARoleNames::separator, // TODO: Only when focusable
ARIARoleNames::slider,
ARIARoleNames::spinbutton,
ARIARoleNames::switch_,
ARIARoleNames::tab,
ARIARoleNames::tabpanel,
ARIARoleNames::textbox,
ARIARoleNames::treeitem,
ARIARoleNames::combobox,
ARIARoleNames::grid,
ARIARoleNames::listbox,
ARIARoleNames::menu,
ARIARoleNames::menubar,
ARIARoleNames::radiogroup,
ARIARoleNames::tablist,
ARIARoleNames::tree,
ARIARoleNames::treegrid);
}
// https://www.w3.org/TR/wai-aria-1.2/#document_structure_roles
bool is_document_structure_aria_role(DeprecatedFlyString const& role)
{
return role.to_lowercase().is_one_of(
ARIARoleNames::application,
ARIARoleNames::article,
ARIARoleNames::blockquote,
ARIARoleNames::caption,
ARIARoleNames::cell,
ARIARoleNames::columnheader,
ARIARoleNames::definition,
ARIARoleNames::deletion,
ARIARoleNames::directory,
ARIARoleNames::document,
ARIARoleNames::emphasis,
ARIARoleNames::feed,
ARIARoleNames::figure,
ARIARoleNames::generic,
ARIARoleNames::group,
ARIARoleNames::heading,
ARIARoleNames::img,
ARIARoleNames::insertion,
ARIARoleNames::list,
ARIARoleNames::listitem,
ARIARoleNames::math,
ARIARoleNames::meter,
ARIARoleNames::none,
ARIARoleNames::note,
ARIARoleNames::paragraph,
ARIARoleNames::presentation,
ARIARoleNames::row,
ARIARoleNames::rowgroup,
ARIARoleNames::rowheader,
ARIARoleNames::separator, // TODO: Only when not focusable
ARIARoleNames::strong,
ARIARoleNames::subscript,
ARIARoleNames::table,
ARIARoleNames::term,
ARIARoleNames::time,
ARIARoleNames::toolbar,
ARIARoleNames::tooltip);
}
// https://www.w3.org/TR/wai-aria-1.2/#landmark_roles
bool is_landmark_aria_role(DeprecatedFlyString const& role)
{
return role.to_lowercase().is_one_of(
ARIARoleNames::banner,
ARIARoleNames::complementary,
ARIARoleNames::contentinfo,
ARIARoleNames::form,
ARIARoleNames::main,
ARIARoleNames::navigation,
ARIARoleNames::region,
ARIARoleNames::search);
}
// https://www.w3.org/TR/wai-aria-1.2/#live_region_roles
bool is_live_region_aria_role(DeprecatedFlyString const& role)
{
return role.to_lowercase().is_one_of(
ARIARoleNames::alert,
ARIARoleNames::log,
ARIARoleNames::marquee,
ARIARoleNames::status,
ARIARoleNames::timer);
}
// https://www.w3.org/TR/wai-aria-1.2/#window_roles
bool is_windows_aria_role(DeprecatedFlyString const& role)
{
return role.to_lowercase().is_one_of(
ARIARoleNames::alertdialog,
ARIARoleNames::dialog);
}
bool is_non_abstract_aria_role(DeprecatedFlyString const& role)
{
return is_widget_aria_role(role)
|| is_document_structure_aria_role(role)
|| is_landmark_aria_role(role)
|| is_live_region_aria_role(role)
|| is_windows_aria_role(role);
}
}