diff options
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | program/js/app.js | 13 | ||||
| -rw-r--r-- | program/steps/mail/attachments.inc | 5 | ||||
| -rw-r--r-- | program/steps/mail/compose.inc | 24 | ||||
| -rw-r--r-- | program/steps/mail/show.inc | 5 | ||||
| -rw-r--r-- | skins/classic/templates/message.html | 2 | ||||
| -rw-r--r-- | skins/classic/templates/messagepreview.html | 2 | 
7 files changed, 37 insertions, 15 deletions
@@ -1,6 +1,7 @@  CHANGELOG Roundcube Webmail  =========================== +- Display full attachment name using title attribute when name is too long to display (#1489320)  - Fix XSS issue in addressbook group name field [CVE-2013-5646] (#1489333)  - Fix attachment icon issue when rare font/language is used (#1489326)  - After message is sent refresh messages list of replied message folder (#1489249) diff --git a/program/js/app.js b/program/js/app.js index 1d1c65172..24aaca055 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -1881,7 +1881,7 @@ function rcube_webmail()          html = expando;        else if (c == 'subject') {          if (bw.ie) { -          col.onmouseover = function() { rcube_webmail.long_subject_title_ie(this, message.depth+1); }; +          col.onmouseover = function() { rcube_webmail.long_subject_title_ex(this, message.depth+1); };            if (bw.ie8)              tree = '<span></span>' + tree; // #1487821          } @@ -3639,7 +3639,12 @@ function rcube_webmail()        att.html = '<a title="'+this.get_label('cancel')+'" onclick="return rcmail.cancel_attachment_upload(\''+name+'\', \''+att.frame+'\');" href="#cancelupload" class="cancelupload">'          + (this.env.cancelicon ? '<img src="'+this.env.cancelicon+'" alt="" />' : this.get_label('cancel')) + '</a>' + att.html; -    var indicator, li = $('<li>').attr('id', name).addClass(att.classname).html(att.html); +    var indicator, li = $('<li>'); + +    li.attr('id', name) +      .addClass(att.classname) +      .html(att.html) +      .on('mouseover', function() { rcube_webmail.long_subject_title_ex(this, 0); });      // replace indicator's li      if (upload_id && (indicator = document.getElementById(upload_id))) { @@ -6986,11 +6991,11 @@ rcube_webmail.long_subject_title = function(elem, indent)    if (!elem.title) {      var $elem = $(elem);      if ($elem.width() + indent * 15 > $elem.parent().width()) -      elem.title = $elem.html(); +      elem.title = $elem.text();    }  }; -rcube_webmail.long_subject_title_ie = function(elem, indent) +rcube_webmail.long_subject_title_ex = function(elem, indent)  {    if (!elem.title) {      var $elem = $(elem), diff --git a/program/steps/mail/attachments.inc b/program/steps/mail/attachments.inc index f83f6892e..85aa9542b 100644 --- a/program/steps/mail/attachments.inc +++ b/program/steps/mail/attachments.inc @@ -118,9 +118,12 @@ if (is_array($_FILES['_attachments']['tmp_name'])) {            'alt' => rcube_label('delete')          ));        } -      else { +      else if ($COMPOSE['textbuttons']) {          $button = Q(rcube_label('delete'));        } +      else { +        $button = ''; +      }        $content = html::a(array(          'href' => "#delete", diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index e9f638cb1..39dca3b03 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -1370,8 +1370,9 @@ function rcmail_compose_attachment_list($attrib)    if (!$attrib['id'])      $attrib['id'] = 'rcmAttachmentList'; -  $out = "\n"; +  $out    = "\n";    $jslist = array(); +  $button = '';    if (is_array($COMPOSE['attachments'])) {      if ($attrib['deleteicon']) { @@ -1380,27 +1381,38 @@ function rcmail_compose_attachment_list($attrib)          'alt' => rcube_label('delete')        ));      } -    else +    else if (rcube_utils::get_boolean($attrib['textbuttons'])) {        $button = Q(rcube_label('delete')); +    }      foreach ($COMPOSE['attachments'] as $id => $a_prop) {        if (empty($a_prop))          continue; -      $out .= html::tag('li', array('id' => 'rcmfile'.$id, 'class' => rcmail_filetype2classname($a_prop['mimetype'], $a_prop['name'])), +      $out .= html::tag('li', +        array( +          'id'          => 'rcmfile'.$id, +          'class'       => rcmail_filetype2classname($a_prop['mimetype'], $a_prop['name']), +          'onmouseover' => "rcube_webmail.long_subject_title_ex(this, 0)", +        ),          html::a(array(              'href' => "#delete",              'title' => rcube_label('delete'),              'onclick' => sprintf("return %s.command('remove-attachment','rcmfile%s', this)", JS_OBJECT_NAME, $id), -            'class' => 'delete'), -          $button) . Q($a_prop['name'])); +            'class' => 'delete' +          ), +          $button +        ) . Q($a_prop['name']) +      ); -        $jslist['rcmfile'.$id] = array('name' => $a_prop['name'], 'complete' => true, 'mimetype' => $a_prop['mimetype']); +      $jslist['rcmfile'.$id] = array('name' => $a_prop['name'], 'complete' => true, 'mimetype' => $a_prop['mimetype']);      }    }    if ($attrib['deleteicon'])      $COMPOSE['deleteicon'] = $CONFIG['skin_path'] . $attrib['deleteicon']; +  else if (rcube_utils::get_boolean($attrib['textbuttons'])) +    $COMPOSE['textbuttons'] = true;    if ($attrib['cancelicon'])      $OUTPUT->set_env('cancelicon', $CONFIG['skin_path'] . $attrib['cancelicon']);    if ($attrib['loadingicon']) diff --git a/program/steps/mail/show.inc b/program/steps/mail/show.inc index 59f4d55e1..9d85f9c8f 100644 --- a/program/steps/mail/show.inc +++ b/program/steps/mail/show.inc @@ -175,9 +175,9 @@ function rcmail_message_attachments($attrib)          $ol .= html::tag('li', null, Q(sprintf("%s (%s)", $filename, $size)));        }        else { -        if (mb_strlen($filename) > 50) { +        if ($attrib['maxlength'] && mb_strlen($filename) > $attrib['maxlength']) {            $title    = $filename; -          $filename = abbreviate_string($filename, 50); +          $filename = abbreviate_string($filename, $attrib['maxlength']);          }          else {            $title = ''; @@ -190,6 +190,7 @@ function rcmail_message_attachments($attrib)              'href' => $MESSAGE->get_part_url($attach_prop->mime_id, false),              'onclick' => sprintf('return %s.command(\'load-attachment\',\'%s\',this)',                JS_OBJECT_NAME, $attach_prop->mime_id), +            'onmouseover' => $title ? '' : 'rcube_webmail.long_subject_title_ex(this, 0)',              'title' => Q($title),              ), Q($filename));          $ol .= html::tag('li', array('class' => $class, 'id' => $id), $link); diff --git a/skins/classic/templates/message.html b/skins/classic/templates/message.html index 757c0a635..bd4fbf277 100644 --- a/skins/classic/templates/message.html +++ b/skins/classic/templates/message.html @@ -49,7 +49,7 @@    </div>  <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" />  <roundcube:object name="messageFullHeaders" id="full-headers" /> -<roundcube:object name="messageAttachments" id="attachment-list" /> +<roundcube:object name="messageAttachments" id="attachment-list" maxlength="50" />  <roundcube:object name="messageObjects" id="message-objects" />  <roundcube:object name="messageBody" id="messagebody" />  </div> diff --git a/skins/classic/templates/messagepreview.html b/skins/classic/templates/messagepreview.html index b42a06342..82414c420 100644 --- a/skins/classic/templates/messagepreview.html +++ b/skins/classic/templates/messagepreview.html @@ -20,7 +20,7 @@    </div>  <roundcube:object name="messageHeaders" class="headers-table" cellspacing="0" cellpadding="2" addicon="/images/icons/silhouette.png" summary="Message headers" />  <roundcube:object name="messageFullHeaders" id="full-headers" /> -<roundcube:object name="messageAttachments" id="attachment-list" /> +<roundcube:object name="messageAttachments" id="attachment-list" maxlength="50" />  </div>  <roundcube:object name="messageObjects" id="message-objects" />  | 
