| /** |
| * @module infra-sk/modules/login-sk |
| * @description <h2><code>login-sk</code></h2> |
| * |
| * <p> |
| * The <login-sk> custom element. Uses the Login promise to display the |
| * current login status and provides login/logout links. Reports errors via |
| * {@linkcode module:elements-sk/error-toast-sk}. |
| * </p> |
| * |
| * @attr {boolean} testing_offline - If we should really poll for Login status |
| * or use mock data. |
| * @attr {string} login_host - If it needs to be something other than skia.org. |
| * If login_host is not specified then skia.org will be used. |
| * |
| * <p> |
| */ |
| import { define } from 'elements-sk/define'; |
| import { errorMessage } from 'elements-sk/errorMessage'; |
| import { LoginTo } from '../login'; |
| |
| define('login-sk', class extends HTMLElement { |
| connectedCallback() { |
| this.innerHTML = '<span class=email>Loading...</span><a class=logInOut></a>'; |
| const host = this.loginHost ? this.loginHost : 'skia.org'; |
| if (this.testingOffline) { |
| this.querySelector('.email').textContent = 'test@example.com'; |
| const logInOut = this.querySelector('.logInOut'); |
| logInOut.href = `https://${host}/logout/?redirect=${encodeURIComponent(document.location)}`; |
| logInOut.textContent = 'Logout'; |
| } else { |
| LoginTo(`https://${host}/loginstatus/`).then((status) => { |
| this.querySelector('.email').textContent = status.Email; |
| const logInOut = this.querySelector('.logInOut'); |
| if (!status.Email) { |
| logInOut.href = status.LoginURL; |
| logInOut.textContent = 'Login'; |
| } else { |
| logInOut.href = `https://${host}/logout/?redirect=${encodeURIComponent(document.location)}`; |
| logInOut.textContent = 'Logout'; |
| } |
| }).catch(errorMessage); |
| } |
| } |
| |
| /** @prop testingOffline {boolean} Reflects the testing_offline attribute for ease of use. |
| */ |
| get testingOffline() { return this.hasAttribute('testing_offline'); } |
| |
| set testingOffline(val) { |
| if (val) { |
| this.setAttribute('testing_offline', ''); |
| } else { |
| this.removeAttribute('testing_offline'); |
| } |
| } |
| |
| /** @prop loginHost {string} Which host should be used for login URLs. |
| */ |
| get loginHost() { return this.getAttribute('login_host'); } |
| |
| set loginHost(val) { |
| if (val) { |
| this.setAttribute('login_host', val); |
| } |
| } |
| }); |