diff options
| -rw-r--r-- | CHANGELOG | 4 | ||||
| -rwxr-xr-x | program/include/rcube_template.php | 3 | ||||
| -rw-r--r-- | program/js/app.js | 47 | ||||
| -rw-r--r-- | program/localization/en_GB/labels.inc | 1 | ||||
| -rw-r--r-- | program/localization/en_US/labels.inc | 1 | ||||
| -rw-r--r-- | program/localization/pl_PL/labels.inc | 1 | ||||
| -rw-r--r-- | program/steps/mail/show.inc | 1 | ||||
| -rw-r--r-- | program/steps/mail/viewsource.inc | 15 | ||||
| -rw-r--r-- | skins/default/includes/messagemenu.html | 10 | ||||
| -rw-r--r-- | skins/default/mail.css | 19 | ||||
| -rw-r--r-- | skins/default/templates/mail.html | 5 | ||||
| -rw-r--r-- | skins/default/templates/message.html | 7 | ||||
| -rw-r--r-- | skins/default/templates/messagepreview.html | 2 | 
13 files changed, 74 insertions, 42 deletions
| @@ -1,7 +1,9 @@  CHANGELOG RoundCube Webmail  =========================== -- Add 1 minute interval in autosave options (#1485854) +- Added message menu, removed Print and Source buttons +- Added possibility to save message as .eml file (#1485861) +- Added 1 minute interval in autosave options (#1485854)  - Support UTF-7 encoding in messages (#1485832)  - Better support for malformed character names (#1485758) diff --git a/program/include/rcube_template.php b/program/include/rcube_template.php index 21363f256..b597c55b7 100755 --- a/program/include/rcube_template.php +++ b/program/include/rcube_template.php @@ -796,9 +796,6 @@ class rcube_template extends rcube_html_page              else if (in_array($attrib['command'], $a_static_commands)) {                  $attrib['href'] = rcmail_url($attrib['command']);              } -            else if ($attrib['command'] == 'permaurl' && !empty($this->env['permaurl'])) { -                $attrib['href'] = $this->env['permaurl']; -            }          }          // overwrite attributes diff --git a/program/js/app.js b/program/js/app.js index ec94b5aff..8b357e70a 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -150,9 +150,6 @@ function rcube_webmail()      // enable general commands      this.enable_command('logout', 'mail', 'addressbook', 'settings', true); -    if (this.env.permaurl) -      this.enable_command('permaurl', true); -          switch (this.task)        {        case 'mail': @@ -188,7 +185,9 @@ function rcube_webmail()          if (this.env.action=='show' || this.env.action=='preview')            { -          this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', 'mark', 'viewsource', 'print', 'load-attachment', 'load-headers', true); +          this.enable_command('show', 'reply', 'reply-all', 'forward', 'moveto', 'delete', +	    'open', 'mark', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers', true); +            if (this.env.next_uid)              {              this.enable_command('nextmessage', true); @@ -199,6 +198,13 @@ function rcube_webmail()              this.enable_command('previousmessage', true);              this.enable_command('firstmessage', true);              } +         +	  if (this.env.blockedobjects) +            { +            if (this.gui_objects.remoteobjectsmsg) +              this.gui_objects.remoteobjectsmsg.style.display = 'block'; +            this.enable_command('load-images', 'always-load', true); +            }            }          if (this.env.trash_mailbox && this.env.mailbox != this.env.trash_mailbox) @@ -211,13 +217,6 @@ function rcube_webmail()            parent.rcmail.show_contentframe(true);            } -        if ((this.env.action=='show' || this.env.action=='preview') && this.env.blockedobjects) -          { -          if (this.gui_objects.remoteobjectsmsg) -            this.gui_objects.remoteobjectsmsg.style.display = 'block'; -          this.enable_command('load-images', 'always-load', true); -          } -          if (this.env.action=='compose')            {            this.enable_command('add-attachment', 'send-attachment', 'remove-attachment', 'send', true); @@ -560,12 +559,14 @@ function rcube_webmail()          this.switch_task(command);          break; -      case 'permaurl': -        if (obj && obj.href && obj.target) -          return true; -        else if (this.env.permaurl) -          parent.location.href = this.env.permaurl; -          break; +      case 'open': +	var uid; +        if (uid = this.get_single_uid()) +	  { +	  obj.href = '?_task='+this.env.task+'&_action=show&_mbox='+urlencode(this.env.mailbox)+'&_uid='+uid; +	  return true; +          } +	break;        // misc list commands        case 'list': @@ -992,12 +993,18 @@ function rcube_webmail()          var uid;          if (uid = this.get_single_uid())            { -          ref.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+this.env.uid+'&_mbox='+urlencode(this.env.mailbox)); +          ref.sourcewin = window.open(this.env.comm_path+'&_action=viewsource&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox));            if (this.sourcewin)              window.setTimeout(function(){ ref.sourcewin.focus(); }, 20);            }          break; +      case 'download': +        var uid; +        if (uid = this.get_single_uid()) +          this.goto_url('viewsource', '&_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+'&_save=1'); +        break; +        case 'add-contact':          this.add_contact(props);          break; @@ -1357,12 +1364,12 @@ function rcube_webmail()      if (this.env.mailbox == this.env.drafts_mailbox)        {        this.enable_command('reply', 'reply-all', 'forward', false); -      this.enable_command('show', 'print', selected); +      this.enable_command('show', 'print', 'open', 'download', 'viewsource', selected);        this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));        }      else        { -      this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', selected); +      this.enable_command('show', 'reply', 'reply-all', 'forward', 'print', 'open', 'download', 'viewsource', selected);        this.enable_command('delete', 'moveto', 'mark', (list.selection.length > 0 ? true : false));        } diff --git a/program/localization/en_GB/labels.inc b/program/localization/en_GB/labels.inc index 0e86a3c71..96629a7e4 100644 --- a/program/localization/en_GB/labels.inc +++ b/program/localization/en_GB/labels.inc @@ -134,6 +134,7 @@ $labels['resetsearch'] = 'Reset search';  $labels['searchmod']  = 'Search modifiers';  $labels['msgtext']  = 'Entire message';  $labels['openinextwin'] = 'Open in new window'; +$labels['emlsave'] = 'Save (.eml)';  $labels['compose'] = 'Compose a message';  $labels['savemessage'] = 'Save this draft';  $labels['sendmessage'] = 'Send now'; diff --git a/program/localization/en_US/labels.inc b/program/localization/en_US/labels.inc index 89ab3c63e..19c09e50a 100644 --- a/program/localization/en_US/labels.inc +++ b/program/localization/en_US/labels.inc @@ -165,6 +165,7 @@ $labels['searchmod']  = 'Search modifiers';  $labels['msgtext']  = 'Entire message';  $labels['openinextwin'] = 'Open in new window'; +$labels['emlsave'] = 'Save (.eml)';  // message compose  $labels['compose']        = 'Compose a message'; diff --git a/program/localization/pl_PL/labels.inc b/program/localization/pl_PL/labels.inc index c68d19e69..f0efabae2 100644 --- a/program/localization/pl_PL/labels.inc +++ b/program/localization/pl_PL/labels.inc @@ -145,6 +145,7 @@ $labels['resetsearch'] = 'Wyczyść filtr';  $labels['searchmod']  = 'Parametry wyszukiwania';  $labels['msgtext']  = 'Cała wiadomość';  $labels['openinextwin'] = 'Otwórz w nowym oknie'; +$labels['emlsave'] = 'Zapisz (.eml)';  $labels['compose'] = 'Utwórz wiadomość';  $labels['savemessage'] = 'Zapisz kopię roboczą';  $labels['sendmessage'] = 'Wyślij teraz'; diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 9beb42521..06c9f53e5 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -65,7 +65,6 @@ if ($_GET['_uid']) {    // set environement    $OUTPUT->set_env('safemode', $MESSAGE->is_safe);    $OUTPUT->set_env('sender', $MESSAGE->sender['string']); -  $OUTPUT->set_env('permaurl', rcmail_url('show', array('_uid' => $MESSAGE->uid, '_mbox' => $mbox_name)));    $OUTPUT->set_env('mailbox', $mbox_name);    if ($CONFIG['trash_mbox'])      $OUTPUT->set_env('trash_mailbox', $CONFIG['trash_mbox']); diff --git a/program/steps/mail/viewsource.inc b/program/steps/mail/viewsource.inc index 6971e0c8a..87908303d 100644 --- a/program/steps/mail/viewsource.inc +++ b/program/steps/mail/viewsource.inc @@ -26,6 +26,21 @@ if ($uid = get_input_value('_uid', RCUBE_INPUT_GET))    $headers = $IMAP->get_headers($uid);    $charset = $headers->charset ? $headers->charset : $IMAP->default_charset;    header("Content-Type: text/plain; charset={$charset}"); + +  if (!empty($_GET['_save'])) { +    $filename = ($headers->subject ? $headers->subject : 'roundcube') . '.eml'; +    $browser = new rcube_browser; +     +    if ($browser->ie && $browser->ver < 7) +      $filename = rawurlencode(abbreviate_string($filename, 55)); +    else if ($browser->ie) +      $filename = rawurlencode($filename); +    else +      $filename = addcslashes($filename, '"'); +       +    header("Content-Disposition: attachment; filename=\"$filename\""); +  } +      $IMAP->print_raw_body($uid);  }  else diff --git a/skins/default/includes/messagemenu.html b/skins/default/includes/messagemenu.html new file mode 100644 index 000000000..81a1c5d4f --- /dev/null +++ b/skins/default/includes/messagemenu.html @@ -0,0 +1,10 @@ +<div id="messagemenu"> +    <ul class="toolbarmenu"> +	<li><roundcube:button command="print" label="printmessage" classAct="active" /></li> +	<li><roundcube:button command="download" label="emlsave" classAct="active" /></li> +	<li><roundcube:button command="viewsource" label="viewsource" classAct="active" /></li> +	<li><hr></li> +	<li><roundcube:button command="open" label="openinextwin" target="_blank" classAct="active" /></li> +	<roundcube:container name="messagemenu" id="messagemenu" /> +    </ul> +</div> diff --git a/skins/default/mail.css b/skins/default/mail.css index 00f8ca327..7ab2e340e 100644 --- a/skins/default/mail.css +++ b/skins/default/mail.css @@ -46,7 +46,8 @@  }  #markmessagemenu, -#searchmenu +#searchmenu, +#messagemenu  {    position: absolute;    top: 32px; @@ -100,6 +101,12 @@ ul.toolbarmenu li input    vertical-align: middle;  } +ul.toolbarmenu li hr +{ +  width: 90%; +  margin: 2px 10px; +} +  #searchfilter  {    position: absolute; @@ -905,16 +912,6 @@ div.message-htmlpart div.rcmBody    color: #333333;  } -#messageviewlink -{ -  position: absolute; -  top: 8px; -  right: 10px; -  width: 15px; -  height: 15px; -  border: 0; -} -  /** message compose styles */  #compose-toolbar diff --git a/skins/default/templates/mail.html b/skins/default/templates/mail.html index 735144646..bc931ca27 100644 --- a/skins/default/templates/mail.html +++ b/skins/default/templates/mail.html @@ -27,6 +27,7 @@  <roundcube:include file="/includes/taskbar.html" />  <roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/messagemenu.html" />  <div id="mainscreen"> @@ -113,12 +114,12 @@  <div id="messagetoolbar">  <roundcube:button command="checkmail" imageSel="/images/buttons/inbox_sel.png" imageAct="/images/buttons/inbox_act.png" imagePas="/images/buttons/inbox_pas.png" width="32" height="32" title="checkmail" />  <roundcube:button command="compose" imageSel="/images/buttons/compose_sel.png" imageAct="/images/buttons/compose_act.png" imagePas="/images/buttons/compose_pas.png" width="32" height="32" title="writenewmessage" /> -<roundcube:button name="markreadbutton" id="markreadbutton" image="/images/buttons/markread_act.png" width="32" height="32" title="markmessages" onclick="rcmail_ui.show_markmenu();return false" />  <roundcube:button command="reply" imageSel="/images/buttons/reply_sel.png" imageAct="/images/buttons/reply_act.png" imagePas="/images/buttons/reply_pas.png" width="32" height="32" title="replytomessage" />  <roundcube:button command="reply-all" imageSel="/images/buttons/replyall_sel.png" imageAct="/images/buttons/replyall_act.png" imagePas="/images/buttons/replyall_pas.png" width="32" height="32" title="replytoallmessage" />  <roundcube:button command="forward" imageSel="/images/buttons/forward_sel.png" imageAct="/images/buttons/forward_act.png" imagePas="/images/buttons/forward_pas.png" width="32" height="32" title="forwardmessage" />  <roundcube:button command="delete" imageSel="/images/buttons/delete_sel.png" imageAct="/images/buttons/delete_act.png" imagePas="/images/buttons/delete_pas.png" width="32" height="32" title="deletemessage" /> -<roundcube:button command="print" imageSel="/images/buttons/print_sel.png" imageAct="/images/buttons/print_act.png" imagePas="/images/buttons/print_pas.png" width="32" height="32" title="printmessage" /> +<roundcube:button name="markreadbutton" id="markreadbutton" image="/images/buttons/markread_act.png" width="32" height="32" title="markmessages" onclick="rcmail_ui.show_markmenu();return false" /> +<roundcube:button name="messagemenulink" id="messagemenulink" image="/images/icons/extwin.png" width="32" height="32" title="messagemenu" onclick="rcmail_ui.show_messagemenu();return false" />  <roundcube:container name="toolbar" id="messagetoolbar" />  <div id="markmessagemenu"> diff --git a/skins/default/templates/message.html b/skins/default/templates/message.html index 7d42ef73f..6786080c8 100644 --- a/skins/default/templates/message.html +++ b/skins/default/templates/message.html @@ -5,6 +5,7 @@  <roundcube:include file="/includes/links.html" />  <link rel="stylesheet" type="text/css" href="/mail.css" />  <script type="text/javascript" src="/splitter.js"></script> +<script type="text/javascript" src="/functions.js"></script>  <style type="text/css">  #mailboxlist-container { width: <roundcube:exp expression="!empty(cookie:mailviewsplitterv) ? cookie:mailviewsplitterv-5 : 160" />px; }  #messageframe { @@ -13,10 +14,11 @@  }  </style>  </head> -<body> +<body onload="rcube_init_mail_ui()">  <roundcube:include file="/includes/taskbar.html" />  <roundcube:include file="/includes/header.html" /> +<roundcube:include file="/includes/messagemenu.html" />  <div id="messagecountbar">  <roundcube:button command="firstmessage" imageSel="/images/buttons/first_sel.png" imageAct="/images/buttons/first_act.png" imagePas="/images/buttons/first_pas.png" width="11" height="11" title="firstmessage" /> @@ -33,8 +35,7 @@  <roundcube:button command="reply-all" imageSel="/images/buttons/replyall_sel.png" imageAct="/images/buttons/replyall_act.png" imagePas="/images/buttons/replyall_pas.png" width="32" height="32" title="replytoallmessage" />  <roundcube:button command="forward" imageSel="/images/buttons/forward_sel.png" imageAct="/images/buttons/forward_act.png" imagePas="/images/buttons/forward_pas.png" width="32" height="32" title="forwardmessage" />  <roundcube:button command="delete" imageSel="/images/buttons/delete_sel.png" imageAct="/images/buttons/delete_act.png" imagePas="/images/buttons/delete_pas.png" width="32" height="32" title="deletemessage" /> -<roundcube:button command="print" imageSel="/images/buttons/print_sel.png" imageAct="/images/buttons/print_act.png" imagePas="/images/buttons/print_pas.png" width="32" height="32" title="printmessage" /> -<roundcube:button command="viewsource" imageSel="/images/buttons/source_sel.png" imageAct="/images/buttons/source_act.png" imagePas="/images/buttons/source_pas.png" width="32" height="32" title="viewsource" /> +<roundcube:button name="messagemenulink" image="/images/icons/extwin.png" width="32" height="32" title="messagemenu" onclick="rcmail_ui.show_messagemenu();return false" id="messagemenulink" />  <roundcube:object name="mailboxlist" type="select" noSelection="moveto" maxlength="25" onchange="rcmail.command('moveto', this.options[this.selectedIndex].value)" class="mboxlist" />  <roundcube:container name="toolbar" id="messagetoolbar" />  </div> diff --git a/skins/default/templates/messagepreview.html b/skins/default/templates/messagepreview.html index 24848bbe7..9cd25f60b 100644 --- a/skins/default/templates/messagepreview.html +++ b/skins/default/templates/messagepreview.html @@ -8,7 +8,7 @@  <body class="iframe">  <div class="messageheaderbox"> -<roundcube:button command="permaurl" image="/images/icons/extwin.png" width="15" height="15" title="openinextwin" id="messageviewlink" target="_blank" /> +<roundcube:button command="messagemenu" image="/images/icons/extwin.png" width="15" height="15" title="messageactions" id="messagemenulink" />  <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/plus.gif" summary="Message headers" />  <roundcube:object name="messageAttachments" id="attachment-list" />  </div> | 
