Add keyboard navigation to bet details pages

- Enter key prints the ticket directly
- Esc key goes back to bet list
- Applied to both cashier and admin bet details pages
- Simplified bet submission to just Enter (no Ctrl+Enter required)
parent 5fb52f41
......@@ -411,8 +411,36 @@ document.addEventListener('DOMContentLoaded', function() {
// Update current time every second
setInterval(updateCurrentTime, 1000);
updateCurrentTime();
// Initialize keyboard navigation
initializeBetDetailsKeyboardNavigation();
});
function initializeBetDetailsKeyboardNavigation() {
// Global keyboard event listener for bet details page
document.addEventListener('keydown', function(event) {
// Handle Enter key for printing ticket
if (event.key === 'Enter' && !isInInputField(event.target)) {
event.preventDefault();
// Print the ticket directly
directPrintBet(window.betData.uuid);
return;
}
// Handle Escape key for going back to bet list
if (event.key === 'Escape') {
event.preventDefault();
window.location.href = '/bets';
return;
}
});
}
function isInInputField(element) {
return element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT' ||
element.contentEditable === 'true';
}
function generateThermalReceipt(betId) {
// Get bet details from the global bet data
const receiptContainer = document.getElementById('thermal-receipt');
......
......@@ -265,8 +265,8 @@ function initializeKeyboardNavigation() {
return;
}
// Handle Ctrl+Enter for submitting bet
if (event.key === 'Enter' && event.ctrlKey) {
// Handle Enter for submitting bet (if any values are entered)
if (event.key === 'Enter' && !event.ctrlKey && !keyboardState.inputBuffer && selectedOutcomes.size > 0) {
event.preventDefault();
submitBet();
return;
......
......@@ -411,8 +411,36 @@ document.addEventListener('DOMContentLoaded', function() {
// Update current time every second
setInterval(updateCurrentTime, 1000);
updateCurrentTime();
// Initialize keyboard navigation
initializeBetDetailsKeyboardNavigation();
});
function initializeBetDetailsKeyboardNavigation() {
// Global keyboard event listener for bet details page
document.addEventListener('keydown', function(event) {
// Handle Enter key for printing ticket
if (event.key === 'Enter' && !isInInputField(event.target)) {
event.preventDefault();
// Print the ticket directly
directPrintBet(window.betData.uuid);
return;
}
// Handle Escape key for going back to bet list
if (event.key === 'Escape') {
event.preventDefault();
window.location.href = '/cashier/bets';
return;
}
});
}
function isInInputField(element) {
return element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT' ||
element.contentEditable === 'true';
}
function deleteBetDetail(detailId) {
if (confirm('Are you sure you want to delete this bet detail? This action cannot be undone.')) {
fetch(`/api/cashier/bet-details/${detailId}`, {
......
......@@ -265,8 +265,8 @@ function initializeKeyboardNavigation() {
return;
}
// Handle Ctrl+Enter for submitting bet
if (event.key === 'Enter' && event.ctrlKey) {
// Handle Enter for submitting bet (if any values are entered)
if (event.key === 'Enter' && !event.ctrlKey && !keyboardState.inputBuffer && selectedOutcomes.size > 0) {
event.preventDefault();
submitBet();
return;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment