Browse Source

Fix duplicate IDs breaking track tool buttons

- Removed duplicate edit content from tab divs
- Removed duplicate admin content from tab divs
- JavaScript now finds correct button elements in overlays
- All track tools (select, draw, reshape, smooth, geocache) now work
- Fixed duplicate element IDs that prevented event listeners

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
master
HikeMap User 1 month ago
parent
commit
931d933c91
  1. 13
      geocaches.json
  2. 156
      index.html

13
geocaches.json

@ -23,19 +23,6 @@
"createdAt": 1767115055219, "createdAt": 1767115055219,
"alerted": true "alerted": true
}, },
{
"id": "gc_1767133043404_9zkbxphry",
"lat": 30.52230723615832,
"lng": -97.82822817564012,
"messages": [
{
"author": "Georges Evil Twin.",
"text": "I'm going to lick all the raw chicken.",
"timestamp": 1767133083657
}
],
"createdAt": 1767133043404
},
{ {
"id": "gc_1767140463979_69hvt9x5v", "id": "gc_1767140463979_69hvt9x5v",
"lat": 30.489440035930812, "lat": 30.489440035930812,

156
index.html

@ -1110,68 +1110,7 @@
</div> </div>
<div class="tab-content" id="editContent"> <div class="tab-content" id="editContent">
<div class="section">
<div class="section-title">File</div>
<input type="file" id="kmlFile" accept=".kml">
<button class="action-btn" id="reloadBtn" style="background: #17a2b8;">Reload Tracks</button>
<button class="action-btn" id="exportBtn">Export to File</button>
<button class="action-btn" id="saveServerBtn" style="background: #28a745;">Save to Server</button>
</div>
<div class="section">
<div class="section-title">Track Tools</div>
<div class="tool-buttons">
<button class="tool-btn" id="selectTool" title="Select track, then press Delete key to remove">Select</button>
<button class="tool-btn" id="splitTool" title="Click on a track to split it">Split</button>
<button class="tool-btn" id="drawTool" title="Draw a new track">Draw</button>
<button class="tool-btn" id="reshapeTool" title="Drag points to reshape track">Reshape</button>
<button class="tool-btn" id="smoothTool" title="Brush over track to smooth it">Smooth</button>
<button class="action-btn" id="remeshBtn" title="Remesh selected tracks with even spacing">Remesh Selected</button>
<button class="tool-btn" id="geocacheTool" title="Place a geocache">📍 Cache</button>
</div>
<div class="slider-group" id="reshapeControls" style="display: none;">
<label>Anchor Distance (points beyond stay fixed)</label>
<input type="range" id="anchorDistance" min="3" max="50" value="10">
<div class="slider-value"><span id="anchorValue">10</span> points</div>
<label style="margin-top: 8px;">Falloff (how sharply effect fades)</label>
<input type="range" id="reshapeFalloff" min="0.5" max="3" value="1" step="0.1">
<div class="slider-value"><span id="falloffValue">1.0</span></div>
</div>
<div class="slider-group" id="smoothControls" style="display: none;">
<label>Brush Size (pixels)</label>
<input type="range" id="smoothBrushSize" min="10" max="100" value="30">
<div class="slider-value"><span id="brushSizeValue">30</span> px</div>
<label style="margin-top: 8px;">Strength</label>
<input type="range" id="smoothStrength" min="0.1" max="1" value="0.5" step="0.1">
<div class="slider-value"><span id="strengthValue">0.5</span></div>
</div>
</div>
<div class="section">
<div class="section-title">Merge / Simplify</div>
<div class="slider-group">
<label>Merge Threshold</label>
<input type="range" id="mergeThreshold" min="1" max="10" value="5" step="0.5">
<div class="slider-value"><span id="thresholdValue">5</span> meters</div>
</div>
<button class="action-btn" id="previewBtn" style="background: #17a2b8;">Preview Merge</button>
<button class="action-btn" id="applyMergeBtn" style="display: none;">Apply Merge</button>
<button class="action-btn secondary" id="cancelPreviewBtn" style="display: none;">Cancel Preview</button>
<div style="margin-top: 8px;">
<button class="action-btn secondary" id="mergeConnectBtn">Connect End-to-End</button>
</div>
<div style="border-top: 1px solid #eee; margin-top: 10px; padding-top: 10px;">
<button class="action-btn" id="selectAllBtn" style="background: #6c757d;">Select All</button>
<button class="action-btn secondary" id="clearSelectionBtn">Clear Selection</button>
</div>
</div>
<div class="section">
<div class="section-title">Tracks (<span id="trackCount">0</span>)</div>
<div class="track-list" id="trackList"></div>
<button class="action-btn" id="undoBtn" style="background: #6c757d;">Undo</button>
</div>
<!-- Content moved to edit overlay -->
</div> </div>
<div class="tab-content active" id="navContent"> <div class="tab-content active" id="navContent">
@ -1195,98 +1134,7 @@
</div> </div>
<div class="tab-content" id="adminContent"> <div class="tab-content" id="adminContent">
<div class="section collapsible" data-section="geocache">
<div class="section-title">Geocache Settings</div>
<div class="section-content">
<div class="admin-setting-group">
<div class="admin-input-row">
<label for="geocacheRange">Interaction Range:</label>
<div class="admin-input-container">
<input type="number" id="geocacheRange" min="1" max="50" value="5">
<span class="unit">meters</span>
</div>
</div>
<div class="admin-input-row">
<label for="geocacheAlertRange">Alert Distance:</label>
<div class="admin-input-container">
<input type="number" id="geocacheAlertRange" min="1" max="50" value="5">
<span class="unit">meters</span>
</div>
</div>
<div class="admin-checkbox-row">
<input type="checkbox" id="geocacheSoundEnabled" checked>
<label for="geocacheSoundEnabled">Enable alert sound</label>
</div>
</div>
</div>
<div class="section">
<div class="section-title">Navigation Settings</div>
<div class="admin-setting-group">
<div class="admin-input-row">
<label>Track Proximity:</label>
<input type="number" id="trackProximity" min="10" max="200" value="50">
<span class="unit">meters</span>
</div>
<div class="admin-input-row">
<label>Intersection Threshold:</label>
<input type="number" id="intersectionThreshold" min="5" max="30" value="15">
<span class="unit">meters</span>
</div>
<div class="admin-input-row">
<label>On-Trail Threshold:</label>
<input type="number" id="onTrailThreshold" min="20" max="200" value="100">
<span class="unit">meters</span>
</div>
<div class="admin-input-row">
<label>Node Spacing:</label>
<input type="number" id="nodeSpacing" min="10" max="100" value="50">
<span class="unit">meters</span>
</div>
</div>
</div>
<div class="section">
<div class="section-title">Performance Settings</div>
<div class="admin-setting-group">
<div class="admin-input-row">
<label>GPS Poll Interval:</label>
<input type="number" id="gpsPollInterval" min="1000" max="10000" value="3000" step="500">
<span class="unit">ms</span>
</div>
<div class="admin-input-row">
<label>Proximity Check Interval:</label>
<input type="number" id="proximityCheckInterval" min="1000" max="10000" value="3000" step="500">
<span class="unit">ms</span>
</div>
</div>
</div>
<div class="section">
<div class="section-title">Push Notifications</div>
<div class="admin-setting-group">
<div id="notificationStatus" style="margin-bottom: 10px; color: #666;">
Status: <span id="notificationStatusText">Not configured</span>
</div>
<button class="action-btn" id="enableNotifications" onclick="setupPushNotifications()">
Enable Push Notifications
</button>
<button class="action-btn secondary" id="disableNotifications" onclick="disablePushNotifications()" style="display:none;">
Disable Notifications
</button>
<button class="action-btn" id="testNotification" onclick="sendTestNotification()" style="display:none; margin-top: 10px; background: #9c27b0;">
📨 Send Test Notification to All Users
</button>
</div>
</div>
<div class="section">
<div class="admin-button-group">
<button class="action-btn" onclick="resetAdminSettings()">Reset to Defaults</button>
<button class="action-btn" onclick="exportAdminSettings()">Export Settings</button>
<button class="action-btn" onclick="importAdminSettings()">Import Settings</button>
</div>
</div>
<!-- Content moved to admin overlay -->
</div> </div>
<div id="status" class="status">Load a KML file or draw tracks</div> <div id="status" class="status">Load a KML file or draw tracks</div>

Loading…
Cancel
Save