Added retry after ajax request timeout, preparation for client-side
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Mon, 20 Apr 2009 08:25:39 +0000 (08:25 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Mon, 20 Apr 2009 08:25:39 +0000 (08:25 +0000)
entry validaton.

includes/current_user.inc
includes/page/footer.inc
includes/page/header.inc
includes/ui/ui_view.inc
js/inserts.js
js/utils.js

index 023591d351852727b06a1022b3b0e8d0eab29213..f0aa525cc03d5f3a80bff3a4f0570df3012911cc 100644 (file)
@@ -318,14 +318,13 @@ function add_user_js_data() {
        $ts = $thoseps[user_tho_sep()];
        $ds = $decseps[user_dec_sep()];
 
-    $js = "\n<script type=\"text/javascript\">\n"
-         . "<!--\n"
+    $js = "\n"
          . "var user = {\n"
-         . "theme: '". $path_to_root . '/themes/'. 'default' /*user_theme()*/.'/'."',\n"
+         . "theme: '". $path_to_root . '/themes/'. user_theme().'/'."',\n"
          . "loadtxt: '"._('Requesting data...')."',\n"
          . "ts: '$ts',\n"
          . "ds: '$ds',\n"
-         . "pdec : " . user_price_dec() . "}\n--></script>";
+         . "pdec : " . user_price_dec() . "}\n";
 
   add_js_source($js);
 }
index 2ce07a2947590d17668d0cffe02fa40e9141cabb..29900c7deb97201d5c15216dfb88317d117297c8 100644 (file)
@@ -11,7 +11,7 @@
 ***********************************************************************/
 function page_footer($no_menu=false, $is_index=false)
 {
-       global $path_to_root;
+       global $path_to_root, $js_lib;
 
        if (in_ajax())
                return;// just for speed up
@@ -21,6 +21,14 @@ function page_footer($no_menu=false, $is_index=false)
        include_once($path_to_root."/themes/".user_theme()."/renderer.php");
        $rend = new renderer();
        $rend->menu_footer($no_menu, $is_index);
+
+       add_user_js_data();
+       echo "\n<script type=\"text/javascript\"><!--\n";
+
+       foreach($js_lib as $text)
+               echo $text;
+
+       echo "\n--></script>\n";
     echo "</body></html>\n";
 }
 
index 6abf7c93617ee1d2cc8eda5169e91145b5c465c9..197f27fb3c3955b3a738c62387daf31bea6f0273 100644 (file)
@@ -41,8 +41,6 @@ function send_scripts()
     global $js_lib, $js_static, $js_path, $js_userlib, $comp_path,
        $path_to_root, $go_debug;
 
-       add_user_js_data();
-
        $js ='';
        foreach($js_static as $jsfile)
        {
@@ -60,10 +58,6 @@ function send_scripts()
                $jsfile . '"></script>';
        }
 
-       foreach($js_lib as $text)
-       {
-               $js .= $text;
-       }
     echo $js;
 }
 
