aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlelement.rs
diff options
context:
space:
mode:
authorCorey Farwell <coreyf@rwell.org>2017-07-27 00:07:59 +0000
committerCorey Farwell <coreyf@rwell.org>2017-07-29 09:58:03 +0000
commit6238035612a45ae3757739f6a0c17b7b6feda8ec (patch)
tree906a7bc6d5d9d27d0bd28d0a4cd5b0c1be695e2f /components/script/dom/htmlelement.rs
parent23e5bfaf27312840092d9938bb99748a02e0d9bf (diff)
downloadservo-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.rs15
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());