ASP4x-Linker
view release on metacpan or search on metacpan
lib/ASP4x/Linker/Widget.pm view on Meta::CPAN
package ASP4x::Linker::Widget;
use strict;
use warnings 'all';
use Carp 'confess';
sub new
{
my ($class, %args) = @_;
foreach(qw( name ))
{
confess "Required param '$_' was not provided"
unless $args{$_};
}# end foreach()
my $context = ASP4::HTTPContext->current;
my $form = $context->request->Form;
$args{attrs} ||= [ ];
$args{triggers} ||= { };
$args{vars} = {
map { $_ => $form->{"$args{name}.$_"} }
@{$args{attrs}}
};
$args{original_vars} = {
map { $_ => $form->{"$args{name}.$_"} }
@{$args{attrs}}
};
return bless \%args, $class;
}# end new()
sub attrs { sort @{ shift->{attrs} } }
sub name { shift->{name} }
sub set
{
my ($s, %args) = @_;
while( my ($attr, $val) = each %args )
{
confess "widget '$s->{name}' does not have any attribute named '$attr'"
unless exists($s->{vars}->{$attr});
$s->{vars}->{$attr} = $val;
if( my $triggers = $s->{triggers}->{$attr} )
{
map { $_->( $s ) } @$triggers
}# end if()
}# end while()
# $val;
$s;
}# end set()
sub get
{
my ($s, $key) = @_;
exists( $s->{vars}->{ $key } ) or return;
$s->{vars}->{$key};
}# end get()
sub vars
{
my $s = shift;
return $s->{vars};
}# end filters()
sub reset
{
my $s = shift;
%{ $s->{vars} } = %{ $s->{original_vars} };
}# end reset()
sub linker
{
my $s = shift;
@_ ? $s->{linker} = shift : $s->{linker};
}# end linker()
sub uri { shift->linker->uri }
( run in 1.788 second using v1.01-cache-2.11-cpan-39bf76dae61 )