2001-09-25 22:53:13 +00:00
|
|
|
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
2004-04-18 14:21:17 +00:00
|
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
1999-03-01 19:54:47 +00:00
|
|
|
*
|
2004-04-18 14:21:17 +00:00
|
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
|
|
* the License. You may obtain a copy of the License at
|
|
|
|
* http://www.mozilla.org/MPL/
|
1999-03-01 19:54:47 +00:00
|
|
|
*
|
2001-09-25 22:53:13 +00:00
|
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
|
|
* for the specific language governing rights and limitations under the
|
|
|
|
* License.
|
1999-03-01 19:54:47 +00:00
|
|
|
*
|
1999-11-06 03:43:54 +00:00
|
|
|
* The Original Code is mozilla.org code.
|
|
|
|
*
|
2004-04-18 14:21:17 +00:00
|
|
|
* The Initial Developer of the Original Code is
|
2001-09-25 22:53:13 +00:00
|
|
|
* Netscape Communications Corporation.
|
|
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
|
|
* the Initial Developer. All Rights Reserved.
|
1999-11-06 03:43:54 +00:00
|
|
|
*
|
2001-09-25 22:53:13 +00:00
|
|
|
* Contributor(s):
|
2002-01-09 13:51:37 +00:00
|
|
|
* Daniel Glazman <glazman@netscape.com>
|
2003-04-15 14:07:30 +00:00
|
|
|
* Kathleen Brade <brade@netscape.com>
|
2001-09-25 22:53:13 +00:00
|
|
|
*
|
|
|
|
* Alternatively, the contents of this file may be used under the terms of
|
2004-04-18 14:21:17 +00:00
|
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
2001-09-25 22:53:13 +00:00
|
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
2004-04-18 14:21:17 +00:00
|
|
|
* use your version of this file under the terms of the MPL, indicate your
|
2001-09-25 22:53:13 +00:00
|
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
|
|
* the provisions above, a recipient may use your version of this file under
|
2004-04-18 14:21:17 +00:00
|
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
2001-09-25 22:53:13 +00:00
|
|
|
*
|
|
|
|
* ***** END LICENSE BLOCK ***** */
|
1999-03-01 19:54:47 +00:00
|
|
|
|
|
|
|
#ifndef nsHTMLEditor_h__
|
|
|
|
#define nsHTMLEditor_h__
|
|
|
|
|
|
|
|
#include "nsCOMPtr.h"
|
2002-11-12 19:40:11 +00:00
|
|
|
#include "nsCOMArray.h"
|
2001-01-28 20:13:07 +00:00
|
|
|
#include "nsPlaintextEditor.h"
|
|
|
|
#include "nsIEditor.h"
|
1999-08-09 01:37:50 +00:00
|
|
|
#include "nsIHTMLEditor.h"
|
|
|
|
#include "nsITableEditor.h"
|
|
|
|
#include "nsIEditorMailSupport.h"
|
|
|
|
#include "nsIEditorStyleSheets.h"
|
2005-02-01 21:12:53 +00:00
|
|
|
#include "nsITextServicesDocument.h"
|
1999-08-09 01:37:50 +00:00
|
|
|
|
|
|
|
#include "nsEditor.h"
|
|
|
|
#include "nsIDOMElement.h"
|
1999-03-01 19:54:47 +00:00
|
|
|
#include "nsIDOMEventListener.h"
|
1999-09-29 21:45:50 +00:00
|
|
|
#include "nsICSSLoader.h"
|
1999-12-04 01:29:18 +00:00
|
|
|
#include "nsICSSLoaderObserver.h"
|
1999-08-01 22:37:58 +00:00
|
|
|
#include "nsITableLayout.h"
|
1999-03-01 19:54:47 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
#include "nsEditRules.h"
|
2001-04-05 23:48:01 +00:00
|
|
|
|
2003-04-17 05:42:33 +00:00
|
|
|
#include "nsEditProperty.h"
|
2002-01-09 13:51:37 +00:00
|
|
|
#include "nsHTMLCSSUtils.h"
|
|
|
|
|
2002-09-13 19:47:38 +00:00
|
|
|
#include "nsVoidArray.h"
|
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
#include "nsHTMLObjectResizer.h"
|
2003-06-25 08:50:48 +00:00
|
|
|
#include "nsIHTMLAbsPosEditor.h"
|
|
|
|
#include "nsIHTMLInlineTableEditor.h"
|
|
|
|
#include "nsIHTMLObjectResizeListener.h"
|
|
|
|
|
|
|
|
#include "nsIDocumentObserver.h"
|
2003-02-24 09:37:18 +00:00
|
|
|
|
|
|
|
#include "nsPoint.h"
|
|
|
|
|
1999-11-03 07:11:45 +00:00
|
|
|
class nsIDOMKeyEvent;
|
2000-04-25 14:14:48 +00:00
|
|
|
class nsITransferable;
|
2000-06-01 02:38:13 +00:00
|
|
|
class nsIDOMEventReceiver;
|
2000-12-06 23:11:21 +00:00
|
|
|
class nsIDOMNSRange;
|
2001-01-08 21:01:29 +00:00
|
|
|
class nsIDocumentEncoder;
|
2002-11-22 03:30:59 +00:00
|
|
|
class nsIClipboard;
|
2001-04-05 23:48:01 +00:00
|
|
|
class TypeInState;
|
2003-04-15 14:07:30 +00:00
|
|
|
class nsIContentFilter;
|
2004-03-04 18:47:49 +00:00
|
|
|
class nsIURL;
|
2004-10-10 03:30:42 +00:00
|
|
|
class nsIRangeUtils;
|
2005-06-09 22:50:41 +00:00
|
|
|
class nsILinkHandler;
|
1999-11-03 07:11:45 +00:00
|
|
|
|
1999-03-01 19:54:47 +00:00
|
|
|
/**
|
|
|
|
* The HTML editor implementation.<br>
|
|
|
|
* Use to edit HTML document represented as a DOM tree.
|
|
|
|
*/
|
2001-01-28 20:13:07 +00:00
|
|
|
class nsHTMLEditor : public nsPlaintextEditor,
|
1999-08-09 01:37:50 +00:00
|
|
|
public nsIHTMLEditor,
|
2003-02-24 09:37:18 +00:00
|
|
|
public nsIHTMLObjectResizer,
|
2003-06-25 08:50:48 +00:00
|
|
|
public nsIHTMLAbsPosEditor,
|
1999-08-09 01:37:50 +00:00
|
|
|
public nsITableEditor,
|
2003-06-25 08:50:48 +00:00
|
|
|
public nsIHTMLInlineTableEditor,
|
1999-12-04 01:29:18 +00:00
|
|
|
public nsIEditorStyleSheets,
|
|
|
|
public nsICSSLoaderObserver
|
1999-03-01 19:54:47 +00:00
|
|
|
{
|
1999-08-09 01:37:50 +00:00
|
|
|
typedef enum {eNoOp, eReplaceParent=1, eInsertParent=2} BlockTransformationType;
|
1999-04-30 22:40:18 +00:00
|
|
|
|
1999-03-01 19:54:47 +00:00
|
|
|
public:
|
1999-12-07 08:30:19 +00:00
|
|
|
|
|
|
|
enum OperationID
|
|
|
|
{
|
|
|
|
kOpInsertBreak = 3000,
|
|
|
|
kOpMakeList = 3001,
|
|
|
|
kOpIndent = 3002,
|
|
|
|
kOpOutdent = 3003,
|
|
|
|
kOpAlign = 3004,
|
|
|
|
kOpMakeBasicBlock = 3005,
|
|
|
|
kOpRemoveList = 3006,
|
fixes:
14753, 29843, 39864, 40141,
40139, 36679, 39542, 34729,
34855, 37216, 39292, 26447
r=sfraser,cmanske,fm; a=beppe
2000-05-24 23:00:24 +00:00
|
|
|
kOpMakeDefListItem = 3007,
|
2000-02-25 04:39:30 +00:00
|
|
|
kOpInsertElement = 3008,
|
2001-01-28 20:13:07 +00:00
|
|
|
kOpInsertQuotation = 3009,
|
|
|
|
kOpSetTextProperty = 3010,
|
|
|
|
kOpRemoveTextProperty = 3011,
|
2001-10-22 06:22:52 +00:00
|
|
|
kOpHTMLPaste = 3012,
|
2003-06-02 22:21:06 +00:00
|
|
|
kOpLoadHTML = 3013,
|
2003-06-25 08:50:48 +00:00
|
|
|
kOpResetTextProperties = 3014,
|
|
|
|
kOpSetAbsolutePosition = 3015,
|
|
|
|
kOpRemoveAbsolutePosition = 3016,
|
|
|
|
kOpDecreaseZIndex = 3017,
|
|
|
|
kOpIncreaseZIndex = 3018
|
1999-12-07 08:30:19 +00:00
|
|
|
};
|
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
enum ResizingRequestID
|
|
|
|
{
|
|
|
|
kX = 0,
|
|
|
|
kY = 1,
|
|
|
|
kWidth = 2,
|
|
|
|
kHeight = 3
|
|
|
|
};
|
1999-12-07 08:30:19 +00:00
|
|
|
|
1999-03-01 19:54:47 +00:00
|
|
|
// see nsIHTMLEditor for documentation
|
|
|
|
|
|
|
|
//Interfaces for addref and release and queryinterface
|
1999-03-05 21:05:35 +00:00
|
|
|
//NOTE macro used is for classes that inherit from
|
|
|
|
// another class. Only the base class should use NS_DECL_ISUPPORTS
|
|
|
|
NS_DECL_ISUPPORTS_INHERITED
|
1999-03-01 19:54:47 +00:00
|
|
|
|
2000-02-08 01:11:13 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
nsHTMLEditor();
|
|
|
|
virtual ~nsHTMLEditor();
|
1999-03-01 19:54:47 +00:00
|
|
|
|
2001-01-28 20:13:07 +00:00
|
|
|
/* ------------ nsPlaintextEditor overrides -------------- */
|
|
|
|
NS_IMETHODIMP HandleKeyPress(nsIDOMKeyEvent* aKeyEvent);
|
2002-09-18 19:42:38 +00:00
|
|
|
NS_IMETHOD GetIsDocumentEditable(PRBool *aIsDocumentEditable);
|
2002-10-08 22:53:55 +00:00
|
|
|
NS_IMETHODIMP BeginningOfDocument();
|
1999-03-01 19:54:47 +00:00
|
|
|
|
2000-11-17 00:25:31 +00:00
|
|
|
/* ------------ nsIHTMLEditor methods -------------- */
|
2002-03-11 13:11:48 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
NS_DECL_NSIHTMLEDITOR
|
2002-01-28 16:00:12 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
/* ------------ nsIHTMLObjectResizer methods -------------- */
|
|
|
|
/* -------- Implemented in nsHTMLObjectResizer.cpp -------- */
|
|
|
|
NS_DECL_NSIHTMLOBJECTRESIZER
|
2003-06-02 22:21:06 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
/* ------------ nsIHTMLAbsPosEditor methods -------------- */
|
|
|
|
/* -------- Implemented in nsHTMLAbsPosition.cpp --------- */
|
|
|
|
NS_DECL_NSIHTMLABSPOSEDITOR
|
2003-06-02 22:21:06 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
/* ------------ nsIHTMLInlineTableEditor methods -------------- */
|
|
|
|
/* ------- Implemented in nsHTMLInlineTableEditor.cpp --------- */
|
|
|
|
NS_DECL_NSIHTMLINLINETABLEEDITOR
|
2003-06-02 22:21:06 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
/* ------------ nsIHTMLEditor methods -------------- */
|
|
|
|
NS_IMETHOD CopyLastEditableChildStyles(nsIDOMNode *aPreviousBlock, nsIDOMNode *aNewBlock,
|
|
|
|
nsIDOMNode **aOutBrNode);
|
2002-10-06 01:23:18 +00:00
|
|
|
|
2002-03-23 22:08:20 +00:00
|
|
|
NS_IMETHOD LoadHTML(const nsAString &aInputString);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
1999-09-22 05:52:44 +00:00
|
|
|
NS_IMETHOD GetParentBlockTags(nsStringArray *aTagList, PRBool aGetLists);
|
fixes:
14753, 29843, 39864, 40141,
40139, 36679, 39542, 34729,
34855, 37216, 39292, 26447
r=sfraser,cmanske,fm; a=beppe
2000-05-24 23:00:24 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
nsresult GetCSSBackgroundColorState(PRBool *aMixed, nsAString &aOutColor,
|
|
|
|
PRBool aBlockLevel);
|
2002-03-23 22:08:20 +00:00
|
|
|
NS_IMETHOD GetHTMLBackgroundColorState(PRBool *aMixed, nsAString &outColor);
|
2002-01-09 13:51:37 +00:00
|
|
|
NS_IMETHOD GetHighlightColor(PRBool *mixed, PRUnichar **_retval);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
NS_IMETHOD GetNextElementByTagName(nsIDOMElement *aCurrentElement, const nsAString *aTagName, nsIDOMElement **aReturn);
|
2003-06-19 14:06:05 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
/* ------------ nsIEditorStyleSheets methods -------------- */
|
|
|
|
|
2002-09-13 19:47:38 +00:00
|
|
|
NS_IMETHOD AddStyleSheet(const nsAString & aURL);
|
|
|
|
NS_IMETHOD ReplaceStyleSheet(const nsAString& aURL);
|
|
|
|
NS_IMETHOD RemoveStyleSheet(const nsAString &aURL);
|
|
|
|
|
|
|
|
NS_IMETHOD AddOverrideStyleSheet(const nsAString & aURL);
|
|
|
|
NS_IMETHOD ReplaceOverrideStyleSheet(const nsAString& aURL);
|
|
|
|
NS_IMETHOD RemoveOverrideStyleSheet(const nsAString &aURL);
|
|
|
|
|
|
|
|
NS_IMETHOD EnableStyleSheet(const nsAString& aURL, PRBool aEnable);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
|
|
|
/* ------------ nsIEditorMailSupport methods -------------- */
|
|
|
|
|
2003-07-28 13:13:50 +00:00
|
|
|
NS_DECL_NSIEDITORMAILSUPPORT
|
1999-08-09 01:37:50 +00:00
|
|
|
|
|
|
|
/* ------------ nsITableEditor methods -------------- */
|
|
|
|
|
|
|
|
NS_IMETHOD InsertTableCell(PRInt32 aNumber, PRBool aAfter);
|
|
|
|
NS_IMETHOD InsertTableColumn(PRInt32 aNumber, PRBool aAfter);
|
|
|
|
NS_IMETHOD InsertTableRow(PRInt32 aNumber, PRBool aAfter);
|
|
|
|
NS_IMETHOD DeleteTable();
|
|
|
|
NS_IMETHOD DeleteTableCell(PRInt32 aNumber);
|
2000-01-13 23:33:00 +00:00
|
|
|
NS_IMETHOD DeleteTableCellContents();
|
1999-08-09 01:37:50 +00:00
|
|
|
NS_IMETHOD DeleteTableColumn(PRInt32 aNumber);
|
|
|
|
NS_IMETHOD DeleteTableRow(PRInt32 aNumber);
|
2000-02-10 05:14:52 +00:00
|
|
|
NS_IMETHOD SelectTableCell();
|
2000-03-16 23:45:41 +00:00
|
|
|
NS_IMETHOD SelectBlockOfCells(nsIDOMElement *aStartCell, nsIDOMElement *aEndCell);
|
2000-02-10 05:14:52 +00:00
|
|
|
NS_IMETHOD SelectTableRow();
|
|
|
|
NS_IMETHOD SelectTableColumn();
|
|
|
|
NS_IMETHOD SelectTable();
|
|
|
|
NS_IMETHOD SelectAllTableCells();
|
2000-06-14 04:58:29 +00:00
|
|
|
NS_IMETHOD SwitchTableCellHeaderType(nsIDOMElement *aSourceCell, nsIDOMElement **aNewCell);
|
2000-07-01 00:37:12 +00:00
|
|
|
NS_IMETHOD JoinTableCells(PRBool aMergeNonContiguousContents);
|
2000-05-04 22:32:24 +00:00
|
|
|
NS_IMETHOD SplitTableCell();
|
1999-08-09 01:37:50 +00:00
|
|
|
NS_IMETHOD NormalizeTable(nsIDOMElement *aTable);
|
2002-03-14 22:11:14 +00:00
|
|
|
NS_IMETHOD GetCellIndexes(nsIDOMElement *aCell,
|
|
|
|
PRInt32* aRowIndex, PRInt32* aColIndex);
|
|
|
|
NS_IMETHOD GetTableSize(nsIDOMElement *aTable,
|
|
|
|
PRInt32* aRowCount, PRInt32* aColCount);
|
2001-02-26 22:02:58 +00:00
|
|
|
NS_IMETHOD GetCellAt(nsIDOMElement* aTable, PRInt32 aRowIndex, PRInt32 aColIndex, nsIDOMElement **aCell);
|
2002-03-14 22:11:14 +00:00
|
|
|
NS_IMETHOD GetCellDataAt(nsIDOMElement* aTable,
|
|
|
|
PRInt32 aRowIndex, PRInt32 aColIndex,
|
|
|
|
nsIDOMElement **aCell,
|
|
|
|
PRInt32* aStartRowIndex, PRInt32* aStartColIndex,
|
|
|
|
PRInt32* aRowSpan, PRInt32* aColSpan,
|
|
|
|
PRInt32* aActualRowSpan, PRInt32* aActualColSpan,
|
|
|
|
PRBool* aIsSelected);
|
2001-02-26 22:02:58 +00:00
|
|
|
NS_IMETHOD GetFirstRow(nsIDOMElement* aTableElement, nsIDOMNode** aRowNode);
|
|
|
|
NS_IMETHOD GetNextRow(nsIDOMNode* aCurrentRowNode, nsIDOMNode** aRowNode);
|
|
|
|
NS_IMETHOD GetFirstCellInRow(nsIDOMNode* aRowNode, nsIDOMNode** aCellNode);
|
|
|
|
NS_IMETHOD GetNextCellInRow(nsIDOMNode* aCurrentCellNode, nsIDOMNode** aRowNode);
|
|
|
|
NS_IMETHOD GetLastCellInRow(nsIDOMNode* aRowNode, nsIDOMNode** aCellNode);
|
|
|
|
|
2000-05-15 03:06:29 +00:00
|
|
|
NS_IMETHOD SetSelectionAfterTableEdit(nsIDOMElement* aTable, PRInt32 aRow, PRInt32 aCol,
|
|
|
|
PRInt32 aDirection, PRBool aSelected);
|
2002-09-13 04:19:30 +00:00
|
|
|
NS_IMETHOD GetSelectedOrParentTableElement(nsAString& aTagName,
|
|
|
|
PRInt32 *aSelectedCount,
|
|
|
|
nsIDOMElement** aTableElement);
|
2002-03-14 22:11:14 +00:00
|
|
|
NS_IMETHOD GetSelectedCellsType(nsIDOMElement *aElement, PRUint32 *aSelectionType);
|
2000-07-01 00:37:12 +00:00
|
|
|
|
|
|
|
nsresult GetCellFromRange(nsIDOMRange *aRange, nsIDOMElement **aCell);
|
|
|
|
|
2000-03-21 06:05:24 +00:00
|
|
|
// Finds the first selected cell in first range of selection
|
|
|
|
// This is in the *order of selection*, not order in the table
|
|
|
|
// (i.e., each cell added to selection is added in another range
|
|
|
|
// in the selection's rangelist, independent of location in table)
|
2000-03-31 04:18:29 +00:00
|
|
|
// aRange is optional: returns the range around the cell
|
2002-09-13 04:19:30 +00:00
|
|
|
NS_IMETHOD GetFirstSelectedCell(nsIDOMRange **aRange, nsIDOMElement **aCell);
|
2000-03-21 06:05:24 +00:00
|
|
|
// Get next cell until no more are found. Always use GetFirstSelected cell first
|
2000-03-31 04:18:29 +00:00
|
|
|
// aRange is optional: returns the range around the cell
|
2002-09-13 04:19:30 +00:00
|
|
|
NS_IMETHOD GetNextSelectedCell(nsIDOMRange **aRange, nsIDOMElement **aCell);
|
1999-03-01 19:54:47 +00:00
|
|
|
|
2000-05-15 03:06:29 +00:00
|
|
|
// Upper-left-most selected cell in table
|
2002-09-13 04:19:30 +00:00
|
|
|
NS_IMETHOD GetFirstSelectedCellInTable(PRInt32 *aRowIndex, PRInt32 *aColIndex, nsIDOMElement **aCell);
|
2000-03-21 06:05:24 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
/* miscellaneous */
|
|
|
|
// This sets background on the appropriate container element (table, cell,)
|
|
|
|
// or calls into nsTextEditor to set the page background
|
2002-03-23 22:08:20 +00:00
|
|
|
NS_IMETHOD SetCSSBackgroundColor(const nsAString& aColor);
|
|
|
|
NS_IMETHOD SetHTMLBackgroundColor(const nsAString& aColor);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
2001-04-05 23:48:01 +00:00
|
|
|
/* ------------ Block methods moved from nsEditor -------------- */
|
|
|
|
static nsCOMPtr<nsIDOMNode> GetBlockNodeParent(nsIDOMNode *aNode);
|
|
|
|
static PRBool HasSameBlockNodeParent(nsIDOMNode *aNode1, nsIDOMNode *aNode2);
|
|
|
|
/** Determines the bounding nodes for the block section containing aNode.
|
|
|
|
* The calculation is based on some nodes intrinsically being block elements
|
|
|
|
* acording to HTML. Style sheets are not considered in this calculation.
|
|
|
|
* <BR> tags separate block content sections. So the HTML markup:
|
|
|
|
* <PRE>
|
|
|
|
* <P>text1<BR>text2<B>text3</B></P>
|
|
|
|
* </PRE>
|
|
|
|
* contains two block content sections. The first has the text node "text1"
|
|
|
|
* for both endpoints. The second has "text2" as the left endpoint and
|
|
|
|
* "text3" as the right endpoint.
|
|
|
|
* Notice that offsets aren't required, only leaf nodes. Offsets are implicit.
|
|
|
|
*
|
|
|
|
* @param aNode the block content returned includes aNode
|
|
|
|
* @param aLeftNode [OUT] the left endpoint of the block content containing aNode
|
|
|
|
* @param aRightNode [OUT] the right endpoint of the block content containing aNode
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
static nsresult GetBlockSection(nsIDOMNode *aNode,
|
|
|
|
nsIDOMNode **aLeftNode,
|
|
|
|
nsIDOMNode **aRightNode);
|
|
|
|
|
|
|
|
/** Compute the set of block sections in a given range.
|
|
|
|
* A block section is the set of (leftNode, rightNode) pairs given
|
|
|
|
* by GetBlockSection. The set is computed by computing the
|
|
|
|
* block section for every leaf node in the range and throwing
|
|
|
|
* out duplicates.
|
|
|
|
*
|
|
|
|
* @param aRange The range to compute block sections for.
|
|
|
|
* @param aSections Allocated storage for the resulting set, stored as nsIDOMRanges.
|
|
|
|
*/
|
|
|
|
static nsresult GetBlockSectionsForRange(nsIDOMRange *aRange,
|
2002-11-12 19:40:11 +00:00
|
|
|
nsCOMArray<nsIDOMRange>& aSections);
|
2001-04-05 23:48:01 +00:00
|
|
|
|
|
|
|
static nsCOMPtr<nsIDOMNode> NextNodeInBlock(nsIDOMNode *aNode, IterDirection aDir);
|
|
|
|
nsresult IsNextCharWhitespace(nsIDOMNode *aParentNode,
|
|
|
|
PRInt32 aOffset,
|
|
|
|
PRBool *outIsSpace,
|
|
|
|
PRBool *outIsNBSP,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outNode = 0,
|
|
|
|
PRInt32 *outOffset = 0);
|
|
|
|
nsresult IsPrevCharWhitespace(nsIDOMNode *aParentNode,
|
|
|
|
PRInt32 aOffset,
|
|
|
|
PRBool *outIsSpace,
|
|
|
|
PRBool *outIsNBSP,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outNode = 0,
|
|
|
|
PRInt32 *outOffset = 0);
|
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
/* ------------ Overrides of nsEditor interface methods -------------- */
|
|
|
|
|
2003-03-25 15:24:08 +00:00
|
|
|
nsresult EndUpdateViewBatch();
|
|
|
|
|
1999-08-23 06:42:04 +00:00
|
|
|
/** prepare the editor for use */
|
2000-05-04 08:33:48 +00:00
|
|
|
NS_IMETHOD Init(nsIDOMDocument *aDoc, nsIPresShell *aPresShell, nsIContent *aRoot, nsISelectionController *aSelCon, PRUint32 aFlags);
|
1999-08-23 06:42:04 +00:00
|
|
|
|
2001-04-05 23:48:01 +00:00
|
|
|
/** Internal, static version */
|
2001-04-07 00:45:26 +00:00
|
|
|
static nsresult NodeIsBlockStatic(nsIDOMNode *aNode, PRBool *aIsBlock);
|
2001-04-05 23:48:01 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
NS_IMETHOD GetFlags(PRUint32 *aFlags);
|
|
|
|
NS_IMETHOD SetFlags(PRUint32 aFlags);
|
1999-05-07 05:02:35 +00:00
|
|
|
|
2000-04-14 23:38:21 +00:00
|
|
|
NS_IMETHOD Paste(PRInt32 aSelectionType);
|
2001-04-07 00:45:26 +00:00
|
|
|
NS_IMETHOD CanPaste(PRInt32 aSelectionType, PRBool *aCanPaste);
|
1999-07-14 18:54:29 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
NS_IMETHOD DebugUnitTests(PRInt32 *outNumTests, PRInt32 *outNumTestsFailed);
|
1999-07-01 19:32:35 +00:00
|
|
|
|
1999-12-07 08:30:19 +00:00
|
|
|
/** All editor operations which alter the doc should be prefaced
|
|
|
|
* with a call to StartOperation, naming the action and direction */
|
|
|
|
NS_IMETHOD StartOperation(PRInt32 opID, nsIEditor::EDirection aDirection);
|
|
|
|
|
|
|
|
/** All editor operations which alter the doc should be followed
|
2000-08-14 02:39:37 +00:00
|
|
|
* with a call to EndOperation */
|
|
|
|
NS_IMETHOD EndOperation();
|
1999-12-07 08:30:19 +00:00
|
|
|
|
2000-06-29 09:23:41 +00:00
|
|
|
/** returns PR_TRUE if aParentTag can contain a child of type aChildTag */
|
2002-03-23 22:08:20 +00:00
|
|
|
virtual PRBool TagCanContainTag(const nsAString& aParentTag, const nsAString& aChildTag);
|
2000-01-10 10:13:58 +00:00
|
|
|
|
2005-09-05 14:18:56 +00:00
|
|
|
/** returns PR_TRUE if aNode is a container */
|
|
|
|
virtual PRBool IsContainer(nsIDOMNode *aNode);
|
|
|
|
|
2000-01-13 10:17:35 +00:00
|
|
|
/** make the given selection span the entire document */
|
2000-09-14 11:45:01 +00:00
|
|
|
NS_IMETHOD SelectEntireDocument(nsISelection *aSelection);
|
2000-01-13 10:17:35 +00:00
|
|
|
|
2002-01-25 10:16:52 +00:00
|
|
|
NS_IMETHOD SetAttributeOrEquivalent(nsIDOMElement * aElement,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString & aAttribute,
|
2002-09-17 12:04:59 +00:00
|
|
|
const nsAString & aValue,
|
|
|
|
PRBool aSuppressTransaction);
|
2002-03-15 15:33:29 +00:00
|
|
|
NS_IMETHOD RemoveAttributeOrEquivalent(nsIDOMElement * aElement,
|
2002-09-17 12:04:59 +00:00
|
|
|
const nsAString & aAttribute,
|
|
|
|
PRBool aSuppressTransaction);
|
2002-01-09 13:51:37 +00:00
|
|
|
|
2000-03-29 12:53:23 +00:00
|
|
|
/** join together any afjacent editable text nodes in the range */
|
|
|
|
NS_IMETHOD CollapseAdjacentTextNodes(nsIDOMRange *aInRange);
|
|
|
|
|
2002-01-09 13:51:37 +00:00
|
|
|
virtual PRBool NodesSameType(nsIDOMNode *aNode1, nsIDOMNode *aNode2);
|
|
|
|
|
2002-12-22 01:51:14 +00:00
|
|
|
NS_IMETHODIMP DeleteNode(nsIDOMNode * aNode);
|
|
|
|
NS_IMETHODIMP DeleteText(nsIDOMCharacterData *aTextNode,
|
|
|
|
PRUint32 aOffset,
|
|
|
|
PRUint32 aLength);
|
|
|
|
|
2000-01-13 10:17:35 +00:00
|
|
|
/* ------------ nsICSSLoaderObserver -------------- */
|
2005-09-12 18:41:15 +00:00
|
|
|
NS_IMETHOD StyleSheetLoaded(nsICSSStyleSheet*aSheet, PRBool aWasAlternate,
|
|
|
|
nsresult aStatus);
|
2000-01-13 10:17:35 +00:00
|
|
|
|
1999-08-19 22:11:58 +00:00
|
|
|
/* ------------ Utility Routines, not part of public API -------------- */
|
2002-03-23 22:08:20 +00:00
|
|
|
NS_IMETHOD TypedText(const nsAString& aString, PRInt32 aAction);
|
2001-06-15 22:29:07 +00:00
|
|
|
nsresult InsertNodeAtPoint( nsIDOMNode *aNode,
|
|
|
|
nsCOMPtr<nsIDOMNode> *ioParent,
|
|
|
|
PRInt32 *ioOffset,
|
|
|
|
PRBool aNoEmptyNodes);
|
2002-12-22 01:51:14 +00:00
|
|
|
nsCOMPtr<nsIDOMNode> FindUserSelectAllNode(nsIDOMNode *aNode);
|
Checking in for bug 50742, this change removes the use of XIF in mozilla and replaces the XIF converter with a HTML (and XML) serializer.
Contextual information added to HTML copy and intelligence added to HTML paste in the editor (fixes bugs 47014, 50568 and 46554, and partly (at least) fixes bug 53188).
Code written by vidur, jfrancis, jst, akkana. Tested by jfrancis, akkana, vidur, jst, kin. Reviwed (and super reviewed) by waterson, vidur, kin, jfrancis, jst
2000-10-07 10:57:30 +00:00
|
|
|
|
1999-08-19 22:11:58 +00:00
|
|
|
|
2000-03-29 12:53:23 +00:00
|
|
|
/** returns the absolute position of the end points of aSelection
|
|
|
|
* in the document as a text stream.
|
|
|
|
*/
|
2000-09-14 11:45:01 +00:00
|
|
|
nsresult GetTextSelectionOffsets(nsISelection *aSelection,
|
2000-03-29 12:53:23 +00:00
|
|
|
PRInt32 &aStartOffset,
|
|
|
|
PRInt32 &aEndOffset);
|
|
|
|
|
|
|
|
nsresult GetAbsoluteOffsetsForPoints(nsIDOMNode *aInStartNode,
|
|
|
|
PRInt32 aInStartOffset,
|
|
|
|
nsIDOMNode *aInEndNode,
|
|
|
|
PRInt32 aInEndOffset,
|
|
|
|
nsIDOMNode *aInCommonParentNode,
|
|
|
|
PRInt32 &aOutStartOffset,
|
|
|
|
PRInt32 &aEndOffset);
|
2000-04-04 14:51:26 +00:00
|
|
|
|
|
|
|
// Use this to assure that selection is set after attribute nodes when
|
|
|
|
// trying to collapse selection at begining of a block node
|
|
|
|
// e.g., when setting at beginning of a table cell
|
|
|
|
// This will stop at a table, however, since we don't want to
|
|
|
|
// "drill down" into nested tables.
|
|
|
|
// aSelection is optional -- if null, we get current seletion
|
2000-09-14 11:45:01 +00:00
|
|
|
nsresult CollapseSelectionToDeepestNonTableFirstChild(nsISelection *aSelection, nsIDOMNode *aNode);
|
2000-03-29 12:53:23 +00:00
|
|
|
|
2003-06-11 11:50:36 +00:00
|
|
|
virtual PRBool IsTextInDirtyFrameVisible(nsIDOMNode *aNode);
|
|
|
|
|
2002-04-14 02:37:23 +00:00
|
|
|
nsresult IsVisTextNode( nsIDOMNode *aNode,
|
|
|
|
PRBool *outIsEmptyNode,
|
|
|
|
PRBool aSafeToAskFrames);
|
2000-08-26 04:03:50 +00:00
|
|
|
nsresult IsEmptyNode(nsIDOMNode *aNode, PRBool *outIsEmptyBlock,
|
|
|
|
PRBool aMozBRDoesntCount = PR_FALSE,
|
|
|
|
PRBool aListOrCellNotEmpty = PR_FALSE,
|
|
|
|
PRBool aSafeToAskFrames = PR_FALSE);
|
2002-04-14 02:37:23 +00:00
|
|
|
nsresult IsEmptyNodeImpl(nsIDOMNode *aNode,
|
|
|
|
PRBool *outIsEmptyBlock,
|
|
|
|
PRBool aMozBRDoesntCount,
|
|
|
|
PRBool aListOrCellNotEmpty,
|
|
|
|
PRBool aSafeToAskFrames,
|
|
|
|
PRBool *aSeenBR);
|
2002-09-13 19:47:38 +00:00
|
|
|
|
|
|
|
// Stylesheet-related methods that aren't part of nsIEditorStyleSheets.
|
|
|
|
nsresult AddCSSStyleSheet(nsICSSStyleSheet* aSheet);
|
|
|
|
nsresult GetCSSLoader(const nsAString& aURL, nsICSSLoader** aCSSLoader);
|
|
|
|
|
|
|
|
// Returns TRUE if sheet was loaded, false if it wasn't
|
|
|
|
PRBool EnableExistingStyleSheet(const nsAString& aURL);
|
|
|
|
|
|
|
|
// Dealing with the internal style sheet lists:
|
|
|
|
NS_IMETHOD GetStyleSheetForURL(const nsAString &aURL,
|
|
|
|
nsICSSStyleSheet **_retval);
|
|
|
|
NS_IMETHOD GetURLForStyleSheet(nsICSSStyleSheet *aStyleSheet, nsAString &aURL);
|
|
|
|
|
|
|
|
// Add a url + known style sheet to the internal lists:
|
|
|
|
nsresult AddNewStyleSheetToList(const nsAString &aURL,
|
|
|
|
nsICSSStyleSheet *aStyleSheet);
|
|
|
|
|
|
|
|
nsresult RemoveStyleSheetFromList(const nsAString &aURL);
|
2001-04-17 10:15:05 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
protected:
|
1999-06-14 20:02:46 +00:00
|
|
|
|
2000-03-24 00:26:47 +00:00
|
|
|
NS_IMETHOD InitRules();
|
1999-06-14 20:02:46 +00:00
|
|
|
|
2005-03-24 19:00:01 +00:00
|
|
|
// Create the event listeners for the editor to install
|
|
|
|
virtual nsresult CreateEventListeners();
|
|
|
|
|
|
|
|
virtual void RemoveEventListeners();
|
1999-08-23 06:42:04 +00:00
|
|
|
|
1999-08-19 13:30:48 +00:00
|
|
|
/** returns the layout object (nsIFrame in the real world) for aNode
|
|
|
|
* @param aNode the content to get a frame for
|
|
|
|
* @param aLayoutObject the "primary frame" for aNode, if one exists. May be null
|
|
|
|
* @return NS_OK whether a frame is found or not
|
|
|
|
* an error if some serious error occurs
|
|
|
|
*/
|
|
|
|
NS_IMETHOD GetLayoutObject(nsIDOMNode *aInNode, nsISupports **aOutLayoutObject);
|
|
|
|
|
1999-07-23 00:52:17 +00:00
|
|
|
// Return TRUE if aElement is a table-related elemet and caret was set
|
1999-12-04 01:46:23 +00:00
|
|
|
PRBool SetCaretInTableCell(nsIDOMElement* aElement);
|
|
|
|
PRBool IsElementInBody(nsIDOMElement* aElement);
|
|
|
|
|
2000-01-31 10:30:12 +00:00
|
|
|
// inline style caching
|
|
|
|
void ClearInlineStylesCache();
|
|
|
|
|
1999-09-13 09:37:51 +00:00
|
|
|
// key event helpers
|
|
|
|
NS_IMETHOD TabInTable(PRBool inIsShift, PRBool *outHandled);
|
2000-02-25 04:39:30 +00:00
|
|
|
NS_IMETHOD CreateBR(nsIDOMNode *aNode, PRInt32 aOffset,
|
2001-01-28 20:13:07 +00:00
|
|
|
nsCOMPtr<nsIDOMNode> *outBRNode, nsIEditor::EDirection aSelect = nsIEditor::eNone);
|
2000-04-13 21:50:19 +00:00
|
|
|
NS_IMETHOD CreateBRImpl(nsCOMPtr<nsIDOMNode> *aInOutParent,
|
2000-03-24 00:26:47 +00:00
|
|
|
PRInt32 *aInOutOffset,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outBRNode,
|
2001-01-28 20:13:07 +00:00
|
|
|
nsIEditor::EDirection aSelect);
|
1999-09-29 20:08:15 +00:00
|
|
|
NS_IMETHOD InsertBR(nsCOMPtr<nsIDOMNode> *outBRNode);
|
1999-09-13 09:37:51 +00:00
|
|
|
|
2000-02-10 05:14:52 +00:00
|
|
|
// Table Editing (implemented in nsTableEditor.cpp)
|
1999-08-01 22:37:58 +00:00
|
|
|
|
1999-12-04 01:46:23 +00:00
|
|
|
// Table utilities
|
|
|
|
|
2000-02-03 02:06:10 +00:00
|
|
|
// Insert a new cell after or before supplied aCell.
|
|
|
|
// Optional: If aNewCell supplied, returns the newly-created cell (addref'd, of course)
|
|
|
|
// This doesn't change or use the current selection
|
|
|
|
NS_IMETHOD InsertCell(nsIDOMElement *aCell, PRInt32 aRowSpan, PRInt32 aColSpan,
|
2000-06-14 04:58:29 +00:00
|
|
|
PRBool aAfter, PRBool aIsHeader, nsIDOMElement **aNewCell);
|
2000-05-02 03:24:11 +00:00
|
|
|
|
2000-07-01 00:37:12 +00:00
|
|
|
// Helpers that don't touch the selection or do batch transactions
|
|
|
|
NS_IMETHOD DeleteRow(nsIDOMElement *aTable, PRInt32 aRowIndex);
|
|
|
|
NS_IMETHOD DeleteColumn(nsIDOMElement *aTable, PRInt32 aColIndex);
|
|
|
|
NS_IMETHOD DeleteCellContents(nsIDOMElement *aCell);
|
|
|
|
|
2000-05-02 03:24:11 +00:00
|
|
|
// Move all contents from aCellToMerge into aTargetCell (append at end)
|
|
|
|
NS_IMETHOD MergeCells(nsCOMPtr<nsIDOMElement> aTargetCell, nsCOMPtr<nsIDOMElement> aCellToMerge, PRBool aDeleteCellToMerge);
|
|
|
|
|
2000-09-14 11:45:01 +00:00
|
|
|
NS_IMETHOD DeleteTable2(nsIDOMElement *aTable, nsISelection *aSelection);
|
2000-02-03 02:06:10 +00:00
|
|
|
NS_IMETHOD SetColSpan(nsIDOMElement *aCell, PRInt32 aColSpan);
|
|
|
|
NS_IMETHOD SetRowSpan(nsIDOMElement *aCell, PRInt32 aRowSpan);
|
|
|
|
|
1999-08-01 22:37:58 +00:00
|
|
|
// Helper used to get nsITableLayout interface for methods implemented in nsTableFrame
|
|
|
|
NS_IMETHOD GetTableLayoutObject(nsIDOMElement* aTable, nsITableLayout **tableLayoutObject);
|
1999-12-07 01:12:10 +00:00
|
|
|
// Needed to do appropriate deleting when last cell or row is about to be deleted
|
|
|
|
// This doesn't count cells that don't start in the given row (are spanning from row above)
|
2000-01-26 14:57:43 +00:00
|
|
|
PRInt32 GetNumberOfCellsInRow(nsIDOMElement* aTable, PRInt32 rowIndex);
|
2000-03-21 06:05:24 +00:00
|
|
|
// Test if all cells in row or column at given index are selected
|
|
|
|
PRBool AllCellsInRowSelected(nsIDOMElement *aTable, PRInt32 aRowIndex, PRInt32 aNumberOfColumns);
|
|
|
|
PRBool AllCellsInColumnSelected(nsIDOMElement *aTable, PRInt32 aColIndex, PRInt32 aNumberOfRows);
|
|
|
|
|
2000-07-11 23:41:22 +00:00
|
|
|
PRBool IsEmptyCell(nsIDOMElement *aCell);
|
2000-06-22 05:39:54 +00:00
|
|
|
|
1999-12-04 01:46:23 +00:00
|
|
|
// Most insert methods need to get the same basic context data
|
2000-05-02 03:24:11 +00:00
|
|
|
// Any of the pointers may be null if you don't need that datum (for more efficiency)
|
|
|
|
// Input: *aCell is a known cell,
|
|
|
|
// if null, cell is obtained from the anchor node of the selection
|
|
|
|
// Returns NS_EDITOR_ELEMENT_NOT_FOUND if cell is not found even if aCell is null
|
2000-09-14 11:45:01 +00:00
|
|
|
NS_IMETHOD GetCellContext(nsISelection **aSelection,
|
2000-05-02 03:24:11 +00:00
|
|
|
nsIDOMElement **aTable,
|
|
|
|
nsIDOMElement **aCell,
|
|
|
|
nsIDOMNode **aCellParent, PRInt32 *aCellOffset,
|
|
|
|
PRInt32 *aRowIndex, PRInt32 *aColIndex);
|
1999-08-04 02:06:03 +00:00
|
|
|
|
2000-05-15 03:06:29 +00:00
|
|
|
NS_IMETHOD GetCellSpansAt(nsIDOMElement* aTable, PRInt32 aRowIndex, PRInt32 aColIndex,
|
|
|
|
PRInt32& aActualRowSpan, PRInt32& aActualColSpan);
|
|
|
|
|
|
|
|
NS_IMETHOD SplitCellIntoColumns(nsIDOMElement *aTable, PRInt32 aRowIndex, PRInt32 aColIndex,
|
|
|
|
PRInt32 aColSpanLeft, PRInt32 aColSpanRight, nsIDOMElement **aNewCell);
|
|
|
|
|
|
|
|
NS_IMETHOD SplitCellIntoRows(nsIDOMElement *aTable, PRInt32 aRowIndex, PRInt32 aColIndex,
|
|
|
|
PRInt32 aRowSpanAbove, PRInt32 aRowSpanBelow, nsIDOMElement **aNewCell);
|
|
|
|
|
2000-08-30 02:44:08 +00:00
|
|
|
nsresult CopyCellBackgroundColor(nsIDOMElement *destCell, nsIDOMElement *sourceCell);
|
|
|
|
|
2000-07-01 00:37:12 +00:00
|
|
|
// Reduce rowspan/colspan when cells span into non-existent rows/columns
|
2000-05-15 03:06:29 +00:00
|
|
|
NS_IMETHOD FixBadRowSpan(nsIDOMElement *aTable, PRInt32 aRowIndex, PRInt32& aNewRowCount);
|
2000-07-01 00:37:12 +00:00
|
|
|
NS_IMETHOD FixBadColSpan(nsIDOMElement *aTable, PRInt32 aColIndex, PRInt32& aNewColCount);
|
2000-05-15 03:06:29 +00:00
|
|
|
|
2000-02-10 05:14:52 +00:00
|
|
|
// Fallback method: Call this after using ClearSelection() and you
|
|
|
|
// failed to set selection to some other content in the document
|
2000-09-14 11:45:01 +00:00
|
|
|
NS_IMETHOD SetSelectionAtDocumentStart(nsISelection *aSelection);
|
1999-08-05 20:04:58 +00:00
|
|
|
|
2000-03-21 06:05:24 +00:00
|
|
|
// End of Table Editing utilities
|
|
|
|
|
1999-05-05 04:05:19 +00:00
|
|
|
NS_IMETHOD IsRootTag(nsString &aTag, PRBool &aIsTag);
|
|
|
|
|
|
|
|
NS_IMETHOD IsSubordinateBlock(nsString &aTag, PRBool &aIsTag);
|
|
|
|
|
2001-12-09 09:24:33 +00:00
|
|
|
virtual PRBool IsBlockNode(nsIDOMNode *aNode);
|
|
|
|
|
1999-09-19 10:32:21 +00:00
|
|
|
static nsCOMPtr<nsIDOMNode> GetEnclosingTable(nsIDOMNode *aNode);
|
1999-05-05 04:05:19 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
/** content-based query returns PR_TRUE if <aProperty aAttribute=aValue> effects aNode
|
|
|
|
* If <aProperty aAttribute=aValue> contains aNode,
|
|
|
|
* but <aProperty aAttribute=SomeOtherValue> also contains aNode and the second is
|
|
|
|
* more deeply nested than the first, then the first does not effect aNode.
|
|
|
|
*
|
|
|
|
* @param aNode The target of the query
|
|
|
|
* @param aProperty The property that we are querying for
|
|
|
|
* @param aAttribute The attribute of aProperty, example: color in <FONT color="blue">
|
|
|
|
* May be null.
|
|
|
|
* @param aValue The value of aAttribute, example: blue in <FONT color="blue">
|
|
|
|
* May be null. Ignored if aAttribute is null.
|
|
|
|
* @param aIsSet [OUT] PR_TRUE if <aProperty aAttribute=aValue> effects aNode.
|
|
|
|
* @param aStyleNode [OUT] set to the node representing <aProperty aAttribute=aValue>, if found.
|
|
|
|
* null if aIsSet is returned as PR_FALSE;
|
|
|
|
*/
|
2001-11-29 10:08:25 +00:00
|
|
|
virtual void IsTextPropertySetByContent(nsIDOMNode *aNode,
|
|
|
|
nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute,
|
|
|
|
const nsAString *aValue,
|
2001-11-29 10:08:25 +00:00
|
|
|
PRBool &aIsSet,
|
|
|
|
nsIDOMNode **aStyleNode,
|
2003-06-02 22:21:06 +00:00
|
|
|
nsAString *outValue = nsnull);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
|
|
|
void ResetTextSelectionForRange(nsIDOMNode *aParent,
|
|
|
|
PRInt32 aStartOffset,
|
|
|
|
PRInt32 aEndOffset,
|
2000-09-14 11:45:01 +00:00
|
|
|
nsISelection *aSelection);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
|
|
|
// Methods for handling plaintext quotations
|
2000-04-14 23:38:21 +00:00
|
|
|
NS_IMETHOD PasteAsPlaintextQuotation(PRInt32 aSelectionType);
|
2002-10-08 20:24:23 +00:00
|
|
|
|
|
|
|
/** Insert a string as quoted text,
|
|
|
|
* replacing the selected text (if any).
|
|
|
|
* @param aQuotedText The string to insert.
|
|
|
|
* @param aAddCites Whether to prepend extra ">" to each line
|
|
|
|
* (usually true, unless those characters
|
|
|
|
* have already been added.)
|
|
|
|
* @return aNodeInserted The node spanning the insertion, if applicable.
|
|
|
|
* If aAddCites is false, this will be null.
|
|
|
|
*/
|
2002-03-23 22:08:20 +00:00
|
|
|
NS_IMETHOD InsertAsPlaintextQuotation(const nsAString & aQuotedText,
|
2002-10-08 20:24:23 +00:00
|
|
|
PRBool aAddCites,
|
1999-11-24 20:48:59 +00:00
|
|
|
nsIDOMNode **aNodeInserted);
|
1999-08-09 01:37:50 +00:00
|
|
|
|
2000-04-25 14:14:48 +00:00
|
|
|
// factored methods for handling insertion of data from transferables (drag&drop or clipboard)
|
|
|
|
NS_IMETHOD PrepareTransferable(nsITransferable **transferable);
|
2002-11-22 03:30:59 +00:00
|
|
|
NS_IMETHOD PrepareHTMLTransferable(nsITransferable **transferable, PRBool havePrivFlavor);
|
2003-04-17 13:18:51 +00:00
|
|
|
nsresult PutDragDataInTransferable(nsITransferable **aTransferable);
|
Checking in for bug 50742, this change removes the use of XIF in mozilla and replaces the XIF converter with a HTML (and XML) serializer.
Contextual information added to HTML copy and intelligence added to HTML paste in the editor (fixes bugs 47014, 50568 and 46554, and partly (at least) fixes bug 53188).
Code written by vidur, jfrancis, jst, akkana. Tested by jfrancis, akkana, vidur, jst, kin. Reviwed (and super reviewed) by waterson, vidur, kin, jfrancis, jst
2000-10-07 10:57:30 +00:00
|
|
|
NS_IMETHOD InsertFromTransferable(nsITransferable *transferable,
|
2003-06-10 18:52:31 +00:00
|
|
|
nsIDOMDocument *aSourceDoc,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString & aContextStr,
|
2003-04-15 14:07:30 +00:00
|
|
|
const nsAString & aInfoStr,
|
|
|
|
nsIDOMNode *aDestinationNode,
|
|
|
|
PRInt32 aDestinationOffset,
|
|
|
|
PRBool aDoDeleteSelection);
|
2002-11-22 03:30:59 +00:00
|
|
|
PRBool HavePrivateHTMLFlavor( nsIClipboard *clipboard );
|
|
|
|
nsresult ParseCFHTML(nsCString & aCfhtml, PRUnichar **aStuffToPaste, PRUnichar **aCfcontext);
|
2003-04-15 14:07:30 +00:00
|
|
|
nsresult DoContentFilterCallback(const nsAString &aFlavor,
|
2003-06-10 18:52:31 +00:00
|
|
|
nsIDOMDocument *aSourceDoc,
|
2003-05-09 18:33:14 +00:00
|
|
|
PRBool aWillDeleteSelection,
|
2003-04-15 14:07:30 +00:00
|
|
|
nsIDOMNode **aFragmentAsNode,
|
|
|
|
nsIDOMNode **aFragStartNode,
|
|
|
|
PRInt32 *aFragStartOffset,
|
|
|
|
nsIDOMNode **aFragEndNode,
|
|
|
|
PRInt32 *aFragEndOffset,
|
|
|
|
nsIDOMNode **aTargetNode,
|
|
|
|
PRInt32 *aTargetOffset,
|
|
|
|
PRBool *aDoContinue);
|
2004-03-04 18:47:49 +00:00
|
|
|
nsresult RelativizeURIInFragmentList(nsCOMArray<nsIDOMNode> aNodeList,
|
|
|
|
const nsAString &aFlavor,
|
|
|
|
nsIDOMDocument *aSourceDoc,
|
|
|
|
nsIDOMNode *aTargetNode);
|
|
|
|
nsresult RelativizeURIForNode(nsIDOMNode *aNode, nsIURL *aDestURL);
|
|
|
|
nsresult GetAttributeToModifyOnNode(nsIDOMNode *aNode, nsAString &aAttrib);
|
|
|
|
|
2002-05-14 00:05:37 +00:00
|
|
|
PRBool IsInLink(nsIDOMNode *aNode, nsCOMPtr<nsIDOMNode> *outLink = nsnull);
|
2002-03-11 09:30:51 +00:00
|
|
|
nsresult StripFormattingNodes(nsIDOMNode *aNode, PRBool aOnlyList = PR_FALSE);
|
2003-04-15 14:07:30 +00:00
|
|
|
nsresult CreateDOMFragmentFromPaste(const nsAString & aInputString,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString & aContextStr,
|
|
|
|
const nsAString & aInfoStr,
|
2000-12-06 23:11:21 +00:00
|
|
|
nsCOMPtr<nsIDOMNode> *outFragNode,
|
2006-04-25 20:13:46 +00:00
|
|
|
nsCOMPtr<nsIDOMNode> *outStartNode,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outEndNode,
|
|
|
|
PRInt32 *outStartOffset,
|
|
|
|
PRInt32 *outEndOffset);
|
2003-04-15 01:09:09 +00:00
|
|
|
nsresult ParseFragment(const nsAString & aStr, nsVoidArray &aTagStack,
|
|
|
|
nsIDocument* aTargetDoc,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outNode);
|
2000-12-06 23:11:21 +00:00
|
|
|
nsresult CreateListOfNodesToPaste(nsIDOMNode *aFragmentAsNode,
|
2002-11-12 19:40:11 +00:00
|
|
|
nsCOMArray<nsIDOMNode>& outNodeList,
|
2003-04-15 14:07:30 +00:00
|
|
|
nsIDOMNode *aStartNode,
|
|
|
|
PRInt32 aStartOffset,
|
|
|
|
nsIDOMNode *aEndNode,
|
|
|
|
PRInt32 aEndOffset);
|
2003-03-23 20:45:47 +00:00
|
|
|
nsresult CreateTagStack(nsVoidArray &aTagStack, nsIDOMNode *aNode);
|
|
|
|
void FreeTagStackStrings(nsVoidArray &tagStack);
|
2001-06-15 22:29:07 +00:00
|
|
|
nsresult GetListAndTableParents( PRBool aEnd,
|
2002-11-12 19:40:11 +00:00
|
|
|
nsCOMArray<nsIDOMNode>& aListOfNodes,
|
|
|
|
nsCOMArray<nsIDOMNode>& outArray);
|
|
|
|
nsresult DiscoverPartialListsAndTables(nsCOMArray<nsIDOMNode>& aPasteNodes,
|
|
|
|
nsCOMArray<nsIDOMNode>& aListsAndTables,
|
|
|
|
PRInt32 *outHighWaterMark);
|
2001-06-15 22:29:07 +00:00
|
|
|
nsresult ScanForListAndTableStructure(PRBool aEnd,
|
2002-11-12 19:40:11 +00:00
|
|
|
nsCOMArray<nsIDOMNode>& aNodes,
|
2001-06-15 22:29:07 +00:00
|
|
|
nsIDOMNode *aListOrTable,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outReplaceNode);
|
|
|
|
nsresult ReplaceOrphanedStructure( PRBool aEnd,
|
2002-11-12 19:40:11 +00:00
|
|
|
nsCOMArray<nsIDOMNode>& aNodeArray,
|
|
|
|
nsCOMArray<nsIDOMNode>& aListAndTableArray,
|
2001-06-15 22:29:07 +00:00
|
|
|
PRInt32 aHighWaterMark);
|
2002-11-12 19:40:11 +00:00
|
|
|
nsIDOMNode* GetArrayEndpoint(PRBool aEnd, nsCOMArray<nsIDOMNode>& aNodeArray);
|
Checking in for bug 50742, this change removes the use of XIF in mozilla and replaces the XIF converter with a HTML (and XML) serializer.
Contextual information added to HTML copy and intelligence added to HTML paste in the editor (fixes bugs 47014, 50568 and 46554, and partly (at least) fixes bug 53188).
Code written by vidur, jfrancis, jst, akkana. Tested by jfrancis, akkana, vidur, jst, kin. Reviwed (and super reviewed) by waterson, vidur, kin, jfrancis, jst
2000-10-07 10:57:30 +00:00
|
|
|
|
2002-05-14 00:05:37 +00:00
|
|
|
/* small utility routine to test if a break node is visible to user */
|
|
|
|
PRBool IsVisBreak(nsIDOMNode *aNode);
|
|
|
|
|
2003-04-15 20:53:15 +00:00
|
|
|
/* utility routine to possibly adjust the insertion position when
|
|
|
|
inserting a block level element */
|
|
|
|
void NormalizeEOLInsertPosition(nsIDOMNode *firstNodeToInsert,
|
|
|
|
nsCOMPtr<nsIDOMNode> *insertParentNode,
|
|
|
|
PRInt32 *insertOffset);
|
|
|
|
|
2000-01-18 21:50:15 +00:00
|
|
|
/* small utility routine to test the eEditorReadonly bit */
|
|
|
|
PRBool IsModifiable();
|
2000-08-14 02:39:37 +00:00
|
|
|
|
fixes:
14753, 29843, 39864, 40141,
40139, 36679, 39542, 34729,
34855, 37216, 39292, 26447
r=sfraser,cmanske,fm; a=beppe
2000-05-24 23:00:24 +00:00
|
|
|
/* helpers for block transformations */
|
2002-03-23 22:08:20 +00:00
|
|
|
nsresult MakeDefinitionItem(const nsAString & aItemType);
|
|
|
|
nsresult InsertBasicBlock(const nsAString & aBlockType);
|
fixes:
14753, 29843, 39864, 40141,
40139, 36679, 39542, 34729,
34855, 37216, 39292, 26447
r=sfraser,cmanske,fm; a=beppe
2000-05-24 23:00:24 +00:00
|
|
|
|
2000-02-08 12:53:34 +00:00
|
|
|
/* increase/decrease the font size of selection */
|
|
|
|
nsresult RelativeFontChange( PRInt32 aSizeChange);
|
|
|
|
|
|
|
|
/* helper routines for font size changing */
|
|
|
|
nsresult RelativeFontChangeOnTextNode( PRInt32 aSizeChange,
|
|
|
|
nsIDOMCharacterData *aTextNode,
|
|
|
|
PRInt32 aStartOffset,
|
|
|
|
PRInt32 aEndOffset);
|
|
|
|
nsresult RelativeFontChangeOnNode( PRInt32 aSizeChange,
|
|
|
|
nsIDOMNode *aNode);
|
2001-10-22 06:22:52 +00:00
|
|
|
nsresult RelativeFontChangeHelper( PRInt32 aSizeChange,
|
|
|
|
nsIDOMNode *aNode);
|
2000-02-08 12:53:34 +00:00
|
|
|
|
2000-03-24 00:26:47 +00:00
|
|
|
/* helper routines for inline style */
|
|
|
|
nsresult SetInlinePropertyOnTextNode( nsIDOMCharacterData *aTextNode,
|
|
|
|
PRInt32 aStartOffset,
|
|
|
|
PRInt32 aEndOffset,
|
|
|
|
nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute,
|
|
|
|
const nsAString *aValue);
|
2000-03-24 00:26:47 +00:00
|
|
|
nsresult SetInlinePropertyOnNode( nsIDOMNode *aNode,
|
|
|
|
nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute,
|
|
|
|
const nsAString *aValue);
|
2000-03-24 00:26:47 +00:00
|
|
|
|
|
|
|
nsresult PromoteInlineRange(nsIDOMRange *inRange);
|
2002-04-11 13:33:30 +00:00
|
|
|
nsresult PromoteRangeIfStartsOrEndsInNamedAnchor(nsIDOMRange *inRange);
|
2000-03-24 00:26:47 +00:00
|
|
|
nsresult SplitStyleAboveRange(nsIDOMRange *aRange,
|
|
|
|
nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute);
|
2000-03-24 00:26:47 +00:00
|
|
|
nsresult SplitStyleAbovePoint(nsCOMPtr<nsIDOMNode> *aNode,
|
|
|
|
PRInt32 *aOffset,
|
|
|
|
nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute,
|
2000-08-30 04:33:20 +00:00
|
|
|
nsCOMPtr<nsIDOMNode> *outLeftNode = nsnull,
|
|
|
|
nsCOMPtr<nsIDOMNode> *outRightNode = nsnull);
|
2003-06-02 22:21:06 +00:00
|
|
|
nsresult ApplyDefaultProperties();
|
2000-03-24 00:26:47 +00:00
|
|
|
nsresult RemoveStyleInside(nsIDOMNode *aNode,
|
|
|
|
nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute,
|
2000-03-24 00:26:47 +00:00
|
|
|
PRBool aChildrenOnly = PR_FALSE);
|
2002-03-23 22:08:20 +00:00
|
|
|
nsresult RemoveInlinePropertyImpl(nsIAtom *aProperty, const nsAString *aAttribute);
|
2002-01-09 13:51:37 +00:00
|
|
|
|
2000-04-13 21:50:19 +00:00
|
|
|
PRBool NodeIsProperty(nsIDOMNode *aNode);
|
2002-03-23 22:08:20 +00:00
|
|
|
PRBool HasAttr(nsIDOMNode *aNode, const nsAString *aAttribute);
|
|
|
|
PRBool HasAttrVal(nsIDOMNode *aNode, const nsAString *aAttribute, const nsAString *aValue);
|
2000-03-24 00:26:47 +00:00
|
|
|
PRBool IsAtFrontOfNode(nsIDOMNode *aNode, PRInt32 aOffset);
|
|
|
|
PRBool IsAtEndOfNode(nsIDOMNode *aNode, PRInt32 aOffset);
|
2002-03-23 22:08:20 +00:00
|
|
|
PRBool IsOnlyAttribute(nsIDOMNode *aElement, const nsAString *aAttribute);
|
2000-03-24 00:26:47 +00:00
|
|
|
|
2001-06-18 21:15:43 +00:00
|
|
|
nsresult RemoveBlockContainer(nsIDOMNode *inNode);
|
2000-03-24 00:26:47 +00:00
|
|
|
nsresult GetPriorHTMLSibling(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode);
|
|
|
|
nsresult GetPriorHTMLSibling(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode);
|
|
|
|
nsresult GetNextHTMLSibling(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode);
|
|
|
|
nsresult GetNextHTMLSibling(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode);
|
2001-08-22 05:32:44 +00:00
|
|
|
nsresult GetPriorHTMLNode(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode, PRBool bNoBlockCrossing = PR_FALSE);
|
|
|
|
nsresult GetPriorHTMLNode(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode, PRBool bNoBlockCrossing = PR_FALSE);
|
|
|
|
nsresult GetNextHTMLNode(nsIDOMNode *inNode, nsCOMPtr<nsIDOMNode> *outNode, PRBool bNoBlockCrossing = PR_FALSE);
|
|
|
|
nsresult GetNextHTMLNode(nsIDOMNode *inParent, PRInt32 inOffset, nsCOMPtr<nsIDOMNode> *outNode, PRBool bNoBlockCrossing = PR_FALSE);
|
2000-03-24 00:26:47 +00:00
|
|
|
|
|
|
|
nsresult IsFirstEditableChild( nsIDOMNode *aNode, PRBool *aOutIsFirst);
|
|
|
|
nsresult IsLastEditableChild( nsIDOMNode *aNode, PRBool *aOutIsLast);
|
|
|
|
nsresult GetFirstEditableChild( nsIDOMNode *aNode, nsCOMPtr<nsIDOMNode> *aOutFirstChild);
|
|
|
|
nsresult GetLastEditableChild( nsIDOMNode *aNode, nsCOMPtr<nsIDOMNode> *aOutLastChild);
|
2002-01-14 20:31:47 +00:00
|
|
|
|
2000-08-26 04:03:50 +00:00
|
|
|
nsresult GetFirstEditableLeaf( nsIDOMNode *aNode, nsCOMPtr<nsIDOMNode> *aOutFirstLeaf);
|
2002-05-14 00:05:37 +00:00
|
|
|
nsresult GetLastEditableLeaf( nsIDOMNode *aNode, nsCOMPtr<nsIDOMNode> *aOutLastLeaf);
|
2000-02-08 12:53:34 +00:00
|
|
|
|
2000-09-05 23:26:48 +00:00
|
|
|
//XXX Kludge: Used to suppress spurious drag/drop events (bug 50703)
|
|
|
|
PRBool mIgnoreSpuriousDragEvent;
|
|
|
|
|
2001-04-07 00:45:26 +00:00
|
|
|
nsresult GetInlinePropertyBase(nsIAtom *aProperty,
|
2002-03-23 22:08:20 +00:00
|
|
|
const nsAString *aAttribute,
|
|
|
|
const nsAString *aValue,
|
2001-04-07 00:45:26 +00:00
|
|
|
PRBool *aFirst,
|
|
|
|
PRBool *aAny,
|
|
|
|
PRBool *aAll,
|
2003-06-02 22:21:06 +00:00
|
|
|
nsAString *outValue,
|
|
|
|
PRBool aCheckDefaults = PR_TRUE);
|
2002-02-18 10:49:15 +00:00
|
|
|
nsresult HasStyleOrIdOrClass(nsIDOMElement * aElement, PRBool *aHasStyleOrIdOrClass);
|
|
|
|
nsresult RemoveElementIfNoStyleOrIdOrClass(nsIDOMElement * aElement, nsIAtom * aTag);
|
2001-04-07 00:45:26 +00:00
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
// Data members
|
|
|
|
protected:
|
|
|
|
|
2003-04-15 14:07:30 +00:00
|
|
|
nsCOMArray<nsIContentFilter> mContentFilters;
|
|
|
|
|
2001-01-28 20:13:07 +00:00
|
|
|
TypeInState* mTypeInState;
|
|
|
|
|
2000-01-31 10:30:12 +00:00
|
|
|
nsCOMPtr<nsIDOMNode> mCachedNode;
|
1999-08-09 01:37:50 +00:00
|
|
|
|
2005-01-12 19:11:48 +00:00
|
|
|
PRPackedBool mCRInParagraphCreatesParagraph;
|
|
|
|
|
|
|
|
PRPackedBool mCSSAware;
|
|
|
|
nsHTMLCSSUtils *mHTMLCSSUtils;
|
2002-09-13 19:47:38 +00:00
|
|
|
|
2000-03-21 06:05:24 +00:00
|
|
|
// Used by GetFirstSelectedCell and GetNextSelectedCell
|
|
|
|
PRInt32 mSelectedCellIndex;
|
2000-03-16 23:45:41 +00:00
|
|
|
|
2002-09-13 19:47:38 +00:00
|
|
|
nsString mLastStyleSheetURL;
|
|
|
|
nsString mLastOverrideStyleSheetURL;
|
|
|
|
|
|
|
|
// Maintain a list of associated style sheets and their urls.
|
|
|
|
nsStringArray mStyleSheetURLs;
|
2002-11-12 19:40:11 +00:00
|
|
|
nsCOMArray<nsICSSStyleSheet> mStyleSheets;
|
2003-06-02 22:21:06 +00:00
|
|
|
|
|
|
|
// an array for holding default style settings
|
|
|
|
nsVoidArray mDefaultStyles;
|
2002-09-13 19:47:38 +00:00
|
|
|
|
2005-02-01 21:12:53 +00:00
|
|
|
// for real-time spelling
|
|
|
|
nsCOMPtr<nsITextServicesDocument> mTextServices;
|
|
|
|
|
2004-10-10 03:30:42 +00:00
|
|
|
// And a static range utils service
|
|
|
|
static nsIRangeUtils* sRangeHelper;
|
|
|
|
|
|
|
|
public:
|
|
|
|
// ... which means that we need to listen to shutdown
|
|
|
|
static void Shutdown();
|
2002-06-11 20:43:49 +00:00
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
protected:
|
2003-06-25 08:50:48 +00:00
|
|
|
|
|
|
|
/* ANONYMOUS UTILS */
|
|
|
|
void DeleteRefToAnonymousNode(nsIDOMElement* aElement,
|
|
|
|
nsIContent * aParentContent,
|
|
|
|
nsIDocumentObserver * aDocObserver);
|
|
|
|
nsresult GetElementOrigin(nsIDOMElement * aElement, PRInt32 & aX, PRInt32 & aY);
|
|
|
|
nsresult GetPositionAndDimensions(nsIDOMElement * aElement,
|
|
|
|
PRInt32 & aX, PRInt32 & aY,
|
|
|
|
PRInt32 & aW, PRInt32 & aH,
|
|
|
|
PRInt32 & aBorderLeft,
|
|
|
|
PRInt32 & aBorderTop,
|
|
|
|
PRInt32 & aMarginLeft,
|
|
|
|
PRInt32 & aMarginTop);
|
|
|
|
|
|
|
|
/* PACKED BOOLEANS FOR RESIZING, ABSOLUTE POSITIONING AND */
|
|
|
|
/* INLINE TABLE EDITING */
|
|
|
|
|
|
|
|
// resizing
|
|
|
|
PRPackedBool mIsObjectResizingEnabled;
|
2003-02-24 09:37:18 +00:00
|
|
|
PRPackedBool mIsResizing;
|
|
|
|
PRPackedBool mPreserveRatio;
|
|
|
|
PRPackedBool mResizedObjectIsAnImage;
|
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
// absolute positioning
|
|
|
|
PRPackedBool mIsAbsolutelyPositioningEnabled;
|
|
|
|
PRPackedBool mResizedObjectIsAbsolutelyPositioned;
|
|
|
|
|
|
|
|
PRPackedBool mGrabberClicked;
|
|
|
|
PRPackedBool mIsMoving;
|
|
|
|
|
|
|
|
PRPackedBool mSnapToGridEnabled;
|
|
|
|
|
|
|
|
// inline table editing
|
|
|
|
PRPackedBool mIsInlineTableEditingEnabled;
|
|
|
|
|
|
|
|
/* RESIZING */
|
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
nsCOMPtr<nsIDOMElement> mTopLeftHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mTopHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mTopRightHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mLeftHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mRightHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mBottomLeftHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mBottomHandle;
|
|
|
|
nsCOMPtr<nsIDOMElement> mBottomRightHandle;
|
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
nsCOMPtr<nsIDOMElement> mActivatedHandle;
|
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
nsCOMPtr<nsIDOMElement> mResizingShadow;
|
|
|
|
nsCOMPtr<nsIDOMElement> mResizingInfo;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMElement> mResizedObject;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMEventListener> mMouseMotionListenerP;
|
|
|
|
nsCOMPtr<nsISelectionListener> mSelectionListenerP;
|
|
|
|
nsCOMPtr<nsIDOMEventListener> mResizeEventListenerP;
|
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
nsCOMArray<nsIHTMLObjectResizeListener> objectResizeEventListeners;
|
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
PRInt32 mOriginalX;
|
|
|
|
PRInt32 mOriginalY;
|
|
|
|
|
|
|
|
PRInt32 mResizedObjectX;
|
|
|
|
PRInt32 mResizedObjectY;
|
|
|
|
PRInt32 mResizedObjectWidth;
|
|
|
|
PRInt32 mResizedObjectHeight;
|
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
PRInt32 mResizedObjectMarginLeft;
|
|
|
|
PRInt32 mResizedObjectMarginTop;
|
|
|
|
PRInt32 mResizedObjectBorderLeft;
|
|
|
|
PRInt32 mResizedObjectBorderTop;
|
|
|
|
|
2003-02-24 09:37:18 +00:00
|
|
|
PRInt32 mXIncrementFactor;
|
|
|
|
PRInt32 mYIncrementFactor;
|
|
|
|
PRInt32 mWidthIncrementFactor;
|
|
|
|
PRInt32 mHeightIncrementFactor;
|
|
|
|
|
2003-06-25 08:50:48 +00:00
|
|
|
PRInt8 mInfoXIncrement;
|
|
|
|
PRInt8 mInfoYIncrement;
|
|
|
|
|
|
|
|
nsresult SetAllResizersPosition();
|
|
|
|
|
|
|
|
nsresult CreateResizer(nsIDOMElement ** aReturn, PRInt16 aLocation, nsIDOMNode * aParentNode);
|
|
|
|
void SetAnonymousElementPosition(PRInt32 aX, PRInt32 aY, nsIDOMElement *aResizer);
|
|
|
|
|
|
|
|
nsresult CreateShadow(nsIDOMElement ** aReturn, nsIDOMNode * aParentNode,
|
|
|
|
nsIDOMElement * aOriginalObject);
|
|
|
|
nsresult SetShadowPosition(nsIDOMElement * aShadow,
|
|
|
|
nsIDOMElement * aOriginalObject,
|
|
|
|
PRInt32 aOriginalObjectX,
|
|
|
|
PRInt32 aOriginalObjectY);
|
|
|
|
|
|
|
|
nsresult CreateResizingInfo(nsIDOMElement ** aReturn, nsIDOMNode * aParentNode);
|
2003-02-24 09:37:18 +00:00
|
|
|
nsresult SetResizingInfoPosition(PRInt32 aX, PRInt32 aY,
|
|
|
|
PRInt32 aW, PRInt32 aH);
|
|
|
|
|
|
|
|
PRInt32 GetNewResizingIncrement(PRInt32 aX, PRInt32 aY, PRInt32 aID);
|
|
|
|
nsresult StartResizing(nsIDOMElement * aHandle);
|
|
|
|
PRInt32 GetNewResizingX(PRInt32 aX, PRInt32 aY);
|
|
|
|
PRInt32 GetNewResizingY(PRInt32 aX, PRInt32 aY);
|
|
|
|
PRInt32 GetNewResizingWidth(PRInt32 aX, PRInt32 aY);
|
|
|
|
PRInt32 GetNewResizingHeight(PRInt32 aX, PRInt32 aY);
|
|
|
|
void HideShadowAndInfo();
|
|
|
|
void SetFinalSize(PRInt32 aX, PRInt32 aY);
|
2003-06-25 08:50:48 +00:00
|
|
|
void DeleteRefToAnonymousNode(nsIDOMNode * aNode);
|
2003-02-24 09:37:18 +00:00
|
|
|
void SetResizeIncrements(PRInt32 aX, PRInt32 aY, PRInt32 aW, PRInt32 aH, PRBool aPreserveRatio);
|
2003-06-25 08:50:48 +00:00
|
|
|
void SetInfoIncrements(PRInt8 aX, PRInt8 aY);
|
|
|
|
|
|
|
|
/* ABSOLUTE POSITIONING */
|
|
|
|
|
|
|
|
PRInt32 mPositionedObjectX;
|
|
|
|
PRInt32 mPositionedObjectY;
|
|
|
|
PRInt32 mPositionedObjectWidth;
|
|
|
|
PRInt32 mPositionedObjectHeight;
|
|
|
|
|
|
|
|
PRInt32 mPositionedObjectMarginLeft;
|
|
|
|
PRInt32 mPositionedObjectMarginTop;
|
|
|
|
PRInt32 mPositionedObjectBorderLeft;
|
|
|
|
PRInt32 mPositionedObjectBorderTop;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMElement> mAbsolutelyPositionedObject;
|
|
|
|
nsCOMPtr<nsIDOMElement> mGrabber;
|
|
|
|
nsCOMPtr<nsIDOMElement> mPositioningShadow;
|
|
|
|
|
|
|
|
PRInt32 mGridSize;
|
|
|
|
|
|
|
|
nsresult CreateGrabber(nsIDOMNode * aParentNode, nsIDOMElement ** aReturn);
|
|
|
|
nsresult StartMoving(nsIDOMElement * aHandle);
|
|
|
|
nsresult SetFinalPosition(PRInt32 aX, PRInt32 aY);
|
|
|
|
void AddPositioningOffet(PRInt32 & aX, PRInt32 & aY);
|
|
|
|
void SnapToGrid(PRInt32 & newX, PRInt32 & newY);
|
|
|
|
nsresult GrabberClicked();
|
|
|
|
nsresult EndMoving();
|
|
|
|
nsresult CheckPositionedElementBGandFG(nsIDOMElement * aElement,
|
|
|
|
nsAString & aReturn);
|
|
|
|
|
|
|
|
/* INLINE TABLE EDITING */
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMElement> mInlineEditedCell;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMElement> mAddColumnBeforeButton;
|
|
|
|
nsCOMPtr<nsIDOMElement> mRemoveColumnButton;
|
|
|
|
nsCOMPtr<nsIDOMElement> mAddColumnAfterButton;
|
|
|
|
|
|
|
|
nsCOMPtr<nsIDOMElement> mAddRowBeforeButton;
|
|
|
|
nsCOMPtr<nsIDOMElement> mRemoveRowButton;
|
|
|
|
nsCOMPtr<nsIDOMElement> mAddRowAfterButton;
|
|
|
|
|
|
|
|
void AddMouseClickListener(nsIDOMElement * aElement);
|
|
|
|
void RemoveMouseClickListener(nsIDOMElement * aElement);
|
|
|
|
|
2005-06-09 22:50:41 +00:00
|
|
|
nsCOMPtr<nsILinkHandler> mLinkHandler;
|
|
|
|
|
1999-09-29 20:08:15 +00:00
|
|
|
public:
|
|
|
|
|
1999-08-09 01:37:50 +00:00
|
|
|
// friends
|
|
|
|
friend class nsHTMLEditRules;
|
|
|
|
friend class nsTextEditRules;
|
2001-05-11 12:43:22 +00:00
|
|
|
friend class nsWSRunObject;
|
1999-05-03 18:48:39 +00:00
|
|
|
|
1999-03-01 19:54:47 +00:00
|
|
|
};
|
|
|
|
#endif //nsHTMLEditor_h__
|
|
|
|
|