void RenderListItem::updateListMarkerNumbers() { // If distribution recalc is needed, updateListMarkerNumber will be re-invoked // after distribution is calculated. if (node()->document().childNeedsDistributionRecalc()) return; Node* listNode = enclosingList(this); ASSERT(listNode); bool isListReversed = false; HTMLOListElement* oListElement = isHTMLOListElement(listNode) ? toHTMLOListElement(listNode) : 0; if (oListElement) { oListElement->itemCountChanged(); isListReversed = oListElement->isReversed(); } // FIXME: The n^2 protection below doesn't help if the elements were inserted after the // the list had already been displayed. // Avoid an O(n^2) walk over the children below when they're all known to be attaching. if (listNode->needsAttach()) return; for (RenderListItem* item = previousOrNextItem(isListReversed, listNode, this); item; item = previousOrNextItem(isListReversed, listNode, item)) { if (!item->m_isValueUpToDate) { // If an item has been marked for update before, we can safely // assume that all the following ones have too. // This gives us the opportunity to stop here and avoid // marking the same nodes again. break; } item->updateValue(); } }
void RenderListItem::updateListMarkerNumbers() { Node* listNode = enclosingList(this); // The list node can be the shadow root which has no renderer. ASSERT(listNode); if (!listNode) return; bool isListReversed = false; HTMLOListElement* oListElement = (listNode && listNode->hasTagName(olTag)) ? toHTMLOListElement(listNode) : 0; if (oListElement) { oListElement->itemCountChanged(); isListReversed = oListElement->isReversed(); } for (RenderListItem* item = previousOrNextItem(isListReversed, listNode, this); item; item = previousOrNextItem(isListReversed, listNode, item)) { if (!item->m_isValueUpToDate) { // If an item has been marked for update before, we can safely // assume that all the following ones have too. // This gives us the opportunity to stop here and avoid // marking the same nodes again. break; } item->updateValue(); } }
void RenderListItem::updateListMarkerNumbers() { // If distribution recalc is needed, updateListMarkerNumber will be re-invoked // after distribution is calculated. if (node()->document().childNeedsDistributionRecalc()) return; Node* listNode = enclosingList(this); // The list node can be the shadow root which has no renderer. ASSERT(listNode); if (!listNode) return; bool isListReversed = false; HTMLOListElement* oListElement = isHTMLOListElement(listNode) ? toHTMLOListElement(listNode) : 0; if (oListElement) { oListElement->itemCountChanged(); isListReversed = oListElement->isReversed(); } for (RenderListItem* item = previousOrNextItem(isListReversed, listNode, this); item; item = previousOrNextItem(isListReversed, listNode, item)) { if (!item->m_isValueUpToDate) { // If an item has been marked for update before, we can safely // assume that all the following ones have too. // This gives us the opportunity to stop here and avoid // marking the same nodes again. break; } item->updateValue(); } }
inline int RenderListItem::calcValue() const { if (m_hasExplicitValue) return m_explicitValue; Node* list = enclosingList(this); HTMLOListElement* oListElement = isHTMLOListElement(list) ? toHTMLOListElement(list) : 0; int valueStep = 1; if (oListElement && oListElement->isReversed()) valueStep = -1; // FIXME: This recurses to a possible depth of the length of the list. // That's not good -- we need to change this to an iterative algorithm. if (RenderListItem* previousItem = previousListItem(list, this)) return previousItem->value() + valueStep; if (oListElement) return oListElement->start(); return 1; }
inline int RenderListItem::calcValue() const { if (m_hasExplicitValue) return m_explicitValue; Node* list = enclosingList(this); RenderObject* listRenderer = list ? list->renderer() : 0; HTMLOListElement* oListElement = (list && list->hasTagName(olTag)) ? static_cast<HTMLOListElement*>(list) : 0; int valueStep = 1; if (oListElement && oListElement->isReversed()) valueStep = -1; // FIXME: This recurses to a possible depth of the length of the list. // That's not good -- we need to change this to an iterative algorithm. if (RenderListItem* previousItem = previousListItem(listRenderer, this)) return previousItem->value() + valueStep; if (oListElement) return oListElement->start(); return 1; }