From 2965125bf5ead72eaf1d9809431ee4da46b19a4c Mon Sep 17 00:00:00 2001
From: Peter Rotich <peter@osticket.com>
Date: Fri, 15 Feb 2013 13:00:25 -0500
Subject: [PATCH] Add overlay & loading spinner to client interface - shown on
 form submission to help cut down on double submits.

---
 css/osticket.css              |  25 +++++++++++++++++++++++++
 images/FhHRx-Spinner.gif      | Bin 0 -> 2608 bytes
 include/client/footer.inc.php |   5 +++++
 include/client/header.inc.php |   1 +
 js/osticket.js                |  22 ++++++++++++++++++----
 5 files changed, 49 insertions(+), 4 deletions(-)
 create mode 100644 css/osticket.css
 create mode 100644 images/FhHRx-Spinner.gif

diff --git a/css/osticket.css b/css/osticket.css
new file mode 100644
index 000000000..7417c890e
--- /dev/null
+++ b/css/osticket.css
@@ -0,0 +1,25 @@
+/* Overlay */
+#overlay {
+    display: none;
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: #000;
+    z-index: 1000;
+    -webkit-transform: translate3d(0,0,0);
+}
+
+#loading {
+    border:1px solid #2a67ac;
+    padding: 10px 10px 10px 60px;
+    width: 300px;
+    height: 100px;
+    background: rgb( 255, 255, 255) url('../images/FhHRx-Spinner.gif') 10px 50% no-repeat;
+    position: fixed;
+    display: none;
+    z-index: 3000;
+}
+
+#loading h4 { margin: 3px 0 0 0; padding: 0; color: #d80; }
diff --git a/images/FhHRx-Spinner.gif b/images/FhHRx-Spinner.gif
new file mode 100644
index 0000000000000000000000000000000000000000..574b1d4a161707c6c7f0ba9d2bc531bead4a3028
GIT binary patch
literal 2608
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
FV*tO5tv&z%

literal 0
HcmV?d00001

diff --git a/include/client/footer.inc.php b/include/client/footer.inc.php
index 4b3d902c6..3398d1b93 100644
--- a/include/client/footer.inc.php
+++ b/include/client/footer.inc.php
@@ -4,5 +4,10 @@
         <p>Copyright &copy; <?php echo date('Y'); ?> <a href="http://osticket.com" target="_blank" title="osTicket">osTicket.com</a> - All rights reserved.</p>
         <a id="poweredBy" href="http://osticket.com" target="_blank">Powered by osTicket</a>
     </div>
+<div id="overlay"></div>
+<div id="loading">
+    <h4>Please Wait!</h4>
+    <p>Please wait... it will take a second!</p>
+</div>    
 </body>
 </html>  
diff --git a/include/client/header.inc.php b/include/client/header.inc.php
index 2e9906b0b..d4c90ff1f 100644
--- a/include/client/header.inc.php
+++ b/include/client/header.inc.php
@@ -10,6 +10,7 @@ header("Content-Type: text/html; charset=UTF-8\r\n");
     <meta name="description" content="customer support platform">
     <meta name="keywords" content="osTicket, Customer support system, support ticket system">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+    <link rel="stylesheet" href="<?php echo ROOT_PATH; ?>css/osticket.css" media="screen">
     <link rel="stylesheet" href="<?php echo ASSETS_PATH; ?>css/theme.css" media="screen">
     <link rel="stylesheet" href="<?php echo ASSETS_PATH; ?>css/print.css" media="print">
     <script src="<?php echo ROOT_PATH; ?>js/jquery-1.7.2.min.js"></script>
diff --git a/js/osticket.js b/js/osticket.js
index 4057b04b8..ceca388f0 100644
--- a/js/osticket.js
+++ b/js/osticket.js
@@ -8,18 +8,31 @@ $(document).ready(function(){
     $("input:not(.dp):visible:enabled:first").focus();
     $('table.list tbody tr:odd').addClass('odd');
 
-    $("form#save :input").change(function() {
+    //Overlay
+    $('#overlay').css({
+        opacity : 0.3,
+        top     : 0,
+        left    : 0
+     });
+
+    /* loading ... */
+    $("#loading").css({
+        top  : ($(window).height() / 3),
+        left : ($(window).width() / 2 - 160)    
+     });
+
+    $("form :input").change(function() {
         var fObj = $(this).closest('form');
         if(!fObj.data('changed')){
             fObj.data('changed', true);
             $('input[type=submit]', fObj).css('color', 'red');
             $(window).bind('beforeunload', function(e) {
-                return 'Are you sure you want to leave? Any changes or info you\'ve entered will be discarded!';
+                return "Are you sure you want to leave? Any changes or info you've entered will be discarded!";
              });
         }
        });
 
-    $("form#save :input[type=reset]").click(function() {
+    $("form :input[type=reset]").click(function() {
         var fObj = $(this).closest('form');
         if(fObj.data('changed')){
             $('input[type=submit]', fObj).removeAttr('style');
@@ -30,8 +43,9 @@ $(document).ready(function(){
         }
        });
 
-    $('form#save').submit(function() {
+    $('form').submit(function() {
         $(window).unbind('beforeunload');
+        $('#overlay, #loading').show();
         return true;
        });
 
-- 
GitLab