App-Widget
view release on metacpan or search on metacpan
lib/App/Widget/Select.pm view on Meta::CPAN
######################################################################
## $Id: Select.pm 12431 2009-01-13 18:29:49Z spadkins $
######################################################################
package App::Widget::Select;
$VERSION = (q$Revision: 12431 $ =~ /(\d[\d\.]*)/)[0]; # VERSION numbers generated by svn
use App::Widget::Stylizable;
@ISA = ( "App::Widget::Stylizable" );
use strict;
=head1 NAME
App::Widget::Select - Generic HTML element can be anything with proper configuration
=head1 SYNOPSIS
use App::Widget::Select;
$name = "gobutton";
$config = { };
$state = CGI->new({});
$w = App::Widget::Select->new($config,$state,"gobutton", $config, $state);
=cut
######################################################################
# CONSTANTS
######################################################################
######################################################################
# ATTRIBUTES
######################################################################
# INPUTS FROM THE ENVIRONMENT
=head1 DESCRIPTION
This class is a <select> HTML element.
=cut
######################################################################
# CONSTRUCTOR
######################################################################
# uncomment this when I need to do more than just call SUPER::_init()
sub _init {
my $self = shift;
my $context = $self->{context};
my $name = $self->{name};
my $value = $context->so_get($name);
my ($values, $labels);
if (! defined $value && $self->{init_default}) {
($values, $labels) = $self->values_labels();
if ($#$values > -1) {
$value = $values->[0];
$context->so_set($name, undef, $value);
}
}
elsif (defined $value && $value eq "EACH") {
($values, $labels) = $self->values_labels();
$value = join(",", @$values);
$context->so_set($name, undef, $value);
}
$self->SUPER::_init(@_);
}
######################################################################
# METHODS
######################################################################
######################################################################
# OUTPUT METHODS
######################################################################
sub unstyled_html {
my $self = shift;
my ($context, $name, @currvalues, $values, @values, $labels);
my ($tagname, $nullable, $size, $multiple, $tabindex, $onchange, $enablewarn, $enable_warning_widget);
$context = $self->{context};
$name = $self->{name};
$nullable = $self->get("nullable");
$size = $self->get("size");
$multiple = $self->get("multiple");
$tabindex = $self->get("tabindex");
$onchange = $self->get("submit_on_change");
$enablewarn = $self->get("enable_warning");
$enable_warning_widget = $self->get("enable_warning_widget");
($values, $labels) = $self->values_labels();
if ($nullable) {
$values = [ "", @$values ];
}
$size = (defined $size && $size ne "") ? " size='$size'" : "";
$tabindex = (defined $tabindex && $tabindex ne "") ? " tabindex='$tabindex'" : "";
$multiple = $multiple ? " multiple" : "";
$tagname = $multiple ? "$name\[]" : $name;
$onchange = $onchange ? " onchange=\"document.forms[0].submit();\"" : "";
if($enablewarn) {
$onchange = " onchange=\"javascript: var enable_warning = context.getElementByName('" . $enable_warning_widget . "'); ";
$onchange .= " enable_warning.value = 'enabled';\" ";
}
my ($value, $v, %value_exists, $value_exists, @html);
@currvalues = $self->get_values();
foreach $value (@currvalues) {
if (defined $value) {
$value_exists{$value} = 1;
$value_exists = 1;
}
}
for ($v = 0; $v <= $#$values; $v++) {
$value = $values->[$v];
my $convert_value = $self->html_escape($value);
push(@html," <option value='$convert_value'" .
($value_exists{$value} ? " selected>" : ">") .
((defined $labels->{$value}) ? $self->html_escape($labels->{$value}) : $convert_value) .
"</option>\n");
}
my $html_attribs = $self->html_attribs();
return "<select name='$tagname'${size}${multiple}${tabindex}${onchange}$html_attribs>\n" . join("",@html) . "</select>";
}
1;
( run in 0.544 second using v1.01-cache-2.11-cpan-39bf76dae61 )