alecpl
2011-05-03 7fc056c3ffadefc48bb9f6f91f1ef783c253f5fb
- Enable multiselection for attachments uploading in capable browsers (#1485969)


4 files modified
34 ■■■■ changed files
CHANGELOG 1 ●●●● patch | view | raw | blame | history
program/include/html.php 2 ●●● patch | view | raw | blame | history
program/js/app.js 27 ●●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 4 ●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,7 @@
CHANGELOG Roundcube Webmail
===========================
- Enable multiselection for attachments uploading in capable browsers (#1485969)
- Add possibility to change HTML editor configuration by skin
- Fix a bug where selecting too many contacts would produce too large URI request (#1487892)
- Fix relative URLs handling according to a <base> in HTML (#1487889)
program/include/html.php
@@ -271,7 +271,7 @@
    protected $type = 'text';
    protected $allowed = array('type','name','value','size','tabindex',
    'autocomplete','checked','onchange','onclick','disabled','readonly',
    'spellcheck','results','maxlength','src');
    'spellcheck','results','maxlength','src','multiple');
    /**
     * Object constructor
program/js/app.js
@@ -473,13 +473,13 @@
    // trigger plugin hooks
    this.triggerEvent('actionbefore', {props:props, action:command});
    var event_ret = this.triggerEvent('before'+command, props);
    if (event_ret !== undefined) {
    var ret = this.triggerEvent('before'+command, props);
    if (ret !== undefined) {
      // abort if one the handlers returned false
      if (event_ret === false)
      if (ret === false)
        return false;
      else
        props = event_ret;
        props = ret;
    }
    // process internal command
@@ -3171,16 +3171,12 @@
    if (!form)
      return false;
    // get file input fields
    var send = false;
    for (var n=0; n<form.elements.length; n++)
      if (form.elements[n].type=='file' && form.elements[n].value) {
        send = true;
        break;
      }
    // get file input field, count files on capable browser
    var field = $('input[type=file]', form).get(0),
      files = field.files ? field.files.length : field.value ? 1 : 0;
    // create hidden iframe and post upload form
    if (send) {
    if (files) {
      var frame_name = this.async_upload_form(form, 'upload', function(e) {
        var d, content = '';
        try {
@@ -3203,7 +3199,7 @@
      });
      // display upload indicator and cancel button
      var content = this.get_label('uploading'),
      var content = this.get_label('uploading' + (files > 1 ? 'many' : '')),
        ts = frame_name.replace(/^rcmupload/, '');
      if (this.env.loadingicon)
@@ -3225,8 +3221,7 @@
    if (!this.gui_objects.attachmentlist)
      return false;
    var li = $('<li>').attr('id', name).html(att.html);
    var indicator;
    var indicator, li = $('<li>').attr('id', name).html(att.html);
    // replace indicator's li
    if (upload_id && (indicator = document.getElementById(upload_id))) {
@@ -3253,7 +3248,7 @@
      return false;
    var list = this.gui_objects.attachmentlist.getElementsByTagName("li");
    for (i=0;i<list.length;i++)
    for (i=0; i<list.length; i++)
      if (list[i].id == name)
        this.gui_objects.attachmentlist.removeChild(list[i]);
  };
program/steps/mail/compose.inc
@@ -1148,6 +1148,8 @@
  $max_postsize = parse_bytes(ini_get('post_max_size'));
  if ($max_postsize && $max_postsize < $max_filesize)
    $max_filesize = $max_postsize;
  $OUTPUT->set_env('max_filesize', $max_filesize);
  $max_filesize = show_bytes($max_filesize);
  
  $button = new html_inputfield(array('type' => 'button'));
@@ -1172,6 +1174,8 @@
{
  $attrib['type'] = 'file';
  $attrib['name'] = '_attachments[]';
  $attrib['multiple'] = 'multiple';
  $field = new html_inputfield($attrib);
  return $field->show();
}