Skip to content

Commit

Permalink
htmltextarea: Fixed some value_changed issues
Browse files Browse the repository at this point in the history
Also modified tests/html/textarea.html to allow for the testing of the
textarea's dirty value flag.
  • Loading branch information
mttr committed Dec 16, 2014
1 parent 4d0a6a6 commit a5c0bb7
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 3 deletions.
6 changes: 4 additions & 2 deletions components/script/dom/htmltextareaelement.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ impl<'a> HTMLTextAreaElementMethods for JSRef<'a, HTMLTextAreaElement> {
// if the element's dirty value flag is false, then the element's
// raw value must be set to the value of the element's textContent IDL attribute
if !self.value_changed.get() {
self.SetValue(node.GetTextContent().unwrap());
self.reset();
}
}

Expand All @@ -159,7 +159,9 @@ impl<'a> HTMLTextAreaElementMethods for JSRef<'a, HTMLTextAreaElement> {

// https://html.spec.whatwg.org/multipage/forms.html#dom-textarea-value
fn SetValue(self, value: DOMString) {
// TODO move the cursor to the end of the field
self.textinput.borrow_mut().set_content(value);
self.value_changed.set(true);
self.force_relayout();
}
}
Expand Down Expand Up @@ -255,7 +257,7 @@ impl<'a> VirtualMethods for JSRef<'a, HTMLTextAreaElement> {
_ => (),
}

if child.is_text() {
if child.is_text() && !self.value_changed.get() {
self.reset();
}
}
Expand Down
21 changes: 20 additions & 1 deletion tests/html/textarea.html
Original file line number Diff line number Diff line change
@@ -1,6 +1,25 @@
<html>
<head></head>
<body>
<textarea name="textarea">Write something here
<form>
<textarea id="textarea">Write something here
and maybe here</textarea>
<button id=setcontent type=button>setContent</button>
<button id=setvalue type=button>setValue</button>
<input type=reset>
<script>
var text_area = document.getElementById("textarea");
var set_c = document.getElementById("setcontent");
var value = document.getElementById("setvalue");
var x = 0;

set_c.addEventListener("click", function () {
text_area.textContent = x;
x++;
});

value.addEventListener("click", function () {
text_area.value = "new value!";
});
</script>
</body>

0 comments on commit a5c0bb7

Please sign in to comment.