1 dump('entering util/widgets.js\n');
3 if (typeof util == 'undefined') var util = {};
6 util.widgets.EXPORT_OK = [
11 'get_list_from_tree_selection',
12 'disable_accesskeys_in_node_and_children',
13 'enable_accesskeys_in_node_and_children',
18 'apply_vertical_tab_on_enter_handler',
23 util.widgets.EXPORT_TAGS = { ':all' : util.widgets.EXPORT_OK };
25 util.widgets.get = function(e) {
26 if (typeof e == 'object') {
29 return document.getElementById(e);
33 util.widgets.store_disable = function() {
34 for (var i = 0; i < arguments.length; i++) {
35 var e = util.widgets.get( arguments[i] );
36 e.setAttribute('_disabled',e.getAttribute('disabled'));
40 util.widgets.restore_disable = function() {
41 for (var i = 0; i < arguments.length; i++) {
42 var e = util.widgets.get( arguments[i] );
43 e.setAttribute('disabled',e.getAttribute('_disabled'));
47 util.widgets.disable = function() {
48 for (var i = 0; i < arguments.length; i++) {
49 var e = util.widgets.get( arguments[i] );
50 e.setAttribute('disabled',true);
54 util.widgets.click = function(e) {
55 var evt = document.createEvent("MouseEvent");
56 evt.initMouseEvent( "click", true, true, window, 0, 0, 0, 0, 0, false,false,false,false,0,null);
57 util.widgets.get(e).dispatchEvent(evt);
60 util.widgets.dispatch = function(ev,el) {
61 var evt = document.createEvent("Events");
62 //var evt = document.createEvent();
63 evt.initEvent( ev, true, true );
64 util.widgets.get(el).dispatchEvent(evt);
67 util.widgets.make_menulist = function( items, dvalue ) {
68 var menulist = document.createElement('menulist');
69 var menupopup = document.createElement('menupopup'); menulist.appendChild(menupopup);
70 for (var i = 0; i < items.length; i++) {
71 var label = items[i][0]; var value = items[i][1]; var disabled = items[i][2]; var indent = items[i][3];
73 for (var j = 0; j < Number(indent); j++) {
77 var menuitem = document.createElement('menuitem'); menupopup.appendChild(menuitem);
78 menuitem.setAttribute('label',label);
79 menuitem.setAttribute('value',value);
81 menuitem.disabled = true;
82 menuitem.setAttribute('disabled','true');
85 menulist.setAttribute('value',dvalue);
89 util.widgets.make_grid = function( cols ) {
90 var grid = document.createElement('grid');
91 var columns = document.createElement('columns'); grid.appendChild(columns);
92 for (var i = 0; i < cols.length; i++) {
93 var column = document.createElement('column'); columns.appendChild(column);
94 for (var j in cols[i]) {
95 column.setAttribute(j,cols[i][j]);
98 var rows = document.createElement('rows'); grid.appendChild(rows);
102 util.widgets.get_list_from_tree_selection = function(tree_w) {
104 var tree = util.widgets.get(tree_w);
106 var start = new Object();
107 var end = new Object();
108 var numRanges = tree.view.selection.getRangeCount();
109 for (var t=0; t<numRanges; t++){
110 tree.view.selection.getRangeAt(t,start,end);
111 for (var v=start.value; v<=end.value; v++){
112 var i = tree.contentView.getItemAtIndex(v);
119 util.widgets.remove_children = function() {
120 for (var i = 0; i < arguments.length; i++) {
121 var e = util.widgets.get( arguments[i] );
122 while(e.lastChild) e.removeChild( e.lastChild );
126 util.widgets.disable_accesskeys_in_node_and_children = function( node ) {
127 if (node.getAttribute('accesskey')) {
128 node.setAttribute('oldaccesskey', node.getAttribute('accesskey'));
129 node.setAttribute('accesskey',''); node.accessKey = '';
131 for (var i = 0; i < node.childNodes.length; i++) {
132 util.widgets.disable_accesskeys_in_node_and_children( node.childNodes[i] );
134 dump('- node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
137 util.widgets.enable_accesskeys_in_node_and_children = function( node ) {
138 if (node.getAttribute('oldaccesskey')) {
139 node.setAttribute('accesskey', node.getAttribute('oldaccesskey'));
140 node.accessKey = node.getAttribute('oldaccesskey');
141 node.setAttribute('oldaccesskey','');
143 for (var i = 0; i < node.childNodes.length; i++) {
144 util.widgets.enable_accesskeys_in_node_and_children( node.childNodes[i] );
146 dump('+ node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
149 util.widgets.insertAfter = function(parent_node,new_node,sibling_node) {
150 sibling_node = sibling_node.nextSibling;
152 parent_node.insertBefore(new_node,sibling_node);
154 parent_node.appendChild(new_node);
158 util.widgets.apply_vertical_tab_on_enter_handler = function(node,onfailure) {
160 node.addEventListener(
163 dump('keypress: ev.target.tagName = ' + ev.target.tagName
164 + ' ev.target.nodeName = ' + ev.target.nodeName
165 + ' ev.keyCode = ' + ev.keyCode
166 + ' ev.charCode = ' + ev.charCode + '\n');
167 if (ev.keyCode == 13) {
168 dump('trying vertical tab\n');
169 if (util.widgets.vertical_tab(ev.target)) {
170 ev.preventDefault(); ev.stopPropagation();
173 if (typeof onfailure == 'function') onfailure(ev);
174 return util.widgets.vertical_tab(ev.target);
185 util.widgets.vertical_tab = function(node) {
187 var rel_vert_pos = node.getAttribute('rel_vert_pos') || 0;
188 dump('vertical_tab -> node = ' + node.nodeName + ' rel_vert_pos = ' + rel_vert_pos + '\n');
190 var nl = document.getElementsByTagName( node.nodeName );
192 var found_self = false; var next_node; var max_rel_vert_pos = 0;
193 for (var i = 0; i < nl.length; i++) {
195 var candidate_node = nl[i];
196 var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
198 if (found_self && !next_node && (test_rel_vert_pos == rel_vert_pos) && !candidate_node.disabled) {
200 next_node = candidate_node;
203 if (candidate_node == node) found_self = true;
205 if (test_rel_vert_pos > max_rel_vert_pos) max_rel_vert_pos = test_rel_vert_pos;
208 dump('intermediate: next_node = ' + next_node + ' max_rel_vert_pos = ' + max_rel_vert_pos + '\n');
213 for (var next_pos = rel_vert_pos; next_pos <= max_rel_vert_pos; next_pos++) {
215 for (var i = 0; i < nl.length; i++) {
216 var candidate_node = nl[i];
217 var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
219 if (found_self && !next_node && (test_rel_vert_pos == next_pos) && !candidate_node.disabled ) {
220 next_node = candidate_node;
223 if (candidate_node == node) found_self = true;
241 dump('exiting util/widgets.js\n');