2 Common code for editing invoice/quotation details/comments.
4 Expects to be the last element in a two-column table with specified id
6 <& /edit/elements/detail-table.html,
7 id => 'element_id', # required
8 details => \@details, # plain text strings, existing details
9 label => 'Comments', # optional, shows on first row only
10 field => 'comment', # input field name/id, appended with rownum, default 'detail'
16 % unless ($detail_table_init) {
17 % $detail_table_init = 1;
19 var detail_table_info = {};
20 detail_table_info.rownum = {};
21 detail_table_info.label = {};
22 detail_table_info.field = {};
24 function possiblyAddDetailRow(tableid,rownum) {
25 if (( detail_table_info.rownum[tableid] - rownum == 1 ) || !detail_table_info.rownum[tableid]) {
26 addDetailRow(tableid);
30 function addDetailRow(tableid,newtext) {
32 var table = document.getElementById(tableid);
33 var newrownum = detail_table_info.rownum[tableid];
34 var newfield = detail_table_info.field[tableid] + newrownum;
36 var row = document.createElement('TR');
38 var empty_cell = document.createElement('TD');
40 empty_cell.innerHTML = detail_table_info.label[tableid];
41 empty_cell.style.textAlign = 'right';
43 row.appendChild(empty_cell);
45 var detail_cell = document.createElement('TD');
47 var detail_input = document.createElement('INPUT');
48 detail_input.setAttribute('name', newfield);
49 detail_input.setAttribute('id', newfield);
50 detail_input.setAttribute('size', 60);
51 detail_input.setAttribute('maxLength', 65);
52 detail_input.onkeyup = function () { possiblyAddDetailRow(tableid,newrownum) };
53 detail_input.onchange = function () { possiblyAddDetailRow(tableid,newrownum) };
54 detail_input.value = newtext || '';
55 detail_cell.appendChild(detail_input);
57 row.appendChild(detail_cell);
59 table.appendChild(row);
61 detail_table_info.rownum[tableid]++;
65 detail_table_info.label['<% $id %>'] = '<% emt($label) %>';
66 detail_table_info.field['<% $id %>'] = '<% $field %>';
67 detail_table_info.rownum['<% $id %>'] = 0;
68 % foreach my $detail ( @details ) {
69 addDetailRow('<% $id %>','<% $detail %>');
74 my $detail_table_init = 0;
79 my @details = $opt{'details'} ? @{ $opt{'details'} } : ();
80 push(@details,'') if $details[$#details] || !@details;
81 my $id = $opt{'id'} or die "No id specified";
82 my $label = $opt{'label'} || '';
83 my $field = $opt{'field'} || 'detail';