Changeset 4032 in subversion


Ignore:
Timestamp:
Oct 4, 2010 8:27:06 AM (3 years ago)
Author:
alec
Message:
Location:
trunk/roundcubemail
Files:
2 added
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/roundcubemail/CHANGELOG

    r4029 r4032  
    1818- Fix handling of Thunderbird's vCards (#1487024) 
    1919- Fix mailto optional params in plain text messages aren't handled (#1487026) 
     20- Add Reply-to-List feature (#1484252) 
     21- Add Mail-Followup-To/Mail-Reply-To support (#1485547) 
    2022 
    2123RELEASE 0.4.1 
  • trunk/roundcubemail/program/include/rcube_imap_generic.php

    r4007 r4032  
    10721072            $request .= "CONTENT-TRANSFER-ENCODING CONTENT-TYPE MESSAGE-ID "; 
    10731073            $request .= "REFERENCES DISPOSITION-NOTIFICATION-TO X-PRIORITY "; 
    1074             $request .= "X-DRAFT-INFO".$add.")])"; 
     1074            $request .= "X-DRAFT-INFO LIST-POST MAIL-FOLLOWUP-TO MAIL-REPLY-TO "; 
     1075        $request .= "RETURN-PATH".$add.")])"; 
    10751076 
    10761077            if (!$this->putLine($request)) { 
  • trunk/roundcubemail/program/include/rcube_message.php

    r4015 r4032  
    116116    public function get_header($name, $raw = false) 
    117117    { 
    118         $value = $this->headers->$name; 
     118        if ($this->headers->$name) 
     119            $value = $this->headers->$name; 
     120        else if ($this->headers->others[$name]) 
     121            $value = $this->headers->others[$name]; 
     122 
    119123        return $raw ? $value : $this->imap->decode_header($value); 
    120124    } 
  • trunk/roundcubemail/program/js/app.js

    r4027 r4032  
    200200          this.set_alttext('delete', 'movemessagetotrash'); 
    201201 
    202         this.env.message_commands = ['show', 'reply', 'reply-all', 'forward', 'moveto', 'copy', 'delete', 
    203           'open', 'mark', 'edit', 'viewsource', 'download', 'print', 'load-attachment', 'load-headers']; 
     202        this.env.message_commands = ['show', 'reply', 'reply-all', 'reply-list', 'forward', 
     203          'moveto', 'copy', 'delete', 'open', 'mark', 'edit', 'viewsource', 'download', 
     204          'print', 'load-attachment', 'load-headers']; 
    204205 
    205206        if (this.env.action=='show' || this.env.action=='preview') { 
    206207          this.enable_command(this.env.message_commands, this.env.uid); 
     208          this.enable_command('reply-list', this.env.list_post); 
    207209 
    208210          if (this.env.next_uid) { 
     
    883885 
    884886      case 'reply-all': 
     887      case 'reply-list': 
    885888      case 'reply': 
    886889        var uid; 
    887         if (uid = this.get_single_uid()) 
    888           this.goto_url('compose', '_reply_uid='+uid+'&_mbox='+urlencode(this.env.mailbox)+(command=='reply-all' ? '&_all=1' : ''), true); 
     890        if (uid = this.get_single_uid()) { 
     891          var url = '_reply_uid='+uid+'&_mbox='+urlencode(this.env.mailbox); 
     892          if (command == 'reply-all') 
     893            // do reply-list, when list is detected and popup menu wasn't used  
     894            url += '&_all=' + (!props && this.commands['reply-list'] ? 'list' : 'all'); 
     895          else if (command == 'reply-list') 
     896            url += '&_all=list'; 
     897 
     898          this.goto_url('compose', url, true); 
     899        } 
    889900        break; 
    890901 
     
    13671378 
    13681379    this.enable_command(this.env.message_commands, selected); 
    1369     // Hide certain command buttons when Drafts folder is selected 
    1370     if (selected && this.env.mailbox == this.env.drafts_mailbox) { 
    1371       this.enable_command('reply', 'reply-all', 'forward', false); 
     1380    if (selected) { 
     1381      // Hide certain command buttons when Drafts folder is selected 
     1382      if (this.env.mailbox == this.env.drafts_mailbox) 
     1383        this.enable_command('reply', 'reply-all', 'reply-list', 'forward', false); 
     1384      // Disable reply-list when List-Post header is not set 
     1385      else { 
     1386        var msg = this.env.messages[list.get_single_selection()]; 
     1387        if (!msg.ml) 
     1388          this.enable_command('reply-list', false); 
     1389      } 
    13721390    } 
    13731391    // Multi-message commands 
     
    15471565      parent_uid: flags.parent_uid?flags.parent_uid:0, 
    15481566      selected: this.select_all_mode || this.message_list.in_selection(uid), 
     1567      ml: flags.ml?1:0, 
    15491568      // flags from plugins 
    15501569      flags: flags.extra_flags 
     
    50165035          // re-enable commands on move/delete error 
    50175036          this.enable_command(this.env.message_commands, true); 
     5037          if (!this.env.list_post) 
     5038            this.enable_command('reply-list', false); 
    50185039        } 
    50195040        else if (this.task == 'addressbook') { 
  • trunk/roundcubemail/program/localization/en_US/labels.inc

    r4012 r4032  
    4747$labels['bcc']     = 'Bcc'; 
    4848$labels['replyto'] = 'Reply-To'; 
     49$labels['mailreplyto'] = 'Mail-Reply-To'; 
     50$labels['mailfollowupto'] = 'Mail-Followup-To'; 
    4951$labels['date']    = 'Date'; 
    5052$labels['size']    = 'Size'; 
     
    5456// aliases 
    5557$labels['reply-to'] = $labels['replyto']; 
     58$labels['mailreply-to'] = $labels['mailreplyto']; 
     59$labels['mailfollowup-to'] = $labels['mailfollowupto']; 
    5660 
    5761$labels['mailboxlist'] = 'Folders'; 
     
    122126$labels['writenewmessage']  = 'Create a new message'; 
    123127$labels['replytomessage']   = 'Reply to sender'; 
    124 $labels['replytoallmessage'] = 'Reply to sender and all recipients'; 
     128$labels['replytoallmessage'] = 'Reply to list or to sender and all recipients'; 
     129$labels['replyall']         = 'Reply all'; 
     130$labels['replylist']        = 'Reply list'; 
    125131$labels['forwardmessage']   = 'Forward the message'; 
    126132$labels['deletemessage']    = 'Delete message'; 
     
    234240$labels['addbcc'] = 'Add Bcc'; 
    235241$labels['addreplyto'] = 'Add Reply-To'; 
     242$labels['addmailreplyto'] = 'Add Mail-Reply-To'; 
     243$labels['addmailfollowupto'] = 'Add Mail-Followup-To'; 
    236244 
    237245// mdn 
  • trunk/roundcubemail/program/steps/mail/compose.inc

    r4022 r4032  
    167167 
    168168    if (!empty($_SESSION['compose']['param']['all'])) 
    169       $MESSAGE->reply_all = 1; 
     169      $MESSAGE->reply_all = $_SESSION['compose']['param']['all']; 
    170170 
    171171    $OUTPUT->set_env('compose_mode', 'reply'); 
     
    246246      $fname = '_replyto'; 
    247247      $param = 'replyto'; 
     248      $header = 'reply-to'; 
     249 
     250    case 'mailreplyto': 
     251    case 'mailreply-to': 
     252      if (!$fname) { 
     253        $fname = '_mailreplyto'; 
     254        $param = 'mailreplyto'; 
     255        $header = 'mailreply-to'; 
     256      } 
     257 
     258    case 'mailfollowupto': 
     259    case 'mailfollowup-to': 
     260      if (!$fname) { 
     261        $fname = '_mailfollowupto'; 
     262        $param = 'mailfollowupto'; 
     263        $header = 'mailfollowup-to'; 
     264      } 
     265 
    248266      $allow_attrib = array('id', 'class', 'style', 'size', 'tabindex'); 
    249267      $field_type = 'html_inputfield'; 
     
    259277  else if ($header && $compose_mode == RCUBE_COMPOSE_REPLY) { 
    260278    // get recipent address(es) out of the message headers 
    261     if ($header=='to' && !empty($MESSAGE->headers->replyto)) 
    262       $fvalue = $MESSAGE->headers->replyto; 
    263     else if ($header=='to' && !empty($MESSAGE->headers->from)) 
    264       $fvalue = $MESSAGE->headers->from; 
     279    if ($header == 'to') { 
     280      $mailfollowup = $MESSAGE->headers->others['mail-followup-to']; 
     281      $mailreplyto  = $MESSAGE->headers->others['mail-reply-to']; 
     282 
     283      if ($MESSAGE->reply_all == 'list' && $mailfollowup) 
     284        $fvalue = $mailfollowup; 
     285      else if ($MESSAGE->reply_all == 'list' 
     286        && preg_match('/<mailto:([^>]+)>/i', $MESSAGE->headers->others['list-post'], $m)) 
     287        $fvalue = $m[1]; 
     288      else if ($mailreplyto) 
     289        $fvalue = $mailreplyto; 
     290      else if (!empty($MESSAGE->headers->replyto)) 
     291        $fvalue = $MESSAGE->headers->replyto; 
     292      else if (!empty($MESSAGE->headers->from)) 
     293        $fvalue = $MESSAGE->headers->from; 
     294    } 
    265295    // add recipent of original message if reply to all 
    266     else if ($header=='cc' && !empty($MESSAGE->reply_all)) { 
     296    else if ($header == 'cc' && !empty($MESSAGE->reply_all) && $MESSAGE->reply_all != 'list') { 
    267297      if ($v = $MESSAGE->headers->to) 
    268298        $fvalue .= $v; 
    269  
    270299      if ($v = $MESSAGE->headers->cc) 
    271300        $fvalue .= (!empty($fvalue) ? ', ' : '') . $v; 
     
    306335    else if ($header=='bcc' && !empty($MESSAGE->headers->bcc)) 
    307336      $fvalue = $MESSAGE->get_header('bcc'); 
     337    else if ($header=='reply-to' && !empty($MESSAGE->headers->replyto)) 
     338      $fvalue = $MESSAGE->get_header('reply-to'); 
     339    else if ($header=='mail-reply-to' && !empty($MESSAGE->headers->others['mail-reply-to'])) 
     340      $fvalue = $MESSAGE->get_header('followup-to'); 
     341    else if ($header=='mail-followup-to' && !empty($MESSAGE->headers->others['mail-followup-to'])) 
     342      $fvalue = $MESSAGE->get_header('mail-followup-to'); 
    308343 
    309344    $addresses = $IMAP->decode_address_list($fvalue); 
     
    365400    { 
    366401      if (!empty($addr['mailto'])) 
    367         $a_recipients[] = mb_strtolower(idn_to_utf8($addr['mailto'])); 
     402        $a_recipients[] = strtolower($addr['mailto']); 
    368403    } 
    369404 
     
    374409      { 
    375410        if (!empty($addr['mailto'])) 
    376           $a_recipients[] = mb_strtolower(idn_to_utf8($addr['mailto'])); 
     411          $a_recipients[] = strtolower($addr['mailto']); 
    377412      } 
    378413    } 
     
    384419  if (count($user_identities)) 
    385420  { 
    386     $from_id = 0; 
    387421    $a_signatures = array(); 
    388422 
     
    390424    $select_from = new html_select($field_attrib); 
    391425 
     426    // create SELECT element 
    392427    foreach ($user_identities as $sql_arr) 
    393428    { 
    394       $sql_arr['email'] = mb_strtolower(idn_to_utf8($sql_arr['email'])); 
     429      $email = mb_strtolower(idn_to_utf8($sql_arr['email'])); 
    395430      $identity_id = $sql_arr['identity_id']; 
    396       $select_from->add(format_email_recipient($sql_arr['email'], $sql_arr['name']), $identity_id); 
     431      $select_from->add(format_email_recipient($email, $sql_arr['name']), $identity_id); 
    397432 
    398433      // add signature to array 
     
    409444 
    410445      if ($compose_mode == RCUBE_COMPOSE_REPLY && is_array($MESSAGE->compose_from)) 
    411         $MESSAGE->compose_from[] = $sql_arr['email']; 
    412  
    413       if (empty($_POST['_from']) && empty($_SESSION['compose']['param']['from'])) 
    414       { 
    415         // set draft's identity 
    416         if ($compose_mode == RCUBE_COMPOSE_DRAFT && strstr($MESSAGE->headers->from, $sql_arr['email'])) 
    417           $from_id = $sql_arr['identity_id']; 
    418         // set identity if it's one of the reply-message recipients (with prio for default identity) 
    419         else if (in_array($sql_arr['email'], $a_recipients) && (empty($from_id) || $sql_arr['standard'])) 
    420           $from_id = $sql_arr['identity_id']; 
    421       } 
    422     } 
     446        $MESSAGE->compose_from[] = $email; 
     447    } 
     448 
     449    $from_id = 0; 
    423450 
    424451    // overwrite identity selection with post parameter 
     
    427454    else if (!empty($_SESSION['compose']['param']['from'])) 
    428455      $from_id = $_SESSION['compose']['param']['from']; 
     456    else { 
     457      $return_path = $MESSAGE->headers->others['return-path']; 
     458 
     459      // Set identity 
     460      foreach ($user_identities as $sql_arr) { 
     461        // set draft's identity 
     462        if ($compose_mode == RCUBE_COMPOSE_DRAFT) { 
     463          if (strstr($MESSAGE->headers->from, $sql_arr['email'])) 
     464            $from_id = $sql_arr['identity_id']; 
     465            break; 
     466        } 
     467        // set identity if it's one of the reply-message recipients (with prio for default identity) 
     468        else if (in_array($sql_arr['email'], $a_recipients) && (empty($from_id) || $sql_arr['standard'])) 
     469          $from_id = $sql_arr['identity_id']; 
     470        // set identity when replying to mailing list 
     471        else if (strpos($return_path, str_replace('@', '=', $sql_arr['email']).'@') !== false) 
     472          $from_id = $sql_arr['identity_id']; 
     473 
     474        if ($from_id) 
     475          break; 
     476      } 
     477    } 
    429478 
    430479    $out = $select_from->show($from_id); 
  • trunk/roundcubemail/program/steps/mail/func.inc

    r4024 r4032  
    339339    if ($header->flagged) 
    340340      $a_msg_flags['flagged'] = 1; 
     341    if ($header->others['list-post']) 
     342      $a_msg_flags['ml'] = 1; 
    341343    if (preg_match("/(application\/|multipart\/m)/i", $header->ctype)) 
    342344      $a_msg_flags['attachment'] = 1; 
     
    943945 
    944946  // show these headers 
    945   $standard_headers = array('subject', 'from', 'to', 'cc', 'bcc', 'replyto', 'date'); 
     947  $standard_headers = array('subject', 'from', 'to', 'cc', 'bcc', 'replyto', 
     948    'mail-reply-to', 'mail-followup-to', 'date'); 
    946949  $output_headers = array(); 
    947950 
    948951  foreach ($standard_headers as $hkey) { 
    949     if (!$headers[$hkey]) 
     952    if ($headers[$hkey]) 
     953      $value = $headers[$hkey]; 
     954    else if ($headers['others'][$hkey]) 
     955      $value = $headers['others'][$hkey]; 
     956    else 
    950957      continue; 
    951958 
    952959    if ($hkey == 'date') { 
    953960      if ($PRINT_MODE) 
    954         $header_value = format_date($headers[$hkey], $RCMAIL->config->get('date_long', 'x')); 
     961        $header_value = format_date($value, $RCMAIL->config->get('date_long', 'x')); 
    955962      else 
    956         $header_value = format_date($headers[$hkey]); 
     963        $header_value = format_date($value); 
    957964    } 
    958965    else if ($hkey == 'replyto') { 
    959966      if ($headers['replyto'] != $headers['from']) 
    960         $header_value = rcmail_address_string($headers['replyto'], null, true, $attrib['addicon']); 
     967        $header_value = rcmail_address_string($value, null, true, $attrib['addicon']); 
    961968      else 
    962969        continue; 
    963970    } 
     971    else if ($hkey == 'mail-reply-to') { 
     972      if ($headers['mail-replyto'] != $headers['reply-to'] 
     973        && $headers['reply-to'] != $headers['from'] 
     974      ) 
     975        $header_value = rcmail_address_string($value, null, true, $attrib['addicon']); 
     976      else 
     977        continue; 
     978    } 
     979    else if ($hkey == 'mail-followup-to') { 
     980      $header_value = rcmail_address_string($value, null, true, $attrib['addicon']); 
     981    } 
    964982    else if (in_array($hkey, array('from', 'to', 'cc', 'bcc'))) 
    965       $header_value = rcmail_address_string($headers[$hkey], null, true, $attrib['addicon']); 
    966     else if ($hkey == 'subject' && empty($headers[$hkey])) 
     983      $header_value = rcmail_address_string($value, null, true, $attrib['addicon']); 
     984    else if ($hkey == 'subject' && empty($value)) 
    967985      $header_value = rcube_label('nosubject'); 
    968986    else 
    969       $header_value = trim($IMAP->decode_header($headers[$hkey])); 
    970  
    971     $output_headers[$hkey] = array('title' => rcube_label($hkey), 'value' => $header_value, 'raw' => $headers[$hkey]); 
     987      $header_value = trim($IMAP->decode_header($value)); 
     988 
     989    $output_headers[$hkey] = array('title' => rcube_label($hkey), 'value' => $header_value, 'raw' => $value); 
    972990  } 
    973991 
  • trunk/roundcubemail/program/steps/mail/sendmail.inc

    r4009 r4032  
    315315  $headers['Reply-To'] = rcmail_email_input_format($identity_arr['reply-to'], false, true); 
    316316 
     317if (!empty($_POST['_mailfollowupto'])) 
     318  $headers['Mail-Followup-To'] = rcmail_email_input_format(get_input_value('_mailfollowupto', RCUBE_INPUT_POST, TRUE, $message_charset)); 
     319if (!empty($_POST['_mailreplyto'])) 
     320  $headers['Mail-Reply-To'] = rcmail_email_input_format(get_input_value('_mailreplyto', RCUBE_INPUT_POST, TRUE, $message_charset)); 
     321 
    317322if (!empty($_SESSION['compose']['reply_msgid'])) 
    318323  $headers['In-Reply-To'] = $_SESSION['compose']['reply_msgid']; 
  • trunk/roundcubemail/program/steps/mail/show.inc

    r4011 r4032  
    6262  if ($CONFIG['display_next']) 
    6363    $OUTPUT->set_env('display_next', true); 
     64  if ($MESSAGE->headers->others['list-post']) 
     65    $OUTPUT->set_env('list_post', true); 
    6466 
    6567  if (!$OUTPUT->ajax_call) 
  • trunk/roundcubemail/skins/default/common.css

    r3989 r4032  
    463463} 
    464464 
     465.dropbutton, 
     466.dropbutton span 
     467{ 
     468  float: left; 
     469  height: 32px; 
     470} 
     471 
     472.dropbutton:hover 
     473{ 
     474  background: url(images/dbutton.png) 0 0 no-repeat transparent; 
     475} 
     476 
     477.dropbutton span 
     478{ 
     479  width: 9px; 
     480  background: url(images/dbutton.png) -53px 0 no-repeat transparent; 
     481} 
     482 
     483.dropbutton span:hover 
     484{ 
     485  cursor: pointer; 
     486  background-position: -64px 0; 
     487} 
     488 
    465489 
    466490/***** common table settings ******/ 
     
    753777  font-weight: bold; 
    754778} 
    755    
  • trunk/roundcubemail/skins/default/functions.js

    r4027 r4032  
    3030  this.popups = { 
    3131    markmenu:       {id:'markmessagemenu'}, 
     32    replyallmenu:   {id:'replyallmenu'}, 
    3233    searchmenu:     {id:'searchmenu', editable:1}, 
    3334    messagemenu:    {id:'messagemenu'}, 
     
    294295init_compose_form: function() 
    295296{ 
    296   var cc_field = document.getElementById('_cc'), 
    297     bcc_field = document.getElementById('_bcc'), 
     297  var f, field, fields = ['cc', 'bcc', 'replyto', 'mailreplyto', 'mailfollowupto'], 
    298298    div = document.getElementById('compose-div'), 
    299299    headers_div = document.getElementById('compose-headers-div'); 
    300300 
    301   if (cc_field && cc_field.value != '') 
    302     rcmail_ui.show_header_form('cc'); 
    303  
    304   if (bcc_field && bcc_field.value != '') 
    305     rcmail_ui.show_header_form('bcc'); 
     301  // Show input elements with non-empty value 
     302  for (f=0; f<fields.length; f++) { 
     303    if ((field = $('#_'+fields[f])) && field.length && field.val() != '') 
     304      rcmail_ui.show_header_form(fields[f]); 
     305  } 
    306306 
    307307  // prevent from form data loss when pressing ESC key in IE 
  • trunk/roundcubemail/skins/default/mail.css

    r4008 r4032  
    1414} 
    1515 
    16 #messagetoolbar > a 
     16#messagetoolbar a 
    1717{ 
    1818  display: block; 
     
    2828  height: 32px; 
    2929  padding: 0; 
    30   margin-right: 10px; 
     30  margin: 0 5px; 
    3131  overflow: hidden; 
    3232  background: url(images/mail_toolbar.png) 0 0 no-repeat transparent; 
     
    12291229#compose-cc, 
    12301230#compose-bcc, 
    1231 #compose-replyto 
     1231#compose-replyto, 
     1232#compose-mailreplyto, 
     1233#compose-mailfollowupto 
    12321234{ 
    12331235  display: none; 
  • trunk/roundcubemail/skins/default/templates/compose.html

    r4008 r4032  
    7979            </td> 
    8080            <td class="editfield"><roundcube:object name="composeHeaders" part="replyto" form="form" id="_replyto" size="70" tabindex="5" /></td> 
     81        </tr><tr id="compose-mailreplyto"> 
     82            <td class="title top"> 
     83                <a href="#mailreplyto" onclick="return rcmail_ui.hide_header_form('mailreplyto');"><img src="/images/icons/minus.gif" alt="" title="<roundcube:label name='delete' />" /></a> 
     84                <label for="_mailreplyto"><roundcube:label name="mailreplyto" /></label> 
     85            </td> 
     86            <td class="editfield"><roundcube:object name="composeHeaders" part="mailreplyto" form="form" id="_mailreplyto" size="70" tabindex="6" /></td> 
     87        </tr><tr id="compose-mailfollowupto"> 
     88            <td class="title top"> 
     89                <a href="#mailfollowupto" onclick="return rcmail_ui.hide_header_form('mailfollowupto');"><img src="/images/icons/minus.gif" alt="" title="<roundcube:label name='delete' />" /></a> 
     90                <label for="_mailfollowupto"><roundcube:label name="mailfollowupto" /></label> 
     91            </td> 
     92            <td class="editfield"><roundcube:object name="composeHeaders" part="mailfollowupto" form="form" id="_mailfollowupto" size="70" tabindex="7" /></td> 
    8193        </tr><tr> 
    8294            <td></td> 
     
    8799                <span class="separator">|</span> 
    88100                <a href="#reply-to" onclick="return rcmail_ui.show_header_form('replyto')" id="replyto-link"><roundcube:label name="addreplyto" /></a> 
     101                <span class="separator">|</span> 
     102                <a href="#mailreply-to" onclick="return rcmail_ui.show_header_form('mailreplyto')" id="mailreplyto-link"><roundcube:label name="addmailreplyto" /></a> 
     103                <span class="separator">|</span> 
     104                <a href="#mailfollowup-to" onclick="return rcmail_ui.show_header_form('mailfollowupto')" id="mailfollowupto-link"><roundcube:label name="addmailfollowupto" /></a> 
    89105            </td> 
    90106        </tr><tr> 
    91107            <td class="title"><label for="compose-subject"><roundcube:label name="subject" /></label></td> 
    92             <td class="editfield"><roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="6" /></td> 
     108            <td class="editfield"><roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="8" /></td> 
    93109        </tr> 
    94110        </table> 
     
    96112    <div id="compose-div"> 
    97113        <div class="boxlistcontent" style="overflow: hidden; top: 0"> 
    98             <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="7" /> 
     114            <roundcube:object name="composeBody" id="compose-body" form="form" cols="70" rows="20" tabindex="9" /> 
    99115        </div> 
    100116        <div class="boxfooter"> 
    101117            <div id="compose-buttons"> 
    102                 <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="8" /> 
    103                 <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="9" /> 
     118                <roundcube:button type="input" command="send" class="button mainaction" label="sendmessage" tabindex="10" /> 
     119                <roundcube:button type="input" command="list" class="button" label="cancel" tabindex="11" /> 
    104120            </div> 
    105121            <div id="compose-editorfooter"> 
     
    107123                <span> 
    108124                    <label><roundcube:label name="editortype" /></label> 
    109                     <roundcube:object name="editorSelector" editorid="compose-body" tabindex="10" /> 
     125                    <roundcube:object name="editorSelector" editorid="compose-body" tabindex="12" /> 
    110126                </span> 
    111127            </div> 
  • trunk/roundcubemail/skins/default/templates/mail.html

    r3814 r4032  
    121121<roundcube:button command="compose" type="link" class="button compose" classAct="button compose" classSel="button composeSel" title="writenewmessage" content=" " /> 
    122122<roundcube:button command="reply" type="link" class="buttonPas reply" classAct="button reply" classSel="button replySel" title="replytomessage" content=" " /> 
     123<span class="dropbutton"> 
    123124<roundcube:button command="reply-all" type="link" class="buttonPas replyAll" classAct="button replyAll" classSel="button replyAllSel" title="replytoallmessage" content=" " /> 
     125<span id="replyallmenulink" onclick="rcmail_ui.show_popup('replyallmenu');return false"></span></span> 
    124126<roundcube:button command="forward" type="link" class="buttonPas forward" classAct="button forward" classSel="button forwardSel" title="forwardmessage" content=" " /> 
    125127<roundcube:button command="delete" type="link" class="buttonPas delete" classAct="button delete" classSel="button deleteSel" title="deletemessage" content=" " /> 
     
    139141</div> 
    140142 
     143<roundcube:include file="/includes/replyallmenu.html" /> 
    141144<roundcube:include file="/includes/messagemenu.html" /> 
    142145 
  • trunk/roundcubemail/skins/default/templates/message.html

    r3814 r4032  
    2222<roundcube:button command="compose" type="link" class="button compose" classAct="button compose" classSel="button composeSel" title="writenewmessage" content=" " /> 
    2323<roundcube:button command="reply" type="link" class="buttonPas reply" classAct="button reply" classSel="button replySel" title="replytomessage" content=" " /> 
     24<span class="dropbutton"> 
    2425<roundcube:button command="reply-all" type="link" class="buttonPas replyAll" classAct="button replyAll" classSel="button replyAllSel" title="replytoallmessage" content=" " /> 
     26<span id="replyallmenulink" onclick="rcmail_ui.show_popup('replyallmenu');return false"></span></span> 
    2527<roundcube:button command="forward" type="link" class="buttonPas forward" classAct="button forward" classSel="button forwardSel" title="forwardmessage" content=" " /> 
    2628<roundcube:button command="delete" type="link" class="buttonPas delete" classAct="button delete" classSel="button deleteSel" title="deletemessage" content=" " /> 
     
    3032</div> 
    3133 
     34<roundcube:include file="/includes/replyallmenu.html" /> 
    3235<roundcube:include file="/includes/messagemenu.html" /> 
    3336 
Note: See TracChangeset for help on using the changeset viewer.