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() { // 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(); } }
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(); } }
static void startAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOListElement.start._set"); HTMLOListElement* imp = V8HTMLOListElement::toNative(info.Holder()); int v = toInt32(value); imp->setStart(v); return; }
static void compactAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOListElement.compact._set"); HTMLOListElement* imp = V8HTMLOListElement::toNative(info.Holder()); bool v = value->BooleanValue(); imp->setBooleanAttribute(WebCore::HTMLNames::compactAttr, v); return; }
JSValue jsHTMLOListElementType(ExecState* exec, JSValue slotBase, const Identifier&) { JSHTMLOListElement* castedThis = static_cast<JSHTMLOListElement*>(asObject(slotBase)); UNUSED_PARAM(exec); HTMLOListElement* imp = static_cast<HTMLOListElement*>(castedThis->impl()); JSValue result = jsString(exec, imp->getAttribute(WebCore::HTMLNames::typeAttr)); return result; }
JSValue jsHTMLOListElementStart(ExecState* exec, JSValue slotBase, const Identifier&) { JSHTMLOListElement* castedThis = static_cast<JSHTMLOListElement*>(asObject(slotBase)); UNUSED_PARAM(exec); HTMLOListElement* imp = static_cast<HTMLOListElement*>(castedThis->impl()); JSValue result = jsNumber(exec, imp->start()); return result; }
JSValue jsHTMLOListElementCompact(ExecState* exec, JSValue slotBase, const Identifier&) { JSHTMLOListElement* castedThis = static_cast<JSHTMLOListElement*>(asObject(slotBase)); UNUSED_PARAM(exec); HTMLOListElement* imp = static_cast<HTMLOListElement*>(castedThis->impl()); JSValue result = jsBoolean(imp->hasAttribute(WebCore::HTMLNames::compactAttr)); return result; }
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; }
void JSHTMLOListElement::putValueProperty(ExecState* exec, int token, JSValue* value) { switch (token) { case CompactAttrNum: { HTMLOListElement* imp = static_cast<HTMLOListElement*>(impl()); imp->setCompact(value->toBoolean(exec)); break; } case StartAttrNum: { HTMLOListElement* imp = static_cast<HTMLOListElement*>(impl()); imp->setStart(value->toInt32(exec)); break; } case TypeAttrNum: { HTMLOListElement* imp = static_cast<HTMLOListElement*>(impl()); imp->setType(valueToStringWithNullCheck(exec, value)); break; } } }
JSValue* JSHTMLOListElement::getValueProperty(ExecState* exec, int token) const { switch (token) { case CompactAttrNum: { HTMLOListElement* imp = static_cast<HTMLOListElement*>(impl()); return jsBoolean(imp->compact()); } case StartAttrNum: { HTMLOListElement* imp = static_cast<HTMLOListElement*>(impl()); return jsNumber(exec, imp->start()); } case TypeAttrNum: { HTMLOListElement* imp = static_cast<HTMLOListElement*>(impl()); return jsString(exec, imp->type()); } case ConstructorAttrNum: return getConstructor(exec); } return 0; }
static v8::Handle<v8::Value> compactAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOListElement.compact._get"); HTMLOListElement* imp = V8HTMLOListElement::toNative(info.Holder()); return v8Boolean(imp->hasAttribute(WebCore::HTMLNames::compactAttr)); }
static v8::Handle<v8::Value> startAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOListElement.start._get"); HTMLOListElement* imp = V8HTMLOListElement::toNative(info.Holder()); return v8::Integer::New(imp->start()); }
void setJSHTMLOListElementType(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLOListElement* castedThis = static_cast<JSHTMLOListElement*>(thisObject); HTMLOListElement* imp = static_cast<HTMLOListElement*>(castedThis->impl()); imp->setAttribute(WebCore::HTMLNames::typeAttr, valueToStringWithNullCheck(exec, value)); }
void setJSHTMLOListElementStart(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLOListElement* castedThis = static_cast<JSHTMLOListElement*>(thisObject); HTMLOListElement* imp = static_cast<HTMLOListElement*>(castedThis->impl()); imp->setStart(value.toInt32(exec)); }
void setJSHTMLOListElementCompact(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLOListElement* castedThis = static_cast<JSHTMLOListElement*>(thisObject); HTMLOListElement* imp = static_cast<HTMLOListElement*>(castedThis->impl()); imp->setBooleanAttribute(WebCore::HTMLNames::compactAttr, value.toBoolean(exec)); }