mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-16 11:45:31 +00:00
605 lines
22 KiB
Plaintext
605 lines
22 KiB
Plaintext
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Netscape 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/NPL/
|
|
*
|
|
* 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.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1998
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Daniel Glazman <glazman@netscape.com>
|
|
* Akkana Peck <akkana@netscape.com>
|
|
* Kathleen Brade <brade@netscape.com>
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either 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"),
|
|
* 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
|
|
* use your version of this file under the terms of the NPL, indicate your
|
|
* 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
|
|
* the terms of any one of the NPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
#include "nsISupports.idl"
|
|
#include "domstubs.idl"
|
|
|
|
interface nsIAtom;
|
|
interface nsISupportsArray;
|
|
interface nsISelection;
|
|
interface nsIContentFilter;
|
|
|
|
%{C++
|
|
#define NS_EDITOR_ELEMENT_NOT_FOUND \
|
|
NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_EDITOR, 1)
|
|
|
|
%}
|
|
[scriptable, uuid(4b0fd0d0-1dd2-11b2-bf2e-ef20fbca2c88)]
|
|
|
|
interface nsIHTMLEditor : nsISupports
|
|
{
|
|
%{C++
|
|
typedef short EAlignment;
|
|
%}
|
|
|
|
// used by GetAlignment()
|
|
const short eLeft = 0;
|
|
const short eCenter = 1;
|
|
const short eRight = 2;
|
|
const short eJustify = 3;
|
|
|
|
|
|
/* ------------ Inline property methods -------------- */
|
|
|
|
|
|
/**
|
|
* AddDefaultProperty() registers a default style property with the editor
|
|
*
|
|
* @param aProperty the property to set by default
|
|
* @param aAttribute the attribute of the property, if applicable.
|
|
* May be null.
|
|
* Example: aProperty="font", aAttribute="color"
|
|
* @param aValue if aAttribute is not null, the value of the attribute.
|
|
* Example: aProperty="font", aAttribute="color",
|
|
* aValue="0x00FFFF"
|
|
*/
|
|
void addDefaultProperty(in nsIAtom aProperty,
|
|
in AString aAttribute,
|
|
in AString aValue);
|
|
|
|
/**
|
|
* RemoveDefaultProperty() unregisters a default style property with the editor
|
|
*
|
|
* @param aProperty the property to remove from defaults
|
|
* @param aAttribute the attribute of the property, if applicable.
|
|
* May be null.
|
|
* Example: aProperty="font", aAttribute="color"
|
|
* @param aValue if aAttribute is not null, the value of the attribute.
|
|
* Example: aProperty="font", aAttribute="color",
|
|
* aValue="0x00FFFF"
|
|
*/
|
|
void removeDefaultProperty(in nsIAtom aProperty,
|
|
in AString aAttribute,
|
|
in AString aValue);
|
|
|
|
/**
|
|
* RemoveAllDefaultProperties() unregisters all default style properties with the editor
|
|
*
|
|
*/
|
|
void removeAllDefaultProperties();
|
|
|
|
/**
|
|
* SetInlineProperty() sets the aggregate properties on the current selection
|
|
*
|
|
* @param aProperty the property to set on the selection
|
|
* @param aAttribute the attribute of the property, if applicable.
|
|
* May be null.
|
|
* Example: aProperty="font", aAttribute="color"
|
|
* @param aValue if aAttribute is not null, the value of the attribute.
|
|
* May be null.
|
|
* Example: aProperty="font", aAttribute="color",
|
|
* aValue="0x00FFFF"
|
|
*/
|
|
void setCSSInlineProperty(in nsIAtom aProperty,
|
|
in AString aAttribute,
|
|
in AString aValue);
|
|
void setInlineProperty(in nsIAtom aProperty,
|
|
in AString aAttribute,
|
|
in AString aValue);
|
|
|
|
/**
|
|
* getInlineProperty() gets aggregate properties of the current selection.
|
|
* All object in the current selection are scanned and their attributes are
|
|
* represented in a list of Property object.
|
|
*
|
|
* @param aProperty the property to get on the selection
|
|
* @param aAttribute the attribute of the property, if applicable.
|
|
* May be null.
|
|
* Example: aProperty="font", aAttribute="color"
|
|
* @param aValue if aAttribute is not null, the value of the attribute.
|
|
* May be null.
|
|
* Example: aProperty="font", aAttribute="color",
|
|
* aValue="0x00FFFF"
|
|
* @param aFirst [OUT] PR_TRUE if the first text node in the
|
|
* selection has the property
|
|
* @param aAny [OUT] PR_TRUE if any of the text nodes in the
|
|
* selection have the property
|
|
* @param aAll [OUT] PR_TRUE if all of the text nodes in the
|
|
* selection have the property
|
|
*/
|
|
void getInlineProperty(in nsIAtom aProperty,
|
|
in AString aAttribute,
|
|
in AString aValue,
|
|
out boolean aFirst,
|
|
out boolean aAny,
|
|
out boolean aAll);
|
|
|
|
AString getInlinePropertyWithAttrValue(in nsIAtom aProperty,
|
|
in AString aAttribute,
|
|
in AString aValue,
|
|
out boolean aFirst,
|
|
out boolean aAny,
|
|
out boolean aAll);
|
|
|
|
/**
|
|
* removeAllInlineProperties() deletes all the inline properties from all
|
|
* text in the current selection.
|
|
*/
|
|
void removeAllInlineProperties();
|
|
|
|
|
|
/**
|
|
* removeInlineProperty() deletes the properties from all text in the current
|
|
* selection. If aProperty is not set on the selection, nothing is done.
|
|
*
|
|
* @param aProperty the property to remove from the selection
|
|
* All atoms are for normal HTML tags (e.g.:
|
|
* nsIEditorProperty::font) except when you want to
|
|
* remove just links and not named anchors.
|
|
* For that, use nsIEditorProperty::href
|
|
* @param aAttribute the attribute of the property, if applicable.
|
|
* May be null.
|
|
* Example: aProperty=nsIEditorProptery::font,
|
|
* aAttribute="color"
|
|
* nsIEditProperty::allAttributes is special.
|
|
* It indicates that all content-based text properties
|
|
* are to be removed from the selection.
|
|
*/
|
|
void removeInlineProperty(in nsIAtom aProperty, in AString aAttribute);
|
|
|
|
/**
|
|
* Increase font size for text in selection by 1 HTML unit
|
|
* All existing text is scanned for existing <FONT SIZE> attributes
|
|
* so they will be incremented instead of inserting new <FONT> tag
|
|
*/
|
|
void increaseFontSize();
|
|
|
|
/**
|
|
* Decrease font size for text in selection by 1 HTML unit
|
|
* All existing text is scanned for existing <FONT SIZE> attributes
|
|
* so they will be decreased instead of inserting new <FONT> tag
|
|
*/
|
|
void decreaseFontSize();
|
|
|
|
/* ------------ Drag/Drop methods -------------- */
|
|
|
|
/**
|
|
* canDrag decides if a drag should be started
|
|
* (for example, based on the current selection and mousepoint).
|
|
*/
|
|
boolean canDrag(in nsIDOMEvent aEvent);
|
|
|
|
/**
|
|
* doDrag transfers the relevant data (as appropriate)
|
|
* to a transferable so it can later be dropped.
|
|
*/
|
|
void doDrag(in nsIDOMEvent aEvent);
|
|
|
|
/**
|
|
* insertFromDrop looks for a dragsession and inserts the
|
|
* relevant data in response to a drop.
|
|
*/
|
|
void insertFromDrop(in nsIDOMEvent aEvent);
|
|
|
|
/* ------------ HTML content 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
|
|
*/
|
|
boolean nodeIsBlock(in nsIDOMNode node);
|
|
|
|
/**
|
|
* Insert some HTML source at the current location
|
|
*
|
|
* @param aInputString the string to be inserted
|
|
*/
|
|
void insertHTML(in AString aInputString);
|
|
|
|
|
|
/**
|
|
* Paste the text in the OS clipboard at the cursor position, replacing
|
|
* the selected text (if any), but strip out any HTML styles and formatting
|
|
*/
|
|
void pasteNoFormatting(in long aSelectionType);
|
|
|
|
/**
|
|
* Rebuild the entire document from source HTML
|
|
* Needed to be able to edit HEAD and other outside-of-BODY content
|
|
*
|
|
* @param aSourceString HTML source string of the entire new document
|
|
*/
|
|
void rebuildDocumentFromSource(in AString aSourceString);
|
|
|
|
/**
|
|
* Insert some HTML source, interpreting
|
|
* the string argument according to the given context.
|
|
*
|
|
* @param aInputString the string to be inserted
|
|
* @param aContextStr Context of insertion
|
|
* @param aInfoStr Related info to aInputString
|
|
* @param aFlavor Transferable flavor, can be ""
|
|
* @param aSourceDoc document where input was dragged from (may be null)
|
|
* @param aDestinationNode location for insertion (such as when dropped)
|
|
* @param aDestinationOffset used with aDestNode to determine insert location
|
|
* @param aDeleteSelection used with aDestNode during drag&drop
|
|
* @param aCollapseSelection used with aDestNode during drag&drop
|
|
*/
|
|
void insertHTMLWithContext(in AString aInputString,
|
|
in AString aContextStr,
|
|
in AString aInfoStr,
|
|
in AString aFlavor,
|
|
in nsIDOMDocument aSourceDoc,
|
|
in nsIDOMNode aDestinationNode,
|
|
in long aDestinationOffset,
|
|
in boolean aDeleteSelection);
|
|
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @param aElement The element to insert
|
|
* @param aDeleteSelection Delete the selection before inserting
|
|
* If aDeleteSelection 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 insertElementAtSelection(in nsIDOMElement aElement,
|
|
in boolean aDeleteSelection);
|
|
|
|
/**
|
|
* Set the documents title.
|
|
*/
|
|
void setDocumentTitle(in AString aTitle);
|
|
|
|
/**
|
|
* Set the BaseURL for the document to the current URL
|
|
* but only if the page doesn't have a <base> tag
|
|
* This should be done after the document URL has changed,
|
|
* such as after saving a file
|
|
* This is used as base for relativizing link and image urls
|
|
*/
|
|
void updateBaseURL();
|
|
|
|
|
|
/* ------------ Selection manipulation -------------- */
|
|
/* Should these be moved to nsISelection? */
|
|
|
|
/**
|
|
* Set the selection at the suppled element
|
|
*
|
|
* @param aElement An element in the document
|
|
*/
|
|
void selectElement(in nsIDOMElement aElement);
|
|
|
|
/**
|
|
* Create a collapsed selection just after aElement
|
|
*
|
|
* XXX could we parameterize SelectElement(before/select/after>?
|
|
*
|
|
* The selection is set to parent-of-aElement with an
|
|
* offset 1 greater than aElement's offset
|
|
* but it enforces the HTML 4.0 DTD "CanContain" rules, so it should
|
|
* be useful for other elements.
|
|
*
|
|
* @param aElement An element in the document
|
|
*/
|
|
void setCaretAfterElement(in nsIDOMElement aElement);
|
|
|
|
/**
|
|
* SetParagraphFormat Insert a block paragraph tag around selection
|
|
* @param aParagraphFormat "p", "h1" to "h6", "address", "pre", or "blockquote"
|
|
*/
|
|
void setParagraphFormat(in AString aParagraphFormat);
|
|
|
|
/**
|
|
* getParagraphState returns what block tag paragraph format is in
|
|
* the selection.
|
|
* @param aMixed True if there is more than one format
|
|
* @return Name of block tag. "" is returned for none.
|
|
*/
|
|
AString getParagraphState(out boolean aMixed);
|
|
|
|
/**
|
|
* getFontFaceState returns what font face is in the selection.
|
|
* @param aMixed True if there is more than one font face
|
|
* @return Name of face. Note: "tt" is returned for
|
|
* tt tag. "" is returned for none.
|
|
*/
|
|
AString getFontFaceState(out boolean aMixed);
|
|
|
|
/**
|
|
* getFontColorState returns what font face is in the selection.
|
|
* @param aMixed True if there is more than one font color
|
|
* @return Color string. "" is returned for none.
|
|
*/
|
|
AString getFontColorState(out boolean aMixed);
|
|
|
|
/**
|
|
* getFontColorState returns what font face is in the selection.
|
|
* @param aMixed True if there is more than one font color
|
|
* @return Color string. "" is returned for none.
|
|
*/
|
|
AString getBackgroundColorState(out boolean aMixed);
|
|
|
|
/**
|
|
* getHighlightColorState returns what the highlight color of the selection.
|
|
* @param aMixed True if there is more than one font color
|
|
* @return Color string. "" is returned for none.
|
|
*/
|
|
AString getHighlightColorState(out boolean aMixed);
|
|
|
|
/**
|
|
* getListState returns what list type is in the selection.
|
|
* @param aMixed True if there is more than one type of list, or
|
|
* if there is some list and non-list
|
|
* @param aOL The company that employs me. No, really, it's
|
|
* true if an "ol" list is selected.
|
|
* @param aUL true if an "ul" list is selected.
|
|
* @param aDL true if a "dl" list is selected.
|
|
*/
|
|
void getListState(out boolean aMixed, out boolean aOL, out boolean aUL,
|
|
out boolean aDL);
|
|
|
|
/**
|
|
* getListItemState returns what list item type is in the selection.
|
|
* @param aMixed True if there is more than one type of list item, or
|
|
* if there is some list and non-list
|
|
* @param aLI true if "li" list items are selected.
|
|
* @param aDT true if "dt" list items are selected.
|
|
* @param aDD true if "dd" list items are selected.
|
|
*/
|
|
void getListItemState(out boolean aMixed, out boolean aLI,
|
|
out boolean aDT, out boolean aDD);
|
|
|
|
/**
|
|
* getAlignment returns what alignment is in the selection.
|
|
* @param aMixed True if there is more than one type of list item, or
|
|
* if there is some list and non-list
|
|
* @param aAlign enum value for first encountered alignment
|
|
* (left/center/right)
|
|
*/
|
|
void getAlignment(out boolean aMixed, out short aAlign);
|
|
|
|
/**
|
|
* Document me!
|
|
*
|
|
*/
|
|
void getIndentState(out boolean aCanIndent, out boolean aCanOutdent);
|
|
|
|
/**
|
|
* Document me!
|
|
*
|
|
*/
|
|
void makeOrChangeList(in AString aListType, in boolean entireList,
|
|
in AString aBulletType);
|
|
|
|
/**
|
|
* Document me!
|
|
*
|
|
*/
|
|
void removeList(in AString aListType);
|
|
|
|
/**
|
|
* Document me!
|
|
*
|
|
*/
|
|
void indent(in AString aIndent);
|
|
|
|
/**
|
|
* Document me!
|
|
*
|
|
*/
|
|
void align(in AString aAlign);
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @param aTagName The HTML tagname
|
|
* Special input values:
|
|
* 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)
|
|
* Use "list" to get an OL, UL, or DL list node
|
|
* Use "td" to get either a TD or TH cell node
|
|
*
|
|
* @param aNode The node in the document to start the search.
|
|
* If it is null, the anchor node of the current selection is used.
|
|
* @return NS_EDITOR_ELEMENT_NOT_FOUND if an element is not found
|
|
* (passes NS_SUCCEEDED macro)
|
|
*/
|
|
nsIDOMElement getElementOrParentByTagName(in AString aTagName,
|
|
in nsIDOMNode aNode);
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @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 "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)
|
|
* @return NS_EDITOR_ELEMENT_NOT_FOUND if an element is not found
|
|
* (passes NS_SUCCEEDED macro)
|
|
*/
|
|
nsIDOMElement getSelectedElement(in AString aTagName);
|
|
|
|
/**
|
|
* Output the contents of the <HEAD> section as text/HTML format
|
|
*/
|
|
AString getHeadContentsAsHTML();
|
|
|
|
/**
|
|
* Replace all children of <HEAD> with string of HTML source
|
|
*/
|
|
void replaceHeadContentsWithHTML(in AString aSourceToInsert);
|
|
|
|
/**
|
|
* 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)
|
|
*
|
|
* @param aTagName 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)
|
|
* @return The new element created.
|
|
*/
|
|
nsIDOMElement createElementWithDefaults(in AString aTagName);
|
|
|
|
/**
|
|
* Insert an link element as the parent of the current selection
|
|
*
|
|
* @param aElement An "A" element with a non-empty "href" attribute
|
|
*/
|
|
void insertLinkAroundSelection(in nsIDOMElement aAnchorElement);
|
|
|
|
/**
|
|
* Set the value of the "bgcolor" attribute on the document's <body> element
|
|
*
|
|
* @param aColor The HTML color string, such as "#ffccff" or "yellow"
|
|
*/
|
|
void setBackgroundColor(in AString aColor);
|
|
|
|
|
|
/**
|
|
* Set an attribute on the document's <body> element
|
|
* such as text, link, background colors
|
|
*
|
|
* 8/31/00 THIS ISN'T BEING USED? SHOULD WE DROP IT?
|
|
*
|
|
* @param aAttr The attribute to be set
|
|
* @param aValue The value of the attribute
|
|
*/
|
|
void setBodyAttribute(in AString aAttr, in AString aValue);
|
|
|
|
/**
|
|
* XXX Used to suppress spurious drag/drop events to workaround bug 50703
|
|
* Don't use this method! It will go away after first release!
|
|
*/
|
|
void ignoreSpuriousDragEvent(in boolean aIgnoreSpuriousDragEvent);
|
|
|
|
/**
|
|
* Find all the nodes in the document which contain references
|
|
* to outside URIs (e.g. a href, img src, script src, etc.)
|
|
* The objects in the array will be type nsIURIRefObject.
|
|
*
|
|
* @return aNodeList the linked nodes found
|
|
*/
|
|
nsISupportsArray getLinkedObjects();
|
|
|
|
/**
|
|
* A boolean which is true is the HTMLEditor has been instantiated
|
|
* with CSS knowledge and if the CSS pref is currently checked
|
|
*
|
|
* @return true if CSS handled and enabled
|
|
*/
|
|
attribute boolean isCSSEnabled;
|
|
|
|
/**
|
|
* Add listener for insertion override
|
|
* @param inFilter function which callers want called during insertion
|
|
*/
|
|
void addInsertionListener(in nsIContentFilter inFilter);
|
|
|
|
/**
|
|
* Remove listener for insertion override
|
|
* @param inFilter function which callers do not want called during insertion
|
|
*/
|
|
void removeInsertionListener(in nsIContentFilter inFilter);
|
|
|
|
/**
|
|
* Returns an anonymous nsDOMElement of type aTag,
|
|
* child of aParentNode. If aIsCreatedHidden is true, the class
|
|
* "hidden" is added to the created element. If aAnonClass is not
|
|
* the empty string, it becomes the value of the attribute "_moz_anonclass"
|
|
* @return a DOM Element
|
|
* @param aTag [IN] a string representing the desired type of
|
|
* the element to create
|
|
* @param aParentNode [IN] the parent node of the created anonymous
|
|
* element
|
|
* @param aAnonClass [IN] contents of the _moz_anonclass attribute
|
|
* @param aIsCreatedHidden [IN] a boolean specifying if the class "hidden"
|
|
* is to be added to the created anonymous
|
|
* element
|
|
*/
|
|
nsIDOMElement createAnonymousElement(in AString aTag, in nsIDOMNode aParentNode,
|
|
in AString aAnonClass, in boolean aIsCreatedHidden);
|
|
|
|
/**
|
|
* returns the deepest container of the selection
|
|
* @return a DOM Element
|
|
*/
|
|
nsIDOMElement getSelectionContainer();
|
|
|
|
/**
|
|
* Checks if the anonymous nodes created by the HTML editor have to be
|
|
* refreshed or hidden depending on a possible new state of the selection
|
|
* @param aSelection [IN] a selection
|
|
*/
|
|
void checkSelectionStateForAnonymousButtons(in nsISelection aSelection);
|
|
|
|
boolean isAnonymousElement(in nsIDOMElement aElement);
|
|
};
|
|
|