mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Add Element::InsertAdjacentHTML
This commit is contained in:
parent
40feb524d9
commit
8c572085c7
5 changed files with 37 additions and 117 deletions
|
@ -2029,6 +2029,41 @@ impl ElementMethods for Element {
|
||||||
let where_ = try!(AdjacentPosition::parse(&*where_));
|
let where_ = try!(AdjacentPosition::parse(&*where_));
|
||||||
self.insert_adjacent(where_, text.upcast()).map(|_| ())
|
self.insert_adjacent(where_, text.upcast()).map(|_| ())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://w3c.github.io/DOM-Parsing/#dom-element-insertadjacenthtml
|
||||||
|
fn InsertAdjacentHTML(&self, position: DOMString, text: DOMString)
|
||||||
|
-> ErrorResult {
|
||||||
|
// Step 1.
|
||||||
|
let position = try!(AdjacentPosition::parse(&*position));
|
||||||
|
|
||||||
|
let context = match position {
|
||||||
|
AdjacentPosition::BeforeBegin | AdjacentPosition::AfterEnd => {
|
||||||
|
match self.upcast::<Node>().GetParentNode() {
|
||||||
|
Some(ref node) if node.is::<Document>() => {
|
||||||
|
return Err(Error::NoModificationAllowed)
|
||||||
|
}
|
||||||
|
None => return Err(Error::NoModificationAllowed),
|
||||||
|
Some(node) => node,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
AdjacentPosition::AfterBegin | AdjacentPosition::BeforeEnd => {
|
||||||
|
Root::from_ref(self.upcast::<Node>())
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Step 2.
|
||||||
|
let context = match context.downcast::<Element>() {
|
||||||
|
Some(elem) if elem.local_name() != &atom!("html") ||
|
||||||
|
!elem.html_element_in_html_document() => Root::from_ref(elem),
|
||||||
|
_ => Root::upcast(HTMLBodyElement::new(atom!("body"), None, &*context.owner_doc()))
|
||||||
|
};
|
||||||
|
|
||||||
|
// Step 3.
|
||||||
|
let fragment = try!(context.upcast::<Node>().parse_fragment(text));
|
||||||
|
|
||||||
|
// Step 4.
|
||||||
|
context.insert_adjacent(position, fragment.upcast()).map(|_| ())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fragment_affecting_attributes() -> [Atom; 3] {
|
pub fn fragment_affecting_attributes() -> [Atom; 3] {
|
||||||
|
|
|
@ -75,6 +75,8 @@ interface Element : Node {
|
||||||
Element? insertAdjacentElement(DOMString where_, Element element); // historical
|
Element? insertAdjacentElement(DOMString where_, Element element); // historical
|
||||||
[Throws]
|
[Throws]
|
||||||
void insertAdjacentText(DOMString where_, DOMString data);
|
void insertAdjacentText(DOMString where_, DOMString data);
|
||||||
|
[Throws]
|
||||||
|
void insertAdjacentHTML(DOMString position, DOMString html);
|
||||||
};
|
};
|
||||||
|
|
||||||
// http://dev.w3.org/csswg/cssom-view/#extensions-to-the-element-interface
|
// http://dev.w3.org/csswg/cssom-view/#extensions-to-the-element-interface
|
||||||
|
|
|
@ -3,12 +3,6 @@
|
||||||
[insertAdjacentHTML(beforebegin, <h3>beforebegin</h3> )]
|
[insertAdjacentHTML(beforebegin, <h3>beforebegin</h3> )]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[insertAdjacentHTML(afterbegin, <h3>afterbegin</h3> )]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[insertAdjacentHTML(beforeend, <h3>beforeend</h3> )]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[insertAdjacentHTML(afterend, <h3>afterend</h3> )]
|
[insertAdjacentHTML(afterend, <h3>afterend</h3> )]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -3,87 +3,30 @@
|
||||||
[beforeBegin content without next sibling]
|
[beforeBegin content without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content without next sibling]
|
[afterend content without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[beforeBegin content again, with next sibling]
|
[beforeBegin content again, with next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content again, with next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content again, with next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content again, with next sibling]
|
[afterend content again, with next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Should throw when inserting with invalid position string]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is null, insertAdjacentHTML should throw for beforebegin and afterend (text)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is null, insertAdjacentHTML should throw for beforebegin and afterend (comments)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is null, insertAdjacentHTML should throw for beforebegin and afterend (elements)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is a document, insertAdjacentHTML should throw for beforebegin and afterend (text)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is a document, insertAdjacentHTML should throw for beforebegin and afterend (comments)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is a document, insertAdjacentHTML should throw for beforebegin and afterend (elements)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Inserting after being and before end should order things correctly]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[beforeBegin child node not in tree but has parent]
|
[beforeBegin child node not in tree but has parent]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin child node not in tree but has parent]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd child node not in tree but has parent]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend child node not in tree but has parent]
|
[afterend child node not in tree but has parent]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[beforeBegin content2 without next sibling]
|
[beforeBegin content2 without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content2 without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content2 without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content2 without next sibling]
|
[afterend content2 without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[beforeBegin content2 test again, now that there's a next sibling]
|
[beforeBegin content2 test again, now that there's a next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content2 test again, now that there's a next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content2 test again, now that there's a next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content2 test again, now that there's a next sibling]
|
[afterend content2 test again, now that there's a next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Inserting kids of the <html> element should not do weird things with implied <body>/<head> tags]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -3,84 +3,30 @@
|
||||||
[beforeBegin content without next sibling]
|
[beforeBegin content without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content without next sibling]
|
[afterend content without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[beforeBegin content again, with next sibling]
|
[beforeBegin content again, with next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content again, with next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content again, with next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content again, with next sibling]
|
[afterend content again, with next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Should throw when inserting with invalid position string]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is null, insertAdjacentHTML should throw for beforebegin and afterend (text)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is null, insertAdjacentHTML should throw for beforebegin and afterend (comments)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is null, insertAdjacentHTML should throw for beforebegin and afterend (elements)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is a document, insertAdjacentHTML should throw for beforebegin and afterend (text)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is a document, insertAdjacentHTML should throw for beforebegin and afterend (comments)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[When the parent node is a document, insertAdjacentHTML should throw for beforebegin and afterend (elements)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Inserting after being and before end should order things correctly]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[beforeBegin child node not in tree but has parent]
|
[beforeBegin child node not in tree but has parent]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin child node not in tree but has parent]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd child node not in tree but has parent]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend child node not in tree but has parent]
|
[afterend child node not in tree but has parent]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[beforeBegin content2 without next sibling]
|
[beforeBegin content2 without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content2 without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content2 without next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content2 without next sibling]
|
[afterend content2 without next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[beforeBegin content2 test again, now that there's a next sibling]
|
[beforeBegin content2 test again, now that there's a next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Afterbegin content2 test again, now that there's a next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[BeforeEnd content2 test again, now that there's a next sibling]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[afterend content2 test again, now that there's a next sibling]
|
[afterend content2 test again, now that there's a next sibling]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue