Bivio::UI::HTML::Widget::Checkbox
# Copyright (c) 1999-2009 bivio Software, Inc. All rights reserved.
# $Id$
package Bivio::UI::HTML::Widget::Checkbox;
use strict;
use Bivio::Base 'HTMLWidget.InputBase';
use Bivio::UI::ViewLanguageAUTOLOAD;
my($_ID) = 0;
my($_V5) = b_use('IO.Config')->if_version(5);
sub initialize {
my($self) = @_;
my($id) = $self->unsafe_get('ID')
? $self->get('ID')
: $self->initialize_attr(ID => $self->internal_want_multi_check_handler
? Join([
'b_cb',
[['->get_list_model'], '->get_cursor'],
])
: ('b_cb' . ++$_ID),
);
$self->put(label => LABEL(_init_label($self))->put(FOR => $id));
$self->initialize_attr('label');
$self->initialize_attr(class => 'checkbox');
$self->initialize_attr(TYPE => 'checkbox');
$self->put(event_handler => MultiCheckHandler())
if $self->internal_want_multi_check_handler;
$self->unsafe_initialize_attr('auto_submit');
return shift->SUPER::initialize(@_);
}
sub internal_attributes {
return [@{shift->SUPER::internal_attributes(@_)}, qw(auto_submit label)];
}
sub internal_input_base_post_render {
my($self, $source, $buffer) = @_;
$self->unsafe_render_attr(label => $source, $buffer);
return shift->SUPER::internal_input_base_post_render(@_);
}
sub internal_input_base_render_attrs {
my($self, $form, $field, $source, $buffer) = @_;
shift->SUPER::internal_input_base_render_attrs(@_);
$$buffer .= q{ checked="checked"}
if $self->internal_is_checked($form, $field, $source);
$$buffer .= ' onclick="submit()"'
if $self->render_simple_attr(auto_submit => $source);
return;
}
sub internal_is_checked {
my($self, $form, $field, $source) = @_;
return $form->get($field);
}
sub internal_want_multi_check_handler {
my($self) = @_;
my($form) = $self->ancestral_get('form_class');
return $form->isa('Bivio::Biz::ListFormModel')
&& $form->get_instance->get_field_info($self->get('field'), 'in_list')
? 1 : 0;
}
sub _init_label {
my($self) = @_;
my($l) = defined($self->unsafe_get('label'))
? $self->get('label')
: vs_text($self->ancestral_get('form_class')->simple_package_name,
$self->get('field'));
if ($_V5) {
return SPAN_checkbox_label(
Bivio::UI::Widget->is_blesser_of($l)
? $l
: Prose($l),
);
}
return Bivio::UI::Widget->is_blesser_of($l)
? $l
: Join(["\n", String($l, 'checkbox')]);
}
1;