@@ -15,12 +15,22 @@ import { style } from '../style'
1515/* global FileReader alert */
1616
1717export function makeDropTarget ( ele , droppedURIHandler , droppedFileHandler ) {
18+ const normalizeDroppedUris = function ( uriText ) {
19+ return uriText
20+ . split ( '\n' )
21+ . map ( uri => uri . trim ( ) )
22+ . filter ( uri => uri && uri [ 0 ] !== '#' )
23+ }
24+
1825 const dragoverListener = function ( e ) {
1926 e . preventDefault ( ) // Need this; otherwise, drop does not work.
27+ e . stopPropagation ( )
2028 e . dataTransfer . dropEffect = 'copy'
2129 }
2230
2331 const dragenterListener = function ( e ) {
32+ e . preventDefault ( )
33+ e . stopPropagation ( )
2434 debug . log ( 'dragenter event dropEffect: ' + e . dataTransfer . dropEffect )
2535 if ( this . localStyle ) {
2636 // necessary not sure when
@@ -33,6 +43,7 @@ export function makeDropTarget (ele, droppedURIHandler, droppedFileHandler) {
3343 debug . log ( 'dragenter event dropEffect 2: ' + e . dataTransfer . dropEffect )
3444 }
3545 const dragleaveListener = function ( e ) {
46+ e . stopPropagation ( )
3647 debug . log ( 'dragleave event dropEffect: ' + e . dataTransfer . dropEffect )
3748 if ( this . savedStyle ) {
3849 this . localStyle = this . savedStyle
@@ -43,6 +54,7 @@ export function makeDropTarget (ele, droppedURIHandler, droppedFileHandler) {
4354
4455 const dropListener = function ( e ) {
4556 if ( e . preventDefault ) e . preventDefault ( ) // stops the browser from redirecting off to the text.
57+ if ( e . stopPropagation ) e . stopPropagation ( )
4658 debug . log ( 'Drop event. dropEffect: ' + e . dataTransfer . dropEffect )
4759 debug . log (
4860 'Drop event. types: ' +
@@ -55,7 +67,7 @@ export function makeDropTarget (ele, droppedURIHandler, droppedFileHandler) {
5567 for ( let t = 0 ; t < e . dataTransfer . types . length ; t ++ ) {
5668 const type = e . dataTransfer . types [ t ]
5769 if ( type === 'text/uri-list' ) {
58- uris = e . dataTransfer . getData ( type ) . split ( '\n' ) // @ ignore those starting with #
70+ uris = normalizeDroppedUris ( e . dataTransfer . getData ( type ) )
5971 debug . log ( 'Dropped text/uri-list: ' + uris )
6072 } else if ( type === 'text/plain' ) {
6173 text = e . dataTransfer . getData ( type )
@@ -79,13 +91,14 @@ export function makeDropTarget (ele, droppedURIHandler, droppedFileHandler) {
7991 droppedFileHandler ( files )
8092 }
8193 }
82- if ( uris === null && text && text . slice ( 0 , 4 ) === 'http' ) {
83- uris = text
94+ const trimmedText = text ? text . trim ( ) : ''
95+ if ( uris === null && trimmedText && trimmedText . slice ( 0 , 4 ) === 'http' ) {
96+ uris = [ trimmedText ]
8497 debug . log ( 'Waring: Poor man\'s drop: using text for URI' ) // chrome disables text/uri-list??
8598 }
8699 } else {
87100 // ... however, if we're IE, we don't have the .types property, so we'll just get the Text value
88- uris = [ e . dataTransfer . getData ( 'Text' ) ]
101+ uris = normalizeDroppedUris ( e . dataTransfer . getData ( 'Text' ) )
89102 debug . log ( 'WARNING non-standard drop event: ' + uris [ 0 ] )
90103 }
91104 debug . log ( 'Dropped URI list (2): ' + uris )
0 commit comments