- Enable multiselection for attachments uploading in capable browsers (#1485969)
| | |
| | | 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) |
| | |
| | | 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 |
| | |
| | | |
| | | // 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 |
| | |
| | | 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 { |
| | |
| | | }); |
| | | |
| | | // 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) |
| | |
| | | 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))) { |
| | |
| | | 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]); |
| | | }; |
| | |
| | | $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')); |
| | |
| | | { |
| | | $attrib['type'] = 'file'; |
| | | $attrib['name'] = '_attachments[]'; |
| | | $attrib['multiple'] = 'multiple'; |
| | | |
| | | $field = new html_inputfield($attrib); |
| | | return $field->show(); |
| | | } |