summernote-webpack
Version:
Super simple WYSIWYG editor
94 lines (84 loc) • 3.09 kB
JavaScript
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;
});