diff --git a/content/html/content/src/HTMLBRElement.cpp b/content/html/content/src/HTMLBRElement.cpp new file mode 100644 index 00000000000..b0893bf3b6e --- /dev/null +++ b/content/html/content/src/HTMLBRElement.cpp @@ -0,0 +1,110 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/dom/HTMLBRElement.h" +#include "mozilla/Util.h" + +#include "nsAttrValueInlines.h" +#include "nsGkAtoms.h" +#include "nsStyleConsts.h" +#include "nsMappedAttributes.h" +#include "nsRuleData.h" + + +NS_IMPL_NS_NEW_HTML_ELEMENT(BR) + +DOMCI_NODE_DATA(HTMLBRElement, mozilla::dom::HTMLBRElement) + +namespace mozilla { +namespace dom { + +HTMLBRElement::HTMLBRElement(already_AddRefed aNodeInfo) + : nsGenericHTMLElement(aNodeInfo) +{ +} + +HTMLBRElement::~HTMLBRElement() +{ +} + +NS_IMPL_ADDREF_INHERITED(HTMLBRElement, Element) +NS_IMPL_RELEASE_INHERITED(HTMLBRElement, Element) + + +// QueryInterface implementation for HTMLBRElement +NS_INTERFACE_TABLE_HEAD(HTMLBRElement) + NS_HTML_CONTENT_INTERFACE_TABLE1(HTMLBRElement, nsIDOMHTMLBRElement) + NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(HTMLBRElement, + nsGenericHTMLElement) +NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLBRElement) + + +NS_IMPL_ELEMENT_CLONE(HTMLBRElement) + + +NS_IMPL_STRING_ATTR(HTMLBRElement, Clear, clear) + +static const nsAttrValue::EnumTable kClearTable[] = { + { "left", NS_STYLE_CLEAR_LEFT }, + { "right", NS_STYLE_CLEAR_RIGHT }, + { "all", NS_STYLE_CLEAR_LEFT_AND_RIGHT }, + { "both", NS_STYLE_CLEAR_LEFT_AND_RIGHT }, + { 0 } +}; + +bool +HTMLBRElement::ParseAttribute(int32_t aNamespaceID, + nsIAtom* aAttribute, + const nsAString& aValue, + nsAttrValue& aResult) +{ + if (aAttribute == nsGkAtoms::clear && aNamespaceID == kNameSpaceID_None) { + return aResult.ParseEnumValue(aValue, kClearTable, false); + } + + return nsGenericHTMLElement::ParseAttribute(aNamespaceID, aAttribute, aValue, + aResult); +} + +static void +MapAttributesIntoRule(const nsMappedAttributes* aAttributes, + nsRuleData* aData) +{ + if (aData->mSIDs & NS_STYLE_INHERIT_BIT(Display)) { + nsCSSValue* clear = aData->ValueForClear(); + if (clear->GetUnit() == eCSSUnit_Null) { + const nsAttrValue* value = aAttributes->GetAttr(nsGkAtoms::clear); + if (value && value->Type() == nsAttrValue::eEnum) + clear->SetIntValue(value->GetEnumValue(), eCSSUnit_Enumerated); + } + } + + nsGenericHTMLElement::MapCommonAttributesInto(aAttributes, aData); +} + +NS_IMETHODIMP_(bool) +HTMLBRElement::IsAttributeMapped(const nsIAtom* aAttribute) const +{ + static const MappedAttributeEntry attributes[] = { + { &nsGkAtoms::clear }, + { nullptr } + }; + + static const MappedAttributeEntry* const map[] = { + attributes, + sCommonAttributeMap, + }; + + return FindAttributeDependence(aAttribute, map); +} + +nsMapRuleToAttributesFunc +HTMLBRElement::GetAttributeMappingFunction() const +{ + return &MapAttributesIntoRule; +} + +} // namespace dom +} // namespace mozilla diff --git a/content/html/content/src/HTMLBRElement.h b/content/html/content/src/HTMLBRElement.h new file mode 100644 index 00000000000..77eea51edfd --- /dev/null +++ b/content/html/content/src/HTMLBRElement.h @@ -0,0 +1,52 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_HTMLBRElement_h +#define mozilla_dom_HTMLBRElement_h + +#include "nsIDOMHTMLBRElement.h" +#include "nsGenericHTMLElement.h" + +namespace mozilla { +namespace dom { + +class HTMLBRElement MOZ_FINAL : public nsGenericHTMLElement, + public nsIDOMHTMLBRElement +{ +public: + HTMLBRElement(already_AddRefed aNodeInfo); + virtual ~HTMLBRElement(); + + // nsISupports + NS_DECL_ISUPPORTS_INHERITED + + // nsIDOMNode + NS_FORWARD_NSIDOMNODE_TO_NSINODE + + // nsIDOMElement + NS_FORWARD_NSIDOMELEMENT_TO_GENERIC + + // nsIDOMHTMLElement + NS_FORWARD_NSIDOMHTMLELEMENT_TO_GENERIC + + // nsIDOMHTMLBRElement + NS_DECL_NSIDOMHTMLBRELEMENT + + virtual bool ParseAttribute(int32_t aNamespaceID, + nsIAtom* aAttribute, + const nsAString& aValue, + nsAttrValue& aResult); + NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const; + virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const; + virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const; + virtual nsXPCClassInfo* GetClassInfo(); + virtual nsIDOMNode* AsDOMNode() { return this; } +}; + +} // namespace dom +} // namespace mozilla + +#endif + diff --git a/content/html/content/src/Makefile.in b/content/html/content/src/Makefile.in index d9af032f895..5bef7dad9c5 100644 --- a/content/html/content/src/Makefile.in +++ b/content/html/content/src/Makefile.in @@ -32,6 +32,7 @@ EXPORTS_NAMESPACES = mozilla/dom EXPORTS_mozilla/dom = \ HTMLAnchorElement.h \ HTMLBodyElement.h \ + HTMLBRElement.h \ HTMLDataListElement.h \ HTMLDivElement.h \ HTMLFontElement.h \ @@ -69,7 +70,7 @@ CPPSRCS = \ HTMLElement.cpp \ HTMLAnchorElement.cpp \ nsHTMLAreaElement.cpp \ - nsHTMLBRElement.cpp \ + HTMLBRElement.cpp \ HTMLBodyElement.cpp \ nsHTMLButtonElement.cpp \ HTMLCanvasElement.cpp \ diff --git a/content/html/content/src/nsHTMLBRElement.cpp b/content/html/content/src/nsHTMLBRElement.cpp deleted file mode 100644 index 4ef11fda48d..00000000000 --- a/content/html/content/src/nsHTMLBRElement.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "mozilla/Util.h" - -#include "nsIDOMHTMLBRElement.h" -#include "nsIDOMEventTarget.h" -#include "nsGenericHTMLElement.h" -#include "nsAttrValueInlines.h" -#include "nsGkAtoms.h" -#include "nsStyleConsts.h" -#include "nsMappedAttributes.h" -#include "nsRuleData.h" - -using namespace mozilla; -using namespace mozilla::dom; - -class nsHTMLBRElement : public nsGenericHTMLElement, - public nsIDOMHTMLBRElement -{ -public: - nsHTMLBRElement(already_AddRefed aNodeInfo); - virtual ~nsHTMLBRElement(); - - // nsISupports - NS_DECL_ISUPPORTS_INHERITED - - // nsIDOMNode - NS_FORWARD_NSIDOMNODE_TO_NSINODE - - // nsIDOMElement - NS_FORWARD_NSIDOMELEMENT_TO_GENERIC - - // nsIDOMHTMLElement - NS_FORWARD_NSIDOMHTMLELEMENT_TO_GENERIC - - // nsIDOMHTMLBRElement - NS_DECL_NSIDOMHTMLBRELEMENT - - virtual bool ParseAttribute(int32_t aNamespaceID, - nsIAtom* aAttribute, - const nsAString& aValue, - nsAttrValue& aResult); - NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const; - virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const; - virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const; - virtual nsXPCClassInfo* GetClassInfo(); - virtual nsIDOMNode* AsDOMNode() { return this; } -}; - - -NS_IMPL_NS_NEW_HTML_ELEMENT(BR) - - -nsHTMLBRElement::nsHTMLBRElement(already_AddRefed aNodeInfo) - : nsGenericHTMLElement(aNodeInfo) -{ -} - -nsHTMLBRElement::~nsHTMLBRElement() -{ -} - -NS_IMPL_ADDREF_INHERITED(nsHTMLBRElement, Element) -NS_IMPL_RELEASE_INHERITED(nsHTMLBRElement, Element) - - -DOMCI_NODE_DATA(HTMLBRElement, nsHTMLBRElement) - -// QueryInterface implementation for nsHTMLBRElement -NS_INTERFACE_TABLE_HEAD(nsHTMLBRElement) - NS_HTML_CONTENT_INTERFACE_TABLE1(nsHTMLBRElement, nsIDOMHTMLBRElement) - NS_HTML_CONTENT_INTERFACE_TABLE_TO_MAP_SEGUE(nsHTMLBRElement, - nsGenericHTMLElement) -NS_HTML_CONTENT_INTERFACE_TABLE_TAIL_CLASSINFO(HTMLBRElement) - - -NS_IMPL_ELEMENT_CLONE(nsHTMLBRElement) - - -NS_IMPL_STRING_ATTR(nsHTMLBRElement, Clear, clear) - -static const nsAttrValue::EnumTable kClearTable[] = { - { "left", NS_STYLE_CLEAR_LEFT }, - { "right", NS_STYLE_CLEAR_RIGHT }, - { "all", NS_STYLE_CLEAR_LEFT_AND_RIGHT }, - { "both", NS_STYLE_CLEAR_LEFT_AND_RIGHT }, - { 0 } -}; - -bool -nsHTMLBRElement::ParseAttribute(int32_t aNamespaceID, - nsIAtom* aAttribute, - const nsAString& aValue, - nsAttrValue& aResult) -{ - if (aAttribute == nsGkAtoms::clear && aNamespaceID == kNameSpaceID_None) { - return aResult.ParseEnumValue(aValue, kClearTable, false); - } - - return nsGenericHTMLElement::ParseAttribute(aNamespaceID, aAttribute, aValue, - aResult); -} - -static void -MapAttributesIntoRule(const nsMappedAttributes* aAttributes, - nsRuleData* aData) -{ - if (aData->mSIDs & NS_STYLE_INHERIT_BIT(Display)) { - nsCSSValue* clear = aData->ValueForClear(); - if (clear->GetUnit() == eCSSUnit_Null) { - const nsAttrValue* value = aAttributes->GetAttr(nsGkAtoms::clear); - if (value && value->Type() == nsAttrValue::eEnum) - clear->SetIntValue(value->GetEnumValue(), eCSSUnit_Enumerated); - } - } - - nsGenericHTMLElement::MapCommonAttributesInto(aAttributes, aData); -} - -NS_IMETHODIMP_(bool) -nsHTMLBRElement::IsAttributeMapped(const nsIAtom* aAttribute) const -{ - static const MappedAttributeEntry attributes[] = { - { &nsGkAtoms::clear }, - { nullptr } - }; - - static const MappedAttributeEntry* const map[] = { - attributes, - sCommonAttributeMap, - }; - - return FindAttributeDependence(aAttribute, map); -} - -nsMapRuleToAttributesFunc -nsHTMLBRElement::GetAttributeMappingFunction() const -{ - return &MapAttributesIntoRule; -}