diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js
index 7ddb440b93..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;
@@ -1611,6 +1612,7 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({
'CMD+ENTER': ''
}
},
+ prettifyHtml: true,
callbacks: {
onChange: function(value) {
me.parse_validate_and_set_in_model(value);
@@ -1676,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,\
diff --git a/frappe/public/js/lib/summernote/summernote.js b/frappe/public/js/lib/summernote/summernote.js
index b5f1c67963..894a361584 100755
--- a/frappe/public/js/lib/summernote/summernote.js
+++ b/frappe/public/js/lib/summernote/summernote.js
@@ -4771,6 +4771,15 @@
$editor.addClass('codeview');
$codable.focus();
+ $codable.on('keyup', function () {
+ var value = $codable.val();
+ var isChange = $editable.html() !== value;
+
+ if (isChange) {
+ context.triggerEvent('change', value, $editable);
+ }
+ });
+
// activate CodeMirror as codable
if (agent.hasCodeMirror) {
var cmEditor = CodeMirror.fromTextArea($codable[0], options.codemirror);