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,\