add rate copying, RT#4431
[freeside.git] / httemplate / elements / checkboxes.html
1 <%doc>
2
3 Example:
4
5   include( '/elements/checkboxes.html',
6
7     # required
8    
9     #? 'name_callback' => sub { },
10    
11     'names_list' => [ 'value',
12                       'other value',
13                       [ 'complex value' => { 'desc' => "Add'l description",
14                                              'note' => '&nbsp;*',
15                                            }
16                       ],
17                     ],
18
19     'element_name_prefix' => "$link_table.",
20
21     #recommended
22
23     'checked_callback' => sub { my( $cgi, $name ) = @_; },
24
25   )
26
27 </%doc>
28
29 <TABLE CELLSPACING=0 CELLPADDING=0>
30
31 <TR>
32   <TD COLSPAN=2 ALIGN="center"><FONT SIZE="-1">(
33     <A HREF="javascript:setAll<%$prefix%>(true)">select all</A> |
34     <A HREF="javascript:setAll<%$prefix%>(false)">unselect all</A> |
35     <A HREF="javascript:toggleAll<%$prefix%>()">toggle all</A>
36   )</FONT></TD>
37 </TR>
38
39 % my $num=0;
40 % foreach my $item ( @{ $opt{'names_list'} } ) {
41 %
42 %     my $name = ref($item) ? $item->[0] : $item;
43 %     ( my $display = $name ) =~ s/ /&nbsp;/g;
44 %     $display .= $item->[1]{note} if ref($item) && $item->[1]{note};
45 %     my $desc = ref($item) && $item->[1]{desc} ? $item->[1]{desc} : '';
46 %
47 %     my $callback =
48 %       ( $cgi->param('error') ? 'error_' : '' ). 'checked_callback';
49 %     my $checked = &{ $opt{$callback} }( $cgi, $name ) ? 'CHECKED' : '';
50
51   <TR>
52     <TD VALIGN="top">
53       <INPUT TYPE="checkbox" NAME="<% $opt{'element_name_prefix'}. $name %>" <% $checked %> ID="<%$prefix.$num++%>" VALUE="ON">
54     </TD>
55     <TD><% $display %>
56 %     if ( $desc ) {
57         <BR><FONT SIZE="-2"><% $desc %></FONT>
58 %     }
59     </TD>
60   </TR>
61
62 % } 
63
64 </TABLE>
65
66 <SCRIPT TYPE="text/javascript">
67
68   function setAll<%$prefix%>(setTo) {
69 %   for ( 0 .. ($num-1) ) {
70       document.getElementById('<%$prefix.$_%>').checked = setTo;
71 %   }
72   }
73
74   function toggleAll<%$prefix%>(setTo) {
75 %   for ( 0 .. ($num-1) ) {
76       var element = document.getElementById('<%$prefix.$_%>');
77       if ( element.checked == true ) {
78         element.checked = false;
79       } else {
80         element.checked = true;
81       }
82 %   }
83   }
84
85 </SCRIPT>
86
87 <%init>
88
89 my( %opt ) = @_;
90
91 my @pset = ( 'a'..'z', 'A'..'Z', '0'..'9' );
92
93 my $prefix = $opt{prefix}
94              || join('', map $pset[ int(rand $#pset) ], (0..20) );
95
96 $opt{checked_callback} ||= sub {};
97
98 $opt{'error_checked_callback'} ||= sub {
99   my( $cgi, $name ) = @_;
100   $cgi->param($opt{'element_name_prefix'}. $name );
101 };
102
103 </%init>