automatic package changes for supplemental packages, #37102
[freeside.git] / httemplate / elements / select.html
1 <%doc>
2 <& select.html,
3   # required
4     field       => 'myfield', # NAME property
5     curr_value  => 'foo',
6     labels      => { # or 'option_labels'
7                      'AL' => 'Alabama',
8                      'AK' => 'Alaska',
9                      'AR' => 'Arkansas',
10                    },
11     options     => [ 'AL', 'AK', 'AR' ],
12     curr_value  => $cgi->param('myfield'),
13
14   # recommended    
15     id          => 'myid',    # DOM id
16
17   # optional
18     size        => 1,         # to show multiple rows at once
19     style       => '',        # STYLE property
20     multiple    => 0,
21     disabled    => 0,
22     onchange    => 'do_something()',
23     js_only     => 0,         # disables the whole thing
24 &>
25 </%doc>
26     
27 % unless ( $opt{'js_only'} ) {
28
29 <SELECT NAME          = "<% $opt{field} %>"
30         ID            = "<% $opt{id} %>"
31         previousValue = "<% $curr_value %>"
32         previousText  = "<% $labels->{$curr_value} || $curr_value %>"
33         <% $multiple %>
34         <% $size %>
35         <% $style %>
36         <% $opt{disabled} %>
37         <% $onchange %>
38 >
39
40 % if ( $opt{options} ) {
41 %
42 %   foreach my $option ( @{ $opt{options} } ) { #just arrayref for now
43
44       <OPTION VALUE="<% $option %>"
45               <% $opt{curr_value} eq $option ? 'SELECTED' : '' %>
46       >
47         <% $labels->{$option} || $option %>
48       </OPTION>
49
50 %   }
51 %
52 % } else { #deprecated weird value hashref used only by reason.html
53 %
54 %   my $aref = $opt{'value'}->{'values'};
55 %   my $vkey = $opt{'value'}->{'vcolumn'};
56 %   my $ckey = $opt{'value'}->{'ccolumn'};
57 %   foreach my $v (@$aref) {
58
59       <OPTION VALUE="<% $v->$vkey %>"
60               <% ($opt{curr_value} eq $v->$vkey) ? 'SELECTED' : '' %>
61       >
62         <% $v->$ckey %>
63       </OPTION>
64
65 %   }
66 %
67 % }
68
69 </SELECT>
70
71 % }
72 <%init>
73
74 my %opt = @_;
75
76 my $labels = $opt{'option_labels'} || $opt{'labels'};
77
78 my $curr_value = $opt{'curr_value'};
79
80 my $onchange = '';
81 if ( $opt{'onchange'} ) {
82   $onchange = $opt{'onchange'};
83   $onchange .= '(this)' unless $onchange =~ /\(\w*\);?$/;
84   $onchange =~ s/\(what\);/\(this\);/g; #ugh, terrible hack.  all onchange
85                                         #callbacks should act the same
86   $onchange = 'onChange="'. $onchange. '"' unless $onchange =~ /^onChange=/i;
87 }
88
89 $opt{'disabled'} = &{ $opt{'disabled'} }( \%opt )
90   if ref($opt{'disabled'}) eq 'CODE';
91 $opt{'disabled'} = 'DISABLED'
92   if $opt{'disabled'} && $opt{'disabled'} !~ /disabled/i; # uuh... yeah?
93
94 my @style = ref($opt{'style'})
95               ? @{ $opt{'style'} }
96               : $opt{'style'}
97                 ? ( $opt{'style'} )
98                 : ();
99
100 my $style = scalar(@style) ? 'STYLE="'. join(';', @style). '"' : '';
101
102 my $size = $opt{'size'} ? 'SIZE='.$opt{'size'} : '';
103
104 my $multiple = $opt{'multiple'} ? 'MULTIPLE' : '';
105
106 </%init>