diff --git a/editor/base/nsEditor.cpp b/editor/base/nsEditor.cpp
index 3aed9d654b9..f2f462b854d 100644
--- a/editor/base/nsEditor.cpp
+++ b/editor/base/nsEditor.cpp
@@ -2093,8 +2093,16 @@ nsEditor::GetLengthOfDOMNode(nsIDOMNode *aNode, PRUint32 &aCount)
return result;
}
+// Non-static version for the nsIEditor interface and JavaScript
+NS_IMETHODIMP
+nsEditor::IsNodeBlock(nsIDOMNode *aNode, PRBool *aIsBlock)
+{
+ if (!aNode || !aIsBlock) { return NS_ERROR_NULL_POINTER; }
+ return IsNodeBlock(aNode, *aIsBlock);
+}
+
// The list of block nodes is shorter, so do the real work here...
-nsresult
+nsresult
nsEditor::IsNodeBlock(nsIDOMNode *aNode, PRBool &aIsBlock)
{
// this is a content-based implementation
diff --git a/editor/base/nsEditor.h b/editor/base/nsEditor.h
index 821ec7618a2..d79dcaf7913 100644
--- a/editor/base/nsEditor.h
+++ b/editor/base/nsEditor.h
@@ -411,6 +411,9 @@ public:
/** set aIsBlock to PR_TRUE if aNode is inline as defined by HTML DTD */
static nsresult IsNodeBlock(nsIDOMNode *aNode, PRBool &aIsBlock);
+ /** This version is for exposure to JavaScript */
+ NS_IMETHOD IsNodeBlock(nsIDOMNode *aNode, PRBool *aIsBlock);
+
/** returns the closest block parent of aNode, not including aNode itself.
* can return null, for example if aNode is in a document fragment.
* @param aNode The node whose parent we seek.
diff --git a/editor/base/nsEditorShell.cpp b/editor/base/nsEditorShell.cpp
index c0d574e9daa..d7d347fc035 100644
--- a/editor/base/nsEditorShell.cpp
+++ b/editor/base/nsEditorShell.cpp
@@ -62,6 +62,8 @@
#include "nsIDOMToolkitCore.h"
#include "nsIFindComponent.h"
#include "nsIPrompt.h"
+#include "nsICommonDialogs.h"
+//#include "nsIDialogParamBlock.h"
///////////////////////////////////////
// Editor Includes
@@ -106,7 +108,8 @@ static NS_DEFINE_CID(kCSpellCheckerCID, NS_SPELLCHECKER_CID);
static NS_DEFINE_IID(kCFileWidgetCID, NS_FILEWIDGET_CID);
static NS_DEFINE_CID(kCStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
static NS_DEFINE_CID(kCNetSupportDialogCID, NS_NETSUPPORTDIALOG_CID);
-
+static NS_DEFINE_CID(kCommonDialogsCID, NS_CommonDialog_CID );
+static NS_DEFINE_CID(kDialogParamBlockCID, NS_DialogParamBlock_CID);
/* Define Interface IDs */
#ifdef NECKO
#else
@@ -1024,9 +1027,9 @@ nsEditorShell::CheckAndSaveDocument(PRBool *_retval)
if (modCount > 0)
{
// Ask user if they want to save current changes
- nsString saveFileQuestion = GetString("SaveFilePrompt");
+ //nsString saveFileQuestion = GetString("SaveFilePrompt");
// TODO: THIS DIALOG SHOULD HAVE A CANCEL BUTTON AS WELL
- if (Confirm(saveFileQuestion))
+ if (Confirm(GetString("SaveFilePrompt"),GetString("SaveDocument")))
{
// Either save to existing file or prompt for name (as for SaveAs)
rv = SaveDocument(PR_FALSE, PR_FALSE, _retval);
@@ -1077,8 +1080,7 @@ nsEditorShell::SaveDocument(PRBool saveAs, PRBool saveCopy, PRBool *_retval)
{
if (title->Length() == 0)
{
- nsString message = GetString("NeedDocTitle");
- Alert(message);
+ Alert(GetString("NeedDocTitle"),GetString("DocumentTitle"));
// TODO: Popup a simple dialog and set the title
// Note that this involves inserting a
tag
// with a text nodechild in the area of the document.
@@ -1151,8 +1153,7 @@ SkipFilters:
res = editor->SaveFile(&docFileSpec, replacing, saveCopy, nsIEditor::eSaveFileHTML);
if (NS_FAILED(res))
{
- nsString message = GetString("SaveFileFailed");
- Alert(message);
+ Alert(GetString("SaveFileFailed"), GetString("SaveDocument"));
} else {
// File was saved successfully
*_retval = PR_TRUE;
@@ -1303,6 +1304,30 @@ nsEditorShell::GetLocalFileURL(nsIDOMWindow *parent, const PRUnichar *filterType
return res;
}
+NS_IMETHODIMP
+nsEditorShell::IsNodeBlock(nsIDOMNode *node, PRBool *_retval)
+{
+ if (!node || !_retval) { return NS_ERROR_NULL_POINTER; }
+ nsresult rv = NS_NOINTERFACE;
+
+ switch (mEditorType)
+ {
+ case ePlainTextEditorType:
+ case eHTMLTextEditorType:
+ {
+ nsCOMPtr editor = do_QueryInterface(mEditor);
+ if (editor)
+ rv = editor->IsNodeBlock(node, _retval);
+ }
+ break;
+
+ default:
+ rv = NS_ERROR_NOT_IMPLEMENTED;
+ }
+
+ return rv;
+}
+
NS_IMETHODIMP
nsEditorShell::Undo()
{
@@ -1728,9 +1753,45 @@ nsEditorShell::GetString(const nsString& name)
return *ptmpString;
}
-// Utility to bring up a Yes/No dialog. TODO: WE NEED A CANCEL BUTTON FOR FILE SAVE PROMPT!!!
+// Utility to bring up a Yes/No/Cancel dialog.
+PRInt32
+nsEditorShell::ConfirmWithCancel(const nsString& aQuestion, const nsString& aTitle)
+{
+ nsresult rv;
+ PRInt32 buttonPressed = 0;
+ nsIDialogParamBlock* block = NULL;
+ rv = nsComponentManager::CreateInstance(kDialogParamBlockCID,
+ 0,
+ nsIDialogParamBlock::GetIID(),
+ (void**)&block );
+
+ if ( NS_FAILED( rv ) )
+ return rv;
+ // Stuff in Parameters
+ block->SetInt( nsICommonDialogs::eNumberButtons,2 );
+ block->SetString( nsICommonDialogs::eMsg, aQuestion.GetUnicode());
+ nsString url( "chrome://global/skin/question-icon.gif" );
+ block->SetString( nsICommonDialogs::eIconURL, url.GetUnicode());
+
+ nsString yes("yes");
+ nsString no("no");
+ block->SetString( nsICommonDialogs::eButton0Text, yes.GetUnicode() );
+ block->SetString( nsICommonDialogs::eButton1Text, no.GetUnicode() );
+
+ NS_WITH_SERVICE(nsICommonDialogs, dialog, kCommonDialogsCID, &rv);
+ if ( NS_SUCCEEDED( rv ) )
+ {
+ nsCOMPtr parent = do_QueryInterface(mWebShellWin);
+ rv = dialog->DoDialog( parent, block, "chrome://global/content/commonDialog.xul" );
+ block->GetInt( nsICommonDialogs::eButtonPressed, &buttonPressed );
+ }
+ NS_IF_RELEASE( block );
+ return buttonPressed;
+}
+
+// Utility to bring up a Yes/No dialog.
PRBool
-nsEditorShell::Confirm(const nsString& aQuestion)
+nsEditorShell::Confirm(const nsString& aQuestion, const nsString& aTitle)
{
nsresult res;
PRBool result = PR_FALSE;
@@ -1747,7 +1808,7 @@ nsEditorShell::Confirm(const nsString& aQuestion)
}
void
-nsEditorShell::Alert(const nsString& aMsg)
+nsEditorShell::Alert(const nsString& aMsg, const nsString& aTitle)
{
nsresult res;
NS_WITH_SERVICE(nsIPrompt, dialog, kCNetSupportDialogCID, &res);
diff --git a/editor/base/nsEditorShell.h b/editor/base/nsEditorShell.h
index d512140c4ca..32eeb097e9e 100644
--- a/editor/base/nsEditorShell.h
+++ b/editor/base/nsEditorShell.h
@@ -160,9 +160,12 @@ class nsEditorShell : public nsIEditorShell,
NS_IMETHOD CreateWindowWithURL(const char* urlStr);
NS_IMETHOD PrepareDocumentForEditing(nsIURI *aUrl);
NS_IMETHOD DoFind(PRBool aFindNext);
+
+ void Alert(const nsString& aMsg, const nsString& aTitle);
// Bring up a Yes/No dialog WE REALLY NEED A Yes/No/Cancel dialog and would like to set our own caption as well!
- PRBool Confirm(const nsString& aQuestion);
- void Alert(const nsString& aMsg);
+ PRBool Confirm(const nsString& aQuestion, const nsString& aTitle);
+ // Return value: No=0, Yes=1, Cancel=2
+ PRInt32 ConfirmWithCancel(const nsString& aQuestion, const nsString& aTitle);
// this returns an AddReffed nsIScriptContext. You must relase it.
nsIScriptContext* GetScriptContext(nsIDOMWindow * aWin);
diff --git a/editor/base/nsHTMLEditor.cpp b/editor/base/nsHTMLEditor.cpp
index 1ceebd5ff08..57f9f38baba 100644
--- a/editor/base/nsHTMLEditor.cpp
+++ b/editor/base/nsHTMLEditor.cpp
@@ -1330,7 +1330,9 @@ NS_IMETHODIMP nsHTMLEditor::SetParagraphFormat(const nsString& aParagraphFormat)
NS_IMETHODIMP
nsHTMLEditor::GetParagraphStyle(nsStringArray *aTagList)
{
+#if 0
if (gNoisy) { printf("---------- nsHTMLEditor::GetParagraphStyle ----------\n"); }
+#endif
if (!aTagList) { return NS_ERROR_NULL_POINTER; }
nsresult res;
@@ -2087,9 +2089,12 @@ nsHTMLEditor::GetSelectedElement(const nsString& aTagName, nsIDOMElement** aRetu
if (bNodeFound)
{
- *aReturn = selectedElement;
- // Getters must addref
- NS_ADDREF(*aReturn);
+ *aReturn = selectedElement;
+ if (selectedElement)
+ {
+ // Getters must addref
+ NS_ADDREF(*aReturn);
+ }
}
return res;
}
diff --git a/editor/composer/src/nsEditorShell.cpp b/editor/composer/src/nsEditorShell.cpp
index c0d574e9daa..d7d347fc035 100644
--- a/editor/composer/src/nsEditorShell.cpp
+++ b/editor/composer/src/nsEditorShell.cpp
@@ -62,6 +62,8 @@
#include "nsIDOMToolkitCore.h"
#include "nsIFindComponent.h"
#include "nsIPrompt.h"
+#include "nsICommonDialogs.h"
+//#include "nsIDialogParamBlock.h"
///////////////////////////////////////
// Editor Includes
@@ -106,7 +108,8 @@ static NS_DEFINE_CID(kCSpellCheckerCID, NS_SPELLCHECKER_CID);
static NS_DEFINE_IID(kCFileWidgetCID, NS_FILEWIDGET_CID);
static NS_DEFINE_CID(kCStringBundleServiceCID, NS_STRINGBUNDLESERVICE_CID);
static NS_DEFINE_CID(kCNetSupportDialogCID, NS_NETSUPPORTDIALOG_CID);
-
+static NS_DEFINE_CID(kCommonDialogsCID, NS_CommonDialog_CID );
+static NS_DEFINE_CID(kDialogParamBlockCID, NS_DialogParamBlock_CID);
/* Define Interface IDs */
#ifdef NECKO
#else
@@ -1024,9 +1027,9 @@ nsEditorShell::CheckAndSaveDocument(PRBool *_retval)
if (modCount > 0)
{
// Ask user if they want to save current changes
- nsString saveFileQuestion = GetString("SaveFilePrompt");
+ //nsString saveFileQuestion = GetString("SaveFilePrompt");
// TODO: THIS DIALOG SHOULD HAVE A CANCEL BUTTON AS WELL
- if (Confirm(saveFileQuestion))
+ if (Confirm(GetString("SaveFilePrompt"),GetString("SaveDocument")))
{
// Either save to existing file or prompt for name (as for SaveAs)
rv = SaveDocument(PR_FALSE, PR_FALSE, _retval);
@@ -1077,8 +1080,7 @@ nsEditorShell::SaveDocument(PRBool saveAs, PRBool saveCopy, PRBool *_retval)
{
if (title->Length() == 0)
{
- nsString message = GetString("NeedDocTitle");
- Alert(message);
+ Alert(GetString("NeedDocTitle"),GetString("DocumentTitle"));
// TODO: Popup a simple dialog and set the title
// Note that this involves inserting a tag
// with a text nodechild in the area of the document.
@@ -1151,8 +1153,7 @@ SkipFilters:
res = editor->SaveFile(&docFileSpec, replacing, saveCopy, nsIEditor::eSaveFileHTML);
if (NS_FAILED(res))
{
- nsString message = GetString("SaveFileFailed");
- Alert(message);
+ Alert(GetString("SaveFileFailed"), GetString("SaveDocument"));
} else {
// File was saved successfully
*_retval = PR_TRUE;
@@ -1303,6 +1304,30 @@ nsEditorShell::GetLocalFileURL(nsIDOMWindow *parent, const PRUnichar *filterType
return res;
}
+NS_IMETHODIMP
+nsEditorShell::IsNodeBlock(nsIDOMNode *node, PRBool *_retval)
+{
+ if (!node || !_retval) { return NS_ERROR_NULL_POINTER; }
+ nsresult rv = NS_NOINTERFACE;
+
+ switch (mEditorType)
+ {
+ case ePlainTextEditorType:
+ case eHTMLTextEditorType:
+ {
+ nsCOMPtr editor = do_QueryInterface(mEditor);
+ if (editor)
+ rv = editor->IsNodeBlock(node, _retval);
+ }
+ break;
+
+ default:
+ rv = NS_ERROR_NOT_IMPLEMENTED;
+ }
+
+ return rv;
+}
+
NS_IMETHODIMP
nsEditorShell::Undo()
{
@@ -1728,9 +1753,45 @@ nsEditorShell::GetString(const nsString& name)
return *ptmpString;
}
-// Utility to bring up a Yes/No dialog. TODO: WE NEED A CANCEL BUTTON FOR FILE SAVE PROMPT!!!
+// Utility to bring up a Yes/No/Cancel dialog.
+PRInt32
+nsEditorShell::ConfirmWithCancel(const nsString& aQuestion, const nsString& aTitle)
+{
+ nsresult rv;
+ PRInt32 buttonPressed = 0;
+ nsIDialogParamBlock* block = NULL;
+ rv = nsComponentManager::CreateInstance(kDialogParamBlockCID,
+ 0,
+ nsIDialogParamBlock::GetIID(),
+ (void**)&block );
+
+ if ( NS_FAILED( rv ) )
+ return rv;
+ // Stuff in Parameters
+ block->SetInt( nsICommonDialogs::eNumberButtons,2 );
+ block->SetString( nsICommonDialogs::eMsg, aQuestion.GetUnicode());
+ nsString url( "chrome://global/skin/question-icon.gif" );
+ block->SetString( nsICommonDialogs::eIconURL, url.GetUnicode());
+
+ nsString yes("yes");
+ nsString no("no");
+ block->SetString( nsICommonDialogs::eButton0Text, yes.GetUnicode() );
+ block->SetString( nsICommonDialogs::eButton1Text, no.GetUnicode() );
+
+ NS_WITH_SERVICE(nsICommonDialogs, dialog, kCommonDialogsCID, &rv);
+ if ( NS_SUCCEEDED( rv ) )
+ {
+ nsCOMPtr parent = do_QueryInterface(mWebShellWin);
+ rv = dialog->DoDialog( parent, block, "chrome://global/content/commonDialog.xul" );
+ block->GetInt( nsICommonDialogs::eButtonPressed, &buttonPressed );
+ }
+ NS_IF_RELEASE( block );
+ return buttonPressed;
+}
+
+// Utility to bring up a Yes/No dialog.
PRBool
-nsEditorShell::Confirm(const nsString& aQuestion)
+nsEditorShell::Confirm(const nsString& aQuestion, const nsString& aTitle)
{
nsresult res;
PRBool result = PR_FALSE;
@@ -1747,7 +1808,7 @@ nsEditorShell::Confirm(const nsString& aQuestion)
}
void
-nsEditorShell::Alert(const nsString& aMsg)
+nsEditorShell::Alert(const nsString& aMsg, const nsString& aTitle)
{
nsresult res;
NS_WITH_SERVICE(nsIPrompt, dialog, kCNetSupportDialogCID, &res);
diff --git a/editor/composer/src/nsEditorShell.h b/editor/composer/src/nsEditorShell.h
index d512140c4ca..32eeb097e9e 100644
--- a/editor/composer/src/nsEditorShell.h
+++ b/editor/composer/src/nsEditorShell.h
@@ -160,9 +160,12 @@ class nsEditorShell : public nsIEditorShell,
NS_IMETHOD CreateWindowWithURL(const char* urlStr);
NS_IMETHOD PrepareDocumentForEditing(nsIURI *aUrl);
NS_IMETHOD DoFind(PRBool aFindNext);
+
+ void Alert(const nsString& aMsg, const nsString& aTitle);
// Bring up a Yes/No dialog WE REALLY NEED A Yes/No/Cancel dialog and would like to set our own caption as well!
- PRBool Confirm(const nsString& aQuestion);
- void Alert(const nsString& aMsg);
+ PRBool Confirm(const nsString& aQuestion, const nsString& aTitle);
+ // Return value: No=0, Yes=1, Cancel=2
+ PRInt32 ConfirmWithCancel(const nsString& aQuestion, const nsString& aTitle);
// this returns an AddReffed nsIScriptContext. You must relase it.
nsIScriptContext* GetScriptContext(nsIDOMWindow * aWin);
diff --git a/editor/idl/nsIEditorShell.idl b/editor/idl/nsIEditorShell.idl
index fd33c11b940..390e9845ca1 100644
--- a/editor/idl/nsIEditorShell.idl
+++ b/editor/idl/nsIEditorShell.idl
@@ -146,11 +146,75 @@ interface nsIEditorShell : nsISupports
void Align(in wstring align);
/** Element insert and property editing */
+
+ /** Return an element only if it is the only node selected,
+ * such as an image, horizontal rule, etc.
+ * The exception is a link, which is more like a text attribute:
+ * The Anchor tag is returned if the selection is within the textnode(s)
+ * that are children of the "A" node.
+ * This could be a collapsed selection, i.e., a caret within the link text.
+ *
+ * tagName: The HTML tagname or and empty string
+ * to get any element (but only if it is the only element selected)
+ * Special input values for Links and Named anchors:
+ * Use "href" to get a link node
+ * (an "A" tag with the "href" attribute set)
+ * Use "anchor" or "namedanchor" to get a named anchor node
+ * (an "A" tag with the "name" attribute set)
+ */
nsIDOMElement GetSelectedElement(in wstring tagName);
- /** returns the element conversion of supplied node or a parent of required type */
+
+ /** Return the input node or a parent matching the given aTagName,
+ * starting the search at the supplied node.
+ * An example of use is for testing if a node is in a table cell
+ * given a selection anchor node.
+ *
+ * tagName: The HTML tagname
+ * Special input values for Links and Named anchors:
+ * Use "href" to get a link node
+ * (an "A" tag with the "href" attribute set)
+ * Use "anchor" or "namedanchor" to get a named anchor node
+ * (an "A" tag with the "name" attribute set)
+ *
+ * node: The node in the document to start the search
+ * If it is null, the anchor node of the current selection is used
+ */
nsIDOMElement GetElementOrParentByTagName(in wstring tagName, in nsIDOMNode node);
+
+ /** Return a new element with default attribute values
+ *
+ * This does not rely on the selection, and is not sensitive to context.
+ *
+ * Used primarily to supply new element for various insert element dialogs
+ * (Image, Link, NamedAnchor, Table, and HorizontalRule
+ * are the only returned elements as of 7/25/99)
+ *
+ * tagName: The HTML tagname
+ * Special input values for Links and Named anchors:
+ * Use "href" to get a link node
+ * (an "A" tag with the "href" attribute set)
+ * Use "anchor" or "namedanchor" to get a named anchor node
+ * (an "A" tag with the "name" attribute set)
+ */
nsIDOMElement CreateElementWithDefaults(in wstring tagName);
+
+ /** Insert an element, which may have child nodes, at the selection
+ * Used primarily to insert a new element for various insert element dialogs,
+ * but it enforces the HTML 4.0 DTD "CanContain" rules, so it should
+ * be useful for other elements.
+ *
+ * element: The element to insert
+ * deleteSelection: Delete the selection before inserting
+ * If deleteSelection is PR_FALSE, then the element is inserted
+ * after the end of the selection for all element except
+ * Named Anchors, which insert before the selection
+ */
void InsertElement(in nsIDOMElement element, in boolean deleteSelection);
+
+ /** Insert an link element as the parent of the current selection
+ *
+ * element An "A" element with a non-empty "href" attribute
+ */
void InsertLinkAroundSelection(in nsIDOMElement anchorElement);
void SelectElement(in nsIDOMElement element);
void SetSelectionAfterElement(in nsIDOMElement element);
@@ -227,6 +291,12 @@ interface nsIEditorShell : nsISupports
/* Utility */
wstring GetLocalFileURL(in nsIDOMWindow parent, in wstring filterType);
+ /**
+ * Tests if a node is a BLOCK element according the the HTML 4.0 DTD
+ * This does NOT consider CSS effect on display type
+ */
+ boolean IsNodeBlock(in nsIDOMNode node);
+
void BeginBatchChanges();
void EndBatchChanges();
void RunUnitTests();
diff --git a/editor/libeditor/base/nsEditor.cpp b/editor/libeditor/base/nsEditor.cpp
index 3aed9d654b9..f2f462b854d 100644
--- a/editor/libeditor/base/nsEditor.cpp
+++ b/editor/libeditor/base/nsEditor.cpp
@@ -2093,8 +2093,16 @@ nsEditor::GetLengthOfDOMNode(nsIDOMNode *aNode, PRUint32 &aCount)
return result;
}
+// Non-static version for the nsIEditor interface and JavaScript
+NS_IMETHODIMP
+nsEditor::IsNodeBlock(nsIDOMNode *aNode, PRBool *aIsBlock)
+{
+ if (!aNode || !aIsBlock) { return NS_ERROR_NULL_POINTER; }
+ return IsNodeBlock(aNode, *aIsBlock);
+}
+
// The list of block nodes is shorter, so do the real work here...
-nsresult
+nsresult
nsEditor::IsNodeBlock(nsIDOMNode *aNode, PRBool &aIsBlock)
{
// this is a content-based implementation
diff --git a/editor/libeditor/base/nsEditor.h b/editor/libeditor/base/nsEditor.h
index 821ec7618a2..d79dcaf7913 100644
--- a/editor/libeditor/base/nsEditor.h
+++ b/editor/libeditor/base/nsEditor.h
@@ -411,6 +411,9 @@ public:
/** set aIsBlock to PR_TRUE if aNode is inline as defined by HTML DTD */
static nsresult IsNodeBlock(nsIDOMNode *aNode, PRBool &aIsBlock);
+ /** This version is for exposure to JavaScript */
+ NS_IMETHOD IsNodeBlock(nsIDOMNode *aNode, PRBool *aIsBlock);
+
/** returns the closest block parent of aNode, not including aNode itself.
* can return null, for example if aNode is in a document fragment.
* @param aNode The node whose parent we seek.
diff --git a/editor/libeditor/html/nsHTMLEditor.cpp b/editor/libeditor/html/nsHTMLEditor.cpp
index 1ceebd5ff08..57f9f38baba 100644
--- a/editor/libeditor/html/nsHTMLEditor.cpp
+++ b/editor/libeditor/html/nsHTMLEditor.cpp
@@ -1330,7 +1330,9 @@ NS_IMETHODIMP nsHTMLEditor::SetParagraphFormat(const nsString& aParagraphFormat)
NS_IMETHODIMP
nsHTMLEditor::GetParagraphStyle(nsStringArray *aTagList)
{
+#if 0
if (gNoisy) { printf("---------- nsHTMLEditor::GetParagraphStyle ----------\n"); }
+#endif
if (!aTagList) { return NS_ERROR_NULL_POINTER; }
nsresult res;
@@ -2087,9 +2089,12 @@ nsHTMLEditor::GetSelectedElement(const nsString& aTagName, nsIDOMElement** aRetu
if (bNodeFound)
{
- *aReturn = selectedElement;
- // Getters must addref
- NS_ADDREF(*aReturn);
+ *aReturn = selectedElement;
+ if (selectedElement)
+ {
+ // Getters must addref
+ NS_ADDREF(*aReturn);
+ }
}
return res;
}
diff --git a/editor/public/nsIEditor.h b/editor/public/nsIEditor.h
index 7e4cef78f18..9beeedd5097 100644
--- a/editor/public/nsIEditor.h
+++ b/editor/public/nsIEditor.h
@@ -236,6 +236,14 @@ public:
/* ------------ Node manipulation methods -------------- */
+ /**
+ * Tests if a node is a BLOCK element according the the HTML 4.0 DTD
+ * This does NOT consider CSS effect on display type
+ *
+ * @param aNode the node to test
+ */
+ NS_IMETHOD IsNodeBlock(nsIDOMNode *aNode, PRBool *aIsBlock)=0;
+
/**
* SetAttribute() sets the attribute of aElement.
* No checking is done to see if aAttribute is a legal attribute of the node,
diff --git a/editor/public/nsIHTMLEditor.h b/editor/public/nsIHTMLEditor.h
index 03f626f63da..f5b873de61a 100644
--- a/editor/public/nsIHTMLEditor.h
+++ b/editor/public/nsIHTMLEditor.h
@@ -263,7 +263,7 @@ public:
*
* @param aTagName The HTML tagname
* Special input values for Links and Named anchors:
- * Use "link" or "href" to get a link node
+ * Use "href" to get a link node
* (an "A" tag with the "href" attribute set)
* Use "anchor" or "namedanchor" to get a named anchor node
* (an "A" tag with the "name" attribute set)
@@ -276,13 +276,14 @@ public:
/** Return an element only if it is the only node selected,
* such as an image, horizontal rule, etc.
* The exception is a link, which is more like a text attribute:
- * The Ancho tag is returned if the selection is within the textnode(s)
+ * The Anchor tag is returned if the selection is within the textnode(s)
* that are children of the "A" node.
* This could be a collapsed selection, i.e., a caret within the link text.
*
- * @param aTagName The HTML tagname
+ * @param aTagName The HTML tagname or and empty string
+ * to get any element (but only if it is the only element selected)
* Special input values for Links and Named anchors:
- * Use "link" or "href" to get a link node
+ * Use "href" to get a link node
* (an "A" tag with the "href" attribute set)
* Use "anchor" or "namedanchor" to get a named anchor node
* (an "A" tag with the "name" attribute set)
@@ -299,7 +300,7 @@ public:
*
* @param aTagName The HTML tagname
* Special input values for Links and Named anchors:
- * Use "link" or "href" to get a link node
+ * Use "href" to get a link node
* (an "A" tag with the "href" attribute set)
* Use "anchor" or "namedanchor" to get a named anchor node
* (an "A" tag with the "name" attribute set)
@@ -307,7 +308,6 @@ public:
NS_IMETHOD CreateElementWithDefaults(const nsString& aTagName, nsIDOMElement** aReturn)=0;
/** Insert an link element as the parent of the current selection
- * be useful for other elements.
*
* @param aElement An "A" element with a non-empty "href" attribute
*/
diff --git a/editor/ui/composer/content/editor.properties b/editor/ui/composer/content/editor.properties
index 193d1da162f..43bf53c04bb 100644
--- a/editor/ui/composer/content/editor.properties
+++ b/editor/ui/composer/content/editor.properties
@@ -14,4 +14,6 @@ HTMLFiles=HTML Files
TextFiles=Text Files
SaveFilePrompt=Save changes to current file?
SaveFileFailed=Saving file failed!
+DocumentTitle=Document Title
NeedDocTitle=Document does not have a title.
+SaveDocument=Save Document
diff --git a/editor/ui/dialogs/content/EdImageProps.js b/editor/ui/dialogs/content/EdImageProps.js
index 67fe81467e0..65f6a673fbd 100644
--- a/editor/ui/dialogs/content/EdImageProps.js
+++ b/editor/ui/dialogs/content/EdImageProps.js
@@ -539,7 +539,7 @@ function onOK()
imageElement.setAttribute( "border", dialog.imageborderInput.value );
else
imageElement.removeAttribute( "border" );
-
+/*
alignpopup = document.getElementById("image.alignType");
if ( alignpopup )
{
@@ -550,7 +550,7 @@ function onOK()
else
imageElement.setAttribute("align", alignvalue );
}
-
+*/
// handle insertion of new image
if (insertNew)