Automatic first field focus on page start, preserved focus sequence
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 27 Mar 2008 13:53:50 +0000 (13:53 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Thu, 27 Mar 2008 13:53:50 +0000 (13:53 +0000)
between form updates

includes/page/footer.inc
includes/ui/ui_controls.inc
includes/ui/ui_input.inc
includes/ui/ui_lists.inc
includes/ui/ui_view.inc
js/inserts.js
sales/credit_note_entry.php
sales/includes/ui/sales_credit_ui.inc
sales/includes/ui/sales_order_ui.inc
sales/sales_order_entry.php

index cefc3c1afb5d39bd98d70cd76d75a4c756b93807..8f3db720db2aa8563fc4d4dd36ddade677c8ada3 100644 (file)
@@ -9,7 +9,6 @@ function page_footer($no_menu=false, $is_index=false)
 
        if (isset($_GET['ajax'])) return;
 
-       echo set_js_focus();    // set focus on input (if $focus_on exists)
        if (function_exists('hyperlink_back'))
                hyperlink_back();
        if ($no_menu == false) 
index 12dc0d10d41322a47038c9016748cb6704f9ec2f..7d731525509af37f3f835a32ddf2d380ea5d99cf 100644 (file)
@@ -20,7 +20,6 @@ function start_form($multi=false, $sid=false, $action="", $name="")
        else
                echo "<form method='post' action='$action' $name>\n";   
 
-       echo "<input type=\"hidden\" id=\"_focus\" name=\"_focus\" value=\"\">";
 }
 
 //---------------------------------------------------------------------------------
@@ -29,6 +28,7 @@ function end_form($breaks=0)
 {
        if ($breaks)
                br($breaks);
+       echo "<input type=\"hidden\" name=\"_focus\" value=\"".$_POST['_focus']."\">\n";
        echo "</form>\n";
 }
 
