PApp
view release on metacpan or search on metacpan
PApp/ECMAScript.pm view on Meta::CPAN
return document.body.scrollHeight ? document.body.scrollHeight : window.innerHeight;
}");
"papp_ih()";
}
sub window_width($) {
$_[0]->need_headercode("
function papp_iw() {
return document.body.scrollWidth ? document.body.scrollWidth : window.innerWidth;
}");
"papp_iw()";
}
package PApp::ECMAScript::Layer;
=back
=head2 The PApp::ECMAScript::Layer Class
This class manages floating cxx objects (i.e. objects with style invisible
that can be shown, hidden, moved etc... using javascript).
=cut
use PApp::HTML qw(tag);
my $papp_layer = "papplayer000";
=over
=item $layer = new PApp::ECMAScript::Layer arg => val, ...
Create a new layer object (does not output anything).
js => the javascript object to use (default $PApp::ECMAScript::js)
id => the name (html id), default autogenerated
content => the content of the layer/div element
element => the element used for the layer
=cut
sub new($;@) {
my $class = shift;
bless {
js => $PApp::ECMAScript::js,
id => ++$papp_layer,
@_,
}, $class;
}
=item $layer->id([newid])
Return the current object id (optionally setting it).
=item $layer->content([newcontent])
Return the current object content (optionally setting it).
=cut
sub id($;$) {
$_[0]->{id} = $_[1] if $#_;
$_[0]->{id};
}
sub content($;$) {
$_[0]->{content} = $_[1] if $#_;
$_[0]->{content};
}
=item $layer->code
Return the javascript code used to create the (initially hidden)
layer. The best place for this is the top of the document, just below the
BODY tag, but that's not a requirement for working browsers ;)
Please note that all javascript code returned is not quoted, which is
not a problem when outputting it directly since browsers actually EXPECT
misquoted input, but it is a problem when you output strict html (xml)
or want to feed this into an XSLT stylesheet, in which case you need to
C<escape_html()> the code first and use C<disable-output-escaping> in your
stylesheet to deliberatly create broken HTML on output.
=cut
sub code {
my $self = shift;
"if (".$self->{js}->can_css.") { document.write (".PApp::ECMAScript::escape_string_sq(
(
tag "style", {
type => "text/css",
},
"#$self->{id} { position:absolute;left:0px;top:0px;visibility:hidden;z-index:20 }"
).(
tag $self->{element} || "div", {
id => $self->{id},
},
delete $self->{content}
)
).") }";
}
=item $layer->style_object
Return an expression that evaluates to the style object used by the code.
=cut
sub style_object {
my $self = shift;
$self->{js}->get_style_object("'$self->{id}'");
}
=item $layer->showxy($x,$y)
Return code to display the layer object at position ($x,$y) (which should
be valid javascript expressions).
=item $layer->show_relmouse($x,$y)
Same as C<howxy>, but use the current mouse position as origin.
( run in 0.836 second using v1.01-cache-2.11-cpan-524268b4103 )