From 114013d2ea239291cc06286dd37b33722ca655ee Mon Sep 17 00:00:00 2001 From: "kin%netscape.com" Date: Fri, 30 Mar 2001 14:39:29 +0000 Subject: [PATCH] Fix for Normal->ViewSource->Normal dataloss bugs 73659 (TextArea tag) and 55224 (Map tag). Added IsTextarea() and IsMap() methods, factored out common code for Is*() methods into NodeIsType(). r=jfrancis@netscpae.com sr=sfraser@netscape.com git-svn-id: svn://10.0.0.236/trunk@90892 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/editor/base/nsHTMLEditUtils.cpp | 196 +++++------------- mozilla/editor/base/nsHTMLEditUtils.h | 5 + mozilla/editor/base/nsHTMLEditor.cpp | 3 +- .../editor/libeditor/html/nsHTMLEditUtils.cpp | 196 +++++------------- .../editor/libeditor/html/nsHTMLEditUtils.h | 5 + .../editor/libeditor/html/nsHTMLEditor.cpp | 3 +- 6 files changed, 116 insertions(+), 292 deletions(-) diff --git a/mozilla/editor/base/nsHTMLEditUtils.cpp b/mozilla/editor/base/nsHTMLEditUtils.cpp index 787aa3044b2..97d5201f2ff 100644 --- a/mozilla/editor/base/nsHTMLEditUtils.cpp +++ b/mozilla/editor/base/nsHTMLEditUtils.cpp @@ -28,6 +28,21 @@ #include "nsIDOMNodeList.h" #include "nsIDOMHTMLAnchorElement.h" +PRBool +nsHTMLEditUtils::NodeIsType(nsIDOMNode *aNode, const nsAReadableString& aTag) +{ + NS_PRECONDITION(aNode, "null node passed to nsHTMLEditUtils::NodeIsType"); + if (aNode) + { + nsAutoString tag; + nsEditor::GetTagString(aNode,tag); + tag.ToLowerCase(); + if (tag.Equals(aTag)) + return PR_TRUE; + } + return PR_FALSE; +} + /******************************************************** * helper methods from nsTextEditRules ********************************************************/ @@ -38,18 +53,7 @@ PRBool nsHTMLEditUtils::IsBody(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsBody"); - if (node) - { - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("body")) - { - return PR_TRUE; - } - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("body")); } @@ -60,15 +64,7 @@ nsHTMLEditUtils::IsBody(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsBreak(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsBreak"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("br")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("br")); } @@ -78,15 +74,7 @@ nsHTMLEditUtils::IsBreak(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsBig(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsBig"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("big")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("big")); } @@ -96,15 +84,7 @@ nsHTMLEditUtils::IsBig(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsSmall(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsSmall"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("small")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("small")); } @@ -202,15 +182,7 @@ nsHTMLEditUtils::IsHeader(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsParagraph(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsParagraph"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("p")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("p")); } @@ -260,13 +232,7 @@ nsHTMLEditUtils::IsTableElement(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsTable(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditor::IsTable"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - if (tag.EqualsWithConversion("table")) - return PR_TRUE; - - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("table")); } /////////////////////////////////////////////////////////////////////////// @@ -275,15 +241,7 @@ nsHTMLEditUtils::IsTable(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsTableRow(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsTableRow"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("tr")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("tr")); } @@ -351,15 +309,7 @@ nsHTMLEditUtils::IsList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsOrderedList(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsOrderedList"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("ol")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("ol")); } @@ -369,15 +319,7 @@ nsHTMLEditUtils::IsOrderedList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsUnorderedList(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsUnorderedList"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("ul")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("ul")); } @@ -387,15 +329,7 @@ nsHTMLEditUtils::IsUnorderedList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsDefinitionList(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsDefinitionList"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("dl")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("dl")); } @@ -405,15 +339,7 @@ nsHTMLEditUtils::IsDefinitionList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsBlockquote(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsBlockquote"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("blockquote")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("blockquote")); } @@ -423,15 +349,7 @@ nsHTMLEditUtils::IsBlockquote(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsPre(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsPre"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("pre")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("pre")); } @@ -441,15 +359,7 @@ nsHTMLEditUtils::IsPre(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsAddress(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsAddress"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("address")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("address")); } @@ -459,15 +369,7 @@ nsHTMLEditUtils::IsAddress(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsAnchor(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsAnchor"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("a")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("a")); } @@ -477,15 +379,7 @@ nsHTMLEditUtils::IsAnchor(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsImage(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsImage"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("img")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("img")); } PRBool @@ -523,15 +417,7 @@ nsHTMLEditUtils::IsNamedAnchor(nsIDOMNode *aNode) PRBool nsHTMLEditUtils::IsDiv(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsDiv"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("div")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("div")); } @@ -582,6 +468,26 @@ nsHTMLEditUtils::IsMailCite(nsIDOMNode *node) } +/////////////////////////////////////////////////////////////////////////// +// IsTextarea: true if node is an html textarea node +// +PRBool +nsHTMLEditUtils::IsTextarea(nsIDOMNode *node) +{ + return NodeIsType(node, NS_LITERAL_STRING("textarea")); +} + + +/////////////////////////////////////////////////////////////////////////// +// IsMap: true if node is an html map node +// +PRBool +nsHTMLEditUtils::IsMap(nsIDOMNode *node) +{ + return NodeIsType(node, NS_LITERAL_STRING("map")); +} + + PRBool nsHTMLEditUtils::IsDescendantOf(nsIDOMNode *aNode, nsIDOMNode *aParent) { diff --git a/mozilla/editor/base/nsHTMLEditUtils.h b/mozilla/editor/base/nsHTMLEditUtils.h index da1228289b6..f7ed2f0b58e 100644 --- a/mozilla/editor/base/nsHTMLEditUtils.h +++ b/mozilla/editor/base/nsHTMLEditUtils.h @@ -25,12 +25,15 @@ #include "prtypes.h" // for PRBool #include "nsError.h" // for nsresult +#include "nsString.h" // for nsAReadableString class nsIEditor; class nsIDOMNode; class nsHTMLEditUtils { public: + static PRBool NodeIsType(nsIDOMNode *aNode, const nsAReadableString& aTag); + // from nsTextEditRules: static PRBool IsBody(nsIDOMNode *aNode); static PRBool IsBreak(nsIDOMNode *aNode); @@ -64,6 +67,8 @@ public: static PRBool IsNormalDiv(nsIDOMNode *aNode); static PRBool IsMozDiv(nsIDOMNode *aNode); static PRBool IsMailCite(nsIDOMNode *aNode); + static PRBool IsTextarea(nsIDOMNode *aNode); + static PRBool IsMap(nsIDOMNode *aNode); static PRBool IsDescendantOf(nsIDOMNode *aNode, nsIDOMNode *aParent); static PRBool IsLeafNode(nsIDOMNode *aNode); diff --git a/mozilla/editor/base/nsHTMLEditor.cpp b/mozilla/editor/base/nsHTMLEditor.cpp index 65a10dc84d5..0f41f4aeadf 100644 --- a/mozilla/editor/base/nsHTMLEditor.cpp +++ b/mozilla/editor/base/nsHTMLEditor.cpp @@ -3800,7 +3800,8 @@ nsHTMLEditor::IsEmptyNode( nsIDOMNode *aNode, // anchors are containers, named anchors are "empty" but we don't // want to treat them as such. Also, don't call ListItems or table // cells empty if caller desires. - if (!IsContainer(aNode) || nsHTMLEditUtils::IsAnchor(aNode) || + if (!IsContainer(aNode) || nsHTMLEditUtils::IsAnchor(aNode) || + nsHTMLEditUtils::IsTextarea(aNode) || nsHTMLEditUtils::IsMap(aNode) || (aListOrCellNotEmpty && nsHTMLEditUtils::IsListItem(aNode)) || (aListOrCellNotEmpty && nsHTMLEditUtils::IsTableCell(aNode)) ) { diff --git a/mozilla/editor/libeditor/html/nsHTMLEditUtils.cpp b/mozilla/editor/libeditor/html/nsHTMLEditUtils.cpp index 787aa3044b2..97d5201f2ff 100644 --- a/mozilla/editor/libeditor/html/nsHTMLEditUtils.cpp +++ b/mozilla/editor/libeditor/html/nsHTMLEditUtils.cpp @@ -28,6 +28,21 @@ #include "nsIDOMNodeList.h" #include "nsIDOMHTMLAnchorElement.h" +PRBool +nsHTMLEditUtils::NodeIsType(nsIDOMNode *aNode, const nsAReadableString& aTag) +{ + NS_PRECONDITION(aNode, "null node passed to nsHTMLEditUtils::NodeIsType"); + if (aNode) + { + nsAutoString tag; + nsEditor::GetTagString(aNode,tag); + tag.ToLowerCase(); + if (tag.Equals(aTag)) + return PR_TRUE; + } + return PR_FALSE; +} + /******************************************************** * helper methods from nsTextEditRules ********************************************************/ @@ -38,18 +53,7 @@ PRBool nsHTMLEditUtils::IsBody(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsBody"); - if (node) - { - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("body")) - { - return PR_TRUE; - } - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("body")); } @@ -60,15 +64,7 @@ nsHTMLEditUtils::IsBody(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsBreak(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsBreak"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("br")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("br")); } @@ -78,15 +74,7 @@ nsHTMLEditUtils::IsBreak(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsBig(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsBig"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("big")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("big")); } @@ -96,15 +84,7 @@ nsHTMLEditUtils::IsBig(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsSmall(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsSmall"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("small")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("small")); } @@ -202,15 +182,7 @@ nsHTMLEditUtils::IsHeader(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsParagraph(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsParagraph"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("p")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("p")); } @@ -260,13 +232,7 @@ nsHTMLEditUtils::IsTableElement(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsTable(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditor::IsTable"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - if (tag.EqualsWithConversion("table")) - return PR_TRUE; - - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("table")); } /////////////////////////////////////////////////////////////////////////// @@ -275,15 +241,7 @@ nsHTMLEditUtils::IsTable(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsTableRow(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsTableRow"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("tr")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("tr")); } @@ -351,15 +309,7 @@ nsHTMLEditUtils::IsList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsOrderedList(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsOrderedList"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("ol")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("ol")); } @@ -369,15 +319,7 @@ nsHTMLEditUtils::IsOrderedList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsUnorderedList(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsUnorderedList"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("ul")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("ul")); } @@ -387,15 +329,7 @@ nsHTMLEditUtils::IsUnorderedList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsDefinitionList(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsDefinitionList"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("dl")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("dl")); } @@ -405,15 +339,7 @@ nsHTMLEditUtils::IsDefinitionList(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsBlockquote(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsBlockquote"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("blockquote")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("blockquote")); } @@ -423,15 +349,7 @@ nsHTMLEditUtils::IsBlockquote(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsPre(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsPre"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("pre")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("pre")); } @@ -441,15 +359,7 @@ nsHTMLEditUtils::IsPre(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsAddress(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsAddress"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("address")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("address")); } @@ -459,15 +369,7 @@ nsHTMLEditUtils::IsAddress(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsAnchor(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsAnchor"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("a")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("a")); } @@ -477,15 +379,7 @@ nsHTMLEditUtils::IsAnchor(nsIDOMNode *node) PRBool nsHTMLEditUtils::IsImage(nsIDOMNode *node) { - NS_PRECONDITION(node, "null node passed to nsHTMLEditUtils::IsImage"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("img")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("img")); } PRBool @@ -523,15 +417,7 @@ nsHTMLEditUtils::IsNamedAnchor(nsIDOMNode *aNode) PRBool nsHTMLEditUtils::IsDiv(nsIDOMNode *node) { - NS_PRECONDITION(node, "null parent passed to nsHTMLEditUtils::IsDiv"); - nsAutoString tag; - nsEditor::GetTagString(node,tag); - tag.ToLowerCase(); - if (tag.EqualsWithConversion("div")) - { - return PR_TRUE; - } - return PR_FALSE; + return NodeIsType(node, NS_LITERAL_STRING("div")); } @@ -582,6 +468,26 @@ nsHTMLEditUtils::IsMailCite(nsIDOMNode *node) } +/////////////////////////////////////////////////////////////////////////// +// IsTextarea: true if node is an html textarea node +// +PRBool +nsHTMLEditUtils::IsTextarea(nsIDOMNode *node) +{ + return NodeIsType(node, NS_LITERAL_STRING("textarea")); +} + + +/////////////////////////////////////////////////////////////////////////// +// IsMap: true if node is an html map node +// +PRBool +nsHTMLEditUtils::IsMap(nsIDOMNode *node) +{ + return NodeIsType(node, NS_LITERAL_STRING("map")); +} + + PRBool nsHTMLEditUtils::IsDescendantOf(nsIDOMNode *aNode, nsIDOMNode *aParent) { diff --git a/mozilla/editor/libeditor/html/nsHTMLEditUtils.h b/mozilla/editor/libeditor/html/nsHTMLEditUtils.h index da1228289b6..f7ed2f0b58e 100644 --- a/mozilla/editor/libeditor/html/nsHTMLEditUtils.h +++ b/mozilla/editor/libeditor/html/nsHTMLEditUtils.h @@ -25,12 +25,15 @@ #include "prtypes.h" // for PRBool #include "nsError.h" // for nsresult +#include "nsString.h" // for nsAReadableString class nsIEditor; class nsIDOMNode; class nsHTMLEditUtils { public: + static PRBool NodeIsType(nsIDOMNode *aNode, const nsAReadableString& aTag); + // from nsTextEditRules: static PRBool IsBody(nsIDOMNode *aNode); static PRBool IsBreak(nsIDOMNode *aNode); @@ -64,6 +67,8 @@ public: static PRBool IsNormalDiv(nsIDOMNode *aNode); static PRBool IsMozDiv(nsIDOMNode *aNode); static PRBool IsMailCite(nsIDOMNode *aNode); + static PRBool IsTextarea(nsIDOMNode *aNode); + static PRBool IsMap(nsIDOMNode *aNode); static PRBool IsDescendantOf(nsIDOMNode *aNode, nsIDOMNode *aParent); static PRBool IsLeafNode(nsIDOMNode *aNode); diff --git a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp index 65a10dc84d5..0f41f4aeadf 100644 --- a/mozilla/editor/libeditor/html/nsHTMLEditor.cpp +++ b/mozilla/editor/libeditor/html/nsHTMLEditor.cpp @@ -3800,7 +3800,8 @@ nsHTMLEditor::IsEmptyNode( nsIDOMNode *aNode, // anchors are containers, named anchors are "empty" but we don't // want to treat them as such. Also, don't call ListItems or table // cells empty if caller desires. - if (!IsContainer(aNode) || nsHTMLEditUtils::IsAnchor(aNode) || + if (!IsContainer(aNode) || nsHTMLEditUtils::IsAnchor(aNode) || + nsHTMLEditUtils::IsTextarea(aNode) || nsHTMLEditUtils::IsMap(aNode) || (aListOrCellNotEmpty && nsHTMLEditUtils::IsListItem(aNode)) || (aListOrCellNotEmpty && nsHTMLEditUtils::IsTableCell(aNode)) ) {