diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index 5bfd05dd50..42ce530ddc 100644 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -1581,6 +1581,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ this.has_input = true; this.make_editor(); this.hide_elements_on_mobile(); + this.setup_drag_drop(); }, make_editor: function() { var me = this; @@ -1677,6 +1678,40 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ // to fix

on enter this.set_input('


'); }, + setup_drag_drop: function() { + this.note_editor.on('dragenter dragover', false) + .on('drop', function(e) { + var dataTransfer = e.originalEvent.dataTransfer; + + if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { + me.note_editor.focus(); + + var files = [].slice.call(dataTransfer.files); + + files.forEach(file => { + me.get_image(file, (url) => { + me.editor.summernote('insertImage', url, file.name); + }); + }); + } + e.preventDefault(); + e.stopPropagation(); + }); + }, + get_image: function (fileobj, callback) { + var freader = new FileReader(), + me = this; + + freader.onload = function() { + var dataurl = freader.result; + // add filename to dataurl + var parts = dataurl.split(","); + parts[0] += ";filename=" + fileobj.name; + dataurl = parts[0] + ',' + parts[1]; + callback(dataurl); + } + freader.readAsDataURL(fileobj); + }, hide_elements_on_mobile: function() { this.note_editor.find('.note-btn-underline,\ .note-btn-italic, .note-fontsize,\