HTMLObject::Base(3)

NAME
HTMLObject::Base - Perl extension for HTMLObject.

SYNOPSIS
  use HTMLObject::Base;
  my $doc = HTMLObject::Base->new();

  $doc->setTitle("Test of HTMLObject::Base");
  $doc->setFocus("body");
  $doc->print(<<"END_OF_BODY");
  <center>
  <h1>HTMLObject::Base</h1>
  <br />
  This is cool!
  END_OF_BODY

  $doc->setCookie(name => 'cookie name', value => 'This rocks!');

  # Actually generate the entire document, cookie and all!
  $doc->display();

DESCRIPTION
HTMLObject::Base provides the Base methods needed to create a generic HTML document dynamically. See documentation.html for complete details. It now supports Internationalization via the lang and charset attributes of the html tag and the Content-type.

Exported FUNCTIONS

scalar new(displayOnExit)
     Creates a new instance of the HTMLObject::Base document type.

     Optional: displayOnExit - boolean (1 or 0).  If true (1), when the
     object goes out of scope and the display() or startDisplaying()
     methods have not been called and we have not been instructed to
     not display via the doNotDisplay() method, then we call display()
     thus transparently making sure the object is output to the user.

     displayOnExit defaults to 0 (false).

void setErrorMessage(code => '', message => '')
     This adds the error message associated with code to the
     errorMessages hash. Modifies %errorMessages.

void clearErrorMessage(code => '')
     This removes the message associated with code from the
     errorMessages hash. Modifies %errorMessages.

void setError(code => '')
     This takes the code and sets $self->{error}=1,
     $self->{errorCode} = $code. This is a helper function
     for the derived classes to use to signal when an
     error has occurred. Modifies $self->{error} and $self->{errorCode}.

scalar didErrorOccurr() - (This is gone in 2.x series.)
     See didErrorOccur().

scalar didErrorOccur()
     Returns 1 if an error occurred, 0 otherwise.

scalar getErrorMessage()
     Returns the message that was generated via the code that was set.

scalar getErrorCode()
     Returns the code that was set to indicate the error that occurred.

void reset()
     Resets the HTMLObject::Base document back to the defaults.

void setDocumentEncoding(encoding => "UTF-8")
     requires: encoding - document encoding value default of UTF-8
     This function sets the documents encoding format.  Your document
     defaults to iso-8859-1 if you do not use this method to change it.
     This is only available if working with an XHTML document.

scalar getDocumentEncoding()
     returns the current document encoding value.
     This is only available if working with an XHTML document.

void displayError(title => '', message => '', debug => 0|1)
     optional: debug (defaults to 0)
     Creates a HTML document that displays the user specified error
     message along with the error message generated by the program. The
     user specified title is used also. The program is exited after the
     document is displayed. Uses display() to generate the actual
     document.  If debug is specified and equals 1, then the
     contents of the calling Document will be output in a viewable format
     so that the user can determine what would have been generated.

scalar display(debug => 0|1, print => 0|1)
     optional: debug (defaults to 0), print (defaults to 1)
     returns: the string that represents the Document.
     This function generates the Base Document displaying any cookies,
     plus the contents of the Body that the user created.  This function
     prints the generated document to standard out which is then
     hopefully being sent to a web server to process, if print = 1.  If
     debug is defined (and equals 1), then the contents of the current
     Document are returned in a format ready to display in another
     Document so that the user can see what would have been generated and
     the string is not printed out.

     The generated output is always returned to the caller.

void startDisplaying()
     This function generates the Base Document displaying any cookies,
     plus the contents of the Body that the user created.  This function
     prints the generated document to standard out which is then
     hopefully being sent to a web server to process.  This also sets a
     flag bufferMode to 0 so that the methods know that we are no longer
     buffering user input but should just print it to the standard
     output.  The only valid commands are error related, endDisplaying
     and print.

void endDisplaying()
     This function closes the document that is currently being displayed
     in non-Buffering mode.  It is not valid to call this more than once.

void doRequiredParameterError(title => '', message => '')
     Creates an Error document using the customized title to display the
     error of Required Parameter missing. The specified message is also
     included in the body so that the program can notify the user of what
     variable is missing. Uses displayError() to generate the Error
     document.

void setContentType(contentType) (scalar value)
     Uses the specified string to set the content-type: header with.
     Modifies $contentTypeString. If $contentType not equal to
     "text/html" then the focus is automatically set to "body".

