First Push
This commit is contained in:
@@ -0,0 +1,248 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
|
||||
<title>Cal Display</title>
|
||||
<link rel="stylesheet" href="/static/css/display.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="app">
|
||||
<!-- Left sidebar: small cards -->
|
||||
<div id="sidebar">
|
||||
<div class="card card-time" data-card="time" id="card-time">
|
||||
<div class="card-left">
|
||||
<div class="card-icon"><svg class="card-icon-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3.5 2"/></svg></div>
|
||||
<div class="card-label">时间</div>
|
||||
</div>
|
||||
<div class="card-value" id="time-value">--:--</div>
|
||||
</div>
|
||||
<div class="card card-weather" data-card="weather" id="card-weather">
|
||||
<div class="card-left">
|
||||
<img class="card-icon card-weather-icon" id="weather-card-icon" src="" alt="" style="display:none;">
|
||||
<div class="card-label">天气</div>
|
||||
</div>
|
||||
<div class="card-value" id="weather-temp">--°</div>
|
||||
</div>
|
||||
<div class="card card-calendar" data-card="calendar" id="card-calendar">
|
||||
<div class="card-left">
|
||||
<div class="card-icon"><svg class="card-icon-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="5" width="18" height="16" rx="2"/><path d="M8 3v4M16 3v4M3 10h18"/></svg></div>
|
||||
<div class="card-label">日历</div>
|
||||
</div>
|
||||
<div class="card-value" id="calendar-next">无日程</div>
|
||||
</div>
|
||||
<div class="card card-alarm" data-card="alarm" id="card-alarm">
|
||||
<div class="card-left">
|
||||
<div class="card-icon"><svg class="card-icon-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><path d="M18 8a6 6 0 0 0-12 0c0 7-3 9-3 9h18s-3-2-3-9"/><path d="M13.73 21a2 2 0 0 1-3.46 0"/></svg></div>
|
||||
<div class="card-label">闹钟</div>
|
||||
</div>
|
||||
<div class="card-value" id="alarm-next">无闹钟</div>
|
||||
</div>
|
||||
<div class="card card-countdown" data-card="countdown" id="card-countdown">
|
||||
<div class="card-left">
|
||||
<div class="card-icon"><svg class="card-icon-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="14" r="8"/><path d="M9.5 2h5"/><path d="M12 2v4"/><path d="M12 14l3.5-2.5"/></svg></div>
|
||||
<div class="card-label">倒计时</div>
|
||||
</div>
|
||||
<div class="card-value" id="countdown-next">无</div>
|
||||
</div>
|
||||
<div class="card card-pomodoro" data-card="pomodoro" id="card-pomodoro">
|
||||
<div class="pomo-sidebar-row">
|
||||
<div class="pomo-sidebar-btns" id="pomo-sidebar-btns">
|
||||
<button id="pomo-card-start" class="pomo-mini-btn pomo-mini-primary">开始</button>
|
||||
<button id="pomo-card-pause" class="pomo-mini-btn pomo-mini-secondary" style="display:none;">暂停</button>
|
||||
<button id="pomo-card-skip" class="pomo-mini-btn pomo-mini-secondary" style="display:none;">跳过</button>
|
||||
<button id="pomo-card-stop" class="pomo-mini-btn pomo-mini-danger" style="display:none;">停止</button>
|
||||
</div>
|
||||
<div class="pomo-sidebar-info">
|
||||
<div class="card-left">
|
||||
<div class="card-icon"><svg class="card-icon-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="15.5" r="6.5"/><path d="M12 9v-2.5"/><path d="M12 6.5c-2.2-.3-3.4-1.4-3.7-3 1.4.2 2.5 1 3.7 3z"/><path d="M12 6.5c2.2-.3 3.4-1.4 3.7-3-1.4.2-2.5 1-3.7 3z"/></svg></div>
|
||||
<div class="card-label">番茄钟</div>
|
||||
</div>
|
||||
<div class="card-value" id="pomodoro-value">--:--</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Right panel: expanded content -->
|
||||
<div id="panel">
|
||||
<div class="panel-header-btns">
|
||||
<button id="refresh-btn" class="lock-btn" title="刷新">↻</button>
|
||||
<button id="fullscreen-btn" class="lock-btn" title="全屏">⛶</button>
|
||||
<button id="lock-btn" class="lock-btn" title="锁定">🔒</button>
|
||||
</div>
|
||||
<div id="panel-time" class="panel-content">
|
||||
<h2>时间</h2>
|
||||
<div id="detailed-time" class="big-clock">--:--:--</div>
|
||||
<div class="date-str" id="date-str"></div>
|
||||
</div>
|
||||
<div id="panel-weather" class="panel-content">
|
||||
<h2>天气</h2>
|
||||
<div class="weather-main">
|
||||
<span class="weather-temp-big" id="weather-temp-big">--°</span>
|
||||
<span class="weather-desc" id="weather-desc"></span>
|
||||
<img class="weather-icon" id="weather-icon" src="" alt="" style="display:none;">
|
||||
</div>
|
||||
<div class="weather-details" id="weather-details"></div>
|
||||
<div class="hourly-section">
|
||||
<div class="hourly-title">逐小时预报</div>
|
||||
<div class="hourly-list" id="hourly-list"></div>
|
||||
</div>
|
||||
<!-- Minutely Precipitation -->
|
||||
<div class="hourly-section" id="minutely-section" style="display:none;">
|
||||
<div class="section-title-row">
|
||||
<span class="hourly-title">分钟级降水</span>
|
||||
<button class="mini-refresh-btn" id="minutely-refresh-btn">刷新</button>
|
||||
</div>
|
||||
<div id="minutely-content"></div>
|
||||
</div>
|
||||
<!-- Weather Warnings -->
|
||||
<div class="hourly-section" id="warning-section" style="display:none;">
|
||||
<div class="section-title-row">
|
||||
<span class="hourly-title">天气预警</span>
|
||||
<button class="mini-refresh-btn" id="warning-refresh-btn">刷新</button>
|
||||
</div>
|
||||
<div id="warning-content"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="panel-calendar" class="panel-content">
|
||||
<h2>日程</h2>
|
||||
<div class="event-list" id="event-list"></div>
|
||||
</div>
|
||||
<div id="panel-alarm" class="panel-content">
|
||||
<h2>闹钟</h2>
|
||||
<div class="alarm-list" id="alarm-list"></div>
|
||||
<button id="alarm-add-btn" class="panel-add-btn">+ 添加闹钟</button>
|
||||
</div>
|
||||
<div id="panel-countdown" class="panel-content">
|
||||
<h2>倒计时</h2>
|
||||
<div class="countdown-list" id="countdown-list"></div>
|
||||
<button id="countdown-add-btn" class="panel-add-btn">+ 添加倒计时</button>
|
||||
</div>
|
||||
<div id="panel-pomodoro" class="panel-content">
|
||||
<div class="pomo-bg-wrap">
|
||||
<div class="pomo-bg-img"></div>
|
||||
<div class="pomo-content">
|
||||
<h2>番茄钟</h2>
|
||||
<div id="pomodoro-display">
|
||||
<div class="pomo-glass">
|
||||
<div id="pomodoro-phase" class="pomo-phase-text">工作中</div>
|
||||
<div id="pomodoro-timer" class="big-clock">--:--</div>
|
||||
<div id="pomodoro-cycles">已完成 0 组</div>
|
||||
<div id="pomodoro-next-break" class="pomo-next-break">下次: 短休息</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Alarm triggered overlay (hidden by default) -->
|
||||
<div id="alarm-overlay" class="alarm-overlay hidden">
|
||||
<div class="alarm-overlay-box">
|
||||
<div class="alarm-overlay-icon">🔔</div>
|
||||
<div class="alarm-overlay-title">闹钟</div>
|
||||
<div class="alarm-overlay-info" id="alarm-overlay-info"></div>
|
||||
<button id="alarm-dismiss" class="alarm-dismiss-btn">关闭闹钟</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pomodoro triggered overlay (hidden by default) -->
|
||||
<div id="pomodoro-overlay" class="alarm-overlay hidden">
|
||||
<div class="alarm-overlay-box">
|
||||
<div class="alarm-overlay-icon">🍅</div>
|
||||
<div class="alarm-overlay-title" id="pomodoro-overlay-title">番茄钟</div>
|
||||
<div class="alarm-overlay-info" id="pomodoro-overlay-info"></div>
|
||||
<button id="pomodoro-dismiss" class="alarm-dismiss-btn">关闭铃声</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Custom notification overlay (hidden by default) -->
|
||||
<div id="custom-notify-overlay" class="alarm-overlay hidden">
|
||||
<div class="alarm-overlay-box">
|
||||
<div class="alarm-overlay-icon" id="custom-notify-icon">🔔</div>
|
||||
<div class="alarm-overlay-title" id="custom-notify-title">提醒</div>
|
||||
<div class="alarm-overlay-info" id="custom-notify-info"></div>
|
||||
<button id="custom-notify-dismiss" class="alarm-dismiss-btn">知道了</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Alarm add/edit modal -->
|
||||
<div id="alarm-modal" class="modal-overlay hidden">
|
||||
<div class="modal-box">
|
||||
<div class="modal-title" id="alarm-modal-title">添加闹钟</div>
|
||||
<div class="modal-body">
|
||||
<!-- Name (read-only when editing, auto-generated when adding) -->
|
||||
<div class="modal-field">
|
||||
<div class="modal-label">名称</div>
|
||||
<div class="alarm-modal-name" id="alarm-modal-name">闹钟 1</div>
|
||||
</div>
|
||||
<!-- Mouse-only time picker: hours + minutes -->
|
||||
<div class="modal-field">
|
||||
<div class="modal-label">时间</div>
|
||||
<div class="time-picker">
|
||||
<div class="tp-col">
|
||||
<button class="tp-btn tp-up" data-target="hours">▲</button>
|
||||
<div class="tp-value" id="tp-hours">08</div>
|
||||
<button class="tp-btn tp-down" data-target="hours">▼</button>
|
||||
</div>
|
||||
<div class="tp-sep">:</div>
|
||||
<div class="tp-col">
|
||||
<button class="tp-btn tp-up" data-target="minutes">▲</button>
|
||||
<div class="tp-value" id="tp-minutes">00</div>
|
||||
<button class="tp-btn tp-down" data-target="minutes">▼</button>
|
||||
</div>
|
||||
<div class="tp-sep">:</div>
|
||||
<div class="tp-col">
|
||||
<button class="tp-btn tp-up" data-target="seconds">▲</button>
|
||||
<div class="tp-value" id="tp-seconds">00</div>
|
||||
<button class="tp-btn tp-down" data-target="seconds">▼</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Once-only toggle (alarm mode only) -->
|
||||
<div class="modal-field" id="alarm-once-field">
|
||||
<label class="toggle-label">
|
||||
<input type="checkbox" id="alarm-modal-once">
|
||||
<span class="toggle-slider"></span>
|
||||
<span>仅一次</span>
|
||||
</label>
|
||||
</div>
|
||||
<!-- Day-of-week picker (hidden when once is on) -->
|
||||
<div class="modal-field" id="alarm-days-field">
|
||||
<div class="modal-label">重复</div>
|
||||
<div class="day-picker" id="alarm-modal-days">
|
||||
<button class="day-btn active" data-day="1">一</button>
|
||||
<button class="day-btn active" data-day="2">二</button>
|
||||
<button class="day-btn active" data-day="3">三</button>
|
||||
<button class="day-btn active" data-day="4">四</button>
|
||||
<button class="day-btn active" data-day="5">五</button>
|
||||
<button class="day-btn active" data-day="6">六</button>
|
||||
<button class="day-btn active" data-day="7">日</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Enabled toggle -->
|
||||
<div class="modal-field">
|
||||
<label class="toggle-label">
|
||||
<input type="checkbox" id="alarm-modal-enabled" checked>
|
||||
<span class="toggle-slider"></span>
|
||||
<span>启用</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-actions">
|
||||
<button id="alarm-modal-save" class="pomo-btn pomo-btn-primary">保存</button>
|
||||
<button id="alarm-modal-cancel" class="pomo-btn pomo-btn-secondary">取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Hidden audio for custom ringtone -->
|
||||
<audio id="alarm-audio" loop preload="auto" style="display:none"></audio>
|
||||
</div>
|
||||
|
||||
<script src="/static/js/theme.js"></script>
|
||||
<script src="/static/js/display.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user