void HTMLElement::mapLanguageAttributeToLocale(const AtomicString& value, MutableStylePropertySet* style) { if (!value.isEmpty()) { // Have to quote so the locale id is treated as a string instead of as a CSS keyword. addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitLocale, quoteCSSString(value)); // FIXME: Remove the following UseCounter code when we collect enough // data. UseCounter::count(document(), UseCounter::LangAttribute); if (isHTMLHtmlElement(*this)) UseCounter::count(document(), UseCounter::LangAttributeOnHTML); else if (isHTMLBodyElement(*this)) UseCounter::count(document(), UseCounter::LangAttributeOnBody); String htmlLanguage = value.string(); size_t firstSeparator = htmlLanguage.find('-'); if (firstSeparator != kNotFound) htmlLanguage = htmlLanguage.left(firstSeparator); String uiLanguage = defaultLanguage(); firstSeparator = uiLanguage.find('-'); if (firstSeparator != kNotFound) uiLanguage = uiLanguage.left(firstSeparator); firstSeparator = uiLanguage.find('_'); if (firstSeparator != kNotFound) uiLanguage = uiLanguage.left(firstSeparator); if (!equalIgnoringCase(htmlLanguage, uiLanguage)) UseCounter::count(document(), UseCounter::LangAttributeDoesNotMatchToUILocale); } else { // The empty string means the language is explicitly unknown. addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitLocale, CSSValueAuto); } }
void HTMLElement::applyAlignmentAttributeToStyle(const AtomicString& alignment, MutableStylePropertySet* style) { // Vertical alignment with respect to the current baseline of the text // right or left means floating images. CSSValueID floatValue = CSSValueInvalid; CSSValueID verticalAlignValue = CSSValueInvalid; if (equalIgnoringCase(alignment, "absmiddle")) verticalAlignValue = CSSValueMiddle; else if (equalIgnoringCase(alignment, "absbottom")) verticalAlignValue = CSSValueBottom; else if (equalIgnoringCase(alignment, "left")) { floatValue = CSSValueLeft; verticalAlignValue = CSSValueTop; } else if (equalIgnoringCase(alignment, "right")) { floatValue = CSSValueRight; verticalAlignValue = CSSValueTop; } else if (equalIgnoringCase(alignment, "top")) verticalAlignValue = CSSValueTop; else if (equalIgnoringCase(alignment, "middle")) verticalAlignValue = CSSValueWebkitBaselineMiddle; else if (equalIgnoringCase(alignment, "center")) verticalAlignValue = CSSValueMiddle; else if (equalIgnoringCase(alignment, "bottom")) verticalAlignValue = CSSValueBaseline; else if (equalIgnoringCase(alignment, "texttop")) verticalAlignValue = CSSValueTextTop; if (floatValue != CSSValueInvalid) addPropertyToPresentationAttributeStyle(style, CSSPropertyFloat, floatValue); if (verticalAlignValue != CSSValueInvalid) addPropertyToPresentationAttributeStyle(style, CSSPropertyVerticalAlign, verticalAlignValue); }
void HTMLElement::addHTMLLengthToStyle(MutableStylePropertySet* style, CSSPropertyID propertyID, const String& value) { // FIXME: This function should not spin up the CSS parser, but should instead just figure out the correct // length unit and make the appropriate parsed value. // strip attribute garbage.. StringImpl* v = value.impl(); if (v) { unsigned length = 0; while (length < v->length() && (*v)[length] <= ' ') length++; for (; length < v->length(); length++) { UChar cc = (*v)[length]; if (cc > '9') break; if (cc < '0') { if (cc == '%' || cc == '*') length++; if (cc != '.') break; } } if (length != v->length()) { addPropertyToPresentationAttributeStyle(style, propertyID, v->substring(0, length)); return; } } addPropertyToPresentationAttributeStyle(style, propertyID, value); }
void SVGSVGElement::collectStyleForPresentationAttribute( const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { SVGAnimatedPropertyBase* property = propertyFromAttribute(name); if (property == m_x) { addPropertyToPresentationAttributeStyle(style, CSSPropertyX, m_x->cssValue()); } else if (property == m_y) { addPropertyToPresentationAttributeStyle(style, CSSPropertyY, m_y->cssValue()); } else if (isOutermostSVGSVGElement() && (property == m_width || property == m_height)) { if (property == m_width) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWidth, m_width->cssValue()); } else if (property == m_height) { addPropertyToPresentationAttributeStyle(style, CSSPropertyHeight, m_height->cssValue()); } } else { SVGGraphicsElement::collectStyleForPresentationAttribute(name, value, style); } }
void HTMLElement::mapLanguageAttributeToLocale(const AtomicString& value, MutableStylePropertySet* style) { if (!value.isEmpty()) { // Have to quote so the locale id is treated as a string instead of as a CSS keyword. addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitLocale, quoteCSSString(value)); } else { // The empty string means the language is explicitly unknown. addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitLocale, CSSValueAuto); } }
void SVGUseElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { SVGAnimatedPropertyBase* property = propertyFromAttribute(name); if (property == m_x) addPropertyToPresentationAttributeStyle(style, CSSPropertyX, m_x->currentValue()->asCSSPrimitiveValue()); else if (property == m_y) addPropertyToPresentationAttributeStyle(style, CSSPropertyY, m_y->currentValue()->asCSSPrimitiveValue()); else SVGGraphicsElement::collectStyleForPresentationAttribute(name, value, style); }
void SVGTextContentElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStyleProperties& style) { if (!isSupportedAttribute(name)) SVGGraphicsElement::collectStyleForPresentationAttribute(name, value, style); else if (name.matches(XMLNames::spaceAttr)) { DEPRECATED_DEFINE_STATIC_LOCAL(const AtomicString, preserveString, ("preserve", AtomicString::ConstructFromLiteral)); if (value == preserveString) addPropertyToPresentationAttributeStyle(style, CSSPropertyWhiteSpace, CSSValuePre); else addPropertyToPresentationAttributeStyle(style, CSSPropertyWhiteSpace, CSSValueNowrap); }
void SVGCircleElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { SVGAnimatedPropertyBase* property = propertyFromAttribute(name); if (property == m_cx) addPropertyToPresentationAttributeStyle(style, CSSPropertyCx, m_cx->currentValue()->asCSSPrimitiveValue()); else if (property == m_cy) addPropertyToPresentationAttributeStyle(style, CSSPropertyCy, m_cy->currentValue()->asCSSPrimitiveValue()); else if (property == m_r) addPropertyToPresentationAttributeStyle(style, CSSPropertyR, m_r->currentValue()->asCSSPrimitiveValue()); else SVGGeometryElement::collectStyleForPresentationAttribute(name, value, style); }
void HTMLTextAreaElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStyleProperties& style) { if (name == wrapAttr) { if (shouldWrapText()) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWhiteSpace, CSSValuePreWrap); addPropertyToPresentationAttributeStyle(style, CSSPropertyWordWrap, CSSValueBreakWord); } else { addPropertyToPresentationAttributeStyle(style, CSSPropertyWhiteSpace, CSSValuePre); addPropertyToPresentationAttributeStyle(style, CSSPropertyWordWrap, CSSValueNormal); } } else HTMLTextFormControlElement::collectStyleForPresentationAttribute(name, value, style); }
void HTMLTextAreaElement::collectStyleForPresentationAttribute(const Attribute& attribute, StylePropertySet* style) { if (attribute.name() == wrapAttr) { if (shouldWrapText()) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWhiteSpace, CSSValuePreWrap); addPropertyToPresentationAttributeStyle(style, CSSPropertyWordWrap, CSSValueBreakWord); } else { addPropertyToPresentationAttributeStyle(style, CSSPropertyWhiteSpace, CSSValuePre); addPropertyToPresentationAttributeStyle(style, CSSPropertyWordWrap, CSSValueNormal); } } else HTMLTextFormControlElement::collectStyleForPresentationAttribute(attribute, style); }
void HTMLParagraphElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == alignAttr) { if (equalIgnoringCase(value, "middle") || equalIgnoringCase(value, "center")) addPropertyToPresentationAttributeStyle(style, CSSPropertyTextAlign, CSSValueWebkitCenter); else if (equalIgnoringCase(value, "left")) addPropertyToPresentationAttributeStyle(style, CSSPropertyTextAlign, CSSValueWebkitLeft); else if (equalIgnoringCase(value, "right")) addPropertyToPresentationAttributeStyle(style, CSSPropertyTextAlign, CSSValueWebkitRight); else addPropertyToPresentationAttributeStyle(style, CSSPropertyTextAlign, value); } else HTMLElement::collectStyleForPresentationAttribute(name, value, style); }
void SVGForeignObjectElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == SVGNames::widthAttr || name == SVGNames::heightAttr) { RefPtr<SVGLength> length = SVGLength::create(LengthModeOther); TrackExceptionState exceptionState; length->setValueAsString(value, exceptionState); if (!exceptionState.hadException()) { if (name == SVGNames::widthAttr) addPropertyToPresentationAttributeStyle(style, CSSPropertyWidth, value); else if (name == SVGNames::heightAttr) addPropertyToPresentationAttributeStyle(style, CSSPropertyHeight, value); } } else { SVGGraphicsElement::collectStyleForPresentationAttribute(name, value, style); } }
void HTMLBodyElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == backgroundAttr) { String url = stripLeadingAndTrailingHTMLSpaces(value); if (!url.isEmpty()) { RefPtrWillBeRawPtr<CSSImageValue> imageValue = CSSImageValue::create(url, document().completeURL(url)); imageValue->setInitiator(localName()); imageValue->setReferrer(Referrer(document().outgoingReferrer(), document().referrerPolicy())); style->setProperty(CSSProperty(CSSPropertyBackgroundImage, imageValue.release())); } } else if (name == marginwidthAttr || name == leftmarginAttr) { addHTMLLengthToStyle(style, CSSPropertyMarginRight, value); addHTMLLengthToStyle(style, CSSPropertyMarginLeft, value); } else if (name == marginheightAttr || name == topmarginAttr) { addHTMLLengthToStyle(style, CSSPropertyMarginBottom, value); addHTMLLengthToStyle(style, CSSPropertyMarginTop, value); } else if (name == bgcolorAttr) { addHTMLColorToStyle(style, CSSPropertyBackgroundColor, value); } else if (name == textAttr) { addHTMLColorToStyle(style, CSSPropertyColor, value); } else if (name == bgpropertiesAttr) { if (equalIgnoringCase(value, "fixed")) { UseCounter::count(document(), UseCounter::BgPropertiesFixed); addPropertyToPresentationAttributeStyle(style, CSSPropertyBackgroundAttachment, CSSValueFixed); } } else HTMLElement::collectStyleForPresentationAttribute(name, value, style); }
void SVGPathElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { SVGAnimatedPropertyBase* property = propertyFromAttribute(name); if (property == m_path) { SVGAnimatedPath* path = this->path(); // If this is a <use> instance, return the referenced path to maximize geometry sharing. if (const SVGElement* element = correspondingElement()) path = toSVGPathElement(element)->path(); CSSPathValue* pathValue = path->currentValue()->pathValue(); if (pathValue->stylePath()->byteStream().isEmpty()) { addPropertyToPresentationAttributeStyle(style, CSSPropertyD, CSSPrimitiveValue::createIdentifier(CSSValueNone)); return; } addPropertyToPresentationAttributeStyle(style, CSSPropertyD, pathValue); return; } SVGGeometryElement::collectStyleForPresentationAttribute(name, value, style); }
void SVGRectElement::collectStyleForPresentationAttribute( const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { SVGAnimatedPropertyBase* property = propertyFromAttribute(name); if (property == m_x) addPropertyToPresentationAttributeStyle( style, CSSPropertyX, m_x->currentValue()->asCSSPrimitiveValue()); else if (property == m_y) addPropertyToPresentationAttributeStyle( style, CSSPropertyY, m_y->currentValue()->asCSSPrimitiveValue()); else if (property == m_width) addPropertyToPresentationAttributeStyle( style, CSSPropertyWidth, m_width->currentValue()->asCSSPrimitiveValue()); else if (property == m_height) addPropertyToPresentationAttributeStyle( style, CSSPropertyHeight, m_height->currentValue()->asCSSPrimitiveValue()); else if (property == m_rx) addPropertyToPresentationAttributeStyle( style, CSSPropertyRx, m_rx->currentValue()->asCSSPrimitiveValue()); else if (property == m_ry) addPropertyToPresentationAttributeStyle( style, CSSPropertyRy, m_ry->currentValue()->asCSSPrimitiveValue()); else SVGGeometryElement::collectStyleForPresentationAttribute(name, value, style); }
void HTMLElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStylePropertySet* style) { if (name == alignAttr) { if (equalIgnoringCase(value, "middle")) addPropertyToPresentationAttributeStyle(style, CSSPropertyTextAlign, CSSValueCenter); else addPropertyToPresentationAttributeStyle(style, CSSPropertyTextAlign, value); } else if (name == contenteditableAttr) { if (value.isEmpty() || equalIgnoringCase(value, "true")) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUserModify, CSSValueReadWrite); addPropertyToPresentationAttributeStyle(style, CSSPropertyWordWrap, CSSValueBreakWord); addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitLineBreak, CSSValueAfterWhiteSpace); } else if (equalIgnoringCase(value, "plaintext-only")) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUserModify, CSSValueReadWritePlaintextOnly); addPropertyToPresentationAttributeStyle(style, CSSPropertyWordWrap, CSSValueBreakWord); addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitLineBreak, CSSValueAfterWhiteSpace); } else if (equalIgnoringCase(value, "false")) addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUserModify, CSSValueReadOnly); } else if (name == hiddenAttr) { addPropertyToPresentationAttributeStyle(style, CSSPropertyDisplay, CSSValueNone); } else if (name == draggableAttr) { if (equalIgnoringCase(value, "true")) { addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUserDrag, CSSValueElement); addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUserSelect, CSSValueNone); } else if (equalIgnoringCase(value, "false")) addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUserDrag, CSSValueNone); } else if (name == dirAttr) { if (equalIgnoringCase(value, "auto")) addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicodeBidi, unicodeBidiAttributeForDirAuto(this)); else { if (isValidDirAttribute(value)) addPropertyToPresentationAttributeStyle(style, CSSPropertyDirection, value); else addPropertyToPresentationAttributeStyle(style, CSSPropertyDirection, "ltr"); if (!hasTagName(bdiTag) && !hasTagName(bdoTag) && !hasTagName(outputTag)) addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicodeBidi, CSSValueEmbed); } } else if (name.matches(XMLNames::langAttr)) mapLanguageAttributeToLocale(value, style); else if (name == langAttr) { // xml:lang has a higher priority than lang. if (!fastHasAttribute(XMLNames::langAttr)) mapLanguageAttributeToLocale(value, style); } else Element::collectStyleForPresentationAttribute(name, value, style); }
void MathMLMencloseElement::collectStyleForPresentationAttribute(const QualifiedName& name, const AtomicString& value, MutableStyleProperties& style) { String val = value; if (val.isEmpty()) return; if (name == MathMLNames::notationAttr) { val.split(' ', m_notationValues); size_t notationValueSize = m_notationValues.size(); for (size_t i = 0; i < notationValueSize; i++) { if (m_notationValues[i] == "top" || m_notationValues[i] == "longdiv") { if (m_notationValues[i] == "longdiv") addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingLeft, longDivLeftPadding()); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderTopStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderTopWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingTop, ".3ex"); } else if (m_notationValues[i] == "bottom") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderBottomStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderBottomWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingBottom, ".3ex"); } else if (m_notationValues[i] == "left") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderLeftStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderLeftWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingLeft, ".3ex"); } else if (m_notationValues[i] == "right") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRightStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRightWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingRight, ".3ex"); } else if (m_notationValues[i] == "box" || m_notationValues[i] == "roundedbox") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPadding, ".3ex"); if (m_notationValues[i] == "roundedbox") addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRadius, ASCIILiteral("5px")); } else if (m_notationValues[i] == "actuarial" || m_notationValues[i] == "madruwb") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRightStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderRightWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingRight, ".3ex"); if (m_notationValues[i] == "actuarial") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderTopStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderTopWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingTop, ".3ex"); } else if (m_notationValues[i] == "madruwb") { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderBottomStyle, "solid"); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderBottomWidth, "thin"); addPropertyToPresentationAttributeStyle(style, CSSPropertyPaddingBottom, ".3ex"); } } else if (m_notationValues[i] == "radical") m_isRadicalValue = true; } } else MathMLInlineContainerElement::collectStyleForPresentationAttribute(name, value, style); }
void HTMLElement::applyBorderAttributeToStyle(const AtomicString& value, MutableStylePropertySet* style) { addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderWidth, parseBorderWidthAttribute(value), CSSPrimitiveValue::CSS_PX); addPropertyToPresentationAttributeStyle(style, CSSPropertyBorderStyle, CSSValueSolid); }
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); }