void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) { // Make sure we don't append things after :after-generated content if we have it. if (!beforeChild && isAfterContent(lastChild())) beforeChild = lastChild(); bool isTableRow = element() && element()->hasTagName(trTag); #if ENABLE(WML) if (!isTableRow && element() && element()->isWMLElement()) isTableRow = element()->hasTagName(WMLNames::trTag); #endif if (!child->isTableCell()) { if (isTableRow && child->element() && child->element()->hasTagName(formTag) && document()->isHTMLDocument()) { RenderContainer::addChild(child, beforeChild); return; } RenderObject* last = beforeChild; if (!last) last = lastChild(); if (last && last->isAnonymous() && last->isTableCell()) { last->addChild(child); return; } // If beforeChild is inside an anonymous cell, insert into the cell. if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous()) { last->parent()->addChild(child, beforeChild); return; } RenderTableCell* cell = new (renderArena()) RenderTableCell(document() /* anonymous object */); RefPtr<RenderStyle> newStyle = RenderStyle::create(); newStyle->inheritFrom(style()); newStyle->setDisplay(TABLE_CELL); cell->setStyle(newStyle.release()); addChild(cell, beforeChild); cell->addChild(child); return; } // If the next renderer is actually wrapped in an anonymous table cell, we need to go up and find that. while (beforeChild && beforeChild->parent() != this) beforeChild = beforeChild->parent(); RenderTableCell* cell = static_cast<RenderTableCell*>(child); // Generated content can result in us having a null section so make sure to null check our parent. if (parent()) section()->addCell(cell, this); ASSERT(!beforeChild || beforeChild->isTableCell() || isTableRow && beforeChild->element() && beforeChild->element()->hasTagName(formTag) && document()->isHTMLDocument()); RenderContainer::addChild(cell, beforeChild); if (beforeChild || nextSibling()) section()->setNeedsCellRecalc(); }
void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) { // Make sure we don't append things after :after-generated content if we have it. if (!beforeChild) beforeChild = findAfterContentRenderer(); if (!child->isTableCell()) { RenderObject* last = beforeChild; if (!last) last = lastChild(); if (last && last->isAnonymous() && last->isTableCell() && !last->isBeforeOrAfterContent()) { if (beforeChild == last) beforeChild = last->firstChild(); last->addChild(child, beforeChild); return; } if (beforeChild && !beforeChild->isAnonymous() && beforeChild->parent() == this) { RenderObject* cell = beforeChild->previousSibling(); if (cell && cell->isTableCell()) { ASSERT(cell->isAnonymous()); cell->addChild(child); return; } } // If beforeChild is inside an anonymous cell, insert into the cell. if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous() && !last->parent()->isBeforeOrAfterContent()) { last->parent()->addChild(child, beforeChild); return; } RenderTableCell* cell = new (renderArena()) RenderTableCell(document() /* anonymous object */); RefPtr<RenderStyle> newStyle = RenderStyle::create(); newStyle->inheritFrom(style()); newStyle->setDisplay(TABLE_CELL); cell->setStyle(newStyle.release()); addChild(cell, beforeChild); cell->addChild(child); return; } // If the next renderer is actually wrapped in an anonymous table cell, we need to go up and find that. while (beforeChild && beforeChild->parent() != this) beforeChild = beforeChild->parent(); RenderTableCell* cell = toRenderTableCell(child); // Generated content can result in us having a null section so make sure to null check our parent. if (parent()) section()->addCell(cell, this); ASSERT(!beforeChild || beforeChild->isTableCell()); RenderBox::addChild(cell, beforeChild); if (beforeChild || nextSibling()) section()->setNeedsCellRecalc(); }
void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) { // Make sure we don't append things after :after-generated content if we have it. if (!beforeChild) beforeChild = afterPseudoElementRenderer(); if (!child->isTableCell()) { RenderObject* last = beforeChild; if (!last) last = lastChild(); if (last && last->isAnonymous() && last->isTableCell() && !last->isBeforeOrAfterContent()) { if (beforeChild == last) beforeChild = last->firstChild(); last->addChild(child, beforeChild); return; } if (beforeChild && !beforeChild->isAnonymous() && beforeChild->parent() == this) { RenderObject* cell = beforeChild->previousSibling(); if (cell && cell->isTableCell() && cell->isAnonymous()) { cell->addChild(child); return; } } // If beforeChild is inside an anonymous cell, insert into the cell. if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous() && !last->parent()->isBeforeOrAfterContent()) { last->parent()->addChild(child, beforeChild); return; } RenderTableCell* cell = RenderTableCell::createAnonymousWithParentRenderer(this); addChild(cell, beforeChild); cell->addChild(child); return; } // If the next renderer is actually wrapped in an anonymous table cell, we need to go up and find that. while (beforeChild && beforeChild->parent() != this) beforeChild = beforeChild->parent(); RenderTableCell* cell = toRenderTableCell(child); // Generated content can result in us having a null section so make sure to null check our parent. if (parent()) section()->addCell(cell, this); ASSERT(!beforeChild || beforeChild->isTableCell()); RenderBox::addChild(cell, beforeChild); if (beforeChild || nextSibling()) section()->setNeedsCellRecalc(); }
void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) { if (!is<RenderTableCell>(*child)) { RenderObject* last = beforeChild; if (!last) last = lastCell(); if (last && last->isAnonymous() && is<RenderTableCell>(*last) && !last->isBeforeOrAfterContent()) { RenderTableCell& cell = downcast<RenderTableCell>(*last); if (beforeChild == &cell) beforeChild = cell.firstChild(); cell.addChild(child, beforeChild); return; } if (beforeChild && !beforeChild->isAnonymous() && beforeChild->parent() == this) { RenderObject* cell = beforeChild->previousSibling(); if (is<RenderTableCell>(cell) && cell->isAnonymous()) { downcast<RenderTableCell>(*cell).addChild(child); return; } } // If beforeChild is inside an anonymous cell, insert into the cell. if (last && !is<RenderTableCell>(*last) && last->parent() && last->parent()->isAnonymous() && !last->parent()->isBeforeOrAfterContent()) { last->parent()->addChild(child, beforeChild); return; } RenderTableCell* cell = RenderTableCell::createAnonymousWithParentRenderer(this); addChild(cell, beforeChild); cell->addChild(child); return; } if (beforeChild && beforeChild->parent() != this) beforeChild = splitAnonymousBoxesAroundChild(beforeChild); RenderTableCell& cell = downcast<RenderTableCell>(*child); // Generated content can result in us having a null section so make sure to null check our parent. if (RenderTableSection* section = this->section()) section->addCell(&cell, this); ASSERT(!beforeChild || is<RenderTableCell>(*beforeChild)); RenderBox::addChild(&cell, beforeChild); if (beforeChild || nextRow()) section()->setNeedsCellRecalc(); if (RenderTable* table = this->table()) table->invalidateCollapsedBorders(); }
void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) { if (!child->isTableCell()) { RenderObject* last = beforeChild; if (!last) last = lastChild(); if (last && last->isAnonymous() && last->isTableCell() && !last->isBeforeOrAfterContent()) { if (beforeChild == last) beforeChild = last->firstChild(); last->addChild(child, beforeChild); return; } if (beforeChild && !beforeChild->isAnonymous() && beforeChild->parent() == this) { RenderObject* cell = beforeChild->previousSibling(); if (cell && cell->isTableCell() && cell->isAnonymous()) { cell->addChild(child); return; } } // If beforeChild is inside an anonymous cell, insert into the cell. if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous() && !last->parent()->isBeforeOrAfterContent()) { last->parent()->addChild(child, beforeChild); return; } RenderTableCell* cell = RenderTableCell::createAnonymousWithParentRenderer(this); addChild(cell, beforeChild); cell->addChild(child); return; } if (beforeChild && beforeChild->parent() != this) beforeChild = splitAnonymousBoxesAroundChild(beforeChild); RenderTableCell* cell = toRenderTableCell(child); // Generated content can result in us having a null section so make sure to null check our parent. if (parent()) section()->addCell(cell, this); ASSERT(!beforeChild || beforeChild->isTableCell()); RenderBox::addChild(cell, beforeChild); if (beforeChild || nextSibling()) section()->setNeedsCellRecalc(); }
void RenderTableRow::addChild(RenderObject* child, RenderObject* beforeChild) { bool isTableRow = element() && element()->hasTagName(trTag); if (!child->isTableCell()) { if (isTableRow && child->element() && child->element()->hasTagName(formTag) && document()->isHTMLDocument()) { RenderContainer::addChild(child, beforeChild); return; } RenderObject* last = beforeChild; if (!last) last = lastChild(); if (last && last->isAnonymous() && last->isTableCell()) { last->addChild(child); return; } // If beforeChild is inside an anonymous cell, insert into the cell. if (last && !last->isTableCell() && last->parent() && last->parent()->isAnonymous()) { last->parent()->addChild(child, beforeChild); return; } RenderTableCell* cell = new (renderArena()) RenderTableCell(document() /* anonymous object */); RenderStyle* newStyle = new (renderArena()) RenderStyle(); newStyle->inheritFrom(style()); newStyle->setDisplay(TABLE_CELL); cell->setStyle(newStyle); addChild(cell, beforeChild); cell->addChild(child); return; } // If the next renderer is actually wrapped in an anonymous table cell, we need to go up and find that. while (beforeChild && !beforeChild->isTableCell()) beforeChild = beforeChild->parent(); RenderTableCell* cell = static_cast<RenderTableCell*>(child); section()->addCell(cell, this); RenderContainer::addChild(cell, beforeChild); if (beforeChild || nextSibling()) section()->setNeedsCellRecalc(); }