multiple —
Interchange 5.9.0:
Source: code/Widget/multiple.widget
Lines: 14
# Copyright 2005-2007 Interchange Development Group and others # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. See the LICENSE file for details. # # $Id: multiple.widget,v 1.4 2007-11-14 04:50:19 pajamian Exp $ CodeDef multiple Widget 1 CodeDef multiple Description Select multiple CodeDef multiple Help Dropdown list with all options shown CodeDef multiple Multiple 1 CodeDef multiple MapRoutine Vend::Form::dropdown
Source: lib/Vend/Form.pm
Lines: 863
sub dropdown { my($opt, $opts) = @_; #::logDebug("called select opt=" . ::uneval($opt) . "\nopts=" . ::uneval($opts)); $opt->{multiple} = 1 if $opt->{type} eq 'multiple'; $opts ||= []; my $price = $opt->{price} || {}; my $select; #::logDebug("template for selecthead: $Template{selecthead}"); #::logDebug("opt is " . ::uneval($opt)); my $run = attr_list($Template{selecthead}, $opt); #::logDebug("run is now: $run"); my ($multi, $re_b, $re_e, $regex); #::logDebug("select multiple=$opt->{multiple}"); if($opt->{multiple}) { $multi = 1; if($opt->{rawvalue}) { $re_b = '(?:\0|^)'; $re_e = '(?:\0|$)'; } else { $re_b = '(?:[\0,\s]|^)'; $re_e = '(?:[\0,\s]|$)'; } } else { $re_b = '^'; $re_e = '$'; } my $limit; if($opt->{cols}) { my $cols = $opt->{cols}; $limit = sub { return $_[0] if length($_[0]) <= $cols; return substr($_[0], 0, $cols - 2) . '..'; }; } else { $limit = sub { return $_[0] }; } my $default = $opt->{value}; my $optgroup_one; my $no_encode = $opt->{pre_filter} eq 'decode_entities' ? 1 : 0; for(@$opts) { my ($value, $label, $help) = @$_; encode($label, $ESCAPE_CHARS::std) unless $no_encode; encode($help, $ESCAPE_CHARS::std) if $help; if($value =~ /^\s*\~\~(.*)\~\~\s*$/) { my $label = $1; if($optgroup_one++) { $run .= "</optgroup>"; } $run .= qq{<optgroup label="$label">}; next; } $run .= '<option'; $select = ''; if($label) { $label =~ s/\*$// and $select = 1; } else { $value =~ s/\*$// and $select = 1; } $select = '' if defined $default; my $extra = ''; my $attr = {}; if(my $p = $price->{$value}) { $attr->{negative} = $p < 0 ? 1 : 0; $attr->{price_noformat} = $p; $attr->{absolute} = currency(abs($p), undef, 1); $attr->{price} = $extra = currency($p, undef, 1); $extra = " ($extra)"; } my $vvalue = $value; encode($vvalue, $ESCAPE_CHARS::std); $run .= qq| value="$vvalue"|; $run .= qq| title="$help"| if $help; if (length($default)) { $regex = qr/$re_b\Q$value\E$re_e/; $default =~ $regex and $select = 1; } elsif (defined($default) && length($value) == 0) { $select = 1; } $run .= ' SELECTED' if $select; $run .= '>'; if($opt->{option_template}) { $attr->{label} = $label || $value; $attr->{value} = $value; $run .= attr_list($opt->{option_template}, $attr); } elsif($label) { $run .= $limit->($label); $run .= $extra; } else { $run .= $limit->($value); $run .= $extra; } } $run .= "</optgroup>" if $optgroup_one++; $run .= attr_list($Template{selecttail}, $opt); }