scalar formEncodeString(string, ignoreTags, sequence)
scalar formEncodeString(scalar)
     In scalar mode, takes the incoming string and encodes it to
     escape all <, > values as &lt;, &gt; unless they are \ escaped.

     To have the \ showup, you will have to do a \\ when defining this
     in perl, otherwise perl interprets the \whatever internally.

     In non-scalar mode, you specify the arguments by name.

     optional:
       string - string to encode all &, <, > characters to their html
         equivalents of &amp;, &lt;, &gt;.
       ignoreTags - string of pipe (|) seperated tag names that should not
         be encoded.  Ex:  ignoreTags => "b|i|u|span" would ignore all
         <b>, </b>, <i>, </i>, <u>, </u>, <span>, </span> tags that were
         not \ escaped.
       sequence - a named set of ignoreTags values that you want used.
         If both sequence and ignoreTags are specified, the ignoreTags
         value is used.  If you want to apply multiple sequences, specify
         them in a comma delimited format.
         Ex: sequence => 'formatting,seperator'

         available sequences are:
           formatting - "b|i|u|span|sub|sup|big|code|font|h1|h2|h3|h4|h5|h6|pre|small|strike|strong"
           block - "p|div|form"
           tables - "table|tr|td|th|tbody|tfoot|thead"
           seperator - "br|hr"
           formItems - "input|textarea|select|option"
           grouping - "ol|ul|li"

     returns: form encoded string ignoring those entries defined in
       ignoreTags or sequence and where the &, <, > was not \ escaped.

       Any &, <, > that were \ escaped will have the \ removed on output.

scalar getCurrentDate(format)
     Uses localtime to gather the current date and returns a string
     with the specified parameters output in the format specified
     by format.

     By default format = "%F" which returns YYYY-MM-DD.

     See strftime(3) for possible arguments.

scalar getCurrentLocalizedDate(tz, format)
     Uses gmtime to gather the current date and returns a string
     with the specified parameters output in the format specified
     by format.

     By specifying your TimeZone in tz, I can calculate your
     localized time.  tz will default to "GMT".

     By default format = "%F" which returns YYYY-MM-DD.

     See strftime(3) for possible arguments.

@tm calculateDateOffset(date, offset, toTZ, fromTZ)
      Takes the date as given by the user (can be "now" to indicate
      they want the current time used) and uses Date::Manip DateCalc
      method to calculate the new date.

      toTZ indicates the TimeZone to convert into.
      fromTZ indicates the TimeZone we are converting from.  If "",
        then it is the servers default timezone.  It defaults to "".

      toTZ defaults to "".  This will calculate the date in the servers
        current TimeZone.  If you specify a TimeZone, then we convert
        to that TimeZone from the fromTZ value.

      Returns the updated tm array representing the new date/time just
      calculated.

scalar formatDateString(date, format)
     Runs the specified date through Date::Manip ParseDate
     and then returns it as specified by the format string.

     format defaults to "%F".

     date defaults to "now".

scalar getDateOffset(date, offset, format)
     Returns the date/time specified in the format string that is
     the current date/time or specified date offset by the
     specified offset string that is valid for
     Date::Manip::ParseDate() function.

     format defaults to "%F" - YYYY-MM-DD

     date defaults to "now" which will use the current time for
     any calculations.

void refresh(url, seconds)
     requires: url - URI we should refresh to.  This is either an empty
       string or must be a valid URI.  Ex: http://www.xyz.com/index.html
       currently we check for ftp, http or https as the protocol.  If
       you need a different protocol, let me know and I'll update the
       check, otherwise you will have to manually use setMetaTag().
     optional: seconds - # of seconds we should wait before refreshing.
       Defaults to 0.

     Creates the Refresh meta tag.

void setFocus(section) (scalar value)
     Validates the section name specified and then sets the internal
     pointer to the specified section. The output of any following print,
     read, or delete commands will work with the specified section.
     Modifies $currentSection.

     Valid sections are:
       body
       head

