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_CONSTRUCTOR',arg_dump(arguments));
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;
14 p._context_function = function (ev) { alert('default _context_function'); };
15 p.popup.addEventListener('popupshowing',function (ev) { return p._context_function(ev); },false);
17 p._select_callback = function (ev) { alert('default _select_callback'); };
18 p.tree.addEventListener('select',function (ev) { return p._select_callback(ev); },false);
20 paged_tree_make_columns( p, p.treecols, p.cols )
22 p.clear_tree = function () {
23 sdump('D_PAGED_TREE','p.clear_tree()\n');
24 empty_widget( p.w.document, p.tc );
26 return paged_tree_update_nav(p);
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);
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;
39 p.register_select_callback = function (f) {
40 sdump('D_PAGED_TREE','p.register_select_callback(' + f + ')\n');
41 return p._select_callback = f;
44 p.register_context_builder = function (f) {
45 sdump('D_PAGED_TREE','p.register_context_builder(' + f + ')\n');
46 return p._context_function = f;
49 p.map_cols_to_treeitem = map_array_to_treecells_via_treeitem;
51 p.nav_bar = p.node.getElementsByAttribute('name','nav')[0];
52 if (p.hide_nav) p.nav_bar.hidden = p.hide_nav;
54 p.results_label = p.nav_bar.getElementsByAttribute('name','label_results')[0];
55 p.range_label = p.nav_bar.getElementsByAttribute('name','label_range')[0];
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 );
61 p.display_count = parseInt( p.hits_per_page_menu.getAttribute('value') );
64 p.set_hits_per_page = function (ev) {
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 );
71 sdump('D_ERROR',js2JSON(E)+'\n');
74 p.hits_per_page_menu.addEventListener(
81 p.next_button = p.nav_bar.getElementsByAttribute('name','button_next')[0];
82 p.next_button.addEventListener(
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;
94 p.prev_button = p.nav_bar.getElementsByAttribute('name','button_prev')[0];
95 p.prev_button.addEventListener(
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;
107 sdump('D_TRACE_EXIT',arg_dump(arguments));
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++) {
118 sdump('D_PAGED_TREE','Col ' + i + ' : ' + js2JSON( col ) + '\n');
119 var treecol = d.createElement( 'treecol' );
120 treecols.appendChild( treecol );
122 treecol.setAttribute( j, col[j] );
124 var splitter = d.createElement( 'splitter' );
125 treecols.appendChild(splitter);
126 splitter.setAttribute('class','tree-splitter');
128 sdump('D_TRACE_EXIT',arg_dump(arguments));
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;
137 if (tc.childNodes.length > 0) { offset = tc.lastChild.id; }
138 for (var i = 0; i < ids.length; i++) {
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' );
148 treeitem.setAttribute( 'hidden', 'true' );
150 tc.appendChild( treeitem );
152 var treerow = d.createElement( 'treerow' );
153 treeitem.appendChild( treerow );
155 for (var j = 0; j < p.treecols.childNodes.length; j++) {
156 var treecell = d.createElement( 'treecell' );
158 treecell.setAttribute('label', getString('retrieving.record') );
160 treecell.setAttribute('label', '' );
161 treerow.appendChild( treecell );
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));
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 );
177 sdump('D_TRACE_EXIT',arg_dump(arguments));
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);
189 sdump('D_TRACE_EXIT',arg_dump(arguments));
192 function paged_tree_update_nav(p) {
193 sdump('D_PAGED_TREE',arg_dump(arguments));
194 sdump('D_TRACE_ENTER',arg_dump(arguments));
196 p.results_label.setAttribute('value', p.tc.childNodes.length );
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;
204 p.range_label.setAttribute('value', min + ' - ' + max );
206 p.range_label.setAttribute('value', '0 - 0' );
210 if (max < p.tc.childNodes.length)
211 p.next_button.disabled = false;
213 p.next_button.disabled = true;
218 p.prev_button.disabled = true;
220 p.prev_button.disabled = false;
222 sdump('D_TRACE_EXIT',arg_dump(arguments));
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;
233 treeitem.hidden = true;
235 sdump('D_TRACE_EXIT',arg_dump(arguments));
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));
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)
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));