5 include( '/elements/selectlayers.html',
6 'field' => $key, # SELECT element NAME (passed as form field)
7 # also used as ID and a unique key for layers and
9 'curr_value' => $selected_layer,
10 'options' => [ 'option1', 'option2' ],
11 'labels' => { 'option1' => 'Option 1 Label',
12 'option2' => 'Option 2 Label',
15 #XXX put this handling it its own selectlayers-fields.html element?
16 'layer_prefix' => 'prefix_', #optional prefix for fieldnames
17 'layer_fields' => [ 'layer' => [ 'fieldname',
18 { label => 'fieldname2',
19 type => 'text', #implemented:
23 # select, select-agent,
25 # select-part_referral,
32 'layer2' => [ 'l2fieldname',
36 #current values for layer fields above
37 'layer_values' => { 'layer' => { 'fieldname' => 'current_value',
38 'fieldname2' => 'field2value',
41 'layer2' => { 'l2fieldname' => 'l2value',
47 'html_between => '', #optional HTML displayed between the SELECT and the
48 #layers, scalar or coderef ('field' passed as a param)
49 'onchange' => '', #javascript code run when the SELECT changes
50 # ("what" is the element)
51 'js_only' => 0, #set true to return only the JS portions
52 'html_only' => 0, #set true to return only the HTML portions
53 'select_only' => 0, #set true to return only the <SELECT> HTML
54 'layers_only' => 0, #set true to return only the layers <DIV> HTML
58 % unless ( grep $opt{$_}, qw(html_only js_only select_only layers_only) ) {
59 <SCRIPT TYPE="text/javascript">
61 % unless ( grep $opt{$_}, qw(html_only select_only layers_only) ) {
62 //alert('start function define');
63 function <% $key %>changed(what) {
65 <% $opt{'onchange'} %>
67 var <% $key %>layer = what.options[what.selectedIndex].value;
69 % foreach my $layer ( keys %$options ) {
71 if (<% $key %>layer == "<% $layer %>" ) {
73 % foreach my $not ( grep { $_ ne $layer } keys %$options ) {
74 % my $element = "document.getElementById('${key}d$not').style";
75 <% $element %>.display = "none";
76 <% $element %>.zIndex = 0;
79 % my $element = "document.getElementById('${key}d$layer').style";
80 <% $element %>.display = "";
81 <% $element %>.zIndex = 1;
86 //<% $opt{'onchange'} %>
89 //alert('end function define');
91 % unless ( grep $opt{$_}, qw(html_only js_only select_only layers_only) ) {
95 % unless ( grep $opt{$_}, qw(js_only layers_only) ) {
97 <SELECT NAME = "<% $key %>"
99 previousValue = "<% $selected %>"
100 previousText = "<% $options{$selected} %>"
101 onChange="<% $key %>changed(this);"
104 % foreach my $option ( keys %$options ) {
106 <OPTION VALUE="<% $option %>"
107 <% $option eq $selected ? ' SELECTED' : '' %>
108 ><% $options->{$option} %></OPTION>
115 % unless ( grep $opt{$_}, qw(js_only select_only layers_only) ) {
117 <% ref($between) ? &{$between}($key) : $between %>
121 % unless ( grep $opt{$_}, qw(js_only select_only) ) {
123 % foreach my $layer ( keys %$options ) {
125 <DIV ID="<% $key %>d<% $layer %>"
126 STYLE="<% $layer eq $selected
127 ? 'display: "" ; z-index: 1'
128 : 'display: none; z-index: 0'
132 <% layer_callback($layer, $layer_fields, $layer_values, $layer_prefix) %>
141 my $conf = new FS::Conf;
142 my $money_char = $conf->config('money_char') || '$';
152 my $key = $opt{field}; # || 'generate_one' #?
154 tie my %options, 'Tie::IxHash',
155 map { $_ => $opt{'labels'}->{$_} }
156 @{ $opt{'options'} }; #just arrayref for now
158 my $between = exists($opt{html_between}) ? $opt{html_between} : '';
159 my $options = \%options;
161 my $selected = exists($opt{curr_value}) ? $opt{curr_value} : '';
163 #XXX eek. also eek $layer_fields in the layer_callback() call...
164 my $layer_fields = $opt{layer_fields};
165 my $layer_values = $opt{layer_values};
166 my $layer_prefix = $opt{layer_prefix};
169 my( $layer, $layer_fields, $layer_values, $layer_prefix ) = @_;
171 return '' unless $layer && exists $layer_fields->{$layer};
172 tie my %fields, 'Tie::IxHash', @{ $layer_fields->{$layer} };
174 #XXX this should become an element itself... (false laziness w/edit.html)
175 # but at least all the elements inside are the shared mason elements now
177 return '' unless keys %fields;
178 my $html = "<TABLE>";
180 foreach my $field ( keys %fields ) {
182 my $lf = ref($fields{$field})
184 : { 'label'=>$fields{$field} };
186 my $value = $layer_values->{$layer}{$field};
188 my $type = $lf->{type} || 'text';
191 $include = "input-$include" if $include =~ /^(text|money)$/;
192 $include = "tr-$include" unless $include eq 'hidden';
194 $html .= include( "/elements/$include.html",
196 'field' => "$layer_prefix$field",
197 'id' => "$layer_prefix$field", #separate?
198 #don't want field0_label0...?
199 'label_id' => $layer_prefix.$field."_label",
201 'value' => ( $lf->{'value'} || $value ), #hmm.
202 'curr_value' => $value,