void print(string|hash)
        Appends the contents of string to the currently specified section,
        previously specified via setFocus().

        If you specify a hash, then we use the keys to determine what
        sections to append text to.  This allows you to work with the
        following sections and data structures by name:

        sections:
          - head
          - body
          - bodyClass
          - bodyID
          - bodyStyle
          - bodyTitle

        structures:
          - style or css
          - link
          - cookie
          - metaTag

        structures can be modified by sending in a single string or an
        arrayref of strings to be modified, thus you are not making one
        really long css entry, but able to split out the individual
        css entries.

        All structures are checked to make sure duplicates are not
        entered.

        Supported structure entries are not valid sections for the
        setFocus() function.

        The hash support was only implemented to allow the
        HTMLObject::Form code to output all the necessary html code and
        not force the user to pass in an HTMLObject instance when
        generating the form.

        Ex:
        $doc->print(body => "$bodyStr", head => "$headStr");

        $doc->print(css => [ "a { color: red; }", "a { color: red; }" ]);

        would cause only one instance of the "a { color: red; }" to be
        output, whereas if you would have specified the css entry as one
        long string, then it would have done duplicate suppression checking
        on the entire string and not on it's parts.

void setBodyClass(class)
    Specify the class="" value to set in the <body> tag. This is a pass by value, not by name.

    Ex: $doc->setBodyClass("myBody");

scalar getBodyClass()
    returns the current value of bodyClass.

void setBodyID(id)
    Specify the id="" value to set in the <body> tag. This is a pass by value, not by name.

    Ex: $doc->setBodyID("myID");

scalar getBodyID()
    returns the current value of bodyID.

void setBodyStyle(style)
    Specify the style="" value to set in the <body> tag. This is a pass by value, not by name.

    Ex: $doc->setBodyStyle("color: red;");

scalar getBodyStyle()
    returns the current value of bodyStyle.

void setBodyTitle(title)
    Specify the title="" value to set in the <body> tag. This is a pass by value, not by name.

    Ex: $doc->setBodyTitle("This is a test.");

scalar getBodyTitle()
    returns the current value of bodyTitle.

void setStyleEntry(tag => '', attributes => undef, string => '')
     requires: tag
     optional: attributes (ref to hash of name, value pairs to apply to
                           this tag),
               or string (name: value; - must be valid css)
     This generates a CSS entry to specify the style for the tag you
     specified.

void setLinkDecorations(link => 'none', alink => 'none', vlink => 'none', hover => '')
     This function allows the user to specify the decorations that the
     link, visited link, active link and hover link have.  If you
     specify nothing, then by default it turns off all decorations (no
     underline).  This generates a CSS section to specify the link
     decorations you desire.

     You should really generate your own CSS using setStyleEntry().

void setLocation(url)
     requires: url - url to redirect to.

     summary: When you call this method and then display(), any cookies
       defined will be output and then the Location: header.  This will
       only be done if the contentType = text/html.  All other content
       will be ignored.

       There is currently no extra checks being done to stop you from
       continuing to specify content and the startDisplaying() method
       does not check for or display the location property.

       Only the Base and Normal modules have been updated to honor this
       attribute when calling display().

     Ex: $doc->setLocation("http://www.test.com/cgi-bin/index.cgi?cmd=hi");

scalar getLocation()
     returns the current location value.

scalar makeValidHTML(string)
     requires: string - string to cleanup
     optional:
     returns: cleaned up string
     summary: basically converts all valid html tags to lowercase.
             converts <br> -> <br /> and <hr> -> <hr />
             tries to make sure that all attributes are lowercase
             and double quoted.
             Adds an ="1" to any attributes that are alone, like
             a multiple attribute in a <select> tag.
             Look into making sure that all tags have a close tag.

scalar fixupHTMLTag(tag)
     takes the string passed in and lowercases the tag name,
     all arguments and makes sure that arguments values are
     double quoted.  If any argument doesn't have an = part,
     it is then fixed.

     Ex:  <SELECT name=colors multiple>
     ->   <select name="colors" multiple="1">

bool doNotDisplay(bool)
     Takes the specified value and assigns to the doNotDisplay variable.

     returns the new value of doNotDisplay.

     Ex: $doc->doNotDisplay(1); # to turn off the auto display code.

bool setHTMLInfo(version, dtd, xhtml, displayDTD)
     requires:
     optional: version, dtd, xhtml - 0 or 1, displayDTD - 0 or 1
     returns: 0=error, 1=ok
     summary: Validates version and dtd and sets the htmlVersion and
             htmlDTD variables.  If dtd not defined it defaults to
             "loose".  If version not defined it defaults to "4.01"
             as long as xhtml = 0, but if xhtml = 1 then version
             defaults to "1.0".
             Possible values for version:
               4.0
               4.01
             Possible values for XHTML versions:
               1.0
             Possible values for dtd:
               strict
               loose

             displayDTD defaults to 1.  If it is set to 0, then
             the version, dtd and xhtml values are ignored.

