POE-XUL
view release on metacpan or search on metacpan
lib/POE/XUL/Node.pm view on Meta::CPAN
my $id;
( $id, @params ) = $self->__find_id( @params );
$id = $self->__auto_id( $id );
$CM->before_creation( $self ) if $CM;
if( DEBUG and not $CM and $INC{'POE/XUL/ChangeManager.pm'} ) {
Carp::cluck "Building a POE::XUL::Node, but no ChangeManager avaiable";
}
while (my $param = shift @params) {
if( ref $param ) {
$self->appendChild( $param );
}
elsif( $param =~ /\s/ or 0==@params ) {
$self->defaultChild( $param );
}
elsif ($param eq 'textNode' ) {
$self->appendChild( shift @params );
}
elsif ($param =~ /^[a-z]/) {
$self->setAttribute( $param => shift @params );
}
elsif ($param =~ /^[A-Z]/) {
$self->attach($param => shift @params );
}
else {
croak "unrecognized param: [$param]"
}
}
return $self;
}
##############################################################
# Scan ->new()'s parameters, trying to pull out an ID
sub __find_id
{
my( $self, @params ) = @_;
my( $id, @out );
while (my $param = shift @params) {
if( ref $param or $param =~ /\s/ or 0==@params ) {
push @out, $param;
}
else {
if( $param eq 'id' ) {
$id = shift @params;
next;
}
push @out, $param, shift @params;
}
}
return ( $id, @out );
}
##############################################################
sub Script {
my $class = shift;
# warn "class=$class";
# warn "script=", join "\n", @_;
my $cdata = POE::XUL::CDATA->new( join "\n", @_ );
return $class->new( tag=>'script', type=>'text/javascript', $cdata );
}
##############################################################
# Boot message
sub Boot
{
my( $class, $msg ) = @_;
if( $CM ) {
$CM->Boot( $msg );
}
my $server = $POE::XUL::Application::server;
if( $server ) {
$server->Boot( $msg );
}
return;
}
##############################################################
# Send a raw command to Runner.js
sub RawCmd
{
my( $class, $cmd ) = @_;
if( $CM ) {
$CM->Prepend( $cmd );
}
return;
}
##############################################################
# Instructions to Runner.js, via ChangeManager
sub pxInstructions
{
my( $self, @inst ) = @_;
unless( $CM ) {
unless( $INC{ 'Test/More.pm' } ) {
# carp "There is no ChangeManager. Instructions ignored.";
}
return;
}
my $rv;
foreach my $inst ( @inst ) {
$rv = $CM->instruction( $inst );
}
return $rv;
}
##############################################################
## Assign an ID as soon as possible, so that the CM and State
## will see it
sub __auto_id
{
my( $self, $id ) = @_;
unless( $id ) {
$id = "PXN$ID";
$ID++;
$self->{default_id} = $id;
}
$self->{attributes}{id} = $id;
( run in 0.755 second using v1.01-cache-2.11-cpan-0d23b851a93 )