From e01f01337c615a448b192281abc26365fe21c05d Mon Sep 17 00:00:00 2001 From: dbroqua Date: Fri, 28 Oct 2022 22:56:04 +0200 Subject: [PATCH] Lint --- .eslintrc.js | 73 ++++--- javascripts/ajouter-un-album.js | 192 +++++++++--------- javascripts/collection.js | 96 +++++---- javascripts/conctact.js | 39 ++-- javascripts/main.js | 108 +++++----- javascripts/mon-compte/index.js | 19 +- .../mon-compte/ma-collection/details.js | 146 +++++++------ .../mon-compte/ma-collection/exporter.js | 16 +- javascripts/mon-compte/ma-collection/index.js | 129 +++++++----- .../mon-compte/ma-collection/details.ejs | 2 +- 10 files changed, 450 insertions(+), 370 deletions(-) diff --git a/.eslintrc.js b/.eslintrc.js index 143bf10..1f95ab5 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,36 +1,43 @@ module.exports = { - env: { - browser: true, - es2020: true, - node: true, - jquery: true, - }, - extends: ['airbnb-base', 'prettier'], - plugins: ['prettier'], - parserOptions: { - ecmaVersion: 11, - sourceType: 'module', - }, - rules: { - 'prettier/prettier': ['error'], - 'no-underscore-dangle': [ - 'error', - { - allow: ['_id', 'artists_sort', 'type_'], - }, - ], - 'camelcase': [ - 'error', - { - allow: ['artists_sort',] - }, - ], - }, - ignorePatterns: ['public/libs/**/*.js', 'public/js/main.js', 'dist/**'], - overrides: [ - { - files: ['**/*.js'], - excludedFiles: '*.ejs', + env: { + browser: true, + es2020: true, + node: true, + jquery: true, + }, + extends: ["airbnb-base", "prettier"], + plugins: ["prettier"], + parserOptions: { + ecmaVersion: 11, + sourceType: "module", + }, + rules: { + "prettier/prettier": ["error"], + "no-underscore-dangle": [ + "error", + { + allow: ["_id", "artists_sort", "type_"], + }, + ], + camelcase: [ + "error", + { + allow: ["artists_sort"], + }, + ], + }, + ignorePatterns: ["public/libs/**/*.js", "public/js/main.js", "dist/**"], + overrides: [ + { + files: ["**/*.js"], + excludedFiles: "*.ejs", + }, + ], + globals: { + Vue: true, + axios: true, + showToastr: true, + protocol: true, + host: true, }, - ], }; diff --git a/javascripts/ajouter-un-album.js b/javascripts/ajouter-un-album.js index d46d5d4..eb55697 100644 --- a/javascripts/ajouter-un-album.js +++ b/javascripts/ajouter-un-album.js @@ -1,109 +1,108 @@ Vue.createApp({ data() { return { - q: '', - year: '', - country: '', - format: '', + q: "", + year: "", + country: "", + format: "", loading: false, items: [], details: {}, modalIsVisible: false, formats: [ - 'Vinyl', - 'Acetate', - 'Flexi-disc', - 'Lathe Cut', - 'Mighty Tiny', - 'Shellac', - 'Sopic', - 'Pathé Disc', - 'Edison Disc', - 'Cylinder', - 'CD', - 'CDr', - 'CDV', - 'DVD', - 'DVDr', - 'HD DVD', - 'HD DVD-R', - 'Blu-ray', - 'Blu-ray-R', - 'Ultra HD Blu-ray', - 'SACD', - '4-Track Cartridge', - '8-Track Cartridge', - 'Cassette', - 'DC-International', - 'Elcaset', - 'PlayTape', - 'RCA Tape Cartridge', - 'DAT', - 'DCC', - 'Microcassette', - 'NT Cassette', - 'Pocket Rocker', - 'Revere Magnetic Stereo Tape Ca', - 'Tefifon', - 'Reel-To-Reel', - 'Sabamobil', - 'Betacam', - 'Betacam SP', - 'Betamax', - 'Cartrivision', - 'MiniDV', - 'Super VHS', - 'U-matic', - 'VHS', - 'Video 2000', - 'Video8', - 'Film Reel', - 'HitClips', - 'Laserdisc', - 'SelectaVision', - 'VHD', - 'Wire Recording', - 'Minidisc', - 'MVD', - 'UMD', - 'Floppy Disk', - 'File', - 'Memory Stick', - 'Hybrid', - 'All Media', - 'Box Set', - ] - } + "Vinyl", + "Acetate", + "Flexi-disc", + "Lathe Cut", + "Mighty Tiny", + "Shellac", + "Sopic", + "Pathé Disc", + "Edison Disc", + "Cylinder", + "CD", + "CDr", + "CDV", + "DVD", + "DVDr", + "HD DVD", + "HD DVD-R", + "Blu-ray", + "Blu-ray-R", + "Ultra HD Blu-ray", + "SACD", + "4-Track Cartridge", + "8-Track Cartridge", + "Cassette", + "DC-International", + "Elcaset", + "PlayTape", + "RCA Tape Cartridge", + "DAT", + "DCC", + "Microcassette", + "NT Cassette", + "Pocket Rocker", + "Revere Magnetic Stereo Tape Ca", + "Tefifon", + "Reel-To-Reel", + "Sabamobil", + "Betacam", + "Betacam SP", + "Betamax", + "Cartrivision", + "MiniDV", + "Super VHS", + "U-matic", + "VHS", + "Video 2000", + "Video8", + "Film Reel", + "HitClips", + "Laserdisc", + "SelectaVision", + "VHD", + "Wire Recording", + "Minidisc", + "MVD", + "UMD", + "Floppy Disk", + "File", + "Memory Stick", + "Hybrid", + "All Media", + "Box Set", + ], + }; }, methods: { search(event) { event.preventDefault(); - if ( this.loading ) { + if (this.loading) { return false; } this.loading = true; let url = `/api/v1/search?q=${this.q}`; - if ( this.year ) { + if (this.year) { url += `&year=${this.year}`; } - if ( this.country ) { + if (this.country) { url += `&country=${this.country}`; } - if ( this.format ) { + if (this.format) { url += `&format=${this.format}`; } - axios.get(url) - .then( response => { - const { - results, - } = response.data; - let items = []; + return axios + .get(url) + .then((response) => { + const { results } = response.data; + const items = []; - for (let i = 0 ; i < results.length ; i += 1 ) { + for (let i = 0; i < results.length; i += 1) { const { id, title, @@ -129,7 +128,10 @@ Vue.createApp({ this.items = items; }) .catch((err) => { - showToastr(err.response?.data?.message || "Aucun résultat trouvé :/"); + showToastr( + err.response?.data?.message || + "Aucun résultat trouvé :/" + ); }) .finally(() => { this.loading = false; @@ -139,33 +141,39 @@ Vue.createApp({ this.modalIsVisible = !this.modalIsVisible; }, loadDetails(discogsId) { - axios.get(`/api/v1/search/${discogsId}`) - .then( response => { - const { - data, - } = response; + axios + .get(`/api/v1/search/${discogsId}`) + .then((response) => { + const { data } = response; this.details = data; this.toggleModal(); }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de charger les détails de cet album"); + showToastr( + err.response?.data?.message || + "Impossible de charger les détails de cet album" + ); }) .finally(() => { this.loading = false; }); }, add() { - axios.post('/api/v1/albums', this.details) + axios + .post("/api/v1/albums", this.details) .then(() => { - window.location.href = '/ma-collection'; + window.location.href = "/ma-collection"; }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible d'ajouter cet album pour le moment…"); + showToastr( + err.response?.data?.message || + "Impossible d'ajouter cet album pour le moment…" + ); }); }, orderedItems(items) { return items.sort(); - } - } -}).mount('#ajouter-album'); \ No newline at end of file + }, + }, +}).mount("#ajouter-album"); diff --git a/javascripts/collection.js b/javascripts/collection.js index c3b3561..beed2c6 100644 --- a/javascripts/collection.js +++ b/javascripts/collection.js @@ -1,4 +1,4 @@ -if ( typeof userId !== 'undefined' ) { +if (typeof userId !== "undefined") { Vue.createApp({ data() { return { @@ -9,16 +9,17 @@ if ( typeof userId !== 'undefined' ) { page: 1, totalPages: 1, limit: 16, - artist: '', - format: '', - year: '', - genre: '', - style: '', - sortOrder: 'artists_sort-asc', - sort: 'artists_sort', - order: 'asc', + artist: "", + format: "", + year: "", + genre: "", + style: "", + sortOrder: "artists_sort-asc", + sort: "artists_sort", + order: "asc", + // eslint-disable-next-line no-undef userId, - } + }; }, created() { this.fetch(); @@ -32,42 +33,49 @@ if ( typeof userId !== 'undefined' ) { const urlParams = new URLSearchParams(queryString); const entries = urlParams.entries(); - for(const entry of entries) { - switch(entry[0]) { - case 'artists_sort': - this.artist = entry[1]; + // eslint-disable-next-line no-restricted-syntax + for (const entry of entries) { + const [key, value] = entry; + switch (key) { + case "artists_sort": + this.artist = value; break; default: - this[entry[0]] = entry[1]; + this[key] = value; } } let url = `/api/v1/albums?userId=${this.userId}&page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; - if ( this.artist ) { - url += `&artists_sort=${this.artist.replace('&', '%26')}`; + if (this.artist) { + url += `&artists_sort=${this.artist.replace("&", "%26")}`; } - if ( this.format ) { - url += `&format=${this.format.replace('&', '%26')}`; + if (this.format) { + url += `&format=${this.format.replace("&", "%26")}`; } - if ( this.year ) { + if (this.year) { url += `&year=${this.year}`; } - if ( this.genre ) { - url += `&genre=${this.genre.replace('&', '%26')}`; + if (this.genre) { + url += `&genre=${this.genre.replace("&", "%26")}`; } - if ( this.style ) { - url += `&style=${this.style.replace('&', '%26')}`; + if (this.style) { + url += `&style=${this.style.replace("&", "%26")}`; } - axios.get(url) - .then( response => { + axios + .get(url) + .then((response) => { this.items = response.data.rows; this.total = response.data.count || 0; - this.totalPages = parseInt(response.data.count / this.limit) + (response.data.count % this.limit > 0 ? 1 : 0); - + this.totalPages = + parseInt(response.data.count / this.limit, 10) + + (response.data.count % this.limit > 0 ? 1 : 0); }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de charger cette collection"); + showToastr( + err.response?.data?.message || + "Impossible de charger cette collection" + ); }) .finally(() => { this.loading = false; @@ -75,23 +83,23 @@ if ( typeof userId !== 'undefined' ) { }, changeUrl() { let url = `?page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; - if ( this.artist ) { - url += `&artists_sort=${this.artist.replace('&', '%26')}`; + if (this.artist) { + url += `&artists_sort=${this.artist.replace("&", "%26")}`; } - if ( this.format ) { - url += `&format=${this.format.replace('&', '%26')}`; + if (this.format) { + url += `&format=${this.format.replace("&", "%26")}`; } - if ( this.year ) { + if (this.year) { url += `&year=${this.year}`; } - if ( this.genre ) { - url += `&genre=${this.genre.replace('&', '%26')}`; + if (this.genre) { + url += `&genre=${this.genre.replace("&", "%26")}`; } - if ( this.style ) { - url += `&style=${this.style.replace('&', '%26')}`; + if (this.style) { + url += `&style=${this.style.replace("&", "%26")}`; } - location.href = url; + window.location.href = url; }, next(event) { event.preventDefault(); @@ -113,7 +121,7 @@ if ( typeof userId !== 'undefined' ) { this.changeUrl(); }, changeSort() { - const [sort,order] = this.sortOrder.split('-'); + const [sort, order] = this.sortOrder.split("-"); this.sort = sort; this.order = order; this.page = 1; @@ -127,7 +135,7 @@ if ( typeof userId !== 'undefined' ) { }, showMoreFilters() { this.moreFilters = !this.moreFilters; - } - } - }).mount('#collection-publique'); -} \ No newline at end of file + }, + }, + }).mount("#collection-publique"); +} diff --git a/javascripts/conctact.js b/javascripts/conctact.js index 51ed1cb..1fbde34 100644 --- a/javascripts/conctact.js +++ b/javascripts/conctact.js @@ -1,42 +1,43 @@ -if ( typeof contactMethod !== 'undefined' && contactMethod === 'smtp' ) { +// eslint-disable-next-line no-undef +if (typeof contactMethod !== "undefined" && contactMethod === "smtp") { Vue.createApp({ data() { return { - email: '', - name: '', - message: '', - captcha: '', + email: "", + name: "", + message: "", + captcha: "", loading: false, - } + }; }, methods: { send(event) { event.preventDefault(); - if ( this.loading ) { + if (this.loading) { return false; } this.loading = true; - const { - email, - message, - name, - captcha, - } = this; + const { email, message, name, captcha } = this; - axios.post('/api/v1/contact', {email, name, message, captcha}) - .then( () => { + return axios + .post("/api/v1/contact", { email, name, message, captcha }) + .then(() => { showToastr("Message correctement envoyé", true); }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible d'envoyer votre message", false); + showToastr( + err.response?.data?.message || + "Impossible d'envoyer votre message", + false + ); }) .finally(() => { this.loading = false; - }) + }); }, }, - }).mount('#contact'); -} \ No newline at end of file + }).mount("#contact"); +} diff --git a/javascripts/main.js b/javascripts/main.js index 0b0592e..388ab22 100644 --- a/javascripts/main.js +++ b/javascripts/main.js @@ -1,30 +1,30 @@ -const { - protocol, - host -} = window.location; +/* 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) { - let x = document.getElementById("toastr"); - if ( message ) { + const x = document.getElementById("toastr"); + if (message) { x.getElementsByTagName("SPAN")[0].innerHTML = message; } x.className = `${x.className} show`.replace("sucess", ""); - if ( success ) { + if (success) { x.className = `${x.className} success`; } - setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); -}; + setTimeout(() => { + x.className = x.className.replace("show", ""); + }, 3000); +} /** * Fonction permettant de masquer le toastr */ function hideToastr() { - let x = document.getElementById("toastr"); + const x = document.getElementById("toastr"); x.className = x.className.replace("show", ""); x.getElementsByTagName("SPAN")[0].innerHTML = ""; @@ -37,17 +37,17 @@ function hideToastr() { * * @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) { +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); + while (c.charAt(0) === " ") { + c = c.substring(1); } - if (c.indexOf(name) == 0) { - return c.substring(name.length, c.length); + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); } } return defaultValue; @@ -61,9 +61,9 @@ function getCookie(cname, defaultValue = 'false') { */ 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=/"; + d.setTime(d.getTime() + exdays * 24 * 60 * 60 * 1000); + const expires = `expires=${d.toUTCString()}`; + document.cookie = `${cname}=${cvalue};${expires};path=/`; } /** @@ -71,9 +71,9 @@ function setCookie(cname, cvalue, exdays = 30) { * @param {String} value */ function setAriaTheme(value) { - let body = document.body; - if ( value === 'true' ) { - let classesString = body.className || ""; + const { body } = document; + if (value === "true") { + const classesString = body.className || ""; if (classesString.indexOf("is-accessible") === -1) { body.classList.add("is-accessible"); } @@ -86,11 +86,11 @@ function setAriaTheme(value) { * Fonction de (dé)charger le thème accessible */ function switchAriaTheme() { - let body = document.body; + const { body } = document; body.classList.toggle("is-accessible"); - setCookie('ariatheme', body.classList.contains("is-accessible")); + setCookie("ariatheme", body.classList.contains("is-accessible")); } /** @@ -98,46 +98,54 @@ function switchAriaTheme() { * @param {Object} e */ function switchTheme(e) { - const theme = e.target.checked ? 'dark' : 'light'; + const theme = e.target.checked ? "dark" : "light"; - document.documentElement.setAttribute('data-theme', theme); - setCookie('theme', theme); + 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); +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; + $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'); + el.classList.toggle("is-active"); + $target.classList.toggle("is-active"); }); }); } const switchAriaThemeBtn = document.querySelector("#switchAriaTheme"); - if ( switchAriaThemeBtn ) { + if (switchAriaThemeBtn) { switchAriaThemeBtn.addEventListener("click", switchAriaTheme); } - setAriaTheme(getCookie('ariatheme')); + setAriaTheme(getCookie("ariatheme")); - const toggleSwitch = document.querySelector('.theme-switch input[type="checkbox"]'); - if ( toggleSwitch ) { - toggleSwitch.addEventListener('change', switchTheme, false); + 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'; + 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'; + switchTheme({ target: { checked: currentThemeIsDark === "dark" } }); + if (toggleSwitch) { + toggleSwitch.checked = currentThemeIsDark === "dark"; } -}); \ No newline at end of file +}); diff --git a/javascripts/mon-compte/index.js b/javascripts/mon-compte/index.js index ccc1d02..ed40f03 100644 --- a/javascripts/mon-compte/index.js +++ b/javascripts/mon-compte/index.js @@ -1,16 +1,19 @@ -if ( typeof email !== 'undefined' && typeof username !== 'undefined' ) { +if (typeof email !== "undefined" && typeof username !== "undefined") { Vue.createApp({ data() { return { + // eslint-disable-next-line no-undef email, + // eslint-disable-next-line no-undef username, - oldPassword: '', - password: '', - passwordConfirm: '', + oldPassword: "", + password: "", + passwordConfirm: "", loading: false, - } + }; }, methods: { + // eslint-disable-next-line no-unused-vars async updateProfil(event) { // try { // if ( this.password !== this.passwordConfirm ) { @@ -21,6 +24,6 @@ if ( typeof email !== 'undefined' && typeof username !== 'undefined' ) { // showToastr(err); // } }, - } - }).mount('#mon-compte'); -} \ No newline at end of file + }, + }).mount("#mon-compte"); +} diff --git a/javascripts/mon-compte/ma-collection/details.js b/javascripts/mon-compte/ma-collection/details.js index 3f63290..fe8d079 100644 --- a/javascripts/mon-compte/ma-collection/details.js +++ b/javascripts/mon-compte/ma-collection/details.js @@ -1,17 +1,18 @@ -if ( typeof item !== 'undefined' ) { +if (typeof item !== "undefined") { Vue.createApp({ data() { return { + // eslint-disable-next-line no-undef item, tracklist: [], identifiers: [], modalIsVisible: false, - identifiersMode: 'preview', + identifiersMode: "preview", identifiersPreviewLength: 16, preview: null, index: null, showModalDelete: false, - } + }; }, created() { this.setTrackList(); @@ -20,65 +21,65 @@ if ( typeof item !== 'undefined' ) { window.addEventListener("keydown", this.changeImage); }, destroyed() { - window.removeEventListener('keydown', this.changeImage); + window.removeEventListener("keydown", this.changeImage); }, methods: { setIdentifiers() { this.identifiers = []; - let max = this.identifiersMode == 'preview' && this.item.identifiers.length > this.identifiersPreviewLength ? this.identifiersPreviewLength : this.item.identifiers.length; + const max = + this.identifiersMode === "preview" && + this.item.identifiers.length > this.identifiersPreviewLength + ? this.identifiersPreviewLength + : this.item.identifiers.length; - for ( let i = 0 ; i < max ; i += 1 ) { + for (let i = 0; i < max; i += 1) { this.identifiers.push(this.item.identifiers[i]); } }, setTrackList() { let subTrack = { - type: null, - title: null, - tracks: [], - }; - for (let i = 0 ; i < this.item.tracklist.length ; i += 1 ) { - const { - type_, - title, - position, - duration, - extraartists, - } = this.item.tracklist[i]; + type: null, + title: null, + tracks: [], + }; + for (let i = 0; i < this.item.tracklist.length; i += 1) { + const { type_, title, position, duration, extraartists } = + this.item.tracklist[i]; - if ( type_ === 'heading' ) { - if ( subTrack.type ) { - this.tracklist.push(subTrack); - subTrack = { - type: null, - title: null, - tracks: [], - }; + if (type_ === "heading") { + if (subTrack.type) { + this.tracklist.push(subTrack); + subTrack = { + type: null, + title: null, + tracks: [], + }; + } + + subTrack.type = type_; + subTrack.title = title; + } else { + subTrack.tracks.push({ + title, + position, + duration, + extraartists, + }); } - - subTrack.type = type_; - subTrack.title = title; - } else { - subTrack.tracks.push({ - title, - position, - duration, - extraartists - }); } - } - this.tracklist.push(subTrack); + this.tracklist.push(subTrack); }, setImage() { this.preview = this.item.images[this.index].uri; }, showGallery(event) { - const item = event.target.tagName === 'IMG' ? event.target.parentElement : event.target; + const item = + event.target.tagName === "IMG" + ? event.target.parentElement + : event.target; - const { - index, - } = item.dataset; + const { index } = item.dataset; this.index = Number(index); this.modalIsVisible = true; @@ -89,48 +90,63 @@ if ( typeof item !== 'undefined' ) { this.modalIsVisible = !this.modalIsVisible; }, previous() { - this.index = this.index > 0 ? this.index - 1 : this.item.images.length -1; + this.index = + this.index > 0 + ? this.index - 1 + : this.item.images.length - 1; this.setImage(); }, next() { - this.index = (this.index +1) === this.item.images.length ? 0 : this.index + 1; + this.index = + this.index + 1 === this.item.images.length + ? 0 + : this.index + 1; this.setImage(); }, changeImage(event) { const direction = event.code; - if ( this.modalIsVisible && ['ArrowRight', 'ArrowLeft', 'Escape'].indexOf(direction) !== -1 ) { + if ( + this.modalIsVisible && + ["ArrowRight", "ArrowLeft", "Escape"].indexOf(direction) !== + -1 + ) { switch (direction) { - case 'ArrowRight': + case "ArrowRight": return this.next(); - case 'ArrowLeft': + case "ArrowLeft": return this.previous(); default: this.modalIsVisible = false; return true; } } + + return true; }, showAllIdentifiers() { - this.identifiersMode = 'all'; + this.identifiersMode = "all"; this.setIdentifiers(); }, showLessIdentifiers() { - this.identifiersMode = 'preview'; + this.identifiersMode = "preview"; this.setIdentifiers(); - document.querySelector('#identifiers').scrollIntoView({ behavior: 'smooth' }); + document + .querySelector("#identifiers") + .scrollIntoView({ behavior: "smooth" }); }, showConfirmDelete() { - this.toggleModal(); + this.toggleModalDelete(); }, - toggleModal() { + toggleModalDelete() { this.showModalDelete = !this.showModalDelete; }, updateItem() { showToastr("Mise à jour en cours…", true); - axios.patch(`/api/v1/albums/${this.item._id}`) - .then( (res) => { + axios + .patch(`/api/v1/albums/${this.item._id}`) + .then((res) => { showToastr("Mise à jour réalisée avec succès", true); this.item = res.data; @@ -139,24 +155,32 @@ if ( typeof item !== 'undefined' ) { this.showLessIdentifiers(); }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de mettre à jour cet album", false); + showToastr( + err.response?.data?.message || + "Impossible de mettre à jour cet album", + false + ); }); }, deleteItem() { - axios.delete(`/api/v1/albums/${this.item._id}`) - .then( () => { + axios + .delete(`/api/v1/albums/${this.item._id}`) + .then(() => { window.location.href = "/ma-collection"; }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de supprimer cet album"); + showToastr( + err.response?.data?.message || + "Impossible de supprimer cet album" + ); }) .finally(() => { - this.toggleModal(); + this.toggleModalDelete(); }); }, goToArtist() { return ""; }, }, - }).mount('#ma-collection-details'); -} \ No newline at end of file + }).mount("#ma-collection-details"); +} diff --git a/javascripts/mon-compte/ma-collection/exporter.js b/javascripts/mon-compte/ma-collection/exporter.js index f5dcbcb..b391436 100644 --- a/javascripts/mon-compte/ma-collection/exporter.js +++ b/javascripts/mon-compte/ma-collection/exporter.js @@ -1,18 +1,16 @@ Vue.createApp({ data() { return { - format: 'xml', - } - }, - created() { - }, - destroyed() { + format: "xml", + }; }, + created() {}, + destroyed() {}, methods: { exportCollection(event) { event.preventDefault(); - window.open(`/api/v1/albums?exportFormat=${this.format}`, '_blank'); - } + window.open(`/api/v1/albums?exportFormat=${this.format}`, "_blank"); + }, }, -}).mount('#exporter'); \ No newline at end of file +}).mount("#exporter"); diff --git a/javascripts/mon-compte/ma-collection/index.js b/javascripts/mon-compte/ma-collection/index.js index 7e2bdf5..967e3f2 100644 --- a/javascripts/mon-compte/ma-collection/index.js +++ b/javascripts/mon-compte/ma-collection/index.js @@ -1,4 +1,4 @@ -if ( typeof isPublicCollection !== 'undefined' ) { +if (typeof isPublicCollection !== "undefined") { Vue.createApp({ data() { return { @@ -9,20 +9,21 @@ if ( typeof isPublicCollection !== 'undefined' ) { page: 1, totalPages: 1, limit: 16, - artist: '', - format: '', - year: '', - genre: '', - style: '', - sortOrder: 'artists_sort-asc', - sort: 'artists_sort', - order: 'asc', + artist: "", + format: "", + year: "", + genre: "", + style: "", + sortOrder: "artists_sort-asc", + sort: "artists_sort", + order: "asc", itemId: null, showModalDelete: false, showModalShare: false, shareLink: `${protocol}//${host}/collection/<%= user._id %>`, + // eslint-disable-next-line no-undef isPublicCollection, - } + }; }, created() { this.fetch(); @@ -36,41 +37,49 @@ if ( typeof isPublicCollection !== 'undefined' ) { const urlParams = new URLSearchParams(queryString); const entries = urlParams.entries(); - for(const entry of entries) { - switch(entry[0]) { - case 'artists_sort': - this.artist = entry[1]; + // eslint-disable-next-line no-restricted-syntax + for (const entry of entries) { + const [key, value] = entry; + switch (key) { + case "artists_sort": + this.artist = value; break; default: - this[entry[0]] = entry[1]; + this[key] = value; } } let url = `/api/v1/albums?page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; - if ( this.artist ) { - url += `&artists_sort=${this.artist.replace('&', '%26')}`; + if (this.artist) { + url += `&artists_sort=${this.artist.replace("&", "%26")}`; } - if ( this.format ) { - url += `&format=${this.format.replace('&', '%26')}`; + if (this.format) { + url += `&format=${this.format.replace("&", "%26")}`; } - if ( this.year ) { + if (this.year) { url += `&year=${this.year}`; } - if ( this.genre ) { - url += `&genre=${this.genre.replace('&', '%26')}`; + if (this.genre) { + url += `&genre=${this.genre.replace("&", "%26")}`; } - if ( this.style ) { - url += `&style=${this.style.replace('&', '%26')}`; + if (this.style) { + url += `&style=${this.style.replace("&", "%26")}`; } - axios.get(url) - .then( response => { + axios + .get(url) + .then((response) => { this.items = response.data.rows; this.total = response.data.count || 0; - this.totalPages = parseInt(response.data.count / this.limit) + (response.data.count % this.limit > 0 ? 1 : 0); + this.totalPages = + parseInt(response.data.count / this.limit, 10) + + (response.data.count % this.limit > 0 ? 1 : 0); }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de charger votre collection"); + showToastr( + err.response?.data?.message || + "Impossible de charger votre collection" + ); }) .finally(() => { this.loading = false; @@ -78,23 +87,23 @@ if ( typeof isPublicCollection !== 'undefined' ) { }, changeUrl() { let url = `?page=${this.page}&limit=${this.limit}&sort=${this.sort}&order=${this.order}`; - if ( this.artist ) { - url += `&artists_sort=${this.artist.replace('&', '%26')}`; + if (this.artist) { + url += `&artists_sort=${this.artist.replace("&", "%26")}`; } - if ( this.format ) { - url += `&format=${this.format.replace('&', '%26')}`; + if (this.format) { + url += `&format=${this.format.replace("&", "%26")}`; } - if ( this.year ) { + if (this.year) { url += `&year=${this.year}`; } - if ( this.genre ) { - url += `&genre=${this.genre.replace('&', '%26')}`; + if (this.genre) { + url += `&genre=${this.genre.replace("&", "%26")}`; } - if ( this.style ) { - url += `&style=${this.style.replace('&', '%26')}`; + if (this.style) { + url += `&style=${this.style.replace("&", "%26")}`; } - location.href = url; + window.location.href = url; }, next(event) { event.preventDefault(); @@ -116,7 +125,7 @@ if ( typeof isPublicCollection !== 'undefined' ) { this.changeUrl(); }, changeSort() { - const [sort,order] = this.sortOrder.split('-'); + const [sort, order] = this.sortOrder.split("-"); this.sort = sort; this.order = order; this.page = 1; @@ -142,37 +151,51 @@ if ( typeof isPublicCollection !== 'undefined' ) { this.toggleModal(); }, deleteItem() { - axios.delete(`/api/v1/albums/${this.itemId}`) - .then( () => { + axios + .delete(`/api/v1/albums/${this.itemId}`) + .then(() => { this.fetch(); }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de supprimer cet album"); + showToastr( + err.response?.data?.message || + "Impossible de supprimer cet album" + ); }) .finally(() => { this.toggleModal(); }); }, shareCollection() { - axios.patch(`/api/v1/me`, { - isPublicCollection: !this.isPublicCollection, - }) - .then( (res) => { + axios + .patch(`/api/v1/me`, { + isPublicCollection: !this.isPublicCollection, + }) + .then((res) => { this.isPublicCollection = res.data.isPublicCollection; - if ( this.isPublicCollection ) { - showToastr("Votre collection est désormais publique", true); + if (this.isPublicCollection) { + showToastr( + "Votre collection est désormais publique", + true + ); } else { - showToastr("Votre collection n'est plus partagée", true); + showToastr( + "Votre collection n'est plus partagée", + true + ); } }) .catch((err) => { - showToastr(err.response?.data?.message || "Impossible de supprimer cet album"); + showToastr( + err.response?.data?.message || + "Impossible de supprimer cet album" + ); }) .finally(() => { this.toggleModalShare(); }); }, - } - }).mount('#ma-collection'); -} \ No newline at end of file + }, + }).mount("#ma-collection"); +} diff --git a/views/pages/mon-compte/ma-collection/details.ejs b/views/pages/mon-compte/ma-collection/details.ejs index e8615b4..475ee79 100644 --- a/views/pages/mon-compte/ma-collection/details.ejs +++ b/views/pages/mon-compte/ma-collection/details.ejs @@ -169,7 +169,7 @@