61 lines
1.4 KiB
JavaScript
61 lines
1.4 KiB
JavaScript
/*global define*/
|
|
define(
|
|
[ 'util/browser', 'util/addpublishers' ],
|
|
function ( browser, addPublishers ) {
|
|
// the DragAndDropView handles the drag + drop events
|
|
// over the workspace and passes the uploaded file
|
|
function DragAndDropView ( el ) {
|
|
if ( ! ( this instanceof DragAndDropView ) ) {
|
|
return new DragAndDropView( el );
|
|
}
|
|
|
|
var self = this;
|
|
var publishers = addPublishers( self, 'drop' );
|
|
var isOver = false;
|
|
|
|
if ( browser.test( 'draganddrop' ) ) {
|
|
document.addEventListener( 'drop', dropped, false );
|
|
document.addEventListener( 'dragover', dragHovered, false );
|
|
document.addEventListener( 'dragleave', dragLeft, false );
|
|
}
|
|
|
|
function preventDefault ( event ) {
|
|
event.preventDefault();
|
|
}
|
|
|
|
function dragHovered ( event ) {
|
|
if ( ! isOver ) {
|
|
el.classList.add( 'drag-over' );
|
|
isOver = true;
|
|
}
|
|
|
|
preventDefault( event );
|
|
}
|
|
|
|
function dragLeft ( event ) {
|
|
if ( isOver ) {
|
|
el.classList.remove( 'drag-over' );
|
|
isOver = false;
|
|
}
|
|
|
|
preventDefault( event );
|
|
}
|
|
|
|
function dropped ( event ) {
|
|
preventDefault( event );
|
|
|
|
if (
|
|
event.dataTransfer &&
|
|
event.dataTransfer.files &&
|
|
event.dataTransfer.files[0]
|
|
) {
|
|
publishers.drop.dispatch( event.dataTransfer.files[0] );
|
|
}
|
|
|
|
el.classList.remove( 'drag-over' );
|
|
}
|
|
}
|
|
|
|
return DragAndDropView;
|
|
}
|
|
); |