/* 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 = $(''); this.$('form.o_form_binary_form').append($content); //Add hidden input filename var $filename = $(''); this.$('form.o_form_binary_form').append($filename); //Add hidden input filename var $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 = $(''); this.$('form.o_form_binary_form').append($ufile); } }); });