replaced 'artistView', 'albumView', 'playlistView' and 'spotifyPlaylistView' with an unique function that is binded properly; replaced a lot of declarations and property chains with destructuring synthax

This commit is contained in:
Roberto Tonino
2020-05-23 00:15:29 +02:00
parent 87a668ae91
commit 87e759a8bf
17 changed files with 172 additions and 42313 deletions

View File

@@ -19,7 +19,8 @@ function startApp() {
Search.linkListeners()
TrackPreview.init()
}
function initClient(){
function initClient() {
window.clientMode = true
document.querySelector(`#open_downloads_folder`).classList.remove('hide')
}

View File

@@ -3,7 +3,7 @@ import Vue from 'vue'
import { socket } from '../socket.js'
import Downloads from '../downloads.js'
import QualityModal from '../quality-modal.js'
import { albumView } from '../tabs.js'
import { showView } from '../tabs.js'
const ArtistTab = new Vue({
data() {
@@ -20,7 +20,7 @@ const ArtistTab = new Vue({
}
},
methods: {
albumView,
albumView: showView.bind(null, 'album'),
reset() {
this.title = 'Loading...'
this.image = ''
@@ -59,11 +59,13 @@ const ArtistTab = new Vue({
return g1.getTime() <= g2.getTime()
},
showArtist(data) {
this.title = data.name
this.image = data.picture_xl
const { name, picture_xl, id, releases } = data
this.title = name
this.image = picture_xl
this.type = 'Artist'
this.link = `https://www.deezer.com/artist/${data.id}`
this.currentTab = Object.keys(data.releases)[0]
this.link = `https://www.deezer.com/artist/${id}`
this.currentTab = Object.keys(releases)[0]
this.sortKey = 'release_date'
this.sortOrder = 'desc'
this.head = [
@@ -71,10 +73,10 @@ const ArtistTab = new Vue({
{ title: 'Release Date', sortKey: 'release_date' },
{ title: '', width: '32px' }
]
if (_.isEmpty(data.releases)) {
if (_.isEmpty(releases)) {
this.body = null
} else {
this.body = data.releases
this.body = releases
}
}
},

View File

@@ -1,6 +1,6 @@
import Vue from 'vue'
import { socket } from '../socket.js'
import { artistView, albumView } from '../tabs.js'
import { showView } from '../tabs.js'
import Downloads from '../downloads.js'
import QualityModal from '../quality-modal.js'
import TrackPreview from '../track-preview.js'
@@ -16,8 +16,8 @@ const ChartsTab = new Vue({
}
},
methods: {
artistView,
albumView,
artistView: showView.bind(null, 'artist'),
albumView: showView.bind(null, 'album'),
playPausePreview: TrackPreview.playPausePreview,
previewMouseEnter: TrackPreview.previewMouseEnter,
previewMouseLeave: TrackPreview.previewMouseLeave,
@@ -29,12 +29,21 @@ const ChartsTab = new Vue({
openQualityModal(e) {
QualityModal.open(e.currentTarget.dataset.link)
},
getTrackList(e) {
getTrackList(event) {
document.getElementById('content').scrollTo(0, 0)
this.country = e.currentTarget.dataset.title
const {
currentTarget: {
dataset: { title }
},
currentTarget: {
dataset: { id }
}
} = event
this.country = title
localStorage.setItem('chart', this.country)
this.id = e.currentTarget.dataset.id
this.id = id
socket.emit('getChartTracks', this.id)
},
setTracklist(data) {

View File

@@ -1,6 +1,6 @@
import Vue from 'vue'
import { socket } from '../socket.js'
import { playlistView, artistView, albumView, spotifyPlaylistView } from '../tabs.js'
import { showView } from '../tabs.js'
import Downloads from '../downloads.js'
import QualityModal from '../quality-modal.js'
import TrackPreview from '../track-preview.js'
@@ -17,10 +17,10 @@ const FavoritesTab = new Vue({
}
},
methods: {
playlistView,
artistView,
albumView,
spotifyPlaylistView,
artistView: showView.bind(null, 'artist'),
albumView: showView.bind(null, 'album'),
playlistView: showView.bind(null, 'playlist'),
spotifyPlaylistView: showView.bind(null, 'spotifyplaylist'),
playPausePreview: TrackPreview.playPausePreview,
previewMouseEnter: TrackPreview.previewMouseEnter,
previewMouseLeave: TrackPreview.previewMouseLeave,
@@ -48,10 +48,12 @@ const FavoritesTab = new Vue({
this.tracks = data
},
initFavorites(data) {
this.tracks = data.tracks
this.albums = data.albums
this.artists = data.artists
this.playlists = data.playlists
const { tracks, albums, artists, playlists } = data
this.tracks = tracks
this.albums = albums
this.artists = artists
this.playlists = playlists
document.getElementById('favorites_playlist_tab').click()
}
},

View File

@@ -1,6 +1,6 @@
import Vue from 'vue'
import { socket } from '../socket.js'
import { artistView, albumView, playlistView } from '../tabs.js'
import { showView } from '../tabs.js'
import Downloads from '../downloads.js'
import QualityModal from '../quality-modal.js'
import TrackPreview from '../track-preview.js'
@@ -14,10 +14,10 @@ const HomeTab = new Vue({
}
},
methods: {
artistView,
albumView,
playlistView,
openSettings(e) {
artistView: showView.bind(null, 'artist'),
albumView: showView.bind(null, 'album'),
playlistView: showView.bind(null, 'playlist'),
openSettings() {
document.getElementById('main_settings_tablink').click()
},
addToQueue(e) {

View File

@@ -1,6 +1,6 @@
import Vue from 'vue'
import { socket } from '../socket.js'
import { albumView, artistView } from '../tabs.js'
import { showView } from '../tabs.js'
import Utils from '../utils.js'
const LinkAnalyzerTab = new Vue({
@@ -16,8 +16,8 @@ const LinkAnalyzerTab = new Vue({
}
},
methods: {
albumView,
artistView,
artistView: showView.bind(null, 'artist'),
albumView: showView.bind(null, 'album'),
convertDuration: Utils.convertDuration,
reset() {
this.title = 'Loading...'
@@ -45,7 +45,6 @@ const LinkAnalyzerTab = new Vue({
this.data = data
},
showAlbum(data) {
console.log(data)
this.title = data.title
this.image = data.cover_xl
this.type = 'album'

View File

@@ -1,6 +1,6 @@
import Vue from 'vue'
import { socket } from '../socket.js'
import { artistView, albumView, playlistView } from '../tabs.js'
import { showView } from '../tabs.js'
import Downloads from '../downloads.js'
import QualityModal from '../quality-modal.js'
import TrackPreview from '../track-preview.js'
@@ -52,9 +52,9 @@ const MainSearch = new Vue({
}
},
methods: {
artistView,
albumView,
playlistView,
artistView: showView.bind(null, 'artist'),
albumView: showView.bind(null, 'album'),
playlistView: showView.bind(null, 'playlist'),
playPausePreview: TrackPreview.playPausePreview,
previewMouseEnter: TrackPreview.previewMouseEnter,
previewMouseLeave: TrackPreview.previewMouseLeave,
@@ -90,7 +90,6 @@ const MainSearch = new Vue({
numberWithDots: Utils.numberWithDots,
convertDuration: Utils.convertDuration,
search(type) {
console.log('searcho')
socket.emit('search', {
term: this.results.query,
type: type,

View File

@@ -1,7 +1,7 @@
import _ from 'lodash'
import Vue from 'vue'
import { socket } from '../socket.js'
import { albumView, artistView } from '../tabs.js'
import { showView } from '../tabs.js'
import Downloads from '../downloads.js'
import QualityModal from '../quality-modal.js'
import TrackPreview from '../track-preview.js'
@@ -20,8 +20,8 @@ const TracklistTab = new Vue({
body: []
}),
methods: {
artistView,
albumView,
artistView: showView.bind(null, 'artist'),
albumView: showView.bind(null, 'album'),
playPausePreview: TrackPreview.playPausePreview,
reset() {
this.title = 'Loading...'

View File

@@ -48,10 +48,11 @@ function linkListeners() {
socket.emit('cancelAllDownloads')
})
document.getElementById('open_downloads_folder').addEventListener('click', ()=>{
document.getElementById('open_downloads_folder').addEventListener('click', () => {
if (window.clientMode) socket.emit('openDownloadsFolder')
})
// Downloads tab drag handling
dragHandlerEl.addEventListener('mousedown', event => {
event.preventDefault()
@@ -160,16 +161,20 @@ function addToQueue(queueItem, current = false) {
}
function initQueue(data) {
if (data.queueComplete.length) {
data.queueComplete.forEach(item => {
addToQueue(data.queueList[item])
const { queue, queueComplete, currentItem, queueList } = data
if (queueComplete.length) {
queueComplete.forEach(item => {
addToQueue(queueList[item])
})
}
if (data.currentItem) {
addToQueue(data['queueList'][data.currentItem], true)
if (currentItem) {
addToQueue(queueList[currentItem], true)
}
data.queue.forEach(item => {
addToQueue(data.queueList[item])
queue.forEach(item => {
addToQueue(queueList[item])
})
}
@@ -182,12 +187,14 @@ function startDownload(uuid) {
socket.on('startDownload', startDownload)
function handleListClick(event) {
if (!event.target.matches('.queue_icon[data-uuid]')) {
const { target } = event
if (!target.matches('.queue_icon[data-uuid]')) {
return
}
let icon = event.target.innerText
let uuid = $(event.target).data('uuid')
let icon = target.innerText
let uuid = $(target).data('uuid')
switch (icon) {
case 'remove':
@@ -198,8 +205,8 @@ function handleListClick(event) {
}
// Show/Hide Download Tab
function toggleDownloadTab(ev) {
ev.preventDefault()
function toggleDownloadTab(clickEvent) {
clickEvent.preventDefault()
setTabWidth()
@@ -283,29 +290,28 @@ function removedFinishedDownloads() {
socket.on('removedFinishedDownloads', removedFinishedDownloads)
function updateQueue(update) {
if (update.uuid && queue.indexOf(update.uuid) > -1) {
if (update.downloaded) {
queueList[update.uuid].downloaded++
$('#download_' + update.uuid + ' .queue_downloaded').text(
queueList[update.uuid].downloaded + queueList[update.uuid].failed
)
// downloaded and failed default to false?
const { uuid, downloaded, failed, progress } = update
if (uuid && queue.indexOf(uuid) > -1) {
if (downloaded) {
queueList[uuid].downloaded++
$('#download_' + uuid + ' .queue_downloaded').text(queueList[uuid].downloaded + queueList[uuid].failed)
}
if (update.failed) {
queueList[update.uuid].failed++
$('#download_' + update.uuid + ' .queue_downloaded').text(
queueList[update.uuid].downloaded + queueList[update.uuid].failed
)
if (queueList[update.uuid].failed == 1 && $('#download_' + update.uuid + ' .queue_failed').length == 0) {
$('#download_' + update.uuid + ' .download_info_status').append(
if (failed) {
queueList[uuid].failed++
$('#download_' + uuid + ' .queue_downloaded').text(queueList[uuid].downloaded + queueList[uuid].failed)
if (queueList[uuid].failed == 1 && $('#download_' + uuid + ' .queue_failed').length == 0) {
$('#download_' + uuid + ' .download_info_status').append(
`<span class="secondary-text inline-flex"><span class="download_slim_separator">(</span><span class="queue_failed">1</span> <i class="material-icons">error_outline</i><span class="download_slim_separator">)</span></span>`
)
} else {
$('#download_' + update.uuid + ' .queue_failed').text(queueList[update.uuid].failed)
$('#download_' + uuid + ' .queue_failed').text(queueList[uuid].failed)
}
}
if (update.progress) {
queueList[update.uuid].progress = update.progress
$('#bar_' + update.uuid).css('width', update.progress + '%')
if (progress) {
queueList[uuid].progress = progress
$('#bar_' + uuid).css('width', progress + '%')
}
}
}

View File

@@ -3,7 +3,8 @@ import Downloads from './downloads.js'
const QualityModal = {
// Defaults
open: false,
url: ''
url: '',
element: null
}
function init() {
@@ -24,13 +25,15 @@ function linkListeners() {
}
function handleClick(event) {
const { target } = event
QualityModal.element.classList.add('animated', 'fadeOut')
if (!event.target.matches('.quality-button')) {
if (!target.matches('.quality-button')) {
return
}
let bitrate = event.target.dataset.qualityValue
let bitrate = target.dataset.qualityValue
Downloads.sendAddToQueue(QualityModal.url, bitrate)
}

View File

@@ -45,7 +45,7 @@ function handleSearchBarKeyup(e) {
if (term !== MainSearch.results.query || main_selected == 'search_tab') {
document.getElementById('search_tab_content').style.display = 'none'
socket.emit('mainSearch', { term: term })
socket.emit('mainSearch', { term })
} else {
document.getElementById('search_tab_content').style.display = 'block'
document.getElementById('main_search_tablink').click()

View File

@@ -20,42 +20,32 @@ let currentStack = {}
// Exporting this function out of the default export
// because it's used in components that are needed
// in this file too
export function artistView(ev) {
let id = ev.currentTarget.dataset.id
ArtistTab.reset()
socket.emit('getTracklist', { type: 'artist', id: id })
showTab('artist', id)
}
export function showView(viewType, event) {
const {
currentTarget: {
dataset: { id }
}
} = event
// Exporting this function out of the default export
// because it's used in components that are needed
// in this file too
export function albumView(ev) {
let id = ev.currentTarget.dataset.id
TracklistTab.reset()
socket.emit('getTracklist', { type: 'album', id: id })
showTab('album', id)
}
switch (viewType) {
case 'artist':
ArtistTab.reset()
break
case 'album':
case 'playlist':
case 'spotifyplaylist':
TracklistTab.reset()
break
// Exporting this function out of the default export
// because it's used in components that are needed
// in this file too
export function playlistView(ev) {
let id = ev.currentTarget.dataset.id
TracklistTab.reset()
socket.emit('getTracklist', { type: 'playlist', id: id })
showTab('playlist', id)
}
default:
break
}
export function spotifyPlaylistView(ev) {
let id = ev.currentTarget.dataset.id
TracklistTab.reset()
socket.emit('getTracklist', { type: 'spotifyplaylist', id: id })
showTab('spotifyplaylist', id)
socket.emit('getTracklist', { type: viewType, id })
showTab(viewType, id)
}
function analyzeLink(link) {
console.log('Analyzing: ' + link)
LinkAnalyzerTab.reset()
socket.emit('analyzeLink', link)
}
@@ -80,8 +70,10 @@ function linkListeners() {
* @since 0.1.0
*/
function handleSidebarClick(event) {
const wantToChangeTab = event.target.matches('.main_tablinks') || event.target.parentElement.matches('.main_tablinks')
const wantToChangeTheme = event.target.matches('.theme_toggler')
const { target } = event
const wantToChangeTab = target.matches('.main_tablinks') || target.parentElement.matches('.main_tablinks')
const wantToChangeTheme = target.matches('.theme_toggler')
if (!(wantToChangeTab || wantToChangeTheme)) return
@@ -89,10 +81,10 @@ function handleSidebarClick(event) {
let targetID
if (wantToChangeTab) {
sidebarEl = event.target.matches('.main_tablinks') ? event.target : event.target.parentElement
sidebarEl = target.matches('.main_tablinks') ? target : target.parentElement
targetID = sidebarEl.id
} else {
sidebarEl = event.target
sidebarEl = target
targetID = 'theme_toggler'
}
@@ -122,10 +114,13 @@ function handleSidebarClick(event) {
document.querySelector('.theme_toggler--active').classList.remove('theme_toggler--active')
sidebarEl.classList.add('theme_toggler--active')
let themeColor = sidebarEl.dataset.themeVariant
document.documentElement.setAttribute('data-theme', themeColor)
const {
dataset: { themeVariant }
} = sidebarEl
localStorage.setItem('selectedTheme', themeColor)
document.documentElement.setAttribute('data-theme', themeVariant)
localStorage.setItem('selectedTheme', themeVariant)
document.querySelectorAll('*').forEach(el => {
el.style.transition = 'all 200ms ease-in-out'
@@ -147,23 +142,26 @@ function handleSidebarClick(event) {
}
function handleSearchTabClick(event) {
let targetID = event.target.id
const {
target,
target: { id }
} = event
switch (targetID) {
switch (id) {
case 'search_all_tab':
changeTab(event.target, 'search', 'main_search')
changeTab(target, 'search', 'main_search')
break
case 'search_track_tab':
changeTab(event.target, 'search', 'track_search')
changeTab(target, 'search', 'track_search')
break
case 'search_album_tab':
changeTab(event.target, 'search', 'album_search')
changeTab(target, 'search', 'album_search')
break
case 'search_artist_tab':
changeTab(event.target, 'search', 'artist_search')
changeTab(target, 'search', 'artist_search')
break
case 'search_playlist_tab':
changeTab(event.target, 'search', 'playlist_search')
changeTab(target, 'search', 'playlist_search')
break
default:
@@ -172,20 +170,23 @@ function handleSearchTabClick(event) {
}
function handleFavoritesTabClick(event) {
let targetID = event.target.id
const {
target,
target: { id }
} = event
switch (targetID) {
switch (id) {
case 'favorites_playlist_tab':
changeTab(event.target, 'favorites', 'playlist_favorites')
changeTab(target, 'favorites', 'playlist_favorites')
break
case 'favorites_album_tab':
changeTab(event.target, 'favorites', 'album_favorites')
changeTab(target, 'favorites', 'album_favorites')
break
case 'favorites_artist_tab':
changeTab(event.target, 'favorites', 'artist_favorites')
changeTab(target, 'favorites', 'artist_favorites')
break
case 'favorites_track_tab':
changeTab(event.target, 'favorites', 'track_favorites')
changeTab(target, 'favorites', 'track_favorites')
break
default:
@@ -242,7 +243,7 @@ function showTab(type, id, back = false) {
window.tab = type == 'artist' ? 'artist_tab' : 'tracklist_tab'
currentStack = { type: type, id: id }
currentStack = { type, id }
let tabcontent = document.getElementsByClassName('main_tabcontent')
for (let i = 0; i < tabcontent.length; i++) {
@@ -256,15 +257,18 @@ function backTab() {
if (windows_stack.length == 1) {
document.getElementById(`main_${main_selected}link`).click()
} else {
let tabObj = windows_stack.pop()
if (tabObj.type == 'artist') {
// Retrieving tab type and tab id
let { type, id } = windows_stack.pop()
if (type === 'artist') {
ArtistTab.reset()
} else {
TracklistTab.reset()
}
socket.emit('getTracklist', { type: tabObj.type, id: tabObj.id })
showTab(tabObj.type, tabObj.id, true)
socket.emit('getTracklist', { type, id })
showTab(type, id, true)
}
TrackPreview.stopStackedTabsPreview()
}
@@ -278,8 +282,6 @@ function init() {
export default {
init,
changeTab,
artistView,
albumView,
playlistView,
showView,
analyzeLink
}

View File

@@ -41,5 +41,7 @@ export const toast = function (msg, icon = null, dismiss = true, id = null) {
}
socket.on('toast', data => {
toast(data.msg, data.icon || null, data.dismiss !== undefined ? data.dismiss : true, data.id || null)
const { msg, icon, dismiss, id } = data
toast(msg, icon || null, dismiss !== undefined ? dismiss : true, id || null)
})

View File

@@ -55,8 +55,9 @@ function previewMouseEnter(e) {
$(e.currentTarget).css({ opacity: 1 })
}
function previewMouseLeave(e) {
let obj = e.currentTarget
function previewMouseLeave(event) {
const { currentTarget: obj } = event
if (($(obj).parent().attr('playing') && preview_stopped) || !$(obj).parent().attr('playing')) {
$(obj).css({ opacity: 0 }, 200)
}
@@ -65,7 +66,9 @@ function previewMouseLeave(e) {
// on click event
function playPausePreview(e) {
e.preventDefault()
let obj = e.currentTarget
const { currentTarget: obj } = event
var icon = obj.tagName == 'I' ? $(obj) : $(obj).children('i')
if ($(obj).attr('playing')) {
if (preview_track.paused) {