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(d,e) {
8 sdump('D_WIDGETS',arg_dump(arguments));
9 if (typeof(e) != 'object') { e = d.getElementById(e); }
10 if (typeof(e) != 'object') { throw('typeof e != object : typeof e = ' + typeof(e)); }
13 if (!treechildren) { sdump('D_WIDGETS','No ' + id + ' to append to\n'); return; }
15 var treeitem = elem('treeitem'); treechildren.appendChild(treeitem);
16 var treerow = elem('treerow'); treeitem.appendChild(treerow);
17 for (var i = 2; i < arguments.length ; i++ ) {
20 { 'label': arguments[i], 'id' : 'treeitem_' + treeitem_id + '_' + i }
22 treerow.appendChild(treecell);
23 //sdump('D_WIDGETS','treecell.label = ' + arguments[i] + '\n');
28 // This was used in browse_list.js as a more flexible alternative to swap_attribute.
29 // The first argument is the element, the second argument is the pertinant attribute,
30 // and the third argument is an array of values to cycle through for setting the
31 // element's attribute. Ex: var toggle = cycle_attribute( target,'toggle',['1','2','3'] );
32 function cycle_attribute(d,e,a,v) {
33 sdump('D_WIDGETS',arg_dump(arguments));
35 if (typeof(e) != 'object') { e = d.getElementById(e); }
36 if (typeof(e) != 'object') { throw('typeof e != object : typeof e = ' + typeof(e)); }
37 if (!a) { throw('!a : a = ' + a); }
38 if (! e.getAttribute(a) ) { throw(' ! e.getAttribute(a) : a = ' + a); }
39 if (typeof(v) != 'object') { throw('typeof v != object : typeof v = ' + typeof(v)); }
41 var toggle = e.getAttribute(a);
43 sdump('D_WIDGETS','cycling ' + a + ' on ' + e.getAttribute('id') + ' to ');
44 for (var i = 0; i < v.length; i++) {
46 e.setAttribute(a,v[i]);
47 sdump('D_WIDGETS',v[i] + '\n');
55 e.setAttribute(a,v[0]);
56 sdump('D_WIDGETS',v[0] + '\n');
59 throw('current value not in list');
62 sdump('D_WIDGETS','cycle_attribute error: ' + js2JSON(E) + '\n');
63 sdump('D_WIDGETS','null\n');
68 // Treats each argument as an element to disable
69 function disable_widgets(d) {
70 sdump('D_WIDGETS',arg_dump(arguments));
71 for (var i = 1; i < arguments.length; i++) {
72 if (typeof(arguments[i]) == 'object') {
73 sdump('D_WIDGETS',arguments[i] + '.disabled = true;\n');
74 arguments[i].disabled = true;
76 var w = d.getElementById( arguments[i] );
78 sdump('D_WIDGETS',w + '.disabled = true;\n');
85 // removes listitems from listboxes
86 function empty_listbox(d,e) {
87 sdump('D_WIDGETS',arg_dump(arguments));
88 if (typeof(e) != 'object') { e = d.getElementById(e); }
89 if (typeof(e) != 'object') { sdump('D_WIDGETS','Failed on empty_listbox\n'); return; }
90 var nl = e.getElementsByTagName('listitem');
91 for (var i = 0; i < nl.length; i++) {
96 // removes all of an element's children
97 function empty_widget(d,e) {
98 sdump('D_WIDGETS',arg_dump(arguments));
99 if (typeof(e) != 'object') { e = d.getElementById(e); }
100 if (typeof(e) != 'object') { sdump('D_WIDGETS','Failed on empty_widget\n'); return; }
101 while (e.lastChild) { e.removeChild(e.lastChild); }
105 // Treats each argument as an element to enable
106 function enable_widgets(d) {
107 sdump('D_WIDGETS',arg_dump(arguments));
108 for (var i = 1; i < arguments.length; i++) {
109 if (typeof(arguments[i]) == 'object') {
110 sdump('D_WIDGETS',arguments[i] + '.disabled = false;\n');
111 arguments[i].disabled = false;
113 var w = d.getElementById( arguments[i] );
115 sdump('D_WIDGETS',w + '.disabled = false;\n');
122 // Originally used in volume.js after intercepting Enter presses on the keyboard.
123 // The first argument is the element to search for textboxes, and the second
124 // argument is the current textbox. This function finds the next textbox and
126 function fake_tab_for_textboxes(d,w,current) {
127 sdump('D_WIDGETS',arg_dump(arguments));
128 var flag = false; var next_one;
129 if (typeof(w)!='object') {
130 w = d.getElementById(w);
132 sdump('D_WIDGETS', 'fake_tab_for_textboxes: Current ' + current + '\n');
133 var nl = w.getElementsByTagName('textbox');
134 //var nl = d.getElementsByTagName('textbox');
135 sdump('D_WIDGETS', 'fake_tab_for_textboxes: nl.length = ' + nl.length + '\n');
136 for (var i = 0; i < nl.length; i++) {
137 sdump('D_WIDGETS', 'fake_tab_for_textboxes: Considering ' + nl[i] + '...\n');
138 if (flag && !next_one) {
139 sdump('D_WIDGETS', 'fake_tab_for_textboxes: Setting next_one ' + nl[i] + '\n');
142 if (nl[i] === current) {
143 sdump('D_WIDGETS','fake_tab_for_textboxes: Found current\n');
148 sdump('D_WIDGETS','fake_tab_for_textboxes: Out of loop, Setting next_one ' + nl[0] + '\n');
152 next_one.focus(); next_one.select();
154 sdump('D_WIDGETS','fake_tab_for_textboxes: next_one not set\n');
159 // Not actually used anywhere. I'm not sure what this is :D
160 // Ah, looks like it could handle XUL trees and fieldmapper trees
161 // Ex. find( org_tree, function(o){return o.children();}, function(o){return (o.id == 'the winner');})
162 function find_tree_via_children(d,tree,children_func,find_func) {
163 sdump('D_WIDGETS',arg_dump(arguments));
164 if (typeof(tree)!='object') tree = d.getElementById(tree);
166 var t = find_func(tree); if (t) return t;
168 var c = children_func(tree);
170 for (var i = 0; i < c.length; i++) {
171 t = find_func( c[i] );
177 // Give this element focus
178 function focus_widget(d,e) {
179 sdump('D_WIDGETS',arg_dump(arguments));
180 if (typeof(e) == 'object') {
183 var w = d.getElementById(e);
184 if (w) { w.focus(); }
188 // Returns a list of selected treeitems from the specified tree
189 function get_list_from_tree_selection(d,tree_w) {
190 sdump('D_WIDGETS',arg_dump(arguments));
191 sdump('D_WIDGETS','entering get_list_from_tree...\n');
193 if (typeof(tree_w) != 'object') {
194 hitlist = d.getElementById(tree_w);
199 var start = new Object();
200 var end = new Object();
201 var numRanges = hitlist.view.selection.getRangeCount();
202 for (var t=0; t<numRanges; t++){
203 hitlist.view.selection.getRangeAt(t,start,end);
204 for (var v=start.value; v<=end.value; v++){
205 var i = hitlist.contentView.getItemAtIndex(v);
206 //sdump('D_WIDGETS',i.tagName + '\n');
210 sdump('D_WIDGETS','leaving get_list_from_tree...\n');
214 // Make sure we a widget
215 function get_widget(d,e) {
216 sdump('D_WIDGETS',arg_dump(arguments));
217 if (typeof(e) == 'object') {
220 var w = d.getElementById(e);
226 // Increment a XUL progressmeter
227 function incr_progressmeter(d,meter,increment) {
228 sdump('D_WIDGETS',arg_dump(arguments));
229 if (typeof(meter)!='object')
230 meter = d.getElementById(meter);
231 if (typeof(meter)!='object')
234 var real = meter.getAttribute('_real');
238 real = parseFloat( real ) + parseFloat( increment );
245 meter.setAttribute('_real',real);
246 meter.value = Math.ceil( real );
249 // Populate a treeitem row
250 function map_array_to_treecells_via_treeitem( cols, treeitem ) {
251 sdump('D_WIDGETS',arg_dump(arguments),{0:true});
252 var treerow = treeitem.firstChild;
253 for (var i = 0; i < treerow.childNodes.length; i++) {
254 var treecell = treerow.childNodes[i];
255 treecell.setAttribute('label',cols[i]);
256 sdump('D_WIDGETS','treeitem = ' + treeitem + ' treerow = ' + treerow + ' treecell = ' + treecell + ' cols[ ' + i + '] = ' + cols[i] + '\n');
260 // Simulates radio buttons with checkboxes. Include this in command event listeners
261 // for the pertinent textboxes. For any set of checkboxes that have the same 'group'
262 // attribute, only one can be checked at a time.
263 function radio_checkbox(d,ev) {
264 sdump('D_WIDGETS',arg_dump(arguments));
265 var target = ev.target;
266 var group = target.getAttribute('group');
268 var nl = d.getElementsByTagName('checkbox');
270 if (typeof(nl[i])=='object') {
272 var cgroup = c.getAttribute('group');
273 if (cgroup == group) {
278 target.checked = true;
280 sdump('D_WIDGETS','radio_checkbox: Checkbox must have a group attribute to find peers');
284 // simpler version of set_decks
285 function set_deck(d,deck,idx) {
286 sdump('D_WIDGETS',arg_dump(arguments));
287 set_decks(d,{ deck : idx });
290 // Takes a hash with key:value => deck element id : page index
291 // Sets each deck to the corresponding index
292 function set_decks(d,params) {
293 sdump('D_WIDGETS',arg_dump(arguments));
294 for (var deck_id in params) {
296 if (typeof(deck) != 'object')
297 deck = d.getElementById( deck_id )
298 if (deck) deck.setAttribute( 'selectedIndex', params[deck_id] );
302 // swaps the values of two attributes for an element
303 function swap_attributes(d,e,a1,a2) {
304 sdump('D_WIDGETS',arg_dump(arguments));
305 if (typeof(e) != 'object') { e = d.getElementById(e); }
306 if (typeof(e) != 'object') { sdump('D_WIDGETS','Failed on swap_attributes\n'); return; }
307 var a1_v = e.getAttribute(a1);
308 var a2_v = e.getAttribute(a2);
309 e.setAttribute(a1,a2_v);
310 e.setAttribute(a2, a1_v);
311 sdump('D_WIDGETS','before: a1 = ' + a1_v + ' a2 = ' + a2_v + ' and ');
312 sdump('D_WIDGETS','after: a1 = ' + a2_v + ' a2 = ' + a1_v + '\n');
315 // Flips the hidden value for each row in a grid
316 function toggle_hidden_grid_rows(d,grid) {
317 sdump('D_WIDGETS',arg_dump(arguments));
318 if (typeof(grid) != 'object') {
319 grid = d.getElementById(grid);
321 if (!grid) { return; }
322 var rows = grid.lastChild; if (!rows) { return; }
323 for (var r = 0; r < rows.childNodes.length; r++ ) {
324 var row = rows.childNodes[r];
325 if (typeof(row) == 'object') {
326 //sdump('D_WIDGETS','toggle row = ' + row + '\n');
327 var hidden = row.getAttribute('hidden');
328 if (hidden == 'true') {
329 row.setAttribute('hidden','false');
331 row.setAttribute('hidden','true');
337 /* 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 */
338 function xul_setAttributes(d,el,attrs) {
339 sdump('D_WIDGETS',arg_dump(arguments));
340 if (typeof(el) == 'object') {
342 var w = d.getElementById(e);
343 for (var a in attrs) {
344 w.setAttribute(a,attrs[a]);
348 var w = d.getElementById(el);
349 for (var a in attrs) {
350 w.setAttribute(a,attrs[a]);