1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-29 17:35:06 +00:00

LibWeb: Implement the rest of the Adoption Agency Algorithm

This gets us 2 points on html5test.com :^)
- Before: https://html5te.st/4cf57659bc08272e (208)
- After: https://html5te.st/fb8a9259bda1c115 (210)
This commit is contained in:
Simon Wanner 2022-03-20 02:11:42 +01:00 committed by Andreas Kling
parent e165ae5b60
commit 1d95745901
6 changed files with 226 additions and 30 deletions

View file

@ -134,4 +134,32 @@ DOM::Element* StackOfOpenElements::element_immediately_above(DOM::Element const&
return nullptr;
}
void StackOfOpenElements::remove(const DOM::Element& element)
{
m_elements.remove_first_matching([&element](DOM::Element const& other) {
return &other == &element;
});
}
void StackOfOpenElements::replace(const DOM::Element& to_remove, NonnullRefPtr<DOM::Element> to_add)
{
for (size_t i = 0; i < m_elements.size(); i++) {
if (&m_elements[i] == &to_remove) {
m_elements.remove(i);
m_elements.insert(i, move(to_add));
break;
}
}
}
void StackOfOpenElements::insert_immediately_below(NonnullRefPtr<DOM::Element> element_to_add, DOM::Element const& target)
{
for (size_t i = 0; i < m_elements.size(); i++) {
if (&m_elements[i] == &target) {
m_elements.insert(i + 1, move(element_to_add));
break;
}
}
}
}