]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/chrome/content/util/widgets.js
eliminate warnings in js console
[Evergreen.git] / Open-ILS / xul / staff_client / chrome / content / util / widgets.js
1 dump('entering util/widgets.js\n');
2
3 if (typeof util == 'undefined') var util = {};
4 util.widgets = {};
5
6 util.widgets.EXPORT_OK  = [ 
7         'get',
8         'apply',
9         'save_xml',
10         'serialize_node',
11         'xul_from_string',
12         'store_disable',
13         'restore_disable',
14         'disable',
15         'get_list_from_tree_selection',
16         'disable_accesskeys_in_node_and_children', 
17         'enable_accesskeys_in_node_and_children', 
18         'remove_children',
19         'make_grid',
20         'make_menulist',
21         'insertAfter',
22         'apply_vertical_tab_on_enter_handler',
23         'vertical_tab',
24         'click',
25         'dispatch',
26         'stop_event',
27         'set_text',
28 ];
29 util.widgets.EXPORT_TAGS        = { ':all' : util.widgets.EXPORT_OK };
30
31 util.widgets.get = function(e) {
32         if (typeof e == 'object') {
33                 return e;
34         } else {
35                 return document.getElementById(e);
36         }
37 }
38
39 util.widgets.apply = function(e,attr,attr_value,f) {
40         var node = util.widgets.get(e);
41         var nl = node.getElementsByAttribute(attr,attr_value);
42         for (var i = 0; i < nl.length; i++) {
43                 f( nl[i] );
44         }
45 }
46
47 util.widgets.save_xml = function (filename,node) {
48         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
49
50         JSAN.use('util.file'); var file = new util.file(filename);
51
52         node = util.widgets.get(node);
53         var xml = util.widgets.serialize_node(node);
54
55         file.write_content('truncate',xml);
56         file.close();
57 }
58
59 util.widgets.serialize_node = function(node) {
60         var serializer = new XMLSerializer();
61         var xml = serializer.serializeToString(node);
62         return xml;
63 }
64
65 util.widgets.xul_from_string = function(xml) {
66         var parser = new DOMParser(); 
67         var doc = parser.parseFromString(xml, "text/xml"); 
68         var node = doc.documentElement;
69         return node;
70 }
71
72 util.widgets.store_disable = function() {
73         for (var i = 0; i < arguments.length; i++) {
74                 var e = util.widgets.get( arguments[i] );
75                 e.setAttribute('_disabled',e.getAttribute('disabled'));
76         }
77 }
78
79 util.widgets.restore_disable = function() {
80         for (var i = 0; i < arguments.length; i++) {
81                 var e = util.widgets.get( arguments[i] );
82                 e.setAttribute('disabled',e.getAttribute('_disabled'));
83         }
84 }
85
86 util.widgets.disable = function() {
87         for (var i = 0; i < arguments.length; i++) {
88                 var e = util.widgets.get( arguments[i] );
89                 e.setAttribute('disabled',true);
90         }
91 }
92
93 util.widgets.click = function(e) {
94         var evt = document.createEvent("MouseEvent");
95         evt.initMouseEvent( "click", true, true, window, 0, 0, 0, 0, 0, false,false,false,false,0,null);
96         util.widgets.get(e).dispatchEvent(evt);
97 }
98
99 util.widgets.dispatch = function(ev,el) {
100         var evt = document.createEvent("Events");
101         //var evt = document.createEvent();
102         evt.initEvent( ev, true, true );
103         util.widgets.get(el).dispatchEvent(evt);
104 }
105
106 util.widgets.make_menulist = function( items, dvalue ) {
107         var menulist = document.createElement('menulist');
108         var menupopup = document.createElement('menupopup'); menulist.appendChild(menupopup);
109         for (var i = 0; i < items.length; i++) {
110                 var label = items[i][0]; var value = items[i][1]; var disabled = items[i][2]; var indent = items[i][3];
111                 if (indent) {
112                         for (var j = 0; j < Number(indent); j++) {
113                                 //label = ' ' + label;
114                         }
115                 }
116                 var menuitem = document.createElement('menuitem'); menupopup.appendChild(menuitem);
117                 menuitem.setAttribute('label',label);
118                 menuitem.setAttribute('value',value);
119                 if (ident) {
120                         menuitem.setAttribute('style','font-family: monospace; padding-left: ' + indent + 'em;');
121                 } else {
122                         menuitem.setAttribute('style','font-family: monospace;');
123                 }
124                 if ( (disabled == true) || (disabled == "true") ) {
125                         menuitem.disabled = true;
126                         menuitem.setAttribute('disabled','true');
127                 }
128         }
129         menulist.setAttribute('value',dvalue);
130         return menulist;
131 }
132
133 util.widgets.make_grid = function( cols ) {
134         var grid = document.createElement('grid');
135         var columns = document.createElement('columns'); grid.appendChild(columns);
136         for (var i = 0; i < cols.length; i++) {
137                 var column = document.createElement('column'); columns.appendChild(column);
138                 for (var j in cols[i]) {
139                         column.setAttribute(j,cols[i][j]);
140                 }
141         }
142         var rows = document.createElement('rows'); grid.appendChild(rows);
143         return grid;
144 }
145
146 util.widgets.get_list_from_tree_selection = function(tree_w) {
147         var hitlist;
148         var tree = util.widgets.get(tree_w);
149         var list = [];
150         var start = new Object();
151         var end = new Object();
152         var numRanges = tree.view.selection.getRangeCount();
153         for (var t=0; t<numRanges; t++){
154                 tree.view.selection.getRangeAt(t,start,end);
155                 for (var v=start.value; v<=end.value; v++){
156                         var i = tree.contentView.getItemAtIndex(v);
157                         list.push( i );
158                 }
159         }
160         return list;
161 }
162
163 util.widgets.remove_children = function() {
164         for (var i = 0; i < arguments.length; i++) {
165                 var e = util.widgets.get( arguments[i] );
166                 while(e.lastChild) e.removeChild( e.lastChild );
167         }
168 }
169
170 util.widgets.disable_accesskeys_in_node_and_children = function( node ) {
171         return; /* what was I doing here? */
172         if (node.getAttribute('accesskey')) {
173                 node.setAttribute('oldaccesskey', node.getAttribute('accesskey'));
174                 node.setAttribute('accesskey',''); node.accessKey = '';
175         }
176         for (var i = 0; i < node.childNodes.length; i++) {
177                 util.widgets.disable_accesskeys_in_node_and_children( node.childNodes[i] );
178         }
179         dump('- node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
180 }
181
182 util.widgets.enable_accesskeys_in_node_and_children = function( node ) {
183         return; /* what was I doing here? */
184         if (node.getAttribute('oldaccesskey')) {
185                 node.setAttribute('accesskey', node.getAttribute('oldaccesskey'));
186                 node.accessKey = node.getAttribute('oldaccesskey'); 
187                 node.setAttribute('oldaccesskey','');
188         }
189         for (var i = 0; i < node.childNodes.length; i++) {
190                 util.widgets.enable_accesskeys_in_node_and_children( node.childNodes[i] );
191         }
192         dump('+ node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
193 }
194
195 util.widgets.insertAfter = function(parent_node,new_node,sibling_node) {
196         sibling_node = sibling_node.nextSibling;
197         if (sibling_node) {
198                 parent_node.insertBefore(new_node,sibling_node);
199         } else {
200                 parent_node.appendChild(new_node);
201         }
202 }
203
204 util.widgets.apply_vertical_tab_on_enter_handler = function(node,onfailure) {
205         try {
206                 node.addEventListener(
207                         'keypress',
208                         function(ev) {
209                                 dump('keypress: ev.target.tagName = ' + ev.target.tagName 
210                                         + ' ev.target.nodeName = ' + ev.target.nodeName 
211                                         + ' ev.keyCode = ' + ev.keyCode 
212                                         + ' ev.charCode = ' + ev.charCode + '\n');
213                                 if (ev.keyCode == 13) {
214                                         dump('trying vertical tab\n');
215                                         if (util.widgets.vertical_tab(ev.target)) {
216                                                 ev.preventDefault(); ev.stopPropagation();
217                                                 return true;
218                                         } else {
219                                                 if (typeof onfailure == 'function') return onfailure(ev);
220                                                 return false;
221                                         }
222                                 }
223                         },
224                         false
225                 );
226         } catch(E) {
227                 alert(E);
228         }
229 }
230
231 util.widgets.vertical_tab = function(node) {
232         try {
233                 var rel_vert_pos = node.getAttribute('rel_vert_pos') || 0;
234                 dump('vertical_tab -> node = ' + node.nodeName + ' rel_vert_pos = ' + rel_vert_pos + '\n');
235
236                 var nl = document.getElementsByTagName( node.nodeName );
237
238                 var found_self = false; var next_node; var max_rel_vert_pos = 0;
239                 for (var i = 0; i < nl.length; i++) {
240
241                         var candidate_node = nl[i];
242                         var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
243
244                         if (found_self && !next_node && (test_rel_vert_pos == rel_vert_pos) && !candidate_node.disabled) {
245                         
246                                 next_node = candidate_node;
247
248                         }
249                         if (candidate_node == node) found_self = true;
250
251                         if (test_rel_vert_pos > max_rel_vert_pos) max_rel_vert_pos = test_rel_vert_pos;
252                 }
253
254                 dump('intermediate: next_node = ' + next_node + ' max_rel_vert_pos = ' + max_rel_vert_pos + '\n');
255
256                 if (!next_node) {
257
258                         found_self = false;
259                         for (var next_pos = rel_vert_pos; next_pos <= max_rel_vert_pos; next_pos++) {
260
261                                 for (var i = 0; i < nl.length; i++) {
262                                         var candidate_node = nl[i];
263                                         var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
264
265                                         if (found_self && !next_node && (test_rel_vert_pos == next_pos) && !candidate_node.disabled ) {
266                                                 next_node = candidate_node;
267                                         }
268
269                                         if (candidate_node == node) found_self = true;
270                                 }
271
272                         }
273
274                 }
275
276                 if (next_node) {
277                         dump('focusing\n');
278                         next_node.focus();
279                 }
280                 return next_node;
281         } catch(E) {
282                 alert(E);
283         }
284 }
285
286 util.widgets.stop_event = function(ev) {
287         ev.preventDefault();
288         return false;
289 }
290
291 util.widgets.set_text = function(n,t) {
292         n = util.widgets.get(n);
293         switch(n.nodeName) {
294                 case 'button' :
295                 case 'caption' :
296                         n.setAttribute('label',t);
297                 break;
298                 case 'label' : 
299                         n.setAttribute('value',t); 
300                 break;
301                 case 'description' : 
302                         util.widgets.remove_children(n); 
303                         n.appendChild( document.createTextNode(t) );
304                 break;
305                 case 'textbox' :
306                         n.value = t; n.setAttribute('value',t);
307                 break;
308                 default:
309                         alert("FIXME: util.widgets.set_text doesn't know how to handle " + n.nodeName);
310                 break;
311         }
312 }
313
314 dump('exiting util/widgets.js\n');