glitch-images/scripts/views/draganddropview.js
2015-12-23 23:09:12 +01:00

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