hash getHTMLInfo()
     requires:
     optional:
     returns: hash with version, dtd, xhtml and displayDTD
             entries = to the current values.
             Format = {version => X, dtd => Y, xhtml => 1/0,
             displayDTD => 1/0 }.

scalar processHTMLTagArgs(args)
     walk the specified args and if they exist, we append to the string
     and return the list of arguments that should be output in the tag.

scalar findHTMLTagContents(args)
    Picks out the contents of the tag based on the following criteria:

    -contents exists -c exists something exists that is not a valid attribute for this tag and -contents and -c doesn't exist.

    returns the found contents, else an empty string.

scalar htmlTag(-tag, -content, -c, -newline, -indent)
     returns a string that contains the entire <tag> </tag> tag sequence
     with contents of -content or -c substituted in.  Any other arguments
     that are valid to the processHTMLTagArgs method will be added to
     the opening tag.  Not every argument is valid, and I'm not
     currently doing validation checks.  The value of tag is used to
     know what html tag to generate.

     The generated tag is indented according to the type of tag so
     that we hopefully can generate slightly decent looking html
     instead of it all being strung out on a single line.

     Use -indent to specify how many spaces the tag and content should
     be padded with.  This helps tag nesting.  Default = 0.

     All tags have a \n appended to them so you don't have to do that
     manually anymore, unless they are an inline type tag like:
     a span img input.

     The specially handled tags are:
     table, tr, td, select, ol, ul, li, option.

     If you specify -newline = 0, then a newline will not be generated
     even if it normally would have.  This allows you to exert some
     control over the output.

     Just added, you can specify content for a tag via one of the following:
       -content =>,
       -c =>, shortcut for -content
       or just specify the content string (without putting it in
         name => value format).  If you do this, it must be the last argument
         you specify, otherwise it can get lost.

       Ex: $doc->center("This should be centered!");
          $doc->a(href => "something", "This is the content for the a tag.");

void setBodyAttribute(name => value)
     Arguments: hash style html attributes.
     Ex: onblur => "do something", onclick => "something else"

     Builds up name="value" to append to the <body> tag when the
     document is displayed.  name must be a valid html attribute.

string optionsBuilder(data, options, selected)
     requires: data or options
     optional: selected

     If data is specified, then an HTMLObject::Form instance will
     be created and the createSelectOptions() method will be
     called passing in the data structure.

     If options is specified, then it must be the hashref as
     returned by the createSelectOptions() method.

     If both data and options are specified, then options takes
     precedence and is used.

     selected is either a string or arrayref specifying those
     entries to be selected on output.
     If a string is given, it will be split on \0 to handle the
     case that the HTMLObject::Form module has not processed it
     for multiple select values.
     If an arrayref is given, each entry will be re-selected and
     no further processing of the entries will be done.

     Summary: This method is designed to help make select boxes
     easier to generate without having to constantly loop over
     database result sets, etc. to generate the options.
     A string is returned which contains the <option></option>
     tags that represent the data/options that were specified.

     Usage:
     my $selectStr = $doc->select(name => "colors", -content =>
     $doc->optionsBuilder(data => $sth->fetchall_arrayref,
     selected => $input->{colors}));

