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 $