@@ -376,13 +376,65 @@ function parseIntelHex(data, bufferSize) {
376376 throw new Error ( "Unexpected end of input: missing or invalid EOF record." ) ;
377377} ;
378378
379+ function dropHandler ( ev ) {
380+ console . log ( 'File(s) dropped' ) ;
381+
382+ // Prevent default behavior (Prevent file from being opened)
383+ ev . preventDefault ( ) ;
384+
385+ hexFile = undefined ;
386+
387+ if ( ev . dataTransfer . items ) {
388+ // Use DataTransferItemList interface to access the file(s)
389+ for ( var i = 0 ; i < ev . dataTransfer . items . length ; i ++ ) {
390+ // If dropped items aren't files, reject them
391+ if ( ev . dataTransfer . items [ i ] . kind === 'file' ) {
392+ var file = ev . dataTransfer . items [ i ] . getAsFile ( ) ;
393+ if ( i == 0 ) {
394+ hexFile = file ;
395+ }
396+ }
397+ }
398+ } else {
399+ // Use DataTransfer interface to access the file(s)
400+ for ( var i = 0 ; i < ev . dataTransfer . files . length ; i ++ ) {
401+ if ( i == 0 ) {
402+ hexFile = ev . dataTransfer . files [ i ] ;
403+ }
404+ }
405+ }
406+
407+ if ( hexFile ) {
408+ var reader = new FileReader ( ) ;
409+ // Closure to capture the file information.
410+ reader . onload = ( function ( theFile ) {
411+ return function ( e ) {
412+ var hexContent = e . target . result
413+ uploadCH55xBootloader ( parseIntelHex ( hexContent , 63 * 1024 ) . data )
414+ } ;
415+ } ) ( file ) ;
416+ reader . readAsText ( file ) ;
417+ }
418+
419+ }
420+
421+ function dragOverHandler ( ev ) {
422+ //console.log('File(s) in drop zone');
423+
424+ // Prevent default behavior (Prevent file from being opened)
425+ ev . preventDefault ( ) ;
426+ }
379427
380428document . addEventListener ( 'DOMContentLoaded' , function ( ) {
381429 let connectButton = document . querySelector ( '#connect' ) ;
382430 let uploadButton = document . querySelector ( '#upload' ) ;
431+ let dropZoneDiv = document . querySelector ( '#drop_zone' ) ;
383432 statusDiv = document . querySelector ( '#status' ) ;
384433
385434 connectButton . addEventListener ( 'click' , connectCH55xBootloader ) ;
386435 uploadButton . addEventListener ( 'click' , pressUpload ) ;
436+ dropZoneDiv . addEventListener ( 'drop' , dropHandler , false ) ;
437+ dropZoneDiv . addEventListener ( 'dragover' , dragOverHandler , false )
438+
387439 document . getElementById ( 'fileid' ) . addEventListener ( 'change' , handleFileSelect , false ) ;
388440} , false ) ;
0 commit comments