%doc> Example: include( '/elements/tr-select-reason.html', #required 'field' => 'reasonnum', 'reason_class' => 'C', # one of those in %FS::reason_type::class_name #recommended 'cgi' => $cgi, #easiest way for things to be properly "sticky" on errors #optional 'control_button' => 'element_name', #button to be enabled when a reason is #selected 'id' => 'element_id', #deprecated ways to keep things "sticky" on errors # (requires duplicate code in each using file to parse cgi params) 'curr_value' => $curr_value, 'curr_value' => { 'typenum' => $typenum, 'reason' => $reason, }, ) %doc> % # note style improvements. % # - no more conditionally included code here % # - callers are not expected to pass javascript fragments % # - no redundant checking of ACLs or parameters % # - form fields are grouped for easy management % # - use the standard select-table widget instead of ad hoc crap <& /elements/xmlhttp.html, url => $p . 'misc/xmlhttp-reason-hint.html', subs => [ 'get_hint' ], &> %# sadly can't just use add_inline here, as we have non-text fields <& tr-select-table.html, 'label' => 'Reason', 'field' => $name, 'id' => $id, 'table' => 'reason', 'records' => \@reasons, 'label_callback' => sub { my $reason = shift; $reason->type . ' : ' . $reason->reason }, 'disable_empty' => 1, 'pre_options' => [ 0 => 'Select reason...' ], 'post_options' => \@post_options, 'curr_value' => $init_reason, 'onchange' => $id.'_changed()', &> % # "add new reason" fields % # should be a