Exported FUNCTIONS (non-inline POD)
  scalar getContentType()
    Returns $contentTypeString.  If the content-type string is
    text/html, then the ; charset=xxxx is also appended.

  void setLanguageEncoding(language => 'en', encoding => 'iso-8859-1')
    Sets the language and encoding values to the specified values after
    validating that they exist and are valid together.

  scalar getLanguage()
    Returns the value of $language.

  scalar getLanguageName()
    Returns the name of the language we are using.

  scalar lookupLanguageName(code => 'en')
    Returns the name of the language code that is specified.  Defaults
    to looking up english if nothing specified.  Returns an empty string
    if the language code is not defined in our hash.

  scalar getCharEncoding()
    Returns the value of $charsetEncoding.

  (scalar or @ ref) lookupCharEncoding(code => 'en')
    Returns the array ref or string that represents the valid charset
    encodings that this language code supports.  Defaults to looking up
    english if nothing specified.

  void setTitle(title)  (scalar value)
    Uses the specified string to set the title with. Modifies
    $titleString.

  scalar getTitle()
    Returns $titleString.

  scalar getHeadString()
    Returns $headString.

  scalar getBodyString()
    Returns $bodyString.

  scalar encodeString(string => '')
    URI encodes the string and returns the result.

  scalar uriEncode(string)
    shortcut to encodeString(string).

  scalar formEncode(string)
    shortcut to formEncodeString(string).

  scalar formDecodeString(string => '')
    takes: string
    returns: string which has all form encoded characters replaced with
             the un-encoded value.  Ex.  &amp; => &
    New feature:  Any special character backslash escaped will not be
    converted.  Ex:  \&amp; => \&amp;

  scalar formDecode(string)
    shortcut to formDecodeString(string).

  scalar formProtectString(string => '')
    takes: string
    returns: string after decoding and then re-encoding the string to
             protect any special characters you created and want to
             redisplay in an edit field, etc.  Uses formEncodeString
             and formDecodeString.

  scalar formProtect(string)
    shortcut to formProtectString(string).

  void setCookie(name => '', value => '', expires => '', path => '',
                 domain => '', secure => '')
    Creates an entry in the cookies array that specifies the name=value
    pair and the expiration date and if it is to be secure for the
    specified cookie.  If secure is defined then it is included in the
    Set-Cookie line, else it is left out. The value does not matter as it
    is a tag in the Set-Cookie line and not a name=value item. Modifies
    @cookies.

    The Cookie specification, says the expiration date must look like:
             Weekday, dd-Mon-yyyy hh:mm:ss GMT
      Ex: Sun, 01-Jan-1970 00:00:00 GMT  would allow you to specify
      a date in the past, for removing the cookie.

    If you do not want to have to generate the date/time string for
    having your cookie expire in 30 minutes, just specify the date/time
    you are interested in and the code will convert it for you.
      Ex: expires => "30 minutes", expires => "yesterday",
      expires => "1970", expires => "2 days 30 minutes"
    See Date::Manip(3) and the ParseDate() method to see what it
    considers as valid date/time specifications.

    Valid formats for the domain are:
             The domain must be within the current domain and must have
             2 or more periods depending on the type of domain.
      You can also specify the IP address or fqdn of the machine
      that you want the cookie to be limited to, instead of being
      sent to all other machines in the domain.
             Ex. ".host.com", "192.168.1.1", "www.host.com"

  void setCompressedCookie(name => '', cookies => [name, value],
                           expires => '', path => '', domain => '',
                           secure => '')
    Creates an entry in the cookies array that specifes the name=value
    pair where the value is the embedded cookies to be stored in this
    cookie. The embedded cookies are seperated with a :: but other than
    that everything else is the same as setCookie. The cookies hash
    entry is pointing to an array where each entry is another array with
    the first entry being the name and the second entry the value for
    each embedded cookie. Modifies @cookies.

  void setMetaTag('http-equiv' => '', content => '')
    Creates an entry in the meta_tags array that specifies the http-equiv
    and content values for the specified Meta tag to be created when
    display is called. Modifies @metaTags.

  scalar getFocus()
    Returns the currently specified section.

  void printTag(tag, value, mode)
    requires: tag
    optional: value, mode (global or single replace)
    appends the contents of value to the tagBuffers->{tag} string.
    The tagBufferMode is set for the tag based upon the value of mode.
    If no mode is specified and a mode has not yet been set for the tag,
    then it is defaulted to single replacement mode, not global
    replacement.  Tags are only worked with in the BODY section.

  scalar read()
    Returns the contents of the currently specified section. This could
    be $headString or $bodyString.

  scalar readTag(tag)
    requires: tag
    returns the string from tagBuffers identified by tag

  void delete()
    Deletes the contents of the currently specified section. You should
    call read() before doing this so you can restore if this was an
    accident. This could modify $headString or $bodyString.

  void deleteTag(tag)
    required: tag
    We remove the contents from tagBuffers for the tag.

  void setBodyBgcolor(color)  (scalar value)
    This function sets the background color for the body. Modifies
    $bodyBgcolor.

  scalar getBodyBgcolor()
    This function returns the background color for the body.

  void setBodyFgcolor(color)  (scalar value)
    This function sets the text color for the body. Modifies
    $bodyFgcolor.

  scalar getBodyFgcolor()
    This function returns the text color for the body.

  void setBodyLinkColor(color)  (scalar value)
    This function sets the default link color for the body. Modifies
    $bodyLinkColor.

  scalar getBodyLinkColor()
    This function returns the default link color for the body.

  void setBodyVlinkColor(color)  (scalar value)
    This function sets the visited link color for the body. Modifies
    $bodyVlinkColor.

  scalar getBodyVlinkColor()
    This function returns the visited link color for the body.

  void setBodyAlinkColor(color)  (scalar value)
    This function sets the active link color for the body. Modifies
    $bodyAlinkColor.

  scalar getBodyAlinkColor()
    This function returns the active link color for the body.

  void setBodyImage(image)  (scalar value)
    This function sets the background image for the body. Modifies
    $bodyImage.

  void setBase(href => '', target => '')
    This function allows the user to specify the base url of the webpage
    or more importantly the default target that all links should point to
    if not explicitly specified. This is mainly used in web pages that
    are in a frameset. Modifies $baseHrefString, $baseTargetString.

  void setLink(href => '', name => '', rel => '', rev => '',
               target => '', title => '', charset => '', src => '',
               hreflang => '', media => '')
    required: href, rel, type
    optional: name, rev, target, title, charset, hreflang, src, media

    This function allows the user to specify a <link> tag item that is
    stored in the @linkTag array to be displayed in the <head> when the
    document is created. Modifies @linkTag.

