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