import { Page } from "../types/Page.js"; import { lookupSelf, usernameLogin } from "../api.js"; import { setPageContent, setErrorText } from "../pageUtils.js"; import { makeElement } from "../htmlUtils.js"; import { Margin } from "../elements/Margin.js"; import { MarginInline } from "../elements/MarginInline.js"; export class LoginPage extends Page { constructor() { super(); } render() { let tokenLoginForm = makeElement({ tag: "form", children: [ Margin(makeElement({ tag: "input", class: ["uk-input", "uk-form-width-medium"], attributes: { required: true, type: "password", placeholder: "Token", name: "token" } })), MarginInline(makeElement({ tag: "button", class: ["uk-button", "uk-button-primary"], text: "Log In", attributes: { type: "submit" } })) ] }); let usernameLoginForm = makeElement({ tag: "form", children: [ Margin(makeElement({ tag: "input", id: "usernameInput", class: ["uk-input", "uk-form-width-medium"], attributes: { required: true, type: "text", placeholder: "Username", name: "username" } })), Margin(makeElement({ tag: "input", id: "passwordInput", class: ["uk-input", "uk-form-width-medium"], attributes: { required: true, type: "password", placeholder: "Password", name: "password" } })), MarginInline(makeElement({ tag: "button", class: ["uk-button", "uk-button-primary"], text: "Log In", attributes: { type: "submit" } })) ] }); setPageContent(makeElement({ tag: "div", children: [ makeElement({ tag: "ul", class: ["uk-subnav", "uk-subnav-pill"], attributes: { "uk-switcher": "" }, children: [ makeElement({ tag: "li", id: "tokenInput", children: makeElement({ tag: "a", text: "Token" }) }), makeElement({ tag: "li", children: makeElement({ tag: "a", text: "Username" }) }) ] }), makeElement({ tag: "p", id: "errorText", class: "uk-text-danger" }), makeElement({ tag: "ul", class: ["uk-switcher", "uk-margin"], children: [ makeElement({ tag: "li", children: tokenLoginForm }), makeElement({ tag: "li", children: usernameLoginForm }) ] }) ] })); tokenLoginForm.addEventListener("submit", function (e) { e.preventDefault(); let formData = new FormData(tokenLoginForm); const token = formData.get("token"); localStorage.setItem('token', token); lookupSelf().then(res => { changePage(pages.HOME); }).catch(e => { document.getElementById("tokenInput").classList.add("uk-form-danger"); setErrorText(e.message); }); }); usernameLoginForm.addEventListener("submit", function (e) { e.preventDefault(); let formData = new FormData(usernameLoginForm); usernameLogin(formData.get("username"), formData.get("password")).then(res => { localStorage.setItem("token", res); changePage(pages.HOME); }).catch(e => { document.getElementById("usernameInput").classList.add("uk-form-danger"); document.getElementById("passwordInput").classList.add("uk-form-danger"); setErrorText(e.message); }); }); } get name() { return "Login"; } }