|
1 | 1 | (function () { |
| 2 | + const isWebHostedAnalytics = () => window.SBWebAnalytics?.enabled?.() !== false |
| 3 | + && !navigator.userAgent.includes('Electron') |
| 4 | + && !(window.Capacitor?.getPlatform?.() === 'android'); |
| 5 | + |
2 | 6 | // elements |
3 | 7 | function h(tag, attrs = {}, children = []) { |
4 | 8 | const el = document.createElement(tag); |
|
110 | 114 |
|
111 | 115 | // local login |
112 | 116 | const rowLocal = h('div', { className: 'fields-row' }); |
| 117 | + const loginAnalyticsNotice = isWebHostedAnalytics() |
| 118 | + ? (() => { |
| 119 | + const notice = h('p', { className: 'login-analytics-notice', hidden: '' }); |
| 120 | + notice.setAttribute('data-login-analytics-disclosure', ''); |
| 121 | + return notice; |
| 122 | + })() |
| 123 | + : null; |
113 | 124 | const userInput = mkInput('Username', 'text'); |
114 | 125 | const passInput = mkInput('Password', 'password'); |
115 | 126 | const btnLoginLocal = h('button', { className: 'link-btn', text: 'Login (Local)' }); |
|
136 | 147 | card.appendChild(status); |
137 | 148 | card.appendChild(serverRow); |
138 | 149 | card.appendChild(rowRegister); |
| 150 | + if (loginAnalyticsNotice) card.appendChild(loginAnalyticsNotice); |
139 | 151 | card.appendChild(rowLocal); |
140 | 152 | card.appendChild(rowDiscord); |
141 | 153 | card.appendChild(rowInfo); |
|
206 | 218 | await window.api.accountSetServer?.(origin || serverSelect.value); |
207 | 219 | } |
208 | 220 |
|
209 | | - const who = a.user ? `${a.user.name || a.user.id}` : 'Not logged in'; |
210 | | - status.textContent = `Server: ${serverSelect.value} • ${a.loggedIn ? 'Logged in as ' + who : 'Not logged in'}`; |
| 221 | + const who = a.user ? (a.user.name || a.user.id) : null; |
| 222 | + status.textContent = a.loggedIn |
| 223 | + ? `Server: ${serverSelect.value} • Logged in${who ? ' as ' + who : ''}` |
| 224 | + : `Server: ${serverSelect.value} • Not logged in`; |
211 | 225 |
|
212 | 226 | const linked = !!a?.user?.discord_id; |
213 | | - linkBadge.textContent = linked ? 'Discord linked' : 'Discord not linked'; |
214 | | - linkBadge.className = 'badge ' + (linked ? 'ok' : 'muted'); |
| 227 | + linkBadge.textContent = linked ? 'Discord linked' : (a.loggedIn ? 'Signed in' : 'Discord not linked'); |
| 228 | + linkBadge.className = 'badge ' + (linked ? 'ok' : (a.loggedIn ? 'ok' : 'muted')); |
215 | 229 |
|
216 | 230 | btnLinkDiscord.disabled = !a.loggedIn || linked; |
217 | 231 | btnLoginDiscord.disabled = !serverSelect.value || a.loggedIn; |
| 232 | + btnLoginDiscord.title = a.loggedIn ? 'You are already logged in' : 'Sign in with Discord'; |
218 | 233 | btnUnlinkDiscord.disabled = !a.loggedIn || !linked; |
219 | 234 | btnLoginLocal.disabled = !serverSelect.value || a.loggedIn; |
220 | 235 | btnRegister.disabled = !serverSelect.value || a.loggedIn; |
|
252 | 267 | btnRegister.addEventListener('click', async () => { |
253 | 268 | try { |
254 | 269 | btnRegister.disabled = true; |
| 270 | + if (isWebHostedAnalytics()) window.SBAnalytics?.trackEvent?.('register_form_started', { form: 'account_modal' }); |
255 | 271 | const u = regUser.value.trim(); |
256 | 272 | const p = regPass.value; |
257 | 273 | if (!u || !p) { alert('Enter username and password'); return; } |
|
265 | 281 | btnLoginLocal.addEventListener('click', async () => { |
266 | 282 | try { |
267 | 283 | btnLoginLocal.disabled = true; |
| 284 | + if (isWebHostedAnalytics()) window.SBAnalytics?.trackEvent?.('login_form_started', { form: 'account_modal' }); |
268 | 285 | const u = userInput.value.trim(); |
269 | 286 | const p = passInput.value; |
270 | 287 | if (!u || !p) { alert('Enter username and password'); return; } |
|
305 | 322 | btnLoginDiscord.addEventListener('click', (e) => { |
306 | 323 | e.preventDefault(); |
307 | 324 | e.stopPropagation(); |
| 325 | + if (btnLoginDiscord.disabled) return; |
308 | 326 | btnLoginDiscord.disabled = true; |
309 | 327 | try { |
310 | 328 | const onWeb = typeof window !== 'undefined' |
|
357 | 375 | }); |
358 | 376 |
|
359 | 377 | await refresh(); |
| 378 | + if (loginAnalyticsNotice) { |
| 379 | + const syncLoginDisclosure = () => window.SBAnalytics?.updateLoginDisclosure?.(loginAnalyticsNotice); |
| 380 | + syncLoginDisclosure(); |
| 381 | + window.SBConsent?.onConsentChange?.(syncLoginDisclosure); |
| 382 | + } |
360 | 383 | setTimeout(() => panel.focus(), 0); |
361 | 384 | } |
362 | 385 |
|
|
0 commit comments