This commit is contained in:
jfrancis%netscape.com 2000-06-02 06:03:46 +00:00
Родитель 0b1407533b
Коммит 08769b0013
4 изменённых файлов: 126 добавлений и 6 удалений

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

@ -1042,11 +1042,10 @@ nsHTMLEditRules::WillDeleteSelection(nsIDOMSelection *aSelection,
// is next node a text node?
else if ( mEditor->IsTextNode(nextNode) )
{
// delete last character
// delete first character
nsCOMPtr<nsIDOMCharacterData>nodeAsText;
nodeAsText = do_QueryInterface(nextNode);
nodeAsText->GetLength((PRUint32*)&offset);
res = aSelection->Collapse(nextNode,offset);
res = aSelection->Collapse(nextNode,0);
// just return without setting handled to true.
// default code will take care of actual deletion
return res;
@ -2415,6 +2414,58 @@ nsHTMLEditRules::GetTableContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *
return res;
}
///////////////////////////////////////////////////////////////////////////
// GetListContent: take a list element and get it's editable, non-list contents
//
nsresult
nsHTMLEditRules::GetListContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes)
{
if (!aNode || !outArrayOfNodes) return NS_ERROR_NULL_POINTER;
// make a array
nsresult res = NS_NewISupportsArray(getter_AddRefs(*outArrayOfNodes));
if (NS_FAILED(res)) return res;
// make an iter
nsCOMPtr<nsIContentIterator> iter;
res = nsComponentManager::CreateInstance(kContentIteratorCID, nsnull,
NS_GET_IID(nsIContentIterator),
getter_AddRefs(iter));
if (NS_FAILED(res)) return res;
if (!iter) return NS_ERROR_FAILURE;
nsCOMPtr<nsIContent> content;
nsCOMPtr<nsIDOMNode> node;
nsCOMPtr<nsISupports> isupports;
// iterate node and build up array of non-list content
content = do_QueryInterface(aNode);
iter->Init(content);
while (NS_ENUMERATOR_FALSE == iter->IsDone())
{
res = iter->CurrentNode(getter_AddRefs(content));
if (NS_FAILED(res)) return res;
node = do_QueryInterface(content);
if (!node) return NS_ERROR_FAILURE;
if (nsHTMLEditUtils::IsList(node) || nsHTMLEditUtils::IsListItem(node))
{
nsCOMPtr <nsIDOMNode> child, tmp;
res = mEditor->GetFirstEditableChild(node, &child);
if (NS_FAILED(res)) return res;
while (child)
{
isupports = do_QueryInterface(child);
(*outArrayOfNodes)->AppendElement(isupports);
mEditor->GetNextHTMLSibling(child, &tmp);
child = tmp;
}
}
res = iter->Next();
if (NS_FAILED(res)) return res;
}
return res;
}
///////////////////////////////////////////////////////////////////////////
// IsFirstNode: Are we the first edittable node in our parent?
//
@ -3038,6 +3089,14 @@ nsHTMLEditRules::GetParagraphFormatNodes(nsCOMPtr<nsISupportsArray> *outArrayOfN
if (NS_FAILED(res)) return res;
(*outArrayOfNodes)->AppendElements(arrayOfTableContent);
}
else if (nsHTMLEditUtils::IsList(testNode) || nsHTMLEditUtils::IsListItem(testNode))
{
(*outArrayOfNodes)->RemoveElementAt(i);
nsCOMPtr<nsISupportsArray> arrayOfTableContent;
res = GetListContent(testNode, &arrayOfTableContent);
if (NS_FAILED(res)) return res;
(*outArrayOfNodes)->AppendElements(arrayOfTableContent);
}
}
return res;
}

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

@ -110,6 +110,7 @@ protected:
nsresult AlignTableElement(nsIDOMNode *aNode, const nsString *alignType);
nsresult AlignTableCellContents(nsIDOMNode *aNode, const nsString *alignType);
nsresult GetTableContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes);
nsresult GetListContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes);
nsresult InsertTab(nsIDOMSelection *aSelection, nsString *outString);

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

