Repository navigation
Expand file tree
/
Copy pathindex.html
More file actions
142 lines (120 loc) Β· 5.75 KB
/
Copy pathindex.html
File metadata and controls
142 lines (120 loc) Β· 5.75 KB
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>String - Bingo</title>
<meta name="description" content="Complete String challenges and get BINGO! An interactive team bonding game.">
<meta name="keywords" content="bingo, game, string, interactive, challenges, team bonding">
<link rel="stylesheet" href="/styles/main.css">
<!-- Google Identity Services -->
<script src="https://accounts.google.com/gsi/client" async defer></script>
</head>
<body>
<div class="grid-container">
<div class="bingo-grid" id="bingoGrid">
<!-- Grid will be populated by JavaScript -->
</div>
</div>
<!-- Recenter button for mobile zoom/pan -->
<button class="btn-recenter" id="recenterBtn" title="Recenter grid" aria-label="Recenter grid to original position">
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="12" cy="12" r="3" stroke="currentColor" stroke-width="2"/>
<path d="M12 2V6M12 18V22M2 12H6M18 12H22" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
</svg>
</button>
<div class="footer">
<div class="button-row">
<button class="btn btn-secondary" id="resetBtn">Reset</button>
<button class="btn btn-primary" id="downloadBtn">Download Images</button>
<button class="btn btn-outline" id="authBtn">π― Make Your Own</button>
<button class="btn btn-outline" id="makeYourOwnBtn" style="display: none;">π― Make Your Own</button>
</div>
<div id="userInfo" style="display: none; margin: 10px 0;">
<img id="userAvatar" style="width: 32px; height: 32px; border-radius: 50%; margin-right: 8px;">
<span id="userName"></span>
<button class="btn btn-secondary" id="logoutBtn" style="margin-left: 10px;">Logout</button>
</div>
<hr style="border: none; border-top: 1px solid #333; margin: 20px 0; opacity: 0.3;">
<p>Made with β€οΈ by <a href="https://for.edu.sg/str-bingo-tree" target="_blank">String Team</a></p>
<p style="font-size: 0.7em; color: #666; margin-top: 10px;">This bingo build is inspired by Seng Kwang (Physics
educator @ TJC)</p>
</div>
<!-- Options Modal -->
<div id="optionsModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h2>Complete Challenge</h2>
<button class="btn btn-primary" id="cameraBtn">π· Take Photo</button>
<button class="btn btn-secondary" onclick="document.getElementById('fileInput').click()">π Upload
Image</button>
<input type="file" id="fileInput" accept="image/*" style="display: none;">
</div>
</div>
<!-- Camera Modal -->
<div id="cameraModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h2>Take Photo</h2>
<div class="camera-container">
<video id="video" autoplay playsinline></video>
</div>
<div class="camera-controls">
<button class="btn btn-primary" id="captureBtn">πΈ Capture</button>
<button class="btn btn-secondary" id="switchCameraBtn">π Switch Camera</button>
<button class="btn btn-outline" id="uploadBtn">π Upload Image</button>
<input type="file" id="cameraFileInput" accept="image/*" style="display: none;">
</div>
</div>
</div>
<!-- Bingo Modal -->
<div id="bingoModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h2>π BINGO! π</h2>
<p>Congratulations! You've completed a line!</p>
<p>You've successfully completed 5 challenges in a row!</p>
<button class="btn btn-primary" id="celebrateBtn">π Celebrate!</button>
</div>
</div>
<div id="authModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<h2>π― Create Your Own Bingo</h2>
<p>Sign in with Google to create and manage your own custom bingo games</p>
<div id="googleSignInBtn" style="margin: 20px 0; text-align: center;"></div>
<p style="font-size: 0.9em; color: #666; margin-top: 20px;">
By signing in, you can create unlimited custom bingo games and share them with your teams.
</p>
</div>
</div>
<div id="adminDashboard" class="admin-dashboard" style="display: none;">
<div>
<button class="btn btn-primary admin-create-btn" id="createNewGameBtn">
<span class="btn-icon">+</span>
Create New Game
</button>
</div>
<div class="admin-content">
<div class="games-section">
<div class="empty-state" id="emptyState">
<h2>No games yet</h2>
<p>Create your first bingo game to get started</p>
<button class="btn btn-primary" id="createNewGameBtn2">
<span class="btn-icon">+</span>
Create New Game
</button>
</div>
<div class="games-list" id="gamesList" style="display: none;">
</div>
</div>
</div>
<div class="admin-footer">
<button class="btn btn-outline" id="backToGameBtn">β Back to Game</button>
</div>
</div>
<!-- Status Messages -->
<div class="status" id="status"></div>
<script type="module" src="/js/app.js"></script>
</body>
</html>