280 lines
11 KiB
Text
280 lines
11 KiB
Text
<!doctype html>
|
|
<html lang="fr" data-theme="light">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
|
|
<title><% if (page.title) { %><%= page.title %> <% } else { %> DarKou - My Music Library <% } %></title>
|
|
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
|
<link rel="manifest" href="/site.webmanifest">
|
|
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">
|
|
<meta name="msapplication-TileColor" content="#da532c">
|
|
<meta name="theme-color" content="#ffffff">
|
|
|
|
<link href="/css/main.css" rel="stylesheet" />
|
|
|
|
<script src="/libs/axios/axios.min.js"></script>
|
|
<script src="/libs/vue/vue.global.prod.js"></script>
|
|
|
|
<script>
|
|
/**
|
|
* Fonction permettant d'afficher un message dans un toastr
|
|
* @param {String} message
|
|
*/
|
|
function showToastr(message) {
|
|
let x = document.getElementById("toastr");
|
|
if ( message ) {
|
|
x.getElementsByTagName("SPAN")[0].innerHTML = message;
|
|
}
|
|
|
|
x.className = `${x.className} show`;
|
|
setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000);
|
|
};
|
|
|
|
/**
|
|
* Fonction permettant de masquer le toastr
|
|
*/
|
|
function hideToastr() {
|
|
let 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') {
|
|
let name = cname + "=";
|
|
let decodedCookie = decodeURIComponent(document.cookie);
|
|
let 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));
|
|
let expires = "expires="+ d.toUTCString();
|
|
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
|
|
}
|
|
|
|
/**
|
|
* Fonction de (dé)charger le thème accessible
|
|
* @param {String} value
|
|
*/
|
|
function setAriaTheme(value) {
|
|
let body = document.body;
|
|
if ( value === 'true' ) {
|
|
let 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() {
|
|
let body = document.body;
|
|
|
|
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.target;
|
|
const $target = document.getElementById(target);
|
|
|
|
el.classList.toggle('is-active');
|
|
$target.classList.toggle('is-active');
|
|
});
|
|
});
|
|
}
|
|
|
|
const switchAriaThemeBtn = document.querySelector("#switchAriaTheme");
|
|
switchAriaThemeBtn.addEventListener("click", switchAriaTheme);
|
|
setAriaTheme(getCookie('ariatheme'));
|
|
|
|
const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]');
|
|
toggleSwitch.addEventListener('change', switchTheme, false);
|
|
|
|
let currentThemeIsDark = getCookie('theme');
|
|
if ( currentThemeIsDark === 'false' && window.matchMedia ) {
|
|
currentThemeIsDark = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
|
|
}
|
|
console.log('currentThemeIsDark:', currentThemeIsDark);
|
|
switchTheme({target: {checked: currentThemeIsDark === 'dark'}});
|
|
toggleSwitch.checked = currentThemeIsDark === 'dark';
|
|
});
|
|
|
|
|
|
console.log('window.matchMedia:', window.matchMedia('(prefers-color-scheme: dark)').matches);
|
|
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<nav class="navbar" aria-label="Navigation principale">
|
|
<div class="navbar-brand">
|
|
<a class="navbar-item" href="/">
|
|
<img src="/img/logo.png" alt="Logo My Music Library">
|
|
<span>My Music Library</span>
|
|
</a>
|
|
|
|
<a role="button" class="navbar-burger" aria-label="Afficher le menu" aria-expanded="false" data-target="navbar">
|
|
<span aria-hidden="true"></span>
|
|
<span aria-hidden="true"></span>
|
|
<span aria-hidden="true"></span>
|
|
</a>
|
|
</div>
|
|
|
|
<div id="navbar" class="navbar-menu">
|
|
<% if ( user ) { %>
|
|
<div class="navbar-start">
|
|
<div class="navbar-item">
|
|
<div class="buttons">
|
|
<a class="button is-primary" href="/ajouter-un-album">
|
|
<i class="icon-plus"></i>
|
|
<span>
|
|
Ajouter un album
|
|
</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% } %>
|
|
|
|
<div class="navbar-end">
|
|
<a class="navbar-item" href="/nous-contacter">
|
|
Nous contacter
|
|
</a>
|
|
<% if ( user ) { %>
|
|
<div class="navbar-item has-dropdown">
|
|
<a class="navbar-link">
|
|
<i class="icon-user"></i>
|
|
<span>
|
|
<%= user.username %>
|
|
</span>
|
|
</a>
|
|
|
|
<div class="navbar-dropdown">
|
|
<a class="navbar-item" href="/ma-collection">
|
|
Ma collection
|
|
</a>
|
|
</div>
|
|
</div>
|
|
<% } %>
|
|
<div class="navbar-item apparence">
|
|
<div class="theme-switch-wrapper">
|
|
<label class="theme-switch" for="checkbox" aria-label="Passer du thème clair au thème sombre et inversement">
|
|
<input type="checkbox" id="checkbox" />
|
|
<div class="slider round"></div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="navbar-item">
|
|
<div class="buttons">
|
|
<button type="button" class="button is-primary" id="switchAriaTheme" aria-label="Renforcer la visibilité de ce site" title="Renforcer la visibilité de ce site">
|
|
<i class="icon-eye"></i>
|
|
</button>
|
|
<% if ( !user ) { %>
|
|
<a class="button is-primary" href="/connexion">
|
|
<strong>Connexion</strong>
|
|
</a>
|
|
<% } else { %>
|
|
<a class="button is-danger" href="/se-deconnecter">
|
|
Déconnexion
|
|
</a>
|
|
<% } %>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<div id="toastr">
|
|
<button class="delete" onclick="hideToastr()"></button>
|
|
<span></span>
|
|
</div>
|
|
|
|
<% if ( page.failureFlash || (error && error.length > 0 ) ) {%>
|
|
<div class="flash">
|
|
<% if ( page.failureFlash ) {%>
|
|
<div class="header">
|
|
Erreur
|
|
</div>
|
|
<div class="body">
|
|
<%= page.failureFlash %>
|
|
</div>
|
|
<% } %>
|
|
<%
|
|
if (error && error.length > 0) {
|
|
for( let i = 0 ; i < error.length ; i += 1 ) {
|
|
%>
|
|
<div class="header">
|
|
Erreur
|
|
</div>
|
|
<div class="body">
|
|
<%= error %>
|
|
</div>
|
|
<%
|
|
}
|
|
}
|
|
%>
|
|
</div>
|
|
<% } %>
|
|
|
|
<%- include(viewname) %>
|
|
|
|
<footer class="footer layout-hero">
|
|
<p>
|
|
<strong title="Merci Brunus ! 😜">My Music Library</strong> par <a href="https://www.darkou.fr" target="_blank" rel="noopener noreferrer">Damien Broqua <i class="icon-link"></i></a>.
|
|
Fait avec ❤️ à Bordeaux.
|
|
Le code source est sous licence <a href="https://www.gnu.org/licenses/gpl-3.0-standalone.html" target="_blank" rel="noopener noreferrer">GNU GPL-3.0-or-later <i class="icon-link"></i></a>.
|
|
</p>
|
|
</footer>
|
|
</body>
|
|
</html>
|