aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/range.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/range.rs')
-rw-r--r--components/script/dom/range.rs30
1 files changed, 12 insertions, 18 deletions
diff --git a/components/script/dom/range.rs b/components/script/dom/range.rs
index fab4a63751a..225b59fac07 100644
--- a/components/script/dom/range.rs
+++ b/components/script/dom/range.rs
@@ -410,12 +410,10 @@ impl RangeMethods for Range {
}
if end_node == start_node {
- if let Some(text) = start_node.downcast::<CharacterData>() {
- // Step 4.1.
- let clone = start_node.CloneNode(true);
- // Step 4.2.
- let text = text.SubstringData(start_offset, end_offset - start_offset);
- clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap());
+ if let Some(cdata) = start_node.downcast::<CharacterData>() {
+ // Steps 4.1-2.
+ let data = cdata.SubstringData(start_offset, end_offset - start_offset).unwrap();
+ let clone = cdata.clone_with_data(data, &start_node.owner_doc());
// Step 4.3.
try!(fragment.upcast::<Node>().AppendChild(&clone));
// Step 4.4
@@ -429,13 +427,11 @@ impl RangeMethods for Range {
if let Some(child) = first_contained_child {
// Step 13.
- if let Some(text) = child.downcast::<CharacterData>() {
+ if let Some(cdata) = child.downcast::<CharacterData>() {
assert!(child == start_node);
- // Step 13.1.
- let clone = start_node.CloneNode(true); // CharacterData has no children.
- // Step 13.2
- let text = text.SubstringData(start_offset, start_node.len() - start_offset);
- clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap());
+ // Steps 13.1-2.
+ let data = cdata.SubstringData(start_offset, start_node.len() - start_offset).unwrap();
+ let clone = cdata.clone_with_data(data, &start_node.owner_doc());
// Step 13.3.
try!(fragment.upcast::<Node>().AppendChild(&clone));
} else {
@@ -466,13 +462,11 @@ impl RangeMethods for Range {
if let Some(child) = last_contained_child {
// Step 16.
- if let Some(text) = child.downcast::<CharacterData>() {
+ if let Some(cdata) = child.downcast::<CharacterData>() {
assert!(child == end_node);
- // Step 16.1.
- let clone = end_node.CloneNode(true); // CharacterData has no children.
- // Step 16.2.
- let text = text.SubstringData(0, end_offset);
- clone.downcast::<CharacterData>().unwrap().SetData(text.unwrap());
+ // Steps 16.1-2.
+ let data = cdata.SubstringData(0, end_offset).unwrap();
+ let clone = cdata.clone_with_data(data, &start_node.owner_doc());
// Step 16.3.
try!(fragment.upcast::<Node>().AppendChild(&clone));
} else {