UNPKG

librecast-live

Version:

Live Streaming Video Platform with IPv6 Multicast

121 lines (119 loc) 3.35 kB
class SignupBox extends Dialog { nodeName = 'SIGNUPBOX'; forms = { signup: ` <h1>Join Librecast LIVE!</h1> <div class="tabmenu"> <button click='showLogin'>Log In</button> <button click='showSignup' class="down">Sign Up</button> </div> <div class="dialogform"> <form action="javascript:void(0);"> <label for="emailAddress">Email Address</label> <input id="emailAddress" type="email" placeholder="you@example.com" /> <button type="submit" click="signup">Sign Up</button> </form> </div>` , login: ` <h1>Sign In to Librecast LIVE!</h1> <div class="tabmenu"> <button click='showLogin' class="down">Log In</button> <button click='showSignup'>Sign Up</button> </div> <div class="dialogform"> <form action="javascript:void(0);"> <label for="emailAddress">Email Address</label> <input id="emailAddress" type="email" placeholder="you@example.com" /> <label for="password">Password</label> <input id="password" type="password" /> <button type="submit" click="login">Log In</button> </form> </div>` , confirmSignup: ` <h1>Complete Account Signup</h1> <div class="dialogform"> <form action="javascript:void(0);"> <label for="password">Password</label> <input id="password" type="password" /> <button type="submit" click="setPassword">Sign Up</button> </form> </div>` , loggingIn: ` <h1>Logging In</h1> <p>Please wait a moment...</p>` , signedup: ` <h1>Sign Up Successful</h1> <p>You will receive an email with instructions to complete your signup.</p> ` } constructor() { super(); this.content = this.forms[store.state.showSignup]; } close() { store.mutate('showSignup', undefined); } async login() { const emailAddress = document.getElementById("emailAddress"); const password = document.getElementById("password"); store.mutate('showSignup', "loggingIn"); const s1 = Symbol('timeout') const timeout = new Promise((resolve, reject) => setTimeout(() => resolve(s1), 2000)) try { const login = live.login(emailAddress, password) const res = await Promise.race([login, timeout]) if (res === s1) { console.error('login TIMEOUT') store.mutate('showSignup', "login"); alert("Server Error: login timeout") } else { console.log("logged in successfully"); this.close(); store.mutate('loggedIn', true); if (store.getItem('nick') === undefined) { store.mutate('showProfile', 'profileGeneral'); } else { store.mutate('showChat', true); } } } catch(e) { console.error("login failed") store.mutate('showSignup', "login"); alert("login failed") } } showLogin() { store.mutate('showSignup', "login"); } showSignup() { store.mutate('showSignup', "signup"); } setPassword() { console.log("setting password"); const password = document.getElementById("password"); live.setPassword(store.state.passToken, password) .then(() => { alert("password set"); store.mutate('showSignup', "login"); }) .catch(() => { console.error("failed to set password"); alert("failed to set password"); }); } signup() { live.signup().then(() => { }) .catch(() => { console.error("signup failed"); alert("signup failed"); }); store.mutate('showSignup', "signedup"); } }