From f5e340dfd90576faa5130ca4530840e6d2ce5e81 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sven=20Sch=C3=B6ling?= Date: Fri, 29 Feb 2008 19:04:48 +0000 Subject: [PATCH] Fokus Patch. Angeregt durch Bug798, allerdings erweitert und verallgemeinert. Essentiell merkt sich Lx-Office jetzt in den Bereichen Auftrag, Rechnung, Einkaufsrechnung und Lizenzen die Fokusposition bei Update. Das Javascript ist in common.js enthalten. Um es in andere Bereiche einzubinden muessen die folgenden Schritte gemacht werden: 1. Jedes Formular muss ein input Feld mit dem Namen "cursor_fokus" durchschleifen. 2. Das Script "js/common.js" muss nach dem body tag eingebunden werden. Alles andere macht das Script von alleine, die Handler sind erweiterbar auf andere onsubmit und onload Scripte. --- SL/Form.pm | 1 + bin/mozilla/ir.pl | 4 +-- bin/mozilla/is.pl | 2 +- bin/mozilla/licenses.pl | 2 +- bin/mozilla/oe.pl | 2 +- js/common.js | 75 ++++++++++++++++++++++++++++++----------- 6 files changed, 62 insertions(+), 24 deletions(-) diff --git a/SL/Form.pm b/SL/Form.pm index 067a002cf..53324c6c5 100644 --- a/SL/Form.pm +++ b/SL/Form.pm @@ -577,6 +577,7 @@ sub header { if ($self->{jsscript} == 1) { $jsscript = qq| + diff --git a/bin/mozilla/ir.pl b/bin/mozilla/ir.pl index 2858e221b..82239ae74 100644 --- a/bin/mozilla/ir.pl +++ b/bin/mozilla/ir.pl @@ -418,13 +418,13 @@ sub form_header { $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|; print qq| - +
{script}> |; $form->hide_form(qw(id title vc type level creditlimit creditremaining closedto locked shippted storno storno_id max_dunning_level dunning_amount vendor_id oldvendor selectvendor taxaccounts - fxgain_accno fxloss_accno taxpart taxservice), + fxgain_accno fxloss_accno taxpart taxservice cursor_fokus), map { $_.'_rate', $_.'_description' } split / /, $form->{taxaccounts} ); print qq|

$form->{saved_message}

| if $form->{saved_message}; diff --git a/bin/mozilla/is.pl b/bin/mozilla/is.pl index 5b70c4816..41788c832 100644 --- a/bin/mozilla/is.pl +++ b/bin/mozilla/is.pl @@ -614,7 +614,7 @@ sub form_header { creditlimit creditremaining tradediscount business closedto locked shipped storno storno_id max_dunning_level dunning_amount shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax - shiptoemail shiptodepartment_1 shiptodepartment_2 message email subject cc bcc taxaccounts), + shiptoemail shiptodepartment_1 shiptodepartment_2 message email subject cc bcc taxaccounts cursor_fokus), map { $_.'_rate', $_.'_description', $_.'_taxnumber' } split / /, $form->{taxaccounts} ); print qq|

$form->{saved_message}

