UNPKG

summernote-webpack

Version:
94 lines (84 loc) 3.09 kB
define(function () { var Dropzone = function (context) { var $document = $(document); var $editor = context.layoutInfo.editor; var $editable = context.layoutInfo.editable; var options = context.options; var lang = options.langInfo; var $dropzone = $([ '<div class="note-dropzone">', ' <div class="note-dropzone-message"/>', '</div>' ].join('')).prependTo($editor); /** * attach Drag and Drop Events */ this.initialize = function () { if (options.disableDragAndDrop) { // prevent default drop event $document.on('drop', function (e) { e.preventDefault(); }); } else { this.attachDragAndDropEvent(); } }; /** * attach Drag and Drop Events */ this.attachDragAndDropEvent = function () { var collection = $(), $dropzoneMessage = $dropzone.find('.note-dropzone-message'); // show dropzone on dragenter when dragging a object to document // -but only if the editor is visible, i.e. has a positive width and height $document.on('dragenter', function (e) { var isCodeview = context.invoke('codeview.isActivated'); var hasEditorSize = $editor.width() > 0 && $editor.height() > 0; if (!isCodeview && !collection.length && hasEditorSize) { $editor.addClass('dragover'); $dropzone.width($editor.width()); $dropzone.height($editor.height()); $dropzoneMessage.text(lang.image.dragImageHere); } collection = collection.add(e.target); }).on('dragleave', function (e) { collection = collection.not(e.target); if (!collection.length) { $editor.removeClass('dragover'); } }).on('drop', function () { collection = $(); $editor.removeClass('dragover'); }); // change dropzone's message on hover. $dropzone.on('dragenter', function () { $dropzone.addClass('hover'); $dropzoneMessage.text(lang.image.dropImage); }).on('dragleave', function () { $dropzone.removeClass('hover'); $dropzoneMessage.text(lang.image.dragImageHere); }); // attach dropImage $dropzone.on('drop', function (event) { var dataTransfer = event.originalEvent.dataTransfer; if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { event.preventDefault(); $editable.focus(); context.invoke('editor.insertImagesOrCallback', dataTransfer.files); } else { $.each(dataTransfer.types, function (idx, type) { var content = dataTransfer.getData(type); if (type.toLowerCase().indexOf('text') > -1) { context.invoke('editor.pasteHTML', content); } else { $(content).each(function () { context.invoke('editor.insertNode', this); }); } }); } }).on('dragover', false); // prevent default dragover event }; }; return Dropzone; });