diff options
author | Corey Farwell <coreyf@rwell.org> | 2017-07-27 00:07:59 +0000 |
---|---|---|
committer | Corey Farwell <coreyf@rwell.org> | 2017-07-29 09:58:03 +0000 |
commit | 6238035612a45ae3757739f6a0c17b7b6feda8ec (patch) | |
tree | 906a7bc6d5d9d27d0bd28d0a4cd5b0c1be695e2f /components/script/dom/htmlelement.rs | |
parent | 23e5bfaf27312840092d9938bb99748a02e0d9bf (diff) | |
download | servo-6238035612a45ae3757739f6a0c17b7b6feda8ec.tar.gz servo-6238035612a45ae3757739f6a0c17b7b6feda8ec.zip |
Minor refactorings for 'data-' attribute logic.
Diffstat (limited to 'components/script/dom/htmlelement.rs')
-rw-r--r-- | components/script/dom/htmlelement.rs | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/components/script/dom/htmlelement.rs b/components/script/dom/htmlelement.rs index 4ff21be028d..05683653fa1 100644 --- a/components/script/dom/htmlelement.rs +++ b/components/script/dom/htmlelement.rs @@ -32,7 +32,6 @@ use dom::virtualmethods::VirtualMethods; use dom_struct::dom_struct; use html5ever::{LocalName, Prefix}; use std::ascii::AsciiExt; -use std::borrow::ToOwned; use std::default::Default; use std::rc::Rc; use style::attr::AttrValue; @@ -374,11 +373,15 @@ impl HTMLElementMethods for HTMLElement { // https://html.spec.whatwg.org/multipage/#attr-data-* +static DATA_PREFIX: &str = "data-"; +static DATA_HYPHEN_SEPARATOR: char = '\x2d'; + fn to_snake_case(name: DOMString) -> DOMString { - let mut attr_name = "data-".to_owned(); + let mut attr_name = String::with_capacity(name.len() + DATA_PREFIX.len()); + attr_name.push_str(DATA_PREFIX); for ch in name.chars() { if ch.is_ascii_uppercase() { - attr_name.push('\x2d'); + attr_name.push(DATA_HYPHEN_SEPARATOR); attr_name.push(ch.to_ascii_lowercase()); } else { attr_name.push(ch); @@ -394,7 +397,7 @@ fn to_snake_case(name: DOMString) -> DOMString { // without the data prefix. fn to_camel_case(name: &str) -> Option<DOMString> { - if !name.starts_with("data-") { + if !name.starts_with(DATA_PREFIX) { return None; } let name = &name[5..]; @@ -402,11 +405,11 @@ fn to_camel_case(name: &str) -> Option<DOMString> { if has_uppercase { return None; } - let mut result = "".to_owned(); + let mut result = String::with_capacity(name.len().saturating_sub(DATA_PREFIX.len())); let mut name_chars = name.chars(); while let Some(curr_char) = name_chars.next() { //check for hyphen followed by character - if curr_char == '\x2d' { + if curr_char == DATA_HYPHEN_SEPARATOR { if let Some(next_char) = name_chars.next() { if next_char.is_ascii_lowercase() { result.push(next_char.to_ascii_uppercase()); |