| | |
| | | { |
| | | if (form && form.elements._photo.value) { |
| | | this.async_upload_form(form, 'upload-photo', function(e) { |
| | | rcmail.set_busy(false, null, rcmail.photo_upload_id); |
| | | rcmail.set_busy(false, null, rcmail.file_upload_id); |
| | | }); |
| | | |
| | | // display upload indicator |
| | | this.photo_upload_id = this.set_busy(true, 'uploading'); |
| | | this.file_upload_id = this.set_busy(true, 'uploading'); |
| | | } |
| | | }; |
| | | |
| | |
| | | |
| | | this.photo_upload_end = function() |
| | | { |
| | | this.set_busy(false, null, this.photo_upload_id); |
| | | delete this.photo_upload_id; |
| | | this.set_busy(false, null, this.file_upload_id); |
| | | delete this.file_upload_id; |
| | | }; |
| | | |
| | | this.set_photo_actions = function(id) |
| | |
| | | // prepare multipart form data composition |
| | | var files = e.target.files || e.dataTransfer.files, |
| | | formdata = window.FormData ? new FormData() : null, |
| | | fieldname = this.env.filedrop.fieldname || '_file', |
| | | fieldname = (this.env.filedrop.fieldname || '_file') + (this.env.filedrop.single ? '' : '[]'), |
| | | boundary = '------multipartformboundary' + (new Date).getTime(), |
| | | dashdash = '--', crlf = '\r\n', |
| | | multipart = dashdash + boundary + crlf; |
| | |
| | | content = '<span>' + (multiple ? ref.get_label('uploadingmany') : files[0].name) + '</span>'; |
| | | |
| | | // add to attachments list |
| | | ref.add2attachment_list(ts, { name:'', html:content, classname:'uploading', complete:false }); |
| | | if (!ref.add2attachment_list(ts, { name:'', html:content, classname:'uploading', complete:false })) |
| | | ref.file_upload_id = ref.set_busy(true, 'uploading'); |
| | | |
| | | // complete multipart content and post request |
| | | multipart += dashdash + boundary + dashdash + crlf; |
| | |
| | | $.ajax({ |
| | | type: 'POST', |
| | | dataType: 'json', |
| | | url: ref.url(ref.env.filedrop.action||'upload', { _id:ref.env.compose_id||'', _uploadid:ts, _remote:1 }), |
| | | url: ref.url(ref.env.filedrop.action||'upload', { _id:ref.env.compose_id||ref.env.cid||'', _uploadid:ts, _remote:1 }), |
| | | contentType: formdata ? false : 'multipart/form-data; boundary=' + boundary, |
| | | processData: false, |
| | | data: formdata || multipart, |
| | |
| | | |
| | | // get contents of all dropped files |
| | | var last = this.env.filedrop.single ? 0 : files.length - 1; |
| | | for (var i=0, f; i <= last && (f = files[i]); i++) { |
| | | for (var j=0, i=0, f; j <= last && (f = files[i]); i++) { |
| | | if (!f.name) f.name = f.fileName; |
| | | if (!f.size) f.size = f.fileSize; |
| | | if (!f.type) f.type = 'application/octet-stream'; |
| | |
| | | |
| | | // do it the easy way with FormData (FF 4+, Chrome 5+, Safari 5+) |
| | | if (formdata) { |
| | | formdata.append(fieldname + '[]', f); |
| | | if (i == last) |
| | | formdata.append(fieldname, f); |
| | | if (j == last) |
| | | return submit_data(); |
| | | } |
| | | // use FileReader supporetd by Firefox 3.6 |
| | |
| | | var reader = new FileReader(); |
| | | |
| | | // closure to pass file properties to async callback function |
| | | reader.onload = (function(file, i) { |
| | | reader.onload = (function(file, j) { |
| | | return function(e) { |
| | | multipart += 'Content-Disposition: form-data; name="' + fieldname + '[]"'; |
| | | multipart += 'Content-Disposition: form-data; name="' + fieldname + '"'; |
| | | multipart += '; filename="' + (f.name_bin || file.name) + '"' + crlf; |
| | | multipart += 'Content-Length: ' + file.size + crlf; |
| | | multipart += 'Content-Type: ' + file.type + crlf + crlf; |
| | | multipart += e.target.result + crlf; |
| | | multipart += dashdash + boundary + crlf; |
| | | |
| | | if (i == last) // we're done, submit the data |
| | | if (j == last) // we're done, submit the data |
| | | return submit_data(); |
| | | } |
| | | })(f,i); |
| | | })(f,j); |
| | | reader.readAsBinaryString(f); |
| | | } |
| | | // Firefox 3 |
| | | else if (f.getAsBinary) { |
| | | multipart += 'Content-Disposition: form-data; name="' + fieldname + '[]"'; |
| | | multipart += 'Content-Disposition: form-data; name="' + fieldname + '"'; |
| | | multipart += '; filename="' + (f.name_bin || f.name) + '"' + crlf; |
| | | multipart += 'Content-Length: ' + f.size + crlf; |
| | | multipart += 'Content-Type: ' + f.type + crlf + crlf; |
| | | multipart += f.getAsBinary() + crlf; |
| | | multipart += dashdash + boundary +crlf; |
| | | |
| | | if (i == last) |
| | | if (j == last) |
| | | return submit_data(); |
| | | } |
| | | |
| | | j++; |
| | | } |
| | | }; |
| | | |