Revision history for HTML::DOM

0.058   2 February, 2018
        Bug fix: When a <button> element is clicked, its value is now
        included in the form data even if it has no value. Previously,
        valueless buttons would be omitted.

0.057   10 July, 2016
        Bug fix:  $doc->base now returns the URL of the page if it is
        a data URL, instead of just ‘data:’.

0.056   28 February, 2016
        Bug fix: $doc->title no longer dies when setting the title of
        a document with no head node.
        Miscellaneous:  The make_request  method of form elements has
        been tweaked to work with  Encode 2.80.  Technically,  it was
        working, but, due to changed output in Encode 2.80, the tests
        started failing.  So now the MIME encoding is  skipped  on  a
        string consisting solely of spaces and printable ASCII. (This
        was easier than having two sets of tests.)

0.055   8 November, 2015
        Bug fixes:
        • getElementsByClassName now works correctly when class names
          contain hyphens,  instead of treating hyphens within  class
          attributes as boundaries. This was based on a patch by Sean
          Dodger (thank you!).
        • $doc->body used to return a text node in some  cases,  caus-
          ing methods like aLink to die.

0.054   26 October, 2014
        New feature: The named node map returned by $elem->attributes
        can now be used as an array  or  hash  reference.  This  also
        means that  JavaScript  code  run  by  WWW::Scripter  can  do
        form.attributes['action'].value, etc.

