Py.Cafe

lanyuankugoo/

shiny-statistical-visualization

Statistical Visualization with Shiny

DocsPricing
  • app.py
  • index.html
  • requirements.txt
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>節目排程系統</title>
    <link rel="stylesheet" href="style.css">
    <!-- Firebase Libraries -->
    <script src="https://www.gstatic.com/firebasejs/10.12.2/firebase-app-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/10.12.2/firebase-database-compat.js"></script>
    <script src="https://www.gstatic.com/firebasejs/10.12.2/firebase-auth-compat.js"></script>
</head>
<body>
    <header>
        <h1 id="program-title">載入中...</h1>
    </header>

    <main>
        <section id="current-status">
            <div id="current-play-status-container">
                 <p class="current-play-status">
                    第 <span id="current-round">N/A</span> 輪|第 <span id="current-episode">N/A</span> 集
                </p>
                <p id="current-episode-description">說明載入中...</p>
            </div>
            <div id="current-highlights-list">
                <!-- Upcoming highlight will be dynamically inserted here -->
            </div>
        </section>

        <section id="schedule">
            <h2>時刻表</h2>
            <div id="schedule-query">
                <input type="number" id="query-round" placeholder="輪" min="1">
                <button id="query-btn">查詢</button>
            </div>
            <div id="schedule-display">
                <!-- Schedule will be dynamically inserted here -->
            </div>
        </section>
    </main>

    <section id="admin-panel" class="hidden">
        <h2>管理員後台</h2>

        <!-- Login Form -->
        <div id="login-section">
            <input type="email" id="login-email" placeholder="管理員信箱" value="scheduler@nirvana.com">
            <input type="password" id="login-password" placeholder="密碼">
            <button id="login-btn">登入</button>
            <p id="login-error" class="error-message hidden"></p>
        </div>

        <!-- Admin Controls -->
        <div id="admin-controls" class="hidden">
            <div class="admin-section">
                <h3>標題</h3>
                <div class="title-update-container">
                    <input type="text" id="program-title-input" placeholder="節目名稱">
                    <button id="update-program-title">更新名稱</button>
                </div>
            </div>

            <div class="admin-section">
                <div class="admin-section-header">
                    <h3>設定播放時間參考點</h3>
                    <p class="admin-section-description">
                        設定一個精確的參考時間點。例如:在 2024/07/15 的 14:30:00,節目正好在播第 2 輪的第 5 集,且第 5 集已經播了 10 分 30 秒。
                    </p>
                </div>
                <div class="admin-input-row">
                    <input type="text" id="ref-date" placeholder="日期 (YYYY/MM/DD)">
                    <input type="text" id="ref-time" placeholder="時間 (HH:MM:SS)">
                </div>
                <div class="admin-input-row">
                    <input type="number" id="ref-round" placeholder="輪" value="1">
                    <input type="number" id="ref-episode" placeholder="集">
                    <input type="text" id="ref-elapsed-time" placeholder="已播時間 (mm:ss)" value="00:00">
                </div>
                <button id="set-reference-btn">設定參考點</button>
            </div>

            <div class="admin-section">
                <h3>集數 (EPISODES)</h3>
                <form id="episode-form">
                    <input type="number" placeholder="集數" id="episode-number" required>
                    <input type="text" placeholder="時長 (mm:ss)" id="episode-duration" required>
                    <input type="text" placeholder="說明 (50字內)" id="episode-description-input" maxlength="50">
                    <div class="form-buttons">
                        <button type="submit">儲存集數</button>
                        <button type="button" id="clear-episode-form" class="btn-secondary">清除</button>
                    </div>
                </form>
                <div id="episodes-list" class="admin-list-container"></div>
            </div>

            <div class="admin-section">
                <h3>高潮橋段 (HIGHLIGHTS)</h3>
                <form id="highlights-form">
                    <input type="hidden" id="editing-highlight-id">
                    <input type="hidden" id="editing-highlight-episode-num">
                    <input type="number" placeholder="集數" id="highlight-episode" required>
                    <input type="text" placeholder="高潮時間 (mm:ss)" id="highlight-time" required>
                    <input type="text" placeholder="說明 (50字內)" id="highlight-description" maxlength="50">
                    <div class="form-buttons">
                        <button type="submit">儲存高潮</button>
                        <button type="button" id="clear-highlights-form" class="btn-secondary">清除</button>
                    </div>
                </form>
                <div id="highlights-list" class="admin-list-container"></div>
            </div>

            <button id="logout-btn">登出</button>
        </div>
    </section>

    <footer>
        <button id="show-login-btn">管理員登入</button>
    </footer>

    <script src="app.js"></script>
</body>
</html>