index 67abbbde5861271a68e393e98e56c33cf2e998db..6c09d0979f83f6fcf806ed45628396a49152249a 100644 (file)
@@ -38,7 +38,7 @@ function hidden($name, $value)
 
 function submit($name, $value, $echo=true)
 {
-
+       default_focus($name);
        $submit_str = "<input type=\"submit\" class=\"inputsubmit\" name=\"$name\" value=\"$value\">\n";
        if ($echo)
                echo $submit_str;
@@ -119,6 +119,7 @@ function submit_row($name, $value, $right=true, $extra="")
 
 function button($name, $value, $onclick)
 {
+  default_focus($name);
   echo "<input type=\"button\" class=\"inputsubmit\" name=\"$name\" value=\"$value\" onclick=\"$onclick\" />\n";
 }
 
@@ -140,6 +141,7 @@ function check_value($name)
 
 function check($label, $name, $value, $submit_on_change=false)
 {
+       default_focus($name);
        if ($label)
                echo $label . "  ";
 
@@ -226,6 +228,7 @@ function label_row($label, $value, $params="", $params2="", $leftfill=0)
 
 function text_cells($label, $name, $value, $size="", $max="", $params="", $post_label="", $disabled="")
 {
+       default_focus($name);
        if ($label != null)
                label_cell($label, $params);
        echo "<td>";
@@ -242,6 +245,7 @@ function text_cells($label, $name, $value, $size="", $max="", $params="", $post_
 
 function text_cells_ex($label, $name, $size, $max=null, $init=null, $params=null, $post_label=null)
 {
+       default_focus($name);
        if (!isset($_POST[$name]) || $_POST[$name] == "")
        {
                if ($init)
@@ -454,6 +458,7 @@ function small_qty_cells($label, $name, $init=null, $params=null, $post_label=nu
 
 function textarea_cells($label, $name, $value, $cols, $rows, $params="")
 {
+       default_focus($name);
        if ($label != null)
                echo "<td $params>$label</td>\n";
        if ($value == null)
@@ -472,6 +477,7 @@ function textarea_row($label, $name, $value, $cols, $rows, $params="")
 
 function text_row_with_submit($label, $name, $value, $size, $max, $input_name, $input_value)
 {
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td>";
 
index f271bb65679041028e16a0378f357eb12dd321e2..ba5f42a465d03561d3f176215ddcbb1245ed21d6 100644 (file)
@@ -15,6 +15,7 @@ function supplier_list($name, $selected_id, $all_option=false, $submit_on_change
 {
        global $all_items;
 
+       default_focus($name);
        if ($selected_id == null)
                $selected_id = ((!isset($_POST[$name]) || $_POST[$name] == "") ? "" : $_POST[$name]);
        $no_supplier_list = get_company_pref('no_supplier_list');
@@ -129,6 +130,7 @@ function customer_list($name, $selected_id, $all_option=false, $submit_on_change
 {
        global $all_items;
 
+       default_focus($name);
        if ($selected_id == null)
                $selected_id = ((!isset($_POST[$name]) || $_POST[$name] == "") ? "" : $_POST[$name]);
        $no_customer_list = get_company_pref('no_customer_list');
@@ -245,6 +247,7 @@ function customer_branches_list($customer_id, $name, $selected_id,
 {
        global $all_items;
 
+       default_focus($name);
        if ($submit_on_change==true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -316,6 +319,7 @@ function locations_list($name, $selected_id, $all_option=false, $submit_on_chang
 {
        global $all_items;
 
+       default_focus($name);
        if ($submit_on_change == true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -387,6 +391,7 @@ function locations_list_row($label, $name, $selected_id, $all_option=false, $sub
 
 function currencies_list($name, &$selected_id, $submit_on_change=false)
 {
+       default_focus($name);
        if ($submit_on_change==true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -443,6 +448,7 @@ function currencies_list_row($label, $name, $selected_id)
 
 function fiscalyears_list($name, &$selected_id, $submit_on_change=false)
 {
+       default_focus($name);
        if ($submit_on_change == true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -509,6 +515,7 @@ function simple_codeandname_list($sql, $name, &$selected_id,
 {
        global $all_items;
 
+       default_focus($name);
        if ($submit_on_change == true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -567,6 +574,7 @@ function simple_codeandname_list($sql, $name, &$selected_id,
 function dimensions_list($name, &$selected_id, $no_option=false, $showname=null,
        $submit_on_change=false, $showclosed=false, $showtype=1)
 {
+       default_focus($name);
        $sql = "SELECT id, CONCAT(reference,'  ',name) FROM ".TB_PREF."dimensions";
        if ($showclosed || $showtype)
        {
@@ -608,6 +616,7 @@ function stock_items_list($name, $selected_id, $all_option=false, $submit_on_cha
 {
        global $all_items;
 
+       default_focus($name);
        if ($selected_id == null)
                $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
        $no_item_list = get_company_pref('no_item_list');
@@ -727,6 +736,7 @@ function stock_bom_items_list($name, $selected_id, $all_option=false, $submit_on
 {
        global $all_items;
 
+       default_focus($name);
        if ($submit_on_change==true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -801,6 +811,7 @@ function base_stock_items_list($sql, $name, &$selected_id,
 {
        global $all_items;
 
+       default_focus($name);
        if ($submit_on_change==true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else if ($extra != "")
@@ -900,6 +911,7 @@ function stock_purchasable_items_list($name, &$selected_id, $all_option=false, $
 {
        global $all_items;
 
+       default_focus($name);
        if ($selected_id == null)
                $selected_id = (!isset($_POST[$name]) ? "" : $_POST[$name]);
        $no_item_list = get_company_pref('no_item_list');
@@ -1028,6 +1040,7 @@ function stock_costable_items_list($name, &$selected_id,
 
 function stock_item_types_list_row($label, $name, $selected_id, $enabled=true)
 {
+       default_focus($name);
        echo "<tr>";
        if ($label != NULL)
                echo "<td>$label</td>\n";
@@ -1050,6 +1063,7 @@ function stock_units_list_row($label, $name, $value, $enabled=true)
 {
        global $stock_units;
 
+       default_focus($name);
        $result = get_all_item_units();
        echo "<tr><td>$label</td>\n";
        if ($enabled)
@@ -1375,6 +1389,8 @@ function bank_trans_types_list_row($label, $name, $selected_id)
 function workcenter_list($name, $selected_id, $all_option=false)
 {
        global $all_items;
+
+       default_focus($name);
        echo "<select name='$name'>";
 
        $sql = "SELECT id, name FROM ".TB_PREF."workcentres";
@@ -1413,6 +1429,7 @@ function workcenter_list($name, $selected_id, $all_option=false)
 
 function workcenter_list_cells($label, $name, $selected_id, $all_option=false)
 {
+       default_focus($name);
        if ($label != null)
                echo "<td>$label</td>\n";
        echo "<td>";
@@ -1431,6 +1448,7 @@ function workcenter_list_row($label, $name, $selected_id, $all_option=false)
 
 function bank_accounts_list($name, $selected_id, $submit_on_change=false)
 {
+       default_focus($name);
        if ($submit_on_change==true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -1490,6 +1508,7 @@ function bank_accounts_list_row($label, $name, $selected_id, $submit_on_change=f
 
 function class_list($name, $selected_id, $submit_on_change=false)
 {
+       default_focus($name);
        if ($submit_on_change==true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -1595,6 +1614,7 @@ function gl_account_types_list_row($label, $name, $selected_id, $all_option=fals
 function gl_all_accounts_list($name, $selected_id, $skip_bank_accounts=false,
        $show_group=false, $onchange="")
 {
+       default_focus($name);
        echo "<select name='$name'";
        if ($onchange != "")
                echo " onchange='$onchange'";
@@ -1664,6 +1684,7 @@ function gl_all_accounts_list_row($label, $name, $selected_id, $skip_bank_accoun
 
 function yesno_list($name, $selected_id, $name_yes="", $name_no="", $submit_on_change=false)
 {
+       default_focus($name);
        if ($submit_on_change == true)
                echo "<select name='$name' onchange='this.form.submit();'>";
        else
@@ -1721,6 +1742,7 @@ function languages_list($name, &$selected_id)
 {
        global $installed_languages;
 
+       default_focus($name);
        echo "<select name='$name'>";
 
        if ($selected_id == null)
@@ -1756,6 +1778,7 @@ function bank_account_types_list($name, &$selected_id)
 {
        $bank_account_types = bank_account_types::get_all();
 
+       default_focus($name);
        echo "<select name='$name'>";
 
        if ($selected_id == null)
@@ -1791,6 +1814,7 @@ function payment_person_types_list($name, $selected_id, $related=null)
 {
        $types = payment_person_types::get_all();
 
+       default_focus($name);
        echo "<select name='$name'";
        if ($related)
                echo " onchange='this.form.$related.value=\"\"; this.form.submit();' ";
@@ -1834,6 +1858,7 @@ function wo_types_list($name, &$selected_id)
 {
        $types = wo_types::get_all();
 
+       default_focus($name);
        echo "<select name='$name' onchange='this.form.submit();'>";
 
        if ($selected_id == null)
@@ -1861,6 +1886,7 @@ function dateformats_list_row($label, $name, $value)
 {
        global $dateformats;
 
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td><select name='$name'>";
 
@@ -1887,6 +1913,7 @@ function dateseps_list_row($label, $name, $value)
 {
        global $dateseps;
 
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td><select name='$name'>";
 
@@ -1913,6 +1940,7 @@ function thoseps_list_row($label, $name, $value)
 {
        global $thoseps;
 
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td><select name='$name'>";
 
@@ -1939,6 +1967,7 @@ function decseps_list_row($label, $name, $value)
 {
        global $decseps;
 
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td><select name='$name'>";
 
@@ -1965,6 +1994,7 @@ function themes_list_row($label, $name, $value)
 {
        global $path_to_root;
        
+       default_focus($name);
        $path = $path_to_root.'/themes/';
        $themes = array();
        $themedir = opendir($path);
@@ -1998,6 +2028,7 @@ function pagesizes_list_row($label, $name, $value)
 {
        global $pagesizes;
 
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td><select name='$name'>";
 
@@ -2022,6 +2053,7 @@ function security_headings_list_row($label, $name, $value)
 {
        global $security_headings;
 
+       default_focus($name);
        echo "<tr><td>$label</td>\n";
        echo "<td><select name='$name'>";
 
@@ -2048,6 +2080,7 @@ function systypes_list_cells($label, $name, $value, $submit_on_change=false)
 {
        global $systypes_array;
 
+       default_focus($name);
        if ($label != null)
                echo "<td>$label</td>\n";
     echo "<td><select name='$name'";
@@ -2082,6 +2115,7 @@ function systypes_list_row($label, $name, $value, $submit_on_change=false)
 function cust_allocations_list_cells($label, $name, $selected)
 {
        global $all_items;
+       default_focus($name);
        if ($label != null)
                label_cell($label);
        if ($selected == null)
@@ -2099,6 +2133,8 @@ function cust_allocations_list_cells($label, $name, $selected)
 function supp_allocations_list_cells($name, $selected)
 {
        global $all_items;
+
+       default_focus($name);
        if ($selected == null)
                $selected = (!isset($_POST[$name]) ? "" : $_POST[$name]);
        echo "<td><select name='$name'>";
@@ -2113,6 +2149,7 @@ function supp_allocations_list_cells($name, $selected)
 
 function policy_list_cells($label, $name, $selected)
 {
+       default_focus($name);
        if ($selected == null)
        {
                $selected = (!isset($_POST[$name]) ? "" : $_POST[$name]);
@@ -2136,6 +2173,7 @@ function policy_list_row($label, $name, $selected)
 
 function credit_type_list_cells($label, $name, $selected, $submit_on_change=false)
 {
+       default_focus($name);
        if ($selected == null)
        {
                $selected = (!isset($_POST[$name]) ? "Return" : $_POST[$name]);
@@ -2163,6 +2201,7 @@ function credit_type_list_row($label, $name, $selected, $submit_on_change=false)
 
 function number_list($name, $selected, $from, $to, $firstlabel="")
 {
+       default_focus($name);
        if ($selected == null)
        {
                $selected = (!isset($_POST[$name]) ? $from : $_POST[$name]);
index 3a47f128f7937b9590b2c6c67cdc69dff3358ba9..d76dd824a34ef138c096182a6d26a0f28df5a85b 100644 (file)
@@ -553,29 +553,46 @@ function get_js_open_window($width, $height)
        return $js;
 }
 
-$focus_on = array();
+//$focus_on = array();
 /*
   Setting focus on element $name in $form.
   If $form<0 $name is element id.
 */
 function set_focus($name, $form_no=0) {
-  global $focus_on;
-  $focus_on['name'] = $name;
-  $focus_on['form'] = $form_no;
+//  global $focus_on;
+//  $focus_on['name'] = $name;
+//  $focus_on['form'] = $form_no;
+    $_POST['_focus'] = $name;
 }
-
+//
+//     Set default focus on first field $name if not set yet
+//
+function default_focus($name, $form_no=0) {
+//  global $focus_on;
+//    if (!isset($focus_on['name']) && (!isset($_POST['_focus']) || $_POST['_focus']=='') ) {
+//echo "<h2>$name</h2>";
+//     $focus_on['name'] = $name;
+//     $focus_on['form'] = $form_no;
+//    }
+    if (!isset($_POST['_focus'])) {
+       $_POST['_focus'] = $name;
+    }
+}
+/*
 function set_js_focus() {
   global $focus_on;
   $js = '';
-  if (isset($focus_on['name'])) {
+
+//  if (isset($focus_on['name'])) {
+
     $js =  "<script type=\"text/javascript\">\n"
        ."Behaviour.addLoadEvent(function(){ setFocus('".$focus_on['name']."'".( $focus_on['form']>=0 ?  (",".$focus_on['form']): '').
        ");});"
        ."</script>";
-  }
+//  }
   return $js;
 }
-
+*/
 function get_js_png_fix()
 {
        $js = "<script type=\"text/javascript\">\n"
index 18c016b8f103d4aeaba245e62baae0413f3dbb0a..3b4e09788f6ce1c5ab46c17d62dbf73f9583695c 100644 (file)
@@ -2,7 +2,7 @@
  Behaviour definitions
 */
 var inserts = {
-  '.amount': function(element) {
+    '.amount': function(element) {
                if(element.onblur==undefined) {
                  var dec = element.getAttribute("dec");
                  element.onblur = function() {
@@ -13,18 +13,21 @@ var inserts = {
        'select': function(element) {
                if(element.onfocus==undefined) {
                        element.onfocus = function() {
-                               document.getElementById('_focus').value = element.name;
+                               document.getElementsByName('_focus')[0].value = element.name;
                        };
                }
        },
        'input': function(element) {
                if(element.onfocus==undefined) {
                        element.onfocus = function() {
-                               document.getElementById('_focus').value = element.name;
+                               document.getElementsByName('_focus')[0].value = element.name;
                        };
                }
        
        },
+       'input.submit': function(element) {
+               element.onfocus = function() {} // we do not want to change focus on submit
+       },
        // combo: text input and related selector in next <TD> cell
        'input.combo': function(element) {
          if(element.onkeydown==undefined) {
@@ -36,7 +39,6 @@ var inserts = {
                        var len = select.length;
                        var ac = this.value;
                        var txt;
-                       var i = 'dupa';
                        select.options[select.selectedIndex].selected = false;
                        for (i = 0; i < len; i++) {
 //                       txt = select.options[i].text;
@@ -73,17 +75,19 @@ var inserts = {
 
 Behaviour.register(inserts);
 
-function setFocus(name, form) {
-  if(form==null)
+function setFocus(name, byId) {
+  if(byId)
        input = document.getElementById(name).focus();
   else
-       input = document.forms[form].getElementsByName(name)[0].focus();
+       input = document.getElementsByName(name)[0].focus();
 }
 
-//Behaviour.addLoadEvent(function() {
-//if(window.StartFocus) {
-//  setFocus(StartFocus.name, StartFocus.form);
-//}
-//}
-//);
+Behaviour.addLoadEvent(function() {
+    var inp = document.getElementsByName('_focus')[0];
+if(inp!=null) {
+  setFocus(inp.value, 0);
+} else {
+}
+}
+);
 
index 89ccd9909389a88d9b1558eea8bca2e50c2ad045..5b2af3b2e63b388152d7ea34859f7d3d37e1ced4 100644 (file)
@@ -163,6 +163,7 @@ function handle_update_item()
                $_SESSION['Items']->update_cart_item($_POST['line_no'], input_num('qty'),
                        input_num('price'), input_num('Disc') / 100);
        }
+    set_focus('StockID2');
 }
 
 //-----------------------------------------------------------------------------
@@ -170,6 +171,7 @@ function handle_update_item()
 function handle_delete_item($line_no)
 {
        $_SESSION['Items']->remove_from_cart($line_no);
+    set_focus('StockID2');
 }
 
 //-----------------------------------------------------------------------------
@@ -182,6 +184,7 @@ function handle_new_item()
 
        add_to_order($_SESSION['Items'], $_POST['stock_id'], input_num('qty'),
                input_num('price'), input_num('Disc') / 100);
+    set_focus('StockID2');
 }
 //-----------------------------------------------------------------------------
 $id = find_submit('Delete');
@@ -197,6 +200,9 @@ if (isset($_POST['AddItem']))
 if (isset($_POST['UpdateItem']))
        handle_update_item();
 
+if (isset($_POST['CancelItemChanges']) || isset($_POST['UpdateItem']))
+       set_focus('StockID2');
+
 //-----------------------------------------------------------------------------
 
 if (!processing_active()) {
index 556ff8df5146d4b81dfa98ce7a1ff5fb996118fe..a2a3ff5b825be8701494c21252308090bb586f66 100644 (file)
@@ -201,7 +201,7 @@ function credit_edit_item_controls(&$order, $rowcounter, $line_no=-1)
                }
                else
                {
-               text_cells(null, "StockID2", '', 12, 10, "", "", "class='combo' rel='stock_id' onblur='submit();'");
+               text_cells(null, "StockID2", '', 12, 10, "", "", "class='combo' rel='stock_id'"/* " onblur='submit();'"*/);
                stock_items_list_cells(null, 'stock_id', null, false, false, "class='combo' rel='StockID2'");
                }
                $item_info = get_item_edit_info($_POST['stock_id']);
@@ -231,6 +231,7 @@ function credit_edit_item_controls(&$order, $rowcounter, $line_no=-1)
                edit_button_cell('UpdateItem', _("Update"));
                edit_button_cell('CancelItemChanges', _("Cancel"));
                hidden('line_no', $line_no);
+               set_focus('qty');
        }
        else
        {
index 428cc69aa86014ee80994f61e520d6ff3f21f732..a58cb9ee0f26d3c31955bbfb9e147c175128314b 100644 (file)
@@ -334,7 +334,7 @@ function sales_order_item_controls(&$order, &$rowcounter, $line_no=-1)
                }
                else
                {
-               text_cells(null, "StockID2", '', 12, 10, "", "", "class='combo' rel='stock_id' onblur='submit();'");
+               text_cells(null, "StockID2", '', 12, 10, "", "", "class='combo' rel='stock_id'"/* onblur='this.form.submit();'"*/);
                stock_items_list_cells(null, 'stock_id', null, false, false, "class='combo' rel='StockID2'");
                }
                $item_info = get_item_edit_info($_POST['stock_id']);
@@ -365,6 +365,7 @@ function sales_order_item_controls(&$order, &$rowcounter, $line_no=-1)
                edit_button_cell('UpdateItem', _("Update"));
                edit_button_cell('CancelItemChanges', _("Cancel"));
                hidden('LineNo', $line_no);
+               set_focus('qty');
        }
        else
        {
index 0524212b0e352aac7c874a254bf33905fc6ff8f4..7e271a5686ee3c78ccac4ce4e910ebd4893f03a2 100644 (file)
@@ -284,6 +284,7 @@ function handle_update_item()
                 input_num('Disc') / 100 );
        }
   copy_from_cart();
+  set_focus('StockID2');
 }
 
 //--------------------------------------------------------------------------------
@@ -295,6 +296,7 @@ function handle_delete_item($line_no)
     } else {
        display_error(_("This item cannot be deleted because some of it has already been delivered."));
     }
+    set_focus('StockID2');
 }
 
 //--------------------------------------------------------------------------------
@@ -308,6 +310,7 @@ function handle_new_item()
                input_num('price'), input_num('Disc') / 100);
 
        $_POST['StockID2'] = $_POST['stock_id'] = "";
+       set_focus('StockID2');
 }
 
 //--------------------------------------------------------------------------------
@@ -393,6 +396,9 @@ if (isset($_POST['UpdateItem']))
 if (isset($_POST['AddItem']))
        handle_new_item();
 
+if (isset($_POST['CancelItemChanges']) || isset($_POST['UpdateItem']))
+       set_focus('StockID2');
+
 //--------------------------------------------------------------------------------
 
 check_db_has_stock_items(_("There are no inventory items defined in the system."));