From c8bc8c97f3f6e5c04fa7b459bdb1c922d7f4e6ad Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 20 May 2013 03:35:02 -0400
Subject: [PATCH] Improved attachment reminder dialog (#1489091) Improved core show_popup_dialog() function

---
 plugins/attachment_reminder/attachment_reminder.php |    1 
 plugins/attachment_reminder/attachment_reminder.js  |   41 ++++++++++++++------
 plugins/attachment_reminder/package.xml             |    3 +
 program/js/app.js                                   |   20 ++++++----
 4 files changed, 44 insertions(+), 21 deletions(-)

diff --git a/plugins/attachment_reminder/attachment_reminder.js b/plugins/attachment_reminder/attachment_reminder.js
index a4f3e63..50d661b 100755
--- a/plugins/attachment_reminder/attachment_reminder.js
+++ b/plugins/attachment_reminder/attachment_reminder.js
@@ -14,7 +14,7 @@
   }
 
   return msg;
-}
+};
 
 function rcmail_check_message(msg)
 {
@@ -24,12 +24,33 @@
   rx = new RegExp('(' + keywords.join('|') + ')', 'i');
 
   return msg.search(rx) != -1;
-}
+};
 
 function rcmail_have_attachments()
 {
   return rcmail.env.attachments && $('li', rcmail.gui_objects.attachmentlist).length;
-}
+};
+
+function rcmail_attachment_reminder_dialog()
+{
+  var buttons = {};
+
+  buttons[rcmail.gettext('addattachment')] = function() {
+    $(this).remove();
+    if (window.UI && UI.show_uploadform) // Larry skin
+      UI.show_uploadform();
+    else if (window.rcmail_ui && rcmail_ui.show_popup) // classic skin
+      rcmail_ui.show_popup('uploadmenu', true);
+  };
+  buttons[rcmail.gettext('send')] = function(e) {
+    $(this).remove();
+    rcmail.env.attachment_reminder = true;
+    rcmail.command('send', '', e);
+  };
+
+  rcmail.env.attachment_reminder = false;
+  rcmail.show_popup_dialog(rcmail.gettext('attachment_reminder.forgotattachment'), '', buttons);
+};
 
 
 if (window.rcmail) {
@@ -37,15 +58,11 @@
     var msg = rcmail_get_compose_message(),
       subject = $('#compose-subject').val();
 
-    if (!rcmail_have_attachments() && (rcmail_check_message(msg) || rcmail_check_message(subject))) {
-      if (confirm(rcmail.gettext('forgotattachment', 'attachment_reminder'))) {
-        if (window.UI && UI.show_uploadform) // Larry skin
-          UI.show_uploadform();
-        else if (window.rcmail_ui && rcmail_ui.show_popup) // classic skin
-          rcmail_ui.show_popup('uploadmenu', true);
-
-        return false;
-      }
+    if (!rcmail.env.attachment_reminder && !rcmail_have_attachments()
+      && (rcmail_check_message(msg) || rcmail_check_message(subject))
+    ) {
+      rcmail_attachment_reminder_dialog();
+      return false;
     }
   });
 }
diff --git a/plugins/attachment_reminder/attachment_reminder.php b/plugins/attachment_reminder/attachment_reminder.php
index 0a25973..a215ff5 100755
--- a/plugins/attachment_reminder/attachment_reminder.php
+++ b/plugins/attachment_reminder/attachment_reminder.php
@@ -38,6 +38,7 @@
         if ($rcmail->task == 'mail' && $rcmail->action == 'compose') {
             $this->include_script('attachment_reminder.js');
             $this->add_texts('localization/', array('keywords', 'forgotattachment'));
+            $rcmail->output->add_label('addattachment', 'send');
         }
 
         if ($rcmail->task == 'settings') {
diff --git a/plugins/attachment_reminder/package.xml b/plugins/attachment_reminder/package.xml
index 4386118..78768d5 100644
--- a/plugins/attachment_reminder/package.xml
+++ b/plugins/attachment_reminder/package.xml
@@ -15,9 +15,10 @@
 		<active>yes</active>
 	</lead>
 	<lead>
-		<name>Thomas Yu - Sian , Liu</name>
+		<name>Thomas Yu - Sian, Liu</name>
 		<active>yes</active>
 	</lead>
+    <date>2013-05-20</date>
 	<version>
 		<release>1.1</release>
 		<api>1.0</api>
diff --git a/program/js/app.js b/program/js/app.js
index af09572..b982724 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -5659,11 +5659,11 @@
   };
 
   // open a jquery UI dialog with the given content
-  this.show_popup_dialog = function(html, title)
+  this.show_popup_dialog = function(html, title, buttons)
   {
     // forward call to parent window
     if (this.is_framed()) {
-      parent.rcmail.show_popup_dialog(html, title);
+      parent.rcmail.show_popup_dialog(html, title, buttons);
       return;
     }
 
@@ -5671,17 +5671,21 @@
       .html(html)
       .dialog({
         title: title,
+        buttons: buttons,
         modal: true,
         resizable: true,
-        width: 580,
+        width: 500,
         close: function(event, ui) { $(this).remove() }
       });
 
-      // resize and center popup
-      var win = $(window), w = win.width(), h = win.height(),
-        width = popup.width(), height = popup.height();
-      popup.dialog('option', { height: Math.min(h-40, height+50), width: Math.min(w-20, width+50) })
-        .dialog('option', 'position', ['center', 'center']);  // only works in a separate call (!?)
+    // resize and center popup
+    var win = $(window), w = win.width(), h = win.height(),
+      width = popup.width(), height = popup.height();
+
+    popup.dialog('option', {
+      height: Math.min(h - 40, height + 75 + (buttons ? 50 : 0)),
+      width: Math.min(w - 20, width + 20)
+    });
   };
 
   // enable/disable buttons for page shifting

--
Gitblit v1.9.1