backout fix for bug 386009 to see if it causes orange.

This commit is contained in:
sayrer@gmail.com 2007-06-28 00:33:23 -07:00
Родитель ebf5edbfab
Коммит 1dd1b16c81
3 изменённых файлов: 50 добавлений и 10 удалений

Просмотреть файл

@ -94,18 +94,38 @@ NS_IMETHODIMP CreateElementTxn::DoTransaction(void)
NS_ASSERTION(mEditor && mParent, "bad state");
if (!mEditor || !mParent) return NS_ERROR_NOT_INITIALIZED;
// create a new node
nsAutoString textNodeTag;
nsresult result = nsEditor::GetTextNodeTag(textNodeTag);
if (NS_FAILED(result)) { return result; }
nsCOMPtr<nsIContent> newContent;
//new call to use instead to get proper HTML element, bug# 39919
nsresult result = mEditor->CreateHTMLContent(mTag, getter_AddRefs(newContent));
if (NS_FAILED(result)) return result;
nsCOMPtr<nsIDOMElement>newElement = do_QueryInterface(newContent);
if (!newElement) return NS_ERROR_NULL_POINTER;
mNewNode = do_QueryInterface(newElement);
// Try to insert formatting whitespace for the new node:
mEditor->MarkNodeDirty(mNewNode);
if (textNodeTag == mTag)
{
nsCOMPtr<nsIDOMDocument>doc;
result = mEditor->GetDocument(getter_AddRefs(doc));
if (NS_FAILED(result)) return result;
if (!doc) return NS_ERROR_NULL_POINTER;
const nsString stringData;
nsCOMPtr<nsIDOMText>newTextNode;
result = doc->CreateTextNode(stringData, getter_AddRefs(newTextNode));
if (NS_FAILED(result)) return result;
if (!newTextNode) return NS_ERROR_NULL_POINTER;
mNewNode = do_QueryInterface(newTextNode);
}
else
{
nsCOMPtr<nsIContent> newContent;
//new call to use instead to get proper HTML element, bug# 39919
result = mEditor->CreateHTMLContent(mTag, getter_AddRefs(newContent));
if (NS_FAILED(result)) return result;
nsCOMPtr<nsIDOMElement>newElement = do_QueryInterface(newContent);
if (!newElement) return NS_ERROR_NULL_POINTER;
mNewNode = do_QueryInterface(newElement);
// Try to insert formatting whitespace for the new node:
mEditor->MarkNodeDirty(mNewNode);
}
NS_ASSERTION(((NS_SUCCEEDED(result)) && (mNewNode)), "could not create element.");
if (!mNewNode) return NS_ERROR_NULL_POINTER;

Просмотреть файл

@ -2523,6 +2523,22 @@ NS_IMETHODIMP nsEditor::ScrollSelectionIntoView(PRBool aScrollToAnchor)
return NS_OK;
}
/** static helper method */
nsresult nsEditor::GetTextNodeTag(nsAString& aOutString)
{
aOutString.Truncate();
static nsString *gTextNodeTag=nsnull;
if (!gTextNodeTag)
{
if ( (gTextNodeTag = new nsString) == 0 )
return NS_ERROR_OUT_OF_MEMORY;
gTextNodeTag->AssignLiteral("special text node tag");
}
aOutString = *gTextNodeTag;
return NS_OK;
}
NS_IMETHODIMP nsEditor::InsertTextImpl(const nsAString& aStringToInsert,
nsCOMPtr<nsIDOMNode> *aInOutNode,
PRInt32 *aInOutOffset,

Просмотреть файл

@ -368,6 +368,10 @@ public:
nsresult RestorePreservedSelection(nsISelection *aSel);
void StopPreservingSelection();
/** return the string that represents text nodes in the content tree */
static nsresult GetTextNodeTag(nsAString& aOutString);
/**
* SplitNode() creates a new node identical to an existing node, and split the contents between the two nodes
* @param aExistingRightNode the node to split. It will become the new node's next sibling.