/* 大屏:时钟 + 全屏 + 主题 + 日历悬停明细 */ (function () { 'use strict'; function pad(n) { return n < 10 ? '0' + n : '' + n; } function tick() { var d = new Date(); var clock = document.querySelector('[data-clock]'); if (clock) clock.textContent = pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds()); var dateEl = document.querySelector('[data-date]'); if (dateEl) { dateEl.textContent = d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) + ' 周' + '日一二三四五六'.charAt(d.getDay()); } } tick(); setInterval(tick, 1000); document.addEventListener('keydown', function (e) { if (e.key === 'f' || e.key === 'F') { if (document.fullscreenElement) { document.exitFullscreen(); } else if (document.documentElement.requestFullscreen) { document.documentElement.requestFullscreen(); } } }); /* ---------- 主题切换 ---------- */ var THEME_KEY = 'daili_theme'; function effectiveTheme() { var attr = document.documentElement.getAttribute('data-theme'); if (attr === 'light' || attr === 'dark') return attr; return window.matchMedia && window.matchMedia('(prefers-color-scheme: light)').matches ? 'light' : 'dark'; } document.querySelectorAll('[data-theme-toggle]').forEach(function (btn) { btn.addEventListener('click', function () { var next = effectiveTheme() === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', next); document.cookie = THEME_KEY + '=' + next + '; path=/; max-age=31536000; SameSite=Lax'; }); }); /* ---------- 日历格子悬停明细 ---------- */ var root = document.querySelector('.scr'); var pop = document.getElementById('day-pop'); if (!root || !pop) return; var api = root.getAttribute('data-api') || '/api/screen/day'; var pkg = root.getAttribute('data-pkg') || '0'; var cache = {}; var hideTimer = null; function esc(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, function (c) { return { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]; }); } function place(cell) { var r = cell.getBoundingClientRect(); var w = 340, h = Math.min(360, pop.offsetHeight || 240); var left = r.right + 8; if (left + w > window.innerWidth - 8) left = Math.max(8, r.left - w - 8); var top = r.top + r.height / 2 - h / 2; top = Math.max(8, Math.min(top, window.innerHeight - h - 8)); pop.style.left = left + 'px'; pop.style.top = top + 'px'; } function render(data, cell) { if (!data) { pop.innerHTML = '