Transaction

6bc89bbbf5403a2737c068f76ce67b70e7a5673dfb7b566be43efd49965ebc4c
Timestamp (utc)
2024-10-14 05:08:43
Fee Paid
0.00008659 BSV
(
0.04399408 BSV
-
0.04390749 BSV
)
Fee Rate
499.3 sat/KB
Version
1
Confirmations
55,517
Size Stats
17,341 B

2 Outputs

Total Output:
0.04390749 BSV
  • jMîB<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="chrome-extension://lbjapbcmmceacocpimbpbidpgmlmoaao/content.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js" async></script> <title>Course Tee Management</title> </head> <style> body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; } .container { background-color: white; padding: 20px; border-radius: 10px; box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1); width: 50%; max-height: 100vh; } input, button, select { padding: 10px; border-radius: 5px; border: 1px solid #ccc; width: 100%; margin-top: 10px; } button { background-color: #2a9d8f; color: white; border: none; cursor: pointer; margin-top: 20px; } button:hover { background-color: #21867a; } label { font-weight: bold; } select { margin-top: 20px; } .input-section { margin-bottom: 20px; } </style> <body> <div class="container"> <h2>Course Tee Management</h2> <!-- Password Section --> <div id="passwordSection" class="input-section"> <label for="password">Enter Password:</label> <input type="password" id="password" placeholder="Enter password"> <button onclick="verifyPassword()">Submit</button> <p id="errorMessage" style="color: red; display: none;">Incorrect password. Try again.</p> </div> <!-- Manual Input for Country Code and Course Code --> <div id="manualInputSection" class="input-section" style="display: none;"> <label for="manualCountry">Enter Country Code:</label> <input type="text" id="manualCountry" placeholder="Country Code (e.g., 064)"> <label for="manualCourseCode">Enter Course Code:</label> <input type="text" id="manualCourseCode" placeholder="Course Code (e.g., 271)"> <button onclick="setManualEntry()">Use Manual Entry</button> </div> <!-- Tee Selection Section --> <div id="teeSelectionSection" class="input-section" style="display: none;"> <label for="teeSelect">Select Tee Type:</label> <select id="teeSelect"></select> <button onclick="loadTeeData()">Load Tee Data</button> <button onclick="addNewTeeFile()">Add New Tee</button> <button onclick="deleteTeeFile()">Delete Selected Tee</button> </div> <!-- Edit Section --> <div id="editSection" class="input-section" style="display: none;"> <label for="courseName">Course Name:</label> <input type="text" id="courseName"> <label for="country">Country:</label> <input type="text" id="country"> <label for="courseCode">Course Code:</label> <input type="text" id="courseCode"> <h3>Holes (Par, Difficulty, Distance)</h3> <table id="holesTable"> <thead> <tr> <th>Hole</th> <th>Par</th> <th>Difficulty</th> <th>Distance</th> </tr> </thead> <tbody id="holesContainer"></tbody> </table> <p id="totalPar">Total Par: 0</p> <p id="totalDistance">Total Distance: 0</p> <button onclick="updateCourseData()">Update Course Data</button> <button onclick="cancelUpdate()">Cancel</button> <p id="updateMessage" style="color: green; display: none;">Course data updated successfully!</p> </div> </div> <script> const correctPassword = "new"; // Password for verification let isManualEntry = false; // Function to verify password function verifyPassword() { const passwordInput = document.getElementById("password").value; if (passwordInput === correctPassword) { document.getElementById("passwordSection").style.display = "none"; document.getElementById("manualInputSection").style.display = "block"; // Show the next section after password is verified } else { document.getElementById("errorMessage").style.display = "block"; } } // Function to set the manual entry flag function setManualEntry() { const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; if (manualCountry && manualCourseCode) { isManualEntry = true; populateTeeList(); document.getElementById("manualInputSection").style.display = "none"; document.getElementById("teeSelectionSection").style.display = "block"; } else { alert("Please enter both country and course code."); } } // Function to populate the tee list function populateTeeList() { const teeSelect = document.getElementById("teeSelect"); const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; fetch(`https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/listTees`) .then(response => response.json()) .then(teeList => { teeSelect.innerHTML = ''; teeList.forEach(tee => { const option = document.createElement("option"); option.value = tee; option.text = tee.charAt(0).toUpperCase() + tee.slice(1) + " Tee"; teeSelect.appendChild(option); }); }) .catch(error => console.error('Error fetching tee list:', error)); } function loadTeeData() { const teeType = document.getElementById("teeSelect").value; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; // Ensure .json is added only once const teeFile = teeType.endsWith(".json") ? teeType : `${teeType}.json`; fetch(`https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/${teeFile}`) .then(response => response.json()) .then(data => { document.getElementById("editSection").style.display = "block"; document.getElementById('courseName').value = data.Course; document.getElementById('country').value = data.country; document.getElementById('courseCode').value = data.courseCode; const holesContainer = document.getElementById('holesContainer'); holesContainer.innerHTML = ''; data.Par.forEach((par, index) => { const difficulty = data.Difficulty[index]; const distance = data.Distance[index]; const row = ` <tr> <td>${index + 1}</td> <td><input type="number" id="par${index}" value="${par}" style="width: 60px;"></td> <td><input type="number" id="difficulty${index}" value="${difficulty}" style="width: 80px;"></td> <td><input type="number" id="distance${index}" value="${distance}" style="width: 100px;"></td> </tr> `; holesContainer.innerHTML += row; }); calculateTotals(); }) .catch(error => console.error('Error loading tee data:', error)); } function updateCourseData() { const parValues = []; const difficultyValues = []; const distanceValues = []; for (let i = 0; i < 18; i++) { parValues.push(parseInt(document.getElementById(`par${i}`).value)); difficultyValues.push(parseInt(document.getElementById(`difficulty${i}`).value)); distanceValues.push(parseInt(document.getElementById(`distance${i}`).value)); } const updatedData = { Course: document.getElementById('courseName').value, country: document.getElementById('country').value, courseCode: document.getElementById('courseCode').value, Par: parValues, Difficulty: difficultyValues, Distance: distanceValues }; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; const teeFileName = document.getElementById("teeSelect").value; // Updated URL to match the server route we'll create const url = `https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/updateTee/${teeFileName}`; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(updatedData) }) .then(response => { console.log('Response status:', response.status); if (response.ok) { console.log('Update successful'); document.getElementById('updateMessage').textContent = 'Course data updated successfully!'; document.getElementById('updateMessage').style.display = 'block'; setTimeout(() => { document.getElementById('editSection').style.display = 'none'; document.getElementById('teeSelectionSection').style.display = 'block'; }, 2000); } else { console.error('Failed to update course data.'); document.getElementById('updateMessage').textContent = 'Failed to update course data. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; } }) .catch(error => { console.error('Error updating course data:', error); document.getElementById('updateMessage').textContent = 'Error updating course data. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; }); } function cancelUpdate() { document.getElementById('editSection').style.display = 'none'; document.getElementById('teeSelectionSection').style.display = 'block'; } // Function to calculate totals for holes function calculateTotals() { let totalPar = 0; let totalDistance = 0; for (let i = 0; i < 18; i++) { totalPar += parseInt(document.getElementById(`par${i}`).value) || 0; totalDistance += parseInt(document.getElementById(`distance${i}`).value) || 0; } document.getElementById('totalPar').textContent = `Total Par: ${totalPar}`; document.getElementById('totalDistance').textContent = `Total Distance: ${totalDistance}`; } function addNewTeeFile() { // Clear all the form fields document.getElementById('courseName').value = ''; document.getElementById('country').value = ''; document.getElementById('courseCode').value = ''; // Generate blank fields for 18 holes const holesContainer = document.getElementById('holesContainer'); holesContainer.innerHTML = ''; for (let i = 0; i < 18; i++) { const row = ` <tr> <td>${i + 1}</td> <td><input type="number" id="par${i}" value="" style="width: 60px;"></td> <td><input type="number" id="difficulty${i}" value="" style="width: 80px;"></td> <td><input type="number" id="distance${i}" value="" style="width: 100px;"></td> </tr> `; holesContainer.innerHTML += row; } // Show the edit section with the blank form document.getElementById('editSection').style.display = 'block'; document.getElementById('teeSelectionSection').style.display = 'none'; // Set the currentTee to a new value from user input const newTee = prompt("Enter the name for the new Tee (e.g., bluetee):"); if (newTee) { currentTee = newTee; // Add a save button for the new tee const saveButton = document.createElement('button'); saveButton.textContent = 'Save New Tee'; saveButton.onclick = function() { saveNewTee(newTee); }; document.getElementById('editSection').appendChild(saveButton); } else { alert("Tee name cannot be empty."); } } function saveNewTee(teeName) { const parValues = []; const difficultyValues = []; const distanceValues = []; for (let i = 0; i < 18; i++) { parValues.push(parseInt(document.getElementById(`par${i}`).value) || 0); difficultyValues.push(parseInt(document.getElementById(`difficulty${i}`).value) || 0); distanceValues.push(parseInt(document.getElementById(`distance${i}`).value) || 0); } const newTeeData = { Course: document.getElementById('courseName').value, country: document.getElementById('country').value, courseCode: document.getElementById('courseCode').value, Par: parValues, Difficulty: difficultyValues, Distance: distanceValues }; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; const url = `https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/createTee/${teeName}`; fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(newTeeData) }) .then(response => { console.log('Response status:', response.status); if (response.ok) { console.log('New tee created successfully'); document.getElementById('updateMessage').textContent = 'New tee created successfully!'; document.getElementById('updateMessage').style.display = 'block'; setTimeout(() => { document.getElementById('editSection').style.display = 'none'; document.getElementById('teeSelectionSection').style.display = 'block'; // Refresh the tee list populateTeeList(); }, 2000); } else { console.error('Failed to create new tee.'); document.getElementById('updateMessage').textContent = 'Failed to create new tee. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; } }) .catch(error => { console.error('Error creating new tee:', error); document.getElementById('updateMessage').textContent = 'Error creating new tee. Please try again.'; document.getElementById('updateMessage').style.display = 'block'; }); } function deleteTeeFile() { const selectedTee = document.getElementById("teeSelect").value; const manualCountry = document.getElementById("manualCountry").value; const manualCourseCode = document.getElementById("manualCourseCode").value; if (!selectedTee) { alert("Please select a tee to delete."); return; } // Confirm the delete action const confirmed = confirm(`Are you sure you want to delete the tee: ${selectedTee}?`); if (!confirmed) { return; } const url = `https://bsvhost.com:8000/golf/${manualCountry}/${manualCourseCode}/${selectedTee}`; fetch(url, { method: 'DELETE', }) .then(response => { if (response.ok) { alert(`Tee file ${selectedTee} deleted successfully.`); // Remove the deleted tee from the select list const teeSelect = document.getElementById("teeSelect"); const optionToDelete = teeSelect.querySelector(`option[value="${selectedTee}"]`); teeSelect.removeChild(optionToDelete); } else { throw new Error('Failed to delete the tee file.'); } }) .catch(error => { console.error('Error deleting tee file:', error); alert('Error deleting tee file. Please try again.'); }); } </script> </body> </html>
    https://whatsonchain.com/tx/6bc89bbbf5403a2737c068f76ce67b70e7a5673dfb7b566be43efd49965ebc4c