Add a sanitize_value implementation for the color input

I had to change the test a little bit to avoid some failures due to
color and text both having a sanitizedValue which was making the test
use the first assertion instead of the second one in some cases.

The sanitize_value implementation is pretty simple, we iterate over the
content and checks that the content is 7 characters long, that the first
character is a `#` and then that all the following characters are
hexadecimal. If all those requirements are met, we lowercase the
content, otherwise we put `#000000` in it.
This commit is contained in:
Bastien Orivel 2017-11-22 01:11:11 +01:00
parent 06d834c1b9
commit 05c4e08d58
7 changed files with 24 additions and 188 deletions

View file

@ -875,6 +875,26 @@ impl HTMLInputElement {
content.strip_newlines();
content.strip_leading_and_trailing_ascii_whitespace();
}
atom!("color") => {
let mut textinput = self.textinput.borrow_mut();
let is_valid = {
let content = textinput.single_line_content();
let mut chars = content.chars();
if content.len() == 7 && chars.next() == Some('#') {
chars.all(|c| c.is_digit(16))
} else {
false
}
};
if is_valid {
let content = textinput.single_line_content_mut();
content.make_ascii_lowercase();
} else {
textinput.set_content("#000000".into());
}
}
// TODO: Implement more value sanitization algorithms for different types of inputs
_ => ()
}