You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

110 lines
4.4 KiB

/* Copyright 2017 Onestein
* License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). */
odoo.define('web_chatter_paste', function (require) {
"use strict";
var core = require('web.core'),
composer = require('mail.composer');
composer.BasicComposer.include({
start: function() {
var self = this;
var res = this._super.apply(this, arguments);
this.$('.o_composer_text_field').bind('drop', function(e) {
e.stopPropagation();
e.preventDefault();
var files = e.originalEvent.dataTransfer.files;
var i = 0;
var next = function() {
$(window).off(self.fileupload_id, next);
i++;
upload();
}
var upload = function() {
if (files.length <= i) return;
var reader = new FileReader();
reader.onload = function() {
$(window).on(self.fileupload_id, next);
self.add_as_attachment(reader.result, files[i].name);
}
reader.readAsDataURL(files[i]);
}
upload();
});
this.$('.o_composer_text_field').bind('paste', function(e) {
if (!e.originalEvent.clipboardData.items) return;
var items = e.originalEvent.clipboardData.items;
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (item.type != 'image/png') continue;
var reader = new FileReader();
reader.onload = function() {
self.add_as_attachment(reader.result, _.uniqueId('pasted_file') + '.png');
}
reader.readAsDataURL(item.getAsFile());
}
});
return res;
},
add_as_attachment: function(data, filename, cb) {
//Fetch mimetype and base64
var mimetype = data.substring(5, data.indexOf(';'));
var base64_data = data.substr(data.indexOf(',') + 1, data.length);
//Change and submit form
this.prepare_form();
this.$('form.o_form_binary_form input.filename').val(filename);
this.$('form.o_form_binary_form input.content').val(base64_data);
this.$('form.o_form_binary_form input.mimetype').val(mimetype);
this.$('form.o_form_binary_form').submit();
this.reverse_form();
var attachments = this.get('attachment_ids');
this.$attachment_button.prop('disabled', true);
attachments.push({
'id': 0,
'name': _.uniqueId('attachment_name'),
'filename': filename,
'url': filename,
'upload': true,
'mimetype': '',
});
},
prepare_form: function() {
//Change action
this.$('form.o_form_binary_form').attr('action', '/web_chatter_paste/upload_attachment');
//Remove ufile
this.$('form.o_form_binary_form input.o_form_input_file').remove();
//Add hidden input content
var $content = $('<input type="hidden" name="content" class="content" />');
this.$('form.o_form_binary_form').append($content);
//Add hidden input filename
var $filename = $('<input type="hidden" name="filename" class="filename" />');
this.$('form.o_form_binary_form').append($filename);
//Add hidden input filename
var $mimetype = $('<input type="hidden" name="mimetype" class="mimetype" />');
this.$('form.o_form_binary_form').append($mimetype);
},
reverse_form: function() {
//Change action
this.$('form.o_form_binary_form').attr('action', '/web/binary/upload_attachment');
//Remove new input
this.$('form.o_form_binary_form input.content').remove();
this.$('form.o_form_binary_form input.filename').remove();
this.$('form.o_form_binary_form input.mimetype').remove();
//Restore old input
var $ufile = $('<input class="o_form_input_file" name="ufile" type="file" />');
this.$('form.o_form_binary_form').append($ufile);
}
});
});