/* ------------------------------------------------------------------------------------- Dreamgest Framework v2 ------------------------------------------------------------------------------------- Copyright 2024 ~ 2025 Dreamgest ltd. All rights reserved. Reproduction, even partial, by any means is prohibited without written authorization. Author: Dreamgest ltd Email: help@dreamgest.com Website: https://dreamgest.com ------------------------------------------------------------------------------------- */ /** * Domready */ document.addEventListener('DOMContentLoaded', () => { const loginOK = document.querySelector('[data-id="loginOK"]').innerHTML; const loginKO = document.querySelector('[data-id="loginKO"]').innerHTML; const usernameNotFound = document.querySelector('[data-id="usernameNotFound"]').innerHTML; const username = document.querySelector('#username'); const password = document.querySelector('#password'); const rememberMe = document.querySelector('#rememberMe'); const alertEl = document.querySelector('[data-id="alert"]'); const redir = document.querySelector('#redir'); const APP_BASE_URL = window.baseurl ?? ''; /** * Login */ document.querySelector('#btn-submit').addEventListener('click', async () => { username.disabled = true; password.disabled = true; rememberMe.disabled = true; try { const res = await fetch(`${APP_BASE_URL}/ajax/login`, { method: 'POST', body: JSON.stringify({ username: username.value, password: password.value, remember: rememberMe.type === 'checkbox' ? rememberMe.checked : rememberMe.value, }) }); if (!res.ok) { throw res.status; } const json = await res.json(); if (json.success) { password.classList.toggle('is-invalid', false); username.classList.toggle('is-invalid', false); password.classList.toggle('is-valid', true); username.classList.toggle('is-valid', true); alertEl.classList.toggle('d-none', false); alertEl.classList.toggle('alert-danger', false); alertEl.classList.toggle('alert-success', true); alertEl.innerHTML = loginOK; setTimeout(() => { location.href = redir.value || '/'; }, 2000); } else { throw json.status; } } catch (err) { switch (err) { case 401: err = loginKO; password.classList.toggle('is-invalid', true); username.classList.toggle('is-invalid', false); break; case 403: err = usernameNotFound; password.classList.toggle('is-invalid', true); username.classList.toggle('is-invalid', true); break; default: err = loginKO; password.classList.toggle('is-invalid', true); username.classList.toggle('is-invalid', true); } alertEl.classList.toggle('d-none', false); alertEl.classList.toggle('alert-danger', true); alertEl.classList.toggle('alert-success', false); alertEl.innerHTML = err; } finally { username.disabled = false; password.disabled = false; rememberMe.disabled = false; } }); /** * Language */ document.querySelectorAll('[data-language]').forEach(el => { el.addEventListener('click', () => { const d = new Date(); const d2 = new Date(d.getFullYear() + 10, 0, 1).toString(); document.cookie = `language=${el.dataset.language}; expires=${d2}`; window.setTimeout(location.reload(), 500); }) }) });