aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/element.rs46
-rw-r--r--components/script/dom/webidls/Element.webidl4
2 files changed, 50 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] {
diff --git a/components/script/dom/webidls/Element.webidl b/components/script/dom/webidls/Element.webidl
index c5c395536ac..9bc5ff64597 100644
--- a/components/script/dom/webidls/Element.webidl
+++ b/components/script/dom/webidls/Element.webidl
@@ -70,6 +70,10 @@ interface Element : Node {
HTMLCollection getElementsByTagName(DOMString localName);
HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
HTMLCollection getElementsByClassName(DOMString classNames);
+ [Throws]
+ Element? insertAdjacentElement(DOMString where_, Element element);
+ [Throws]
+ void insertAdjacentText(DOMString where_, DOMString data);
};
// http://dev.w3.org/csswg/cssom-view/#extensions-to-the-element-interface