@@ -75,6 +69,11 @@ function page_header($title, $no_menu=false, $is_index=false, $onload="", $js=""
        if (in_ajax())
                return; // just for speed up
 
+//     $jsext = substr_replace($_SERVER['PHP_SELF'], '.js', -4);
+
+//     if (file_exists($_SERVER['DOCUMENT_ROOT'].$jsext))
+//             add_js_ufile($jsext);
+
        $theme = user_theme();
        $local_path_to_root = $path_to_root;
 
index 1d4f1fc1788ac6b6416e42b2ef72a2f40cb31b8c..1e43fdf9738e9b1b4b6ee937a851a5df0c64d618 100644 (file)
@@ -650,16 +650,12 @@ function display_quick_entries(&$cart, $id, $base, $type, $descr='')
 
 function get_js_open_window($width, $height)
 {
-       $js = "\n<script type=\"text/javascript\">\n"
-               . "<!--\n"
-               . "function openWindow(url, title)\n"
+       $js ="function openWindow(url, title)\n"
                . "{\n"
                . " var left = (screen.width - $width) / 2;\n"
                . " var top = (screen.height - $height) / 2;\n"
                . " return window.open(url, title, 'width=$width,height=$height,left='+left+',top='+top+',screenX='+left+',screenY='+top+',status=no,scrollbars=yes');\n"
-               . "}\n"
-               . "-->\n"
-               . "</script>\n";
+               . "}\n";
        return $js;
 }
 
@@ -683,8 +679,7 @@ function default_focus($name, $form_no=0) {
 
 function get_js_png_fix()
 {
-       $js = "<script type=\"text/javascript\">\n"
-               . "function fixPNG(myImage)\n"
+       $js = "function fixPNG(myImage)\n"
                . "{\n"
                . " var arVersion = navigator.appVersion.split(\"MSIE\")\n"
                . " var version = parseFloat(arVersion[1])\n"
@@ -703,8 +698,7 @@ function get_js_png_fix()
         . "    + \"(src=\'\" + myImage.src + \"\', sizingMethod='scale');\\\"></span>\"\n"
                . "  myImage.outerHTML = strNewHTML\n"
        . " }\n"
-               . "}\n"
-               . "</script>\n";
+               . "}\n";
        return $js;
 }
 
index 8e18e5c38afb3312585165982910e3adb2e9c242..4dfa2009fd176cf0e293b38a434377be6905e2c2 100644 (file)
@@ -13,22 +13,13 @@ var _hotkeys = {
        'alt': false,   // whether is the Alt key pressed
        'focus': -1     // currently selected indeks of document.links
 };
+var _validate = {}; // validation functions
 
 function debug(msg) {
     box = document.getElementById('msgbox')
        box.innerHTML= box.innerHTML+'<br>'+msg
 }
 
-function progbar() {
-       box = document.getElementById('msgbox');
-    box.innerHTML= "<center><table width='98%' border='1' cellpadding=3 "
-       +"bordercolor='#007700' style='border-collapse: collapse'>"
-       +"<tr><td align='center' bgcolor='#ccffcc' >"
-               +"<img src='"+user.theme+"images/progressbar.gif' alt='"
-               +user.loadtxt+"' /></td></tr></table></center><br>";
-       box.style.display = 'block';
-}
-
 function save_focus(e) {
   _focus = e.name||e.id;
   var h = document.getElementById('hints');
@@ -215,15 +206,34 @@ var inserts = {
            e.style.display = 'block';
        },
 //     '.ajaxsubmit,.editbutton,.navibutton': // much slower on IE7
-       'button.ajaxsubmit,input.ajaxsubmit,input.editbutton,button.navibutton': 
+       'button.ajaxsubmit,input.ajaxsubmit,input.editbutton,button.editbutton,button.navibutton': 
        function(e) {
-           e.onclick = function() {
-                       if (this.getAttribute('aspect') == 'process')
-                               progbar();
-                   save_focus(this);
-                       JsHttpRequest.request(this);
-                       return false;
-           }
+                   e.onclick = function() {
+                           save_focus(e);
+                               if (e.getAttribute('aspect') == 'process')
+                                       JsHttpRequest.request(this, null, 30000);
+                               else
+                                       JsHttpRequest.request(this);
+                               return false;
+                   }
+       },
+       'button': function(e) {
+               if (e.name) {
+                       var func = eval("_validate."+e.name);
+                       var old = e.onclick;
+                       if(func) {
+                               if (typeof old != 'function') {
+                                       e.onclick = func;
+                               } else {
+                                       e.onclick = function() {
+                                               if(func()) 
+                                                       { old(); return true;}
+                                               else
+                                                       return false;
+                                       }
+                               }
+                       }
+               }
        },
     '.amount': function(e) {
                if(e.onblur==undefined) {
index 98733d667d84f2542f72b59f3d5f1f1e4d99b23d..b8055c997b83d40f3600f62b6c75f1a967e3532b 100644 (file)
@@ -8,6 +8,12 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
     See the License here <http://www.gnu.org/licenses/gpl-3.0.html>.
 ***********************************************************************/
+function set_mark(img) {
+       var box = document.getElementById('ajaxmark');
+       if(img) box.src = user.theme+'images/'+ img;
+       box.style.visibility = img ? 'visible' : 'hidden'
+}
+
 //
 //     JsHttpRequest class extensions.
 //
 //             if form parameter exists also form values are submited, otherwise
 //             request is directed to current location 
 // 
-    JsHttpRequest.request= function(trigger, form) {
-               var mark = document.getElementById('ajaxmark');
-               if(mark) mark.style.visibility = 'visible';
+JsHttpRequest.request= function(trigger, form, tout) {
+       tout = tout | 3000;     // default timeout value
+       set_mark(tout>5000 ? 'progressbar.gif' : 'ajax-loader.gif');
+       JsHttpRequest._request(trigger, form, tout, 2);
+}
+
+JsHttpRequest._request = function(trigger, form, tout, retry) {
+
                if (trigger.tagName=='A') {
                        var content = {};
                        var upload = 0;
 
                if (!form) url = url.substring(0, url.indexOf('?'));
                
-               if (!submitObj) 
+               if (!submitObj) {
                        content[trigger] = 1;
-                       
+                       }
                }
                        // this is to avoid caching problems
                content['_random'] = Math.random()*1234567;
+       
+               var tcheck = setTimeout(
+                       function() {
+                               for(var id in JsHttpRequest.PENDING)  {
+                                       var call = JsHttpRequest.PENDING[id];
+                                       if (call != false) {
+                                       if (call._ldObj.xr) // needed for gecko
+                                               call._ldObj.xr.onreadystatechange = function(){};
+                                       call.abort(); // why this doesn't kill request in firebug?
+//                                             call._ldObj.xr.abort();
+                                               delete JsHttpRequest.PENDING[id];
+                                       }
+                               }
+                               set_mark(retry ? 'ajax-loader2.gif':'warning.png' );
+                               if(retry)
+                                       JsHttpRequest._request(trigger, form, tout, retry-1);
+                       }, tout );
 
         JsHttpRequest.query(
             (upload ? "form." : "")+"POST "+url, // force form loader
                                  errors = errors+'<br>Unknown ajax function: '+cmd;
                        }
                  }
-
+                if(tcheck)
+                  JsHttpRequest.clearTimeout(tcheck);
         // Write errors to the debug div.
                  document.getElementById('msgbox').innerHTML = errors;
-                 var mark = document.getElementById('ajaxmark');
-                 if(mark) mark.style.visibility = 'hidden';
+                 set_mark();
 
                  Behaviour.apply();
 
                        }
                }
             },
-            false  // do not disable caching
+               false  // do not disable caching
         );
-    }
+       }
        // collect all form input values plus inp trigger value
        JsHttpRequest.formInputs = function(inp, objForm, upload)
        {