@@ -47,6 +47,37 @@ function setupEventListeners() {
4747 toggleUnitsBtn . addEventListener ( 'click' , toggleUnits ) ;
4848 sessionDropdownEl . addEventListener ( 'change' , handleSessionSelection ) ;
4949
50+ // Set up drag and drop events for the upload container
51+ const uploadContainer = document . querySelector ( '.upload-container' ) ;
52+ const fileLabel = document . querySelector ( '.file-label' ) ;
53+
54+ if ( uploadContainer && fileLabel ) {
55+ // Prevent default behavior to allow drop
56+ [ 'dragenter' , 'dragover' , 'dragleave' , 'drop' ] . forEach ( eventName => {
57+ uploadContainer . addEventListener ( eventName , preventDefaults , false ) ;
58+ } ) ;
59+
60+ // Add visual feedback for drag events
61+ [ 'dragenter' , 'dragover' ] . forEach ( eventName => {
62+ uploadContainer . addEventListener ( eventName , ( ) => {
63+ fileLabel . style . backgroundColor = '#e6f3ff' ;
64+ fileLabel . style . borderStyle = 'solid' ;
65+ fileLabel . style . borderColor = '#1f77b4' ;
66+ } , false ) ;
67+ } ) ;
68+
69+ [ 'dragleave' , 'drop' ] . forEach ( eventName => {
70+ uploadContainer . addEventListener ( eventName , ( ) => {
71+ fileLabel . style . backgroundColor = '' ;
72+ fileLabel . style . borderStyle = 'dashed' ;
73+ fileLabel . style . borderColor = '#1f77b4' ;
74+ } , false ) ;
75+ } ) ;
76+
77+ // Handle the dropped files
78+ uploadContainer . addEventListener ( 'drop' , handleDrop , false ) ;
79+ }
80+
5081 // Function to adjust the similarity threshold
5182 window . setProviderSimilarityThreshold = function ( threshold ) {
5283 if ( threshold >= 0 && threshold <= 1 ) {
@@ -60,13 +91,38 @@ function setupEventListeners() {
6091 } ;
6192}
6293
63- // Toggle debug mode and refresh data
94+ // Prevent default drag behaviors
95+ function preventDefaults ( e ) {
96+ e . preventDefault ( ) ;
97+ e . stopPropagation ( ) ;
98+ }
6499
100+ // Handle drop event
101+ async function handleDrop ( event ) {
102+ const dt = event . dataTransfer ;
103+ const files = dt . files ;
104+
105+ if ( files . length ) {
106+ const file = files [ 0 ] ;
107+ // Use the same upload process as the file input
108+ await uploadFile ( file ) ;
109+ }
110+ }
65111
66112// Handle file upload
67113async function handleFileUpload ( event ) {
68114 const file = event . target . files [ 0 ] ;
69115 if ( ! file ) return ;
116+ await uploadFile ( file ) ;
117+ }
118+
119+ // Generic file upload function
120+ async function uploadFile ( file ) {
121+ // Check if file name contains the expected pattern
122+ if ( ! file . name . includes ( 'BMW-CarData-Ladehistorie_' ) ) {
123+ const proceed = confirm ( "The file doesn't match the expected pattern 'BMW-CarData-Ladehistorie_*'. Are you sure you want to upload it?" ) ;
124+ if ( ! proceed ) return ;
125+ }
70126
71127 const formData = new FormData ( ) ;
72128 formData . append ( 'file' , file ) ;
0 commit comments