File size: 2,429 Bytes
1ca74c0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Main application functionality for TripTrace Visualizer
document.addEventListener('DOMContentLoaded', () => {
  // Initialize day.js plugins
  dayjs.extend(dayjs_plugin_utc);
  dayjs.extend(dayjs_plugin_timezone);
  
  // Event listeners
  document.getElementById('loadBtn').addEventListener('click', handleFileUpload);
  document.getElementById('applyFilters').addEventListener('click', applyFilters);
  document.getElementById('clearFilters').addEventListener('click', clearFilters);
  document.getElementById('exportMd').addEventListener('click', exportMarkdown);
  
  // Set default date to today
  document.getElementById('dateFilter').value = dayjs().format('YYYY-MM-DD');
});

async function handleFileUpload() {
  const uberFile = document.getElementById('uberCsv').files[0];
  if (!uberFile) { 
    alert('Please select the Uber CSV first.'); 
    return; 
  }

  const searchFile = document.getElementById('searchFile').files[0];
  const gmailFile = document.getElementById('gmailCsv').files[0];

  try {
    // Process Uber data
    const uberRows = await parseCsv(uberFile);
    uber = ingestUber(uberRows);
    
    // Process Search data
    searches = [];
    if (searchFile) {
      if (searchFile.name.toLowerCase().endsWith('.json')) {
        const j = await parseJson(searchFile);
        searches = ingestSearch(j);
      } else {
        const srows = await parseCsv(searchFile);
        searches = ingestSearch(srows);
      }
    }
    
    // Process Gmail data
    mails = [];
    if (gmailFile) {
      const grows = await parseCsv(gmailFile);
      mails = ingestGmail(grows);
    }
    
    // Set default date to first trip day if available
    if (uber.length) {
      document.getElementById('dateFilter').value = uber[0].ts.format('YYYY-MM-DD');
    }
    
    // Initial render
    render(document.getElementById('dateFilter').value, document.getElementById('hourFilter').value);
    
  } catch (error) {
    console.error('Error processing files:', error);
    alert('Error processing files. Please check the console for details.');
  }
}

function applyFilters() {
  render(
    document.getElementById('dateFilter').value,
    document.getElementById('hourFilter').value
  );
}

function clearFilters() {
  document.getElementById('dateFilter').value = '';
  document.getElementById('hourFilter').value = '';
  render('', '');
}

// ... (rest of the utility functions from original script)