viewpoint-core 0.4.3

High-level browser automation API for Viewpoint
Documentation
//! ARIA roles for accessibility-based element selection.

/// ARIA roles for accessibility-based element selection.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AriaRole {
    Alert,
    AlertDialog,
    Application,
    Article,
    Banner,
    Button,
    Cell,
    Checkbox,
    ColumnHeader,
    Combobox,
    Complementary,
    ContentInfo,
    Definition,
    Dialog,
    Directory,
    Document,
    Feed,
    Figure,
    Form,
    Grid,
    GridCell,
    Group,
    Heading,
    Img,
    Link,
    List,
    ListBox,
    ListItem,
    Log,
    Main,
    Marquee,
    Math,
    Menu,
    MenuBar,
    MenuItem,
    MenuItemCheckbox,
    MenuItemRadio,
    Navigation,
    None,
    Note,
    Option,
    Presentation,
    ProgressBar,
    Radio,
    RadioGroup,
    Region,
    Row,
    RowGroup,
    RowHeader,
    ScrollBar,
    Search,
    SearchBox,
    Separator,
    Slider,
    SpinButton,
    Status,
    Switch,
    Tab,
    Table,
    TabList,
    TabPanel,
    Term,
    TextBox,
    Timer,
    Toolbar,
    Tooltip,
    Tree,
    TreeGrid,
    TreeItem,
}

impl AriaRole {
    /// Get the role name as a string.
    pub fn as_str(&self) -> &'static str {
        match self {
            AriaRole::Alert => "alert",
            AriaRole::AlertDialog => "alertdialog",
            AriaRole::Application => "application",
            AriaRole::Article => "article",
            AriaRole::Banner => "banner",
            AriaRole::Button => "button",
            AriaRole::Cell => "cell",
            AriaRole::Checkbox => "checkbox",
            AriaRole::ColumnHeader => "columnheader",
            AriaRole::Combobox => "combobox",
            AriaRole::Complementary => "complementary",
            AriaRole::ContentInfo => "contentinfo",
            AriaRole::Definition => "definition",
            AriaRole::Dialog => "dialog",
            AriaRole::Directory => "directory",
            AriaRole::Document => "document",
            AriaRole::Feed => "feed",
            AriaRole::Figure => "figure",
            AriaRole::Form => "form",
            AriaRole::Grid => "grid",
            AriaRole::GridCell => "gridcell",
            AriaRole::Group => "group",
            AriaRole::Heading => "heading",
            AriaRole::Img => "img",
            AriaRole::Link => "link",
            AriaRole::List => "list",
            AriaRole::ListBox => "listbox",
            AriaRole::ListItem => "listitem",
            AriaRole::Log => "log",
            AriaRole::Main => "main",
            AriaRole::Marquee => "marquee",
            AriaRole::Math => "math",
            AriaRole::Menu => "menu",
            AriaRole::MenuBar => "menubar",
            AriaRole::MenuItem => "menuitem",
            AriaRole::MenuItemCheckbox => "menuitemcheckbox",
            AriaRole::MenuItemRadio => "menuitemradio",
            AriaRole::Navigation => "navigation",
            AriaRole::None => "none",
            AriaRole::Note => "note",
            AriaRole::Option => "option",
            AriaRole::Presentation => "presentation",
            AriaRole::ProgressBar => "progressbar",
            AriaRole::Radio => "radio",
            AriaRole::RadioGroup => "radiogroup",
            AriaRole::Region => "region",
            AriaRole::Row => "row",
            AriaRole::RowGroup => "rowgroup",
            AriaRole::RowHeader => "rowheader",
            AriaRole::ScrollBar => "scrollbar",
            AriaRole::Search => "search",
            AriaRole::SearchBox => "searchbox",
            AriaRole::Separator => "separator",
            AriaRole::Slider => "slider",
            AriaRole::SpinButton => "spinbutton",
            AriaRole::Status => "status",
            AriaRole::Switch => "switch",
            AriaRole::Tab => "tab",
            AriaRole::Table => "table",
            AriaRole::TabList => "tablist",
            AriaRole::TabPanel => "tabpanel",
            AriaRole::Term => "term",
            AriaRole::TextBox => "textbox",
            AriaRole::Timer => "timer",
            AriaRole::Toolbar => "toolbar",
            AriaRole::Tooltip => "tooltip",
            AriaRole::Tree => "tree",
            AriaRole::TreeGrid => "treegrid",
            AriaRole::TreeItem => "treeitem",
        }
    }
}

/// Get CSS selector for elements with implicit ARIA roles.
pub fn implicit_role_selector(role: AriaRole) -> &'static str {
    match role {
        AriaRole::Button => {
            "button, input[type='button'], input[type='submit'], input[type='reset']"
        }
        AriaRole::Link => "a[href]",
        AriaRole::Heading => "h1, h2, h3, h4, h5, h6",
        AriaRole::ListItem => "li",
        AriaRole::List => "ul, ol",
        AriaRole::TextBox => "input[type='text'], input:not([type]), textarea",
        AriaRole::Checkbox => "input[type='checkbox']",
        AriaRole::Radio => "input[type='radio']",
        AriaRole::Combobox => "select",
        AriaRole::Img => "img",
        AriaRole::Navigation => "nav",
        AriaRole::Main => "main",
        AriaRole::Banner => "header",
        AriaRole::ContentInfo => "footer",
        AriaRole::Form => "form",
        AriaRole::Search => "[role='search']",
        AriaRole::Table => "table",
        AriaRole::Row => "tr",
        AriaRole::Cell => "td",
        AriaRole::ColumnHeader => "th",
        _ => "", // No implicit role mapping
    }
}

#[cfg(test)]
mod tests;