1 sdump('D_WIDGETS',"Loading widgets.js\n");
3 // This was originally used in circ.js for checkin and checkout lists.
4 // The first argument is the treechildren element for the tree.
5 // Subsequent arguments are treated as textual values for treecells in that treeitem.
7 function append_treeitem() {
8 sdump('D_WIDGETS',arg_dump(arguments));
10 if (arguments.length == 1) {
15 if (typeof(e) != 'object') { e = d.getElementById(e); }
17 if (typeof(e) != 'object') { throw('typeof e != object : typeof e = ' + typeof(e)); }
20 if (!treechildren) { sdump('D_WIDGETS','No ' + id + ' to append to\n'); return; }
22 var treeitem = elem('treeitem'); treechildren.appendChild(treeitem);
23 var treerow = elem('treerow'); treeitem.appendChild(treerow);
24 for (var i = 2; i < arguments.length ; i++ ) {
27 { 'label': arguments[i], 'id' : 'treeitem_' + treeitem_id + '_' + i }
29 treerow.appendChild(treecell);
30 //sdump('D_WIDGETS','treecell.label = ' + arguments[i] + '\n');
35 // This was used in browse_list.js as a more flexible alternative to swap_attribute.
36 // The first argument is the element, the second argument is the pertinant attribute,
37 // and the third argument is an array of values to cycle through for setting the
38 // element's attribute. Ex: var toggle = cycle_attribute( target,'toggle',['1','2','3'] );
39 function cycle_attribute() {
40 sdump('D_WIDGETS',arg_dump(arguments));
41 var d; var e; var a; var v;
42 if (arguments.length == 3) {
51 if (typeof(e) != 'object') { e = d.getElementById(e); }
54 if (typeof(e) != 'object') { throw('typeof e != object : typeof e = ' + typeof(e)); }
55 if (!a) { throw('!a : a = ' + a); }
56 if (! e.getAttribute(a) ) { throw(' ! e.getAttribute(a) : a = ' + a); }
57 if (typeof(v) != 'object') { throw('typeof v != object : typeof v = ' + typeof(v)); }
59 var toggle = e.getAttribute(a);
61 sdump('D_WIDGETS','cycling ' + a + ' on ' + e.getAttribute('id') + ' to ');
62 for (var i = 0; i < v.length; i++) {
64 e.setAttribute(a,v[i]);
65 sdump('D_WIDGETS',v[i] + '\n');
73 e.setAttribute(a,v[0]);
74 sdump('D_WIDGETS',v[0] + '\n');
77 throw('current value not in list');
80 sdump('D_WIDGETS','cycle_attribute error: ' + js2JSON(E) + '\n');
81 sdump('D_WIDGETS','null\n');
86 // Treats each argument as an element to disable
87 function disable_widgets() {
88 sdump('D_WIDGETS',arg_dump(arguments));
89 var d = document; var idx = 0;
90 if (arguments[0].nodeName == '#document') {
91 idx = 1; d = arguments[0];
93 for (var i = idx; i < arguments.length; i++) {
94 if (typeof(arguments[i]) == 'object') {
95 sdump('D_WIDGETS',arguments[i] + '.disabled = true;\n');
96 arguments[i].disabled = true;
98 var w = d.getElementById( arguments[i] );
100 sdump('D_WIDGETS',w + '.disabled = true;\n');
107 // removes listitems from listboxes
108 function empty_listbox() {
109 sdump('D_WIDGETS',arg_dump(arguments));
111 if (arguments.length == 1) {
116 if (typeof(e) != 'object') { e = d.getElementById(e); }
118 if (typeof(e) != 'object') { sdump('D_WIDGETS','Failed on empty_listbox\n'); return; }
119 var nl = e.getElementsByTagName('listitem');
120 for (var i = 0; i < nl.length; i++) {
121 e.removeChild(nl[i]);
125 // removes all of an element's children
126 function empty_widget() {
127 sdump('D_WIDGETS',arg_dump(arguments));
129 if (arguments.length == 1) {
134 if (typeof(e) != 'object') { e = d.getElementById(e); }
136 if (typeof(e) != 'object') { sdump('D_WIDGETS','Failed on empty_widget\n'); return; }
137 while (e.lastChild) { e.removeChild(e.lastChild); }
141 // Treats each argument as an element to enable
142 function enable_widgets() {
143 sdump('D_WIDGETS',arg_dump(arguments));
144 var d = document; var idx = 0;
145 if (arguments[0].nodeName == '#document') {
146 idx = 1; d = arguments[0];
148 for (var i = idx; i < arguments.length; i++) {
149 if (typeof(arguments[i]) == 'object') {
150 sdump('D_WIDGETS',arguments[i] + '.disabled = false;\n');
151 arguments[i].disabled = false;
153 var w = d.getElementById( arguments[i] );
155 sdump('D_WIDGETS',w + '.disabled = false;\n');
162 // Originally used in volume.js after intercepting Enter presses on the keyboard.
163 // The first argument is the element to search for textboxes, and the second
164 // argument is the current textbox. This function finds the next textbox and
166 function fake_tab_for_textboxes() {
167 sdump('D_WIDGETS',arg_dump(arguments));
168 var d; var w; var current;
169 if (arguments.length == 2) {
171 current = arguments[1];
175 current = arguments[2];
176 if (typeof(w)!='object') { w = d.getElementById(w); }
178 var flag = false; var next_one;
179 sdump('D_WIDGETS', 'fake_tab_for_textboxes: Current ' + current + '\n');
180 var nl = w.getElementsByTagName('textbox');
181 //var nl = d.getElementsByTagName('textbox');
182 sdump('D_WIDGETS', 'fake_tab_for_textboxes: nl.length = ' + nl.length + '\n');
183 for (var i = 0; i < nl.length; i++) {
184 sdump('D_WIDGETS', 'fake_tab_for_textboxes: Considering ' + nl[i] + '...\n');
185 if (flag && !next_one) {
186 sdump('D_WIDGETS', 'fake_tab_for_textboxes: Setting next_one ' + nl[i] + '\n');
189 if (nl[i] === current) {
190 sdump('D_WIDGETS','fake_tab_for_textboxes: Found current\n');
195 sdump('D_WIDGETS','fake_tab_for_textboxes: Out of loop, Setting next_one ' + nl[0] + '\n');
199 next_one.focus(); next_one.select();
201 sdump('D_WIDGETS','fake_tab_for_textboxes: next_one not set\n');
206 // Not actually used anywhere. I'm not sure what this is :D
207 // Ah, looks like it could handle XUL trees and fieldmapper trees
208 // Ex. find( org_tree, function(o){return o.children();}, function(o){return (o.id == 'the winner');})
209 function find_tree_via_children() {
210 sdump('D_WIDGETS',arg_dump(arguments));
211 var d; var tree; var children_func; var find_func;
212 if (arguments.length == 3) {
214 children_func = arguments[1];
215 find_func = arguments[2];
219 children_func = arguments[2];
220 find_func = arguments[3];
221 if (typeof(tree)!='object') tree = d.getElementById(tree);
224 var t = find_func(tree); if (t) return t;
226 var c = children_func(tree);
228 for (var i = 0; i < c.length; i++) {
229 t = find_func( c[i] );
235 // Give this element focus
236 function focus_widget() {
237 sdump('D_WIDGETS',arg_dump(arguments));
238 var d = document; var e;
239 if (arguments.length == 1) {
245 if (typeof(e) == 'object') {
248 var w = d.getElementById(e);
249 if (w) { w.focus(); }
253 // Returns a list of selected treeitems from the specified tree
254 function get_list_from_tree_selection() {
255 sdump('D_WIDGETS',arg_dump(arguments));
256 var d = document; var tree_w;
257 if (arguments.length == 1) {
258 tree_w = arguments[0];
261 tree_w = arguments[1];
264 if (typeof(tree_w) != 'object') {
265 hitlist = d.getElementById(tree_w);
270 var start = new Object();
271 var end = new Object();
272 var numRanges = hitlist.view.selection.getRangeCount();
273 for (var t=0; t<numRanges; t++){
274 hitlist.view.selection.getRangeAt(t,start,end);
275 for (var v=start.value; v<=end.value; v++){
276 var i = hitlist.contentView.getItemAtIndex(v);
277 //sdump('D_WIDGETS',i.tagName + '\n');
284 // Make sure we a widget
285 function get_widget() {
286 sdump('D_WIDGETS',arg_dump(arguments));
287 var d = document; var e;
288 if (arguments.length == 1) {
294 if (typeof(e) == 'object') {
297 var w = d.getElementById(e);
303 // Increment a XUL progressmeter
304 function incr_progressmeter() {
305 sdump('D_WIDGETS',arg_dump(arguments));
306 var d = document; var meter; var increment;
307 if (arguments.length == 2) {
308 meter = arguments[0];
309 increment = arguments[1];
312 meter = arguments[1];
313 increment = arguments[2];
315 if (typeof(meter)!='object')
316 meter = d.getElementById(meter);
317 if (typeof(meter)!='object')
320 var real = meter.getAttribute('_real');
324 real = parseFloat( real ) + parseFloat( increment );
331 meter.setAttribute('_real',real);
332 meter.value = Math.ceil( real );
335 // Populate a treeitem row
336 function map_array_to_treecells_via_treeitem( cols, treeitem ) {
337 sdump('D_WIDGETS',arg_dump(arguments),{0:true});
338 var treerow = treeitem.firstChild;
339 for (var i = 0; i < treerow.childNodes.length; i++) {
340 var treecell = treerow.childNodes[i];
341 treecell.setAttribute('label',cols[i]);
342 sdump('D_WIDGETS','treeitem = ' + treeitem + ' treerow = ' + treerow + ' treecell = ' + treecell + ' cols[ ' + i + '] = ' + cols[i] + '\n');
346 // Simulates radio buttons with checkboxes. Include this in command event listeners
347 // for the pertinent textboxes. For any set of checkboxes that have the same 'group'
348 // attribute, only one can be checked at a time.
349 function radio_checkbox() {
350 sdump('D_WIDGETS',arg_dump(arguments));
351 var d = document; var ev;
352 if (arguments.length == 1) {
358 var target = ev.target;
359 var group = target.getAttribute('group');
361 var nl = d.getElementsByTagName('checkbox');
363 if (typeof(nl[i])=='object') {
365 var cgroup = c.getAttribute('group');
366 if (cgroup == group) {
371 target.checked = true;
373 sdump('D_WIDGETS','radio_checkbox: Checkbox must have a group attribute to find peers');
377 // simpler version of set_decks
378 function set_deck() {
379 sdump('D_WIDGETS',arg_dump(arguments));
380 var d = document; var deck; var idx;
381 if (arguments.length == 2) {
389 set_decks(d,{ deck : idx });
392 // Takes a hash with key:value => deck element id : page index
393 // Sets each deck to the corresponding index
394 function set_decks() {
395 sdump('D_WIDGETS',arg_dump(arguments));
396 var d = document; var params;
397 if (arguments.length == 1) {
398 params = arguments[0];
401 params = arguments[1];
403 for (var deck_id in params) {
405 if (typeof(deck) != 'object')
406 deck = d.getElementById( deck_id )
407 if (deck) deck.setAttribute( 'selectedIndex', params[deck_id] );
411 // For setting a widget's displayable text
412 function set_widget_value_for_display(e,v) {
413 sdump('D_WIDGETS',arg_dump(arguments,{1:true}));
414 if (v == null || v == undefined) v = '.....';
415 sdump('D_WIDGETS','e.tagName = ' + e.tagName + '\n');
416 sdump('D_WIDGETS','e.nodeName = ' + e.nodeName + '\n');
418 case 'textbox' : e.value = v; break;
419 case 'label' : e.setAttribute('value',v); break;
420 case 'image' : e.setAttribute('src',v); break;
421 default: try {e.setAttribute('value',v); e.value = v;} catch(E) {} break;
425 // swaps the values of two attributes for an element
426 function swap_attributes() {
427 sdump('D_WIDGETS',arg_dump(arguments));
428 var d = document; var e; var a1; var a2;
429 if (arguments.length == 3) {
438 if (typeof(e) != 'object') { e = d.getElementById(e); }
440 if (typeof(e) != 'object') { sdump('D_WIDGETS','Failed on swap_attributes\n'); return; }
441 var a1_v = e.getAttribute(a1);
442 var a2_v = e.getAttribute(a2);
443 e.setAttribute(a1,a2_v);
444 e.setAttribute(a2, a1_v);
445 sdump('D_WIDGETS','before: a1 = ' + a1_v + ' a2 = ' + a2_v + ' and ');
446 sdump('D_WIDGETS','after: a1 = ' + a2_v + ' a2 = ' + a1_v + '\n');
449 // Flips the hidden value for each row in a grid
450 function toggle_hidden_grid_rows() {
451 sdump('D_WIDGETS',arg_dump(arguments));
452 if (arguments.length == 1) {
458 if (typeof(grid) != 'object') {
459 grid = d.getElementById(grid);
461 if (!grid) { return; }
462 var rows = grid.lastChild; if (!rows) { return; }
463 for (var r = 0; r < rows.childNodes.length; r++ ) {
464 var row = rows.childNodes[r];
465 if (typeof(row) == 'object') {
466 //sdump('D_WIDGETS','toggle row = ' + row + '\n');
467 var hidden = row.getAttribute('hidden');
468 if (hidden == 'true') {
469 row.setAttribute('hidden','false');
471 row.setAttribute('hidden','true');
477 /* The first parameter is the id of the element to set, or an array of ids for elements to set in batch. The second parameter is an object containing the attribute/value pairs to assign to the element or elements */
478 function xul_setAttributes() {
479 sdump('D_WIDGETS',arg_dump(arguments));
480 var d = document; var el; var attrs;
481 if (arguments.length == 2) {
483 attrs = arguments[1];
487 attrs = arguments[2];
489 if (typeof(el) == 'object') {
491 var w = d.getElementById(e);
492 for (var a in attrs) {
493 w.setAttribute(a,attrs[a]);
497 var w = d.getElementById(el);
498 for (var a in attrs) {
499 w.setAttribute(a,attrs[a]);