]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/main/paged_tree.js
Various stuff to find a speed bottleneck. It was the register_window function. need...
[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.add_rows = function paged_tree_add_rows_indirect(ids) { 
44                 sdump('D_TRACE_ENTER',arg_dump(arguments));
45                 sdump('D_TRACE_EXIT',arg_dump(arguments));
46                 return paged_tree_add_rows(p,p.w.tc,ids); 
47         }
48
49         p.w.register_flesh_row_function = function paged_tree_register_flesh_row_function(f) { 
50                 sdump('D_PAGED_TREE',arg_dump(arguments));
51                 sdump('D_TRACE_ENTER',arg_dump(arguments));
52                 p.w._flesh_row_function = f; 
53                 sdump('D_TRACE_EXIT',arg_dump(arguments));
54         }
55
56         p.w.register_select_callback = function paged_tree_register_select_callback(f) { 
57                 sdump('D_PAGED_TREE',arg_dump(arguments));
58                 sdump('D_TRACE_ENTER',arg_dump(arguments));
59                 p.w._select_callback = f; 
60                 sdump('D_TRACE_EXIT',arg_dump(arguments));
61         }
62
63         p.w.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
64
65         if (p.onload) {
66                 try {
67                         sdump('D_TRACE','trying psuedo-onload: ' + p.onload + '\n');
68                         p.onload(p.w);
69                 } catch(E) {
70                         sdump('D_ERROR', js2JSON(E) + '\n' );
71                 }
72         }
73         sdump('D_TRACE_EXIT',arg_dump(arguments));
74         return;
75 }
76
77 function paged_tree_make_columns( p, treecols, cols ) {
78         sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
79         sdump('D_TRACE_ENTER',arg_dump(arguments));
80         var d = p.w.document;
81         // cols[ idx ] = { 'id':???, 'label':???, 'primary':???, 'flex':??? }
82         for (var i = 0; i < cols.length; i++) {
83                 var col = cols[i];
84                 sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
85                 var treecol = d.createElement( 'treecol' );
86                 treecols.appendChild( treecol );
87                 for (var j in col) {
88                         treecol.setAttribute( j, col[j] );
89                 }
90         }
91         sdump('D_TRACE_EXIT',arg_dump(arguments));
92         return treecols;
93 }
94
95 function paged_tree_add_rows( p, tc, ids ) {
96         sdump('D_PAGED_TREE',arg_dump(arguments,{2:'.length'}));
97         sdump('D_TRACE_ENTER',arg_dump(arguments));
98         var d = p.w.document;
99         var offset = 0;
100         if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
101         for (var i = 0; i < ids.length; i++) {
102                 var id = ids[i];
103
104                 var treeitem = d.createElement( 'treeitem' );
105                 treeitem.setAttribute( 'id', i+offset+1 );
106                 treeitem.setAttribute( 'record_id', id );
107                 treeitem.setAttribute( 'retrieved', 'false' );
108                 if ( (i+offset) < (p.w.display_count + p.w.current_idx) ) {
109                         treeitem.setAttribute( 'hidden', 'false' );
110                 } else {
111                         treeitem.setAttribute( 'hidden', 'true' );
112                 }
113                 tc.appendChild( treeitem );
114
115                 var treerow = d.createElement( 'treerow' );
116                 treeitem.appendChild( treerow );
117
118                 for (var j = 0; j < p.w.treecols.childNodes.length; j++) {
119                         var treecell = d.createElement( 'treecell' );
120                         if (j == 0)
121                                 treecell.setAttribute('label', getString('retrieving.record') );
122                         else
123                                 treecell.setAttribute('label', '' );
124                         treerow.appendChild( treecell );
125                 }
126         }
127         paged_tree_update_visibility( p );
128         paged_tree_update_nav( p );
129         paged_tree_flesh_records( p );
130         sdump('D_TRACE_EXIT',arg_dump(arguments));
131 }
132
133 function paged_tree_flesh_record(p,treeitem) {
134         sdump('D_TRACE_ENTER',arg_dump(arguments));
135         treeitem.setAttribute('retrieved','true');
136         if (p.w._flesh_row_function) {
137                 p.w._flesh_row_function( treeitem );
138         }
139         sdump('D_TRACE_EXIT',arg_dump(arguments));
140 }
141
142 function paged_tree_flesh_records(p) {
143         sdump('D_TRACE_ENTER',arg_dump(arguments));
144         for (var i = 0; i < p.w.tc.childNodes.length; i++) {
145                 var treeitem = p.w.tc.childNodes[i];
146                 if ( (treeitem.hidden == false) && (treeitem.getAttribute('retrieved')=='false') ) {
147                         paged_tree_flesh_record(p,treeitem);
148                 }
149         }
150         sdump('D_TRACE_EXIT',arg_dump(arguments));
151 }
152
153 function paged_tree_update_nav(p) {
154         sdump('D_TRACE_ENTER',arg_dump(arguments));
155         if (p.w.results_label)
156                 p.w.results_label.setAttribute('value', p.w.tc.childNodes.length );
157
158         var min = p.w.current_idx + 1;
159         var max = p.w.current_idx + p.w.display_count;
160         if (max > p.w.tc.childNodes.length)
161                 max = p.w.tc.childNodes.length;
162         if (p.w.range_label)
163                 p.w.range_label.setAttribute('value', min + ' - ' + max );
164
165         if (p.w.next_button) {
166                 if (max < p.w.tc.childNodes.length)
167                         p.w.next_button.disabled = false;
168                 else
169                         p.w.next_button.disabled = true;
170         }
171
172         if (p.w.prev_button) {
173                 if (min == 1)
174                         p.w.prev_button.disabled = true;
175                 else
176                         p.w.prev_button.disabled = false;
177         }
178         sdump('D_TRACE_EXIT',arg_dump(arguments));
179 }
180
181 function paged_tree_update_visibility(p) {
182         sdump('D_TRACE_ENTER',arg_dump(arguments));
183         for (var i = 0; i < p.w.tc.childNodes.length; i++) {
184                 var treeitem = p.w.tc.childNodes[i];
185                 if ( (i >= p.w.current_idx) && (i < (p.w.current_idx+p.w.display_count)) )
186                         treeitem.hidden = false;
187                 else
188                         treeitem.hidden = true;
189         }
190         sdump('D_TRACE_EXIT',arg_dump(arguments));
191 }
192
193 function paged_tree_nav_next(p) {
194         sdump('D_TRACE_ENTER',arg_dump(arguments));
195         var proposed_idx = p.w.current_idx + p.w.display_count;
196         if (proposed_idx >= p.w.tc.childNodes.length)
197                 proposed_idx = p.w.tc.childNodes.length - 1;
198         p.w.current_idx = proposed_idx;
199         paged_tree_update_visibility(p);
200         paged_tree_update_nav(p);
201         paged_tree_flesh_records(p);
202         sdump('D_TRACE_EXIT',arg_dump(arguments));
203 }
204
205 function paged_tree_nav_prev(p) {
206         sdump('D_TRACE_ENTER',arg_dump(arguments));
207         var proposed_idx = p.w.current_idx - p.w.display_count;
208         if (proposed_idx < 0)
209                 proposed_idx = 0;
210         p.w.current_idx = proposed_idx;
211         paged_tree_update_visibility(p);
212         paged_tree_update_nav(p);
213         paged_tree_flesh_records(p);
214         sdump('D_TRACE_EXIT',arg_dump(arguments));
215 }
216