diff options
author | Anthony Ramine <n.oxyde@gmail.com> | 2015-11-13 13:21:31 +0100 |
---|---|---|
committer | Anthony Ramine <n.oxyde@gmail.com> | 2015-12-13 21:14:34 +0100 |
commit | 1dd7c8cf01b27f63951504a63f5c69cca53ac73a (patch) | |
tree | 66a17c151ccf0433e6ce003aac3ccfeadb36e904 /components/script/dom/characterdata.rs | |
parent | 7e1e34e7d5d9a60b42c15f88eee6879138676e66 (diff) | |
download | servo-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.rs | 21 |
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() |