Bug 291789 part 1 - Make various nsHTMLEditUtils methods take nsINode instead of Element; r=ehsan

This commit is contained in:
Aryeh Gregor 2012-07-27 17:03:28 +03:00
parent c80897316e
commit bcae4447b0
4 changed files with 128 additions and 133 deletions

View File

@ -1146,8 +1146,7 @@ nsHTMLEditRules::AppendInnerFormatNodes(nsCOMArray<nsIDOMNode>& aArray,
child;
child = child->GetNextSibling()) {
bool isBlock = IsBlockNode(child->AsDOMNode());
bool isFormat = child->IsElement() &&
nsHTMLEditUtils::IsFormatNode(child->AsElement());
bool isFormat = nsHTMLEditUtils::IsFormatNode(child);
if (isBlock && !isFormat) {
// if it's a div, etc, recurse
AppendInnerFormatNodes(aArray, child);
@ -2813,8 +2812,7 @@ nsresult
nsHTMLEditRules::DeleteNonTableElements(nsINode* aNode)
{
MOZ_ASSERT(aNode);
if (!aNode->IsElement() ||
!nsHTMLEditUtils::IsTableElementButNotTable(aNode->AsElement())) {
if (!nsHTMLEditUtils::IsTableElementButNotTable(aNode)) {
return mHTMLEditor->DeleteNode(aNode->AsDOMNode());
}
@ -5839,7 +5837,7 @@ nsHTMLEditRules::LookInsideDivBQandList(nsCOMArray<nsIDOMNode>& aNodeArray)
while (curNode->IsElement() &&
(curNode->AsElement()->IsHTML(nsGkAtoms::div) ||
nsHTMLEditUtils::IsList(curNode->AsElement()) ||
nsHTMLEditUtils::IsList(curNode) ||
curNode->AsElement()->IsHTML(nsGkAtoms::blockquote))) {
// dive as long as there is only one child, and it is a list, div, blockquote
PRUint32 numChildren = mHTMLEditor->CountEditableChildren(curNode);
@ -6205,15 +6203,14 @@ nsINode*
nsHTMLEditRules::IsInListItem(nsINode* aNode)
{
NS_ENSURE_TRUE(aNode, nullptr);
if (aNode->IsElement() && nsHTMLEditUtils::IsListItem(aNode->AsElement())) {
if (nsHTMLEditUtils::IsListItem(aNode)) {
return aNode;
}
nsINode* parent = aNode->GetNodeParent();
while (parent && mHTMLEditor->IsDescendantOfEditorRoot(parent) &&
!(parent->IsElement() &&
nsHTMLEditUtils::IsTableElement(parent->AsElement()))) {
if (nsHTMLEditUtils::IsListItem(parent->AsElement())) {
!nsHTMLEditUtils::IsTableElement(parent)) {
if (nsHTMLEditUtils::IsListItem(parent)) {
return parent;
}
parent = parent->GetNodeParent();

View File

@ -6,7 +6,7 @@
#include "./../../mozilla-config.h" // for MOZ_MEDIA
#include "mozilla/Assertions.h" // for MOZ_ASSERT, etc
#include "mozilla/Util.h" // for ArrayLength
#include "mozilla/dom/Element.h" // for Element
#include "mozilla/dom/Element.h" // for Element, nsINode
#include "nsAString.h" // for nsAString_internal::IsEmpty
#include "nsCOMPtr.h" // for nsCOMPtr, operator==, etc
#include "nsCaseTreatment.h"
@ -30,9 +30,9 @@ using namespace mozilla;
///////////////////////////////////////////////////////////////////////////
//
bool
nsHTMLEditUtils::IsBig(nsIDOMNode *node)
nsHTMLEditUtils::IsBig(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::big);
return nsEditor::NodeIsType(aNode, nsEditProperty::big);
}
@ -40,18 +40,18 @@ nsHTMLEditUtils::IsBig(nsIDOMNode *node)
// IsInlineStyle true if node is an inline style
//
bool
nsHTMLEditUtils::IsInlineStyle(nsIDOMNode *node)
nsHTMLEditUtils::IsInlineStyle(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsInlineStyle");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsInlineStyle(element);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsInlineStyle");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsInlineStyle(node);
}
bool
nsHTMLEditUtils::IsInlineStyle(dom::Element* aElement)
nsHTMLEditUtils::IsInlineStyle(nsINode* aNode)
{
MOZ_ASSERT(aElement);
nsIAtom* nodeAtom = aElement->Tag();
MOZ_ASSERT(aNode);
nsIAtom* nodeAtom = aNode->Tag();
return (nodeAtom == nsEditProperty::b)
|| (nodeAtom == nsEditProperty::i)
|| (nodeAtom == nsEditProperty::u)
@ -70,18 +70,18 @@ nsHTMLEditUtils::IsInlineStyle(dom::Element* aElement)
// IsFormatNode true if node is a format node
//
bool
nsHTMLEditUtils::IsFormatNode(nsIDOMNode *node)
nsHTMLEditUtils::IsFormatNode(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsFormatNode");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsFormatNode(element);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsFormatNode");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsFormatNode(node);
}
bool
nsHTMLEditUtils::IsFormatNode(dom::Element* aElement)
nsHTMLEditUtils::IsFormatNode(nsINode* aNode)
{
MOZ_ASSERT(aElement);
nsIAtom* nodeAtom = aElement->Tag();
MOZ_ASSERT(aNode);
nsIAtom* nodeAtom = aNode->Tag();
return (nodeAtom == nsEditProperty::p)
|| (nodeAtom == nsEditProperty::pre)
|| (nodeAtom == nsEditProperty::h1)
@ -97,10 +97,10 @@ nsHTMLEditUtils::IsFormatNode(dom::Element* aElement)
// IsNodeThatCanOutdent true if node is a list, list item, or blockquote
//
bool
nsHTMLEditUtils::IsNodeThatCanOutdent(nsIDOMNode *node)
nsHTMLEditUtils::IsNodeThatCanOutdent(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsNodeThatCanOutdent");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(node);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsNodeThatCanOutdent");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(aNode);
return (nodeAtom == nsEditProperty::ul)
|| (nodeAtom == nsEditProperty::ol)
|| (nodeAtom == nsEditProperty::dl)
@ -113,9 +113,9 @@ nsHTMLEditUtils::IsNodeThatCanOutdent(nsIDOMNode *node)
///////////////////////////////////////////////////////////////////////////
//
bool
nsHTMLEditUtils::IsSmall(nsIDOMNode *node)
nsHTMLEditUtils::IsSmall(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::small);
return nsEditor::NodeIsType(aNode, nsEditProperty::small);
}
@ -127,10 +127,10 @@ nsHTMLEditUtils::IsSmall(nsIDOMNode *node)
// IsHeader: true if node an html header
//
bool
nsHTMLEditUtils::IsHeader(nsIDOMNode *node)
nsHTMLEditUtils::IsHeader(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsHeader");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(node);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsHeader");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(aNode);
return (nodeAtom == nsEditProperty::h1)
|| (nodeAtom == nsEditProperty::h2)
|| (nodeAtom == nsEditProperty::h3)
@ -144,9 +144,9 @@ nsHTMLEditUtils::IsHeader(nsIDOMNode *node)
// IsParagraph: true if node an html paragraph
//
bool
nsHTMLEditUtils::IsParagraph(nsIDOMNode *node)
nsHTMLEditUtils::IsParagraph(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::p);
return nsEditor::NodeIsType(aNode, nsEditProperty::p);
}
@ -154,9 +154,9 @@ nsHTMLEditUtils::IsParagraph(nsIDOMNode *node)
// IsHR: true if node an horizontal rule
//
bool
nsHTMLEditUtils::IsHR(nsIDOMNode *node)
nsHTMLEditUtils::IsHR(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::hr);
return nsEditor::NodeIsType(aNode, nsEditProperty::hr);
}
@ -164,15 +164,15 @@ nsHTMLEditUtils::IsHR(nsIDOMNode *node)
// IsListItem: true if node an html list item
//
bool
nsHTMLEditUtils::IsListItem(nsIDOMNode *node)
nsHTMLEditUtils::IsListItem(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsListItem");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsListItem(element);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsListItem");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsListItem(node);
}
bool
nsHTMLEditUtils::IsListItem(dom::Element* node)
nsHTMLEditUtils::IsListItem(nsINode* node)
{
MOZ_ASSERT(node);
nsCOMPtr<nsIAtom> nodeAtom = node->Tag();
@ -186,15 +186,15 @@ nsHTMLEditUtils::IsListItem(dom::Element* node)
// IsTableElement: true if node an html table, td, tr, ...
//
bool
nsHTMLEditUtils::IsTableElement(nsIDOMNode *node)
nsHTMLEditUtils::IsTableElement(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null node passed to nsHTMLEditor::IsTableElement");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsTableElement(element);
NS_PRECONDITION(aNode, "null node passed to nsHTMLEditor::IsTableElement");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsTableElement(node);
}
bool
nsHTMLEditUtils::IsTableElement(dom::Element* node)
nsHTMLEditUtils::IsTableElement(nsINode* node)
{
MOZ_ASSERT(node);
nsCOMPtr<nsIAtom> nodeAtom = node->Tag();
@ -212,15 +212,15 @@ nsHTMLEditUtils::IsTableElement(dom::Element* node)
// IsTableElementButNotTable: true if node an html td, tr, ... (doesn't include table)
//
bool
nsHTMLEditUtils::IsTableElementButNotTable(nsIDOMNode *node)
nsHTMLEditUtils::IsTableElementButNotTable(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null node passed to nsHTMLEditor::IsTableElementButNotTable");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsTableElementButNotTable(element);
NS_PRECONDITION(aNode, "null node passed to nsHTMLEditor::IsTableElementButNotTable");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsTableElementButNotTable(node);
}
bool
nsHTMLEditUtils::IsTableElementButNotTable(dom::Element* aNode)
nsHTMLEditUtils::IsTableElementButNotTable(nsINode* aNode)
{
MOZ_ASSERT(aNode);
nsCOMPtr<nsIAtom> nodeAtom = aNode->Tag();
@ -237,18 +237,18 @@ nsHTMLEditUtils::IsTableElementButNotTable(dom::Element* aNode)
// IsTable: true if node an html table
//
bool
nsHTMLEditUtils::IsTable(nsIDOMNode *node)
nsHTMLEditUtils::IsTable(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::table);
return nsEditor::NodeIsType(aNode, nsEditProperty::table);
}
///////////////////////////////////////////////////////////////////////////
// IsTableRow: true if node an html tr
//
bool
nsHTMLEditUtils::IsTableRow(nsIDOMNode *node)
nsHTMLEditUtils::IsTableRow(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::tr);
return nsEditor::NodeIsType(aNode, nsEditProperty::tr);
}
@ -256,15 +256,15 @@ nsHTMLEditUtils::IsTableRow(nsIDOMNode *node)
// IsTableCell: true if node an html td or th
//
bool
nsHTMLEditUtils::IsTableCell(nsIDOMNode *node)
nsHTMLEditUtils::IsTableCell(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsTableCell");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsTableCell(element);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsTableCell");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsTableCell(node);
}
bool
nsHTMLEditUtils::IsTableCell(dom::Element* node)
nsHTMLEditUtils::IsTableCell(nsINode* node)
{
MOZ_ASSERT(node);
nsCOMPtr<nsIAtom> nodeAtom = node->Tag();
@ -277,10 +277,10 @@ nsHTMLEditUtils::IsTableCell(dom::Element* node)
// IsTableCell: true if node an html td or th
//
bool
nsHTMLEditUtils::IsTableCellOrCaption(nsIDOMNode *node)
nsHTMLEditUtils::IsTableCellOrCaption(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsTableCell");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(node);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsTableCell");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(aNode);
return (nodeAtom == nsEditProperty::td)
|| (nodeAtom == nsEditProperty::th)
|| (nodeAtom == nsEditProperty::caption);
@ -291,15 +291,15 @@ nsHTMLEditUtils::IsTableCellOrCaption(nsIDOMNode *node)
// IsList: true if node an html list
//
bool
nsHTMLEditUtils::IsList(nsIDOMNode *node)
nsHTMLEditUtils::IsList(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsList");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsList(element);
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsList");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsList(node);
}
bool
nsHTMLEditUtils::IsList(dom::Element* node)
nsHTMLEditUtils::IsList(nsINode* node)
{
MOZ_ASSERT(node);
nsCOMPtr<nsIAtom> nodeAtom = node->Tag();
@ -313,9 +313,9 @@ nsHTMLEditUtils::IsList(dom::Element* node)
// IsOrderedList: true if node an html ordered list
//
bool
nsHTMLEditUtils::IsOrderedList(nsIDOMNode *node)
nsHTMLEditUtils::IsOrderedList(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::ol);
return nsEditor::NodeIsType(aNode, nsEditProperty::ol);
}
@ -323,9 +323,9 @@ nsHTMLEditUtils::IsOrderedList(nsIDOMNode *node)
// IsUnorderedList: true if node an html unordered list
//
bool
nsHTMLEditUtils::IsUnorderedList(nsIDOMNode *node)
nsHTMLEditUtils::IsUnorderedList(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::ul);
return nsEditor::NodeIsType(aNode, nsEditProperty::ul);
}
@ -333,9 +333,9 @@ nsHTMLEditUtils::IsUnorderedList(nsIDOMNode *node)
// IsBlockquote: true if node an html blockquote node
//
bool
nsHTMLEditUtils::IsBlockquote(nsIDOMNode *node)
nsHTMLEditUtils::IsBlockquote(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::blockquote);
return nsEditor::NodeIsType(aNode, nsEditProperty::blockquote);
}
@ -343,9 +343,9 @@ nsHTMLEditUtils::IsBlockquote(nsIDOMNode *node)
// IsPre: true if node an html pre node
//
bool
nsHTMLEditUtils::IsPre(nsIDOMNode *node)
nsHTMLEditUtils::IsPre(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::pre);
return nsEditor::NodeIsType(aNode, nsEditProperty::pre);
}
@ -353,9 +353,9 @@ nsHTMLEditUtils::IsPre(nsIDOMNode *node)
// IsImage: true if node an html image node
//
bool
nsHTMLEditUtils::IsImage(nsIDOMNode *node)
nsHTMLEditUtils::IsImage(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::img);
return nsEditor::NodeIsType(aNode, nsEditProperty::img);
}
bool
@ -375,21 +375,21 @@ nsHTMLEditUtils::IsLink(nsIDOMNode *aNode)
bool
nsHTMLEditUtils::IsNamedAnchor(nsIDOMNode *aNode)
{
nsCOMPtr<dom::Element> element = do_QueryInterface(aNode);
return element && IsNamedAnchor(element);
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsNamedAnchor(node);
}
bool
nsHTMLEditUtils::IsNamedAnchor(dom::Element* aNode)
nsHTMLEditUtils::IsNamedAnchor(nsINode* aNode)
{
MOZ_ASSERT(aNode);
if (!aNode->IsHTML(nsGkAtoms::a)) {
if (!aNode->IsElement() || !aNode->AsElement()->IsHTML(nsGkAtoms::a)) {
return false;
}
nsAutoString text;
return aNode->GetAttr(kNameSpaceID_None, nsGkAtoms::name, text) &&
!text.IsEmpty();
return aNode->AsElement()->GetAttr(kNameSpaceID_None, nsGkAtoms::name,
text) && !text.IsEmpty();
}
@ -397,9 +397,9 @@ nsHTMLEditUtils::IsNamedAnchor(dom::Element* aNode)
// IsDiv: true if node an html div node
//
bool
nsHTMLEditUtils::IsDiv(nsIDOMNode *node)
nsHTMLEditUtils::IsDiv(nsIDOMNode* aNode)
{
return nsEditor::NodeIsType(node, nsEditProperty::div);
return nsEditor::NodeIsType(aNode, nsEditProperty::div);
}
@ -407,9 +407,9 @@ nsHTMLEditUtils::IsDiv(nsIDOMNode *node)
// IsMozDiv: true if node an html div node with type = _moz
//
bool
nsHTMLEditUtils::IsMozDiv(nsIDOMNode *node)
nsHTMLEditUtils::IsMozDiv(nsIDOMNode* aNode)
{
if (IsDiv(node) && nsTextEditUtils::HasMozAttr(node)) return true;
if (IsDiv(aNode) && nsTextEditUtils::HasMozAttr(aNode)) return true;
return false;
}
@ -422,24 +422,28 @@ bool
nsHTMLEditUtils::IsMailCite(nsIDOMNode* aNode)
{
NS_PRECONDITION(aNode, "null parent passed to nsHTMLEditUtils::IsMailCite");
nsCOMPtr<dom::Element> element = do_QueryInterface(aNode);
return element && IsMailCite(element);
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsMailCite(node);
}
bool
nsHTMLEditUtils::IsMailCite(dom::Element* aElement)
nsHTMLEditUtils::IsMailCite(nsINode* aNode)
{
MOZ_ASSERT(aElement);
MOZ_ASSERT(aNode);
// don't ask me why, but our html mailcites are id'd by "type=cite"...
if (aElement->AttrValueIs(kNameSpaceID_None, nsGkAtoms::type,
NS_LITERAL_STRING("cite"), eIgnoreCase)) {
if (aNode->IsElement() &&
aNode->AsElement()->AttrValueIs(kNameSpaceID_None, nsGkAtoms::type,
NS_LITERAL_STRING("cite"),
eIgnoreCase)) {
return true;
}
// ... but our plaintext mailcites by "_moz_quote=true". go figure.
if (aElement->AttrValueIs(kNameSpaceID_None, nsGkAtoms::mozquote,
NS_LITERAL_STRING("true"), eIgnoreCase)) {
if (aNode->IsElement() &&
aNode->AsElement()->AttrValueIs(kNameSpaceID_None, nsGkAtoms::mozquote,
NS_LITERAL_STRING("true"),
eIgnoreCase)) {
return true;
}
@ -451,18 +455,18 @@ nsHTMLEditUtils::IsMailCite(dom::Element* aElement)
// IsFormWidget: true if node is a form widget of some kind
//
bool
nsHTMLEditUtils::IsFormWidget(nsIDOMNode *node)
nsHTMLEditUtils::IsFormWidget(nsIDOMNode* aNode)
{
NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsFormWidget");
nsCOMPtr<dom::Element> element = do_QueryInterface(node);
return element && IsFormWidget(element);
NS_PRECONDITION(aNode, "null node passed to nsHTMLEditUtils::IsFormWidget");
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
return node && IsFormWidget(node);
}
bool
nsHTMLEditUtils::IsFormWidget(dom::Element* node)
nsHTMLEditUtils::IsFormWidget(nsINode* aNode)
{
MOZ_ASSERT(node);
nsCOMPtr<nsIAtom> nodeAtom = node->Tag();
MOZ_ASSERT(aNode);
nsCOMPtr<nsIAtom> nodeAtom = aNode->Tag();
return (nodeAtom == nsEditProperty::textarea)
|| (nodeAtom == nsEditProperty::select)
|| (nodeAtom == nsEditProperty::button)
@ -474,7 +478,7 @@ nsHTMLEditUtils::IsFormWidget(dom::Element* node)
}
bool
nsHTMLEditUtils::SupportsAlignAttr(nsIDOMNode * aNode)
nsHTMLEditUtils::SupportsAlignAttr(nsIDOMNode* aNode)
{
NS_PRECONDITION(aNode, "null node passed to nsHTMLEditUtils::SupportsAlignAttr");
nsCOMPtr<nsIAtom> nodeAtom = nsEditor::GetTag(aNode);

View File

@ -8,13 +8,8 @@
#include "prtypes.h" // for PRInt32
namespace mozilla {
namespace dom {
class Element;
} // namespace dom
} // namespace mozilla
class nsIDOMNode;
class nsINode;
class nsHTMLEditUtils
{
@ -24,26 +19,26 @@ public:
static bool IsSmall(nsIDOMNode *aNode);
// from nsHTMLEditRules:
static bool IsInlineStyle(mozilla::dom::Element* aNode);
static bool IsInlineStyle(nsINode* aNode);
static bool IsInlineStyle(nsIDOMNode *aNode);
static bool IsFormatNode(mozilla::dom::Element* aNode);
static bool IsFormatNode(nsINode* aNode);
static bool IsFormatNode(nsIDOMNode *aNode);
static bool IsNodeThatCanOutdent(nsIDOMNode *aNode);
static bool IsHeader(nsIDOMNode *aNode);
static bool IsParagraph(nsIDOMNode *aNode);
static bool IsHR(nsIDOMNode *aNode);
static bool IsListItem(mozilla::dom::Element* aNode);
static bool IsListItem(nsINode* aNode);
static bool IsListItem(nsIDOMNode *aNode);
static bool IsTable(nsIDOMNode *aNode);
static bool IsTableRow(nsIDOMNode *aNode);
static bool IsTableElement(mozilla::dom::Element* aNode);
static bool IsTableElement(nsINode* aNode);
static bool IsTableElement(nsIDOMNode *aNode);
static bool IsTableElementButNotTable(mozilla::dom::Element* aNode);
static bool IsTableElementButNotTable(nsINode* aNode);
static bool IsTableElementButNotTable(nsIDOMNode *aNode);
static bool IsTableCell(mozilla::dom::Element* node);
static bool IsTableCell(nsINode* node);
static bool IsTableCell(nsIDOMNode *aNode);
static bool IsTableCellOrCaption(nsIDOMNode *aNode);
static bool IsList(mozilla::dom::Element* aNode);
static bool IsList(nsINode* aNode);
static bool IsList(nsIDOMNode *aNode);
static bool IsOrderedList(nsIDOMNode *aNode);
static bool IsUnorderedList(nsIDOMNode *aNode);
@ -52,13 +47,13 @@ public:
static bool IsAnchor(nsIDOMNode *aNode);
static bool IsImage(nsIDOMNode *aNode);
static bool IsLink(nsIDOMNode *aNode);
static bool IsNamedAnchor(mozilla::dom::Element* aNode);
static bool IsNamedAnchor(nsINode* aNode);
static bool IsNamedAnchor(nsIDOMNode *aNode);
static bool IsDiv(nsIDOMNode *aNode);
static bool IsMozDiv(nsIDOMNode *aNode);
static bool IsMailCite(mozilla::dom::Element* aNode);
static bool IsMailCite(nsINode* aNode);
static bool IsMailCite(nsIDOMNode *aNode);
static bool IsFormWidget(mozilla::dom::Element* aNode);
static bool IsFormWidget(nsINode* aNode);
static bool IsFormWidget(nsIDOMNode *aNode);
static bool SupportsAlignAttr(nsIDOMNode *aNode);
static bool CanContain(PRInt32 aParent, PRInt32 aChild);

View File

@ -4465,20 +4465,18 @@ nsHTMLEditor::IsEmptyNodeImpl(nsINode* aNode,
// want to treat them as such. Also, don't call ListItems or table
// cells empty if caller desires. Form Widgets not empty.
if (!IsContainer(aNode->AsDOMNode()) ||
(aNode->IsElement() &&
(nsHTMLEditUtils::IsNamedAnchor(aNode->AsElement()) ||
nsHTMLEditUtils::IsFormWidget(aNode->AsElement()) ||
(aListOrCellNotEmpty &&
(nsHTMLEditUtils::IsListItem(aNode->AsElement()) ||
nsHTMLEditUtils::IsTableCell(aNode->AsElement())))))) {
(nsHTMLEditUtils::IsNamedAnchor(aNode) ||
nsHTMLEditUtils::IsFormWidget(aNode) ||
(aListOrCellNotEmpty &&
(nsHTMLEditUtils::IsListItem(aNode) ||
nsHTMLEditUtils::IsTableCell(aNode))))) {
*outIsEmptyNode = false;
return NS_OK;
}
// need this for later
bool isListItemOrCell = aNode->IsElement() &&
(nsHTMLEditUtils::IsListItem(aNode->AsElement()) ||
nsHTMLEditUtils::IsTableCell(aNode->AsElement()));
bool isListItemOrCell = nsHTMLEditUtils::IsListItem(aNode) ||
nsHTMLEditUtils::IsTableCell(aNode);
// loop over children of node. if no children, or all children are either
// empty text nodes or non-editable, then node qualifies as empty
@ -4510,12 +4508,13 @@ nsHTMLEditor::IsEmptyNodeImpl(nsINode* aNode,
// if they contain other lists or tables
if (child->IsElement()) {
if (isListItemOrCell) {
if (nsHTMLEditUtils::IsList(child->AsElement()) || child->IsHTML(nsGkAtoms::table)) {
if (nsHTMLEditUtils::IsList(child) ||
child->IsHTML(nsGkAtoms::table)) {
// break out if we find we aren't empty
*outIsEmptyNode = false;
return NS_OK;
}
} else if (nsHTMLEditUtils::IsFormWidget(child->AsElement())) {
} else if (nsHTMLEditUtils::IsFormWidget(child)) {
// is it a form widget?
// break out if we find we aren't empty
*outIsEmptyNode = false;