diff --git a/lib/koenig-editor/addon/components/koenig-card-image.js b/lib/koenig-editor/addon/components/koenig-card-image.js index 6c31ce4557..6fc4357ea9 100644 --- a/lib/koenig-editor/addon/components/koenig-card-image.js +++ b/lib/koenig-editor/addon/components/koenig-card-image.js @@ -23,6 +23,9 @@ export default Component.extend({ imageExtensions: IMAGE_EXTENSIONS, imageMimeTypes: IMAGE_MIME_TYPES, + // properties + handlesDragDrop: true, + // closure actions selectCard() {}, deselectCard() {}, @@ -149,6 +152,38 @@ export default Component.extend({ } }, + dragOver(event) { + if (!event.dataTransfer) { + return; + } + + // this is needed to work around inconsistencies with dropping files + // from Chrome's downloads bar + if (navigator.userAgent.indexOf('Chrome') > -1) { + let eA = event.dataTransfer.effectAllowed; + event.dataTransfer.dropEffect = (eA === 'move' || eA === 'linkMove') ? 'move' : 'copy'; + } + + event.stopPropagation(); + event.preventDefault(); + + this.set('isDraggedOver', true); + }, + + dragLeave(event) { + event.preventDefault(); + this.set('isDraggedOver', false); + }, + + drop(event) { + event.preventDefault(); + this.set('isDraggedOver', false); + + if (event.dataTransfer.files) { + this.set('files', [event.dataTransfer.files[0]]); + } + }, + _changeImageStyle(imageStyle) { this._updatePayloadAttr('imageStyle', imageStyle); }, diff --git a/lib/koenig-editor/addon/components/koenig-editor.js b/lib/koenig-editor/addon/components/koenig-editor.js index b187d2ae1a..4a776e869d 100644 --- a/lib/koenig-editor/addon/components/koenig-editor.js +++ b/lib/koenig-editor/addon/components/koenig-editor.js @@ -851,7 +851,7 @@ export default Component.extend({ }, handleDragOver(event) { - if (!event.dataTransfer) { + if (!event.dataTransfer || event.target.closest('.__mobiledoc-card')) { return; } @@ -878,7 +878,7 @@ export default Component.extend({ if (cardElem) { let cardId = cardElem.firstChild.id; let card = this.componentCards.findBy('destinationElementId', cardId); - if (card.isEditing) { + if (card.isEditing || card.handlesDragDrop) { return; } } @@ -898,7 +898,6 @@ export default Component.extend({ /* Ember event handlers ------------------------------------------------- */ // disable dragging - // TODO: needs testing for how this interacts with cards that have drag behaviour dragStart(event) { event.preventDefault(); }, diff --git a/lib/koenig-editor/addon/templates/components/koenig-card-image.hbs b/lib/koenig-editor/addon/templates/components/koenig-card-image.hbs index 00872bbcbe..e83767301d 100644 --- a/lib/koenig-editor/addon/templates/components/koenig-card-image.hbs +++ b/lib/koenig-editor/addon/templates/components/koenig-card-image.hbs @@ -26,6 +26,13 @@
{{#if (or previewSrc payload.src)}} {{payload.alt}} + {{#if isDraggedOver}} +
+ + Drop to replace image + +
+ {{/if}} {{/if}} {{#if (or uploader.errors uploader.isUploading (not payload.src))}} @@ -36,7 +43,11 @@ {{/if}} - {{#if uploader.isUploading}} + {{#if isDraggedOver}} + + Drop it like it's hot 🔥 + + {{else if uploader.isUploading}} {{uploader.progressBar}} {{else if (not previewSrc payload.src)}}