aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/element.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-03-27 23:43:04 +0530
committerbors-servo <lbergstrom+bors@mozilla.com>2016-03-27 23:43:04 +0530
commit0826a5b45455cdbecf484136b1bab39bcc0b15ff (patch)
tree47b607710d2e806a637a9c9198bce6e7f1396e35 /components/script/dom/element.rs
parentd22a7a1912c7cf513931463e7081d2d345e11ff0 (diff)
parentc05a9b039e59f34952c97fbf95ae6e9fee23f225 (diff)
downloadservo-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.rs46
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] {