1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
//! Trait for the base class of HTML elements.
use crate::interfaces::element::ElementBuilder;
/// The HTMLElement interface represents any HTML element.
///
/// Note: this trait cannot be implemented outside of this crate.
pub trait HtmlElementBuilder: ElementBuilder {
    attr_method! {
        /// Keyboard shortcut to activate or add focus to the element.
        accesskey
    }
    attr_method! {
        /// Sets whether input is automatically capitalized when entered by user. It can have the
        /// following values:
        ///
        /// * `off` or `none`, no autocapitalization is applied (all letters default to lowercase)
        /// * `on` or `sentences`, the first letter of each sentence defaults to a capital letter;
        ///   all other letters default to lowercase
        /// * `words`, the first letter of each word defaults to a capital letter; all other letters
        ///   default to lowercase
        /// * `characters`, all letters should default to uppercase
        autocapitalize
    }
    attr_method! {
        /// A value of "true" means the element is editable and a value of "false" means it isn't.
        contenteditable(bool)
    }
    // TODO(#240) intern the data attribute strings so we can have 'static lifetime attribute names
    // /// Forms a class of attributes, called custom data attributes, that allow
    // /// proprietary information to be exchanged between the HTML and its DOM
    // /// representation that may be used by scripts.
    // fn data(self, key: impl ToString, value: impl AsRef<str>) -> Self {
    //     self.attribute(&format!("data-{}", key.to_string()), value.as_ref())
    // }
    attr_method! {
        /// The directionality of the element. It can have the following values:
        ///
        /// * `ltr`, which means left to right and is to be used for languages that are written from
        ///   the left to the right (like English);
        /// * `rtl`, which means right to left and is to be used for languages that are written from
        ///   the right to the left (like Arabic);
        /// * `auto`, which lets the user agent decide. It uses a basic algorithm as it parses the
        ///   characters inside the element until it finds a character with a strong directionality,
        ///   then it applies that directionality to the whole element.
        dir
    }
    attr_method! {
        /// Defines whether the element can be dragged.
        draggable(bool)
    }
    attr_method! {
        /// Indicates if the element is hidden or not.
        hidden(bool)
    }
    attr_method! {
        /// Indicates whether the user agent must act as though the given node is absent
        /// for the purposes of user interaction events, in-page text searches ("find in page"), and
        /// text selection.
        inert(bool)
    }
    attr_method! {
        /// Provides a hint as to the type of data that might be entered by the user
        /// while editing the element or its contents. The attribute can be used with
        /// form controls (such as the value of textarea elements), or in elements in
        /// an editing host (e.g., using contenteditable attribute).
        inputmode
    }
    attr_method! {
        /// The language of an element's attributes, text, and element contents.
        lang
    }
    attr_method! {
        /// Assigns a slot in a shadow DOM shadow tree to an element.
        slot
    }
    attr_method! {
        /// Indicates whether spell checking is allowed for the element.
        spellcheck
    }
    attr_method! {
        /// Overrides the browser's default tab order and follows the one specified
        /// instead.
        tabindex
    }
    attr_method! {
        /// The text that appears in a popup box when mouse is over the element.
        title
    }
}