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);