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