aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/characterdata.rs
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2015-11-13 13:21:31 +0100
committerAnthony Ramine <n.oxyde@gmail.com>2015-12-13 21:14:34 +0100
commit1dd7c8cf01b27f63951504a63f5c69cca53ac73a (patch)
tree66a17c151ccf0433e6ce003aac3ccfeadb36e904 /components/script/dom/characterdata.rs
parent7e1e34e7d5d9a60b42c15f88eee6879138676e66 (diff)
downloadservo-1dd7c8cf01b27f63951504a63f5c69cca53ac73a.tar.gz
servo-1dd7c8cf01b27f63951504a63f5c69cca53ac73a.zip
Introduce CharacterData::clone_with_data()
Diffstat (limited to 'components/script/dom/characterdata.rs')
-rw-r--r--components/script/dom/characterdata.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/components/script/dom/characterdata.rs b/components/script/dom/characterdata.rs
index 8f0a4be25b7..f6d0e5fbb54 100644
--- a/components/script/dom/characterdata.rs
+++ b/components/script/dom/characterdata.rs
@@ -6,13 +6,18 @@
use dom::bindings::cell::DOMRefCell;
use dom::bindings::codegen::Bindings::CharacterDataBinding::CharacterDataMethods;
+use dom::bindings::codegen::Bindings::ProcessingInstructionBinding::ProcessingInstructionMethods;
+use dom::bindings::codegen::InheritTypes::{CharacterDataTypeId, NodeTypeId};
use dom::bindings::codegen::UnionTypes::NodeOrString;
use dom::bindings::error::{Error, ErrorResult, Fallible};
use dom::bindings::inheritance::Castable;
use dom::bindings::js::{LayoutJS, Root};
+use dom::comment::Comment;
use dom::document::Document;
use dom::element::Element;
use dom::node::{Node, NodeDamage};
+use dom::processinginstruction::ProcessingInstruction;
+use dom::text::Text;
use std::cell::Ref;
use util::str::DOMString;
@@ -31,6 +36,22 @@ impl CharacterData {
}
}
+ pub fn clone_with_data(&self, data: DOMString, document: &Document) -> Root<Node> {
+ match self.upcast::<Node>().type_id() {
+ NodeTypeId::CharacterData(CharacterDataTypeId::Comment) => {
+ Root::upcast(Comment::new(data, &document))
+ }
+ NodeTypeId::CharacterData(CharacterDataTypeId::ProcessingInstruction) => {
+ let pi = self.downcast::<ProcessingInstruction>().unwrap();
+ Root::upcast(ProcessingInstruction::new(pi.Target(), data, &document))
+ },
+ NodeTypeId::CharacterData(CharacterDataTypeId::Text) => {
+ Root::upcast(Text::new(data, &document))
+ },
+ _ => unreachable!(),
+ }
+ }
+
#[inline]
pub fn data(&self) -> Ref<DOMString> {
self.data.borrow()