Auto merge of #7794 - mbrubeck:setdata, r=pcwalton

Dirty text nodes when their content changes

Fixes #7793. r? @pcwalton

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7794)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-09-30 11:49:52 -06:00
commit fb6d0946cb
5 changed files with 11 additions and 14 deletions

View file

@ -15,7 +15,7 @@ use dom::bindings::js::{LayoutJS, Root};
use dom::document::Document; use dom::document::Document;
use dom::element::Element; use dom::element::Element;
use dom::eventtarget::{EventTarget, EventTargetTypeId}; use dom::eventtarget::{EventTarget, EventTargetTypeId};
use dom::node::{Node, NodeTypeId}; use dom::node::{Node, NodeDamage, NodeTypeId};
use std::borrow::ToOwned; use std::borrow::ToOwned;
use std::cell::Ref; use std::cell::Ref;
use util::str::DOMString; use util::str::DOMString;
@ -54,6 +54,7 @@ impl CharacterDataMethods for CharacterData {
// https://dom.spec.whatwg.org/#dom-characterdata-data // https://dom.spec.whatwg.org/#dom-characterdata-data
fn SetData(&self, data: DOMString) { fn SetData(&self, data: DOMString) {
*self.data.borrow_mut() = data; *self.data.borrow_mut() = data;
self.content_changed();
} }
// https://dom.spec.whatwg.org/#dom-characterdata-length // https://dom.spec.whatwg.org/#dom-characterdata-length
@ -117,6 +118,7 @@ impl CharacterDataMethods for CharacterData {
new_data new_data
}; };
*self.data.borrow_mut() = new_data; *self.data.borrow_mut() = new_data;
self.content_changed();
// FIXME: Once we have `Range`, we should implement step 8 to step 11 // FIXME: Once we have `Range`, we should implement step 8 to step 11
Ok(()) Ok(())
} }
@ -171,7 +173,14 @@ impl CharacterData {
} }
#[inline] #[inline]
pub fn append_data(&self, data: &str) { pub fn append_data(&self, data: &str) {
self.data.borrow_mut().push_str(data) self.data.borrow_mut().push_str(data);
self.content_changed();
}
fn content_changed(&self) {
let node = NodeCast::from_ref(self);
let document = node.owner_doc();
document.r().content_changed(node, NodeDamage::OtherNodeDamage);
} }
} }

View file

@ -1,3 +0,0 @@
[first-letter-dynamic-003a.htm]
type: reftest
expected: FAIL

View file

@ -1,3 +0,0 @@
[first-letter-dynamic-003b.htm]
type: reftest
expected: FAIL

View file

@ -1,3 +0,0 @@
[run-in-basic-017.htm]
type: reftest
expected: FAIL

View file

@ -1,3 +0,0 @@
[run-in-text-between-003.htm]
type: reftest
expected: FAIL