From a02f97cc7f6363932b5bb04584043b1c772facbf Mon Sep 17 00:00:00 2001 From: Felix Schlusche Date: Fri, 24 Oct 2025 16:56:30 +0200 Subject: [PATCH] feat: update Docker build workflow to include additional paths for triggering builds --- .gitea/workflows/docker-build.yml | 24 ++++++++++ public/js/main.js | 74 ++++++++++++++++++++++++++----- 2 files changed, 86 insertions(+), 12 deletions(-) diff --git a/.gitea/workflows/docker-build.yml b/.gitea/workflows/docker-build.yml index 86f420b..8777194 100644 --- a/.gitea/workflows/docker-build.yml +++ b/.gitea/workflows/docker-build.yml @@ -5,10 +5,34 @@ on: branches: - main - master + paths: + - 'server.js' + - 'package.json' + - 'package-lock.json' + - 'Dockerfile' + - 'docker-compose.yml' + - 'db/**' + - 'public/**' + - '!public/**/*.md' + - '!**/*.md' + - '!.gitea/workflows/**' + - '!.gitignore' pull_request: branches: - main - master + paths: + - 'server.js' + - 'package.json' + - 'package-lock.json' + - 'Dockerfile' + - 'docker-compose.yml' + - 'db/**' + - 'public/**' + - '!public/**/*.md' + - '!**/*.md' + - '!.gitea/workflows/**' + - '!.gitignore' env: REGISTRY: ${{ secrets.REGISTRY || 'gitea.fx-se.de' }} diff --git a/public/js/main.js b/public/js/main.js index 503c892..06b0df5 100644 --- a/public/js/main.js +++ b/public/js/main.js @@ -2764,6 +2764,8 @@ function handleCellClick(e) { const originalContent = cell.innerHTML; let input; + let picker; + if (field === 'pauseMinutes') { input = document.createElement('input'); input.type = 'number'; @@ -2772,7 +2774,7 @@ function handleCellClick(e) { input.className = 'cell-input'; input.value = currentValue; } else { - // Time fields + // Time fields - use Flatpickr input = document.createElement('input'); input.type = 'text'; input.className = 'cell-input'; @@ -2783,10 +2785,46 @@ function handleCellClick(e) { cell.innerHTML = ''; cell.appendChild(input); input.focus(); - input.select(); + + // Initialize Flatpickr for time fields + if (field === 'startTime' || field === 'endTime') { + picker = flatpickr(input, { + enableTime: true, + noCalendar: true, + dateFormat: 'H:i', + time_24hr: true, + minuteIncrement: 15, + allowInput: true, + locale: 'de', + defaultHour: parseInt(currentValue.split(':')[0]) || 9, + defaultMinute: parseInt(currentValue.split(':')[1]) || 0, + onOpen: function(selectedDates, dateStr, instance) { + if (currentValue && currentValue.match(/^\d{1,2}:\d{2}$/)) { + instance.setDate(currentValue, false); + } + }, + onClose: function(selectedDates, dateStr, instance) { + if (dateStr) { + input.value = dateStr; + } + // Trigger save after picker closes + setTimeout(() => saveEdit(), 100); + } + }); + + // Open picker immediately + setTimeout(() => picker.open(), 50); + } else { + input.select(); + } // Save on blur or Enter const saveEdit = async () => { + // Destroy picker if exists + if (picker) { + picker.destroy(); + } + const newValue = input.value.trim(); if (newValue === currentValue) { @@ -2858,16 +2896,28 @@ function handleCellClick(e) { } }; - input.addEventListener('blur', saveEdit); - input.addEventListener('keydown', (e) => { - if (e.key === 'Enter') { - e.preventDefault(); - saveEdit(); - } else if (e.key === 'Escape') { - cell.classList.remove('editing'); - cell.innerHTML = originalContent; - } - }); + // Event listeners - only if not a time picker + if (field === 'pauseMinutes') { + input.addEventListener('blur', saveEdit); + input.addEventListener('keydown', (e) => { + if (e.key === 'Enter') { + e.preventDefault(); + saveEdit(); + } else if (e.key === 'Escape') { + cell.classList.remove('editing'); + cell.innerHTML = originalContent; + } + }); + } else { + // For time fields, save is handled by Flatpickr onClose + input.addEventListener('keydown', (e) => { + if (e.key === 'Escape') { + if (picker) picker.destroy(); + cell.classList.remove('editing'); + cell.innerHTML = originalContent; + } + }); + } } /**