package Message::DOM::HTML::HTMLElement; use strict; our $VERSION=do{my @r=(q$Revision: 1.5 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; push our @ISA, 'Message::DOM::Element'; require Message::DOM::Element; ## TODO: interface ## TODO: "reflect" definition need to be updated (both implementation and Perl binding specification) - see HTML5 for latest definition sub AUTOLOAD { my $method_name = our $AUTOLOAD; return if $method_name =~ /::DESTROY$/; my $ln; if ($ln = { ## Reflecting |DOMString| attribute 'Message::DOM::HTML::HTMLAreaElement::alt' => 'alt', 'Message::DOM::HTML::HTMLImageElement::alt' => 'alt', 'Message::DOM::HTML::HTMLElement::class_name' => 'class', 'Message::DOM::HTML::HTMLMetaElement::content' => 'content', 'Message::DOM::HTML::HTMLAreaElement::coords' => 'coords', 'Message::DOM::HTML::HTMLTimeElement::datetime' => 'datetime', 'Message::DOM::HTML::HTMLModElement::datetime' => 'datetime', 'Message::DOM::HTML::HTMLAnchorElement::hreflang' => 'hreflang', 'Message::DOM::HTML::HTMLAreaElement::hreflang' => 'hreflang', 'Message::DOM::HTML::HTMLLinkElement::hreflang' => 'hreflang', 'Message::DOM::HTML::HTMLElement::id' => 'id', 'Message::DOM::HTML::HTMLCommandElement::label' => 'label', 'Message::DOM::HTML::HTMLMenuElement::label' => 'label', 'Message::DOM::HTML::HTMLElement::lang' => 'lang', 'Message::DOM::HTML::HTMLAnchorElement::media' => 'media', 'Message::DOM::HTML::HTMLAreaElement::media' => 'media', 'Message::DOM::HTML::HTMLLinkElement::media' => 'media', 'Message::DOM::HTML::HTMLSourceElement::media' => 'media', 'Message::DOM::HTML::HTMLStyleElement::media' => 'media', 'Message::DOM::HTML::HTMLParamElement::name' => 'name', 'Message::DOM::HTML::HTMLAnchorElement::ping' => 'ping', 'Message::DOM::HTML::HTMLAreaElement::ping' => 'ping', 'Message::DOM::HTML::HTMLCommandElement::radiogroup' => 'radiogroup', 'Message::DOM::HTML::HTMLAnchorElement::rel' => 'rel', 'Message::DOM::HTML::HTMLAreaElement::rel' => 'rel', 'Message::DOM::HTML::HTMLLinkElement::rel' => 'rel', 'Message::DOM::HTML::HTMLAnchorElement::target' => 'target', 'Message::DOM::HTML::HTMLAreaElement::target' => 'target', 'Message::DOM::HTML::HTMLBaseElement::target' => 'target', 'Message::DOM::HTML::HTMLElement::title' => 'title', 'Message::DOM::HTML::HTMLAnchorElement::type' => 'type', 'Message::DOM::HTML::HTMLAreaElement::type' => 'type', 'Message::DOM::HTML::HTMLCommandElement::type' => 'type', 'Message::DOM::HTML::HTMLEmbedElement::type' => 'type', 'Message::DOM::HTML::HTMLLinkElement::type' => 'type', 'Message::DOM::HTML::HTMLObjectElement::type' => 'type', 'Message::DOM::HTML::HTMLScriptElement::type' => 'type', 'Message::DOM::HTML::HTMLSourceElement::type' => 'type', 'Message::DOM::HTML::HTMLStyleElement::type' => 'type', 'Message::DOM::HTML::HTMLImageElement::usemap' => 'usemap', 'Message::DOM::HTML::HTMLObjectElement::usemap' => 'usemap', 'Message::DOM::HTML::HTMLParamElement::value' => 'value', }->{$method_name}) { no strict 'refs'; eval qq{ sub $method_name (\$;\$) { local \$Error::Depth = \$Error::Depth + 1; if (\@_ > 1) { if (defined \$_[1]) { \$_[0]->set_attribute_ns (undef, '$ln', ''.\$_[1]); } else { ## ISSUE: Not in spec \$_[0]->set_attribute_ns (undef, '$ln', ''); } return unless defined wantarray; } ## ISSUE: If missing? return \$_[0]->get_attribute_ns (undef, '$ln'); } }; goto &{ $AUTOLOAD }; } elsif ($ln = { ## Reflecting URI attribute 'Message::DOM::HTML::HTMLAnchorElement::href' => 'href', }->{$method_name}) { no strict 'refs'; eval qq{ sub $method_name (\$;\$) { local \$Error::Depth = \$Error::Depth + 1; ## TODO: Implement the spec... if (\@_ > 1) { if (defined \$_[1]) { \$_[0]->set_attribute_ns (undef, '$ln', ''.\$_[1]); } else { \$_[0]->set_attribute_ns (undef, '$ln', ''); } return unless defined wantarray; } if (defined wantarray) { my \$uri = \$_[0]->get_attribute_ns (undef, '$ln'); if (defined \$uri) { return \$_[0]->owner_document->implementation->create_uri_reference (\$uri)->get_absolute_reference (\$_[0]->base_uri) ->uri_reference; ## TODO: If base_uri is undef... } else { return undef; } } } }; goto &{ $AUTOLOAD }; } elsif ($ln = { ## Reflecting boolean attribute 'Message::DOM::HTML::HTMLScriptElement::async' => 'async', 'Message::DOM::HTML::HTMLMenuElement::autosubmit' => 'autosubmit', 'Message::DOM::HTML::HTMLCommandElement::checked' => 'checked', 'Message::DOM::HTML::HTMLMediaElement::controls' => 'controls', 'Message::DOM::HTML::HTMLCommandElement::default' => 'default', 'Message::DOM::HTML::HTMLScriptElement::defer' => 'defer', 'Message::DOM::HTML::HTMLCommandElement::disabled' => 'disabled', 'Message::DOM::HTML::HTMLDataGridElement::disabled' => 'disabled', 'Message::DOM::HTML::HTMLCommandElement::hidden' => 'hidden', 'Message::DOM::HTML::HTMLElement::irrelevant' => 'irrelevant', 'Message::DOM::HTML::HTMLImageElement::ismap' => 'ismap', 'Message::DOM::HTML::HTMLDataGridElement::multiple' => 'multiple', 'Message::DOM::HTML::HTMLDetailsElement::open' => 'open', 'Message::DOM::HTML::HTMLStyleElement::scoped' => 'scoped', }->{$method_name}) { no strict 'refs'; eval qq{ sub $method_name (\$;\$) { local \$Error::Depth = \$Error::Depth + 1; if (\@_ > 1) { if (\$_[1]) { \$_[0]->set_attribute_ns (undef, '$ln', '$ln'); } else { \$_[0]->remove_attribute_ns (undef, '$ln'); } return unless defined wantarray; } return \$_[0]->has_attribute_ns (undef, '$ln'); } }; goto &{ $AUTOLOAD }; } else { require Carp; Carp::croak (qq); } } # AUTOLOAD ## TODO: class_list sub class_name ($;$); ## TODO: dir sub id ($;$); ## NOTE: inner_html is part of |Message::DOM::Element|. sub lang ($;$); ## TODO: tab_index sub title ($;$); ## TODO: Other DOM5 HTML members package Message::DOM::HTML::HTMLAnchorElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: href sub hreflang ($;$); sub media ($;$); sub ping ($;$); sub rel ($;$); ## TODO: rel_list sub target ($;$); sub type ($;$); ## TODO: Command package Message::DOM::HTML::HTMLAreaElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub alt ($;$); sub coords ($;$); ## TODO: href sub hreflang ($;$); sub media ($;$); sub ping ($;$); sub rel ($;$); ## TODO: rel_list, shape sub target ($;$); sub type ($;$); package Message::DOM::HTML::HTMLAudioElement; push our @ISA, 'Message::DOM::HTML::HTMLMediaElement'; package Message::DOM::HTML::HTMLBaseElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub target ($;$); ## TODO: href package Message::DOM::HTML::HTMLBodyElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: DOM2 package Message::DOM::HTML::HTMLCanvasElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLCommandElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub checked ($;$); sub default ($;$); sub disabled ($;$); sub hidden ($;$); ## TODO: icon sub label ($;$); sub radiogroup ($;$); sub type ($;$); ## NOTE: This is not an enumerated attribute. ## TODO: Command package Message::DOM::HTML::HTMLDataGridElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO sub disabled ($;$); sub multiple ($;$); package Message::DOM::HTML::HTMLDetailsElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub open ($;$); package Message::DOM::HTML::HTMLEmbedElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: height, src sub type ($;$); ## TODO: width package Message::DOM::HTML::HTMLEventSourceElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: src package Message::DOM::HTML::HTMLFontElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLHeadElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: DOM2 package Message::DOM::HTML::HTMLHtmlElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: DOM2 package Message::DOM::HTML::HTMLIFrameElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: src, EmbeddingElement package Message::DOM::HTML::HTMLImageElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub alt ($;$); ## TODO: complete sub ismap ($;$); ## TODO: height, src sub usemap ($;$); ## TODO: width package Message::DOM::HTML::HTMLLIElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: value package Message::DOM::HTML::HTMLLinkElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: disabled, href sub hreflang ($;$); sub media ($;$); sub rel ($;$); ## TODO: rel_list sub type ($;$); ## TODO: LinkStyle package Message::DOM::HTML::HTMLMapElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLMediaElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO... sub controls ($;$); package Message::DOM::HTML::HTMLMenuElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub autosubmit ($;$); sub label ($;$); ## TODO: type package Message::DOM::HTML::HTMLMetaElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub content ($;$); ## TODO: name, http_equiv package Message::DOM::HTML::HTMLMeterElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: value, min, max, low, high, optimum package Message::DOM::HTML::HTMLModElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: cite sub datetime ($;$); package Message::DOM::HTML::HTMLObjectElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: data, height sub type ($;$); sub usemap ($;$); ## TODO: width, EmbeddingElement package Message::DOM::HTML::HTMLOListElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: start package Message::DOM::HTML::HTMLParamElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub name ($;$); sub value ($;$); package Message::DOM::HTML::HTMLProgressElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: value, max, position package Message::DOM::HTML::HTMLQuoteElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: cite package Message::DOM::HTML::HTMLScriptElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub async ($;$); sub defer ($;$); ## TODO: src, text sub type ($;$); package Message::DOM::HTML::HTMLSourceElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; sub media ($;$); ## TODO: src sub type ($;$); package Message::DOM::HTML::HTMLStyleElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: disabled sub media ($;$); sub scoped ($;$); sub type ($;$); package Message::DOM::HTML::HTMLTableElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLTableCellElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLTableColElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: span package Message::DOM::HTML::HTMLTableHeaderCellElement; push our @ISA, 'Message::DOM::HTML::HTMLTableCellElement'; ## TODO package Message::DOM::HTML::HTMLTableRowElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLTableSectionElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO package Message::DOM::HTML::HTMLTimeElement; push our @ISA, 'Message::DOM::HTML::HTMLElement'; ## TODO: date sub datetime ($;$); ## TODO: time, timezone package Message::DOM::HTML::HTMLVideoElement; push our @ISA, 'Message::DOM::HTML::HTMLMediaElement'; ## TODO: video_width, video_height =head1 LICENSE Copyright 2007 Wakaba This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; ## $Date: 2008/05/25 08:54:15 $