Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Insert adjacent #11668

Merged
merged 3 commits into from Jun 8, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Prev

Add Element::InsertAdjacentHTML

  • Loading branch information
GuillaumeGomez committed Jun 8, 2016
commit 8c572085c72a48bcb1b639211aa0995bd2cbabc2
@@ -2029,6 +2029,41 @@ impl ElementMethods for Element {
let where_ = try!(AdjacentPosition::parse(&*where_));
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] {
@@ -75,6 +75,8 @@ interface Element : Node {
Element? insertAdjacentElement(DOMString where_, Element element); // historical
[Throws]
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
@@ -3,12 +3,6 @@
[insertAdjacentHTML(beforebegin, <h3>beforebegin</h3> )]
expected: FAIL

[insertAdjacentHTML(afterbegin, <h3>afterbegin</h3> )]
expected: FAIL

[insertAdjacentHTML(beforeend, <h3>beforeend</h3> )]
expected: FAIL

[insertAdjacentHTML(afterend, <h3>afterend</h3> )]
expected: FAIL

@@ -3,87 +3,30 @@
[beforeBegin content without next sibling]
expected: FAIL

[Afterbegin content without next sibling]
expected: FAIL

[BeforeEnd content without next sibling]
expected: FAIL

[afterend content without next sibling]
expected: FAIL

[beforeBegin content again, with next sibling]
expected: FAIL

[Afterbegin content again, with next sibling]
expected: FAIL

[BeforeEnd content again, with next sibling]
expected: FAIL

[afterend content again, with next sibling]
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]
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]
expected: FAIL

[beforeBegin content2 without next sibling]
expected: FAIL

[Afterbegin content2 without next sibling]
expected: FAIL

[BeforeEnd content2 without next sibling]
expected: FAIL

[afterend content2 without next sibling]
expected: FAIL

[beforeBegin content2 test again, now that there's a next sibling]
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]
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]
expected: FAIL

[Afterbegin content without next sibling]
expected: FAIL

[BeforeEnd content without next sibling]
expected: FAIL

[afterend content without next sibling]
expected: FAIL

[beforeBegin content again, with next sibling]
expected: FAIL

[Afterbegin content again, with next sibling]
expected: FAIL

[BeforeEnd content again, with next sibling]
expected: FAIL

[afterend content again, with next sibling]
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]
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]
expected: FAIL

[beforeBegin content2 without next sibling]
expected: FAIL

[Afterbegin content2 without next sibling]
expected: FAIL

[BeforeEnd content2 without next sibling]
expected: FAIL

[afterend content2 without next sibling]
expected: FAIL

[beforeBegin content2 test again, now that there's a next sibling]
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]
expected: FAIL

ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.