Add comments (bug 159065), r=sicking, sr=jst/bz, a=asa

git-svn-id: svn://10.0.0.236/trunk@125967 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
jkeiser%netscape.com
2002-07-28 01:47:59 +00:00
parent f0cbbd351e
commit bdd456e930

View File

@@ -71,6 +71,9 @@ class nsILayoutHistoryState;
struct nsRect;
/**
* A common superclass for HTML elements
*/
class nsGenericHTMLElement : public nsGenericElement
{
public:
@@ -81,13 +84,24 @@ public:
nsresult Init(nsINodeInfo *aNodeInfo);
#endif
/** Call on shutdown to release globals */
static void Shutdown();
// nsISupports
NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
/**
* Handle QI for the standard DOM interfaces (DOMNode, DOMElement,
* DOMHTMLElement) and handles tearoffs for other standard interfaces.
* @param aElement the element as nsIDOMHTMLElement*
* @param aIID the IID to QI to
* @param aInstancePtr the QI'd method [OUT]
* @see nsGenericHTMLElementTearoff
*/
nsresult DOMQueryInterface(nsIDOMHTMLElement *aElement, REFNSIID aIID,
void **aInstancePtr);
// From nsGenericElement
NS_METHOD CopyInnerTo(nsIContent* aSrcContent,
nsGenericHTMLElement* aDest,
PRBool aDeep);
@@ -140,6 +154,12 @@ public:
nsresult GetClientWidth(PRInt32* aClientWidth);
nsresult ScrollIntoView(PRBool aTop);
/**
* Get the frame's offset information for offsetTop/Left/Width/Height.
* @param aRect the offset information [OUT]
* @param aOffsetParent the parent the offset is relative to (offsetParent)
* [OUT]
*/
nsresult GetOffsetRect(nsRect& aRect,
nsIContent** aOffsetParent);
nsresult GetScrollInfo(nsIScrollableView **aScrollableView, float *aP2T,
@@ -175,6 +195,10 @@ public:
#endif
NS_IMETHOD_(PRBool) IsContentOfType(PRUint32 aFlags);
/**
* Standard anchor HandleDOMEvent, used by A, AREA and LINK (parameters
* are the same as HandleDOMEvent)
*/
nsresult HandleDOMEventForAnchors(nsIContent* aOuter,
nsIPresContext* aPresContext,
nsEvent* aEvent,
@@ -213,7 +237,7 @@ public:
* GetFormControlFrameFor)
*
* @param aFlushContent whether to flush the content sink
* @return the primary form control frame
* @return the primary form control frame (or null)
*/
nsIFormControlFrame* GetFormControlFrame(PRBool aFlushContent)
{
@@ -243,136 +267,462 @@ public:
// Attribute parsing utilities
/**
* Structure for a mapping from int (enum) values to strings. When you use
* it you generally create an array of them.
* Instantiate like this:
* EnumTable myTable[] = {
* { "string1", 1 },
* { "string2", 2 },
* { 0 }
* }
*/
struct EnumTable {
/** The string the value maps to */
const char* tag;
/** The enum value that maps to this string */
PRInt32 value;
};
/**
* Map a string to its enum value and return result as HTMLValue
* (case-insensitive matching)
*
* @param aValue the string to find the value for
* @param aTable the enumeration to map with
* @param aResult the enum mapping [OUT]
* @return whether the enum value was found or not
*/
static PRBool ParseEnumValue(const nsAString& aValue,
EnumTable* aTable,
nsHTMLValue& aResult);
/**
* Map a string to its enum value and return result as HTMLValue
*
* @param aValue the string to find the value for
* @param aTable the enumeration to map with
* @param aResult the enum mapping [OUT]
* @return whether the enum value was found or not
*/
static PRBool ParseCaseSensitiveEnumValue(const nsAString& aValue,
EnumTable* aTable,
nsHTMLValue& aResult);
/**
* Map an enum HTMLValue to its string
*
* @param aValue the HTMLValue with the int in it
* @param aTable the enumeration to map with
* @param aResult the string the value maps to [OUT]
* @return whether the enum value was found or not
*/
static PRBool EnumValueToString(const nsHTMLValue& aValue,
EnumTable* aTable,
nsAString& aResult);
/**
* Parse a string into an integer or a percentage (n or n%)
*
* @param aString the string to convert
* @param aResult the resulting HTMLValue [OUT]
* @param aValueUnit the unit to use if it is not a percentage
* (eHTMLUnit_Pixel or an integer type)
*/
static PRBool ParseValueOrPercent(const nsAString& aString,
nsHTMLValue& aResult,
nsHTMLUnit aValueUnit);
/**
* Parse a string into an integer, proportional or a percentage (n, n* or n%)
*
* @param aString the string to convert
* @param aResult the resulting HTMLValue [OUT]
* @param aValueUnit the unit to use if it is not a percentage / proportional
* (eHTMLUnit_Pixel or an integer type)
*/
static PRBool ParseValueOrPercentOrProportional(const nsAString& aString,
nsHTMLValue& aResult,
nsHTMLUnit aValueUnit);
/**
* Convert an integer, pixel or percent to string (n, n or n%)
* @param aValue the value to convert
* @param aResult the resulting string [OUT]
* @return whether it was able to be converted (if it was the proper type)
* XXX It is absolutely pointless to have this when we have
* ValueOrPercentOrProportionalToString.
*/
static PRBool ValueOrPercentToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Convert an integer, pixel percent or proportional to string
* (n, n, n% or n*)
* @param aValue the value to convert
* @param aResult the resulting string [OUT]
* @return whether it was able to be converted (if it was the proper type)
*/
static PRBool ValueOrPercentOrProportionalToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Parse a string value into an int or pixel HTMLValue with minimum value
*
* @param aString the string to parse
* @param aMin the minimum value (if value is less it will be bumped up)
* @param aResult the resulting HTMLValue [OUT]
* @param aValueUnit the unit to use (eHTMLUnit_Pixel or Integer)
* @return whether the value could be parsed
*/
static PRBool ParseValue(const nsAString& aString, PRInt32 aMin,
nsHTMLValue& aResult, nsHTMLUnit aValueUnit);
/**
* Parse a string value into an int or pixel HTMLValue with minimum value
*
* @param aString the string to parse
* @param aMin the minimum value (if value is less it will be bumped up)
* @param aMin the maximum value (if value is greater it will be chopped down)
* @param aResult the resulting HTMLValue [OUT]
* @param aValueUnit the unit to use (eHTMLUnit_Pixel or Integer)
* @return whether the value could be parsed
*/
static PRBool ParseValue(const nsAString& aString, PRInt32 aMin,
PRInt32 aMax, nsHTMLValue& aResult,
nsHTMLUnit aValueUnit);
/**
* Parse a string into a color HTMLValue (with hexes or color names)
*
* @param aString the string to parse
* @param aDocument the document (to find out whether we're in quirks mode)
* @param aResult the resulting HTMLValue [OUT]
* @return whether the value could be parsed
*/
static PRBool ParseColor(const nsAString& aString,
nsIDocument* aDocument, nsHTMLValue& aResult);
/**
* Parse a color into a string value (hex or color name)
*
* @param aValue the HTMLValue to parse
* @param aResult the resulting string
* @return whether the value could be converted
*/
static PRBool ColorToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Parse common attributes (currently dir and lang, may be more)
*
* @param aAttribute the attr to parse
* @param aValue the value to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
static PRBool ParseCommonAttribute(nsIAtom* aAttribute,
const nsAString& aValue,
nsHTMLValue& aResult);
/**
* Parse an alignment attribute (top/middle/bottom/baseline)
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
static PRBool ParseAlignValue(const nsAString& aString,
nsHTMLValue& aResult);
/**
* Parse a div align string to value (left/right/center/middle/justify)
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
PRBool ParseDivAlignValue(const nsAString& aString,
nsHTMLValue& aResult) const;
/**
* Convert a div align value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
PRBool DivAlignValueToString(const nsHTMLValue& aValue,
nsAString& aResult) const;
/**
* Convert a table halign string to value (left/right/center/char/justify)
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
PRBool ParseTableHAlignValue(const nsAString& aString,
nsHTMLValue& aResult) const;
/**
* Convert a table halign value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
PRBool TableHAlignValueToString(const nsHTMLValue& aValue,
nsAString& aResult) const;
/**
* Convert a table cell halign string to value
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
PRBool ParseTableCellHAlignValue(const nsAString& aString,
nsHTMLValue& aResult) const;
/**
* Convert a table cell halign value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
PRBool TableCellHAlignValueToString(const nsHTMLValue& aValue,
nsAString& aResult) const;
/**
* Convert a table valign string to value (left/right/center/char/justify/
* abscenter/absmiddle/middle)
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
static PRBool ParseTableVAlignValue(const nsAString& aString,
nsHTMLValue& aResult);
/**
* Convert a table valign value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
static PRBool TableVAlignValueToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Convert an align value to string (left/right/texttop/baseline/center/
* bottom/top/middle/absbottom/abscenter/absmiddle)
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
static PRBool AlignValueToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Convert a valign value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
static PRBool VAlignValueToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Convert an image attribute to value (width, height, hspace, vspace, border)
*
* @param aAttribute the attribute to parse
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
static PRBool ParseImageAttribute(nsIAtom* aAttribute,
const nsAString& aString,
nsHTMLValue& aResult);
/**
* Convert an image attribute to string
*
* @param aAttribute the attribute to parse
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
static PRBool ImageAttributeToString(nsIAtom* aAttribute,
const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Convert a frameborder string to value (yes/no/1/0)
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
static PRBool ParseFrameborderValue(const nsAString& aString,
nsHTMLValue& aResult);
/**
* Convert a frameborder value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
static PRBool FrameborderValueToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Convert a scrolling string to value (yes/no/on/off/scroll/noscroll/auto)
*
* @param aString the string to parse
* @param aResult the resulting HTMLValue
* @return whether the value was parsed
*/
static PRBool ParseScrollingValue(const nsAString& aString,
nsHTMLValue& aResult);
/**
* Convert a scrolling value to string
*
* @param aValue the value to convert
* @param aResult the resulting string
* @return whether the value was converted
*/
static PRBool ScrollingValueToString(const nsHTMLValue& aValue,
nsAString& aResult);
/**
* Create the style struct from the style attr. Used when an element is first
* put into a document. Only has an effect if the old value is a string.
*/
nsresult ReparseStyleAttribute(void);
/**
* Parse a style attr value into a CSS rulestruct (or, if there is no
* document, leave it as a string) and return as HTMLValue.
*
* @param aValue the value to parse
* @param aResult the resulting HTMLValue [OUT]
*/
nsresult ParseStyleAttribute(const nsAString& aValue,
nsHTMLValue& aResult);
/** Attribute Mapping Helpers
/*
* Attribute Mapping Helpers
*
* All attributes that are mapped into style contexts must have a
* matched set of mapping function and impact getter
*/
/**
* A style attribute mapping function for the most common attributes, to be
* called by subclasses' attribute mapping functions. Currently handles
* dir and lang, could handle others.
*
* @param aAttributes the list of attributes to map
* @param aData the returned rule data [INOUT]
* @see GetAttributeMappingFunction
*/
static void MapCommonAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
nsRuleData* aRuleData);
/**
* Get the style impact of common attributes (dir, lang and _baseHref
* currently). To be called from GetMappedAttributeImpact().
*
* @param aAttribute the attribute to test for impact
* @param aHint the impact (NS_STYLE_HINT_*)
* @return whether the impact was set
*/
static PRBool GetCommonMappedAttributesImpact(const nsIAtom* aAttribute,
PRInt32& aHint);
/**
* Get the style impact of image attributes (width, height, hspace and vspace
* currently). To be called from GetMappedAttributeImpact().
*
* @param aAttribute the attribute to test for impact
* @param aHint the impact (NS_STYLE_HINT_*)
* @return whether the impact was set
*/
static PRBool GetImageMappedAttributesImpact(const nsIAtom* aAttribute,
PRInt32& aHint);
/**
* Get the style impact of image align attributes (align currently). To be
* called from GetMappedAttributeImpact().
*
* @param aAttribute the attribute to test for impact
* @param aHint the impact (NS_STYLE_HINT_*)
* @return whether the impact was set
*/
static PRBool GetImageAlignAttributeImpact(const nsIAtom* aAttribute,
PRInt32& aHint);
/**
* Helper to map the align attribute into a style struct.
*
* @param aAttributes the list of attributes to map
* @param aData the returned rule data [INOUT]
* @see GetAttributeMappingFunction
*/
static void MapAlignAttributeInto(const nsIHTMLMappedAttributes* aAttributes,
nsRuleData* aData);
/**
* Helper to map the image border attribute into a style struct.
*
* @param aAttributes the list of attributes to map
* @param aData the returned rule data [INOUT]
* @see GetAttributeMappingFunction
*/
static void MapImageBorderAttributeInto(const nsIHTMLMappedAttributes* aAttributes,
nsRuleData* aData);
/**
* Helper to map the image margin attribute into a style struct.
*
* @param aAttributes the list of attributes to map
* @param aData the returned rule data [INOUT]
* @see GetAttributeMappingFunction
*/
static void MapImageMarginAttributeInto(const nsIHTMLMappedAttributes* aAttributes,
nsRuleData* aData);
/**
* Helper to map the image position attribute into a style struct.
*
* @param aAttributes the list of attributes to map
* @param aData the returned rule data [INOUT]
* @see GetAttributeMappingFunction
*/
static void MapImagePositionAttributeInto(const nsIHTMLMappedAttributes* aAttributes,
nsRuleData* aData);
/**
* Get the style impact of image border attributes (border currently). To be
* called from GetMappedAttributeImpact().
*
* @param aAttribute the attribute to test for impact
* @param aHint the impact (NS_STYLE_HINT_*)
* @return whether the impact was set
*/
static PRBool GetImageBorderAttributeImpact(const nsIAtom* aAttribute,
PRInt32& aHint);
/**
* Helper to map the background attributes (currently background and bgcolor)
* into a style struct.
*
* @param aAttributes the list of attributes to map
* @param aData the returned rule data [INOUT]
* @see GetAttributeMappingFunction
*/
static void MapBackgroundAttributesInto(const nsIHTMLMappedAttributes* aAttributes,
nsRuleData* aData);
/**
* Get the style impact of background attributes (background and bgcolor
* currently). To be called from GetMappedAttributeImpact().
*
* @param aAttribute the attribute to test for impact
* @param aHint the impact (NS_STYLE_HINT_*)
* @return whether the impact was set
*/
static PRBool GetBackgroundAttributesImpact(const nsIAtom* aAttribute,
PRInt32& aHint);
@@ -434,27 +784,63 @@ public:
static PRBool RestoreFormControlState(nsIHTMLContent* aContent,
nsIFormControl* aControl);
/**
* Get the presentation context for a content node.
* @param aContent the content node
* @param aPresContext the presentation context [OUT]
*/
static nsresult GetPresContext(nsIHTMLContent* aContent,
nsIPresContext** aPresContext);
/**
* Resolve the base URL from a _baseHref attribute (could be empty) and
* from the document.
*
* @param aBaseHref the _baseHref attribute
* @param aDocument the document
* @param aResult the base URL
*/
static nsresult GetBaseURL(const nsHTMLValue& aBaseHref,
nsIDocument* aDocument,
nsIURI** aResult);
// Form Helper Routines
/**
* Find an ancestor of this content node which is a form (could be null)
* @param aForm the form ancestore [OUT]
*/
nsresult FindForm(nsIDOMHTMLFormElement **aForm);
/**
* Find the form for this element and set aFormControl's form to it
* (aFormControl is passed in to avoid QI)
*
* @param aFormControl the form control to set the form for
*/
nsresult FindAndSetForm(nsIFormControl *aFormControl);
// See if the content object is in a document that has nav-quirks
// mode enabled.
/**
* See if the document being tested has nav-quirks mode enabled.
* @param doc the document
*/
static PRBool InNavQuirksMode(nsIDocument* aDoc);
/**
* Helper for the form subclasses of nsGenericHTMLElement to take care
* of fixing up form.elements when name, id and type change
*
* @param aForm the form the control is in
* @param aNameSpaceID the namespace of the attr
* @param aName the name of the attr
* @param aValue the value of the attr
* @param aNotify whether to notify the document of the attribute change
*/
nsresult SetFormControlAttribute(nsIForm* aForm, PRInt32 aNameSpaceID,
nsIAtom* aName,
const nsAString& aValue,
PRBool aNotify);
/** The list of attributes */
nsHTMLAttributes* mAttributes;
// Helper functions for <a> and <area>
@@ -508,15 +894,34 @@ public:
static nsresult GetHashFromHrefString(const nsAString &aHref,
nsAString& aHash);
protected:
/**
* Focus or blur the element. This is what you should call if you want to
* *cause* a focus or blur on your element. SetFocus / SetBlur are the
* methods where you want to catch what occurs on your element.
* @param aDoFocus true to focus, false to blur
*/
nsresult SetElementFocus(PRBool aDoFocus);
/**
* Register or unregister an access key to this element based on the
* accesskey attribute.
* @param aDoReg true to register, false to unregister
*/
nsresult RegUnRegAccessKey(PRBool aDoReg);
/**
* Determine whether an attribute is an event (onclick, etc.)
* @param aName the attribute
* @return whether the name is an event handler name
*/
PRBool IsEventName(nsIAtom* aName);
};
//----------------------------------------------------------------------
/**
* A helper class to subclass for leaf elements.
*/
class nsGenericHTMLLeafElement : public nsGenericHTMLElement {
public:
nsGenericHTMLLeafElement();
@@ -594,6 +999,9 @@ public:
//----------------------------------------------------------------------
/**
* A helper class to subclass for elements that can contain children
*/
class nsGenericHTMLContainerElement : public nsGenericHTMLElement
{
public:
@@ -643,12 +1051,16 @@ public:
PRBool aDeepSetDocument);
NS_IMETHOD RemoveChildAt(PRInt32 aIndex, PRBool aNotify);
/** The list of children */
nsSmallVoidArray mChildren;
protected:
/**
* ReplaceContentsWithText will take the aText string and make sure
* that the only child of |this| is a textnode which corresponds to
* that string.
*
* @param aText the text to put in
* @param aNotify whether to notify the document of child adds/removes
*/
nsresult ReplaceContentsWithText(const nsAString& aText, PRBool aNotify);
/**
@@ -657,12 +1069,17 @@ protected:
* completely ignores any non-text-node children of |this|; in
* particular it does not descend into any children of |this| that
* happen to be container elements.
*
* @param aText the resulting text [OUT]
*/
nsresult GetContentsAsText(nsAString& aText);
};
//----------------------------------------------------------------------
/**
* A helper class for form elements that can contain children
*/
class nsGenericHTMLContainerFormElement : public nsGenericHTMLContainerElement,
public nsIFormControl
{
@@ -701,11 +1118,15 @@ public:
}
protected:
/** The form that contains this control */
nsIForm* mForm;
};
//----------------------------------------------------------------------
/**
* A helper class for form elements that can contain children
*/
class nsGenericHTMLLeafFormElement : public nsGenericHTMLLeafElement,
public nsIFormControl
{
@@ -744,6 +1165,7 @@ public:
}
protected:
/** The form that contains this control */
nsIForm* mForm;
};