@ -1042,11 +1042,10 @@ nsHTMLEditRules::WillDeleteSelection(nsIDOMSelection *aSelection,
// is next node a text node?
else if ( mEditor->IsTextNode(nextNode) )
{
// delete last character
// delete first character
nsCOMPtr<nsIDOMCharacterData>nodeAsText;
nodeAsText = do_QueryInterface(nextNode);
nodeAsText->GetLength((PRUint32*)&offset);
res = aSelection->Collapse(nextNode,offset);
res = aSelection->Collapse(nextNode,0);
// just return without setting handled to true.
// default code will take care of actual deletion
return res;
@ -2415,6 +2414,58 @@ nsHTMLEditRules::GetTableContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *
return res;
}
///////////////////////////////////////////////////////////////////////////
// GetListContent: take a list element and get it's editable, non-list contents
//
nsresult
nsHTMLEditRules::GetListContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes)
{
if (!aNode || !outArrayOfNodes) return NS_ERROR_NULL_POINTER;
// make a array
nsresult res = NS_NewISupportsArray(getter_AddRefs(*outArrayOfNodes));
if (NS_FAILED(res)) return res;
// make an iter
nsCOMPtr<nsIContentIterator> iter;
res = nsComponentManager::CreateInstance(kContentIteratorCID, nsnull,
NS_GET_IID(nsIContentIterator),
getter_AddRefs(iter));
if (NS_FAILED(res)) return res;
if (!iter) return NS_ERROR_FAILURE;
nsCOMPtr<nsIContent> content;
nsCOMPtr<nsIDOMNode> node;
nsCOMPtr<nsISupports> isupports;
// iterate node and build up array of non-list content
content = do_QueryInterface(aNode);
iter->Init(content);
while (NS_ENUMERATOR_FALSE == iter->IsDone())
{
res = iter->CurrentNode(getter_AddRefs(content));
if (NS_FAILED(res)) return res;
node = do_QueryInterface(content);
if (!node) return NS_ERROR_FAILURE;
if (nsHTMLEditUtils::IsList(node) || nsHTMLEditUtils::IsListItem(node))
{
nsCOMPtr <nsIDOMNode> child, tmp;
res = mEditor->GetFirstEditableChild(node, &child);
if (NS_FAILED(res)) return res;
while (child)
{
isupports = do_QueryInterface(child);
(*outArrayOfNodes)->AppendElement(isupports);
mEditor->GetNextHTMLSibling(child, &tmp);
child = tmp;
}
}
res = iter->Next();
if (NS_FAILED(res)) return res;
}
return res;
}
///////////////////////////////////////////////////////////////////////////
// IsFirstNode: Are we the first edittable node in our parent?
//
@ -3038,6 +3089,14 @@ nsHTMLEditRules::GetParagraphFormatNodes(nsCOMPtr<nsISupportsArray> *outArrayOfN
if (NS_FAILED(res)) return res;
(*outArrayOfNodes)->AppendElements(arrayOfTableContent);
}
else if (nsHTMLEditUtils::IsList(testNode) || nsHTMLEditUtils::IsListItem(testNode))
{
(*outArrayOfNodes)->RemoveElementAt(i);
nsCOMPtr<nsISupportsArray> arrayOfTableContent;
res = GetListContent(testNode, &arrayOfTableContent);
if (NS_FAILED(res)) return res;
(*outArrayOfNodes)->AppendElements(arrayOfTableContent);
}
}
return res;
}

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

@ -110,6 +110,7 @@ protected:
nsresult AlignTableElement(nsIDOMNode *aNode, const nsString *alignType);
nsresult AlignTableCellContents(nsIDOMNode *aNode, const nsString *alignType);
nsresult GetTableContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes);
nsresult GetListContent(nsIDOMNode *aNode, nsCOMPtr<nsISupportsArray> *outArrayOfNodes);
nsresult InsertTab(nsIDOMSelection *aSelection, nsString *outString);