5 include( '/elements/checkboxes.html',
9 #not yet 'name_callback' => sub { },
11 'names_list' => [ 'value',
13 [ 'complex value' => { 'label' => 'Display value',
14 'desc' => "Add'l description",
20 'element_name_prefix' => "$link_table.",
24 'checked_callback' => sub { my( $cgi, $name ) = @_; },
30 <TABLE CELLSPACING=0 CELLPADDING=0 <% $style %>>
32 % unless ( $opt{'disable_links'} ) {
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>
45 % foreach my $item ( @{ $opt{'names_list'} } ) {
47 % my $name = ref($item) ? $item->[0] : $item;
48 % my $display = ( ref($item) && $item->[1]{label} )
51 % $display =~ s/ / /g;
52 % $display .= $item->[1]{note} if ref($item) && $item->[1]{note};
53 % my $desc = ref($item) && $item->[1]{desc} ? $item->[1]{desc} : '';
56 % ( $cgi->param('error') ? 'error_' : '' ). 'checked_callback';
57 % my $checked = &{ $opt{$callback} }( $cgi, $name ) ? 'CHECKED' : '';
61 <INPUT TYPE="checkbox" NAME="<% $opt{'element_name_prefix'}. $name %>" <% $checked %> ID="<%$prefix.$num++%>" VALUE="ON">
65 <BR><FONT SIZE="-2"><% $desc %></FONT>
74 <SCRIPT TYPE="text/javascript">
76 function setAll<%$prefix%>(setTo) {
77 % for ( 0 .. ($num-1) ) {
78 document.getElementById('<%$prefix.$_%>').checked = setTo;
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;
88 element.checked = true;
99 my @pset = ( 'a'..'z', 'A'..'Z', '0'..'9' );
101 my $prefix = $opt{prefix}
102 || join('', map $pset[ int(rand $#pset) ], (0..20) );
104 $opt{checked_callback} ||= sub {};
106 $opt{'error_checked_callback'} ||= sub {
107 my( $cgi, $name ) = @_;
108 $cgi->param($opt{'element_name_prefix'}. $name );
113 $style = 'STYLE="' . $opt{'style'} . '"';