80616f6523
Persists across browser sessions so players don't need to rejoin.
91 lines
2.7 KiB
JavaScript
91 lines
2.7 KiB
JavaScript
var currentPdgaNumber = null;
|
|
|
|
function initTour(code) {
|
|
// Check if player already joined (stored in localStorage)
|
|
var stored = localStorage.getItem('tour_' + code);
|
|
if (stored) {
|
|
var data = JSON.parse(stored);
|
|
currentPdgaNumber = data.pdgaNumber;
|
|
showResultSection();
|
|
}
|
|
}
|
|
|
|
function showResultSection() {
|
|
var joinSection = document.getElementById('join-section');
|
|
var resultSection = document.getElementById('result-section');
|
|
if (joinSection) joinSection.style.display = 'none';
|
|
if (resultSection) resultSection.style.display = '';
|
|
}
|
|
|
|
async function joinTour() {
|
|
var pdgaNumber = document.getElementById('pdga-number').value.trim();
|
|
var playerName = document.getElementById('player-name').value.trim();
|
|
|
|
if (!pdgaNumber || !playerName) {
|
|
alert('Please enter your PDGA number and name');
|
|
return;
|
|
}
|
|
|
|
var code = window.location.pathname.split('/').pop();
|
|
|
|
try {
|
|
var res = await fetch('/api/tours/' + code + '/join', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({ pdgaNumber: pdgaNumber, playerName: playerName })
|
|
});
|
|
|
|
var data = await res.json();
|
|
if (data.success) {
|
|
currentPdgaNumber = pdgaNumber;
|
|
localStorage.setItem('tour_' + code, JSON.stringify({ pdgaNumber: pdgaNumber, playerName: playerName }));
|
|
showResultSection();
|
|
// Refresh leaderboard
|
|
htmx.ajax('GET', '/partials/tour-leaderboard/' + code, { target: '#leaderboard-container' });
|
|
} else {
|
|
alert(data.error || 'Failed to join tour');
|
|
}
|
|
} catch (err) {
|
|
console.error('Error joining tour:', err);
|
|
alert('Failed to join tour');
|
|
}
|
|
}
|
|
|
|
async function recordResult(code) {
|
|
var tourCourseId = document.getElementById('result-course').value;
|
|
var totalStrokes = document.getElementById('result-strokes').value;
|
|
|
|
if (!tourCourseId || !totalStrokes) {
|
|
alert('Please select a course and enter your strokes');
|
|
return;
|
|
}
|
|
|
|
if (!currentPdgaNumber) {
|
|
alert('Please join the tour first');
|
|
return;
|
|
}
|
|
|
|
try {
|
|
var res = await fetch('/api/tours/' + code + '/results', {
|
|
method: 'POST',
|
|
headers: { 'Content-Type': 'application/json' },
|
|
body: JSON.stringify({
|
|
pdgaNumber: currentPdgaNumber,
|
|
tourCourseId: parseInt(tourCourseId),
|
|
totalStrokes: parseInt(totalStrokes)
|
|
})
|
|
});
|
|
|
|
var data = await res.json();
|
|
if (data.success) {
|
|
document.getElementById('result-strokes').value = '';
|
|
// Refresh leaderboard
|
|
htmx.ajax('GET', '/partials/tour-leaderboard/' + code, { target: '#leaderboard-container' });
|
|
} else {
|
|
alert(data.error || 'Failed to record result');
|
|
}
|
|
} catch (err) {
|
|
console.error('Error recording result:', err);
|
|
alert('Failed to record result');
|
|
}
|
|
} |