NOTE:
 Any methods that only required a single argument (code, string, etc.)
 have now been updated to either take a scalar or you can continue
 passing in the value by name.

 Ex:  $string = "Hello World!";
 $string = makeValidHTML(string => $string);
 or
 $string = makeValidHTML($string);

NEW FUNCTION CALLING SUPPORT AS OF 2.23:
 The following methods can now be called like a function without
 having to instantiate an instance of the HTMLObject::Base module:

   uriEncode
   encodeString
   formEncode
   formEncodeString
   formDecode
   formDecodeString
   formProtect
   formProtectString

 Example of how to call:

   $result = HTMLObject::Base::uriEncode("uri string to encode");
   $result = HTMLObject::Base::uriEncode($url);

 Restriction:  Currently, to take advantage of this feature, you
 can not call and specify your arguments by name.  You can only
 pass in the string to work with.

 Thus you can not do this:

   $result = HTMLObject::Base::uriEncode(string => $url);

NEW HTML TAG SUPPORT:
 You can now generate html tags by calling $doc->tagName, where
 tagName is any of the valid HTML/XHTML tags.  If you need to
 specify arguments for the tag, use the name of the argument as the
 key entry and the value as the value entry like so:
 $doc->tag(arg1 => "value", arg2 => "value");

 If you are creating a tag that has nested tags in it, use the
 -content argument to specify the html you want output for the
 body of this tag.

 Ex: $doc->tr(align => "center", valign => "top", -content =>
 $doc->td(-content => "This is a &lt;td&gt; tag."));

 would output:
 <tr align="center" valign="top">
   <td>This is a &lt;td&gt; tag.</td>
 </tr>

 See the htmlTag() method's documentation for more arguments.

 All tags are generated as XHTML valid, but should still work in
 an HTML 4 compatible browser since I'm using the W3C conventions.
 As such, all tags and tag arguments are lowercase only!

 If you encounter a tag that claims to be unknown, but is in the
 XHTML 1.0 spec, please let me know.  The same with any tag arguments.

 This is the list of all currently known tags:

 a abbr b basefont big blockquote br button caption center cite code
 col colgroup dd del dfn dir div dl dt em fieldset font form
 h1 h2 h3 h4 h5 h6 hr i iframe img input ins isindex kbd label
 legend li map menu object ol optgroup p param pre q s samp
 script select small span strike strong sub sup table tbody
 td textarea tfoot th thead tr tt u ul var

 This is the list of all currently known tag arguments:

 type class id style align onfocus onblur onclick ondblclick
 onmousedown onmouseup onmouseover onmousemove onmouseout
 onkeypress onkeydown onkeyup target tabindex accesskey
 shape coords title lang dir name value size multiple
 selected checked disabled label action method href src
 rows cols readonly onselect onchange enctype
 ismap usemap width height border hspace vspace alt
 bgcolor frame rules cellspacing cellpadding for maxlength

AUTHOR
James A. Pattie, htmlobject@pcxperience.com

SEE ALSO
perl(1), HTMLObject::Normal(3), HTMLObject::FrameSet(3), HTMLObject::ReadCookie(3), HTMLObject::Form(3).