1 sdump('D_TRACE','Loading paged_tree.js\n');
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));
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 );
12 p.w.hits_per_page_menu = get_widget( p.w.document, p.nav_hits_per_page );
14 p.w.display_count = parseInt( p.hits_per_page );
16 p.w.display_count = parseInt( p.w.hits_per_page_menu.getAttribute('value') );
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 );
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;
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(
30 sdump('D_TRACE','In set_hits handler\n');
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 );
38 sdump('D_ERROR',js2JSON(E)+'\n');
40 sdump('D_TRACE','Leaving set_hits handler\n');
46 p.w.set_hits_per_page = function () {
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 );
53 sdump('D_ERROR',js2JSON(E)+'\n');
57 var cmd_next = get_widget( p.w.document, 'cmd_next' );
58 cmd_next.addEventListener(
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;
70 var cmd_prev = get_widget( p.w.document, 'cmd_prev' );
71 cmd_prev.addEventListener(
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;
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;
88 p.w._context_function = function (ev) {};
89 p.w.popup.addEventListener('popupshowing',function (ev) { return p.w._context_function(ev); },false);
91 p.w._select_callback = function (ev) {};
92 p.w.tree.addEventListener('select',function (ev) { return p.w._select_callback(ev); },false);
94 paged_tree_make_columns( p, p.w.treecols, p.cols )
96 p.w.clear_tree = function () {
97 empty_widget( p.w.document, p.w.tc );
99 return paged_tree_update_nav(p);
102 p.w.add_rows = function (ids) {
103 return paged_tree_add_rows(p,p.w.tc,ids);
106 p.w.register_flesh_row_function = function (f) {
107 return p.w._flesh_row_function = f;
110 p.w.register_select_callback = function (f) {
111 return p.w._select_callback = f;
114 p.w.register_context_builder = function (f) {
115 return p.w._context_function = f;
118 p.w.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
122 sdump('D_TIMEOUT','***** timeout occured paged_tree.js');
125 sdump('D_TRACE','trying psuedo-onload: ' + p.onload + '\n');
128 sdump('D_ERROR', js2JSON(E) + '\n' );
133 sdump('D_TRACE_EXIT',arg_dump(arguments));
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++) {
144 sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
145 var treecol = d.createElement( 'treecol' );
146 treecols.appendChild( treecol );
148 treecol.setAttribute( j, col[j] );
150 var splitter = d.createElement( 'splitter' );
151 treecols.appendChild(splitter);
152 splitter.setAttribute('class','tree-splitter');
154 sdump('D_TRACE_EXIT',arg_dump(arguments));
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;
163 if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
164 for (var i = 0; i < ids.length; i++) {
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' );
174 treeitem.setAttribute( 'hidden', 'true' );
176 tc.appendChild( treeitem );
178 var treerow = d.createElement( 'treerow' );
179 treeitem.appendChild( treerow );
181 for (var j = 0; j < p.w.treecols.childNodes.length; j++) {
182 var treecell = d.createElement( 'treecell' );
184 treecell.setAttribute('label', getString('retrieving.record') );
186 treecell.setAttribute('label', '' );
187 treerow.appendChild( treecell );
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));
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 );
202 sdump('D_TRACE_EXIT',arg_dump(arguments));
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);
213 sdump('D_TRACE_EXIT',arg_dump(arguments));
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 );
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) {
227 p.w.range_label.setAttribute('value', min + ' - ' + max );
229 p.w.range_label.setAttribute('value', '0 - 0' );
232 if (p.w.next_button) {
233 if (max < p.w.tc.childNodes.length)
234 p.w.next_button.disabled = false;
236 p.w.next_button.disabled = true;
239 if (p.w.prev_button) {
241 p.w.prev_button.disabled = true;
243 p.w.prev_button.disabled = false;
245 sdump('D_TRACE_EXIT',arg_dump(arguments));
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;
255 treeitem.hidden = true;
257 sdump('D_TRACE_EXIT',arg_dump(arguments));
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));
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)
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));