From 89a0649b4c4d86ddf5d46e16c4917323a29cb2a9 Mon Sep 17 00:00:00 2001 From: phasefx Date: Tue, 24 Jan 2006 05:09:28 +0000 Subject: [PATCH] vertical tab on enter git-svn-id: svn://svn.open-ils.org/ILS/trunk@2806 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../chrome/content/evergreen/util/widgets.js | 80 +++++++++++++++++++ .../server/cat/volume_copy_creator.xul | 5 +- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/Open-ILS/xul/staff_client/chrome/content/evergreen/util/widgets.js b/Open-ILS/xul/staff_client/chrome/content/evergreen/util/widgets.js index 6c9647238b..2554ffad3e 100644 --- a/Open-ILS/xul/staff_client/chrome/content/evergreen/util/widgets.js +++ b/Open-ILS/xul/staff_client/chrome/content/evergreen/util/widgets.js @@ -11,6 +11,8 @@ util.widgets.EXPORT_OK = [ 'make_grid', 'make_menulist', 'insertAfter', + 'apply_vertical_tab_on_enter_handler', + 'vertical_tab', ]; util.widgets.EXPORT_TAGS = { ':all' : util.widgets.EXPORT_OK }; @@ -96,4 +98,82 @@ util.widgets.insertAfter = function(parent_node,new_node,sibling_node) { } } +util.widgets.apply_vertical_tab_on_enter_handler = function(node) { + try { + node.addEventListener( + 'keypress', + function(ev) { + dump('keypress: ev.target.tagName = ' + ev.target.tagName + + ' ev.target.nodeName = ' + ev.target.nodeName + + ' ev.keyCode = ' + ev.keyCode + + ' ev.charCode = ' + ev.charCode + '\n'); + if (ev.keyCode == 13) { + dump('trying vertical tab\n'); + util.widgets.vertical_tab(ev.target); + ev.preventDefault(); ev.stopPropagation(); + return true; + } + }, + false + ); + } catch(E) { + alert(E); + } +} + +util.widgets.vertical_tab = function(node) { + try { + var rel_vert_pos = node.getAttribute('rel_vert_pos') || 0; + dump('vertical_tab -> node = ' + node.nodeName + ' rel_vert_pos = ' + rel_vert_pos + '\n'); + + var nl = document.getElementsByTagName( node.nodeName ); + + var found_self = false; var next_node; var max_rel_vert_pos = 0; + for (var i = 0; i < nl.length; i++) { + + var candidate_node = nl[i]; + var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0; + + if (found_self && !next_node && (test_rel_vert_pos == rel_vert_pos) && !candidate_node.disabled) { + + next_node = candidate_node; + + } + if (candidate_node == node) found_self = true; + + if (test_rel_vert_pos > max_rel_vert_pos) max_rel_vert_pos = test_rel_vert_pos; + } + + dump('intermediate: next_node = ' + next_node + ' max_rel_vert_pos = ' + max_rel_vert_pos + '\n'); + + if (!next_node) { + + found_self = false; + for (var next_pos = rel_vert_pos; next_pos <= max_rel_vert_pos; next_pos++) { + + for (var i = 0; i < nl.length; i++) { + var candidate_node = nl[i]; + var test_rel_vert_pos = candidate_node.getAttribute('rel_vert_pos') || 0; + + if (found_self && !next_node && (test_rel_vert_pos == next_pos) && !candidate_node.disabled ) { + next_node = candidate_node; + } + + if (candidate_node == node) found_self = true; + } + + } + + } + + if (next_node) { + dump('focusing\n'); + next_node.focus(); + } + } catch(E) { + alert(E); + } +} + + dump('exiting util/widgets.js\n'); diff --git a/Open-ILS/xul/staff_client/server/cat/volume_copy_creator.xul b/Open-ILS/xul/staff_client/server/cat/volume_copy_creator.xul index caa1b2a5fc..6fcee86f83 100644 --- a/Open-ILS/xul/staff_client/server/cat/volume_copy_creator.xul +++ b/Open-ILS/xul/staff_client/server/cat/volume_copy_creator.xul @@ -89,7 +89,7 @@ var hb = document.createElement('vbox'); row.appendChild(hb); var tb = document.createElement('textbox'); hb.appendChild(tb); tb.setAttribute('ou_id',ou_id); tb.setAttribute('size','3'); tb.setAttribute('cols','3'); - tb.setAttribute('rel_vert_pos','1'); + tb.setAttribute('rel_vert_pos','1'); util.widgets.apply_vertical_tab_on_enter_handler( tb ); tb.addEventListener( 'change', function(ev) { @@ -130,9 +130,11 @@ var hb3 = document.createElement('vbox'); r.appendChild(hb3); var tb1 = document.createElement('textbox'); hb1.appendChild(tb1); tb1.setAttribute('rel_vert_pos','2'); + util.widgets.apply_vertical_tab_on_enter_handler( tb1 ); var tb2 = document.createElement('textbox'); hb2.appendChild(tb2); tb2.setAttribute('size','3'); tb2.setAttribute('cols','3'); tb2.setAttribute('rel_vert_pos','3'); + util.widgets.apply_vertical_tab_on_enter_handler( tb2 ); tb1.addEventListener( 'change', @@ -169,6 +171,7 @@ tb.setAttribute('ou_id',ou_id); tb.setAttribute('callnumber',callnumber); tb.setAttribute('rel_vert_pos','4'); + util.widgets.apply_vertical_tab_on_enter_handler( tb ); } } catch(E) { g.error.sdump('D_ERROR','g.render_barcode_entry: ' + E); -- 2.43.2