void HTMLTableElement::parseAttribute(const QualifiedName& name, const AtomicString& oldValue, const AtomicString& value) { CellBorders bordersBefore = getCellBorders(); unsigned short oldPadding = m_padding; if (name == borderAttr) { // FIXME: This attribute is a mess. m_borderAttr = parseBorderWidthAttribute(value); } else if (name == bordercolorAttr) { m_borderColorAttr = !value.isEmpty(); } else if (name == frameAttr) { // FIXME: This attribute is a mess. bool borderTop; bool borderRight; bool borderBottom; bool borderLeft; m_frameAttr = getBordersFromFrameAttributeValue( value, borderTop, borderRight, borderBottom, borderLeft); } else if (name == rulesAttr) { m_rulesAttr = UnsetRules; if (equalIgnoringCase(value, "none")) m_rulesAttr = NoneRules; else if (equalIgnoringCase(value, "groups")) m_rulesAttr = GroupsRules; else if (equalIgnoringCase(value, "rows")) m_rulesAttr = RowsRules; else if (equalIgnoringCase(value, "cols")) m_rulesAttr = ColsRules; else if (equalIgnoringCase(value, "all")) m_rulesAttr = AllRules; } else if (name == cellpaddingAttr) { if (!value.isEmpty()) m_padding = std::max(0, value.toInt()); else m_padding = 1; } else if (name == colsAttr) { // ### } else { HTMLElement::parseAttribute(name, oldValue, value); } if (bordersBefore != getCellBorders() || oldPadding != m_padding) { m_sharedCellStyle = nullptr; setNeedsTableStyleRecalc(); } }
void HTMLTableElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == widthAttr) addHTMLLengthToStyle(style, CSSPropertyWidth, value); else if (name == heightAttr) addHTMLLengthToStyle(style, CSSPropertyHeight, value); else if (name == borderAttr) addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderWidth, parseBorderWidthAttribute(value), CSSPrimitiveValue::CSS_PX); else if (name == bordercolorAttr) { if (!value.isEmpty()) addHTMLColorToStyle(style, CSSPropertyBorderColor, value); } else if (name == bgcolorAttr) addHTMLColorToStyle(style, CSSPropertyBackgroundColor, value); else if (name == backgroundAttr) { String url = stripLeadingAndTrailingHTMLSpaces(value); if (!url.isEmpty()) { RefPtrWillBeRawPtr<CSSImageValue> imageValue = CSSImageValue::create(url, document().completeURL(url)); imageValue->setReferrer(Referrer(document().outgoingReferrer(), document().referrerPolicy())); style->setProperty(CSSProperty(CSSPropertyBackgroundImage, imageValue.release())); } } else if (name == valignAttr) { if (!value.isEmpty()) addPropertyToPresentationAttributeStyle(style, CSSPropertyVerticalAlign, value); } else if (name == cellspacingAttr) { if (!value.isEmpty()) addHTMLLengthToStyle(style, CSSPropertyBorderSpacing, value); } else if (name == vspaceAttr) { UseCounter::countDeprecation(document(), UseCounter::HTMLTableElementVspace); addHTMLLengthToStyle(style, CSSPropertyMarginTop, value); addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value); } else if (name == hspaceAttr) { UseCounter::countDeprecation(document(), UseCounter::HTMLTableElementHspace); addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value); addHTMLLengthToStyle(style, CSSPropertyMarginRight, value); } else if (name == alignAttr) { if (!value.isEmpty()) { if (equalIgnoringCase(value, "center")) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarginStart, CSSValueAuto); addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitMarginEnd, CSSValueAuto); } else addPropertyToPresentationAttributeStyle(style, CSSPropertyFloat, value); } } else if (name == rulesAttr) { // The presence of a valid rules attribute causes border collapsing to be enabled. if (m_rulesAttr != UnsetRules) addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderCollapse, CSSValueCollapse); } else if (name == frameAttr) { bool borderTop; bool borderRight; bool borderBottom; bool borderLeft; if (getBordersFromFrameAttributeValue(value, borderTop, borderRight, borderBottom, borderLeft)) { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderWidth, CSSValueThin); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderTopStyle, borderTop ? CSSValueSolid : CSSValueHidden); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderBottomStyle, borderBottom ? CSSValueSolid : CSSValueHidden); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderLeftStyle, borderLeft ? CSSValueSolid : CSSValueHidden); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRightStyle, borderRight ? CSSValueSolid : CSSValueHidden); } } else HTMLElement::collectStyleForPresentationAttribute(name, value, style); }