diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-27 23:43:04 +0530 |
---|---|---|
committer | bors-servo <lbergstrom+bors@mozilla.com> | 2016-03-27 23:43:04 +0530 |
commit | 0826a5b45455cdbecf484136b1bab39bcc0b15ff (patch) | |
tree | 47b607710d2e806a637a9c9198bce6e7f1396e35 /components/script/dom/element.rs | |
parent | d22a7a1912c7cf513931463e7081d2d345e11ff0 (diff) | |
parent | c05a9b039e59f34952c97fbf95ae6e9fee23f225 (diff) | |
download | servo-0826a5b45455cdbecf484136b1bab39bcc0b15ff.tar.gz servo-0826a5b45455cdbecf484136b1bab39bcc0b15ff.zip |
Auto merge of #10219 - GuillaumeGomez:adjacent, r=nox
Add insert_adjacent methods into Element
Fixes #10205
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/10219)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/element.rs')
-rw-r--r-- | components/script/dom/element.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index cceb6cbf095..4c0e03d6f93 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -1168,6 +1168,35 @@ impl Element { let node = self.upcast::<Node>(); node.owner_doc().element_attr_will_change(self); } + + // https://dom.spec.whatwg.org/#insert-adjacent + pub fn insert_adjacent(&self, where_: DOMString, node: &Node) + -> Fallible<Option<Root<Node>>> { + let self_node = self.upcast::<Node>(); + match &*where_ { + "beforebegin" => { + if let Some(parent) = self_node.GetParentNode() { + Node::pre_insert(node, &parent, Some(self_node)).map(Some) + } else { + Ok(None) + } + } + "afterbegin" => { + Node::pre_insert(node, &self_node, self_node.GetFirstChild().r()).map(Some) + } + "beforeend" => { + Node::pre_insert(node, &self_node, None).map(Some) + } + "afterend" => { + if let Some(parent) = self_node.GetParentNode() { + Node::pre_insert(node, &parent, self_node.GetNextSibling().r()).map(Some) + } else { + Ok(None) + } + } + _ => Err(Error::Syntax) + } + } } impl ElementMethods for Element { @@ -1620,6 +1649,23 @@ impl ElementMethods for Element { } } } + + // https://dom.spec.whatwg.org/#dom-element-insertadjacentelement + fn InsertAdjacentElement(&self, where_: DOMString, element: &Element) + -> Fallible<Option<Root<Element>>> { + let inserted_node = try!(self.insert_adjacent(where_, element.upcast())); + Ok(inserted_node.map(|node| Root::downcast(node).unwrap())) + } + + // https://dom.spec.whatwg.org/#dom-element-insertadjacenttext + fn InsertAdjacentText(&self, where_: DOMString, data: DOMString) + -> ErrorResult { + // Step 1. + let text = Text::new(data, &document_from_node(self)); + + // Step 2. + self.insert_adjacent(where_, text.upcast()).map(|_| ()) + } } pub fn fragment_affecting_attributes() -> [Atom; 3] { |