]> wagnertech.de Git - kivitendo-erp.git/commitdiff
Fokus Patch.
authorSven Schöling <s.schoeling@linet-services.de>
Fri, 29 Feb 2008 19:04:48 +0000 (19:04 +0000)
committerSven Schöling <s.schoeling@linet-services.de>
Fri, 29 Feb 2008 19:04:48 +0000 (19:04 +0000)
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
bin/mozilla/ir.pl
bin/mozilla/is.pl
bin/mozilla/licenses.pl
bin/mozilla/oe.pl
js/common.js

index 067a002cfb0bd88d48e5d99c4c72660717e43591..53324c6c5568fe567501482d7361a975cb86c1ef 100644 (file)
@@ -577,6 +577,7 @@ sub header {
     if ($self->{jsscript} == 1) {
 
       $jsscript = qq|
+        <script type="text/javascript" src="js/common.js"></script>
         <style type="text/css">\@import url(js/jscalendar/calendar-win2k-1.css);</style>
         <script type="text/javascript" src="js/jscalendar/calendar.js"></script>
         <script type="text/javascript" src="js/jscalendar/lang/calendar-de.js"></script>
index 2858e221b0cdda825451939a6d379eb37b698285..82239ae74ea144ac8c0c97570ddc482298f0dd79 100644 (file)
@@ -418,13 +418,13 @@ sub form_header {
   $onload .= qq|;setupPoints('|. $myconfig{numberformat} .qq|', '|. $locale->text("wrongformat") .qq|')|;
   print qq|
 <body onLoad="$onload">
-
+<script type="text/javascript" src="js/common.js"></script>
 <form method=post action=$form->{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|<p>$form->{saved_message}</p>| if $form->{saved_message};
index 5b70c4816893f05da9eb9e2911809421c2f8ce34..41788c832cd554bb1a2fda731f84a553c2cf2e64 100644 (file)
@@ -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|<p>$form->{saved_message}</p>| if $form->{saved_message};
index 93efc243544626435b8367a2c082a97ac439ad55..5876e85887f46e7d5b05f12ccb544d9991e8c463 100644 (file)
@@ -72,7 +72,7 @@ sub form_footer {
   } @items);
 
   print(
-    qq|</form>
+    qq|<input type="hidden" name="cursor_field" value='$form->{cursor_field}'></form>
 </body>
 </html>
 |);
index a70ab237e7a5a3d19c952295bfb46c71b6fb514c..f6648f1947b2726e5879cc5477d6a8e8dfb3be6c 100644 (file)
@@ -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
 
index 953dac7fba524eb92124e789849bc27956c56e61..69915eec4d07e117790dfc8e4badfdf7819fa164 100644 (file)
@@ -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();