mirror of
https://github.com/servo/servo.git
synced 2025-07-29 10:10:34 +01:00
Add insert_adjacent methods into Element
This commit is contained in:
parent
68a8085a2f
commit
c05a9b039e
4 changed files with 135 additions and 0 deletions
|
@ -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] {
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue