]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.js
clear tree before adding rows. put consoleDump back in
[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.display_count = 10;
8         p.w.current_idx = 0;
9
10         p.w.results_label = get_widget( p.w.document, p.nav_results );
11         p.w.range_label = get_widget( p.w.document, p.nav_range );
12         p.w.next_button = get_widget( p.w.document, p.nav_next );
13         p.w.prev_button = get_widget( p.w.document, p.nav_prev );
14
15         var cmd_next = get_widget( p.w.document, 'cmd_next' );
16         cmd_next.addEventListener(
17                 'command',
18                 function (ev) {
19                         sdump('D_TRACE_ENTER',arg_dump(arguments));
20                         sdump('D_TRACE_EXIT',arg_dump(arguments));
21                         return paged_tree_nav_next(p);
22                 },
23                 false
24         );
25
26         var cmd_prev = get_widget( p.w.document, 'cmd_prev' );
27         cmd_prev.addEventListener(
28                 'command',
29                 function (ev) {
30                         sdump('D_TRACE_ENTER',arg_dump(arguments));
31                         sdump('D_TRACE_EXIT',arg_dump(arguments));
32                         return paged_tree_nav_prev(p);
33                 },
34                 false
35         );
36
37         p.w.tree = get_widget(p.w.document,p.paged_tree);
38         p.w.treecols = p.w.tree.firstChild;
39         p.w.tc = p.w.tree.lastChild;
40
41         paged_tree_make_columns( p, p.w.treecols, p.cols )
42
43         p.w.clear_tree = function () {
44                 empty_widget( p.w.document, p.w.tc );
45                 p.w.current_idx = 0;
46                 paged_tree_update_nav(p);
47         }
48
49         p.w.add_rows = function (ids) { 
50                 sdump('D_TRACE_ENTER',arg_dump(arguments));
51                 sdump('D_TRACE_EXIT',arg_dump(arguments));
52                 return paged_tree_add_rows(p,p.w.tc,ids); 
53         }
54
55         p.w.register_flesh_row_function = function (f) { 
56                 sdump('D_PAGED_TREE',arg_dump(arguments));
57                 sdump('D_TRACE_ENTER',arg_dump(arguments));
58                 p.w._flesh_row_function = f; 
59                 sdump('D_TRACE_EXIT',arg_dump(arguments));
60         }
61
62         p.w.register_select_callback = function (f) { 
63                 sdump('D_PAGED_TREE',arg_dump(arguments));
64                 sdump('D_TRACE_ENTER',arg_dump(arguments));
65                 p.w._select_callback = f; 
66                 sdump('D_TRACE_EXIT',arg_dump(arguments));
67         }
68
69         p.w.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
70
71         if (p.onload) {
72                 try {
73                         sdump('D_TRACE','trying psuedo-onload: ' + p.onload + '\n');
74                         p.onload(p.w);
75                 } catch(E) {
76                         sdump('D_ERROR', js2JSON(E) + '\n' );
77                 }
78         }
79         sdump('D_TRACE_EXIT',arg_dump(arguments));
80         return;
81 }
82
83 function paged_tree_make_columns( p, treecols, cols ) {
84         sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
85         sdump('D_TRACE_ENTER',arg_dump(arguments));
86         var d = p.w.document;
87         // cols[ idx ] = { 'id':???, 'label':???, 'primary':???, 'flex':??? }
88         for (var i = 0; i < cols.length; i++) {
89                 var col = cols[i];
90                 sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
91                 var treecol = d.createElement( 'treecol' );
92                 treecols.appendChild( treecol );
93                 for (var j in col) {
94                         treecol.setAttribute( j, col[j] );
95                 }
96         }
97         sdump('D_TRACE_EXIT',arg_dump(arguments));
98         return treecols;
99 }
100
101 function paged_tree_add_rows( p, tc, ids ) {
102         sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
103         sdump('D_TRACE_ENTER',arg_dump(arguments));
104         var d = p.w.document;
105         var offset = 0;
106         if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
107         for (var i = 0; i < ids.length; i++) {
108                 var id = ids[i];
109
110                 var treeitem = d.createElement( 'treeitem' );
111                 treeitem.setAttribute( 'id', i+offset+1 );
112                 treeitem.setAttribute( 'record_id', id );
113                 treeitem.setAttribute( 'retrieved', 'false' );
114                 if ( (i+offset) < (p.w.display_count + p.w.current_idx) ) {
115                         treeitem.setAttribute( 'hidden', 'false' );
116                 } else {
117                         treeitem.setAttribute( 'hidden', 'true' );
118                 }
119                 tc.appendChild( treeitem );
120
121                 var treerow = d.createElement( 'treerow' );
122                 treeitem.appendChild( treerow );
123
124                 for (var j = 0; j < p.w.treecols.childNodes.length; j++) {
125                         var treecell = d.createElement( 'treecell' );
126                         if (j == 0)
127                                 treecell.setAttribute('label', getString('retrieving.record') );
128                         else
129                                 treecell.setAttribute('label', '' );
130                         treerow.appendChild( treecell );
131                 }
132         }
133         paged_tree_update_visibility( p );
134         paged_tree_update_nav( p );
135         paged_tree_flesh_records( p );
136         sdump('D_TRACE_EXIT',arg_dump(arguments));
137 }
138
139 function paged_tree_flesh_record(p,treeitem) {
140         sdump('D_TRACE_ENTER',arg_dump(arguments));
141         treeitem.setAttribute('retrieved','true');
142         if (p.w._flesh_row_function) {
143                 p.w._flesh_row_function( treeitem );
144         }
145         sdump('D_TRACE_EXIT',arg_dump(arguments));
146 }
147
148 function paged_tree_flesh_records(p) {
149         sdump('D_TRACE_ENTER',arg_dump(arguments));
150         for (var i = 0; i < p.w.tc.childNodes.length; i++) {
151                 var treeitem = p.w.tc.childNodes[i];
152                 if ( (treeitem.hidden == false) && (treeitem.getAttribute('retrieved')=='false') ) {
153                         paged_tree_flesh_record(p,treeitem);
154                 }
155         }
156         sdump('D_TRACE_EXIT',arg_dump(arguments));
157 }
158
159 function paged_tree_update_nav(p) {
160         sdump('D_TRACE_ENTER',arg_dump(arguments));
161         if (p.w.results_label)
162                 p.w.results_label.setAttribute('value', p.w.tc.childNodes.length );
163
164         var min = p.w.current_idx + 1;
165         var max = p.w.current_idx + p.w.display_count;
166         if (max > p.w.tc.childNodes.length)
167                 max = p.w.tc.childNodes.length;
168         if (p.w.range_label)
169                 p.w.range_label.setAttribute('value', min + ' - ' + max );
170
171         if (p.w.next_button) {
172                 if (max < p.w.tc.childNodes.length)
173                         p.w.next_button.disabled = false;
174                 else
175                         p.w.next_button.disabled = true;
176         }
177
178         if (p.w.prev_button) {
179                 if (min == 1)
180                         p.w.prev_button.disabled = true;
181                 else
182                         p.w.prev_button.disabled = false;
183         }
184         sdump('D_TRACE_EXIT',arg_dump(arguments));
185 }
186
187 function paged_tree_update_visibility(p) {
188         sdump('D_TRACE_ENTER',arg_dump(arguments));
189         for (var i = 0; i < p.w.tc.childNodes.length; i++) {
190                 var treeitem = p.w.tc.childNodes[i];
191                 if ( (i >= p.w.current_idx) && (i < (p.w.current_idx+p.w.display_count)) )
192                         treeitem.hidden = false;
193                 else
194                         treeitem.hidden = true;
195         }
196         sdump('D_TRACE_EXIT',arg_dump(arguments));
197 }
198
199 function paged_tree_nav_next(p) {
200         sdump('D_TRACE_ENTER',arg_dump(arguments));
201         var proposed_idx = p.w.current_idx + p.w.display_count;
202         if (proposed_idx >= p.w.tc.childNodes.length)
203                 proposed_idx = p.w.tc.childNodes.length - 1;
204         p.w.current_idx = proposed_idx;
205         paged_tree_update_visibility(p);
206         paged_tree_update_nav(p);
207         paged_tree_flesh_records(p);
208         sdump('D_TRACE_EXIT',arg_dump(arguments));
209 }
210
211 function paged_tree_nav_prev(p) {
212         sdump('D_TRACE_ENTER',arg_dump(arguments));
213         var proposed_idx = p.w.current_idx - p.w.display_count;
214         if (proposed_idx < 0)
215                 proposed_idx = 0;
216         p.w.current_idx = proposed_idx;
217         paged_tree_update_visibility(p);
218         paged_tree_update_nav(p);
219         paged_tree_flesh_records(p);
220         sdump('D_TRACE_EXIT',arg_dump(arguments));
221 }
222