]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.js
hookup menu for billing type
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / main / paged_tree.js
1 sdump('D_TRACE','Loading paged_tree.js\n');
2
3 function paged_tree_init(p) {
4         sdump('D_PAGED_TREE',"TESTING: paged_tree.js: " + mw.G['main_test_variable'] + '\n');
5         sdump('D_CONSTRUCTOR',arg_dump(arguments));
6
7         p.current_idx = 0;
8
9         p.tree = p.node.getElementsByAttribute('name','tree')[0];
10         p.popup = p.node.getElementsByTagName('popup')[0];
11         p.treecols = p.tree.firstChild;
12         p.tc = p.tree.lastChild;
13
14         p._context_function = function (ev) { alert('default _context_function'); };
15         p.popup.addEventListener('popupshowing',function (ev) { return p._context_function(ev); },false);
16
17         p._select_callback = function (ev) { alert('default _select_callback'); };
18         p.tree.addEventListener('select',function (ev) { return p._select_callback(ev); },false);
19
20         paged_tree_make_columns( p, p.treecols, p.cols )
21
22         p.clear_tree = function () {
23                 sdump('D_PAGED_TREE','p.clear_tree()\n');
24                 empty_widget( p.w.document, p.tc );
25                 p.current_idx = 0;
26                 return paged_tree_update_nav(p);
27         }
28
29         p.add_rows = function (ids) { 
30                 sdump('D_PAGED_TREE','p.add_rows()\n');
31                 return paged_tree_add_rows(p,p.tc,ids); 
32         }
33
34         p.register_flesh_row_function = function (f) { 
35                 sdump('D_PAGED_TREE','p.register_flesh_row_function(' + f + ')\n');
36                 return p._flesh_row_function = f; 
37         }
38
39         p.register_select_callback = function (f) { 
40                 sdump('D_PAGED_TREE','p.register_select_callback(' + f + ')\n');
41                 return p._select_callback = f; 
42         }
43
44         p.register_context_builder = function (f) {
45                 sdump('D_PAGED_TREE','p.register_context_builder(' + f + ')\n');
46                 return p._context_function = f;
47         }
48
49         p.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
50
51         p.nav_bar = p.node.getElementsByAttribute('name','nav')[0];
52         if (p.hide_nav) p.nav_bar.hidden = p.hide_nav;
53
54         p.results_label = p.nav_bar.getElementsByAttribute('name','label_results')[0];
55         p.range_label = p.nav_bar.getElementsByAttribute('name','label_range')[0];
56
57         p.hits_per_page_menu = p.nav_bar.getElementsByAttribute('name','hits_per_page')[0];
58         if (p.hits_per_page) {
59                 p.display_count = parseInt( p.hits_per_page );
60         } else {
61                 p.display_count = parseInt( p.hits_per_page_menu.getAttribute('value') );
62         }
63
64         p.set_hits_per_page = function (ev) {
65                 try {
66                         p.display_count = parseInt( p.hits_per_page_menu.getAttribute('value') );
67                         paged_tree_update_visibility( p );
68                         paged_tree_update_nav( p );
69                         paged_tree_flesh_records( p );
70                 } catch(E) {
71                         sdump('D_ERROR',js2JSON(E)+'\n');
72                 }
73         }
74         p.hits_per_page_menu.addEventListener(
75                 'command',
76                 p.set_hits_per_page,
77                 false
78         );
79
80
81         p.next_button = p.nav_bar.getElementsByAttribute('name','button_next')[0];
82         p.next_button.addEventListener(
83                 'command',
84                 function (ev) {
85                         var backup_select_callback = p._select_callback;
86                         p._select_callback = function (ev) {};
87                         var result = paged_tree_nav_next(p);
88                         p._select_callback = backup_select_callback;
89                         return result;
90                 },
91                 false
92         );
93
94         p.prev_button = p.nav_bar.getElementsByAttribute('name','button_prev')[0];
95         p.prev_button.addEventListener(
96                 'command',
97                 function (ev) {
98                         var backup_select_callback = p._select_callback;
99                         p._select_callback = function (ev) {};
100                         var result = paged_tree_nav_prev(p);
101                         p._select_callback = backup_select_callback;
102                         return result;
103                 },
104                 false
105         );
106
107         sdump('D_TRACE_EXIT',arg_dump(arguments));
108         return p;
109 }
110
111 function paged_tree_make_columns( p, treecols, cols ) {
112         sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
113         sdump('D_TRACE_ENTER',arg_dump(arguments));
114         var d = p.w.document;
115         // cols[ idx ] = { 'id':???, 'label':???, 'primary':???, 'flex':??? }
116         for (var i = 0; i < cols.length; i++) {
117                 var col = cols[i];
118                 sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
119                 var treecol = d.createElement( 'treecol' );
120                 treecols.appendChild( treecol );
121                 for (var j in col) {
122                         treecol.setAttribute( j, col[j] );
123                 }
124                 var splitter = d.createElement( 'splitter' );
125                 treecols.appendChild(splitter);
126                 splitter.setAttribute('class','tree-splitter');
127         }
128         sdump('D_TRACE_EXIT',arg_dump(arguments));
129         return treecols;
130 }
131
132 function paged_tree_add_rows( p, tc, ids ) {
133         sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
134         sdump('D_TRACE_ENTER',arg_dump(arguments));
135         var d = p.w.document;
136         var offset = 0;
137         if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
138         for (var i = 0; i < ids.length; i++) {
139                 var id = ids[i];
140
141                 var treeitem = d.createElement( 'treeitem' );
142                 treeitem.setAttribute( 'id', i+offset+1 );
143                 treeitem.setAttribute( 'record_id', id );
144                 treeitem.setAttribute( 'retrieved', 'false' );
145                 if ( (i+offset) < (p.display_count + p.current_idx) ) {
146                         treeitem.setAttribute( 'hidden', 'false' );
147                 } else {
148                         treeitem.setAttribute( 'hidden', 'true' );
149                 }
150                 tc.appendChild( treeitem );
151
152                 var treerow = d.createElement( 'treerow' );
153                 treeitem.appendChild( treerow );
154
155                 for (var j = 0; j < p.treecols.childNodes.length; j++) {
156                         var treecell = d.createElement( 'treecell' );
157                         if (j == 0)
158                                 treecell.setAttribute('label', getString('retrieving.record') );
159                         else
160                                 treecell.setAttribute('label', '' );
161                         treerow.appendChild( treecell );
162                 }
163         }
164         paged_tree_update_visibility( p );
165         paged_tree_update_nav( p );
166         paged_tree_flesh_records( p );
167         sdump('D_TRACE_EXIT',arg_dump(arguments));
168 }
169
170 function paged_tree_flesh_record(p,treeitem) {
171         sdump('D_PAGED_TREE',arg_dump(arguments));
172         sdump('D_TRACE_ENTER',arg_dump(arguments));
173         treeitem.setAttribute('retrieved','true');
174         if (p._flesh_row_function) {
175                 p._flesh_row_function( treeitem );
176         }
177         sdump('D_TRACE_EXIT',arg_dump(arguments));
178 }
179
180 function paged_tree_flesh_records(p) {
181         sdump('D_PAGED_TREE',arg_dump(arguments));
182         sdump('D_TRACE_ENTER',arg_dump(arguments));
183         for (var i = 0; i < p.tc.childNodes.length; i++) {
184                 var treeitem = p.tc.childNodes[i];
185                 if ( (treeitem.hidden == false) && (treeitem.getAttribute('retrieved')=='false') ) {
186                         paged_tree_flesh_record(p,treeitem);
187                 }
188         }
189         sdump('D_TRACE_EXIT',arg_dump(arguments));
190 }
191
192 function paged_tree_update_nav(p) {
193         sdump('D_PAGED_TREE',arg_dump(arguments));
194         sdump('D_TRACE_ENTER',arg_dump(arguments));
195         if (p.results_label)
196                 p.results_label.setAttribute('value', p.tc.childNodes.length );
197
198         var min = p.current_idx + 1;
199         var max = p.current_idx + p.display_count;
200         if (max > p.tc.childNodes.length)
201                 max = p.tc.childNodes.length;
202         if (p.range_label) {
203                 if (max > 0)
204                         p.range_label.setAttribute('value', min + ' - ' + max );
205                 else
206                         p.range_label.setAttribute('value', '0 - 0' );
207         }
208
209         if (p.next_button) {
210                 if (max < p.tc.childNodes.length)
211                         p.next_button.disabled = false;
212                 else
213                         p.next_button.disabled = true;
214         }
215
216         if (p.prev_button) {
217                 if (min == 1)
218                         p.prev_button.disabled = true;
219                 else
220                         p.prev_button.disabled = false;
221         }
222         sdump('D_TRACE_EXIT',arg_dump(arguments));
223 }
224
225 function paged_tree_update_visibility(p) {
226         sdump('D_PAGED_TREE',arg_dump(arguments));
227         sdump('D_TRACE_ENTER',arg_dump(arguments));
228         for (var i = 0; i < p.tc.childNodes.length; i++) {
229                 var treeitem = p.tc.childNodes[i];
230                 if ( (i >= p.current_idx) && (i < (p.current_idx+p.display_count)) )
231                         treeitem.hidden = false;
232                 else
233                         treeitem.hidden = true;
234         }
235         sdump('D_TRACE_EXIT',arg_dump(arguments));
236 }
237
238 function paged_tree_nav_next(p) {
239         sdump('D_PAGED_TREE',arg_dump(arguments));
240         sdump('D_TRACE_ENTER',arg_dump(arguments));
241         var proposed_idx = p.current_idx + p.display_count;
242         if (proposed_idx >= p.tc.childNodes.length)
243                 proposed_idx = p.tc.childNodes.length - 1;
244         p.current_idx = proposed_idx;
245         paged_tree_update_visibility(p);
246         paged_tree_update_nav(p);
247         paged_tree_flesh_records(p);
248         sdump('D_TRACE_EXIT',arg_dump(arguments));
249 }
250
251 function paged_tree_nav_prev(p) {
252         sdump('D_PAGED_TREE',arg_dump(arguments));
253         sdump('D_TRACE_ENTER',arg_dump(arguments));
254         var proposed_idx = p.current_idx - p.display_count;
255         if (proposed_idx < 0)
256                 proposed_idx = 0;
257         p.current_idx = proposed_idx;
258         paged_tree_update_visibility(p);
259         paged_tree_update_nav(p);
260         paged_tree_flesh_records(p);
261         sdump('D_TRACE_EXIT',arg_dump(arguments));
262 }
263