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 )