From 4171c59bd79a54c1fd65128f7100247a4dec8720 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 04 Jul 2011 07:40:02 -0400
Subject: [PATCH] - Add optional textual upload progress indicator (#1486039)

---
 program/js/app.js |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/program/js/app.js b/program/js/app.js
index 53ae463..f3298cf 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -3264,14 +3264,19 @@
       });
 
       // display upload indicator and cancel button
-      var content = this.get_label('uploading' + (files > 1 ? 'many' : '')),
+      var content = '<span>' + this.get_label('uploading' + (files > 1 ? 'many' : '')) + '</span>',
         ts = frame_name.replace(/^rcmupload/, '');
 
-      if (this.env.loadingicon)
+      if (!this.env.upload_progress_time && this.env.loadingicon)
         content = '<img src="'+this.env.loadingicon+'" alt="" />'+content;
       if (this.env.cancelicon)
         content = '<a title="'+this.get_label('cancel')+'" onclick="return rcmail.cancel_attachment_upload(\''+ts+'\', \''+frame_name+'\');" href="#cancelupload"><img src="'+this.env.cancelicon+'" alt="" /></a>'+content;
       this.add2attachment_list(ts, { name:'', html:content, complete:false });
+
+      // upload progress support
+      if (this.env.upload_progress_time) {
+        this.upload_progress_start('upload', ts);
+      }
     }
 
     // set reference to the form object
@@ -3334,6 +3339,25 @@
     this.remove_from_attachment_list(name);
     $("iframe[name='"+frame_name+"']").remove();
     return false;
+  };
+
+  this.upload_progress_start = function(action, name)
+  {
+    window.setTimeout(function() { rcmail.http_request(action, {_progress: name}); },
+      this.env.upload_progress_time * 1000);
+  };
+
+  this.upload_progress_update = function(param)
+  {
+    var elem = $('#'+param.name + '> span');
+
+    if (!elem.length || !param.text)
+      return;
+
+    elem.text(param.text);
+
+    if (!param.done)
+      this.upload_progress_start(param.action, param.name);
   };
 
   // send remote request to add a new contact
@@ -5602,6 +5626,19 @@
     var ts = new Date().getTime(),
       frame_name = 'rcmupload'+ts;
 
+    // upload progress support
+    if (this.env.upload_progress_name) {
+      var fname = this.env.upload_progress_name,
+        field = $('input[name='+fname+']', form);
+
+      if (!field.length) {
+        field = $('<input>').attr({type: 'hidden', name: fname});
+        field.appendTo(form);
+      }
+
+      field.val(ts);
+    }
+
     // have to do it this way for IE
     // otherwise the form will be posted to a new window
     if (document.all) {

--
Gitblit v1.9.1