nsresult HTMLFieldSetElement::InsertChildAt(nsIContent* aChild, uint32_t aIndex, bool aNotify) { bool firstLegendHasChanged = false; if (aChild->IsHTMLElement(nsGkAtoms::legend)) { if (!mFirstLegend) { mFirstLegend = aChild; // We do not want to notify the first time mFirstElement is set. } else { // If mFirstLegend is before aIndex, we do not change it. // Otherwise, mFirstLegend is now aChild. if (int32_t(aIndex) <= IndexOf(mFirstLegend)) { mFirstLegend = aChild; firstLegendHasChanged = true; } } } nsresult rv = nsGenericHTMLFormElement::InsertChildAt(aChild, aIndex, aNotify); NS_ENSURE_SUCCESS(rv, rv); if (firstLegendHasChanged) { NotifyElementsForFirstLegendChange(aNotify); } return rv; }
void HTMLFieldSetElement::RemoveChildAt(uint32_t aIndex, bool aNotify) { bool firstLegendHasChanged = false; if (mFirstLegend && (GetChildAt(aIndex) == mFirstLegend)) { // If we are removing the first legend we have to found another one. nsIContent* child = mFirstLegend->GetNextSibling(); mFirstLegend = nullptr; firstLegendHasChanged = true; for (; child; child = child->GetNextSibling()) { if (child->IsHTMLElement(nsGkAtoms::legend)) { mFirstLegend = child; break; } } } nsGenericHTMLFormElement::RemoveChildAt(aIndex, aNotify); if (firstLegendHasChanged) { NotifyElementsForFirstLegendChange(aNotify); } }
nsresult nsHTMLFieldSetElement::RemoveChildAt(PRUint32 aIndex, PRBool aNotify) { bool firstLegendHasChanged = false; if (mFirstLegend && (GetChildAt(aIndex) == mFirstLegend)) { // If we are removing the first legend we have to found another one. nsIContent* child = mFirstLegend->GetNextSibling(); mFirstLegend = nsnull; firstLegendHasChanged = true; for (; child; child = child->GetNextSibling()) { if (child->IsHTML(nsGkAtoms::legend)) { mFirstLegend = child; break; } } } nsresult rv = nsGenericHTMLFormElement::RemoveChildAt(aIndex, aNotify); NS_ENSURE_SUCCESS(rv, rv); if (firstLegendHasChanged) { NotifyElementsForFirstLegendChange(aNotify); } return rv; }