mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-01 08:42:13 +00:00
Bug 1149163 part 1 - Clean up nsHTMLEditRules::GetInnerContent; r=froydnj
This commit is contained in:
parent
f6bf2cb116
commit
615e9c5418
@ -13,6 +13,7 @@
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/dom/Selection.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/OwningNonNull.h"
|
||||
#include "mozilla/mozalloc.h"
|
||||
#include "nsAString.h"
|
||||
#include "nsAlgorithm.h"
|
||||
@ -5158,44 +5159,58 @@ nsHTMLEditRules::CheckForInvisibleBR(nsIDOMNode *aBlock,
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// GetInnerContent: aList and aTbl allow the caller to specify what kind
|
||||
// of content to "look inside". If aTbl is true, look inside
|
||||
// any table content, and insert the inner content into the
|
||||
// supplied issupportsarray at offset aIndex.
|
||||
// Similarly with aList and list content.
|
||||
// aIndex is updated to point past inserted elements.
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// GetInnerContent: aList and aTbl allow the caller to specify what kind of
|
||||
// content to "look inside". If aTbl is true, look inside any
|
||||
// table content, and insert the inner content into the
|
||||
// supplied issupportsarray at offset aIndex. Similarly with
|
||||
// aList and list content. aIndex is updated to point past
|
||||
// inserted elements.
|
||||
//
|
||||
nsresult
|
||||
nsHTMLEditRules::GetInnerContent(nsIDOMNode *aNode, nsCOMArray<nsIDOMNode> &outArrayOfNodes,
|
||||
int32_t *aIndex, bool aList, bool aTbl)
|
||||
nsHTMLEditRules::GetInnerContent(nsIDOMNode* aNode,
|
||||
nsCOMArray<nsIDOMNode>& aOutArrayOfDOMNodes,
|
||||
int32_t* aIndex, bool aLists, bool aTables)
|
||||
{
|
||||
nsCOMPtr<nsINode> aNode_ = do_QueryInterface(aNode);
|
||||
NS_ENSURE_TRUE(aNode_ && aIndex, NS_ERROR_NULL_POINTER);
|
||||
|
||||
nsCOMPtr<nsIDOMNode> node =
|
||||
GetAsDOMNode(mHTMLEditor->GetFirstEditableChild(*aNode_));
|
||||
nsresult res = NS_OK;
|
||||
while (NS_SUCCEEDED(res) && node)
|
||||
{
|
||||
if ( ( aList && (nsHTMLEditUtils::IsList(node) ||
|
||||
nsHTMLEditUtils::IsListItem(node) ) )
|
||||
|| ( aTbl && nsHTMLEditUtils::IsTableElement(node) ) )
|
||||
{
|
||||
res = GetInnerContent(node, outArrayOfNodes, aIndex, aList, aTbl);
|
||||
NS_ENSURE_SUCCESS(res, res);
|
||||
// To be removed in a subsequent patch
|
||||
nsCOMPtr<nsINode> node = do_QueryInterface(aNode);
|
||||
NS_ENSURE_STATE(node);
|
||||
nsTArray<nsCOMPtr<nsINode>> aOutArrayOfNodes;
|
||||
for (int32_t i = 0; i < aOutArrayOfDOMNodes.Count(); i++) {
|
||||
nsCOMPtr<nsINode> newNode = do_QueryInterface(aOutArrayOfDOMNodes[i]);
|
||||
if (newNode) {
|
||||
aOutArrayOfNodes.AppendElement(newNode);
|
||||
}
|
||||
else
|
||||
{
|
||||
outArrayOfNodes.InsertObjectAt(node, *aIndex);
|
||||
(*aIndex)++;
|
||||
}
|
||||
nsCOMPtr<nsIDOMNode> tmp;
|
||||
res = node->GetNextSibling(getter_AddRefs(tmp));
|
||||
node = tmp;
|
||||
}
|
||||
GetInnerContent(*node, aOutArrayOfNodes, aIndex,
|
||||
aLists ? Lists::yes : Lists::no,
|
||||
aTables ? Tables::yes : Tables::no);
|
||||
aOutArrayOfDOMNodes.Clear();
|
||||
for (auto& node : aOutArrayOfNodes) {
|
||||
aOutArrayOfDOMNodes.AppendElement(GetAsDOMNode(node));
|
||||
}
|
||||
|
||||
return res;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsHTMLEditRules::GetInnerContent(nsINode& aNode,
|
||||
nsTArray<nsCOMPtr<nsINode>>& aOutArrayOfNodes,
|
||||
int32_t* aIndex, Lists aLists, Tables aTables)
|
||||
{
|
||||
MOZ_ASSERT(aIndex);
|
||||
|
||||
for (nsCOMPtr<nsIContent> node = mHTMLEditor->GetFirstEditableChild(aNode);
|
||||
node; node = node->GetNextSibling()) {
|
||||
if ((aLists == Lists::yes && (nsHTMLEditUtils::IsList(node) ||
|
||||
nsHTMLEditUtils::IsListItem(node))) ||
|
||||
(aTables == Tables::yes && nsHTMLEditUtils::IsTableElement(node))) {
|
||||
GetInnerContent(*node, aOutArrayOfNodes, aIndex, aLists, aTables);
|
||||
} else {
|
||||
aOutArrayOfNodes.InsertElementAt(*aIndex, node);
|
||||
(*aIndex)++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
@ -198,7 +198,16 @@ protected:
|
||||
nsresult AppendInnerFormatNodes(nsCOMArray<nsIDOMNode>& aArray,
|
||||
nsIDOMNode *aNode);
|
||||
nsresult GetFormatString(nsIDOMNode *aNode, nsAString &outFormat);
|
||||
nsresult GetInnerContent(nsIDOMNode *aNode, nsCOMArray<nsIDOMNode>& outArrayOfNodes, int32_t *aIndex, bool aList = true, bool aTble = true);
|
||||
enum class Lists { no, yes };
|
||||
enum class Tables { no, yes };
|
||||
nsresult GetInnerContent(nsIDOMNode* aNode,
|
||||
nsCOMArray<nsIDOMNode>& aOutArrayOfNodes,
|
||||
int32_t* aIndex, bool aLists = true,
|
||||
bool aTables = true);
|
||||
void GetInnerContent(nsINode& aNode,
|
||||
nsTArray<nsCOMPtr<nsINode>>& aOutArrayOfNodes,
|
||||
int32_t* aIndex, Lists aLists = Lists::yes,
|
||||
Tables aTables = Tables::yes);
|
||||
already_AddRefed<nsIDOMNode> IsInListItem(nsIDOMNode* aNode);
|
||||
mozilla::dom::Element* IsInListItem(nsINode* aNode);
|
||||
nsresult ReturnInHeader(mozilla::dom::Selection* aSelection,
|
||||
|
Loading…
Reference in New Issue
Block a user