Aleksander Machniak
2013-05-20 c8bc8c97f3f6e5c04fa7b459bdb1c922d7f4e6ad
Improved attachment reminder dialog (#1489091)
Improved core show_popup_dialog() function
4 files modified
65 ■■■■■ changed files
plugins/attachment_reminder/attachment_reminder.js 41 ●●●● patch | view | raw | blame | history
plugins/attachment_reminder/attachment_reminder.php 1 ●●●● patch | view | raw | blame | history
plugins/attachment_reminder/package.xml 3 ●●●● patch | view | raw | blame | history
program/js/app.js 20 ●●●●● patch | view | raw | blame | history
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;
    }
  });
}
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') {
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>
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