diff options
-rw-r--r-- | CHANGELOG | 1 | ||||
-rw-r--r-- | program/include/html.php | 2 | ||||
-rw-r--r-- | program/js/app.js | 27 | ||||
-rw-r--r-- | program/steps/mail/compose.inc | 4 |
4 files changed, 17 insertions, 17 deletions
@@ -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) diff --git a/program/include/html.php b/program/include/html.php index 34536e4c6..8f932ce2c 100644 --- a/program/include/html.php +++ b/program/include/html.php @@ -271,7 +271,7 @@ class html_inputfield extends html 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 diff --git a/program/js/app.js b/program/js/app.js index e83f33715..3da2eca56 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -473,13 +473,13 @@ function rcube_webmail() // 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 @@ function rcube_webmail() 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 @@ function rcube_webmail() }); // 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 @@ function rcube_webmail() 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 @@ function rcube_webmail() 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]); }; diff --git a/program/steps/mail/compose.inc b/program/steps/mail/compose.inc index 3f2390491..2357c52d8 100644 --- a/program/steps/mail/compose.inc +++ b/program/steps/mail/compose.inc @@ -1148,6 +1148,8 @@ function rcmail_compose_attachment_form($attrib) $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 @@ function rcmail_compose_attachment_field($attrib) { $attrib['type'] = 'file'; $attrib['name'] = '_attachments[]'; + $attrib['multiple'] = 'multiple'; + $field = new html_inputfield($attrib); return $field->show(); } |