| if $form->{saved_message}; diff --git a/bin/mozilla/licenses.pl b/bin/mozilla/licenses.pl index 93efc2435..5876e8588 100644 --- a/bin/mozilla/licenses.pl +++ b/bin/mozilla/licenses.pl @@ -72,7 +72,7 @@ sub form_footer { } @items); print( - qq|
+ qq| |); diff --git a/bin/mozilla/oe.pl b/bin/mozilla/oe.pl index a70ab237e..f6648f194 100644 --- a/bin/mozilla/oe.pl +++ b/bin/mozilla/oe.pl @@ -388,7 +388,7 @@ sub form_header { max_dunning_level dunning_amount shiptoname shiptostreet shiptozipcode shiptocity shiptocountry shiptocontact shiptophone shiptofax shiptodepartment_1 shiptodepartment_2 shiptoemail - message email subject cc bcc taxpart taxservice taxaccounts), + message email subject cc bcc taxpart taxservice taxaccounts cursor_fokus), @custom_hiddens, map { $_.'_rate', $_.'_description' } split / /, $form->{taxaccounts} ]; # deleted: discount diff --git a/js/common.js b/js/common.js index 953dac7fb..69915eec4 100644 --- a/js/common.js +++ b/js/common.js @@ -1,4 +1,8 @@ +if (!window.a_onload_functions) var a_onload_functions = new Object(); +if (!window.a_onsubmit_functions) var a_onsubmit_functions = new Object(); + + function setupPoints(numberformat, wrongFormat) { decpoint = numberformat.substring((numberformat.substring(1, 2).match(/\.|\,/) ? 5 : 4), (numberformat.substring(1, 2).match(/\.|\,/) ? 6 : 5)); if (numberformat.substring(1, 2).match(/\.|\,/)) { @@ -50,25 +54,6 @@ function set_longdescription_window(input_name) { } function check_right_number_format(input_name) { -// if(thpoint) { -// if(thpoint == ','){ -// var thnumbers = input_name.value.split(','); -// thnumbers[thnumbers.length-1] = thnumbers[thnumbers.length-1].substring((thnumbers[thnumbers.length-1].lastIndexOf(".") !== -1 ? thnumbers[thnumbers.length-1].lastIndexOf(".") : thnumbers[thnumbers.length-1].length), 0); -// } -// else{ -// var thnumbers = input_name.value.split('.'); -// thnumbers[thnumbers.length-1] = thnumbers[thnumbers.length-1].substring((thnumbers[thnumbers.length-1].lastIndexOf(",") !== -1 ? thnumbers[thnumbers.length-1].lastIndexOf(",") : thnumbers[thnumbers.length-1].length), 0); -// } -// -// for(var i = 0; i < thnumbers.length; i++) { -// if(i == 0 && thnumbers[i].length > 3) { -// return show_alert_and_focus(input_name, wrongNumberFormat); -// } -// if(i > 0 && thnumbers[i].length != 3) { -// return show_alert_and_focus(input_name, wrongNumberFormat); -// } -// } -// } if(decpoint == thpoint) { return show_alert_and_focus(input_name, wrongNumberFormat); } @@ -153,3 +138,55 @@ function get_input_value(input_name) { return the_input[0].value; return ''; } + +window.focused_element = null; +document.addEventListener("focus", function(event){ + var e = event.target; + if (is_element_focussable(e)) window.focused_element = e; +}, true); + +function get_cursor_position() { + if (window.focused_element) + document.forms[0].cursor_fokus.value = window.focused_element.name; +} + +function set_cursor_position(n) { + document.getElementsByName(n)[0].focus(); +} + +function restore_cursor_position() { + var e = document.getElementsByName('cursor_fokus')[0]; + var f = document.getElementsByName(e.value)[0]; + if (is_element_focussable(f)) set_cursor_position(f.name) + else set_cursor_to_first_element(); +} + +function is_element_focussable(e) { + return e && e.type != 'hidden' && e.type != 'submit' && e.disabled != true; +} + +function set_cursor_to_first_element(){ + var df = document.forms; + for (var f = 0; f < df.length; f++) + for (var i = 0; i < df[f].length; i++) + if (is_element_focussable(df[f][i])) + try { df[f][i].focus(); return } catch (er) { } +} +a_onload_functions["restore_cursor_position"] = restore_cursor_position; +a_onsubmit_functions["get_cursor_position"] = get_cursor_position; + +function do_load_events() { + var oldl = window.onload; + window.onload = function() { + if (oldl) oldl(); + if (window.a_onload_functions) + for (var name in window.a_onload_functions) + a_onload_functions[name](); + } + window.onsubmit = function() { + if (window.a_onsubmit_functions) + for (var name in window.a_onsubmit_functions) + a_onsubmit_functions[name](); + } +} +do_load_events(); -- 2.20.1