author | Ms2ger <ms2ger@gmail.com> |
Sat, 14 Apr 2012 15:09:38 +0200 | |
changeset 95456 | fd06332733e5f163c6c533f828bdd422a6ea5ebe |
parent 95455 | 7a9bd13747ba0eb98ff71b5033d32dc898c92c72 |
child 95457 | e080a936c8994ba932f10ab7dcf8c76072007505 |
child 95459 | 7e798c7b83801a273dfa18c44307f966ab1adc3b |
child 95572 | 1e7f193ff1a7de2f1ede0a623477362ef6a7e09d |
push id | 160 |
push user | lsblakk@mozilla.com |
push date | Fri, 13 Jul 2012 18:18:57 +0000 |
treeherder | mozilla-release@228ba1a111fc [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | ehsan |
bugs | 744507 |
milestone | 14.0a1 |
first release with | nightly linux32
fd06332733e5
/
14.0a1
/
20120416030739
/
files
nightly linux64
fd06332733e5
/
14.0a1
/
20120416030739
/
files
nightly mac
fd06332733e5
/
14.0a1
/
20120416030739
/
files
nightly win32
fd06332733e5
/
14.0a1
/
20120416030739
/
files
nightly win64
fd06332733e5
/
14.0a1
/
20120416030739
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
14.0a1
/
20120416030739
/
pushlog to previous
nightly linux64
14.0a1
/
20120416030739
/
pushlog to previous
nightly mac
14.0a1
/
20120416030739
/
pushlog to previous
nightly win32
14.0a1
/
20120416030739
/
pushlog to previous
nightly win64
14.0a1
/
20120416030739
/
pushlog to previous
|
editor/libeditor/html/nsHTMLEditor.cpp | file | annotate | diff | comparison | revisions | |
editor/libeditor/html/nsHTMLEditor.h | file | annotate | diff | comparison | revisions |
--- a/editor/libeditor/html/nsHTMLEditor.cpp +++ b/editor/libeditor/html/nsHTMLEditor.cpp @@ -4204,120 +4204,137 @@ nsHTMLEditor::RemoveBlockContainer(nsIDO return RemoveContainer(inNode); } /////////////////////////////////////////////////////////////////////////// // GetPriorHTMLSibling: returns the previous editable sibling, if there is // one within the parent // +nsINode* +nsHTMLEditor::GetPriorHTMLSibling(nsINode* aNode) +{ + MOZ_ASSERT(aNode); + + nsIContent* node = aNode->GetPreviousSibling(); + while (node && !IsEditable(node)) { + node = node->GetPreviousSibling(); + } + + return node; +} + nsresult nsHTMLEditor::GetPriorHTMLSibling(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode) { - NS_ENSURE_TRUE(outNode && inNode, NS_ERROR_NULL_POINTER); - nsresult res = NS_OK; - *outNode = nsnull; - nsCOMPtr<nsIDOMNode> temp, node = do_QueryInterface(inNode); - - while (1) - { - res = node->GetPreviousSibling(getter_AddRefs(temp)); - NS_ENSURE_SUCCESS(res, res); - if (!temp) { - // return null sibling - return NS_OK; - } - // if it's editable, we're done - if (IsEditable(temp)) break; - // otherwise try again - node = temp; - } - *outNode = temp; - return res; + NS_ENSURE_TRUE(outNode, NS_ERROR_NULL_POINTER); + *outNode = NULL; + + nsCOMPtr<nsINode> node = do_QueryInterface(inNode); + NS_ENSURE_TRUE(node, NS_ERROR_NULL_POINTER); + + *outNode = do_QueryInterface(GetPriorHTMLSibling(node)); + return NS_OK; } /////////////////////////////////////////////////////////////////////////// // GetPriorHTMLSibling: returns the previous editable sibling, if there is // one within the parent. just like above routine but // takes a parent/offset instead of a node. // +nsINode* +nsHTMLEditor::GetPriorHTMLSibling(nsINode* aParent, PRInt32 aOffset) +{ + MOZ_ASSERT(aParent); + + nsIContent* node = aParent->GetChildAt(aOffset - 1); + if (!node || IsEditable(node)) { + return node; + } + + return GetPriorHTMLSibling(node); +} + nsresult nsHTMLEditor::GetPriorHTMLSibling(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode) { - NS_ENSURE_TRUE(outNode && inParent, NS_ERROR_NULL_POINTER); - *outNode = nsnull; - nsCOMPtr<nsIDOMNode> node = nsEditor::GetChildAt(inParent,inOffset-1); - if (!node) { - // return null sibling if no sibling - return NS_OK; - } - if (IsEditable(node)) { - *outNode = node; - return NS_OK; - } - // else - return GetPriorHTMLSibling(node, outNode); + NS_ENSURE_TRUE(outNode, NS_ERROR_NULL_POINTER); + *outNode = NULL; + + nsCOMPtr<nsINode> parent = do_QueryInterface(inParent); + NS_ENSURE_TRUE(parent, NS_ERROR_NULL_POINTER); + + *outNode = do_QueryInterface(GetPriorHTMLSibling(parent, inOffset)); + return NS_OK; } /////////////////////////////////////////////////////////////////////////// // GetNextHTMLSibling: returns the next editable sibling, if there is // one within the parent // +nsINode* +nsHTMLEditor::GetNextHTMLSibling(nsINode* aNode) +{ + MOZ_ASSERT(aNode); + + nsIContent* node = aNode->GetNextSibling(); + while (node && !IsEditable(node)) { + node = node->GetNextSibling(); + } + + return node; +} + nsresult nsHTMLEditor::GetNextHTMLSibling(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode) { NS_ENSURE_TRUE(outNode, NS_ERROR_NULL_POINTER); - nsresult res = NS_OK; *outNode = nsnull; - nsCOMPtr<nsIDOMNode> temp, node = do_QueryInterface(inNode); + + nsCOMPtr<nsINode> node = do_QueryInterface(inNode); + NS_ENSURE_TRUE(node, NS_ERROR_NULL_POINTER); - while (1) - { - res = node->GetNextSibling(getter_AddRefs(temp)); - NS_ENSURE_SUCCESS(res, res); - if (!temp) { - // return null sibling - return NS_OK; - } - // if it's editable, we're done - if (IsEditable(temp)) break; - // otherwise try again - node = temp; - } - *outNode = temp; - return res; + *outNode = do_QueryInterface(GetNextHTMLSibling(node)); + return NS_OK; } /////////////////////////////////////////////////////////////////////////// // GetNextHTMLSibling: returns the next editable sibling, if there is // one within the parent. just like above routine but // takes a parent/offset instead of a node. -// +nsINode* +nsHTMLEditor::GetNextHTMLSibling(nsINode* aParent, PRInt32 aOffset) +{ + MOZ_ASSERT(aParent); + + nsIContent* node = aParent->GetChildAt(aOffset + 1); + if (!node || IsEditable(node)) { + return node; + } + + return GetNextHTMLSibling(node); +} + nsresult nsHTMLEditor::GetNextHTMLSibling(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode) { - NS_ENSURE_TRUE(outNode && inParent, NS_ERROR_NULL_POINTER); - *outNode = nsnull; - nsCOMPtr<nsIDOMNode> node = nsEditor::GetChildAt(inParent, inOffset + 1); - if (!node) { - // return null sibling if no sibling - return NS_OK; - } - if (IsEditable(node)) { - *outNode = node; - return NS_OK; - } - // else - return GetNextHTMLSibling(node, outNode); + NS_ENSURE_TRUE(outNode, NS_ERROR_NULL_POINTER); + *outNode = NULL; + + nsCOMPtr<nsINode> parent = do_QueryInterface(inParent); + NS_ENSURE_TRUE(parent, NS_ERROR_NULL_POINTER); + + *outNode = do_QueryInterface(GetNextHTMLSibling(parent, inOffset)); + return NS_OK; } /////////////////////////////////////////////////////////////////////////// // GetPriorHTMLNode: returns the previous editable leaf node, if there is // one within the <body> //
--- a/editor/libeditor/html/nsHTMLEditor.h +++ b/editor/libeditor/html/nsHTMLEditor.h @@ -715,19 +715,23 @@ protected: bool NodeIsProperty(nsIDOMNode *aNode); bool HasAttr(nsIDOMNode *aNode, const nsAString *aAttribute); bool HasAttrVal(nsIDOMNode *aNode, const nsAString *aAttribute, const nsAString *aValue); bool IsAtFrontOfNode(nsIDOMNode *aNode, PRInt32 aOffset); bool IsAtEndOfNode(nsIDOMNode *aNode, PRInt32 aOffset); bool IsOnlyAttribute(nsIDOMNode *aElement, const nsAString *aAttribute); nsresult RemoveBlockContainer(nsIDOMNode *inNode); + nsINode* GetPriorHTMLSibling(nsINode* aNode); nsresult GetPriorHTMLSibling(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode); + nsINode* GetPriorHTMLSibling(nsINode* aParent, PRInt32 aOffset); nsresult GetPriorHTMLSibling(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode); + nsINode* GetNextHTMLSibling(nsINode* aNode); nsresult GetNextHTMLSibling(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode); + nsINode* GetNextHTMLSibling(nsINode* aParent, PRInt32 aOffset); nsresult GetNextHTMLSibling(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode); nsresult GetPriorHTMLNode(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode, bool bNoBlockCrossing = false); nsresult GetPriorHTMLNode(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode, bool bNoBlockCrossing = false); nsresult GetNextHTMLNode(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode, bool bNoBlockCrossing = false); nsresult GetNextHTMLNode(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode, bool bNoBlockCrossing = false); nsresult IsFirstEditableChild( nsIDOMNode *aNode, bool *aOutIsFirst); nsresult IsLastEditableChild( nsIDOMNode *aNode, bool *aOutIsLast);