1 dump('entering util/widgets.js\n');
3 if (typeof util == 'undefined') var util = {};
6 util.widgets.EXPORT_OK = [
7 'get_list_from_tree_selection',
8 'disable_accesskeys_in_node_and_children',
9 'enable_accesskeys_in_node_and_children',
14 'apply_vertical_tab_on_enter_handler',
17 util.widgets.EXPORT_TAGS = { ':all' : util.widgets.EXPORT_OK };
19 util.widgets.make_menulist = function( items ) {
20 var menulist = document.createElement('menulist');
21 var menupopup = document.createElement('menupopup'); menulist.appendChild(menupopup);
22 for (var i = 0; i < items.length; i++) {
23 var menuitem = document.createElement('menuitem'); menupopup.appendChild(menuitem);
24 menuitem.setAttribute('label',items[i][0]);
25 menuitem.setAttribute('value',items[i][1]);
30 util.widgets.make_grid = function( cols ) {
31 var grid = document.createElement('grid');
32 var columns = document.createElement('columns'); grid.appendChild(columns);
33 for (var i = 0; i < cols.length; i++) {
34 var column = document.createElement('column'); columns.appendChild(column);
35 for (var j in cols[i]) {
36 column.setAttribute(j,cols[i][j]);
39 var rows = document.createElement('rows'); grid.appendChild(rows);
43 util.widgets.get_list_from_tree_selection = function(tree_w) {
45 if (typeof(tree_w) != 'object') {
46 tree = document.getElementById(tree_w);
51 var start = new Object();
52 var end = new Object();
53 var numRanges = tree.view.selection.getRangeCount();
54 for (var t=0; t<numRanges; t++){
55 tree.view.selection.getRangeAt(t,start,end);
56 for (var v=start.value; v<=end.value; v++){
57 var i = tree.contentView.getItemAtIndex(v);
64 util.widgets.remove_children = function(w) {
65 if (typeof w != 'object') w = document.getElementById(w);
66 while(w.lastChild) w.removeChild( w.lastChild );
69 util.widgets.disable_accesskeys_in_node_and_children = function( node ) {
70 if (node.getAttribute('accesskey')) {
71 node.setAttribute('oldaccesskey', node.getAttribute('accesskey'));
72 node.setAttribute('accesskey',''); node.accessKey = '';
74 for (var i = 0; i < node.childNodes.length; i++) {
75 util.widgets.disable_accesskeys_in_node_and_children( node.childNodes[i] );
77 dump('- node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
80 util.widgets.enable_accesskeys_in_node_and_children = function( node ) {
81 if (node.getAttribute('oldaccesskey')) {
82 node.setAttribute('accesskey', node.getAttribute('oldaccesskey'));
83 node.accessKey = node.getAttribute('oldaccesskey');
84 node.setAttribute('oldaccesskey','');
86 for (var i = 0; i < node.childNodes.length; i++) {
87 util.widgets.enable_accesskeys_in_node_and_children( node.childNodes[i] );
89 dump('+ node = <' + node.id + '> accesskey = <' + node.accessKey + '> accesskey = <' + node.getAttribute('accesskey') + '> oldaccesskey = <' + node.getAttribute('oldaccesskey') + '>\n');
92 util.widgets.insertAfter = function(parent_node,new_node,sibling_node) {
93 sibling_node = sibling_node.nextSibling;
95 parent_node.insertBefore(new_node,sibling_node);
97 parent_node.appendChild(new_node);
101 util.widgets.apply_vertical_tab_on_enter_handler = function(node) {
103 node.addEventListener(
106 dump('keypress: ev.target.tagName = ' + ev.target.tagName
107 + ' ev.target.nodeName = ' + ev.target.nodeName
108 + ' ev.keyCode = ' + ev.keyCode
109 + ' ev.charCode = ' + ev.charCode + '\n');
110 if (ev.keyCode == 13) {
111 dump('trying vertical tab\n');
112 util.widgets.vertical_tab(ev.target);
113 ev.preventDefault(); ev.stopPropagation();
124 util.widgets.vertical_tab = function(node) {
126 var rel_vert_pos = node.getAttribute('rel_vert_pos') || 0;
127 dump('vertical_tab -> node = ' + node.nodeName + ' rel_vert_pos = ' + rel_vert_pos + '\n');
129 var nl = document.getElementsByTagName( node.nodeName );
131 var found_self = false; var next_node; var max_rel_vert_pos = 0;
132 for (var i = 0; i < nl.length; i++) {
134 var candidate_node = nl[i];
135 var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
137 if (found_self && !next_node && (test_rel_vert_pos == rel_vert_pos) && !candidate_node.disabled) {
139 next_node = candidate_node;
142 if (candidate_node == node) found_self = true;
144 if (test_rel_vert_pos > max_rel_vert_pos) max_rel_vert_pos = test_rel_vert_pos;
147 dump('intermediate: next_node = ' + next_node + ' max_rel_vert_pos = ' + max_rel_vert_pos + '\n');
152 for (var next_pos = rel_vert_pos; next_pos <= max_rel_vert_pos; next_pos++) {
154 for (var i = 0; i < nl.length; i++) {
155 var candidate_node = nl[i];
156 var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0;
158 if (found_self && !next_node && (test_rel_vert_pos == next_pos) && !candidate_node.disabled ) {
159 next_node = candidate_node;
162 if (candidate_node == node) found_self = true;
179 dump('exiting util/widgets.js\n');