151 lines
4.1 KiB
JavaScript
151 lines
4.1 KiB
JavaScript
/* eslint-disable no-unused-vars */
|
|
const { protocol, host } = window.location;
|
|
|
|
/**
|
|
* Fonction permettant d'afficher un message dans un toastr
|
|
* @param {String} message
|
|
*/
|
|
function showToastr(message, success = false) {
|
|
const x = document.getElementById("toastr");
|
|
if (message) {
|
|
x.getElementsByTagName("SPAN")[0].innerHTML = message;
|
|
}
|
|
|
|
x.className = `${x.className} show`.replace("sucess", "");
|
|
if (success) {
|
|
x.className = `${x.className} success`;
|
|
}
|
|
setTimeout(() => {
|
|
x.className = x.className.replace("show", "");
|
|
}, 3000);
|
|
}
|
|
|
|
/**
|
|
* Fonction permettant de masquer le toastr
|
|
*/
|
|
function hideToastr() {
|
|
const x = document.getElementById("toastr");
|
|
|
|
x.className = x.className.replace("show", "");
|
|
x.getElementsByTagName("SPAN")[0].innerHTML = "";
|
|
}
|
|
|
|
/**
|
|
* Fonction permettant de récupérer la valeur d'un cookie
|
|
* @param {String} cname
|
|
* @param {String} defaultValue
|
|
*
|
|
* @return {String}
|
|
*/
|
|
function getCookie(cname, defaultValue = "false") {
|
|
const name = `${cname}=`;
|
|
const decodedCookie = decodeURIComponent(document.cookie);
|
|
const ca = decodedCookie.split(";");
|
|
for (let i = 0; i < ca.length; i += 1) {
|
|
let c = ca[i];
|
|
while (c.charAt(0) === " ") {
|
|
c = c.substring(1);
|
|
}
|
|
if (c.indexOf(name) === 0) {
|
|
return c.substring(name.length, c.length);
|
|
}
|
|
}
|
|
return defaultValue;
|
|
}
|
|
|
|
/**
|
|
* Fonction permettant de créer un cookie
|
|
* @param {String} cname
|
|
* @param {String} cvalue
|
|
* @param {Number} exdays
|
|
*/
|
|
function setCookie(cname, cvalue, exdays = 30) {
|
|
const d = new Date();
|
|
d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000);
|
|
const expires = `expires=${d.toUTCString()}`;
|
|
document.cookie = `${cname}=${cvalue};${expires};path=/`;
|
|
}
|
|
|
|
/**
|
|
* Fonction de (dé)charger le thème accessible
|
|
* @param {String} value
|
|
*/
|
|
function setAriaTheme(value) {
|
|
const { body } = document;
|
|
if (value === "true") {
|
|
const classesString = body.className || "";
|
|
if (classesString.indexOf("is-accessible") === -1) {
|
|
body.classList.add("is-accessible");
|
|
}
|
|
} else {
|
|
body.classList.remove("is-accessible");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fonction de (dé)charger le thème accessible
|
|
*/
|
|
function switchAriaTheme() {
|
|
const { body } = document;
|
|
|
|
body.classList.toggle("is-accessible");
|
|
|
|
setCookie("ariatheme", body.classList.contains("is-accessible"));
|
|
}
|
|
|
|
/**
|
|
* Fonction permettant de switcher de thème clair/sombre
|
|
* @param {Object} e
|
|
*/
|
|
function switchTheme(e) {
|
|
const theme = e.target.checked ? "dark" : "light";
|
|
|
|
document.documentElement.setAttribute("data-theme", theme);
|
|
setCookie("theme", theme);
|
|
}
|
|
|
|
/**
|
|
* Ensemble d'actions effectuées au chargement de la page
|
|
*/
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
const $navbarBurgers = Array.prototype.slice.call(
|
|
document.querySelectorAll(".navbar-burger"),
|
|
0
|
|
);
|
|
if ($navbarBurgers.length > 0) {
|
|
$navbarBurgers.forEach((el) => {
|
|
el.addEventListener("click", () => {
|
|
const { target } = el.dataset;
|
|
const $target = document.getElementById(target);
|
|
|
|
el.classList.toggle("is-active");
|
|
$target.classList.toggle("is-active");
|
|
});
|
|
});
|
|
}
|
|
|
|
const switchAriaThemeBtn = document.querySelector("#switchAriaTheme");
|
|
if (switchAriaThemeBtn) {
|
|
switchAriaThemeBtn.addEventListener("click", switchAriaTheme);
|
|
}
|
|
setAriaTheme(getCookie("ariatheme"));
|
|
|
|
const toggleSwitch = document.querySelector(
|
|
'.theme-switch input[type="checkbox"]'
|
|
);
|
|
if (toggleSwitch) {
|
|
toggleSwitch.addEventListener("change", switchTheme, false);
|
|
}
|
|
|
|
let currentThemeIsDark = getCookie("theme");
|
|
if (currentThemeIsDark === "false" && window.matchMedia) {
|
|
currentThemeIsDark = window.matchMedia("(prefers-color-scheme: dark)")
|
|
.matches
|
|
? "dark"
|
|
: "light";
|
|
}
|
|
switchTheme({ target: { checked: currentThemeIsDark === "dark" } });
|
|
if (toggleSwitch) {
|
|
toggleSwitch.checked = currentThemeIsDark === "dark";
|
|
}
|
|
});
|