diff --git a/js/calendar-widget.js b/js/calendar-widget.js index cd8b97a..0c5fbd2 100644 --- a/js/calendar-widget.js +++ b/js/calendar-widget.js @@ -77,6 +77,34 @@ }); } + function pad2(num) { + return num < 10 ? '0' + num : String(num); + } + + function syncCalendarToday(calendar) { + if (!calendar) return; + + var todayCells = calendar.querySelectorAll('td.luxtools-calendar-day-today'); + for (var i = 0; i < todayCells.length; i++) { + todayCells[i].classList.remove('luxtools-calendar-day-today'); + } + + var now = new Date(); + var year = parseInt(calendar.getAttribute('data-current-year') || '', 10); + var month = parseInt(calendar.getAttribute('data-current-month') || '', 10); + if (!year || !month) return; + + var currentYear = now.getFullYear(); + var currentMonth = now.getMonth() + 1; + if (year !== currentYear || month !== currentMonth) return; + + var dateIso = String(currentYear) + '-' + pad2(currentMonth) + '-' + pad2(now.getDate()); + var todayCell = calendar.querySelector('td.luxtools-calendar-day[data-luxtools-date="' + dateIso + '"]'); + if (todayCell) { + todayCell.classList.add('luxtools-calendar-day-today'); + } + } + function navigateCalendarMonth(calendar, direction) { var year = parseInt(calendar.getAttribute('data-current-year') || '', 10); var month = parseInt(calendar.getAttribute('data-current-month') || '', 10); @@ -92,6 +120,7 @@ throw new Error('Calendar markup missing in response'); } + syncCalendarToday(replacement); calendar.replaceWith(replacement); }) .catch(function () { @@ -120,6 +149,11 @@ } function initCalendarWidgets() { + var calendars = document.querySelectorAll('div.luxtools-calendar[data-luxtools-calendar="1"]'); + for (var i = 0; i < calendars.length; i++) { + syncCalendarToday(calendars[i]); + } + document.addEventListener('click', onCalendarClick, false); } diff --git a/src/ChronologicalCalendarWidget.php b/src/ChronologicalCalendarWidget.php index 96f8062..e86263d 100644 --- a/src/ChronologicalCalendarWidget.php +++ b/src/ChronologicalCalendarWidget.php @@ -45,10 +45,6 @@ class ChronologicalCalendarWidget $leadingEmpty = $firstWeekday - 1; $totalCells = (int)ceil(($leadingEmpty + $daysInMonth) / 7) * 7; - $todayY = (int)date('Y'); - $todayM = (int)date('m'); - $todayD = (int)date('d'); - $dayUrlTemplate = function_exists('wl') ? (string)wl('__LUXTOOLS_ID_RAW__') : ''; $monthUrlTemplate = $dayUrlTemplate; $yearUrlTemplate = $dayUrlTemplate; @@ -109,11 +105,8 @@ class ChronologicalCalendarWidget $dayId = ChronoID::dateToDayId($date, $baseNs); $classes = 'luxtools-calendar-day'; - if ($year === $todayY && $month === $todayM && $dayNumber === $todayD) { - $classes .= ' luxtools-calendar-day-today'; - } - $html .= '