void HTMLLIElement::attach() { assert(!attached()); HTMLElement::attach(); if (renderer() && renderer()->style()->display() == LIST_ITEM) { RenderListItem *render = static_cast<RenderListItem*>(renderer()); // Find the enclosing list node. Node* listNode = 0; Node* n = this; while (!listNode && (n = n->parentNode())) { if (n->hasTagName(ulTag) || n->hasTagName(olTag)) listNode = n; } // If we are not in a list, tell the renderer so it can position us inside. // We don't want to change our style to say "inside" since that would affect nested nodes. if (!listNode) render->setNotInList(true); // If we had a value attr. if (m_isValued) render->setValue(m_requestedValue); } }
void HTMLLIElement::parseMappedAttribute(MappedAttribute *attr) { if (attr->name() == valueAttr) { m_isValued = true; m_requestedValue = !attr->isNull() ? attr->value().toInt() : 0; if (renderer() && renderer()->isListItem()) { RenderListItem* list = static_cast<RenderListItem*>(renderer()); // ### work out what to do when attribute removed - use default of some sort? list->setValue(m_requestedValue); } } else if (attr->name() == typeAttr) { if (attr->value() == "a") addCSSProperty(attr, CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_LOWER_ALPHA); else if (attr->value() == "A") addCSSProperty(attr, CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_UPPER_ALPHA); else if (attr->value() == "i") addCSSProperty(attr, CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_LOWER_ROMAN); else if (attr->value() == "I") addCSSProperty(attr, CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_UPPER_ROMAN); else if (attr->value() == "1") addCSSProperty(attr, CSS_PROP_LIST_STYLE_TYPE, CSS_VAL_DECIMAL); else addCSSProperty(attr, CSS_PROP_LIST_STYLE_TYPE, attr->value()); } else HTMLElement::parseMappedAttribute(attr); }