0.053   April Fools’ Day, 2012
        Bug fixes:
        • An extraneous  <body>  tag with event attributes now  calls
          the event_attr_handler on the body, not the preceding tag’s
          element, and actually supplies the value of  the  attribute,
          rather than undef  (RT #75997).  Thanks again to Tomki Camp
          for the report.
        • When DOMAttrModified events were triggered, if it happened
          that no event listeners were triggered, the event object
          that HTML::DOM::EventTarget passed to the
          default_event_handler would not have its type set and its
          cancellability would be set to true instead of false. This
          has been fixed.

0.052   25 March, 2012
        Bug fixes:
        • An extraneous  <body>  tag no longer closes currently  open
          tags, turning <form><body><input> into <form></form><input>
          (RT #75997).  Thanks to Tomki Camp for the report.
        • The weird colour methods of the document (fgColor, etc.) no
          longer die when there is no body element.

0.051   11 March, 2012
        Bug fix:  write()  no longer dies inside an  element  handler
        (e.g.,  <script> element) if the document has no root element.
        • t/html-form.t  no  longer  fails  with  HTTP::Message  6.03
          (RT #75312).
        • This version drops the dependency on HTML::Tree.  HTML::DOM
          is trying to extend it in a way that  HTML::Tree  was never
          designed for. The result is a pile of hacks upon hacks that
          is very hard to manage. So forked versions of HTML::Element
          and HTML::TreeBuilder are now included  (whose forked names
          remain undocumented in case anyone is tempted to  use  them
          directly). This is the first step toward refactoring things
          and merging the  two  HTML  parsers  (what  we  essentially
          have) together.

0.050   1 January, 2012
        Bug fixes:
        • $doc->cookie  no longer  lists  cookies  from  the  request
          object in addition to those from the  cookie  jar  (usually
          resulting in duplicates).
        • HTML::DOM::Interface now makes sure that all modules provid-
          ing constants are loaded.

0.049   4 Sepember, 2011
        New feature:  <button>  elements are now treated as real  but-
        tons, instead of being ignored by most form-handling function-
        ality.  Thanks to a certain Martin for providing a patch upon
        which this was based (RT #70499).

0.048   27 March, 2011
        Bug fix:  Area elements now trigger a DOMActivate  event when
        the click method is called.  (This means that a default event
        handler for links gets called with area elements,  as well as
       ‘a’ elements.)

0.047   13 February, 2011
        Bug fix:  Implicitly-closed forms were being associated  with
        inputs in subsequent forms,  resulting  in  there  being  two
        forms that contain the same input element in their ->elements
        and ->inputs arrays (RT #65363).

0.046   23 January, 2011
        Bug fixes:
        • Setting innerHTML and calling the  insertAdjacent*  methods
          now cause node lists and collections to be updated.
        • Calling  ->checked(1)  on a radio button now unchecks other
          radio buttons in the same group.
        • Checking  a  radio  button  via  the  HTML::Form  interface
          ($form->value(...), $form->find_input(...)->value(...)) now
          causes other radio buttons in  the  same  group  to  become

0.045   21 November, 2010
        Incompatible change:  event_parent now holds a weak reference.
        New feature: weaken_response constructor argument to indicate
        that the HTML::DOM object should hold a weak reference to the
        response object.

0.044   26 September, 2010
        Bug fixes:
        • Fixed to work with HTML::Tree 4

0.043   15 August, 2010
        Bug fixes:
        • Fixed to work with HTML::Tree 3.23_x
        • HTML::DOM::Element  can now  be  loaded  without  HTML::DOM
          already loaded.

0.042   18 July, 2010
        One bug fix:  Unmatched </td> and </th>  tags no longer close
        elements that  are  outside  the  innermost  enclosing  table.

0.041   13 June, 2010
        Bug fixes:
        • A CharacterData node’s data method now stringifies its argu-
          ment,  to avoid  tripping  up  HTML::Element  methods  like
          as_text by storing a reference in the attribute.  This also
          affects other methods,  including a  title  element’s  text
          method and a document’s title method.
        • Setting the selected attribute of an  orphaned  option  ele-
          ment  (one that is not inside  a  select  elem)  no  longer
          causes errors.
        • innerText is now listed in %HTML::DOM::Interface.
        • $element->getElementsByTagName  used to start searching  at
          the $element itself, instead of its children. Now it starts
          with the children.
        • $element->setAttribute  now  stringifies  the  value.  This
          solves the problem of getAttributeNode’s returning just the
          value instead of an Attr node,  if the value happened to be
          a reference.
        • cloneNode  with a true argument  (deep clone)  now sets the
          ownerDocument properly.
        • Setting a boolean attribute through the DOM 0 interface now
          works properly:  instead of being set to whatever value you
          pass in converted to a string, it is set to the name of the
          attribute (for true values)  or deleted  (for false values).

0.040   23 May, 2010
        Bug fix:  Calling $doc->write from an elem handler now parses
        the HTML code immediately instead of buffering it and waiting
        for the elem handler to return.  This allows aberrations like
          $doc->write("<img id='i1'>"); $doc->getElementById('i1')...
        to work.

0.039   18 April, 2010
        Bug fix:  Submitting a GET form with a data: URL  (or any URI
        object without a  query_form  method)  now just uses the  URL
        itself, discarding any data.

0.038   28 March, 2010
        Bug fix:  A run-time  require  that was causing  problems  in
        taint mode has been removed.

0.037   3 January, 2010
        New feature: getElementsByClassName

0.036   27 December, 2009
        Incompatible change:
        • A newly-created HTML::DOM  object no longer has html,  head
          and body elements.  These are not created until open, write
          or parse_file is called.
        New features:
        • New innerText method on HTML elements
        • css_url_fetcher  used to  have  no  return  value.  Now  it
          returns a previously assigned callback function.
        • css_url_fetcher no longer clobbers an existing link element
          handler,  because it now uses  a  new,  separate  mechanism.
        Bug fixes:
        • $elem->innerHTML  now encodes HTML  character  entities  in
          text nodes that are the element’s direct children.
        • Modifying the  href  attribute of a link element whose  rel
          attribute is set to stylesheet now resets the  style  sheet.
        • The target and  currentTarget  methods of events now return
          empty lists  (instead of  lists  containing  undef)  before
          event dispatch.
        • If an  elem_handler  removes the root element from the docu-
          ment,  it no longer causes an  error  when  HTML::DOM  next
          tries to call an elem_handler.
        • parse_file no longer dies if called after  ‘close’  or when
          the root element has been removed.
        • The close,  innerHTML and elem_handler  methods of the docu-
          ment no longer die if the root  element  has  been  removed.
        • HTML::DOM’s innerHTML (as opposed to Element’s) now returns
          an empty string when the document has no children.  It used
          to return undef.
        Other changes:
        • HTML::DOM::Interface no longer lists HTML::DOM::TreeBuilder,
          as that internal-only class has gone.

0.035   1 November, 2009
        Bug fixes:
        • Silly me.  I fixed a bug in getElementById  in the previous
          release,  and in doing so caused  a  more  serious  bug.  I
          blinded  getElementById  to sub-elements of forms.  This is
          now  fixed.
        • The note below under 0.033 about base being ‘better at deal-
          ing with invalid documents’ is wrong.  That change actually
          made it worse.  Sometimes it would work,  and sometimes not,
          depending on previous regular expression matches.  (This is
          now fixed, of course.)

0.034   25 October, 2009
        Incompatible change:
        • Node insertion methods no longer produce WRONG_DOCUMENT_ERR
          errors.  It turns out that every web browser  (except IE 6)
          completely disregards the DOM spec in this regard.
        • When attr_event_listener was renamed event_handler, the old
          name was kept for  temporary  backward  compatibility.  The
          internals still used the old name, so subclasses overriding
          it would have to use it. Now the internals use the new name,
          so subclasses have to change.
        Bug fixes:  
        • HTML::DOM’s title  method no longer dies when the title ele-
          ment does not exist.
        • Event dispatch no longer leaves junk in $@.
        • Whitespace is now preserved when a  <pre>  element’s  inner-
          HTML is assigned to.  We fixed this by preserving all white-
          space everywhere,  which is what  web  browsers  do  anyway.
        • The event handler wrapper that get_event_listeners  returns
          no longer closes over the event target,  but gets  it  from
          the event object passed as its first argument.  This allows
          the listener to be used on another object  (e.g.,  if a sub-
          class overrides  get_event_listeners  to retrieve listeners
          from another object).
        • getElementById now works when the element’s ID attribute is
          set to a reference.

0.033   18 October, 2009
        New features:
        • HTML::DOM’s base  method now falls back to the HTTP headers
          (of the response object)  if the document  lacks  a  <base>
          elem.  It is also better at dealing with invalid  documents
          that include a <base target> before a <base href>.
        • Coderefs registered via elem_handler are now triggered when
          a node is inserted  into  the  document,  as  well  as  dur-
          ing parsing.
        Bug fix:
        • HTML::DOM::Interface now includes the contentWindow  method
          in the HTMLFrameElement  and  HTMLIFrameElement  interfaces.

0.032   9 October, 2009
        Incompatible change:
        • An  event_attr_handler  that provides a  subroutine  ending
          with a line like
            defined $ret and !$ret and $event->preventDefault
          will now end  up  triggering  preventDefault  in  the  case
          of an undefined  $ret.  This is the  result  of  the  first
          new feature:
        New features:
        • The event  dispatch  mechanism  now  distinguishes  between
          event listeners (added via addEventListener)  and event han-
          dlers (those assigned via attr_event_listener or one of the
          on*  methods),  calling preventDefault as appropriate based
          on the latter’s return value. To achieve this, we have made
          get_event_listeners  return not the  event  handler  itself,
          but a closure that calls the event handler and  checks  its
          return value.
        • The closure returned  by  get_event_listeners  also  checks
          whether the handler is an object with  a  call_with  method.
          If it is,  it calls it with the current event target as its
          first argument and the event object as the second.
        • insertAdjacentHTML and insertAdjacentElement
        Bug fixes:
        • HTML::DOM::Interface now exports the UTF16 constant.
        • innerHTML no longer omits </p> before <table>. (In fact, it
          simply turns off TreeBuilder’s tag-omitting feature,  which
          has bugs in it.)
        • as_text and as_HTML used not to pass arguments to the super-
          class’s methods.
        Other changes:
        • attr_event_listener has been renamed to event_handler  (the
          original name was a big mistake).  The old  name  is  still
          available but will be removed in a future release.
        • Makefile.PL  now lists  Date::Format,  which  I  forgot  to
          include in 0.030 (lastModified uses it).  Thanks to Andreas
          König for reporting this (RT #50273).

0.031   4 October, 2009
        Bug fix:  To conform to what ‘real’ web browsers do, a form’s
        elements collection no longer includes image buttons.  Thanks
        to Steven Nikkel for reporting this problem.

0.030   17 September, 2009
        New features:
        • EventTarget’s attr_event_listener method
        • The  body  element now delegates attribute  event  handlers
          to the  ownerDocument’s  ‘event_parent’  if  there  is  one.
          (This makes the ‘onload’  in  <body onload='...'>  apply to
          the window.)
        • The  init  method of event objects now  accepts  target  as
          an argument.
        • The same  init  method now returns the event object  itself.
        • The write and writeln methods now accept multiple arguments.
        • lastModified
        • Form’s encoding method
        • A and area elements now have hash,  host,  etc.  properties
          that refer to parts of the linked URL.
        Bug fixes:
        • HTML::DOM’s title  method no longer dies when the title ele-
          ment is empty.
        • EventTarget methods beginning with  ‘on’  (like  ‘onclick’)
          used to return a  hash  ref  of  all  non-capture  handlers
          assigned to the named event.  (Assignment  always  worked.)
        • Invalid method calls on any class inheriting from  EventTar-
          get used to have a scrambled error message.
        • HTML::DOM::Interface now includes getComputedStyle.

0.029   28 August, 2009
        Bug fixes:
        • HTML::DOM::Element::Form’s elements method,  when called in
          list context,  was ignoring the magic associations added in
          the previous version. Thanks to Terry Simons once more, for
          the bug report.

0.028   25 August, 2009
        New features:
        • Form elements are now associated during  parsing  with  the
          last-opened form element,  even if it has  been  implicitly
          closed.  This is to deal with badly-formed  documents  that
          contain aberrations like  <td><form><td><input>.  Thanks to
          Terry Simons for bringing this to my attention.

0.027   16 August, 2009
        • Updated a test to match a change in CSS::DOM with regard to
          !important user agent rules.  CSS::DOM 0.07 is now required.
        New features:
        • createEvent now accepts  HTMLEvents  as an event type. trig-
          ger_event now has the defaults for all the HTML event types
          listed in the DOM Level 2 Events specification.  (These may
          need to be changed later to conform to HTML 5,  which  more
          closely resembles reality.)
        Bug fixes:
        • HTML collections and  node  lists  created  by  getElements-
          By(Tag)Name  used not to be updated when the  write  method
          was  called  or  when  an  element  handler  was  triggered.

0.026   27 July, 2009
        Incompatible change:
        • The  sheet  method of link elements used to create an empty
          CSS::DOM object and would not allow assignment, which behav-
          iour  became  utterly  useless  with  the  API  changes  of
          CSS::DOM 0.03.  This behaviour has been removed.  sheet  is
          now a simple accessor  (except that it only works when  the
         ‘rel’ attribute contains  ‘stylesheet’).
        New features:
        • css_url_fetcher:  Provide  a  URL-fetching  subroutine  and
          external style  sheets  will  be  parsed  and  turned  into
          CSS::DOM objects.
        • Comments are now included in the HTML tree, as requested by
          an anonymous individual who filed RT #48168.

0.025   24 June, 2009
        Bug fixes:
        • HTML::DOM::Interface  now  maps  HTML::DOM::TreeBuilder  to
          HTMLHtmlElement,  instead of  HTMLElement.  (This class  is
          used for the <html>  element when the tree is being built.)
        • innerHTML  no longer dies when serialising a text node that
          was created from an object with string overloading.

0.024   8 April, 2009
        Forgot to increase the  CSS::DOM  required version to 0.06 in
        the previous release.

0.023   8 April, 2009
        New features:
        • getComputedStyle
        Bug fixes:
        • A form element’s value method is now capable of  unchecking
          a checkbox.
        • If the document was rewritten  (via close and write)  after
          styleSheets had already been accessed,  a subsequent access
          would return the first list of style sheets  again.
        • form-charset.t  no  longer  leaves  temporary  files  lying
          around (RT #41470).

0.022   17 October, 2008
        A few memory leak fixes:
        • Whitespace after the </body> tag would cause the close meth-
          od to create a circularity.
        • Accessing an attribute node’s text node  (i.e.,  autovivify-
          ing it) would create a circularity.
        • Deep clones were indestructible.
        • replaceChild would create a circular reference.

0.021   25 September, 2008
        New feature:
        • (I)frame elements now have a contentWindow attribute, which
          you  can  set,  although  it  is  listed  as  read-only  in
          H:D:Interface. contentDocument now uses this.
        Bug fixes:
        • Fixed some tests that failed on Windoze because they relied
          on an  LWP  bug that was fixed in 5.810  (filenames in file
          upload fields not being escaped)

0.020   20 September, 2008
        Incompatible changes:
        • HTML::DOM’s defaultView attribute no longer has anything
          assigned to it by default.
        • The defaultView attribute now holds a weak reference to the
          view, and the view holds a strong reference to the document.
        New features:
        • HTML::DOM now has an event_parent method, with which you
          can add an object to the top of the event dispatch chain.
        • HTML::DOM::NodeList::Magic’s constructor is now officially
          public.  (For those of you who read  the  source,  it  now
          accepts a second arg; which it didn’t before). Use this if
          you need to create a custom ‘live’ node list.
        • HTML::DOM now has an  event_listeners_enabled  method that
          allows event handlers to be disabled.  (Default event  han-
          dlers still run.) EventTarget uses this method, so any sub-
          class can implement it to achieve the same effect.
        Bug fixes:
        • HTML::DOM’s defaultView method and  HTML::DOM::View’s docu-
          ment method now return empty list (as opposed to lists con-
          taining undef)  if called in list context when there is no
          object assigned.
        • When there  is  no  view  object,  HTML::DOM::Node’s
          trigger_event method no longer mangles the arguments
          passed to the superclass (preventing default actions
          and causing the event’s properties  other  than  the
          event type not to be set).
        • innerHTML no longer dies when there are event attributes in
          the HTML code fed to it.

0.019   7 September, 2008
        New feature:
        • EventTarget is now listed as a separate interface in
        Whether you call this a bug fix or a new feature is up to you:
        • The DOM Level 0 methods for accessing HTML  attributes  now
          trigger DOMAttrModified events. (So mutation events are fin-
          ished;  the implementation object also claims to support it
          now.)  By fixing this I accidentally uncovered another bug:
        Two bug fixes:
        • Event attribute methods ($elem->onclick, etc.) are now list-
          ed in %HTML::DOM::Interface.
        • Unspecified attribute nodes  (attribute nodes corresponding
          to HTML attributes that are not specified in  the  document
          but have default values in the DTD) are not supposed to be--
          and are no longer-- created if  the  attribute  *is*  speci-
          fied but set to the empty  string.  This  problem  affected
          getAttribute, but not getAttributeNode.

0.018   4 September, 2008
        New features/miscellaneous changes:
        • HTML::DOM’s defaultView attribute is now writable.
        • HTML::DOM::View is now an inside-out class, so anything can
          subclass it; and its ‘document’ attribute is writable.  The
          constructor has been removed.
        • The location method has been added to HTML::DOM.
        Bug fixes:
        • innerHTML is now listed in %HTML::DOM::Interface.
        • An element’s innerHTML now serialises text nodes that are
          direct children of the element properly.
        • When the removeAttribute method is called and the attribute
          has previously been accessed as a node,  the  event  object
          corresponding to the DOMAttrModified  event that occurs now
          has its  attrName  set  to  the  attribute's  name,  rather
          than undef,  and its  attrChange  set  to  REMOVAL,  rather
          than ADDITION.

0.017   2 September, 2008
        New features/miscellaneous changes:
        • innerHTML is now writable.
        • Mutation events are  now  triggered  automatic-
          ally by  HTML::DOM::Element’s various get/set/
          removeAttribute(node) methods. It does not yet
          happen with the shorthand methods (those named
          after  the  attributes;  aka  the  DOM Level 0
        • Modification of the contents of a text or comment node now
          triggers a DOMCharacterDataModified event.
        • The EventTarget interface is now a separate module from
          Node,  so that anything can inherit from it.
        • Event attribute methods ($elem->onclick, etc.) have
          been added.
        • An Attr node can now be used as an EventTarget.
        • Assigning a value to an Attr node now modifies its child
          text node in place instead of replacing it.
        Bug fixes:
        • Modifying a style object (as returned by an element’s style
          method)  now immediately causes the corresponding attribute
          to be updated.  (It used only to be  updated  on  calls  to
        • Modifying an attribute node for the style attribute or its
          child text node now updates the corresponding style object.
        • The child text node of an attr node now has its parentNode
          set correctly.
        • HTML::DOM::Element’s removeAttribute and setAttributeNode
          methods no longer die when the attribute is set to some ran-
          dom object (e.g., $elem->setAttribute(foo => bless [])).
        • An element’s innerHTML method no longer includes the tags of
          the element itself (oops!);  nor does it have a  line  break
          tacked on the end.
        • A node’s push_content method no longer dies when called with
          no arguments while the node is empty.
        • Direct changes to an event attribute node’s text node  now
          reset the event handler,  instead of leaving it as  it  is.
          (For those who don’t understand  my  obtuse  jargon,  this
          applies to $elem->getAttributeNode('onclick')->lastChild->

0.016   28 August, 2008
        New features/miscellaneous changes:
        • The UIEvent, MouseEvent and MutationEvent interfaces have
          been added. (Mutation events for attributes and character
          data  modified  are  not  yet  automatically  triggered.)
        • Events now have an init method that works like initEvent,
          but takes named args.
        • trigger_event has been extended to allow named args specify-
          ing the event type and which default  action  to  take.  It
          also chooses the right event class and reasonable  defaults
          for the event name passed to it.
        • default_event_handler_for’s submit_button and reset_button
          event types have been removed,  and default default  event
          handlers for specific event types (i.e., default event han-
          dlers already in place by default)  have been replaced  by
          another mechanism (not part of the public API).
        • The innerHTML has been added to HTML::DOM and
          HTML::DOM::Element. It is currently read-only.
        • Triggering a form’s reset event  (or calling its reset
          method, which in turn triggers the event) now actually
          resets the form.
        Bug fixes:
        • A  table  cell  following  an  unclosed  table  cell
          (<td><TD>) no longer mangles the tree.  This was bro-
          ken in  0.011 which turned that into the nonsensical
          <tr><td></td><tr><td></td></tr></tr>. (This may have
          affected other elements, as well.)
        • HTMLOptionsCollection is now listed as acting as a hash and
          as an array in HTML::DOM::Interface.
        • The trigger_event method now works on the document with a
          string arg, instead of dying.

0.015   20 August, 2008
        • Removed every last reference to CSS::DOM::StyleDecl, which
          was renamed in 0.03.

0.014   20 August, 2008
        • Fixed the Makefile.PL so it installs properly and doesn’t
          downgrade CSS::DOM after installing 0.03.
        • HTML::DOM->createEvent now dies if the arg passed to it is
          an unsupported event category.

0.013   19 August, 2008
        New features:
        • HTML::DOM::Interface now indicates which members have UTF-16
        • Changes to conform to the Level-2 HTML DOM module:
          • HTML::DOM::Element::Input’s ‘type’ method is no longer
          • HTML::DOM::Element::Object now has a contentDocument,
            which returns nothing for now.
          • HTML::DOM::Element::Table’s caption, tHead and tFoot meth-
            ods now die when passed something other an element of the
            right type.
          • The  insertRow  methods of  HTML::DOM::Element::Table  and
            ::TableSection and the insertCell method of ::TableRow now
            die if the index is out of range.
          • Frame and iframe elements now each have a contentDocument
            method, which, for now, returns an empty HTML::DOM object.
            Later I need to add support for  callback  routines  that
            create the object.
        • HTML::DOM::Exception now has a ‘code’ method.
        • The brand new shiny  default_event_handler_for  method has
          been added. It makes it less cumbersome to provide default
          behaviours for different event types.
        • All HTML elements now have a click method--something from
          HTML 5 (I seem to be getting ahead of myself).
        Bug fixes:
        • removeChild now works on the document tree.
        • Modification of an Attr object for an event attribute now
          modifies the event handler itself.
        • HTML::DOM::Interface no longer lists the index property of
          the HTMLOptionsElement interface as read-only.
        • HTML::DOM::Table’s and ::TableSection’s insertRow methods
          and ::TableRow’s insertCell method now insert the new row
          or cell into the right place when called  with  an  index
          other than 0 or -1.
        • HTML::DOM::Implementation->hasFeature now returns true for
          Core 1.0, and not just Core 2.0. (Oops!)

0.012   29 July, 2008
        Incompatible changes:
        • The parse_file method now uses HTML::Encoding to detect the
          encoding of the file,  if given a file  name,  and  if  the
          encoding has not been set with the new ‘charset’  method or
          the constructor’s new ‘charset’  option.  It used to assume
          ISO  Latin  1.  It  still  treats  file  handles  the  same
          way, though;  that is, it assumes the file handle is produc-
          ing Unicode text (you have to ‘binmode’ to set the encoding
          if that’s not the case).
        New features:
        • The constructor now accepts a ‘charset’ option which is used
          by  parse_file  and  by  the  make_request  method  of  form
          form elements.
        • A ‘charset’ method has been added to HTML::DOM,  which
          returns the encoding passed to the constructor or that
          parse_file  used.  You can  also  use  it  to  set  it.
        • parse_file’s return value is now useful: true upon success;
          false upon failure (to open the file)
        • Upward references in the object tree are now weak
        • I’ve started work on Level-2 HTML features. So far,
          • HTML::DOM::Interface lists HTMLOptionsCollection as a sepa-
            rate interface from HTMLCollection and
          • HTML::DOM::Collection::Options now throws an error if
            length is set.
        • A callback routine passed to event_attr_handler now receives
          the offset within the source of the attribute’s value as the
          fourth argument.
        • Attribute methods of elements now support  implicit  attri-
          butes (those with default values in the DTD).
        Bug fixes:
        • Suppressed an erroneous warning triggered in bleadperl (5.11
          to be) by HTML::DOM::Element::Form’s inputs method.
        • HTML::DOM’s close method had an erroneous eval, which would
          catch errors that should have been propagated,  in addition
          to the specific error it was intended to catch.
        • HTML::DOM::Collection::Option’s name and form_name_value
          methods no longer die when there are no options.
        • HTML::DOM::Element::Option’s text method now supports multi-
          ple child nodes,  and no longer assumes that there is  just
          one text node within the option.
        • In cases where the HTML DTD specifies a list of alternates
          for an attribute’s value,  the corresponding DOM 0 methods
          return a normalised (lc) value.
        • HTML::DOM::Element’s removeAttributeNode method used to emit
          warnings when the node did not belong to the element and the
          element either had no attribute with the node’s name  or  an
          attribute that had never been accessed as a node.

0.011   19 May, 2008
        New features:
        • Link and style elements now have their ‘sheet’ attribute (in
          other words, the LinkStyle interface has been added).
        • HTML::DOM now has a C<styleSheets> method (the DocumentStyle
          interface has been implemented).
        One bug fix:
        • The so-called  ‘content_offset’  bug (RT  #34404) has been
          fixed.  It actually had nothing to do with  content_offset
          (which merely exposed the bug), but text after the </html>
          tag that was inserted in the  document,  rather  than  the
          HTML element.

0.010   23 December, 2007
        New features:
        • HTML::DOM::Node’s trigger_event method now returns nothing.
          (It used to return the return value of the  default  event
          handler.)  As  a  side  effect,  this  fixes  a  few  bugs.
        • The classes for HTML tables and frames have been added.
        • HTML::DOM::Element now has a content_offset method.
        • HTML::DOM::Element::Form now has its reset method.
        • The DOM Level-2 core interfaces are now supported.
        • I’ve started work on CSS features. So far, elements have a
         ‘style’ method.
        • You can now access forms by using an HTML::DOM object as
          a hash ref.
        • A checkbox’s click method now toggles the checkbox’s state.
        Fixed bugs:
        • HTML::DOM::Element::Form’s submit method now
          returns nothing.
        • HTML::DOM::Element::Select’s blur and focus methods now
          return nothing.
        • HTML::DOM::Element::Button’s type method now works.
        • HTML::DOM::Element::Label’s htmlFor method now works.
        • Heading elements (h1..h6) are now blessed into the
          HTML::DOM::Element::Heading class,  so  the  align
          method works.
        • HTML::DOM::Element::Object’s useMap method now works.
        • HTML::DOM::Element::Applet’s codeBase method now works.
        • tbody elements are now inserted into the tree if a <tr>
          occurs directly within a <table>.
        • HTML::DOM::Interface now includes  HTML::DOM::TreeBuilder,
          which is used for the document’s <html> element while the
          HTML code is being parsed.
        • The as_text and as_HTML methods now work on the document’s
          <html> element during parsing.
        • The <html> element’s ‘version’ method now works dur-
          ing parsing.
        • getElementById and getElementsByTagName now stringify the
          name or ID  (in order to make  HTML::Element’s  look_down
          method happy).  These both used to return false negatives
          when passed objects with string overloading.
        • HTML::DOM::Element’s normalize method (which has been moved
          to HTML::DOM::Node) now actually does something.
        • HTML::DOM::Node’s cloneNode method used not  to  erase  the
          clone’s parentNode attribute unless the  cloning  was  deep.
          Nor did it erase the list of child nodes in a shallow clone,
          so those nodes would have multiple parents.
        • cloneNode now works with HTML elements (the attributes are
          now cloned).
        • HTML::DOM::CharacterData’s deleteData16  method  now  works
          properly, instead of getting offsets wrong and then convert-
          ing all the text into UTF-16.
        • HTML::DOM::Collection’s namedItem method used to return
          undef for form, img and map elements.
        • HTML::DOM::Collection::Elements’s namedItem method used to
          die if there were multiple form fields with the same  name.
        • HTML::DOM’s open method no longer clobbers element handlers.

0.009   23 November, 2007
        Changes/new features:
        *  You can do something with errors produced by event handlers
           by passing a coderef to the new error_handler method.  That
           coderef will be called for each error. (Before, such errors
           were ignored.)
        *  HTML::DOM::Interface has been modified, such that
          'Document' is no longer a separate interface--since there is
           no corresponding HTML::DOM module--,  but all  its  members
           are  now under HTMLDocument,  which inherits directly  from
           Node. Likewise, 'Element' has been merged into HTMLElement.
        *  HTML::DOM::Element::Select now has 'add' and
          'remove' methods.
        * 'Select' elements can now be used as array refs, so you can
           write $select->[0] instead of $select->options->[0].
        *  You can now assign undef to such an array element to delete
           it,  so  '$select->[0] = undef'  does  the  same  thing  as
          'shift @$select'. 'delete $select->[0]' also works.
        Bug fixes:
        * $form->action now works when the document has no base url
          (used to die)
        * HTML::DOM::Element::Select's type method now works.
        * HTML::DOM::Element::Select's  selectedIndex  method  and
          HTML::DOM::Element::Option's selected method should work
          reliably now.
        * HTML::DOM::Collection::Options is now listed by
        * HTML::DOM::Element::Input's click method now returns an
          empty list.
        * HTML::DOM's event_attr_handler is now actually useful. (It
          used to be ignored most of the time.)

0.008   5 October, 2007
        * New HTML::DOM::Interface module
        * Added type and value methods to HTML::DOM::Element::Button
        * Added the charset, coords and tabIndex methods to 
        * HTML::DOM's createElement method now throws an 

0.007   29 September, 2007
        Two bug fixes:
        * The URL method no longer warns if there is no URL.
        * The previous release broke parsing of forms. (The rest of
          the document would be within the form element.) Now it
          should work.

0.006   27 September, 2007
      - The following interfaces have been implemented:
      - Some methods have also been added for compatibility with 
      - The 'open' method no longer stops the ownerDocument method
        from working properly.
      - Furthermore,  'open' is no longer anywhere near as powerful as
        it was; it used to obliterate the coderefs that were passed to
        event_attr_handler and default_event_handler.
      - &HTML::DOM::base has been added.
      - The parse and eof methods have been deleted, since write and
        close do the same thing.

0.005   26 August, 2007
        The HTMLCollection interface has now been implemented, and so
        have the attribute  methods  of  the  HTMLDocument  interface
        (Level 1). The HTMLHtmlElement, HTMLHeadElement,
        HTMLLinkElement, HTMLTitleElement, HTMLMetaElement,
        HTMLBaseElement, HTMLIsIndexElement, HTMLStyleElement and
        HTMLBodyElement interfaces (again, Level 1) have also been

0.004   22 July, 2007
        Fixed infinite recursion triggered by element handlers calling
        $dom_tree->write($html)  when  $html contains elements handled
        by the same handler. E.g.,

0.003   15 July, 2007
      - HTML::DOM::Text now has its nodeValue method, which I forgot
        about before. (Actually, I moved HTML::DOM::Comment's
        nodeValue to HTML::DOM::CharacterData.)
      - as_text and as_HTML have been overridden and now work.

0.002   9 July, 2007
        The basic mechanism for event handling has been implemented.
        The various different flavours of event objects still  need
        to be added.

0.001   27 June, 2007
        The first version. So far, most of the level-1 core DOM is
        implemented,  and a couple of HTML-specific  methods,  but
        that's all.