1 dump('entering util/widgets.js\n');
3 if (typeof util == 'undefined') var util = {};
6 util.widgets.EXPORT_OK = [
15 'get_list_from_tree_selection',
16 'disable_accesskeys_in_node_and_children',
17 'enable_accesskeys_in_node_and_children',
22 'apply_vertical_tab_on_enter_handler',
29 util.widgets.EXPORT_TAGS = { ':all' : util.widgets.EXPORT_OK };
31 util.widgets.get = function(e) {
32 if (typeof e == 'object') {
35 return document.getElementById(e);
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++) {
47 util.widgets.save_xml = function (filename,node) {
48 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
50 JSAN.use('util.file'); var file = new util.file(filename);
52 node = util.widgets.get(node);
53 var xml = util.widgets.serialize_node(node);
55 file.write_content('truncate',xml);
59 util.widgets.serialize_node = function(node) {
60 var serializer = new XMLSerializer();
61 var xml = serializer.serializeToString(node);
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;
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'));
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'));
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);
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);
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);
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];
112 for (var j = 0; j < Number(indent); j++) {
113 //label = ' ' + label;
116 var menuitem = document.createElement('menuitem'); menupopup.appendChild(menuitem);
117 menuitem.setAttribute('label',label);
118 menuitem.setAttribute('value',value);
119 menuitem.setAttribute('style','font-family: monospace; padding-left: ' + indent + 'em;');
120 if ( (disabled == true) || (disabled == "true") ) {
121 menuitem.disabled = true;
122 menuitem.setAttribute('disabled','true');
125 menulist.setAttribute('value',dvalue);
129 util.widgets.make_grid = function( cols ) {
130 var grid = document.createElement('grid');
131 var columns = document.createElement('columns'); grid.appendChild(columns);
132 for (var i = 0; i < cols.length; i++) {
133 var column = document.createElement('column'); columns.appendChild(column);
134 for (var j in cols[i]) {
135 column.setAttribute(j,cols[i][j]);
138 var rows = document.createElement('rows'); grid.appendChild(rows);
142 util.widgets.get_list_from_tree_selection = function(tree_w) {
144 var tree = util.widgets.get(tree_w);
146 var start = new Object();
147 var end = new Object();
148 var numRanges = tree.view.selection.getRangeCount();
149 for (var t=0; t<numRanges; t++){
150 tree.view.selection.getRangeAt(t,start,end);
151 for (var v=start.value; v<=end.value; v++){
152 var i = tree.contentView.getItemAtIndex(v);
159 util.widgets.remove_children = function() {
160 for (var i = 0; i < arguments.length; i++) {
161 var e = util.widgets.get( arguments[i] );
162 while(e.lastChild) e.removeChild( e.lastChild );
166 util.widgets.disable_accesskeys_in_node_and_children = function( node ) {
167 if (node.getAttribute('accesskey')) {
168 node.setAttribute('oldaccesskey', node.getAttribute('accesskey'));
169 node.setAttribute('accesskey',''); node.accessKey = '';
171 for (var i = 0; i < node.childNodes.length; i++) {
172 util.widgets.disable_accesskeys_in_node_and_children( node.childNodes[i] );
174 dump('- node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
177 util.widgets.enable_accesskeys_in_node_and_children = function( node ) {
178 if (node.getAttribute('oldaccesskey')) {
179 node.setAttribute('accesskey', node.getAttribute('oldaccesskey'));
180 node.accessKey = node.getAttribute('oldaccesskey');
181 node.setAttribute('oldaccesskey','');
183 for (var i = 0; i < node.childNodes.length; i++) {
184 util.widgets.enable_accesskeys_in_node_and_children( node.childNodes[i] );
186 dump('+ node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
189 util.widgets.insertAfter = function(parent_node,new_node,sibling_node) {
190 sibling_node = sibling_node.nextSibling;
192 parent_node.insertBefore(new_node,sibling_node);
194 parent_node.appendChild(new_node);
198 util.widgets.apply_vertical_tab_on_enter_handler = function(node,onfailure) {
200 node.addEventListener(
203 dump('keypress: ev.target.tagName = ' + ev.target.tagName
204 + ' ev.target.nodeName = ' + ev.target.nodeName
205 + ' ev.keyCode = ' + ev.keyCode
206 + ' ev.charCode = ' + ev.charCode + '\n');
207 if (ev.keyCode == 13) {
208 dump('trying vertical tab\n');
209 if (util.widgets.vertical_tab(ev.target)) {
210 ev.preventDefault(); ev.stopPropagation();
213 if (typeof onfailure == 'function') return onfailure(ev);
225 util.widgets.vertical_tab = function(node) {
227 var rel_vert_pos = node.getAttribute('rel_vert_pos') || 0;
228 dump('vertical_tab -> node = ' + node.nodeName + ' rel_vert_pos = ' + rel_vert_pos + '\n');
230 var nl = document.getElementsByTagName( node.nodeName );
232 var found_self = false; var next_node; var max_rel_vert_pos = 0;
233 for (var i = 0; i < nl.length; i++) {
235 var candidate_node = nl[i];
236 var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
238 if (found_self && !next_node && (test_rel_vert_pos == rel_vert_pos) && !candidate_node.disabled) {
240 next_node = candidate_node;
243 if (candidate_node == node) found_self = true;
245 if (test_rel_vert_pos > max_rel_vert_pos) max_rel_vert_pos = test_rel_vert_pos;
248 dump('intermediate: next_node = ' + next_node + ' max_rel_vert_pos = ' + max_rel_vert_pos + '\n');
253 for (var next_pos = rel_vert_pos; next_pos <= max_rel_vert_pos; next_pos++) {
255 for (var i = 0; i < nl.length; i++) {
256 var candidate_node = nl[i];
257 var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
259 if (found_self && !next_node && (test_rel_vert_pos == next_pos) && !candidate_node.disabled ) {
260 next_node = candidate_node;
263 if (candidate_node == node) found_self = true;
280 util.widgets.stop_event = function(ev) {
285 util.widgets.set_text = function(n,t) {
286 n = util.widgets.get(n);
290 n.setAttribute('label',t);
293 n.setAttribute('value',t);
296 util.widgets.remove_children(n);
297 n.appendChild( document.createTextNode(t) );
300 n.value = t; n.setAttribute('value',t);
303 alert("FIXME: util.widgets.set_text doesn't know how to handle " + n.nodeName);
308 dump('exiting util/widgets.js\n');