nsresult nsSVGElement::BindToTree(nsIDocument* aDocument, nsIContent* aParent, nsIContent* aBindingParent, PRBool aCompileEventHandlers) { nsresult rv = nsSVGElementBase::BindToTree(aDocument, aParent, aBindingParent, aCompileEventHandlers); NS_ENSURE_SUCCESS(rv, rv); if (!HasFlag(NODE_MAY_HAVE_STYLE)) { return NS_OK; } const nsAttrValue* oldVal = mAttrsAndChildren.GetAttr(nsGkAtoms::style); if (oldVal && oldVal->Type() == nsAttrValue::eCSSStyleRule) { // we need to force a reparse because the baseURI of the document // may have changed nsAttrValue attrValue; nsAutoString stringValue; oldVal->ToString(stringValue); // Force in data doc, since we already have a style rule ParseStyleAttribute(this, stringValue, attrValue, PR_TRUE); // Don't bother going through SetInlineStyleRule, we don't want to fire off // mutation events or document notifications anyway rv = mAttrsAndChildren.SetAndTakeAttr(nsGkAtoms::style, attrValue); NS_ENSURE_SUCCESS(rv, rv); } return NS_OK; }
bool nsStyledElementNotElementCSSInlineStyle::ParseAttribute(PRInt32 aNamespaceID, nsIAtom* aAttribute, const nsAString& aValue, nsAttrValue& aResult) { if (aNamespaceID == kNameSpaceID_None) { if (aAttribute == nsGkAtoms::style) { SetMayHaveStyle(); ParseStyleAttribute(aValue, aResult, false); return true; } if (aAttribute == nsGkAtoms::_class) { SetFlags(NODE_MAY_HAVE_CLASS); aResult.ParseAtomArray(aValue); return true; } if (aAttribute == nsGkAtoms::id) { // Store id as an atom. id="" means that the element has no id, // not that it has an emptystring as the id. RemoveFromIdTable(); if (aValue.IsEmpty()) { ClearHasID(); return false; } aResult.ParseAtom(aValue); SetHasID(); AddToIdTable(aResult.GetAtomValue()); return true; } } return nsStyledElementBase::ParseAttribute(aNamespaceID, aAttribute, aValue, aResult); }
PRBool nsStyledElement::ParseAttribute(PRInt32 aNamespaceID, nsIAtom* aAttribute, const nsAString& aValue, nsAttrValue& aResult) { if (aNamespaceID == kNameSpaceID_None) { if (aAttribute == nsGkAtoms::style) { SetFlags(NODE_MAY_HAVE_STYLE); ParseStyleAttribute(this, aValue, aResult, PR_FALSE); return PR_TRUE; } if (aAttribute == nsGkAtoms::_class) { SetFlags(NODE_MAY_HAVE_CLASS); aResult.ParseAtomArray(aValue); return PR_TRUE; } } return nsStyledElementBase::ParseAttribute(aNamespaceID, aAttribute, aValue, aResult); }
nsresult nsStyledElement::ReparseStyleAttribute(PRBool aForceInDataDoc) { if (!HasFlag(NODE_MAY_HAVE_STYLE)) { return NS_OK; } const nsAttrValue* oldVal = mAttrsAndChildren.GetAttr(nsGkAtoms::style); if (oldVal && oldVal->Type() != nsAttrValue::eCSSStyleRule) { nsAttrValue attrValue; nsAutoString stringValue; oldVal->ToString(stringValue); ParseStyleAttribute(this, stringValue, attrValue, aForceInDataDoc); // Don't bother going through SetInlineStyleRule, we don't want to fire off // mutation events or document notifications anyway nsresult rv = mAttrsAndChildren.SetAndTakeAttr(nsGkAtoms::style, attrValue); NS_ENSURE_SUCCESS(rv, rv); } return NS_OK; }