mirror of
https://github.com/owntone/owntone-server.git
synced 2024-12-26 07:05:57 -05:00
1 line
846 KiB
Plaintext
1 line
846 KiB
Plaintext
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/ContentWithHero.vue?4028","webpack:///./src/templates/ContentWithHero.vue?0763","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/App.vue?4cd3","webpack:///./src/components/NavbarTop.vue?de51","webpack:///./src/components/NavbarItemLink.vue?c45b","webpack:///./src/store/mutation_types.js","webpack:///src/components/NavbarItemLink.vue","webpack:///./src/components/NavbarItemLink.vue?7266","webpack:///./src/components/NavbarItemLink.vue","webpack:///./src/components/ModalDialog.vue?5ba1","webpack:///src/components/ModalDialog.vue","webpack:///./src/components/ModalDialog.vue?9194","webpack:///./src/components/ModalDialog.vue","webpack:///./src/store/index.js","webpack:///./src/webapi/index.js","webpack:///src/components/NavbarTop.vue","webpack:///./src/components/NavbarTop.vue?2942","webpack:///./src/components/NavbarTop.vue","webpack:///./src/components/NavbarBottom.vue?c3c1","webpack:///./src/audio.js","webpack:///./src/components/NavbarItemOutput.vue?7298","webpack:///src/components/NavbarItemOutput.vue","webpack:///./src/components/NavbarItemOutput.vue?f284","webpack:///./src/components/NavbarItemOutput.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?fc71","webpack:///src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?7730","webpack:///./src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonNext.vue?c7f9","webpack:///src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonNext.vue?fbd2","webpack:///./src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonPrevious.vue?cace","webpack:///src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonPrevious.vue?7ab3","webpack:///./src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonShuffle.vue?c725","webpack:///src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonShuffle.vue?f823","webpack:///./src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonConsume.vue?0dc5","webpack:///src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonConsume.vue?f19d","webpack:///./src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonRepeat.vue?7f58","webpack:///src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonRepeat.vue?51a7","webpack:///./src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonSeekBack.vue?f8f5","webpack:///src/components/PlayerButtonSeekBack.vue","webpack:///./src/components/PlayerButtonSeekBack.vue?de1a","webpack:///./src/components/PlayerButtonSeekBack.vue","webpack:///./src/components/PlayerButtonSeekForward.vue?f210","webpack:///src/components/PlayerButtonSeekForward.vue","webpack:///./src/components/PlayerButtonSeekForward.vue?1252","webpack:///./src/components/PlayerButtonSeekForward.vue","webpack:///src/components/NavbarBottom.vue","webpack:///./src/components/NavbarBottom.vue?5719","webpack:///./src/components/NavbarBottom.vue","webpack:///./src/components/Notifications.vue?cba3","webpack:///src/components/Notifications.vue","webpack:///./src/components/Notifications.vue?7a53","webpack:///./src/components/Notifications.vue","webpack:///./src/components/ModalDialogRemotePairing.vue?714a","webpack:///src/components/ModalDialogRemotePairing.vue","webpack:///./src/components/ModalDialogRemotePairing.vue?c5a3","webpack:///./src/components/ModalDialogRemotePairing.vue","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/pages/PageQueue.vue?f24e","webpack:///./src/templates/ContentWithHeading.vue?668c","webpack:///src/templates/ContentWithHeading.vue","webpack:///./src/templates/ContentWithHeading.vue?9dc6","webpack:///./src/templates/ContentWithHeading.vue","webpack:///./src/components/ListItemQueueItem.vue?a6e0","webpack:///src/components/ListItemQueueItem.vue","webpack:///./src/components/ListItemQueueItem.vue?ce06","webpack:///./src/components/ListItemQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?3afc","webpack:///src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?f77a","webpack:///./src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?add0","webpack:///src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?1d31","webpack:///./src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?43dc","webpack:///src/components/ModalDialogPlaylistSave.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?2442","webpack:///./src/components/ModalDialogPlaylistSave.vue","webpack:///src/pages/PageQueue.vue","webpack:///./src/pages/PageQueue.vue?adc0","webpack:///./src/pages/PageQueue.vue","webpack:///./src/pages/PageNowPlaying.vue?799b","webpack:///./src/components/CoverArtwork.vue?761c","webpack:///./src/lib/SVGRenderer.js","webpack:///src/components/CoverArtwork.vue","webpack:///./src/components/CoverArtwork.vue?5f40","webpack:///./src/components/CoverArtwork.vue","webpack:///src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageNowPlaying.vue?5a32","webpack:///./src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageBrowse.vue?1373","webpack:///./src/pages/mixin.js","webpack:///./src/components/TabsMusic.vue?40ea","webpack:///src/components/TabsMusic.vue","webpack:///./src/components/TabsMusic.vue?2d68","webpack:///./src/components/TabsMusic.vue","webpack:///./src/components/ListAlbums.vue?929c","webpack:///./src/components/ListItemAlbum.vue?dd10","webpack:///src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemAlbum.vue?b729","webpack:///./src/components/ListItemAlbum.vue","webpack:///./src/components/ModalDialogAlbum.vue?1c56","webpack:///src/components/ModalDialogAlbum.vue","webpack:///./src/components/ModalDialogAlbum.vue?f2cf","webpack:///./src/components/ModalDialogAlbum.vue","webpack:///./src/lib/Albums.js","webpack:///src/components/ListAlbums.vue","webpack:///./src/components/ListAlbums.vue?f117","webpack:///./src/components/ListAlbums.vue","webpack:///./src/components/ListTracks.vue?bff4","webpack:///./src/components/ListItemTrack.vue?2efe","webpack:///src/components/ListItemTrack.vue","webpack:///./src/components/ListItemTrack.vue?c143","webpack:///./src/components/ListItemTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?b7c4","webpack:///src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?b9e3","webpack:///./src/components/ModalDialogTrack.vue","webpack:///src/components/ListTracks.vue","webpack:///./src/components/ListTracks.vue?1a43","webpack:///./src/components/ListTracks.vue","webpack:///src/pages/PageBrowse.vue","webpack:///./src/pages/PageBrowse.vue?ac81","webpack:///./src/pages/PageBrowse.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?09db","webpack:///src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?11a8","webpack:///./src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?d88b","webpack:///src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?b76d","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageArtists.vue?6490","webpack:///./src/components/IndexButtonList.vue?6da6","webpack:///src/components/IndexButtonList.vue","webpack:///./src/components/IndexButtonList.vue?fb40","webpack:///./src/components/IndexButtonList.vue","webpack:///./src/components/ListArtists.vue?847f","webpack:///./src/components/ListItemArtist.vue?f16f","webpack:///src/components/ListItemArtist.vue","webpack:///./src/components/ListItemArtist.vue?e871","webpack:///./src/components/ListItemArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?53d4","webpack:///src/components/ModalDialogArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?3f0b","webpack:///./src/components/ModalDialogArtist.vue","webpack:///./src/lib/Artists.js","webpack:///src/components/ListArtists.vue","webpack:///./src/components/ListArtists.vue?f6f9","webpack:///./src/components/ListArtists.vue","webpack:///./src/components/DropdownMenu.vue?0bb4","webpack:///src/components/DropdownMenu.vue","webpack:///./src/components/DropdownMenu.vue?183a","webpack:///./src/components/DropdownMenu.vue","webpack:///src/pages/PageArtists.vue","webpack:///./src/pages/PageArtists.vue?06ce","webpack:///./src/pages/PageArtists.vue","webpack:///./src/pages/PageArtist.vue?e48c","webpack:///src/pages/PageArtist.vue","webpack:///./src/pages/PageArtist.vue?54da","webpack:///./src/pages/PageArtist.vue","webpack:///./src/pages/PageAlbums.vue?ef39","webpack:///src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbums.vue?dd41","webpack:///./src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbum.vue?18f1","webpack:///src/pages/PageAlbum.vue","webpack:///./src/pages/PageAlbum.vue?07be","webpack:///./src/pages/PageAlbum.vue","webpack:///./src/pages/PageGenres.vue?fa46","webpack:///./src/components/ListItemGenre.vue?6932","webpack:///src/components/ListItemGenre.vue","webpack:///./src/components/ListItemGenre.vue?50b2","webpack:///./src/components/ListItemGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?a9a8","webpack:///src/components/ModalDialogGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?0658","webpack:///./src/components/ModalDialogGenre.vue","webpack:///src/pages/PageGenres.vue","webpack:///./src/pages/PageGenres.vue?9722","webpack:///./src/pages/PageGenres.vue","webpack:///./src/pages/PageGenre.vue?acc7","webpack:///src/pages/PageGenre.vue","webpack:///./src/pages/PageGenre.vue?4090","webpack:///./src/pages/PageGenre.vue","webpack:///./src/pages/PageGenreTracks.vue?1aa9","webpack:///src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageGenreTracks.vue?0317","webpack:///./src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?2ab7","webpack:///src/pages/PageArtistTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?7e28","webpack:///./src/pages/PageArtistTracks.vue","webpack:///./src/pages/PagePodcasts.vue?dee5","webpack:///./src/components/ModalDialogAddRss.vue?a4d8","webpack:///src/components/ModalDialogAddRss.vue","webpack:///./src/components/ModalDialogAddRss.vue?3bb2","webpack:///./src/components/ModalDialogAddRss.vue","webpack:///src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcasts.vue?ec36","webpack:///./src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcast.vue?aef1","webpack:///src/pages/PagePodcast.vue","webpack:///./src/pages/PagePodcast.vue?7353","webpack:///./src/pages/PagePodcast.vue","webpack:///./src/pages/PageAudiobooksAlbums.vue?bd14","webpack:///./src/components/TabsAudiobooks.vue?023a","webpack:///src/components/TabsAudiobooks.vue","webpack:///./src/components/TabsAudiobooks.vue?b63b","webpack:///./src/components/TabsAudiobooks.vue","webpack:///src/pages/PageAudiobooksAlbums.vue","webpack:///./src/pages/PageAudiobooksAlbums.vue?5019","webpack:///./src/pages/PageAudiobooksAlbums.vue","webpack:///./src/pages/PageAudiobooksArtists.vue?bdc7","webpack:///src/pages/PageAudiobooksArtists.vue","webpack:///./src/pages/PageAudiobooksArtists.vue?35bb","webpack:///./src/pages/PageAudiobooksArtists.vue","webpack:///./src/pages/PageAudiobooksArtist.vue?64b2","webpack:///src/pages/PageAudiobooksArtist.vue","webpack:///./src/pages/PageAudiobooksArtist.vue?2426","webpack:///./src/pages/PageAudiobooksArtist.vue","webpack:///./src/pages/PageAudiobooksAlbum.vue?fc45","webpack:///src/pages/PageAudiobooksAlbum.vue","webpack:///./src/pages/PageAudiobooksAlbum.vue?49ae","webpack:///./src/pages/PageAudiobooksAlbum.vue","webpack:///./src/pages/PagePlaylists.vue?3525","webpack:///./src/components/ListPlaylists.vue?5821","webpack:///./src/components/ListItemPlaylist.vue?bf8b","webpack:///src/components/ListItemPlaylist.vue","webpack:///./src/components/ListItemPlaylist.vue?5b1a","webpack:///./src/components/ListItemPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?d8c7","webpack:///src/components/ModalDialogPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?8ac7","webpack:///./src/components/ModalDialogPlaylist.vue","webpack:///src/components/ListPlaylists.vue","webpack:///./src/components/ListPlaylists.vue?d5a9","webpack:///./src/components/ListPlaylists.vue","webpack:///src/pages/PagePlaylists.vue","webpack:///./src/pages/PagePlaylists.vue?5936","webpack:///./src/pages/PagePlaylists.vue","webpack:///./src/pages/PagePlaylist.vue?56d6","webpack:///src/pages/PagePlaylist.vue","webpack:///./src/pages/PagePlaylist.vue?f646","webpack:///./src/pages/PagePlaylist.vue","webpack:///./src/pages/PageFiles.vue?8429","webpack:///./src/components/ListItemDirectory.vue?871c","webpack:///src/components/ListItemDirectory.vue","webpack:///./src/components/ListItemDirectory.vue?7c5d","webpack:///./src/components/ListItemDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?114d","webpack:///src/components/ModalDialogDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?cef6","webpack:///./src/components/ModalDialogDirectory.vue","webpack:///src/pages/PageFiles.vue","webpack:///./src/pages/PageFiles.vue?c791","webpack:///./src/pages/PageFiles.vue","webpack:///./src/pages/PageRadioStreams.vue?89c3","webpack:///src/pages/PageRadioStreams.vue","webpack:///./src/pages/PageRadioStreams.vue?16e0","webpack:///./src/pages/PageRadioStreams.vue","webpack:///./src/pages/PageSearch.vue?1bde","webpack:///./src/templates/ContentText.vue?c7ba","webpack:///src/templates/ContentText.vue","webpack:///./src/templates/ContentText.vue?bdf7","webpack:///./src/templates/ContentText.vue","webpack:///./src/components/TabsSearch.vue?e2e5","webpack:///src/components/TabsSearch.vue","webpack:///./src/components/TabsSearch.vue?6aa8","webpack:///./src/components/TabsSearch.vue","webpack:///src/pages/PageSearch.vue","webpack:///./src/pages/PageSearch.vue?3d2a","webpack:///./src/pages/PageSearch.vue","webpack:///./src/pages/PageAbout.vue?f2d3","webpack:///src/pages/PageAbout.vue","webpack:///./src/pages/PageAbout.vue?4563","webpack:///./src/pages/PageAbout.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?d50e","webpack:///./src/components/SpotifyListItemAlbum.vue?a03a","webpack:///src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemAlbum.vue?cf43","webpack:///./src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?7b43","webpack:///src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?308c","webpack:///./src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?c353","webpack:///src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?7978","webpack:///./src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?ceed","webpack:///src/components/SpotifyModalDialogPlaylist.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?3b0b","webpack:///./src/components/SpotifyModalDialogPlaylist.vue","webpack:///src/pages/SpotifyPageBrowse.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?0c73","webpack:///./src/pages/SpotifyPageBrowse.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?52c5","webpack:///src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?d8c2","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?aa20","webpack:///src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?a73a","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageArtist.vue?d1c4","webpack:///./src/components/SpotifyModalDialogArtist.vue?ec63","webpack:///src/components/SpotifyModalDialogArtist.vue","webpack:///./src/components/SpotifyModalDialogArtist.vue?62f6","webpack:///./src/components/SpotifyModalDialogArtist.vue","webpack:///src/pages/SpotifyPageArtist.vue","webpack:///./src/pages/SpotifyPageArtist.vue?beba","webpack:///./src/pages/SpotifyPageArtist.vue","webpack:///./src/pages/SpotifyPageAlbum.vue?3600","webpack:///./src/components/SpotifyListItemTrack.vue?c4fc","webpack:///src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyListItemTrack.vue?d9dc","webpack:///./src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?c6ae","webpack:///src/components/SpotifyModalDialogTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?60d1","webpack:///./src/components/SpotifyModalDialogTrack.vue","webpack:///src/pages/SpotifyPageAlbum.vue","webpack:///./src/pages/SpotifyPageAlbum.vue?af1e","webpack:///./src/pages/SpotifyPageAlbum.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?0611","webpack:///src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?4d63","webpack:///./src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPageSearch.vue?598b","webpack:///./src/components/SpotifyListItemArtist.vue?6e92","webpack:///src/components/SpotifyListItemArtist.vue","webpack:///./src/components/SpotifyListItemArtist.vue?afa1","webpack:///./src/components/SpotifyListItemArtist.vue","webpack:///src/pages/SpotifyPageSearch.vue","webpack:///./src/pages/SpotifyPageSearch.vue?f792","webpack:///./src/pages/SpotifyPageSearch.vue","webpack:///./src/pages/SettingsPageWebinterface.vue?32f4","webpack:///./src/components/TabsSettings.vue?b72a","webpack:///src/components/TabsSettings.vue","webpack:///./src/components/TabsSettings.vue?e341","webpack:///./src/components/TabsSettings.vue","webpack:///./src/components/SettingsCheckbox.vue?f680","webpack:///src/components/SettingsCheckbox.vue","webpack:///./src/components/SettingsCheckbox.vue?4dd0","webpack:///./src/components/SettingsCheckbox.vue","webpack:///./src/components/SettingsTextfield.vue?a254","webpack:///src/components/SettingsTextfield.vue","webpack:///./src/components/SettingsTextfield.vue?aae5","webpack:///./src/components/SettingsTextfield.vue","webpack:///src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageWebinterface.vue?b41a","webpack:///./src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageArtwork.vue?9535","webpack:///src/pages/SettingsPageArtwork.vue","webpack:///./src/pages/SettingsPageArtwork.vue?4d58","webpack:///./src/pages/SettingsPageArtwork.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?60b0","webpack:///src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?e878","webpack:///./src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageRemotesOutputs.vue?dabe","webpack:///src/pages/SettingsPageRemotesOutputs.vue","webpack:///./src/pages/SettingsPageRemotesOutputs.vue?69f8","webpack:///./src/pages/SettingsPageRemotesOutputs.vue","webpack:///./src/router/index.js","webpack:///./src/filter/index.js","webpack:///./src/progress/index.js","webpack:///./src/main.js","webpack:///./src/components/Notifications.vue?838a","webpack:///./src/templates/ContentWithHero.vue"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","render","_vm","this","_h","$createElement","_c","_self","staticClass","staticStyle","_t","staticRenderFns","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","attrs","directives","rawName","expression","pairing_active","on","$event","show_burger_menu","show_player_menu","style","_e","class","show_settings_menu","on_click_outside_settings","_m","_v","stopPropagation","preventDefault","show_update_library","library","updating","update_library","slot","domProps","Array","isArray","rescan_metadata","_i","$$a","$$el","target","$$c","checked","$$v","$$i","concat","is_active","full_path","open_link","UPDATE_CONFIG","UPDATE_SETTINGS","UPDATE_SETTINGS_OPTION","UPDATE_LIBRARY_STATS","UPDATE_LIBRARY_AUDIOBOOKS_COUNT","UPDATE_LIBRARY_PODCASTS_COUNT","UPDATE_OUTPUTS","UPDATE_PLAYER_STATUS","UPDATE_QUEUE","UPDATE_LASTFM","UPDATE_SPOTIFY","UPDATE_PAIRING","SPOTIFY_NEW_RELEASES","SPOTIFY_FEATURED_PLAYLISTS","ADD_NOTIFICATION","DELETE_NOTIFICATION","ADD_RECENT_SEARCH","HIDE_SINGLES","HIDE_SPOTIFY","ARTISTS_SORT","ARTIST_ALBUMS_SORT","ALBUMS_SORT","SHOW_ONLY_NEXT_ITEMS","SHOW_BURGER_MENU","SHOW_PLAYER_MENU","props","to","String","exact","Boolean","computed","$route","path","startsWith","$store","state","set","commit","methods","$router","resolved","href","component","$emit","_s","title","close_action","delete_action","ok_action","Vue","use","Vuex","Store","config","websocket_port","version","buildoptions","settings","categories","artists","albums","songs","db_playtime","audiobooks_count","podcasts_count","outputs","player","repeat","consume","shuffle","volume","item_id","item_length_ms","item_progress_ms","queue","count","items","lastfm","spotify","pairing","spotify_new_releases","spotify_featured_playlists","notifications","next_id","list","recent_searches","hide_singles","hide_spotify","artists_sort","artist_albums_sort","albums_sort","show_only_next_items","getters","now_playing","item","find","undefined","settings_webinterface","elem","settings_option_show_composer_now_playing","option","options","settings_option_show_composer_for_genre","settings_category","categoryName","settings_option","optionName","category","mutations","types","settingCategory","settingOption","libraryStats","playerStatus","newReleases","featuredPlaylists","notification","topic","index","findIndex","indexOf","query","pop","hideSingles","hideSpotify","sort","showOnlyNextItems","showBurgerMenu","showPlayerMenu","actions","add_notification","newNotification","type","text","timeout","setTimeout","axios","interceptors","response","error","request","status","responseURL","store","dispatch","statusText","Promise","reject","settings_update","put","library_stats","library_update","library_rescan","library_count","queue_clear","queue_remove","itemId","delete","queue_move","newPosition","queue_add","uri","post","then","queue_add_next","position","queue_expression_add","params","queue_expression_add_next","queue_save_playlist","player_status","player_play_uri","uris","clear","playback","playback_from_position","player_play_expression","player_play","player_playpos","player_playid","player_pause","player_stop","player_next","player_previous","player_shuffle","newState","player_consume","player_repeat","newRepeatMode","player_volume","player_output_volume","outputId","outputVolume","player_seek_to_pos","player_seek","seekMs","output_update","output","output_toggle","library_artists","media_kind","library_artist","artistId","library_artist_albums","library_albums","library_album","albumId","library_album_tracks","filter","limit","offset","library_album_track_update","attributes","library_genres","library_genre","genre","genreParams","library_genre_tracks","library_radio_streams","library_artist_tracks","artist","artistParams","library_podcasts_new_episodes","episodesParams","library_podcast_episodes","library_add","url","library_playlist_delete","playlistId","library_playlists","library_playlist_folder","library_playlist","library_playlist_tracks","library_track","trackId","library_track_playlists","library_track_update","library_files","directory","filesParams","search","searchParams","spotify_login","credentials","lastfm_login","lastfm_logout","pairing_kickoff","pairingReq","artwork_url_append_size_params","artworkUrl","maxwidth","maxheight","includes","components","is_visible_playlists","is_visible_music","is_visible_podcasts","is_visible_audiobooks","is_visible_radio","is_visible_files","is_visible_search","audiobooks","podcasts","spotify_enabled","webapi_token_valid","zindex","webapi","watch","is_now_playing_page","data_kind","album","toggle_mute_volume","set_volume","_l","loading","playing","togglePlay","stream_volume","set_stream_volume","_audio","Audio","_context","_source","_gain","setupAudio","AudioContext","webkitAudioContext","createMediaElementSource","createGain","connect","destination","addEventListener","play","setVolume","parseFloat","gain","playSource","source","stopAudio","resume","src","Date","now","crossOrigin","load","pause","stop","close","selected","set_enabled","type_class","play_next","newVolume","values","disabled","toggle_play_pause","icon_style","is_playing","is_pause_allowed","show_disabled_message","play_previous","is_shuffle","toggle_shuffle_mode","is_consume","toggle_consume_mode","is_repeat_off","toggle_repeat_mode","is_repeat_all","is_repeat_single","seek","is_stopped","visible","seek_ms","NavbarItemLink","NavbarItemOutput","RangeSlider","PlayerButtonPlayPause","PlayerButtonNext","PlayerButtonPrevious","PlayerButtonShuffle","PlayerButtonConsume","PlayerButtonRepeat","PlayerButtonSeekForward","PlayerButtonSeekBack","old_volume","show_outputs_menu","show_desktop_outputs_menu","on_click_outside_outputs","a","closeAudio","playChannel","mounted","destroyed","remove","kickoff_pairing","remote","pairing_req","ref","composing","$set","show","template","token_timer_id","reconnect_attempts","created","$Progress","start","beforeEach","meta","show_progress","progress","next","afterEach","document","library_name","open_ws","protocol","location","wsUrl","hostname","vm","socket","onopen","send","JSON","stringify","update_outputs","update_player_status","update_library_stats","update_settings","update_queue","update_spotify","update_lastfm","update_pairing","onclose","onerror","onmessage","parse","notify","clearTimeout","webapi_token_expires_in","webapi_token","update_is_clipped","querySelector","classList","add","update_show_next_items","open_add_stream_dialog","edit_mode","queue_items","save_dialog","move_item","model","callback","current_position","open_dialog","show_details_modal","selected_item","show_url_modal","show_pls_save_modal","$slots","options_visible","scroll_to_content","scroll_to_top","observer_options","visibilityChanged","intersection","rootMargin","threshold","scrollTo","has_tabs","$scrollTo","isVisible","is_next","open_album","open_album_artist","album_artist","composer","year","open_genre","track_number","disc_number","_f","length_ms","open_spotify_artist","open_spotify_album","samplerate","channels","bitrate","spotify_track","spotifyApi","setAccessToken","getTrack","lastIndexOf","add_stream","save","playlist_name","is_queue_save_allowed","allow_modifying_stored_playlists","default_playlist_directory","nowPlaying","oldPosition","oldIndex","newIndex","artwork_url","artwork_url_with_size","dataURI","SVGRenderer","svg","width","height","textColor","fontFamily","fontSize","fontWeight","backgroundColor","caption","encodeURIComponent","font_family","font_size","font_weight","alt_text","substring","background_color","is_background_light","luma","text_color","rendererParams","interval_id","tick","catch","setInterval","recently_added","open_browse","recently_played","LoadDataBeforeEnterMixin","dataObject","beforeRouteEnter","from","beforeRouteUpdate","idx","grouped","selected_album","open_remove_podcast_dialog","show_remove_podcast_modal","remove_podcast","rss_playlist_to_remove","name_sort","charAt","toUpperCase","listeners","click","date_released","media_kind_resolved","mark_played","open_artist","track_count","time_added","artwork_visible","artwork_loaded","artwork_error","Albums","group","sortedAndFiltered","indexList","init","createSortedAndFilteredList","createGroupedList","createIndexList","Set","getAlbumIndex","albumsSorted","hideOther","isAlbumVisible","b","localeCompare","reduce","is_visible_artwork","albums_list","is_grouped","rssPlaylists","track","play_track","selected_track","slots","title_sort","play_count","mark_new","Math","floor","rating","all","tracks","mixins","browseData","show_track_details_modal","artists_list","sort_options","char","nav","filtered_index","selected_artist","album_count","Artists","getArtistIndex","artistsSorted","isArtistVisible","select","onClickOutside","artistsData","scrollToTop","show_artist_details_modal","open_tracks","artistData","index_list","albumsData","show_album_details_modal","albumData","genres","total","selected_genre","genresData","show_genre_details_modal","genre_albums","genreData","tracksData","track_uris","new_episodes","mark_all_played","open_track_dialog","reload_new_episodes","open_add_podcast_dialog","reload_podcasts","forEach","ep","reload_tracks","new_tracks","playlist","playlists","open_playlist","selected_playlist","folder","playlistsData","show_playlist_details_modal","playlistData","random","current_directory","open_directory_dialog","open_parent_directory","files","open_directory","open_playlist_dialog","show_directory_details_modal","selected_directory","directories","filesData","parent","streamsData","new_search","search_query","recent_search","open_recent_search","show_tracks","open_search_tracks","toLocaleString","show_artists","open_search_artists","show_albums","open_search_albums","show_playlists","open_search_playlists","show_podcasts","open_search_podcasts","show_audiobooks","open_search_audiobooks","search_library","search_spotify","show_all_tracks_button","show_all_artists_button","show_all_albums_button","show_all_playlists_button","show_all_audiobooks_button","show_all_podcasts_button","route","$refs","search_field","focus","searchMusic","searchAudiobooks","searchPodcasts","replace","trim","blur","show_update_dropdown","update","update_meta","updated_at","started_at","filters","join","array","open_album_dialog","album_type","release_date","owner","display_name","images","new_releases","featured_playlists","getNewReleases","getFeaturedPlaylists","load_next","popularity","followers","append_albums","getArtistAlbums","$state","loaded","complete","context_uri","duration_ms","getAlbum","album_id","append_tracks","getPlaylistTracks","search_tracks_next","open_artist_dialog","search_artists_next","search_albums_next","search_playlists_next","search_param","validSearchTypes","reset","search_all","spotify_search","set_update_timer","statusUpdate","info","timerDelay","timerId","newValue","update_setting","option_name","clear_status","placeholder","libspotify_installed","libspotify_user","libspotify_logged_in","login_libspotify","libspotify","errors","user","password","webapi_user","spotify_missing_scope","oauth_uri","spotify_required_scope","enabled","logoutLastfm","scrobbling_enabled","login_lastfm","webapi_granted_scope","webapi_required_scope","split","success","active","kickoff_verification","verification_req","VueRouter","router","routes","PageQueue","PageAbout","PageNowPlaying","redirect","PageBrowse","PageBrowseRecentlyAdded","PageBrowseRecentlyPlayed","PageArtists","has_index","PageArtist","PageArtistTracks","PageAlbums","PageAlbum","PageGenres","PageGenre","PageGenreTracks","PagePodcasts","PagePodcast","PageAudiobooksArtists","PageAudiobooksArtist","PageAudiobooksAlbums","PageAudiobooksAlbum","PageRadioStreams","PageFiles","PagePlaylists","PagePlaylist","PageSearch","SpotifyPageBrowse","SpotifyPageBrowseNewReleases","SpotifyPageBrowseFeaturedPlaylists","SpotifyPageArtist","SpotifyPageAlbum","SpotifyPagePlaylist","SpotifyPageSearch","SettingsPageWebinterface","SettingsPageArtwork","SettingsPageOnlineServices","SettingsPageRemotesOutputs","scrollBehavior","savedPosition","hash","selector","x","y","momentDurationFormatSetup","moment","format","duration","withoutSuffix","fromNow","VueProgressBar","color","failedColor","productionTip","vClickOutside","VueTinyLazyloadImg","VueObserveVisibility","VueScrollTo","el","App"],"mappings":"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","file":"player/js/app-legacy.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"hero is-light is-bold fd-content\"},[_c('div',{staticClass:\"hero-body\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"columns\",staticStyle:{\"flex-direction\":\"row-reverse\"}},[_c('div',{staticClass:\"column fd-has-cover\"},[_vm._t(\"heading-right\")],2),_c('div',{staticClass:\"column is-three-fifths has-text-centered-mobile\",staticStyle:{\"margin\":\"auto 0\"}},[_vm._t(\"heading-left\")],2)])])])])])]),_c('section',{staticClass:\"section fd-content\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_vm._t(\"content\"),_c('div',{staticStyle:{\"margin-top\":\"16px\"}},[_vm._t(\"footer\")],2)],2)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHero.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHero.vue?vue&type=script&lang=js&\"","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"4678\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app\"}},[_c('navbar-top'),_c('vue-progress-bar',{staticClass:\"fd-progress-bar\"}),_c('transition',{attrs:{\"name\":\"fade\"}},[_c('router-view',{directives:[{name:\"show\",rawName:\"v-show\",value:(true),expression:\"true\"}]})],1),_c('modal-dialog-remote-pairing',{attrs:{\"show\":_vm.pairing_active},on:{\"close\":function($event){_vm.pairing_active = false}}}),_c('notifications',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.show_burger_menu),expression:\"!show_burger_menu\"}]}),_c('navbar-bottom'),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show_burger_menu || _vm.show_player_menu),expression:\"show_burger_menu || show_player_menu\"}],staticClass:\"fd-overlay-fullscreen\",on:{\"click\":function($event){_vm.show_burger_menu = _vm.show_player_menu = false}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('nav',{staticClass:\"fd-top-navbar navbar is-light is-fixed-top\",style:(_vm.zindex),attrs:{\"role\":\"navigation\",\"aria-label\":\"main navigation\"}},[_c('div',{staticClass:\"navbar-brand\"},[(_vm.is_visible_playlists)?_c('navbar-item-link',{attrs:{\"to\":\"/playlists\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})])]):_vm._e(),(_vm.is_visible_music)?_c('navbar-item-link',{attrs:{\"to\":\"/music\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-music\"})])]):_vm._e(),(_vm.is_visible_podcasts)?_c('navbar-item-link',{attrs:{\"to\":\"/podcasts\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-microphone\"})])]):_vm._e(),(_vm.is_visible_audiobooks)?_c('navbar-item-link',{attrs:{\"to\":\"/audiobooks\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-book-open-variant\"})])]):_vm._e(),(_vm.is_visible_radio)?_c('navbar-item-link',{attrs:{\"to\":\"/radio\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-radio\"})])]):_vm._e(),(_vm.is_visible_files)?_c('navbar-item-link',{attrs:{\"to\":\"/files\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder-open\"})])]):_vm._e(),(_vm.is_visible_search)?_c('navbar-item-link',{attrs:{\"to\":\"/search\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])]):_vm._e(),_c('div',{staticClass:\"navbar-burger\",class:{ 'is-active': _vm.show_burger_menu },on:{\"click\":function($event){_vm.show_burger_menu = !_vm.show_burger_menu}}},[_c('span'),_c('span'),_c('span')])],1),_c('div',{staticClass:\"navbar-menu\",class:{ 'is-active': _vm.show_burger_menu }},[_c('div',{staticClass:\"navbar-start\"}),_c('div',{staticClass:\"navbar-end\"},[_c('div',{staticClass:\"navbar-item has-dropdown is-hoverable\",class:{ 'is-active': _vm.show_settings_menu },on:{\"click\":_vm.on_click_outside_settings}},[_vm._m(0),_c('div',{staticClass:\"navbar-dropdown is-right\"},[_c('navbar-item-link',{attrs:{\"to\":\"/playlists\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Playlists\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music\",\"exact\":\"\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-music\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Music\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/artists\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Artists\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/albums\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Albums\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/genres\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Genres\")])]),(_vm.spotify_enabled)?_c('navbar-item-link',{attrs:{\"to\":\"/music/spotify\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Spotify\")])]):_vm._e(),_c('navbar-item-link',{attrs:{\"to\":\"/podcasts\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-microphone\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Podcasts\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/audiobooks\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-book-open-variant\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Audiobooks\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/radio\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-radio\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Radio\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/files\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder-open\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Files\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/search\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})]),_vm._v(\" \"),_c('b',[_vm._v(\"Search\")])]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('navbar-item-link',{attrs:{\"to\":\"/settings/webinterface\"}},[_vm._v(\"Settings\")]),_c('a',{staticClass:\"navbar-item\",on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();_vm.show_update_library = true; _vm.show_settings_menu = false; _vm.show_burger_menu = false}}},[_vm._v(\" Update Library \")]),_c('navbar-item-link',{attrs:{\"to\":\"/about\"}},[_vm._v(\"About\")]),_c('div',{staticClass:\"navbar-item is-hidden-desktop\",staticStyle:{\"margin-bottom\":\"2.5rem\"}})],1)])])]),_c('modal-dialog',{attrs:{\"show\":_vm.show_update_library,\"title\":\"Update library\",\"ok_action\":_vm.library.updating ? '' : 'Rescan',\"close_action\":\"Close\"},on:{\"ok\":_vm.update_library,\"close\":function($event){_vm.show_update_library = false}}},[_c('template',{slot:\"modal-content\"},[(!_vm.library.updating)?_c('div',[_c('p',{staticClass:\"mb-3\"},[_vm._v(\"Scan for new, deleted and modified files\")]),_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"checkbox is-size-7 is-small\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.rescan_metadata),expression:\"rescan_metadata\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.rescan_metadata)?_vm._i(_vm.rescan_metadata,null)>-1:(_vm.rescan_metadata)},on:{\"change\":function($event){var $$a=_vm.rescan_metadata,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.rescan_metadata=$$a.concat([$$v]))}else{$$i>-1&&(_vm.rescan_metadata=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.rescan_metadata=$$c}}}}),_vm._v(\" Rescan metadata for unmodified files \")])])]):_c('div',[_c('p',{staticClass:\"mb-3\"},[_vm._v(\"Library update in progress ...\")])])])],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show_settings_menu),expression:\"show_settings_menu\"}],staticClass:\"is-overlay\",staticStyle:{\"z-index\":\"10\",\"width\":\"100vw\",\"height\":\"100vh\"},on:{\"click\":function($event){_vm.show_settings_menu = false}}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"navbar-link is-arrowless\"},[_c('span',{staticClass:\"icon is-hidden-touch\"},[_c('i',{staticClass:\"mdi mdi-24px mdi-menu\"})]),_c('span',{staticClass:\"is-hidden-desktop has-text-weight-bold\"},[_vm._v(\"forked-daapd\")])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"navbar-item\",class:{ 'is-active': _vm.is_active },attrs:{\"href\":_vm.full_path()},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.open_link()}}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export const UPDATE_CONFIG = 'UPDATE_CONFIG'\nexport const UPDATE_SETTINGS = 'UPDATE_SETTINGS'\nexport const UPDATE_SETTINGS_OPTION = 'UPDATE_SETTINGS_OPTION'\nexport const UPDATE_LIBRARY_STATS = 'UPDATE_LIBRARY_STATS'\nexport const UPDATE_LIBRARY_AUDIOBOOKS_COUNT = 'UPDATE_LIBRARY_AUDIOBOOKS_COUNT'\nexport const UPDATE_LIBRARY_PODCASTS_COUNT = 'UPDATE_LIBRARY_PODCASTS_COUNT'\nexport const UPDATE_OUTPUTS = 'UPDATE_OUTPUTS'\nexport const UPDATE_PLAYER_STATUS = 'UPDATE_PLAYER_STATUS'\nexport const UPDATE_QUEUE = 'UPDATE_QUEUE'\nexport const UPDATE_LASTFM = 'UPDATE_LASTFM'\nexport const UPDATE_SPOTIFY = 'UPDATE_SPOTIFY'\nexport const UPDATE_PAIRING = 'UPDATE_PAIRING'\n\nexport const SPOTIFY_NEW_RELEASES = 'SPOTIFY_NEW_RELEASES'\nexport const SPOTIFY_FEATURED_PLAYLISTS = 'SPOTIFY_FEATURED_PLAYLISTS'\n\nexport const ADD_NOTIFICATION = 'ADD_NOTIFICATION'\nexport const DELETE_NOTIFICATION = 'DELETE_NOTIFICATION'\nexport const ADD_RECENT_SEARCH = 'ADD_RECENT_SEARCH'\n\nexport const HIDE_SINGLES = 'HIDE_SINGLES'\nexport const HIDE_SPOTIFY = 'HIDE_SPOTIFY'\nexport const ARTISTS_SORT = 'ARTISTS_SORT'\nexport const ARTIST_ALBUMS_SORT = 'ARTIST_ALBUMS_SORT'\nexport const ALBUMS_SORT = 'ALBUMS_SORT'\nexport const SHOW_ONLY_NEXT_ITEMS = 'SHOW_ONLY_NEXT_ITEMS'\nexport const SHOW_BURGER_MENU = 'SHOW_BURGER_MENU'\nexport const SHOW_PLAYER_MENU = 'SHOW_PLAYER_MENU'\n","<template>\n <a class=\"navbar-item\" :class=\"{ 'is-active': is_active }\" @click.stop.prevent=\"open_link()\" :href=\"full_path()\">\n <slot></slot>\n </a>\n</template>\n\n<script>\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'NavbarItemLink',\n props: {\n to: String,\n exact: Boolean\n },\n\n computed: {\n is_active () {\n if (this.exact) {\n return this.$route.path === this.to\n }\n return this.$route.path.startsWith(this.to)\n },\n\n show_player_menu: {\n get () {\n return this.$store.state.show_player_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_PLAYER_MENU, value)\n }\n },\n\n show_burger_menu: {\n get () {\n return this.$store.state.show_burger_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_BURGER_MENU, value)\n }\n }\n },\n\n methods: {\n open_link: function () {\n if (this.show_burger_menu) {\n this.$store.commit(types.SHOW_BURGER_MENU, false)\n }\n if (this.show_player_menu) {\n this.$store.commit(types.SHOW_PLAYER_MENU, false)\n }\n this.$router.push({ path: this.to })\n },\n\n full_path: function () {\n const resolved = this.$router.resolve(this.to)\n return resolved.href\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemLink.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemLink.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarItemLink.vue?vue&type=template&id=69134921&\"\nimport script from \"./NavbarItemLink.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarItemLink.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[(_vm.title)?_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.title)+\" \")]):_vm._e(),_vm._t(\"modal-content\")],2),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(_vm._s(_vm.close_action ? _vm.close_action : 'Cancel'))])]),(_vm.delete_action)?_c('a',{staticClass:\"card-footer-item has-background-danger has-text-white has-text-weight-bold\",on:{\"click\":function($event){return _vm.$emit('delete')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-delete\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(_vm._s(_vm.delete_action))])]):_vm._e(),(_vm.ok_action)?_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":function($event){return _vm.$emit('ok')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-check\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(_vm._s(_vm.ok_action))])]):_vm._e()])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\" v-if=\"title\">\n {{ title }}\n </p>\n <slot name=\"modal-content\"></slot>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">{{ close_action ? close_action : 'Cancel' }}</span>\n </a>\n <a v-if=\"delete_action\" class=\"card-footer-item has-background-danger has-text-white has-text-weight-bold\" @click=\"$emit('delete')\">\n <span class=\"icon\"><i class=\"mdi mdi-delete\"></i></span> <span class=\"is-size-7\">{{ delete_action }}</span>\n </a>\n <a v-if=\"ok_action\" class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"$emit('ok')\">\n <span class=\"icon\"><i class=\"mdi mdi-check\"></i></span> <span class=\"is-size-7\">{{ ok_action }}</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ModalDialog',\n props: ['show', 'title', 'ok_action', 'delete_action', 'close_action']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialog.vue?vue&type=template&id=5739f0bd&\"\nimport script from \"./ModalDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialog.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport Vuex from 'vuex'\nimport * as types from './mutation_types'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n state: {\n config: {\n websocket_port: 0,\n version: '',\n buildoptions: []\n },\n settings: {\n categories: []\n },\n library: {\n artists: 0,\n albums: 0,\n songs: 0,\n db_playtime: 0,\n updating: false\n },\n audiobooks_count: { },\n podcasts_count: { },\n outputs: [],\n player: {\n state: 'stop',\n repeat: 'off',\n consume: false,\n shuffle: false,\n volume: 0,\n item_id: 0,\n item_length_ms: 0,\n item_progress_ms: 0\n },\n queue: {\n version: 0,\n count: 0,\n items: []\n },\n lastfm: {},\n spotify: {},\n pairing: {},\n\n spotify_new_releases: [],\n spotify_featured_playlists: [],\n\n notifications: {\n next_id: 1,\n list: []\n },\n recent_searches: [],\n\n hide_singles: false,\n hide_spotify: false,\n artists_sort: 'Name',\n artist_albums_sort: 'Name',\n albums_sort: 'Name',\n show_only_next_items: false,\n show_burger_menu: false,\n show_player_menu: false\n },\n\n getters: {\n now_playing: state => {\n var item = state.queue.items.find(function (item) {\n return item.id === state.player.item_id\n })\n return (item === undefined) ? {} : item\n },\n\n settings_webinterface: state => {\n if (state.settings) {\n return state.settings.categories.find(elem => elem.name === 'webinterface')\n }\n return null\n },\n\n settings_option_show_composer_now_playing: (state, getters) => {\n if (getters.settings_webinterface) {\n const option = getters.settings_webinterface.options.find(elem => elem.name === 'show_composer_now_playing')\n if (option) {\n return option.value\n }\n }\n return false\n },\n\n settings_option_show_composer_for_genre: (state, getters) => {\n if (getters.settings_webinterface) {\n const option = getters.settings_webinterface.options.find(elem => elem.name === 'show_composer_for_genre')\n if (option) {\n return option.value\n }\n }\n return null\n },\n\n settings_category: (state) => (categoryName) => {\n return state.settings.categories.find(elem => elem.name === categoryName)\n },\n\n settings_option: (state) => (categoryName, optionName) => {\n const category = state.settings.categories.find(elem => elem.name === categoryName)\n if (!category) {\n return {}\n }\n return category.options.find(elem => elem.name === optionName)\n }\n },\n\n mutations: {\n [types.UPDATE_CONFIG] (state, config) {\n state.config = config\n },\n [types.UPDATE_SETTINGS] (state, settings) {\n state.settings = settings\n },\n [types.UPDATE_SETTINGS_OPTION] (state, option) {\n const settingCategory = state.settings.categories.find(elem => elem.name === option.category)\n const settingOption = settingCategory.options.find(elem => elem.name === option.name)\n settingOption.value = option.value\n },\n [types.UPDATE_LIBRARY_STATS] (state, libraryStats) {\n state.library = libraryStats\n },\n [types.UPDATE_LIBRARY_AUDIOBOOKS_COUNT] (state, count) {\n state.audiobooks_count = count\n },\n [types.UPDATE_LIBRARY_PODCASTS_COUNT] (state, count) {\n state.podcasts_count = count\n },\n [types.UPDATE_OUTPUTS] (state, outputs) {\n state.outputs = outputs\n },\n [types.UPDATE_PLAYER_STATUS] (state, playerStatus) {\n state.player = playerStatus\n },\n [types.UPDATE_QUEUE] (state, queue) {\n state.queue = queue\n },\n [types.UPDATE_LASTFM] (state, lastfm) {\n state.lastfm = lastfm\n },\n [types.UPDATE_SPOTIFY] (state, spotify) {\n state.spotify = spotify\n },\n [types.UPDATE_PAIRING] (state, pairing) {\n state.pairing = pairing\n },\n [types.SPOTIFY_NEW_RELEASES] (state, newReleases) {\n state.spotify_new_releases = newReleases\n },\n [types.SPOTIFY_FEATURED_PLAYLISTS] (state, featuredPlaylists) {\n state.spotify_featured_playlists = featuredPlaylists\n },\n [types.ADD_NOTIFICATION] (state, notification) {\n if (notification.topic) {\n var index = state.notifications.list.findIndex(elem => elem.topic === notification.topic)\n if (index >= 0) {\n state.notifications.list.splice(index, 1, notification)\n return\n }\n }\n state.notifications.list.push(notification)\n },\n [types.DELETE_NOTIFICATION] (state, notification) {\n const index = state.notifications.list.indexOf(notification)\n\n if (index !== -1) {\n state.notifications.list.splice(index, 1)\n }\n },\n [types.ADD_RECENT_SEARCH] (state, query) {\n var index = state.recent_searches.findIndex(elem => elem === query)\n if (index >= 0) {\n state.recent_searches.splice(index, 1)\n }\n\n state.recent_searches.splice(0, 0, query)\n\n if (state.recent_searches.length > 5) {\n state.recent_searches.pop()\n }\n },\n [types.HIDE_SINGLES] (state, hideSingles) {\n state.hide_singles = hideSingles\n },\n [types.HIDE_SPOTIFY] (state, hideSpotify) {\n state.hide_spotify = hideSpotify\n },\n [types.ARTISTS_SORT] (state, sort) {\n state.artists_sort = sort\n },\n [types.ARTIST_ALBUMS_SORT] (state, sort) {\n state.artist_albums_sort = sort\n },\n [types.ALBUMS_SORT] (state, sort) {\n state.albums_sort = sort\n },\n [types.SHOW_ONLY_NEXT_ITEMS] (state, showOnlyNextItems) {\n state.show_only_next_items = showOnlyNextItems\n },\n [types.SHOW_BURGER_MENU] (state, showBurgerMenu) {\n state.show_burger_menu = showBurgerMenu\n },\n [types.SHOW_PLAYER_MENU] (state, showPlayerMenu) {\n state.show_player_menu = showPlayerMenu\n }\n },\n\n actions: {\n add_notification ({ commit, state }, notification) {\n const newNotification = {\n id: state.notifications.next_id++,\n type: notification.type,\n text: notification.text,\n topic: notification.topic,\n timeout: notification.timeout\n }\n\n commit(types.ADD_NOTIFICATION, newNotification)\n\n if (notification.timeout > 0) {\n setTimeout(() => {\n commit(types.DELETE_NOTIFICATION, newNotification)\n }, notification.timeout)\n }\n }\n }\n})\n","import axios from 'axios'\nimport store from '@/store'\n\naxios.interceptors.response.use(function (response) {\n return response\n}, function (error) {\n if (error.request.status && error.request.responseURL) {\n store.dispatch('add_notification', { text: 'Request failed (status: ' + error.request.status + ' ' + error.request.statusText + ', url: ' + error.request.responseURL + ')', type: 'danger' })\n }\n return Promise.reject(error)\n})\n\nexport default {\n config () {\n return axios.get('./api/config')\n },\n\n settings () {\n return axios.get('./api/settings')\n },\n\n settings_update (categoryName, option) {\n return axios.put('./api/settings/' + categoryName + '/' + option.name, option)\n },\n\n library_stats () {\n return axios.get('./api/library')\n },\n\n library_update () {\n return axios.put('./api/update')\n },\n\n library_rescan () {\n return axios.put('./api/rescan')\n },\n\n library_count (expression) {\n return axios.get('./api/library/count?expression=' + expression)\n },\n\n queue () {\n return axios.get('./api/queue')\n },\n\n queue_clear () {\n return axios.put('./api/queue/clear')\n },\n\n queue_remove (itemId) {\n return axios.delete('./api/queue/items/' + itemId)\n },\n\n queue_move (itemId, newPosition) {\n return axios.put('./api/queue/items/' + itemId + '?new_position=' + newPosition)\n },\n\n queue_add (uri) {\n return axios.post('./api/queue/items/add?uris=' + uri).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_add_next (uri) {\n var position = 0\n if (store.getters.now_playing && store.getters.now_playing.id) {\n position = store.getters.now_playing.position + 1\n }\n return axios.post('./api/queue/items/add?uris=' + uri + '&position=' + position).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_expression_add (expression) {\n var options = {}\n options.expression = expression\n\n return axios.post('./api/queue/items/add', undefined, { params: options }).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_expression_add_next (expression) {\n var options = {}\n options.expression = expression\n options.position = 0\n if (store.getters.now_playing && store.getters.now_playing.id) {\n options.position = store.getters.now_playing.position + 1\n }\n\n return axios.post('./api/queue/items/add', undefined, { params: options }).then((response) => {\n store.dispatch('add_notification', { text: response.data.count + ' tracks appended to queue', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n queue_save_playlist (name) {\n return axios.post('./api/queue/save', undefined, { params: { name: name } }).then((response) => {\n store.dispatch('add_notification', { text: 'Queue saved to playlist \"' + name + '\"', type: 'info', timeout: 2000 })\n return Promise.resolve(response)\n })\n },\n\n player_status () {\n return axios.get('./api/player')\n },\n\n player_play_uri (uris, shuffle, position = undefined) {\n var options = {}\n options.uris = uris\n options.shuffle = shuffle ? 'true' : 'false'\n options.clear = 'true'\n options.playback = 'start'\n options.playback_from_position = position\n\n return axios.post('./api/queue/items/add', undefined, { params: options })\n },\n\n player_play_expression (expression, shuffle, position = undefined) {\n var options = {}\n options.expression = expression\n options.shuffle = shuffle ? 'true' : 'false'\n options.clear = 'true'\n options.playback = 'start'\n options.playback_from_position = position\n\n return axios.post('./api/queue/items/add', undefined, { params: options })\n },\n\n player_play (options = {}) {\n return axios.put('./api/player/play', undefined, { params: options })\n },\n\n player_playpos (position) {\n return axios.put('./api/player/play?position=' + position)\n },\n\n player_playid (itemId) {\n return axios.put('./api/player/play?item_id=' + itemId)\n },\n\n player_pause () {\n return axios.put('./api/player/pause')\n },\n\n player_stop () {\n return axios.put('./api/player/stop')\n },\n\n player_next () {\n return axios.put('./api/player/next')\n },\n\n player_previous () {\n return axios.put('./api/player/previous')\n },\n\n player_shuffle (newState) {\n var shuffle = newState ? 'true' : 'false'\n return axios.put('./api/player/shuffle?state=' + shuffle)\n },\n\n player_consume (newState) {\n var consume = newState ? 'true' : 'false'\n return axios.put('./api/player/consume?state=' + consume)\n },\n\n player_repeat (newRepeatMode) {\n return axios.put('./api/player/repeat?state=' + newRepeatMode)\n },\n\n player_volume (volume) {\n return axios.put('./api/player/volume?volume=' + volume)\n },\n\n player_output_volume (outputId, outputVolume) {\n return axios.put('./api/player/volume?volume=' + outputVolume + '&output_id=' + outputId)\n },\n\n player_seek_to_pos (newPosition) {\n return axios.put('./api/player/seek?position_ms=' + newPosition)\n },\n\n player_seek (seekMs) {\n return axios.put('./api/player/seek?seek_ms=' + seekMs)\n },\n\n outputs () {\n return axios.get('./api/outputs')\n },\n\n output_update (outputId, output) {\n return axios.put('./api/outputs/' + outputId, output)\n },\n\n output_toggle (outputId) {\n return axios.put('./api/outputs/' + outputId + '/toggle')\n },\n\n library_artists (media_kind = undefined) {\n return axios.get('./api/library/artists', { params: { media_kind: media_kind } })\n },\n\n library_artist (artistId) {\n return axios.get('./api/library/artists/' + artistId)\n },\n\n library_artist_albums (artistId) {\n return axios.get('./api/library/artists/' + artistId + '/albums')\n },\n\n library_albums (media_kind = undefined) {\n return axios.get('./api/library/albums', { params: { media_kind: media_kind } })\n },\n\n library_album (albumId) {\n return axios.get('./api/library/albums/' + albumId)\n },\n\n library_album_tracks (albumId, filter = { limit: -1, offset: 0 }) {\n return axios.get('./api/library/albums/' + albumId + '/tracks', {\n params: filter\n })\n },\n\n library_album_track_update (albumId, attributes) {\n return axios.put('./api/library/albums/' + albumId + '/tracks', undefined, { params: attributes })\n },\n\n library_genres () {\n return axios.get('./api/library/genres')\n },\n\n library_genre (genre) {\n var genreParams = {\n type: 'albums',\n media_kind: 'music',\n expression: 'genre is \"' + genre + '\"'\n }\n return axios.get('./api/search', {\n params: genreParams\n })\n },\n\n library_genre_tracks (genre) {\n var genreParams = {\n type: 'tracks',\n media_kind: 'music',\n expression: 'genre is \"' + genre + '\"'\n }\n return axios.get('./api/search', {\n params: genreParams\n })\n },\n\n library_radio_streams () {\n var params = {\n type: 'tracks',\n media_kind: 'music',\n expression: 'data_kind is url and song_length = 0'\n }\n return axios.get('./api/search', {\n params: params\n })\n },\n\n library_artist_tracks (artist) {\n if (artist) {\n var artistParams = {\n type: 'tracks',\n expression: 'songartistid is \"' + artist + '\"'\n }\n return axios.get('./api/search', {\n params: artistParams\n })\n }\n },\n\n library_podcasts_new_episodes () {\n var episodesParams = {\n type: 'tracks',\n expression: 'media_kind is podcast and play_count = 0 ORDER BY time_added DESC'\n }\n return axios.get('./api/search', {\n params: episodesParams\n })\n },\n\n library_podcast_episodes (albumId) {\n var episodesParams = {\n type: 'tracks',\n expression: 'media_kind is podcast and songalbumid is \"' + albumId + '\" ORDER BY date_released DESC'\n }\n return axios.get('./api/search', {\n params: episodesParams\n })\n },\n\n library_add (url) {\n return axios.post('./api/library/add', undefined, { params: { url: url } })\n },\n\n library_playlist_delete (playlistId) {\n return axios.delete('./api/library/playlists/' + playlistId, undefined)\n },\n\n library_playlists () {\n return axios.get('./api/library/playlists')\n },\n\n library_playlist_folder (playlistId = 0) {\n return axios.get('./api/library/playlists/' + playlistId + '/playlists')\n },\n\n library_playlist (playlistId) {\n return axios.get('./api/library/playlists/' + playlistId)\n },\n\n library_playlist_tracks (playlistId) {\n return axios.get('./api/library/playlists/' + playlistId + '/tracks')\n },\n\n library_track (trackId) {\n return axios.get('./api/library/tracks/' + trackId)\n },\n\n library_track_playlists (trackId) {\n return axios.get('./api/library/tracks/' + trackId + '/playlists')\n },\n\n library_track_update (trackId, attributes = {}) {\n return axios.put('./api/library/tracks/' + trackId, undefined, { params: attributes })\n },\n\n library_files (directory = undefined) {\n var filesParams = { directory: directory }\n return axios.get('./api/library/files', {\n params: filesParams\n })\n },\n\n search (searchParams) {\n return axios.get('./api/search', {\n params: searchParams\n })\n },\n\n spotify () {\n return axios.get('./api/spotify')\n },\n\n spotify_login (credentials) {\n return axios.post('./api/spotify-login', credentials)\n },\n\n lastfm () {\n return axios.get('./api/lastfm')\n },\n\n lastfm_login (credentials) {\n return axios.post('./api/lastfm-login', credentials)\n },\n\n lastfm_logout (credentials) {\n return axios.get('./api/lastfm-logout')\n },\n\n pairing () {\n return axios.get('./api/pairing')\n },\n\n pairing_kickoff (pairingReq) {\n return axios.post('./api/pairing', pairingReq)\n },\n\n artwork_url_append_size_params (artworkUrl, maxwidth = 600, maxheight = 600) {\n if (artworkUrl && artworkUrl.startsWith('/')) {\n if (artworkUrl.includes('?')) {\n return artworkUrl + '&maxwidth=' + maxwidth + '&maxheight=' + maxheight\n }\n return artworkUrl + '?maxwidth=' + maxwidth + '&maxheight=' + maxheight\n }\n return artworkUrl\n }\n}\n","<template>\n <nav class=\"fd-top-navbar navbar is-light is-fixed-top\" :style=\"zindex\" role=\"navigation\" aria-label=\"main navigation\">\n <div class=\"navbar-brand\">\n <navbar-item-link to=\"/playlists\" v-if=\"is_visible_playlists\">\n <span class=\"icon\"><i class=\"mdi mdi-library-music\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/music\" v-if=\"is_visible_music\">\n <span class=\"icon\"><i class=\"mdi mdi-music\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/podcasts\" v-if=\"is_visible_podcasts\">\n <span class=\"icon\"><i class=\"mdi mdi-microphone\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/audiobooks\" v-if=\"is_visible_audiobooks\">\n <span class=\"icon\"><i class=\"mdi mdi-book-open-variant\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/radio\" v-if=\"is_visible_radio\">\n <span class=\"icon\"><i class=\"mdi mdi-radio\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/files\" v-if=\"is_visible_files\">\n <span class=\"icon\"><i class=\"mdi mdi-folder-open\"></i></span>\n </navbar-item-link>\n <navbar-item-link to=\"/search\" v-if=\"is_visible_search\">\n <span class=\"icon\"><i class=\"mdi mdi-magnify\"></i></span>\n </navbar-item-link>\n\n <div class=\"navbar-burger\" @click=\"show_burger_menu = !show_burger_menu\" :class=\"{ 'is-active': show_burger_menu }\">\n <span></span>\n <span></span>\n <span></span>\n </div>\n </div>\n\n <div class=\"navbar-menu\" :class=\"{ 'is-active': show_burger_menu }\">\n <div class=\"navbar-start\">\n </div>\n\n <div class=\"navbar-end\">\n\n <!-- Burger menu entries -->\n <div class=\"navbar-item has-dropdown is-hoverable\"\n :class=\"{ 'is-active': show_settings_menu }\"\n @click=\"on_click_outside_settings\">\n <a class=\"navbar-link is-arrowless\">\n <span class=\"icon is-hidden-touch\"><i class=\"mdi mdi-24px mdi-menu\"></i></span>\n <span class=\"is-hidden-desktop has-text-weight-bold\">forked-daapd</span>\n </a>\n\n <div class=\"navbar-dropdown is-right\">\n\n <navbar-item-link to=\"/playlists\"><span class=\"icon\"><i class=\"mdi mdi-library-music\"></i></span> <b>Playlists</b></navbar-item-link>\n <navbar-item-link to=\"/music\" exact><span class=\"icon\"><i class=\"mdi mdi-music\"></i></span> <b>Music</b></navbar-item-link>\n <navbar-item-link to=\"/music/artists\"><span class=\"fd-navbar-item-level2\">Artists</span></navbar-item-link>\n <navbar-item-link to=\"/music/albums\"><span class=\"fd-navbar-item-level2\">Albums</span></navbar-item-link>\n <navbar-item-link to=\"/music/genres\"><span class=\"fd-navbar-item-level2\">Genres</span></navbar-item-link>\n <navbar-item-link to=\"/music/spotify\" v-if=\"spotify_enabled\"><span class=\"fd-navbar-item-level2\">Spotify</span></navbar-item-link>\n <navbar-item-link to=\"/podcasts\"><span class=\"icon\"><i class=\"mdi mdi-microphone\"></i></span> <b>Podcasts</b></navbar-item-link>\n <navbar-item-link to=\"/audiobooks\"><span class=\"icon\"><i class=\"mdi mdi-book-open-variant\"></i></span> <b>Audiobooks</b></navbar-item-link>\n <navbar-item-link to=\"/radio\"><span class=\"icon\"><i class=\"mdi mdi-radio\"></i></span> <b>Radio</b></navbar-item-link>\n <navbar-item-link to=\"/files\"><span class=\"icon\"><i class=\"mdi mdi-folder-open\"></i></span> <b>Files</b></navbar-item-link>\n <navbar-item-link to=\"/search\"><span class=\"icon\"><i class=\"mdi mdi-magnify\"></i></span> <b>Search</b></navbar-item-link>\n <hr class=\"fd-navbar-divider\">\n\n <navbar-item-link to=\"/settings/webinterface\">Settings</navbar-item-link>\n <a class=\"navbar-item\" @click.stop.prevent=\"show_update_library = true; show_settings_menu = false; show_burger_menu = false\">\n Update Library\n </a>\n <navbar-item-link to=\"/about\">About</navbar-item-link>\n\n <div class=\"navbar-item is-hidden-desktop\" style=\"margin-bottom: 2.5rem;\"></div>\n </div>\n </div>\n </div>\n </div>\n\n <modal-dialog\n :show=\"show_update_library\"\n title=\"Update library\"\n :ok_action=\"library.updating ? '' : 'Rescan'\"\n close_action=\"Close\"\n @ok=\"update_library\"\n @close=\"show_update_library = false\">\n <template slot=\"modal-content\">\n <div v-if=\"!library.updating\">\n <p class=\"mb-3\">Scan for new, deleted and modified files</p>\n <div class=\"field\">\n <label class=\"checkbox is-size-7 is-small\">\n <input type=\"checkbox\" v-model=\"rescan_metadata\">\n Rescan metadata for unmodified files\n </label>\n </div>\n </div>\n <div v-else>\n <p class=\"mb-3\">Library update in progress ...</p>\n </div>\n </template>\n </modal-dialog>\n\n <div class=\"is-overlay\" v-show=\"show_settings_menu\"\n style=\"z-index:10; width: 100vw; height:100vh;\"\n @click=\"show_settings_menu = false\"></div>\n </nav>\n</template>\n\n<script>\nimport NavbarItemLink from './NavbarItemLink'\nimport ModalDialog from '@/components/ModalDialog'\nimport * as types from '@/store/mutation_types'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'NavbarTop',\n components: { NavbarItemLink, ModalDialog },\n\n data () {\n return {\n show_settings_menu: false,\n show_update_library: false,\n rescan_metadata: false\n }\n },\n\n computed: {\n is_visible_playlists () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_playlists').value\n },\n is_visible_music () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_music').value\n },\n is_visible_podcasts () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_podcasts').value\n },\n is_visible_audiobooks () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_audiobooks').value\n },\n is_visible_radio () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_radio').value\n },\n is_visible_files () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_files').value\n },\n is_visible_search () {\n return this.$store.getters.settings_option('webinterface', 'show_menu_item_search').value\n },\n\n player () {\n return this.$store.state.player\n },\n\n config () {\n return this.$store.state.config\n },\n\n library () {\n return this.$store.state.library\n },\n\n audiobooks () {\n return this.$store.state.audiobooks_count\n },\n\n podcasts () {\n return this.$store.state.podcasts_count\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n show_burger_menu: {\n get () {\n return this.$store.state.show_burger_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_BURGER_MENU, value)\n }\n },\n\n show_player_menu () {\n return this.$store.state.show_player_menu\n },\n\n zindex () {\n if (this.show_player_menu) {\n return 'z-index: 20'\n }\n return ''\n }\n },\n\n methods: {\n on_click_outside_settings () {\n this.show_settings_menu = !this.show_settings_menu\n },\n\n update_library () {\n if (this.rescan_metadata) {\n webapi.library_rescan()\n } else {\n webapi.library_update()\n }\n }\n },\n\n watch: {\n $route (to, from) {\n this.show_settings_menu = false\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarTop.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarTop.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarTop.vue?vue&type=template&id=bf9ea990&\"\nimport script from \"./NavbarTop.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarTop.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('nav',{staticClass:\"fd-bottom-navbar navbar is-white is-fixed-bottom\",class:{ 'is-transparent': _vm.is_now_playing_page, 'is-dark': !_vm.is_now_playing_page },style:(_vm.zindex),attrs:{\"role\":\"navigation\",\"aria-label\":\"player controls\"}},[_c('div',{staticClass:\"navbar-brand fd-expanded\"},[_c('navbar-item-link',{attrs:{\"to\":\"/\",\"exact\":\"\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-24px mdi-playlist-play\"})])]),(!_vm.is_now_playing_page)?_c('router-link',{staticClass:\"navbar-item is-expanded is-clipped\",attrs:{\"to\":\"/now-playing\",\"active-class\":\"is-active\",\"exact\":\"\"}},[_c('div',{staticClass:\"is-clipped\"},[_c('p',{staticClass:\"is-size-7 fd-is-text-clipped\"},[_c('strong',[_vm._v(_vm._s(_vm.now_playing.title))]),_c('br'),_vm._v(\" \"+_vm._s(_vm.now_playing.artist)),(_vm.now_playing.data_kind === 'url')?_c('span',[_vm._v(\" - \"+_vm._s(_vm.now_playing.album))]):_vm._e()])])]):_vm._e(),(_vm.is_now_playing_page)?_c('player-button-previous',{staticClass:\"navbar-item fd-margin-left-auto\",attrs:{\"icon_style\":\"mdi-24px\"}}):_vm._e(),(_vm.is_now_playing_page)?_c('player-button-seek-back',{staticClass:\"navbar-item\",attrs:{\"seek_ms\":\"10000\",\"icon_style\":\"mdi-24px\"}}):_vm._e(),_c('player-button-play-pause',{staticClass:\"navbar-item\",attrs:{\"icon_style\":\"mdi-36px\",\"show_disabled_message\":\"\"}}),(_vm.is_now_playing_page)?_c('player-button-seek-forward',{staticClass:\"navbar-item\",attrs:{\"seek_ms\":\"30000\",\"icon_style\":\"mdi-24px\"}}):_vm._e(),(_vm.is_now_playing_page)?_c('player-button-next',{staticClass:\"navbar-item\",attrs:{\"icon_style\":\"mdi-24px\"}}):_vm._e(),_c('a',{staticClass:\"navbar-item fd-margin-left-auto is-hidden-desktop\",on:{\"click\":function($event){_vm.show_player_menu = !_vm.show_player_menu}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-chevron-up': !_vm.show_player_menu, 'mdi-chevron-down': _vm.show_player_menu }})])]),_c('div',{staticClass:\"navbar-item has-dropdown has-dropdown-up fd-margin-left-auto is-hidden-touch\",class:{ 'is-active': _vm.show_player_menu }},[_c('a',{staticClass:\"navbar-link is-arrowless\",on:{\"click\":function($event){_vm.show_player_menu = !_vm.show_player_menu}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-chevron-up': !_vm.show_player_menu, 'mdi-chevron-down': _vm.show_player_menu }})])]),_c('div',{staticClass:\"navbar-dropdown is-right is-boxed\",staticStyle:{\"margin-right\":\"6px\",\"margin-bottom\":\"6px\",\"border-radius\":\"6px\"}},[_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",on:{\"click\":_vm.toggle_mute_volume}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-volume-off': _vm.player.volume <= 0, 'mdi-volume-high': _vm.player.volume > 0 }})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\"},[_vm._v(\"Volume\")]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"value\":_vm.player.volume},on:{\"change\":_vm.set_volume}})],1)])])])]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_vm._l((_vm.outputs),function(output){return _c('navbar-item-output',{key:output.id,attrs:{\"output\":output}})}),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",class:{ 'is-loading': _vm.loading }},[_c('span',{staticClass:\"icon fd-has-action\",class:{ 'has-text-grey-light': !_vm.playing && !_vm.loading, 'is-loading': _vm.loading },on:{\"click\":_vm.togglePlay}},[_c('i',{staticClass:\"mdi mdi-18px mdi-radio-tower\"})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\",class:{ 'has-text-grey-light': !_vm.playing }},[_vm._v(\"HTTP stream \"),_vm._m(0)]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"disabled\":!_vm.playing,\"value\":_vm.stream_volume},on:{\"change\":_vm.set_stream_volume}})],1)])])])]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile fd-expanded\"},[_c('div',{staticClass:\"level-item\"},[_c('div',{staticClass:\"buttons has-addons\"},[_c('player-button-repeat',{staticClass:\"button\"}),_c('player-button-shuffle',{staticClass:\"button\"}),_c('player-button-consume',{staticClass:\"button\"})],1)])])])],2)])],1),_c('div',{staticClass:\"navbar-menu is-hidden-desktop\",class:{ 'is-active': _vm.show_player_menu }},[_c('div',{staticClass:\"navbar-start\"}),_c('div',{staticClass:\"navbar-end\"},[_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('player-button-repeat',{staticClass:\"button\",attrs:{\"icon_style\":\"mdi-18px\"}}),_c('player-button-shuffle',{staticClass:\"button\",attrs:{\"icon_style\":\"mdi-18px\"}}),_c('player-button-consume',{staticClass:\"button\",attrs:{\"icon_style\":\"mdi-18px\"}})],1)]),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",on:{\"click\":_vm.toggle_mute_volume}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-18px\",class:{ 'mdi-volume-off': _vm.player.volume <= 0, 'mdi-volume-high': _vm.player.volume > 0 }})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\"},[_vm._v(\"Volume\")]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"value\":_vm.player.volume},on:{\"change\":_vm.set_volume}})],1)])])])]),_vm._l((_vm.outputs),function(output){return _c('navbar-item-output',{key:output.id,attrs:{\"output\":output}})}),_c('hr',{staticClass:\"fd-navbar-divider\"}),_c('div',{staticClass:\"navbar-item fd-has-margin-bottom\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\",class:{ 'is-loading': _vm.loading }},[_c('span',{staticClass:\"icon fd-has-action\",class:{ 'has-text-grey-light': !_vm.playing && !_vm.loading, 'is-loading': _vm.loading },on:{\"click\":_vm.togglePlay}},[_c('i',{staticClass:\"mdi mdi-18px mdi-radio-tower\"})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\",class:{ 'has-text-grey-light': !_vm.playing }},[_vm._v(\"HTTP stream \"),_vm._m(1)]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"disabled\":!_vm.playing,\"value\":_vm.stream_volume},on:{\"change\":_vm.set_stream_volume}})],1)])])])])],2)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"stream.mp3\"}},[_c('span',{staticClass:\"is-lowercase\"},[_vm._v(\"(stream.mp3)\")])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"href\":\"stream.mp3\"}},[_c('span',{staticClass:\"is-lowercase\"},[_vm._v(\"(stream.mp3)\")])])}]\n\nexport { render, staticRenderFns }","/**\n * Audio handler object\n * Taken from https://github.com/rainner/soma-fm-player (released under MIT licence)\n */\nexport default {\n _audio: new Audio(),\n _context: null,\n _source: null,\n _gain: null,\n\n // setup audio routing\n setupAudio () {\n var AudioContext = window.AudioContext || window.webkitAudioContext\n this._context = new AudioContext()\n this._source = this._context.createMediaElementSource(this._audio)\n this._gain = this._context.createGain()\n\n this._source.connect(this._gain)\n this._gain.connect(this._context.destination)\n\n this._audio.addEventListener('canplaythrough', e => {\n this._audio.play()\n })\n this._audio.addEventListener('canplay', e => {\n this._audio.play()\n })\n return this._audio\n },\n\n // set audio volume\n setVolume (volume) {\n if (!this._gain) return\n volume = parseFloat(volume) || 0.0\n volume = (volume < 0) ? 0 : volume\n volume = (volume > 1) ? 1 : volume\n this._gain.gain.value = volume\n },\n\n // play audio source url\n playSource (source) {\n this.stopAudio()\n this._context.resume().then(() => {\n this._audio.src = String(source || '') + '?x=' + Date.now()\n this._audio.crossOrigin = 'anonymous'\n this._audio.load()\n })\n },\n\n // stop playing audio\n stopAudio () {\n try { this._audio.pause() } catch (e) {}\n try { this._audio.stop() } catch (e) {}\n try { this._audio.close() } catch (e) {}\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left fd-expanded\"},[_c('div',{staticClass:\"level-item\",staticStyle:{\"flex-grow\":\"0\"}},[_c('a',{staticClass:\"button is-white is-small\"},[_c('span',{staticClass:\"icon fd-has-action\",class:{ 'has-text-grey-light': !_vm.output.selected },on:{\"click\":_vm.set_enabled}},[_c('i',{staticClass:\"mdi mdi-18px\",class:_vm.type_class})])])]),_c('div',{staticClass:\"level-item fd-expanded\"},[_c('div',{staticClass:\"fd-expanded\"},[_c('p',{staticClass:\"heading\",class:{ 'has-text-grey-light': !_vm.output.selected }},[_vm._v(_vm._s(_vm.output.name))]),_c('range-slider',{staticClass:\"slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":\"100\",\"step\":\"1\",\"disabled\":!_vm.output.selected,\"value\":_vm.volume},on:{\"change\":_vm.set_volume}})],1)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\">\n <span class=\"icon fd-has-action\"\n :class=\"{ 'has-text-grey-light': !output.selected }\"\n v-on:click=\"set_enabled\">\n <i class=\"mdi mdi-18px\" :class=\"type_class\"></i>\n </span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\" :class=\"{ 'has-text-grey-light': !output.selected }\">{{ output.name }}</p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :disabled=\"!output.selected\"\n :value=\"volume\"\n @change=\"set_volume\" >\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'NavbarItemOutput',\n components: { RangeSlider },\n\n props: ['output'],\n\n computed: {\n type_class () {\n if (this.output.type === 'AirPlay') {\n return 'mdi-airplay'\n } else if (this.output.type === 'Chromecast') {\n return 'mdi-cast'\n } else if (this.output.type === 'fifo') {\n return 'mdi-pipe'\n } else {\n return 'mdi-server'\n }\n },\n\n volume () {\n return this.output.selected ? this.output.volume : 0\n }\n },\n\n methods: {\n play_next: function () {\n webapi.player_next()\n },\n\n set_volume: function (newVolume) {\n webapi.player_output_volume(this.output.id, newVolume)\n },\n\n set_enabled: function () {\n const values = {\n selected: !this.output.selected\n }\n webapi.output_update(this.output.id, values)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemOutput.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarItemOutput.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarItemOutput.vue?vue&type=template&id=16ee9e13&\"\nimport script from \"./NavbarItemOutput.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarItemOutput.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.toggle_play_pause}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:[_vm.icon_style, { 'mdi-play': !_vm.is_playing, 'mdi-pause': _vm.is_playing && _vm.is_pause_allowed, 'mdi-stop': _vm.is_playing && !_vm.is_pause_allowed }]})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_play_pause\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"[icon_style, { 'mdi-play': !is_playing, 'mdi-pause': is_playing && is_pause_allowed, 'mdi-stop': is_playing && !is_pause_allowed }]\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonPlayPause',\n\n props: {\n icon_style: String,\n show_disabled_message: Boolean\n },\n\n computed: {\n is_playing () {\n return this.$store.state.player.state === 'play'\n },\n\n is_pause_allowed () {\n return (this.$store.getters.now_playing &&\n this.$store.getters.now_playing.data_kind !== 'pipe')\n },\n\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0\n }\n },\n\n methods: {\n toggle_play_pause: function () {\n if (this.disabled) {\n if (this.show_disabled_message) {\n this.$store.dispatch('add_notification', { text: 'Queue is empty', type: 'info', topic: 'connection', timeout: 2000 })\n }\n return\n }\n\n if (this.is_playing && this.is_pause_allowed) {\n webapi.player_pause()\n } else if (this.is_playing && !this.is_pause_allowed) {\n webapi.player_stop()\n } else {\n webapi.player_play()\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonPlayPause.vue?vue&type=template&id=160e1e94&\"\nimport script from \"./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonPlayPause.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.play_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-skip-forward\",class:_vm.icon_style})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"play_next\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi mdi-skip-forward\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonNext',\n\n props: {\n icon_style: String\n },\n\n computed: {\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0\n }\n },\n\n methods: {\n play_next: function () {\n if (this.disabled) {\n return\n }\n\n webapi.player_next()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonNext.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonNext.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonNext.vue?vue&type=template&id=105fa0b7&\"\nimport script from \"./PlayerButtonNext.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonNext.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.play_previous}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-skip-backward\",class:_vm.icon_style})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"play_previous\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi mdi-skip-backward\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonPrevious',\n\n props: {\n icon_style: String\n },\n\n computed: {\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0\n }\n },\n\n methods: {\n play_previous: function () {\n if (this.disabled) {\n return\n }\n\n webapi.player_previous()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonPrevious.vue?vue&type=template&id=de93cb4e&\"\nimport script from \"./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonPrevious.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ 'is-warning': _vm.is_shuffle },on:{\"click\":_vm.toggle_shuffle_mode}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:[_vm.icon_style, { 'mdi-shuffle': _vm.is_shuffle, 'mdi-shuffle-disabled': !_vm.is_shuffle }]})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_shuffle_mode\" :class=\"{ 'is-warning': is_shuffle }\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"[icon_style, { 'mdi-shuffle': is_shuffle, 'mdi-shuffle-disabled': !is_shuffle }]\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonShuffle',\n\n props: {\n icon_style: String\n },\n\n computed: {\n is_shuffle () {\n return this.$store.state.player.shuffle\n }\n },\n\n methods: {\n toggle_shuffle_mode: function () {\n webapi.player_shuffle(!this.is_shuffle)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonShuffle.vue?vue&type=template&id=6c682bca&\"\nimport script from \"./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonShuffle.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ 'is-warning': _vm.is_consume },on:{\"click\":_vm.toggle_consume_mode}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-fire\",class:_vm.icon_style})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_consume_mode\" :class=\"{ 'is-warning': is_consume }\">\n <span class=\"icon\"><i class=\"mdi mdi-fire\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonConsume',\n\n props: {\n icon_style: String\n },\n\n computed: {\n is_consume () {\n return this.$store.state.player.consume\n }\n },\n\n methods: {\n toggle_consume_mode: function () {\n webapi.player_consume(!this.is_consume)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonConsume.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonConsume.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonConsume.vue?vue&type=template&id=652605a0&\"\nimport script from \"./PlayerButtonConsume.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonConsume.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{class:{ 'is-warning': !_vm.is_repeat_off },on:{\"click\":_vm.toggle_repeat_mode}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:[_vm.icon_style, { 'mdi-repeat': _vm.is_repeat_all, 'mdi-repeat-once': _vm.is_repeat_single, 'mdi-repeat-off': _vm.is_repeat_off }]})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"toggle_repeat_mode\" :class=\"{ 'is-warning': !is_repeat_off }\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"[icon_style, { 'mdi-repeat': is_repeat_all, 'mdi-repeat-once': is_repeat_single, 'mdi-repeat-off': is_repeat_off }]\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonRepeat',\n\n props: {\n icon_style: String\n },\n\n computed: {\n is_repeat_all () {\n return this.$store.state.player.repeat === 'all'\n },\n is_repeat_single () {\n return this.$store.state.player.repeat === 'single'\n },\n is_repeat_off () {\n return !this.is_repeat_all && !this.is_repeat_single\n }\n },\n\n methods: {\n toggle_repeat_mode: function () {\n if (this.is_repeat_all) {\n webapi.player_repeat('single')\n } else if (this.is_repeat_single) {\n webapi.player_repeat('off')\n } else {\n webapi.player_repeat('all')\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonRepeat.vue?vue&type=template&id=76c131bd&\"\nimport script from \"./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonRepeat.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.seek}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-rewind\",class:_vm.icon_style})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"seek\" :disabled=\"disabled\" v-if=\"visible\">\n <span class=\"icon\"><i class=\"mdi mdi-rewind\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonSeekBack',\n props: ['seek_ms', 'icon_style'],\n\n computed: {\n now_playing () {\n return this.$store.getters.now_playing\n },\n is_stopped () {\n return this.$store.state.player.state === 'stop'\n },\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0 || this.is_stopped ||\n this.now_playing.data_kind === 'pipe'\n },\n visible () {\n return ['podcast', 'audiobook'].includes(this.now_playing.media_kind)\n }\n },\n\n methods: {\n seek: function () {\n if (!this.disabled) {\n webapi.player_seek(this.seek_ms * -1)\n }\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonSeekBack.vue?vue&type=template&id=6e68196d&\"\nimport script from \"./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonSeekBack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.visible)?_c('a',{attrs:{\"disabled\":_vm.disabled},on:{\"click\":_vm.seek}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-fast-forward\",class:_vm.icon_style})])]):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a @click=\"seek\" :disabled=\"disabled\" v-if=\"visible\">\n <span class=\"icon\"><i class=\"mdi mdi-fast-forward\" :class=\"icon_style\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonSeekForward',\n props: ['seek_ms', 'icon_style'],\n\n computed: {\n now_playing () {\n return this.$store.getters.now_playing\n },\n is_stopped () {\n return this.$store.state.player.state === 'stop'\n },\n disabled () {\n return !this.$store.state.queue || this.$store.state.queue.count <= 0 || this.is_stopped ||\n this.now_playing.data_kind === 'pipe'\n },\n visible () {\n return ['podcast', 'audiobook'].includes(this.now_playing.media_kind)\n }\n },\n\n methods: {\n seek: function () {\n if (!this.disabled) {\n webapi.player_seek(this.seek_ms)\n }\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PlayerButtonSeekForward.vue?vue&type=template&id=2f43a35a&\"\nimport script from \"./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"\nexport * from \"./PlayerButtonSeekForward.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <nav class=\"fd-bottom-navbar navbar is-white is-fixed-bottom\" :style=\"zindex\" :class=\"{ 'is-transparent': is_now_playing_page, 'is-dark': !is_now_playing_page }\" role=\"navigation\" aria-label=\"player controls\">\n <div class=\"navbar-brand fd-expanded\">\n\n <!-- Link to queue -->\n <navbar-item-link to=\"/\" exact>\n <span class=\"icon\"><i class=\"mdi mdi-24px mdi-playlist-play\"></i></span>\n </navbar-item-link>\n\n <!-- Now playing artist/title (not visible on \"now playing\" page) -->\n <router-link to=\"/now-playing\" v-if=\"!is_now_playing_page\" class=\"navbar-item is-expanded is-clipped\" active-class=\"is-active\" exact>\n <div class=\"is-clipped\">\n <p class=\"is-size-7 fd-is-text-clipped\">\n <strong>{{ now_playing.title }}</strong><br>\n {{ now_playing.artist }}<span v-if=\"now_playing.data_kind === 'url'\"> - {{ now_playing.album }}</span>\n </p>\n </div>\n </router-link>\n\n <!-- Skip previous (not visible on \"now playing\" page) -->\n <player-button-previous v-if=\"is_now_playing_page\" class=\"navbar-item fd-margin-left-auto\" icon_style=\"mdi-24px\"></player-button-previous>\n <player-button-seek-back v-if=\"is_now_playing_page\" seek_ms=\"10000\" class=\"navbar-item\" icon_style=\"mdi-24px\"></player-button-seek-back>\n <!-- Play/pause -->\n <player-button-play-pause class=\"navbar-item\" icon_style=\"mdi-36px\" show_disabled_message></player-button-play-pause>\n <player-button-seek-forward v-if=\"is_now_playing_page\" seek_ms=\"30000\" class=\"navbar-item\" icon_style=\"mdi-24px\"></player-button-seek-forward>\n <!-- Skip next (not visible on \"now playing\" page) -->\n <player-button-next v-if=\"is_now_playing_page\" class=\"navbar-item\" icon_style=\"mdi-24px\"></player-button-next>\n\n <!-- Player menu button (only visible on mobile and tablet) -->\n <a class=\"navbar-item fd-margin-left-auto is-hidden-desktop\" @click=\"show_player_menu = !show_player_menu\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\" :class=\"{ 'mdi-chevron-up': !show_player_menu, 'mdi-chevron-down': show_player_menu }\"></i></span>\n </a>\n\n <!-- Player menu dropup menu (only visible on desktop) -->\n <div class=\"navbar-item has-dropdown has-dropdown-up fd-margin-left-auto is-hidden-touch\"\n :class=\"{ 'is-active': show_player_menu }\">\n <a class=\"navbar-link is-arrowless\"\n @click=\"show_player_menu = !show_player_menu\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\"\n :class=\"{ 'mdi-chevron-up': !show_player_menu, 'mdi-chevron-down': show_player_menu }\"></i></span>\n </a>\n\n <div class=\"navbar-dropdown is-right is-boxed\" style=\"margin-right: 6px; margin-bottom: 6px; border-radius: 6px;\">\n <div class=\"navbar-item\">\n <!-- Outputs: master volume -->\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" @click=\"toggle_mute_volume\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\" :class=\"{ 'mdi-volume-off': player.volume <= 0, 'mdi-volume-high': player.volume > 0 }\"></i></span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\">Volume</p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :value=\"player.volume\"\n @change=\"set_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Outputs: master volume -->\n <hr class=\"fd-navbar-divider\">\n <navbar-item-output v-for=\"output in outputs\" :key=\"output.id\" :output=\"output\"></navbar-item-output>\n\n <!-- Outputs: stream volume -->\n <hr class=\"fd-navbar-divider\">\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" :class=\"{ 'is-loading': loading }\"><span class=\"icon fd-has-action\" :class=\"{ 'has-text-grey-light': !playing && !loading, 'is-loading': loading }\" @click=\"togglePlay\"><i class=\"mdi mdi-18px mdi-radio-tower\"></i></span></a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\" :class=\"{ 'has-text-grey-light': !playing }\">HTTP stream <a href=\"stream.mp3\"><span class=\"is-lowercase\">(stream.mp3)</span></a></p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :disabled=\"!playing\"\n :value=\"stream_volume\"\n @change=\"set_stream_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Playback controls -->\n <hr class=\"fd-navbar-divider\">\n <div class=\"navbar-item\">\n <div class=\"level is-mobile fd-expanded\">\n <div class=\"level-item\">\n <div class=\"buttons has-addons\">\n <player-button-repeat class=\"button\"></player-button-repeat>\n <player-button-shuffle class=\"button\"></player-button-shuffle>\n <player-button-consume class=\"button\"></player-button-consume>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Player menu (only visible on mobile and tablet) -->\n <div class=\"navbar-menu is-hidden-desktop\" :class=\"{ 'is-active': show_player_menu }\">\n <div class=\"navbar-start\">\n </div>\n <div class=\"navbar-end\">\n <!-- Repeat/shuffle/consume -->\n <div class=\"navbar-item\">\n <div class=\"buttons is-centered\">\n <player-button-repeat class=\"button\" icon_style=\"mdi-18px\"></player-button-repeat>\n <player-button-shuffle class=\"button\" icon_style=\"mdi-18px\"></player-button-shuffle>\n <player-button-consume class=\"button\" icon_style=\"mdi-18px\"></player-button-consume>\n </div>\n </div>\n\n <hr class=\"fd-navbar-divider\">\n\n <!-- Outputs: master volume -->\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" @click=\"toggle_mute_volume\">\n <span class=\"icon\"><i class=\"mdi mdi-18px\" :class=\"{ 'mdi-volume-off': player.volume <= 0, 'mdi-volume-high': player.volume > 0 }\"></i></span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\">Volume</p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :value=\"player.volume\"\n @change=\"set_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Outputs: speaker volumes -->\n <navbar-item-output v-for=\"output in outputs\" :key=\"output.id\" :output=\"output\"></navbar-item-output>\n\n <!-- Outputs: stream volume -->\n <hr class=\"fd-navbar-divider\">\n <div class=\"navbar-item fd-has-margin-bottom\">\n <div class=\"level is-mobile\">\n <div class=\"level-left fd-expanded\">\n <div class=\"level-item\" style=\"flex-grow: 0;\">\n <a class=\"button is-white is-small\" :class=\"{ 'is-loading': loading }\">\n <span class=\"icon fd-has-action\"\n :class=\"{ 'has-text-grey-light': !playing && !loading, 'is-loading': loading }\"\n @click=\"togglePlay\"><i class=\"mdi mdi-18px mdi-radio-tower\"></i>\n </span>\n </a>\n </div>\n <div class=\"level-item fd-expanded\">\n <div class=\"fd-expanded\">\n <p class=\"heading\" :class=\"{ 'has-text-grey-light': !playing }\">HTTP stream <a href=\"stream.mp3\"><span class=\"is-lowercase\">(stream.mp3)</span></a></p>\n <range-slider\n class=\"slider fd-has-action\"\n min=\"0\"\n max=\"100\"\n step=\"1\"\n :disabled=\"!playing\"\n :value=\"stream_volume\"\n @change=\"set_stream_volume\">\n </range-slider>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </nav>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport _audio from '@/audio'\nimport NavbarItemLink from './NavbarItemLink'\nimport NavbarItemOutput from './NavbarItemOutput'\nimport PlayerButtonPlayPause from '@/components/PlayerButtonPlayPause'\nimport PlayerButtonNext from '@/components/PlayerButtonNext'\nimport PlayerButtonPrevious from '@/components/PlayerButtonPrevious'\nimport PlayerButtonShuffle from '@/components/PlayerButtonShuffle'\nimport PlayerButtonConsume from '@/components/PlayerButtonConsume'\nimport PlayerButtonRepeat from '@/components/PlayerButtonRepeat'\nimport PlayerButtonSeekBack from '@/components/PlayerButtonSeekBack'\nimport PlayerButtonSeekForward from '@/components/PlayerButtonSeekForward'\nimport RangeSlider from 'vue-range-slider'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'NavbarBottom',\n components: {\n NavbarItemLink,\n NavbarItemOutput,\n RangeSlider,\n PlayerButtonPlayPause,\n PlayerButtonNext,\n PlayerButtonPrevious,\n PlayerButtonShuffle,\n PlayerButtonConsume,\n PlayerButtonRepeat,\n PlayerButtonSeekForward,\n PlayerButtonSeekBack\n },\n\n data () {\n return {\n old_volume: 0,\n\n playing: false,\n loading: false,\n stream_volume: 10,\n\n show_outputs_menu: false,\n show_desktop_outputs_menu: false\n }\n },\n\n computed: {\n show_player_menu: {\n get () {\n return this.$store.state.show_player_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_PLAYER_MENU, value)\n }\n },\n\n show_burger_menu () {\n return this.$store.state.show_burger_menu\n },\n\n zindex () {\n if (this.show_burger_menu) {\n return 'z-index: 20'\n }\n return ''\n },\n\n state () {\n return this.$store.state.player\n },\n now_playing () {\n return this.$store.getters.now_playing\n },\n is_now_playing_page () {\n return this.$route.path === '/now-playing'\n },\n outputs () {\n return this.$store.state.outputs\n },\n\n player () {\n return this.$store.state.player\n },\n\n config () {\n return this.$store.state.config\n }\n },\n\n methods: {\n on_click_outside_outputs () {\n this.show_outputs_menu = false\n },\n\n set_volume: function (newVolume) {\n webapi.player_volume(newVolume)\n },\n\n toggle_mute_volume: function () {\n if (this.player.volume > 0) {\n this.set_volume(0)\n } else {\n this.set_volume(this.old_volume)\n }\n },\n\n setupAudio: function () {\n const a = _audio.setupAudio()\n\n a.addEventListener('waiting', e => {\n this.playing = false\n this.loading = true\n })\n a.addEventListener('playing', e => {\n this.playing = true\n this.loading = false\n })\n a.addEventListener('ended', e => {\n this.playing = false\n this.loading = false\n })\n a.addEventListener('error', e => {\n this.closeAudio()\n this.$store.dispatch('add_notification', { text: 'HTTP stream error: failed to load stream or stopped loading due to network problem', type: 'danger' })\n this.playing = false\n this.loading = false\n })\n },\n\n // close active audio\n closeAudio: function () {\n _audio.stopAudio()\n this.playing = false\n },\n\n playChannel: function () {\n if (this.playing) {\n return\n }\n\n const channel = '/stream.mp3'\n this.loading = true\n _audio.playSource(channel)\n _audio.setVolume(this.stream_volume / 100)\n },\n\n togglePlay: function () {\n if (this.loading) {\n return\n }\n if (this.playing) {\n return this.closeAudio()\n }\n return this.playChannel()\n },\n\n set_stream_volume: function (newVolume) {\n this.stream_volume = newVolume\n _audio.setVolume(this.stream_volume / 100)\n }\n },\n\n watch: {\n '$store.state.player.volume' () {\n if (this.player.volume > 0) {\n this.old_volume = this.player.volume\n }\n }\n },\n\n // on app mounted\n mounted () {\n this.setupAudio()\n },\n\n // on app destroyed\n destroyed () {\n this.closeAudio()\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarBottom.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NavbarBottom.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./NavbarBottom.vue?vue&type=template&id=7bc29059&\"\nimport script from \"./NavbarBottom.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarBottom.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"fd-notifications\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-half\"},_vm._l((_vm.notifications),function(notification){return _c('div',{key:notification.id,staticClass:\"notification has-shadow \",class:['notification', notification.type ? (\"is-\" + (notification.type)) : '']},[_c('button',{staticClass:\"delete\",on:{\"click\":function($event){return _vm.remove(notification)}}}),_vm._v(\" \"+_vm._s(notification.text)+\" \")])}),0)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"fd-notifications\">\n <div class=\"columns is-centered\">\n <div class=\"column is-half\">\n <div class=\"notification has-shadow \" v-for=\"notification in notifications\" :key=\"notification.id\" :class=\"['notification', notification.type ? `is-${notification.type}` : '']\">\n <button class=\"delete\" v-on:click=\"remove(notification)\"></button>\n {{ notification.text }}\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'Notifications',\n components: { },\n\n data () {\n return { showNav: false }\n },\n\n computed: {\n notifications () {\n return this.$store.state.notifications.list\n }\n },\n\n methods: {\n remove: function (notification) {\n this.$store.commit(types.DELETE_NOTIFICATION, notification)\n }\n }\n}\n</script>\n\n<style>\n.fd-notifications {\n position: fixed;\n bottom: 60px;\n z-index: 20000;\n width: 100%;\n}\n.fd-notifications .notification {\n margin-bottom: 10px;\n margin-left: 24px;\n margin-right: 24px;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Notifications.vue?vue&type=template&id=45b704a5&\"\nimport script from \"./Notifications.vue?vue&type=script&lang=js&\"\nexport * from \"./Notifications.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Notifications.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" Remote pairing request \")]),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_pairing($event)}}},[_c('label',{staticClass:\"label\"},[_vm._v(\" \"+_vm._s(_vm.pairing.remote)+\" \")]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.pairing_req.pin),expression:\"pairing_req.pin\"}],ref:\"pin_field\",staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Enter pairing code\"},domProps:{\"value\":(_vm.pairing_req.pin)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.pairing_req, \"pin\", $event.target.value)}}})])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.kickoff_pairing}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cellphone-iphone\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Pair Remote\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n Remote pairing request\n </p>\n <form v-on:submit.prevent=\"kickoff_pairing\">\n <label class=\"label\">\n {{ pairing.remote }}\n </label>\n <div class=\"field\">\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Enter pairing code\" v-model=\"pairing_req.pin\" ref=\"pin_field\">\n </div>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"kickoff_pairing\">\n <span class=\"icon\"><i class=\"mdi mdi-cellphone-iphone\"></i></span> <span class=\"is-size-7\">Pair Remote</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogRemotePairing',\n props: ['show'],\n\n data () {\n return {\n pairing_req: { pin: '' }\n }\n },\n\n computed: {\n pairing () {\n return this.$store.state.pairing\n }\n },\n\n methods: {\n kickoff_pairing () {\n webapi.pairing_kickoff(this.pairing_req).then(() => {\n this.pairing_req.pin = ''\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.pin_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogRemotePairing.vue?vue&type=template&id=4491cb33&\"\nimport script from \"./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogRemotePairing.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div id=\"app\">\n <navbar-top />\n <vue-progress-bar class=\"fd-progress-bar\" />\n <transition name=\"fade\">\n <!-- Setting v-show to true on the router-view tag avoids jumpiness during transitions -->\n <router-view v-show=\"true\" />\n </transition>\n <modal-dialog-remote-pairing :show=\"pairing_active\" @close=\"pairing_active = false\" />\n <notifications v-show=\"!show_burger_menu\" />\n <navbar-bottom />\n <div class=\"fd-overlay-fullscreen\" v-show=\"show_burger_menu || show_player_menu\"\n @click=\"show_burger_menu = show_player_menu = false\"></div>\n </div>\n</template>\n\n<script>\nimport NavbarTop from '@/components/NavbarTop'\nimport NavbarBottom from '@/components/NavbarBottom'\nimport Notifications from '@/components/Notifications'\nimport ModalDialogRemotePairing from '@/components/ModalDialogRemotePairing'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport ReconnectingWebSocket from 'reconnectingwebsocket'\nimport moment from 'moment'\n\nexport default {\n name: 'App',\n components: { NavbarTop, NavbarBottom, Notifications, ModalDialogRemotePairing },\n template: '<App/>',\n\n data () {\n return {\n token_timer_id: 0,\n reconnect_attempts: 0,\n pairing_active: false\n }\n },\n\n computed: {\n show_burger_menu: {\n get () {\n return this.$store.state.show_burger_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_BURGER_MENU, value)\n }\n },\n show_player_menu: {\n get () {\n return this.$store.state.show_player_menu\n },\n set (value) {\n this.$store.commit(types.SHOW_PLAYER_MENU, value)\n }\n }\n },\n\n created: function () {\n moment.locale(navigator.language)\n this.connect()\n\n // Start the progress bar on app start\n this.$Progress.start()\n\n // Hook the progress bar to start before we move router-view\n this.$router.beforeEach((to, from, next) => {\n if (to.meta.show_progress) {\n if (to.meta.progress !== undefined) {\n const meta = to.meta.progress\n this.$Progress.parseMeta(meta)\n }\n this.$Progress.start()\n }\n next()\n })\n\n // hook the progress bar to finish after we've finished moving router-view\n this.$router.afterEach((to, from) => {\n if (to.meta.show_progress) {\n this.$Progress.finish()\n }\n })\n },\n\n methods: {\n connect: function () {\n this.$store.dispatch('add_notification', { text: 'Connecting to forked-daapd', type: 'info', topic: 'connection', timeout: 2000 })\n\n webapi.config().then(({ data }) => {\n this.$store.commit(types.UPDATE_CONFIG, data)\n this.$store.commit(types.HIDE_SINGLES, data.hide_singles)\n document.title = data.library_name\n\n this.open_ws()\n this.$Progress.finish()\n }).catch(() => {\n this.$store.dispatch('add_notification', { text: 'Failed to connect to forked-daapd', type: 'danger', topic: 'connection' })\n })\n },\n\n open_ws: function () {\n if (this.$store.state.config.websocket_port <= 0) {\n this.$store.dispatch('add_notification', { text: 'Missing websocket port', type: 'danger' })\n return\n }\n\n const vm = this\n\n var protocol = 'ws://'\n if (window.location.protocol === 'https:') {\n protocol = 'wss://'\n }\n\n var wsUrl = protocol + window.location.hostname + ':' + vm.$store.state.config.websocket_port\n if (process.env.NODE_ENV === 'development' && process.env.VUE_APP_WEBSOCKET_SERVER) {\n // If we are running in the development server, use the websocket url configured in .env.development\n wsUrl = process.env.VUE_APP_WEBSOCKET_SERVER\n }\n\n var socket = new ReconnectingWebSocket(\n wsUrl,\n 'notify',\n { reconnectInterval: 3000 }\n )\n\n socket.onopen = function () {\n vm.$store.dispatch('add_notification', { text: 'Connection to server established', type: 'primary', topic: 'connection', timeout: 2000 })\n vm.reconnect_attempts = 0\n socket.send(JSON.stringify({ notify: ['update', 'database', 'player', 'options', 'outputs', 'volume', 'spotify', 'lastfm', 'pairing'] }))\n\n vm.update_outputs()\n vm.update_player_status()\n vm.update_library_stats()\n vm.update_settings()\n vm.update_queue()\n vm.update_spotify()\n vm.update_lastfm()\n vm.update_pairing()\n }\n socket.onclose = function () {\n // vm.$store.dispatch('add_notification', { text: 'Connection closed', type: 'danger', timeout: 2000 })\n }\n socket.onerror = function () {\n vm.reconnect_attempts++\n vm.$store.dispatch('add_notification', { text: 'Connection lost. Reconnecting ... (' + vm.reconnect_attempts + ')', type: 'danger', topic: 'connection' })\n }\n socket.onmessage = function (response) {\n var data = JSON.parse(response.data)\n if (data.notify.includes('update') || data.notify.includes('database')) {\n vm.update_library_stats()\n }\n if (data.notify.includes('player') || data.notify.includes('options') || data.notify.includes('volume')) {\n vm.update_player_status()\n }\n if (data.notify.includes('outputs') || data.notify.includes('volume')) {\n vm.update_outputs()\n }\n if (data.notify.includes('queue')) {\n vm.update_queue()\n }\n if (data.notify.includes('spotify')) {\n vm.update_spotify()\n }\n if (data.notify.includes('lastfm')) {\n vm.update_lastfm()\n }\n if (data.notify.includes('pairing')) {\n vm.update_pairing()\n }\n }\n },\n\n update_library_stats: function () {\n webapi.library_stats().then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_STATS, data)\n })\n webapi.library_count('media_kind is audiobook').then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_AUDIOBOOKS_COUNT, data)\n })\n webapi.library_count('media_kind is podcast').then(({ data }) => {\n this.$store.commit(types.UPDATE_LIBRARY_PODCASTS_COUNT, data)\n })\n },\n\n update_outputs: function () {\n webapi.outputs().then(({ data }) => {\n this.$store.commit(types.UPDATE_OUTPUTS, data.outputs)\n })\n },\n\n update_player_status: function () {\n webapi.player_status().then(({ data }) => {\n this.$store.commit(types.UPDATE_PLAYER_STATUS, data)\n })\n },\n\n update_queue: function () {\n webapi.queue().then(({ data }) => {\n this.$store.commit(types.UPDATE_QUEUE, data)\n })\n },\n\n update_settings: function () {\n webapi.settings().then(({ data }) => {\n this.$store.commit(types.UPDATE_SETTINGS, data)\n })\n },\n\n update_lastfm: function () {\n webapi.lastfm().then(({ data }) => {\n this.$store.commit(types.UPDATE_LASTFM, data)\n })\n },\n\n update_spotify: function () {\n webapi.spotify().then(({ data }) => {\n this.$store.commit(types.UPDATE_SPOTIFY, data)\n\n if (this.token_timer_id > 0) {\n window.clearTimeout(this.token_timer_id)\n this.token_timer_id = 0\n }\n if (data.webapi_token_expires_in > 0 && data.webapi_token) {\n this.token_timer_id = window.setTimeout(this.update_spotify, 1000 * data.webapi_token_expires_in)\n }\n })\n },\n\n update_pairing: function () {\n webapi.pairing().then(({ data }) => {\n this.$store.commit(types.UPDATE_PAIRING, data)\n this.pairing_active = data.active\n })\n },\n\n update_is_clipped: function () {\n if (this.show_burger_menu || this.show_player_menu) {\n document.querySelector('html').classList.add('is-clipped')\n } else {\n document.querySelector('html').classList.remove('is-clipped')\n }\n }\n },\n\n watch: {\n 'show_burger_menu' () {\n this.update_is_clipped()\n },\n 'show_player_menu' () {\n this.update_is_clipped()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../node_modules/cache-loader/dist/cjs.js??ref--12-0!../node_modules/thread-loader/dist/cjs.js!../node_modules/babel-loader/lib/index.js!../node_modules/cache-loader/dist/cjs.js??ref--0-0!../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=4b81045b&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.queue.count)+\" tracks\")]),_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Queue\")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small\",class:{ 'is-info': _vm.show_only_next_items },on:{\"click\":_vm.update_show_next_items}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-arrow-collapse-down\"})]),_c('span',[_vm._v(\"Hide previous\")])]),_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.open_add_stream_dialog}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_c('span',[_vm._v(\"Add Stream\")])]),_c('a',{staticClass:\"button is-small\",class:{ 'is-info': _vm.edit_mode },on:{\"click\":function($event){_vm.edit_mode = !_vm.edit_mode}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-pencil\"})]),_c('span',[_vm._v(\"Edit\")])]),_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.queue_clear}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-delete-empty\"})]),_c('span',[_vm._v(\"Clear\")])]),(_vm.is_queue_save_allowed)?_c('a',{staticClass:\"button is-small\",attrs:{\"disabled\":_vm.queue_items.length === 0},on:{\"click\":_vm.save_dialog}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save\"})]),_c('span',[_vm._v(\"Save\")])]):_vm._e()])]),_c('template',{slot:\"content\"},[_c('draggable',{attrs:{\"handle\":\".handle\"},on:{\"end\":_vm.move_item},model:{value:(_vm.queue_items),callback:function ($$v) {_vm.queue_items=$$v},expression:\"queue_items\"}},_vm._l((_vm.queue_items),function(item,index){return _c('list-item-queue-item',{key:item.id,attrs:{\"item\":item,\"position\":index,\"current_position\":_vm.current_position,\"show_only_next_items\":_vm.show_only_next_items,\"edit_mode\":_vm.edit_mode}},[_c('template',{slot:\"actions\"},[(!_vm.edit_mode)?_c('a',{on:{\"click\":function($event){return _vm.open_dialog(item)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])]):_vm._e(),(item.id !== _vm.state.item_id && _vm.edit_mode)?_c('a',{on:{\"click\":function($event){return _vm.remove(item)}}},[_c('span',{staticClass:\"icon has-text-grey\"},[_c('i',{staticClass:\"mdi mdi-delete mdi-18px\"})])]):_vm._e()])],2)}),1),_c('modal-dialog-queue-item',{attrs:{\"show\":_vm.show_details_modal,\"item\":_vm.selected_item},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('modal-dialog-add-url-stream',{attrs:{\"show\":_vm.show_url_modal},on:{\"close\":function($event){_vm.show_url_modal = false}}}),(_vm.is_queue_save_allowed)?_c('modal-dialog-playlist-save',{attrs:{\"show\":_vm.show_pls_save_modal},on:{\"close\":function($event){_vm.show_pls_save_modal = false}}}):_vm._e()],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-content\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[(_vm.$slots['options'])?_c('section',[_c('div',{directives:[{name:\"observe-visibility\",rawName:\"v-observe-visibility\",value:(_vm.observer_options),expression:\"observer_options\"}],staticStyle:{\"height\":\"2px\"}}),_vm._t(\"options\"),_c('nav',{staticClass:\"buttons is-centered\",staticStyle:{\"margin-bottom\":\"6px\",\"margin-top\":\"16px\"}},[(!_vm.options_visible)?_c('a',{staticClass:\"button is-small is-white\",on:{\"click\":_vm.scroll_to_top}},[_vm._m(0)]):_c('a',{staticClass:\"button is-small is-white\",on:{\"click\":_vm.scroll_to_content}},[_vm._m(1)])])],2):_vm._e(),_c('div',{class:{'fd-content-with-option': _vm.$slots['options']}},[_c('nav',{staticClass:\"level\",attrs:{\"id\":\"top\"}},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item has-text-centered-mobile\"},[_c('div',[_vm._t(\"heading-left\")],2)])]),_c('div',{staticClass:\"level-right has-text-centered-mobile\"},[_vm._t(\"heading-right\")],2)]),_vm._t(\"content\"),_c('div',{staticStyle:{\"margin-top\":\"16px\"}},[_vm._t(\"footer\")],2)],2)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-chevron-up\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-chevron-down\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-content\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <section v-if=\"$slots['options']\">\n <div v-observe-visibility=\"observer_options\" style=\"height:2px;\"></div>\n <slot name=\"options\"></slot>\n <nav class=\"buttons is-centered\" style=\"margin-bottom: 6px; margin-top: 16px;\">\n <a v-if=\"!options_visible\" class=\"button is-small is-white\" @click=\"scroll_to_top\"><span class=\"icon is-small\"><i class=\"mdi mdi-chevron-up\"></i></span></a>\n <a v-else class=\"button is-small is-white\" @click=\"scroll_to_content\"><span class=\"icon is-small\"><i class=\"mdi mdi-chevron-down\"></i></span></a>\n </nav>\n </section>\n <div :class=\"{'fd-content-with-option': $slots['options']}\">\n <nav class=\"level\" id=\"top\">\n <!-- Left side -->\n <div class=\"level-left\">\n <div class=\"level-item has-text-centered-mobile\">\n <div>\n <slot name=\"heading-left\"></slot>\n </div>\n </div>\n </div>\n\n <!-- Right side -->\n <div class=\"level-right has-text-centered-mobile\">\n <slot name=\"heading-right\"></slot>\n </div>\n </nav>\n\n <slot name=\"content\"></slot>\n <div style=\"margin-top: 16px;\">\n <slot name=\"footer\"></slot>\n </div>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'ContentWithHeading',\n\n data () {\n return {\n options_visible: false,\n observer_options: {\n callback: this.visibilityChanged,\n intersection: {\n rootMargin: '-100px',\n threshold: 0.3\n }\n }\n }\n },\n\n methods: {\n scroll_to_top: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n },\n\n scroll_to_content: function () {\n // window.scrollTo({ top: 80, behavior: 'smooth' })\n if (this.$route.meta.has_tabs) {\n this.$scrollTo('#top', { offset: -140 })\n } else {\n this.$scrollTo('#top', { offset: -100 })\n }\n },\n\n visibilityChanged: function (isVisible) {\n this.options_visible = isVisible\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHeading.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHeading.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContentWithHeading.vue?vue&type=template&id=94dfd75a&\"\nimport script from \"./ContentWithHeading.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentWithHeading.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.is_next || !_vm.show_only_next_items)?_c('div',{staticClass:\"media\"},[(_vm.edit_mode)?_c('div',{staticClass:\"media-left\"},[_vm._m(0)]):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.play}},[_c('h1',{staticClass:\"title is-6\",class:{ 'has-text-primary': _vm.item.id === _vm.state.item_id, 'has-text-grey-light': !_vm.is_next }},[_vm._v(_vm._s(_vm.item.title))]),_c('h2',{staticClass:\"subtitle is-7\",class:{ 'has-text-primary': _vm.item.id === _vm.state.item_id, 'has-text-grey-light': !_vm.is_next, 'has-text-grey': _vm.is_next && _vm.item.id !== _vm.state.item_id }},[_c('b',[_vm._v(_vm._s(_vm.item.artist))])]),_c('h2',{staticClass:\"subtitle is-7\",class:{ 'has-text-primary': _vm.item.id === _vm.state.item_id, 'has-text-grey-light': !_vm.is_next, 'has-text-grey': _vm.is_next && _vm.item.id !== _vm.state.item_id }},[_vm._v(_vm._s(_vm.item.album))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)]):_vm._e()}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon has-text-grey fd-is-movable handle\"},[_c('i',{staticClass:\"mdi mdi-drag-horizontal mdi-18px\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\" v-if=\"is_next || !show_only_next_items\">\n <div class=\"media-left\" v-if=\"edit_mode\">\n <span class=\"icon has-text-grey fd-is-movable handle\"><i class=\"mdi mdi-drag-horizontal mdi-18px\"></i></span>\n </div>\n\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"play\">\n <h1 class=\"title is-6\" :class=\"{ 'has-text-primary': item.id === state.item_id, 'has-text-grey-light': !is_next }\">{{ item.title }}</h1>\n <h2 class=\"subtitle is-7\" :class=\"{ 'has-text-primary': item.id === state.item_id, 'has-text-grey-light': !is_next, 'has-text-grey': is_next && item.id !== state.item_id }\"><b>{{ item.artist }}</b></h2>\n <h2 class=\"subtitle is-7\" :class=\"{ 'has-text-primary': item.id === state.item_id, 'has-text-grey-light': !is_next, 'has-text-grey': is_next && item.id !== state.item_id }\">{{ item.album }}</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ListItemQueueItem',\n props: ['item', 'position', 'current_position', 'show_only_next_items', 'edit_mode'],\n\n computed: {\n state () {\n return this.$store.state.player\n },\n\n is_next () {\n return this.current_position < 0 || this.position >= this.current_position\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play({ item_id: this.item.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemQueueItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemQueueItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemQueueItem.vue?vue&type=template&id=58363490&\"\nimport script from \"./ListItemQueueItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemQueueItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.item.title)+\" \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\" \"+_vm._s(_vm.item.artist)+\" \")]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album\")]),(_vm.item.album_id)?_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.item.album))]):_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.album))])]),(_vm.item.album_artist)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),(_vm.item.album_artist_id)?_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album_artist}},[_vm._v(_vm._s(_vm.item.album_artist))]):_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.album_artist))])]):_vm._e(),(_vm.item.composer)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Composer\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.composer))])]):_vm._e(),(_vm.item.year > 0)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Year\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.year))])]):_vm._e(),(_vm.item.genre)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Genre\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(_vm._s(_vm.item.genre))])]):_vm._e(),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Track / Disc\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.track_number)+\" / \"+_vm._s(_vm.item.disc_number))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.item.length_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.path))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.item.media_kind)+\" - \"+_vm._s(_vm.item.data_kind)+\" \"),(_vm.item.data_kind === 'spotify')?_c('span',{staticClass:\"has-text-weight-normal\"},[_vm._v(\"(\"),_c('a',{on:{\"click\":_vm.open_spotify_artist}},[_vm._v(\"artist\")]),_vm._v(\", \"),_c('a',{on:{\"click\":_vm.open_spotify_album}},[_vm._v(\"album\")]),_vm._v(\")\")]):_vm._e()])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Quality\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(\" \"+_vm._s(_vm.item.type)+\" \"),(_vm.item.samplerate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.item.samplerate)+\" Hz\")]):_vm._e(),(_vm.item.channels)?_c('span',[_vm._v(\" | \"+_vm._s(_vm._f(\"channels\")(_vm.item.channels)))]):_vm._e(),(_vm.item.bitrate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.item.bitrate)+\" Kb/s\")]):_vm._e()])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.remove}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-delete\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Remove\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ item.title }}\n </p>\n <p class=\"subtitle\">\n {{ item.artist }}\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album</span>\n <a v-if=\"item.album_id\" class=\"title is-6 has-text-link\" @click=\"open_album\">{{ item.album }}</a>\n <span v-else class=\"title is-6\">{{ item.album }}</span>\n </p>\n <p v-if=\"item.album_artist\">\n <span class=\"heading\">Album artist</span>\n <a v-if=\"item.album_artist_id\" class=\"title is-6 has-text-link\" @click=\"open_album_artist\">{{ item.album_artist }}</a>\n <span v-else class=\"title is-6\">{{ item.album_artist }}</span>\n </p>\n <p v-if=\"item.composer\">\n <span class=\"heading\">Composer</span>\n <span class=\"title is-6\">{{ item.composer }}</span>\n </p>\n <p v-if=\"item.year > 0\">\n <span class=\"heading\">Year</span>\n <span class=\"title is-6\">{{ item.year }}</span>\n </p>\n <p v-if=\"item.genre\">\n <span class=\"heading\">Genre</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_genre\">{{ item.genre }}</a>\n </p>\n <p>\n <span class=\"heading\">Track / Disc</span>\n <span class=\"title is-6\">{{ item.track_number }} / {{ item.disc_number }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ item.length_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ item.path }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ item.media_kind }} - {{ item.data_kind }} <span class=\"has-text-weight-normal\" v-if=\"item.data_kind === 'spotify'\">(<a @click=\"open_spotify_artist\">artist</a>, <a @click=\"open_spotify_album\">album</a>)</span></span>\n </p>\n <p>\n <span class=\"heading\">Quality</span>\n <span class=\"title is-6\">\n {{ item.type }}\n <span v-if=\"item.samplerate\"> | {{ item.samplerate }} Hz</span>\n <span v-if=\"item.channels\"> | {{ item.channels | channels }}</span>\n <span v-if=\"item.bitrate\"> | {{ item.bitrate }} Kb/s</span>\n </span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"remove\">\n <span class=\"icon\"><i class=\"mdi mdi-delete\"></i></span> <span class=\"is-size-7\">Remove</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nexport default {\n name: 'ModalDialogQueueItem',\n props: ['show', 'item'],\n\n data () {\n return {\n spotify_track: {}\n }\n },\n\n methods: {\n remove: function () {\n this.$emit('close')\n webapi.queue_remove(this.item.id)\n },\n\n play: function () {\n this.$emit('close')\n webapi.player_play({ item_id: this.item.id })\n },\n\n open_album: function () {\n if (this.media_kind === 'podcast') {\n this.$router.push({ path: '/podcasts/' + this.item.album_id })\n } else if (this.media_kind === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + this.item.album_id })\n } else {\n this.$router.push({ path: '/music/albums/' + this.item.album_id })\n }\n },\n\n open_album_artist: function () {\n this.$router.push({ path: '/music/artists/' + this.item.album_artist_id })\n },\n\n open_genre: function () {\n this.$router.push({ name: 'Genre', params: { genre: this.item.genre } })\n },\n\n open_spotify_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/artists/' + this.spotify_track.artists[0].id })\n },\n\n open_spotify_album: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/albums/' + this.spotify_track.album.id })\n }\n },\n\n watch: {\n 'item' () {\n if (this.item && this.item.data_kind === 'spotify') {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getTrack(this.item.path.slice(this.item.path.lastIndexOf(':') + 1)).then((response) => {\n this.spotify_track = response\n })\n } else {\n this.spotify_track = {}\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogQueueItem.vue?vue&type=template&id=5521a6c4&\"\nimport script from \"./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogQueueItem.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" Add stream URL \")]),_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.play($event)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.url),expression:\"url\"}],ref:\"url_field\",staticClass:\"input is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"http://url-to-stream\",\"disabled\":_vm.loading},domProps:{\"value\":(_vm.url)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.url=$event.target.value}}}),_c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-web\"})])])])])]),(_vm.loading)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Loading ...\")])])]):_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.add_stream}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n Add stream URL\n </p>\n <form v-on:submit.prevent=\"play\" class=\"fd-has-margin-bottom\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-shadowless\" type=\"text\" placeholder=\"http://url-to-stream\" v-model=\"url\" :disabled=\"loading\" ref=\"url_field\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-web\"></i>\n </span>\n </p>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\" v-if=\"loading\">\n <a class=\"card-footer-item has-text-dark\">\n <span class=\"icon\"><i class=\"mdi mdi-web\"></i></span> <span class=\"is-size-7\">Loading ...</span>\n </a>\n </footer>\n <footer class=\"card-footer\" v-else>\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"add_stream\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAddUrlStream',\n props: ['show'],\n\n data () {\n return {\n url: '',\n loading: false\n }\n },\n\n methods: {\n add_stream: function () {\n this.loading = true\n webapi.queue_add(this.url).then(() => {\n this.$emit('close')\n this.url = ''\n }).catch(() => {\n this.loading = false\n })\n },\n\n play: function () {\n this.loading = true\n webapi.player_play_uri(this.url, false).then(() => {\n this.$emit('close')\n this.url = ''\n }).catch(() => {\n this.loading = false\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.url_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogAddUrlStream.vue?vue&type=template&id=1c92eee2&\"\nimport script from \"./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogAddUrlStream.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" Save queue to playlist \")]),_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.save($event)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.playlist_name),expression:\"playlist_name\"}],ref:\"playlist_name_field\",staticClass:\"input is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"Playlist name\",\"disabled\":_vm.loading},domProps:{\"value\":(_vm.playlist_name)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.playlist_name=$event.target.value}}}),_c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-file-music\"})])])])])]),(_vm.loading)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Saving ...\")])])]):_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.save}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-content-save\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Save\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n Save queue to playlist\n </p>\n <form v-on:submit.prevent=\"save\" class=\"fd-has-margin-bottom\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-shadowless\" type=\"text\" placeholder=\"Playlist name\" v-model=\"playlist_name\" :disabled=\"loading\" ref=\"playlist_name_field\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-file-music\"></i>\n </span>\n </p>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\" v-if=\"loading\">\n <a class=\"card-footer-item has-text-dark\">\n <span class=\"icon\"><i class=\"mdi mdi-web\"></i></span> <span class=\"is-size-7\">Saving ...</span>\n </a>\n </footer>\n <footer class=\"card-footer\" v-else>\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"save\">\n <span class=\"icon\"><i class=\"mdi mdi-content-save\"></i></span> <span class=\"is-size-7\">Save</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogPlaylistSave',\n props: ['show'],\n\n data () {\n return {\n playlist_name: '',\n loading: false\n }\n },\n\n methods: {\n save: function () {\n if (this.playlist_name.length < 1) {\n return\n }\n\n this.loading = true\n webapi.queue_save_playlist(this.playlist_name).then(() => {\n this.$emit('close')\n this.playlist_name = ''\n }).catch(() => {\n this.loading = false\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.playlist_name_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogPlaylistSave.vue?vue&type=template&id=5f414a1b&\"\nimport script from \"./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogPlaylistSave.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"heading\">{{ queue.count }} tracks</p>\n <p class=\"title is-4\">Queue</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small\" :class=\"{ 'is-info': show_only_next_items }\" @click=\"update_show_next_items\">\n <span class=\"icon\">\n <i class=\"mdi mdi-arrow-collapse-down\"></i>\n </span>\n <span>Hide previous</span>\n </a>\n <a class=\"button is-small\" @click=\"open_add_stream_dialog\">\n <span class=\"icon\">\n <i class=\"mdi mdi-web\"></i>\n </span>\n <span>Add Stream</span>\n </a>\n <a class=\"button is-small\" :class=\"{ 'is-info': edit_mode }\" @click=\"edit_mode = !edit_mode\">\n <span class=\"icon\">\n <i class=\"mdi mdi-pencil\"></i>\n </span>\n <span>Edit</span>\n </a>\n <a class=\"button is-small\" @click=\"queue_clear\">\n <span class=\"icon\">\n <i class=\"mdi mdi-delete-empty\"></i>\n </span>\n <span>Clear</span>\n </a>\n <a class=\"button is-small\" v-if=\"is_queue_save_allowed\" :disabled=\"queue_items.length === 0\" @click=\"save_dialog\">\n <span class=\"icon\">\n <i class=\"mdi mdi-content-save\"></i>\n </span>\n <span>Save</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <draggable v-model=\"queue_items\" handle=\".handle\" @end=\"move_item\">\n <list-item-queue-item v-for=\"(item, index) in queue_items\"\n :key=\"item.id\" :item=\"item\" :position=\"index\"\n :current_position=\"current_position\"\n :show_only_next_items=\"show_only_next_items\"\n :edit_mode=\"edit_mode\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(item)\" v-if=\"!edit_mode\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n <a @click=\"remove(item)\" v-if=\"item.id !== state.item_id && edit_mode\">\n <span class=\"icon has-text-grey\"><i class=\"mdi mdi-delete mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-queue-item>\n </draggable>\n <modal-dialog-queue-item :show=\"show_details_modal\" :item=\"selected_item\" @close=\"show_details_modal = false\" />\n <modal-dialog-add-url-stream :show=\"show_url_modal\" @close=\"show_url_modal = false\" />\n <modal-dialog-playlist-save v-if=\"is_queue_save_allowed\" :show=\"show_pls_save_modal\" @close=\"show_pls_save_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemQueueItem from '@/components/ListItemQueueItem'\nimport ModalDialogQueueItem from '@/components/ModalDialogQueueItem'\nimport ModalDialogAddUrlStream from '@/components/ModalDialogAddUrlStream'\nimport ModalDialogPlaylistSave from '@/components/ModalDialogPlaylistSave'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport draggable from 'vuedraggable'\n\nexport default {\n name: 'PageQueue',\n components: { ContentWithHeading, ListItemQueueItem, draggable, ModalDialogQueueItem, ModalDialogAddUrlStream, ModalDialogPlaylistSave },\n\n data () {\n return {\n edit_mode: false,\n\n show_details_modal: false,\n show_url_modal: false,\n show_pls_save_modal: false,\n selected_item: {}\n }\n },\n\n computed: {\n state () {\n return this.$store.state.player\n },\n is_queue_save_allowed () {\n return this.$store.state.config.allow_modifying_stored_playlists && this.$store.state.config.default_playlist_directory\n },\n queue () {\n return this.$store.state.queue\n },\n queue_items: {\n get () { return this.$store.state.queue.items },\n set (value) { /* Do nothing? Send move request in @end event */ }\n },\n current_position () {\n const nowPlaying = this.$store.getters.now_playing\n return nowPlaying === undefined || nowPlaying.position === undefined ? -1 : this.$store.getters.now_playing.position\n },\n show_only_next_items () {\n return this.$store.state.show_only_next_items\n }\n },\n\n methods: {\n queue_clear: function () {\n webapi.queue_clear()\n },\n\n update_show_next_items: function (e) {\n this.$store.commit(types.SHOW_ONLY_NEXT_ITEMS, !this.show_only_next_items)\n },\n\n remove: function (item) {\n webapi.queue_remove(item.id)\n },\n\n move_item: function (e) {\n var oldPosition = !this.show_only_next_items ? e.oldIndex : e.oldIndex + this.current_position\n var item = this.queue_items[oldPosition]\n var newPosition = item.position + (e.newIndex - e.oldIndex)\n if (newPosition !== oldPosition) {\n webapi.queue_move(item.id, newPosition)\n }\n },\n\n open_dialog: function (item) {\n this.selected_item = item\n this.show_details_modal = true\n },\n\n open_add_stream_dialog: function (item) {\n this.show_url_modal = true\n },\n\n save_dialog: function (item) {\n if (this.queue_items.length > 0) {\n this.show_pls_save_modal = true\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageQueue.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageQueue.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageQueue.vue?vue&type=template&id=36691282&\"\nimport script from \"./PageQueue.vue?vue&type=script&lang=js&\"\nexport * from \"./PageQueue.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[(_vm.now_playing.id > 0)?_c('div',{staticClass:\"fd-is-fullheight\"},[_c('div',{staticClass:\"fd-is-expanded\"},[_c('cover-artwork',{staticClass:\"fd-cover-image fd-has-action\",attrs:{\"artwork_url\":_vm.now_playing.artwork_url,\"artist\":_vm.now_playing.artist,\"album\":_vm.now_playing.album},on:{\"click\":function($event){return _vm.open_dialog(_vm.now_playing)}}})],1),_c('div',{staticClass:\"fd-has-padding-left-right\"},[_c('div',{staticClass:\"container has-text-centered\"},[_c('p',{staticClass:\"control has-text-centered fd-progress-now-playing\"},[_c('range-slider',{staticClass:\"seek-slider fd-has-action\",attrs:{\"min\":\"0\",\"max\":_vm.state.item_length_ms,\"value\":_vm.item_progress_ms,\"disabled\":_vm.state.state === 'stop',\"step\":\"1000\"},on:{\"change\":_vm.seek}})],1),_c('p',{staticClass:\"content\"},[_c('span',[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.item_progress_ms))+\" / \"+_vm._s(_vm._f(\"duration\")(_vm.now_playing.length_ms)))])])])]),_c('div',{staticClass:\"fd-has-padding-left-right\"},[_c('div',{staticClass:\"container has-text-centered fd-has-margin-top\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(\" \"+_vm._s(_vm.now_playing.title)+\" \")]),_c('h2',{staticClass:\"title is-6\"},[_vm._v(\" \"+_vm._s(_vm.now_playing.artist)+\" \")]),(_vm.composer)?_c('h2',{staticClass:\"subtitle is-6 has-text-grey has-text-weight-bold\"},[_vm._v(\" \"+_vm._s(_vm.composer)+\" \")]):_vm._e(),_c('h3',{staticClass:\"subtitle is-6\"},[_vm._v(\" \"+_vm._s(_vm.now_playing.album)+\" \")])])])]):_c('div',{staticClass:\"fd-is-fullheight\"},[_vm._m(0)]),_c('modal-dialog-queue-item',{attrs:{\"show\":_vm.show_details_modal,\"item\":_vm.selected_item},on:{\"close\":function($event){_vm.show_details_modal = false}}})],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"fd-is-expanded fd-has-padding-left-right\",staticStyle:{\"flex-direction\":\"column\"}},[_c('div',{staticClass:\"content has-text-centered\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(\" Your play queue is empty \")]),_c('p',[_vm._v(\" Add some tracks by browsing your library \")])])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('figure',[_c('img',{directives:[{name:\"lazyload\",rawName:\"v-lazyload\"}],key:_vm.artwork_url_with_size,attrs:{\"data-src\":_vm.artwork_url_with_size,\"data-err\":_vm.dataURI},on:{\"click\":function($event){return _vm.$emit('click')}}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*\n * SVGRenderer taken from https://github.com/bendera/placeholder published under MIT License\n * Copyright (c) 2017 Adam Bender\n * https://github.com/bendera/placeholder/blob/master/LICENSE\n */\nclass SVGRenderer {\n render (data) {\n const svg = '<svg width=\"' + data.width + '\" height=\"' + data.height + '\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ' + data.width + ' ' + data.height + '\" preserveAspectRatio=\"none\">' +\n '<defs>' +\n '<style type=\"text/css\">' +\n ' #holder text {' +\n ' fill: ' + data.textColor + ';' +\n ' font-family: ' + data.fontFamily + ';' +\n ' font-size: ' + data.fontSize + 'px;' +\n ' font-weight: ' + data.fontWeight + ';' +\n ' }' +\n ' </style>' +\n '</defs>' +\n '<g id=\"holder\">' +\n ' <rect width=\"100%\" height=\"100%\" fill=\"' + data.backgroundColor + '\"></rect>' +\n ' <g>' +\n ' <text text-anchor=\"middle\" x=\"50%\" y=\"50%\" dy=\".3em\">' + data.caption + '</text>' +\n ' </g>' +\n '</g>' +\n '</svg>'\n\n return 'data:image/svg+xml;charset=UTF-8,' + encodeURIComponent(svg)\n }\n}\n\nexport default SVGRenderer\n","<template>\n <figure>\n <img v-lazyload\n :data-src=\"artwork_url_with_size\"\n :data-err=\"dataURI\"\n :key=\"artwork_url_with_size\"\n @click=\"$emit('click')\">\n </figure>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport SVGRenderer from '@/lib/SVGRenderer'\nimport stringToColor from 'string-to-color'\n\nexport default {\n name: 'CoverArtwork',\n props: ['artist', 'album', 'artwork_url', 'maxwidth', 'maxheight'],\n\n data () {\n return {\n svg: new SVGRenderer(),\n width: 600,\n height: 600,\n font_family: 'sans-serif',\n font_size: 200,\n font_weight: 600\n }\n },\n\n computed: {\n artwork_url_with_size: function () {\n if (this.maxwidth > 0 && this.maxheight > 0) {\n return webapi.artwork_url_append_size_params(this.artwork_url, this.maxwidth, this.maxheight)\n }\n return webapi.artwork_url_append_size_params(this.artwork_url)\n },\n\n alt_text () {\n return this.artist + ' - ' + this.album\n },\n\n caption () {\n if (this.album) {\n return this.album.substring(0, 2)\n }\n if (this.artist) {\n return this.artist.substring(0, 2)\n }\n return ''\n },\n\n background_color () {\n return stringToColor(this.alt_text)\n },\n\n is_background_light () {\n // Based on https://stackoverflow.com/a/44615197\n const hex = this.background_color.replace(/#/, '')\n const r = parseInt(hex.substr(0, 2), 16)\n const g = parseInt(hex.substr(2, 2), 16)\n const b = parseInt(hex.substr(4, 2), 16)\n\n const luma = [\n 0.299 * r,\n 0.587 * g,\n 0.114 * b\n ].reduce((a, b) => a + b) / 255\n\n return luma > 0.5\n },\n\n text_color () {\n return this.is_background_light ? '#000000' : '#ffffff'\n },\n\n rendererParams () {\n return {\n width: this.width,\n height: this.height,\n textColor: this.text_color,\n backgroundColor: this.background_color,\n caption: this.caption,\n fontFamily: this.font_family,\n fontSize: this.font_size,\n fontWeight: this.font_weight\n }\n },\n\n dataURI () {\n return this.svg.render(this.rendererParams)\n }\n }\n}\n</script>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CoverArtwork.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CoverArtwork.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CoverArtwork.vue?vue&type=template&id=377ab7d4&\"\nimport script from \"./CoverArtwork.vue?vue&type=script&lang=js&\"\nexport * from \"./CoverArtwork.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <section>\n <div v-if=\"now_playing.id > 0\" class=\"fd-is-fullheight\">\n <div class=\"fd-is-expanded\">\n <cover-artwork @click=\"open_dialog(now_playing)\"\n :artwork_url=\"now_playing.artwork_url\"\n :artist=\"now_playing.artist\"\n :album=\"now_playing.album\"\n class=\"fd-cover-image fd-has-action\" />\n </div>\n <div class=\"fd-has-padding-left-right\">\n <div class=\"container has-text-centered\">\n <p class=\"control has-text-centered fd-progress-now-playing\">\n <range-slider\n class=\"seek-slider fd-has-action\"\n min=\"0\"\n :max=\"state.item_length_ms\"\n :value=\"item_progress_ms\"\n :disabled=\"state.state === 'stop'\"\n step=\"1000\"\n @change=\"seek\" >\n </range-slider>\n </p>\n <p class=\"content\">\n <span>{{ item_progress_ms | duration }} / {{ now_playing.length_ms | duration }}</span>\n </p>\n </div>\n </div>\n <div class=\"fd-has-padding-left-right\">\n <div class=\"container has-text-centered fd-has-margin-top\">\n <h1 class=\"title is-5\">\n {{ now_playing.title }}\n </h1>\n <h2 class=\"title is-6\">\n {{ now_playing.artist }}\n </h2>\n <h2 class=\"subtitle is-6 has-text-grey has-text-weight-bold\" v-if=\"composer\">\n {{ composer }}\n </h2>\n <h3 class=\"subtitle is-6\">\n {{ now_playing.album }}\n </h3>\n </div>\n </div>\n </div>\n <div v-else class=\"fd-is-fullheight\">\n <div class=\"fd-is-expanded fd-has-padding-left-right\" style=\"flex-direction: column;\">\n <div class=\"content has-text-centered\">\n <h1 class=\"title is-5\">\n Your play queue is empty\n </h1>\n <p>\n Add some tracks by browsing your library\n </p>\n </div>\n </div>\n </div>\n <modal-dialog-queue-item :show=\"show_details_modal\" :item=\"selected_item\" @close=\"show_details_modal = false\" />\n </section>\n</template>\n\n<script>\nimport ModalDialogQueueItem from '@/components/ModalDialogQueueItem'\nimport RangeSlider from 'vue-range-slider'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'PageNowPlaying',\n components: { ModalDialogQueueItem, RangeSlider, CoverArtwork },\n\n data () {\n return {\n item_progress_ms: 0,\n interval_id: 0,\n\n show_details_modal: false,\n selected_item: {}\n }\n },\n\n created () {\n this.item_progress_ms = this.state.item_progress_ms\n webapi.player_status().then(({ data }) => {\n this.$store.commit(types.UPDATE_PLAYER_STATUS, data)\n if (this.state.state === 'play') {\n this.interval_id = window.setInterval(this.tick, 1000)\n }\n })\n },\n\n destroyed () {\n if (this.interval_id > 0) {\n window.clearTimeout(this.interval_id)\n this.interval_id = 0\n }\n },\n\n computed: {\n state () {\n return this.$store.state.player\n },\n\n now_playing () {\n return this.$store.getters.now_playing\n },\n\n settings_option_show_composer_now_playing () {\n return this.$store.getters.settings_option_show_composer_now_playing\n },\n\n settings_option_show_composer_for_genre () {\n return this.$store.getters.settings_option_show_composer_for_genre\n },\n\n composer () {\n if (this.settings_option_show_composer_now_playing) {\n if (!this.settings_option_show_composer_for_genre ||\n (this.now_playing.genre &&\n this.settings_option_show_composer_for_genre.toLowerCase()\n .split(',')\n .findIndex(elem => this.now_playing.genre.toLowerCase().indexOf(elem.trim()) >= 0) >= 0)) {\n return this.now_playing.composer\n }\n }\n return null\n }\n },\n\n methods: {\n tick: function () {\n this.item_progress_ms += 1000\n },\n\n seek: function (newPosition) {\n webapi.player_seek_to_pos(newPosition).catch(() => {\n this.item_progress_ms = this.state.item_progress_ms\n })\n },\n\n open_dialog: function (item) {\n this.selected_item = item\n this.show_details_modal = true\n }\n },\n\n watch: {\n 'state' () {\n if (this.interval_id > 0) {\n window.clearTimeout(this.interval_id)\n this.interval_id = 0\n }\n this.item_progress_ms = this.state.item_progress_ms\n if (this.state.state === 'play') {\n this.interval_id = window.setInterval(this.tick, 1000)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageNowPlaying.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageNowPlaying.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageNowPlaying.vue?vue&type=template&id=734899dc&\"\nimport script from \"./PageNowPlaying.vue?vue&type=script&lang=js&\"\nexport * from \"./PageNowPlaying.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently added\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"albums\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.recently_added.items}})],1),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":function($event){return _vm.open_browse('recently_added')}}},[_vm._v(\"Show more\")])])])])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently played\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"tracks\")])]),_c('template',{slot:\"content\"},[_c('list-tracks',{attrs:{\"tracks\":_vm.recently_played.items}})],1),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":function($event){return _vm.open_browse('recently_played')}}},[_vm._v(\"Show more\")])])])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\nexport const LoadDataBeforeEnterMixin = function (dataObject) {\n return {\n beforeRouteEnter (to, from, next) {\n dataObject.load(to).then((response) => {\n next(vm => dataObject.set(vm, response))\n })\n },\n beforeRouteUpdate (to, from, next) {\n const vm = this\n dataObject.load(to).then((response) => {\n dataObject.set(vm, response)\n next()\n })\n }\n }\n}\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-tabs-section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small\"},[_c('ul',[_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/browse\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_c('span',{},[_vm._v(\"Browse\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/artists\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-artist\"})]),_c('span',{},[_vm._v(\"Artists\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/albums\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-album\"})]),_c('span',{},[_vm._v(\"Albums\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/genres\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-speaker\"})]),_c('span',{},[_vm._v(\"Genres\")])])]),(_vm.spotify_enabled)?_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/spotify\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-spotify\"})]),_c('span',{},[_vm._v(\"Spotify\")])])]):_vm._e()],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/music/browse\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-web\"></i></span>\n <span class=\"\">Browse</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/artists\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-artist\"></i></span>\n <span class=\"\">Artists</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/albums\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-album\"></i></span>\n <span class=\"\">Albums</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/genres\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-speaker\"></i></span>\n <span class=\"\">Genres</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/spotify\" v-if=\"spotify_enabled\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-spotify\"></i></span>\n <span class=\"\">Spotify</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsMusic',\n\n computed: {\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsMusic.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsMusic.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsMusic.vue?vue&type=template&id=f9ae6826&\"\nimport script from \"./TabsMusic.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsMusic.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.is_grouped)?_c('div',_vm._l((_vm.albums.indexList),function(idx){return _c('div',{key:idx,staticClass:\"mb-6\"},[_c('span',{staticClass:\"tag is-info is-light is-small has-text-weight-bold\",attrs:{\"id\":'index_' + idx}},[_vm._v(_vm._s(idx))]),_vm._l((_vm.albums.grouped[idx]),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":album.artwork_url,\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)})],2)}),0):_c('div',_vm._l((_vm.albums_list),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":album.artwork_url,\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),1),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album,\"media_kind\":_vm.media_kind},on:{\"remove-podcast\":function($event){return _vm.open_remove_podcast_dialog()},\"close\":function($event){_vm.show_details_modal = false}}}),_c('modal-dialog',{attrs:{\"show\":_vm.show_remove_podcast_modal,\"title\":\"Remove podcast\",\"delete_action\":\"Remove\"},on:{\"close\":function($event){_vm.show_remove_podcast_modal = false},\"delete\":_vm.remove_podcast}},[_c('template',{slot:\"modal-content\"},[_c('p',[_vm._v(\"Permanently remove this podcast from your library?\")]),_c('p',{staticClass:\"is-size-7\"},[_vm._v(\"(This will also remove the RSS playlist \"),_c('b',[_vm._v(_vm._s(_vm.rss_playlist_to_remove.name))]),_vm._v(\".)\")])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.album.name_sort.charAt(0).toUpperCase()}},[(_vm.$slots['artwork'])?_c('div',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"artwork\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('div',{staticStyle:{\"margin-top\":\"0.7rem\"}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.album.name))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.props.album.artist))])]),(_vm.props.album.date_released && _vm.props.album.media_kind === 'music')?_c('h2',{staticClass:\"subtitle is-7 has-text-grey has-text-weight-normal\"},[_vm._v(\" \"+_vm._s(_vm._f(\"time\")(_vm.props.album.date_released,'L'))+\" \")]):_vm._e()])]),_c('div',{staticClass:\"media-right\",staticStyle:{\"padding-top\":\"0.7rem\"}},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.album.name_sort.charAt(0).toUpperCase()\">\n <div class=\"media-left fd-has-action\"\n v-if=\"$slots['artwork']\"\n @click=\"listeners.click\">\n <slot name=\"artwork\"></slot>\n </div>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <div style=\"margin-top:0.7rem;\">\n <h1 class=\"title is-6\">{{ props.album.name }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.album.artist }}</b></h2>\n <h2 class=\"subtitle is-7 has-text-grey has-text-weight-normal\"\n v-if=\"props.album.date_released && props.album.media_kind === 'music'\">\n {{ props.album.date_released | time('L') }}\n </h2>\n </div>\n </div>\n <div class=\"media-right\" style=\"padding-top:0.7rem;\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemAlbum',\n props: ['album', 'media_kind']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemAlbum.vue?vue&type=template&id=0d4ab83f&functional=true&\"\nimport script from \"./ListItemAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('cover-artwork',{staticClass:\"image is-square fd-has-margin-bottom fd-has-shadow\",attrs:{\"artwork_url\":_vm.album.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name}}),_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.album.name))])]),(_vm.media_kind_resolved === 'podcast')?_c('div',{staticClass:\"buttons\"},[_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_played}},[_vm._v(\"Mark as played\")]),_c('a',{staticClass:\"button is-small\",on:{\"click\":function($event){return _vm.$emit('remove-podcast')}}},[_vm._v(\"Remove podcast\")])]):_vm._e(),_c('div',{staticClass:\"content is-small\"},[(_vm.album.artist)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artist))])]):_vm._e(),(_vm.album.date_released)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.date_released,'L')))])]):(_vm.album.year > 0)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Year\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.year))])]):_vm._e(),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.track_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.album.length_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.media_kind)+\" - \"+_vm._s(_vm.album.data_kind))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Added at\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.time_added,'L LT')))])])])],1),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n class=\"image is-square fd-has-margin-bottom fd-has-shadow\" />\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_album\">{{ album.name }}</a>\n </p>\n <div class=\"buttons\" v-if=\"media_kind_resolved === 'podcast'\">\n <a class=\"button is-small\" @click=\"mark_played\">Mark as played</a>\n <a class=\"button is-small\" @click=\"$emit('remove-podcast')\">Remove podcast</a>\n </div>\n <div class=\"content is-small\">\n <p v-if=\"album.artist\">\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ album.artist }}</a>\n </p>\n <p v-if=\"album.date_released\">\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ album.date_released | time('L') }}</span>\n </p>\n <p v-else-if=\"album.year > 0\">\n <span class=\"heading\">Year</span>\n <span class=\"title is-6\">{{ album.year }}</span>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <span class=\"title is-6\">{{ album.track_count }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ album.length_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ album.media_kind }} - {{ album.data_kind }}</span>\n </p>\n <p>\n <span class=\"heading\">Added at</span>\n <span class=\"title is-6\">{{ album.time_added | time('L LT') }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAlbum',\n components: { CoverArtwork },\n props: ['show', 'album', 'media_kind', 'new_tracks'],\n\n data () {\n return {\n artwork_visible: false\n }\n },\n\n computed: {\n artwork_url: function () {\n return webapi.artwork_url_append_size_params(this.album.artwork_url)\n },\n\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.album.media_kind\n }\n },\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.album.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.album.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.album.uri)\n },\n\n open_album: function () {\n if (this.media_kind_resolved === 'podcast') {\n this.$router.push({ path: '/podcasts/' + this.album.id })\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + this.album.id })\n } else {\n this.$router.push({ path: '/music/albums/' + this.album.id })\n }\n },\n\n open_artist: function () {\n if (this.media_kind_resolved === 'podcast') {\n // No artist page for podcasts\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/artists/' + this.album.artist_id })\n } else {\n this.$router.push({ path: '/music/artists/' + this.album.artist_id })\n }\n },\n\n mark_played: function () {\n webapi.library_album_track_update(this.album.id, { play_count: 'played' }).then(({ data }) => {\n this.$emit('play-count-changed')\n this.$emit('close')\n })\n },\n\n artwork_loaded: function () {\n this.artwork_visible = true\n },\n\n artwork_error: function () {\n this.artwork_visible = false\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogAlbum.vue?vue&type=template&id=43881b14&\"\nimport script from \"./ModalDialogAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\nexport default class Albums {\n constructor (items, options = { hideSingles: false, hideSpotify: false, sort: 'Name', group: false }) {\n this.items = items\n this.options = options\n this.grouped = {}\n this.sortedAndFiltered = []\n this.indexList = []\n\n this.init()\n }\n\n init () {\n this.createSortedAndFilteredList()\n this.createGroupedList()\n this.createIndexList()\n }\n\n getAlbumIndex (album) {\n if (this.options.sort === 'Recently added') {\n return album.time_added.substring(0, 4)\n } else if (this.options.sort === 'Recently released') {\n return album.date_released ? album.date_released.substring(0, 4) : '0000'\n } else if (this.options.sort === 'Release date') {\n return album.date_released ? album.date_released.substring(0, 4) : '0000'\n }\n return album.name_sort.charAt(0).toUpperCase()\n }\n\n isAlbumVisible (album) {\n if (this.options.hideSingles && album.track_count <= 2) {\n return false\n }\n if (this.options.hideSpotify && album.data_kind === 'spotify') {\n return false\n }\n return true\n }\n\n createIndexList () {\n this.indexList = [...new Set(this.sortedAndFiltered\n .map(album => this.getAlbumIndex(album)))]\n }\n\n createSortedAndFilteredList () {\n var albumsSorted = this.items\n if (this.options.hideSingles || this.options.hideSpotify || this.options.hideOther) {\n albumsSorted = albumsSorted.filter(album => this.isAlbumVisible(album))\n }\n if (this.options.sort === 'Recently added') {\n albumsSorted = [...albumsSorted].sort((a, b) => b.time_added.localeCompare(a.time_added))\n } else if (this.options.sort === 'Recently released') {\n albumsSorted = [...albumsSorted].sort((a, b) => {\n if (!a.date_released) {\n return 1\n }\n if (!b.date_released) {\n return -1\n }\n return b.date_released.localeCompare(a.date_released)\n })\n } else if (this.options.sort === 'Release date') {\n albumsSorted = [...albumsSorted].sort((a, b) => {\n if (!a.date_released) {\n return -1\n }\n if (!b.date_released) {\n return 1\n }\n return a.date_released.localeCompare(b.date_released)\n })\n }\n this.sortedAndFiltered = albumsSorted\n }\n\n createGroupedList () {\n if (!this.options.group) {\n this.grouped = {}\n }\n this.grouped = this.sortedAndFiltered.reduce((r, album) => {\n const idx = this.getAlbumIndex(album)\n r[idx] = [...r[idx] || [], album]\n return r\n }, {})\n }\n}\n","<template>\n <div>\n <div v-if=\"is_grouped\">\n <div v-for=\"idx in albums.indexList\" :key=\"idx\" class=\"mb-6\">\n <span class=\"tag is-info is-light is-small has-text-weight-bold\" :id=\"'index_' + idx\">{{ idx }}</span>\n <list-item-album v-for=\"album in albums.grouped[idx]\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-album>\n </div>\n </div>\n <div v-else>\n <list-item-album v-for=\"album in albums_list\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-album>\n </div>\n <modal-dialog-album\n :show=\"show_details_modal\"\n :album=\"selected_album\"\n :media_kind=\"media_kind\"\n @remove-podcast=\"open_remove_podcast_dialog()\"\n @close=\"show_details_modal = false\" />\n <modal-dialog\n :show=\"show_remove_podcast_modal\"\n title=\"Remove podcast\"\n delete_action=\"Remove\"\n @close=\"show_remove_podcast_modal = false\"\n @delete=\"remove_podcast\">\n <template slot=\"modal-content\">\n <p>Permanently remove this podcast from your library?</p>\n <p class=\"is-size-7\">(This will also remove the RSS playlist <b>{{ rss_playlist_to_remove.name }}</b>.)</p>\n </template>\n </modal-dialog>\n </div>\n</template>\n\n<script>\nimport ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialog from '@/components/ModalDialog'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\nimport Albums from '@/lib/Albums'\n\nexport default {\n name: 'ListAlbums',\n components: { ListItemAlbum, ModalDialogAlbum, ModalDialog, CoverArtwork },\n\n props: ['albums', 'media_kind'],\n\n data () {\n return {\n show_details_modal: false,\n selected_album: {},\n\n show_remove_podcast_modal: false,\n rss_playlist_to_remove: {}\n }\n },\n\n computed: {\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n },\n\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.selected_album.media_kind\n },\n\n albums_list: function () {\n if (Array.isArray(this.albums)) {\n return this.albums\n }\n return this.albums.sortedAndFiltered\n },\n\n is_grouped: function () {\n return (this.albums instanceof Albums && this.albums.options.group)\n }\n },\n\n methods: {\n open_album: function (album) {\n this.selected_album = album\n if (this.media_kind_resolved === 'podcast') {\n this.$router.push({ path: '/podcasts/' + album.id })\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + album.id })\n } else {\n this.$router.push({ path: '/music/albums/' + album.id })\n }\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n },\n\n open_remove_podcast_dialog: function () {\n webapi.library_album_tracks(this.selected_album.id, { limit: 1 }).then(({ data }) => {\n webapi.library_track_playlists(data.items[0].id).then(({ data }) => {\n const rssPlaylists = data.items.filter(pl => pl.type === 'rss')\n if (rssPlaylists.length !== 1) {\n this.$store.dispatch('add_notification', { text: 'Podcast cannot be removed. Probably it was not added as an RSS playlist.', type: 'danger' })\n return\n }\n\n this.rss_playlist_to_remove = rssPlaylists[0]\n this.show_remove_podcast_modal = true\n this.show_details_modal = false\n })\n })\n },\n\n remove_podcast: function () {\n this.show_remove_podcast_modal = false\n webapi.library_playlist_delete(this.rss_playlist_to_remove.id).then(() => {\n this.$emit('podcast-deleted')\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListAlbums.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListAlbums.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListAlbums.vue?vue&type=template&id=4c4c1fd6&\"\nimport script from \"./ListAlbums.vue?vue&type=script&lang=js&\"\nexport * from \"./ListAlbums.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._l((_vm.tracks),function(track,index){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(index, track)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",class:{ 'with-progress': _vm.slots().progress },attrs:{\"id\":'index_' + _vm.props.track.title_sort.charAt(0).toUpperCase()}},[(_vm.slots().icon)?_c('figure',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"icon\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\",class:{ 'has-text-grey': _vm.props.track.media_kind === 'podcast' && _vm.props.track.play_count > 0 }},[_vm._v(_vm._s(_vm.props.track.title))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.props.track.artist))])]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_vm._v(_vm._s(_vm.props.track.album))]),_vm._t(\"progress\")],2),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.track.title_sort.charAt(0).toUpperCase()\" :class=\"{ 'with-progress': slots().progress }\">\n <figure class=\"media-left fd-has-action\" v-if=\"slots().icon\" @click=\"listeners.click\">\n <slot name=\"icon\"></slot>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\" :class=\"{ 'has-text-grey': props.track.media_kind === 'podcast' && props.track.play_count > 0 }\">{{ props.track.title }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.track.artist }}</b></h2>\n <h2 class=\"subtitle is-7 has-text-grey\">{{ props.track.album }}</h2>\n <slot name=\"progress\"></slot>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemTrack',\n props: ['track']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemTrack.vue?vue&type=template&id=b15cd80c&functional=true&\"\nimport script from \"./ListItemTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.track.title)+\" \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\" \"+_vm._s(_vm.track.artist)+\" \")]),(_vm.track.media_kind === 'podcast')?_c('div',{staticClass:\"buttons\"},[(_vm.track.play_count > 0)?_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_new}},[_vm._v(\"Mark as new\")]):_vm._e(),(_vm.track.play_count === 0)?_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_played}},[_vm._v(\"Mark as played\")]):_vm._e()]):_vm._e(),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.track.album))])]),(_vm.track.album_artist && _vm.track.media_kind !== 'audiobook')?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.track.album_artist))])]):_vm._e(),(_vm.track.composer)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Composer\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.composer))])]):_vm._e(),(_vm.track.date_released)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.track.date_released,'L')))])]):(_vm.track.year > 0)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Year\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.year))])]):_vm._e(),(_vm.track.genre)?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Genre\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(_vm._s(_vm.track.genre))])]):_vm._e(),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Track / Disc\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.track_number)+\" / \"+_vm._s(_vm.track.disc_number))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.track.length_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.path))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.media_kind)+\" - \"+_vm._s(_vm.track.data_kind)+\" \"),(_vm.track.data_kind === 'spotify')?_c('span',{staticClass:\"has-text-weight-normal\"},[_vm._v(\"(\"),_c('a',{on:{\"click\":_vm.open_spotify_artist}},[_vm._v(\"artist\")]),_vm._v(\", \"),_c('a',{on:{\"click\":_vm.open_spotify_album}},[_vm._v(\"album\")]),_vm._v(\")\")]):_vm._e()])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Quality\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(\" \"+_vm._s(_vm.track.type)+\" \"),(_vm.track.samplerate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.track.samplerate)+\" Hz\")]):_vm._e(),(_vm.track.channels)?_c('span',[_vm._v(\" | \"+_vm._s(_vm._f(\"channels\")(_vm.track.channels)))]):_vm._e(),(_vm.track.bitrate)?_c('span',[_vm._v(\" | \"+_vm._s(_vm.track.bitrate)+\" Kb/s\")]):_vm._e()])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Added at\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.track.time_added,'L LT')))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Rating\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(Math.floor(_vm.track.rating / 10))+\" / 10\")])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play_track}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ track.title }}\n </p>\n <p class=\"subtitle\">\n {{ track.artist }}\n </p>\n <div class=\"buttons\" v-if=\"track.media_kind === 'podcast'\">\n <a class=\"button is-small\" v-if=\"track.play_count > 0\" @click=\"mark_new\">Mark as new</a>\n <a class=\"button is-small\" v-if=\"track.play_count === 0\" @click=\"mark_played\">Mark as played</a>\n </div>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_album\">{{ track.album }}</a>\n </p>\n <p v-if=\"track.album_artist && track.media_kind !== 'audiobook'\">\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ track.album_artist }}</a>\n </p>\n <p v-if=\"track.composer\">\n <span class=\"heading\">Composer</span>\n <span class=\"title is-6\">{{ track.composer }}</span>\n </p>\n <p v-if=\"track.date_released\">\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ track.date_released | time('L') }}</span>\n </p>\n <p v-else-if=\"track.year > 0\">\n <span class=\"heading\">Year</span>\n <span class=\"title is-6\">{{ track.year }}</span>\n </p>\n <p v-if=\"track.genre\">\n <span class=\"heading\">Genre</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_genre\">{{ track.genre }}</a>\n </p>\n <p>\n <span class=\"heading\">Track / Disc</span>\n <span class=\"title is-6\">{{ track.track_number }} / {{ track.disc_number }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ track.length_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ track.path }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ track.media_kind }} - {{ track.data_kind }} <span class=\"has-text-weight-normal\" v-if=\"track.data_kind === 'spotify'\">(<a @click=\"open_spotify_artist\">artist</a>, <a @click=\"open_spotify_album\">album</a>)</span></span>\n </p>\n <p>\n <span class=\"heading\">Quality</span>\n <span class=\"title is-6\">\n {{ track.type }}\n <span v-if=\"track.samplerate\"> | {{ track.samplerate }} Hz</span>\n <span v-if=\"track.channels\"> | {{ track.channels | channels }}</span>\n <span v-if=\"track.bitrate\"> | {{ track.bitrate }} Kb/s</span>\n </span>\n </p>\n <p>\n <span class=\"heading\">Added at</span>\n <span class=\"title is-6\">{{ track.time_added | time('L LT') }}</span>\n </p>\n <p>\n <span class=\"heading\">Rating</span>\n <span class=\"title is-6\">{{ Math.floor(track.rating / 10) }} / 10</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play_track\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nexport default {\n name: 'ModalDialogTrack',\n\n props: ['show', 'track'],\n\n data () {\n return {\n spotify_track: {}\n }\n },\n\n methods: {\n play_track: function () {\n this.$emit('close')\n webapi.player_play_uri(this.track.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.track.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.track.uri)\n },\n\n open_album: function () {\n this.$emit('close')\n if (this.track.media_kind === 'podcast') {\n this.$router.push({ path: '/podcasts/' + this.track.album_id })\n } else if (this.track.media_kind === 'audiobook') {\n this.$router.push({ path: '/audiobooks/' + this.track.album_id })\n } else {\n this.$router.push({ path: '/music/albums/' + this.track.album_id })\n }\n },\n\n open_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/artists/' + this.track.album_artist_id })\n },\n\n open_genre: function () {\n this.$router.push({ name: 'Genre', params: { genre: this.track.genre } })\n },\n\n open_spotify_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/artists/' + this.spotify_track.artists[0].id })\n },\n\n open_spotify_album: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/spotify/albums/' + this.spotify_track.album.id })\n },\n\n mark_new: function () {\n webapi.library_track_update(this.track.id, { play_count: 'reset' }).then(() => {\n this.$emit('play-count-changed')\n this.$emit('close')\n })\n },\n\n mark_played: function () {\n webapi.library_track_update(this.track.id, { play_count: 'increment' }).then(() => {\n this.$emit('play-count-changed')\n this.$emit('close')\n })\n }\n },\n\n watch: {\n 'track' () {\n if (this.track && this.track.data_kind === 'spotify') {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getTrack(this.track.path.slice(this.track.path.lastIndexOf(':') + 1)).then((response) => {\n this.spotify_track = response\n })\n } else {\n this.spotify_track = {}\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogTrack.vue?vue&type=template&id=2c4c4585&\"\nimport script from \"./ModalDialogTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <list-item-track v-for=\"(track, index) in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index, track)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track :show=\"show_details_modal\" :track=\"selected_track\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ListTracks',\n components: { ListItemTrack, ModalDialogTrack },\n\n props: ['tracks', 'uris', 'expression'],\n\n data () {\n return {\n show_details_modal: false,\n selected_track: {}\n }\n },\n\n methods: {\n play_track: function (position, track) {\n if (this.uris) {\n webapi.player_play_uri(this.uris, false, position)\n } else if (this.expression) {\n webapi.player_play_expression(this.expression, false, position)\n } else {\n webapi.player_play_uri(track.uri, false)\n }\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListTracks.vue?vue&type=template&id=39565e8c&\"\nimport script from \"./ListTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./ListTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <!-- Recently added -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently added</p>\n <p class=\"heading\">albums</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"recently_added.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_browse('recently_added')\">Show more</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n\n <!-- Recently played -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently played</p>\n <p class=\"heading\">tracks</p>\n </template>\n <template slot=\"content\">\n <list-tracks :tracks=\"recently_played.items\"></list-tracks>\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_browse('recently_played')\">Show more</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport ListAlbums from '@/components/ListAlbums'\nimport ListTracks from '@/components/ListTracks'\nimport webapi from '@/webapi'\n\nconst browseData = {\n load: function (to) {\n return Promise.all([\n webapi.search({ type: 'album', expression: 'time_added after 8 weeks ago and media_kind is music having track_count > 3 order by time_added desc', limit: 3 }),\n webapi.search({ type: 'track', expression: 'time_played after 8 weeks ago and media_kind is music order by time_played desc', limit: 3 })\n ])\n },\n\n set: function (vm, response) {\n vm.recently_added = response[0].data.albums\n vm.recently_played = response[1].data.tracks\n }\n}\n\nexport default {\n name: 'PageBrowse',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, ListAlbums, ListTracks },\n\n data () {\n return {\n recently_added: { items: [] },\n recently_played: { items: [] },\n\n show_track_details_modal: false,\n selected_track: {}\n }\n },\n\n methods: {\n open_browse: function (type) {\n this.$router.push({ path: '/music/browse/' + type })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageBrowse.vue?vue&type=template&id=377ad592&\"\nimport script from \"./PageBrowse.vue?vue&type=script&lang=js&\"\nexport * from \"./PageBrowse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently added\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"albums\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.recently_added.items}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently added</p>\n <p class=\"heading\">albums</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"recently_added.items\"></list-albums>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport ListAlbums from '@/components/ListAlbums'\nimport webapi from '@/webapi'\n\nconst browseData = {\n load: function (to) {\n return webapi.search({\n type: 'album',\n expression: 'time_added after 8 weeks ago and media_kind is music having track_count > 3 order by time_added desc',\n limit: 50\n })\n },\n\n set: function (vm, response) {\n vm.recently_added = response.data.albums\n }\n}\n\nexport default {\n name: 'PageBrowseType',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, ListAlbums },\n\n data () {\n return {\n recently_added: {}\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageBrowseRecentlyAdded.vue?vue&type=template&id=3bc00af8&\"\nimport script from \"./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"\nexport * from \"./PageBrowseRecentlyAdded.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Recently played\")]),_c('p',{staticClass:\"heading\"},[_vm._v(\"tracks\")])]),_c('template',{slot:\"content\"},[_c('list-tracks',{attrs:{\"tracks\":_vm.recently_played.items}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Recently played</p>\n <p class=\"heading\">tracks</p>\n </template>\n <template slot=\"content\">\n <list-tracks :tracks=\"recently_played.items\"></list-tracks>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport ListTracks from '@/components/ListTracks'\nimport webapi from '@/webapi'\n\nconst browseData = {\n load: function (to) {\n return webapi.search({\n type: 'track',\n expression: 'time_played after 8 weeks ago and media_kind is music order by time_played desc',\n limit: 50\n })\n },\n\n set: function (vm, response) {\n vm.recently_played = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageBrowseType',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, ListTracks },\n\n data () {\n return {\n recently_played: {}\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageBrowseRecentlyPlayed.vue?vue&type=template&id=6755b6f8&\"\nimport script from \"./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"\nexport * from \"./PageBrowseRecentlyPlayed.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.artists_list.indexList}}),_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Filter\")]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_singles),expression:\"hide_singles\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSingles\",\"type\":\"checkbox\",\"name\":\"switchHideSingles\"},domProps:{\"checked\":Array.isArray(_vm.hide_singles)?_vm._i(_vm.hide_singles,null)>-1:(_vm.hide_singles)},on:{\"change\":function($event){var $$a=_vm.hide_singles,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_singles=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_singles=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_singles=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSingles\"}},[_vm._v(\"Hide singles\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides artists that only appear on singles or playlists.\")])]),(_vm.spotify_enabled)?_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_spotify),expression:\"hide_spotify\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSpotify\",\"type\":\"checkbox\",\"name\":\"switchHideSpotify\"},domProps:{\"checked\":Array.isArray(_vm.hide_spotify)?_vm._i(_vm.hide_spotify,null)>-1:(_vm.hide_spotify)},on:{\"change\":function($event){var $$a=_vm.hide_spotify,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_spotify=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_spotify=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_spotify=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSpotify\"}},[_vm._v(\"Hide artists from Spotify\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides artists that only appear in your Spotify library.\")])]):_vm._e()]),_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Sort by\")]),_c('dropdown-menu',{attrs:{\"options\":_vm.sort_options},model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}})],1)])],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Artists\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.artists_list.sortedAndFiltered.length)+\" Artists\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('list-artists',{attrs:{\"artists\":_vm.artists_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('nav',{staticClass:\"buttons is-centered fd-is-square\",staticStyle:{\"margin-bottom\":\"16px\"}},_vm._l((_vm.filtered_index),function(char){return _c('a',{key:char,staticClass:\"button is-small\",on:{\"click\":function($event){return _vm.nav(char)}}},[_vm._v(_vm._s(char))])}),0)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section>\n <nav class=\"buttons is-centered fd-is-square\" style=\"margin-bottom: 16px;\">\n <a v-for=\"char in filtered_index\" :key=\"char\" class=\"button is-small\" @click=\"nav(char)\">{{ char }}</a>\n </nav>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'IndexButtonList',\n\n props: ['index'],\n\n computed: {\n filtered_index () {\n const specialChars = '!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^`{|}~'\n return this.index.filter(c => !specialChars.includes(c))\n }\n },\n\n methods: {\n nav: function (id) {\n this.$router.push({ path: this.$router.currentRoute.path + '#index_' + id })\n },\n\n scroll_to_top: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IndexButtonList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./IndexButtonList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./IndexButtonList.vue?vue&type=template&id=4b37eeb5&\"\nimport script from \"./IndexButtonList.vue?vue&type=script&lang=js&\"\nexport * from \"./IndexButtonList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.is_grouped)?_c('div',_vm._l((_vm.artists.indexList),function(idx){return _c('div',{key:idx,staticClass:\"mb-6\"},[_c('span',{staticClass:\"tag is-info is-light is-small has-text-weight-bold\",attrs:{\"id\":'index_' + idx}},[_vm._v(_vm._s(idx))]),_vm._l((_vm.artists.grouped[idx]),function(artist){return _c('list-item-artist',{key:artist.id,attrs:{\"artist\":artist},on:{\"click\":function($event){return _vm.open_artist(artist)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)})],2)}),0):_c('div',_vm._l((_vm.artists_list),function(artist){return _c('list-item-artist',{key:artist.id,attrs:{\"artist\":artist},on:{\"click\":function($event){return _vm.open_artist(artist)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),1),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_details_modal,\"artist\":_vm.selected_artist,\"media_kind\":_vm.media_kind},on:{\"close\":function($event){_vm.show_details_modal = false}}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.artist.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.artist.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemArtist',\n props: ['artist']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemArtist.vue?vue&type=template&id=6f373e4f&functional=true&\"\nimport script from \"./ListItemArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.artist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Albums\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.album_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.track_count))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.data_kind))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Added at\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.artist.time_added,'L LT')))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_artist\">{{ artist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Albums</span>\n <span class=\"title is-6\">{{ artist.album_count }}</span>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <span class=\"title is-6\">{{ artist.track_count }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ artist.data_kind }}</span>\n </p>\n <p>\n <span class=\"heading\">Added at</span>\n <span class=\"title is-6\">{{ artist.time_added | time('L LT') }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogArtist',\n props: ['show', 'artist'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.artist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.artist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.artist.uri)\n },\n\n open_artist: function () {\n this.$emit('close')\n this.$router.push({ path: '/music/artists/' + this.artist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogArtist.vue?vue&type=template&id=c563adce&\"\nimport script from \"./ModalDialogArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","\nexport default class Artists {\n constructor (items, options = { hideSingles: false, hideSpotify: false, sort: 'Name', group: false }) {\n this.items = items\n this.options = options\n this.grouped = {}\n this.sortedAndFiltered = []\n this.indexList = []\n\n this.init()\n }\n\n init () {\n this.createSortedAndFilteredList()\n this.createGroupedList()\n this.createIndexList()\n }\n\n getArtistIndex (artist) {\n if (this.options.sort === 'Name') {\n return artist.name_sort.charAt(0).toUpperCase()\n }\n return artist.time_added.substring(0, 4)\n }\n\n isArtistVisible (artist) {\n if (this.options.hideSingles && artist.track_count <= (artist.album_count * 2)) {\n return false\n }\n if (this.options.hideSpotify && artist.data_kind === 'spotify') {\n return false\n }\n return true\n }\n\n createIndexList () {\n this.indexList = [...new Set(this.sortedAndFiltered\n .map(artist => this.getArtistIndex(artist)))]\n }\n\n createSortedAndFilteredList () {\n var artistsSorted = this.items\n if (this.options.hideSingles || this.options.hideSpotify || this.options.hideOther) {\n artistsSorted = artistsSorted.filter(artist => this.isArtistVisible(artist))\n }\n if (this.options.sort === 'Recently added') {\n artistsSorted = [...artistsSorted].sort((a, b) => b.time_added.localeCompare(a.time_added))\n }\n this.sortedAndFiltered = artistsSorted\n }\n\n createGroupedList () {\n if (!this.options.group) {\n this.grouped = {}\n }\n this.grouped = this.sortedAndFiltered.reduce((r, artist) => {\n const idx = this.getArtistIndex(artist)\n r[idx] = [...r[idx] || [], artist]\n return r\n }, {})\n }\n}\n","<template>\n <div>\n <div v-if=\"is_grouped\">\n <div v-for=\"idx in artists.indexList\" :key=\"idx\" class=\"mb-6\">\n <span class=\"tag is-info is-light is-small has-text-weight-bold\" :id=\"'index_' + idx\">{{ idx }}</span>\n <list-item-artist v-for=\"artist in artists.grouped[idx]\"\n :key=\"artist.id\"\n :artist=\"artist\"\n @click=\"open_artist(artist)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(artist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-artist>\n </div>\n </div>\n <div v-else>\n <list-item-artist v-for=\"artist in artists_list\"\n :key=\"artist.id\"\n :artist=\"artist\"\n @click=\"open_artist(artist)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(artist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-artist>\n </div>\n <modal-dialog-artist :show=\"show_details_modal\" :artist=\"selected_artist\" :media_kind=\"media_kind\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemArtist from '@/components/ListItemArtist'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport Artists from '@/lib/Artists'\n\nexport default {\n name: 'ListArtists',\n components: { ListItemArtist, ModalDialogArtist },\n\n props: ['artists', 'media_kind'],\n\n data () {\n return {\n show_details_modal: false,\n selected_artist: {}\n }\n },\n\n computed: {\n media_kind_resolved: function () {\n return this.media_kind ? this.media_kind : this.selected_artist.media_kind\n },\n\n artists_list: function () {\n if (Array.isArray(this.artists)) {\n return this.artists\n }\n return this.artists.sortedAndFiltered\n },\n\n is_grouped: function () {\n return (this.artists instanceof Artists && this.artists.options.group)\n }\n },\n\n methods: {\n open_artist: function (artist) {\n this.selected_artist = artist\n if (this.media_kind_resolved === 'podcast') {\n // No artist page for podcasts\n } else if (this.media_kind_resolved === 'audiobook') {\n this.$router.push({ path: '/audiobooks/artists/' + artist.id })\n } else {\n this.$router.push({ path: '/music/artists/' + artist.id })\n }\n },\n\n open_dialog: function (artist) {\n this.selected_artist = artist\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListArtists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListArtists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListArtists.vue?vue&type=template&id=a9a21416&\"\nimport script from \"./ListArtists.vue?vue&type=script&lang=js&\"\nexport * from \"./ListArtists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.onClickOutside),expression:\"onClickOutside\"}],staticClass:\"dropdown\",class:{ 'is-active': _vm.is_active }},[_c('div',{staticClass:\"dropdown-trigger\"},[_c('button',{staticClass:\"button\",attrs:{\"aria-haspopup\":\"true\",\"aria-controls\":\"dropdown-menu\"},on:{\"click\":function($event){_vm.is_active = !_vm.is_active}}},[_c('span',[_vm._v(_vm._s(_vm.value))]),_vm._m(0)])]),_c('div',{staticClass:\"dropdown-menu\",attrs:{\"id\":\"dropdown-menu\",\"role\":\"menu\"}},[_c('div',{staticClass:\"dropdown-content\"},_vm._l((_vm.options),function(option){return _c('a',{key:option,staticClass:\"dropdown-item\",class:{'is-active': _vm.value === option},on:{\"click\":function($event){return _vm.select(option)}}},[_vm._v(\" \"+_vm._s(option)+\" \")])}),0)])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-chevron-down\",attrs:{\"aria-hidden\":\"true\"}})])}]\n\nexport { render, staticRenderFns }","<template>\n <div class=\"dropdown\" :class=\"{ 'is-active': is_active }\" v-click-outside=\"onClickOutside\">\n <div class=\"dropdown-trigger\">\n <button class=\"button\" aria-haspopup=\"true\" aria-controls=\"dropdown-menu\" @click=\"is_active = !is_active\">\n <span>{{ value }}</span>\n <span class=\"icon is-small\">\n <i class=\"mdi mdi-chevron-down\" aria-hidden=\"true\"></i>\n </span>\n </button>\n </div>\n <div class=\"dropdown-menu\" id=\"dropdown-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <a class=\"dropdown-item\"\n v-for=\"option in options\" :key=\"option\"\n :class=\"{'is-active': value === option}\"\n @click=\"select(option)\">\n {{ option }}\n </a>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'DropdownMenu',\n\n props: ['value', 'options'],\n\n data () {\n return {\n is_active: false\n }\n },\n\n methods: {\n onClickOutside (event) {\n this.is_active = false\n },\n\n select (option) {\n this.is_active = false\n this.$emit('input', option)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownMenu.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DropdownMenu.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DropdownMenu.vue?vue&type=template&id=56ac032b&\"\nimport script from \"./DropdownMenu.vue?vue&type=script&lang=js&\"\nexport * from \"./DropdownMenu.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"artists_list.indexList\"></index-button-list>\n\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Filter</p>\n <div class=\"field\">\n <div class=\"control\">\n <input id=\"switchHideSingles\" type=\"checkbox\" name=\"switchHideSingles\" class=\"switch\" v-model=\"hide_singles\">\n <label for=\"switchHideSingles\">Hide singles</label>\n </div>\n <p class=\"help\">If active, hides artists that only appear on singles or playlists.</p>\n </div>\n <div class=\"field\" v-if=\"spotify_enabled\">\n <div class=\"control\">\n <input id=\"switchHideSpotify\" type=\"checkbox\" name=\"switchHideSpotify\" class=\"switch\" v-model=\"hide_spotify\">\n <label for=\"switchHideSpotify\">Hide artists from Spotify</label>\n </div>\n <p class=\"help\">If active, hides artists that only appear in your Spotify library.</p>\n </div>\n </div>\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Sort by</p>\n <dropdown-menu v-model=\"sort\" :options=\"sort_options\"></dropdown-menu>\n </div>\n </div>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Artists</p>\n <p class=\"heading\">{{ artists_list.sortedAndFiltered.length }} Artists</p>\n </template>\n <template slot=\"heading-right\">\n </template>\n <template slot=\"content\">\n <list-artists :artists=\"artists_list\"></list-artists>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListArtists from '@/components/ListArtists'\nimport DropdownMenu from '@/components/DropdownMenu'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport Artists from '@/lib/Artists'\n\nconst artistsData = {\n load: function (to) {\n return webapi.library_artists('music')\n },\n\n set: function (vm, response) {\n vm.artists = response.data\n }\n}\n\nexport default {\n name: 'PageArtists',\n mixins: [LoadDataBeforeEnterMixin(artistsData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListArtists, DropdownMenu },\n\n data () {\n return {\n artists: { items: [] },\n sort_options: ['Name', 'Recently added']\n }\n },\n\n computed: {\n artists_list () {\n return new Artists(this.artists.items, {\n hideSingles: this.hide_singles,\n hideSpotify: this.hide_spotify,\n sort: this.sort,\n group: true\n })\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n hide_singles: {\n get () {\n return this.$store.state.hide_singles\n },\n set (value) {\n this.$store.commit(types.HIDE_SINGLES, value)\n }\n },\n\n hide_spotify: {\n get () {\n return this.$store.state.hide_spotify\n },\n set (value) {\n this.$store.commit(types.HIDE_SPOTIFY, value)\n }\n },\n\n sort: {\n get () {\n return this.$store.state.artists_sort\n },\n set (value) {\n this.$store.commit(types.ARTISTS_SORT, value)\n }\n }\n },\n\n methods: {\n scrollToTop: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageArtists.vue?vue&type=template&id=3d4c8b43&\"\nimport script from \"./PageArtists.vue?vue&type=script&lang=js&\"\nexport * from \"./PageArtists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"options\"},[_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Sort by\")]),_c('dropdown-menu',{attrs:{\"options\":_vm.sort_options},model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}})],1)])]),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.artist.album_count)+\" albums | \"),_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_tracks}},[_vm._v(_vm._s(_vm.artist.track_count)+\" tracks\")])]),_c('list-albums',{attrs:{\"albums\":_vm.albums_list}}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"options\">\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Sort by</p>\n <dropdown-menu v-model=\"sort\" :options=\"sort_options\"></dropdown-menu>\n </div>\n </div>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ artist.album_count }} albums | <a class=\"has-text-link\" @click=\"open_tracks\">{{ artist.track_count }} tracks</a></p>\n <list-albums :albums=\"albums_list\"></list-albums>\n <modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport DropdownMenu from '@/components/DropdownMenu'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport Albums from '@/lib/Albums'\n\nconst artistData = {\n load: function (to) {\n return Promise.all([\n webapi.library_artist(to.params.artist_id),\n webapi.library_artist_albums(to.params.artist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0].data\n vm.albums = response[1].data\n }\n}\n\nexport default {\n name: 'PageArtist',\n mixins: [LoadDataBeforeEnterMixin(artistData)],\n components: { ContentWithHeading, ListAlbums, ModalDialogArtist, DropdownMenu },\n\n data () {\n return {\n artist: {},\n albums: { items: [] },\n\n sort_options: ['Name', 'Release date'],\n show_artist_details_modal: false\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.albums.items, {\n sort: this.sort,\n group: false\n })\n },\n\n sort: {\n get () {\n return this.$store.state.artist_albums_sort\n },\n set (value) {\n this.$store.commit(types.ARTIST_ALBUMS_SORT, value)\n }\n }\n },\n\n methods: {\n open_tracks: function () {\n this.$router.push({ path: '/music/artists/' + this.artist.id + '/tracks' })\n },\n\n play: function () {\n webapi.player_play_uri(this.albums.items.map(a => a.uri).join(','), true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageArtist.vue?vue&type=template&id=03dca38a&\"\nimport script from \"./PageArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./PageArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.albums_list.indexList}}),_c('div',{staticClass:\"columns\"},[_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Filter\")]),_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_singles),expression:\"hide_singles\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSingles\",\"type\":\"checkbox\",\"name\":\"switchHideSingles\"},domProps:{\"checked\":Array.isArray(_vm.hide_singles)?_vm._i(_vm.hide_singles,null)>-1:(_vm.hide_singles)},on:{\"change\":function($event){var $$a=_vm.hide_singles,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_singles=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_singles=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_singles=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSingles\"}},[_vm._v(\"Hide singles\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides singles and albums with tracks that only appear in playlists.\")])]),(_vm.spotify_enabled)?_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.hide_spotify),expression:\"hide_spotify\"}],staticClass:\"switch\",attrs:{\"id\":\"switchHideSpotify\",\"type\":\"checkbox\",\"name\":\"switchHideSpotify\"},domProps:{\"checked\":Array.isArray(_vm.hide_spotify)?_vm._i(_vm.hide_spotify,null)>-1:(_vm.hide_spotify)},on:{\"change\":function($event){var $$a=_vm.hide_spotify,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.hide_spotify=$$a.concat([$$v]))}else{$$i>-1&&(_vm.hide_spotify=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.hide_spotify=$$c}}}}),_c('label',{attrs:{\"for\":\"switchHideSpotify\"}},[_vm._v(\"Hide albums from Spotify\")])]),_c('p',{staticClass:\"help\"},[_vm._v(\"If active, hides albums that only appear in your Spotify library.\")])]):_vm._e()]),_c('div',{staticClass:\"column\"},[_c('p',{staticClass:\"heading\",staticStyle:{\"margin-bottom\":\"24px\"}},[_vm._v(\"Sort by\")]),_c('dropdown-menu',{attrs:{\"options\":_vm.sort_options},model:{value:(_vm.sort),callback:function ($$v) {_vm.sort=$$v},expression:\"sort\"}})],1)])],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Albums\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums_list.sortedAndFiltered.length)+\" Albums\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"albums_list.indexList\"></index-button-list>\n\n <div class=\"columns\">\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Filter</p>\n <div class=\"field\">\n <div class=\"control\">\n <input id=\"switchHideSingles\" type=\"checkbox\" name=\"switchHideSingles\" class=\"switch\" v-model=\"hide_singles\">\n <label for=\"switchHideSingles\">Hide singles</label>\n </div>\n <p class=\"help\">If active, hides singles and albums with tracks that only appear in playlists.</p>\n </div>\n <div class=\"field\" v-if=\"spotify_enabled\">\n <div class=\"control\">\n <input id=\"switchHideSpotify\" type=\"checkbox\" name=\"switchHideSpotify\" class=\"switch\" v-model=\"hide_spotify\">\n <label for=\"switchHideSpotify\">Hide albums from Spotify</label>\n </div>\n <p class=\"help\">If active, hides albums that only appear in your Spotify library.</p>\n </div>\n </div>\n <div class=\"column\">\n <p class=\"heading\" style=\"margin-bottom: 24px;\">Sort by</p>\n <dropdown-menu v-model=\"sort\" :options=\"sort_options\"></dropdown-menu>\n </div>\n </div>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Albums</p>\n <p class=\"heading\">{{ albums_list.sortedAndFiltered.length }} Albums</p>\n </template>\n <template slot=\"heading-right\">\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums_list\"></list-albums>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListAlbums from '@/components/ListAlbums'\nimport DropdownMenu from '@/components/DropdownMenu'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport Albums from '@/lib/Albums'\n\nconst albumsData = {\n load: function (to) {\n return webapi.library_albums('music')\n },\n\n set: function (vm, response) {\n vm.albums = response.data\n vm.index_list = [...new Set(vm.albums.items\n .filter(album => !vm.$store.state.hide_singles || album.track_count > 2)\n .map(album => album.name_sort.charAt(0).toUpperCase()))]\n }\n}\n\nexport default {\n name: 'PageAlbums',\n mixins: [LoadDataBeforeEnterMixin(albumsData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListAlbums, DropdownMenu },\n\n data () {\n return {\n albums: { items: [] },\n sort_options: ['Name', 'Recently added', 'Recently released']\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.albums.items, {\n hideSingles: this.hide_singles,\n hideSpotify: this.hide_spotify,\n sort: this.sort,\n group: true\n })\n },\n\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n },\n\n hide_singles: {\n get () {\n return this.$store.state.hide_singles\n },\n set (value) {\n this.$store.commit(types.HIDE_SINGLES, value)\n }\n },\n\n hide_spotify: {\n get () {\n return this.$store.state.hide_spotify\n },\n set (value) {\n this.$store.commit(types.HIDE_SPOTIFY, value)\n }\n },\n\n sort: {\n get () {\n return this.$store.state.albums_sort\n },\n set (value) {\n this.$store.commit(types.ALBUMS_SORT, value)\n }\n }\n },\n\n methods: {\n scrollToTop: function () {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbums.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbums.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAlbums.vue?vue&type=template&id=f8e2027c&\"\nimport script from \"./PageAlbums.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAlbums.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-hero',[_c('template',{slot:\"heading-left\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-6 has-text-link has-text-weight-normal\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artist))])]),_c('div',{staticClass:\"buttons fd-is-centered-mobile fd-has-margin-top\"},[_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])]),_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])])])]),_c('template',{slot:\"heading-right\"},[_c('p',{staticClass:\"image is-square fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.album.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name},on:{\"click\":function($event){_vm.show_album_details_modal = true}}})],1)]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading is-7 has-text-centered-mobile fd-has-margin-top\"},[_vm._v(_vm._s(_vm.album.track_count)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks,\"uris\":_vm.album.uri}}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-hero>\n <template slot=\"heading-left\">\n <h1 class=\"title is-5\">{{ album.name }}</h1>\n <h2 class=\"subtitle is-6 has-text-link has-text-weight-normal\"><a class=\"has-text-link\" @click=\"open_artist\">{{ album.artist }}</a></h2>\n\n <div class=\"buttons fd-is-centered-mobile fd-has-margin-top\">\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n </div>\n </template>\n <template slot=\"heading-right\">\n <p class=\"image is-square fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n @click=\"show_album_details_modal = true\" />\n </p>\n </template>\n <template slot=\"content\">\n <p class=\"heading is-7 has-text-centered-mobile fd-has-margin-top\">{{ album.track_count }} tracks</p>\n <list-tracks :tracks=\"tracks\" :uris=\"album.uri\"></list-tracks>\n <modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-hero>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHero from '@/templates/ContentWithHero'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\n\nconst albumData = {\n load: function (to) {\n return Promise.all([\n webapi.library_album(to.params.album_id),\n webapi.library_album_tracks(to.params.album_id)\n ])\n },\n\n set: function (vm, response) {\n vm.album = response[0].data\n vm.tracks = response[1].data.items\n }\n}\n\nexport default {\n name: 'PageAlbum',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHero, ListTracks, ModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n album: {},\n tracks: [],\n\n show_album_details_modal: false\n }\n },\n\n methods: {\n open_artist: function () {\n this.show_details_modal = false\n this.$router.push({ path: '/music/artists/' + this.album.artist_id })\n },\n\n play: function () {\n webapi.player_play_uri(this.album.uri, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAlbum.vue?vue&type=template&id=ad2b3a70&\"\nimport script from \"./PageAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Genres\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.genres.total)+\" genres\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.genres.items),function(genre){return _c('list-item-genre',{key:genre.name,attrs:{\"genre\":genre},on:{\"click\":function($event){return _vm.open_genre(genre)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(genre)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-genre',{attrs:{\"show\":_vm.show_details_modal,\"genre\":_vm.selected_genre},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.genre.name.charAt(0).toUpperCase()}},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.genre.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.genre.name.charAt(0).toUpperCase()\">\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.genre.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemGenre',\n props: ['genre']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemGenre.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemGenre.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemGenre.vue?vue&type=template&id=526e97c7&functional=true&\"\nimport script from \"./ListItemGenre.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemGenre.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(_vm._s(_vm.genre.name))])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_genre\">{{ genre.name }}</a>\n </p>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogGenre',\n props: ['show', 'genre'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_expression('genre is \"' + this.genre.name + '\" and media_kind is music', false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_expression_add('genre is \"' + this.genre.name + '\" and media_kind is music')\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_expression_add_next('genre is \"' + this.genre.name + '\" and media_kind is music')\n },\n\n open_genre: function () {\n this.$emit('close')\n this.$router.push({ name: 'Genre', params: { genre: this.genre.name } })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogGenre.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogGenre.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogGenre.vue?vue&type=template&id=f6ef5fb8&\"\nimport script from \"./ModalDialogGenre.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogGenre.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Genres</p>\n <p class=\"heading\">{{ genres.total }} genres</p>\n </template>\n <template slot=\"content\">\n <list-item-genre v-for=\"genre in genres.items\" :key=\"genre.name\" :genre=\"genre\" @click=\"open_genre(genre)\">\n <template slot=\"actions\">\n <a @click=\"open_dialog(genre)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-genre>\n <modal-dialog-genre :show=\"show_details_modal\" :genre=\"selected_genre\" @close=\"show_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListItemGenre from '@/components/ListItemGenre'\nimport ModalDialogGenre from '@/components/ModalDialogGenre'\nimport webapi from '@/webapi'\n\nconst genresData = {\n load: function (to) {\n return webapi.library_genres()\n },\n\n set: function (vm, response) {\n vm.genres = response.data\n }\n}\n\nexport default {\n name: 'PageGenres',\n mixins: [LoadDataBeforeEnterMixin(genresData)],\n components: { ContentWithHeading, TabsMusic, IndexButtonList, ListItemGenre, ModalDialogGenre },\n\n data () {\n return {\n genres: { items: [] },\n\n show_details_modal: false,\n selected_genre: {}\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.genres.items\n .map(genre => genre.name.charAt(0).toUpperCase()))]\n }\n },\n\n methods: {\n open_genre: function (genre) {\n this.$router.push({ name: 'Genre', params: { genre: genre.name } })\n },\n\n open_dialog: function (genre) {\n this.selected_genre = genre\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenres.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenres.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageGenres.vue?vue&type=template&id=9a23c802&\"\nimport script from \"./PageGenres.vue?vue&type=script&lang=js&\"\nexport * from \"./PageGenres.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_genre_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.genre_albums.total)+\" albums | \"),_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_tracks}},[_vm._v(\"tracks\")])]),_c('list-albums',{attrs:{\"albums\":_vm.genre_albums.items}}),_c('modal-dialog-genre',{attrs:{\"show\":_vm.show_genre_details_modal,\"genre\":{ 'name': _vm.name }},on:{\"close\":function($event){_vm.show_genre_details_modal = false}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_genre_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ genre_albums.total }} albums | <a class=\"has-text-link\" @click=\"open_tracks\">tracks</a></p>\n <list-albums :albums=\"genre_albums.items\"></list-albums>\n <modal-dialog-genre :show=\"show_genre_details_modal\" :genre=\"{ 'name': name }\" @close=\"show_genre_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogGenre from '@/components/ModalDialogGenre'\nimport webapi from '@/webapi'\n\nconst genreData = {\n load: function (to) {\n return webapi.library_genre(to.params.genre)\n },\n\n set: function (vm, response) {\n vm.name = vm.$route.params.genre\n vm.genre_albums = response.data.albums\n }\n}\n\nexport default {\n name: 'PageGenre',\n mixins: [LoadDataBeforeEnterMixin(genreData)],\n components: { ContentWithHeading, IndexButtonList, ListAlbums, ModalDialogGenre },\n\n data () {\n return {\n name: '',\n genre_albums: { items: [] },\n\n show_genre_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.genre_albums.items\n .map(album => album.name.charAt(0).toUpperCase()))]\n }\n },\n\n methods: {\n open_tracks: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'GenreTracks', params: { genre: this.name } })\n },\n\n play: function () {\n webapi.player_play_expression('genre is \"' + this.name + '\" and media_kind is music', true)\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenre.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenre.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageGenre.vue?vue&type=template&id=2268caa3&\"\nimport script from \"./PageGenre.vue?vue&type=script&lang=js&\"\nexport * from \"./PageGenre.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.genre))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_genre_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_genre}},[_vm._v(\"albums\")]),_vm._v(\" | \"+_vm._s(_vm.tracks.total)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items,\"expression\":_vm.expression}}),_c('modal-dialog-genre',{attrs:{\"show\":_vm.show_genre_details_modal,\"genre\":{ 'name': _vm.genre }},on:{\"close\":function($event){_vm.show_genre_details_modal = false}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ genre }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_genre_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\"><a class=\"has-text-link\" @click=\"open_genre\">albums</a> | {{ tracks.total }} tracks</p>\n <list-tracks :tracks=\"tracks.items\" :expression=\"expression\"></list-tracks>\n <modal-dialog-genre :show=\"show_genre_details_modal\" :genre=\"{ 'name': genre }\" @close=\"show_genre_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogGenre from '@/components/ModalDialogGenre'\nimport webapi from '@/webapi'\n\nconst tracksData = {\n load: function (to) {\n return webapi.library_genre_tracks(to.params.genre)\n },\n\n set: function (vm, response) {\n vm.genre = vm.$route.params.genre\n vm.tracks = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageGenreTracks',\n mixins: [LoadDataBeforeEnterMixin(tracksData)],\n components: { ContentWithHeading, ListTracks, IndexButtonList, ModalDialogGenre },\n\n data () {\n return {\n tracks: { items: [] },\n genre: '',\n\n show_genre_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.tracks.items\n .map(track => track.title_sort.charAt(0).toUpperCase()))]\n },\n\n expression () {\n return 'genre is \"' + this.genre + '\" and media_kind is music'\n }\n },\n\n methods: {\n open_genre: function () {\n this.show_details_modal = false\n this.$router.push({ name: 'Genre', params: { genre: this.genre } })\n },\n\n play: function () {\n webapi.player_play_expression(this.expression, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenreTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageGenreTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageGenreTracks.vue?vue&type=template&id=0fff7765&\"\nimport script from \"./PageGenreTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./PageGenreTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.index_list}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.artist.album_count)+\" albums\")]),_vm._v(\" | \"+_vm._s(_vm.artist.track_count)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items,\"uris\":_vm.track_uris}}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"index_list\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\"><a class=\"has-text-link\" @click=\"open_artist\">{{ artist.album_count }} albums</a> | {{ artist.track_count }} tracks</p>\n <list-tracks :tracks=\"tracks.items\" :uris=\"track_uris\"></list-tracks>\n <modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport webapi from '@/webapi'\n\nconst tracksData = {\n load: function (to) {\n return Promise.all([\n webapi.library_artist(to.params.artist_id),\n webapi.library_artist_tracks(to.params.artist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0].data\n vm.tracks = response[1].data.tracks\n }\n}\n\nexport default {\n name: 'PageArtistTracks',\n mixins: [LoadDataBeforeEnterMixin(tracksData)],\n components: { ContentWithHeading, ListTracks, IndexButtonList, ModalDialogArtist },\n\n data () {\n return {\n artist: {},\n tracks: { items: [] },\n\n show_artist_details_modal: false\n }\n },\n\n computed: {\n index_list () {\n return [...new Set(this.tracks.items\n .map(track => track.title_sort.charAt(0).toUpperCase()))]\n },\n\n track_uris () {\n return this.tracks.items.map(a => a.uri).join(',')\n }\n },\n\n methods: {\n open_artist: function () {\n this.show_details_modal = false\n this.$router.push({ path: '/music/artists/' + this.artist.id })\n },\n\n play: function () {\n webapi.player_play_uri(this.tracks.items.map(a => a.uri).join(','), true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtistTracks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageArtistTracks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageArtistTracks.vue?vue&type=template&id=6da2b51e&\"\nimport script from \"./PageArtistTracks.vue?vue&type=script&lang=js&\"\nexport * from \"./PageArtistTracks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[(_vm.new_episodes.items.length > 0)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"New episodes\")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.mark_all_played}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-pencil\"})]),_c('span',[_vm._v(\"Mark All Played\")])])])]),_c('template',{slot:\"content\"},[_vm._l((_vm.new_episodes.items),function(track){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(track)}}},[_c('template',{slot:\"progress\"},[_c('range-slider',{staticClass:\"track-progress\",attrs:{\"min\":\"0\",\"max\":track.length_ms,\"step\":\"1\",\"disabled\":true,\"value\":track.seek_ms}})],1),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_track_details_modal = false},\"play-count-changed\":_vm.reload_new_episodes}})],2)],2):_vm._e(),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Podcasts\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums.total)+\" podcasts\")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.open_add_podcast_dialog}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-rss\"})]),_c('span',[_vm._v(\"Add Podcast\")])])])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums.items},on:{\"play-count-changed\":function($event){return _vm.reload_new_episodes()},\"podcast-deleted\":function($event){return _vm.reload_podcasts()}}}),_c('modal-dialog-add-rss',{attrs:{\"show\":_vm.show_url_modal},on:{\"close\":function($event){_vm.show_url_modal = false},\"podcast-added\":function($event){return _vm.reload_podcasts()}}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Add Podcast RSS feed URL\")]),_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.add_stream($event)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.url),expression:\"url\"}],ref:\"url_field\",staticClass:\"input is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"http://url-to-rss\",\"disabled\":_vm.loading},domProps:{\"value\":(_vm.url)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.url=$event.target.value}}}),_c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-rss\"})])]),_c('p',{staticClass:\"help\"},[_vm._v(\"Adding a podcast includes creating an RSS playlist, that will allow forked-daapd to manage the podcast subscription. \")])])])]),(_vm.loading)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item button is-loading\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-web\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Processing ...\")])])]):_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-danger\",on:{\"click\":function($event){return _vm.$emit('close')}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-cancel\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Cancel\")])]),_c('a',{staticClass:\"card-footer-item has-background-info has-text-white has-text-weight-bold\",on:{\"click\":_vm.add_stream}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">Add Podcast RSS feed URL</p>\n <form @submit.prevent=\"add_stream\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-shadowless\" type=\"text\" placeholder=\"http://url-to-rss\" v-model=\"url\" :disabled=\"loading\" ref=\"url_field\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-rss\"></i>\n </span>\n </p>\n <p class=\"help\">Adding a podcast includes creating an RSS playlist, that will allow forked-daapd to manage the podcast subscription.\n </p>\n </div>\n </form>\n </div>\n <footer class=\"card-footer\" v-if=\"loading\">\n <a class=\"card-footer-item button is-loading\">\n <span class=\"icon\"><i class=\"mdi mdi-web\"></i></span> <span class=\"is-size-7\">Processing ...</span>\n </a>\n </footer>\n <footer class=\"card-footer\" v-else>\n <a class=\"card-footer-item has-text-danger\" @click=\"$emit('close')\">\n <span class=\"icon\"><i class=\"mdi mdi-cancel\"></i></span> <span class=\"is-size-7\">Cancel</span>\n </a>\n <a class=\"card-footer-item has-background-info has-text-white has-text-weight-bold\" @click=\"add_stream\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAddRss',\n props: ['show'],\n\n data () {\n return {\n url: '',\n loading: false\n }\n },\n\n methods: {\n add_stream: function () {\n this.loading = true\n webapi.library_add(this.url).then(() => {\n this.$emit('close')\n this.$emit('podcast-added')\n this.url = ''\n }).catch(() => {\n this.loading = false\n })\n }\n },\n\n watch: {\n 'show' () {\n if (this.show) {\n this.loading = false\n\n // We need to delay setting the focus to the input field until the field is part of the dom and visible\n setTimeout(() => {\n this.$refs.url_field.focus()\n }, 10)\n }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddRss.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogAddRss.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogAddRss.vue?vue&type=template&id=21695499&\"\nimport script from \"./ModalDialogAddRss.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogAddRss.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <content-with-heading v-if=\"new_episodes.items.length > 0\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">New episodes</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small\" @click=\"mark_all_played\">\n <span class=\"icon\">\n <i class=\"mdi mdi-pencil\"></i>\n </span>\n <span>Mark All Played</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <list-item-track v-for=\"track in new_episodes.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(track)\">\n <template slot=\"progress\">\n <range-slider\n class=\"track-progress\"\n min=\"0\"\n :max=\"track.length_ms\"\n step=\"1\"\n :disabled=\"true\"\n :value=\"track.seek_ms\" >\n </range-slider>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" @close=\"show_track_details_modal = false\" @play-count-changed=\"reload_new_episodes\" />\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Podcasts</p>\n <p class=\"heading\">{{ albums.total }} podcasts</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small\" @click=\"open_add_podcast_dialog\">\n <span class=\"icon\">\n <i class=\"mdi mdi-rss\"></i>\n </span>\n <span>Add Podcast</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums.items\"\n @play-count-changed=\"reload_new_episodes()\"\n @podcast-deleted=\"reload_podcasts()\">\n </list-albums>\n <modal-dialog-add-rss\n :show=\"show_url_modal\"\n @close=\"show_url_modal = false\"\n @podcast-added=\"reload_podcasts()\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAddRss from '@/components/ModalDialogAddRss'\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nconst albumsData = {\n load: function (to) {\n return Promise.all([\n webapi.library_albums('podcast'),\n webapi.library_podcasts_new_episodes()\n ])\n },\n\n set: function (vm, response) {\n vm.albums = response[0].data\n vm.new_episodes = response[1].data.tracks\n }\n}\n\nexport default {\n name: 'PagePodcasts',\n mixins: [LoadDataBeforeEnterMixin(albumsData)],\n components: { ContentWithHeading, ListItemTrack, ListAlbums, ModalDialogTrack, ModalDialogAddRss, RangeSlider },\n\n data () {\n return {\n albums: { items: [] },\n new_episodes: { items: [] },\n\n show_url_modal: false,\n\n show_track_details_modal: false,\n selected_track: {}\n }\n },\n\n methods: {\n play_track: function (track) {\n webapi.player_play_uri(track.uri, false)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n mark_all_played: function () {\n this.new_episodes.items.forEach(ep => {\n webapi.library_track_update(ep.id, { play_count: 'increment' })\n })\n this.new_episodes.items = { }\n },\n\n open_add_podcast_dialog: function (item) {\n this.show_url_modal = true\n },\n\n reload_new_episodes: function () {\n webapi.library_podcasts_new_episodes().then(({ data }) => {\n this.new_episodes = data.tracks\n })\n },\n\n reload_podcasts: function () {\n webapi.library_albums('podcast').then(({ data }) => {\n this.albums = data\n this.reload_new_episodes()\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcasts.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcasts.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePodcasts.vue?vue&type=template&id=aa493f06&\"\nimport script from \"./PagePodcasts.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePodcasts.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.album.name)+\" \")])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_c('span',[_vm._v(\"Play\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.album.track_count)+\" tracks\")]),_vm._l((_vm.tracks),function(track){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(track)}}},[_c('template',{slot:\"progress\"},[_c('range-slider',{staticClass:\"track-progress\",attrs:{\"min\":\"0\",\"max\":track.length_ms,\"step\":\"1\",\"disabled\":true,\"value\":track.seek_ms}})],1),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_details_modal = false},\"play-count-changed\":_vm.reload_tracks}}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album,\"media_kind\":'podcast',\"new_tracks\":_vm.new_tracks},on:{\"close\":function($event){_vm.show_album_details_modal = false},\"play-count-changed\":_vm.reload_tracks,\"remove-podcast\":_vm.open_remove_podcast_dialog}}),_c('modal-dialog',{attrs:{\"show\":_vm.show_remove_podcast_modal,\"title\":\"Remove podcast\",\"delete_action\":\"Remove\"},on:{\"close\":function($event){_vm.show_remove_podcast_modal = false},\"delete\":_vm.remove_podcast}},[_c('template',{slot:\"modal-content\"},[_c('p',[_vm._v(\"Permanently remove this podcast from your library?\")]),_c('p',{staticClass:\"is-size-7\"},[_vm._v(\"(This will also remove the RSS playlist \"),_c('b',[_vm._v(_vm._s(_vm.rss_playlist_to_remove.name))]),_vm._v(\".)\")])])],2)],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ album.name }}\n </div>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\">\n <i class=\"mdi mdi-play\"></i>\n </span>\n <span>Play</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ album.track_count }} tracks</p>\n <list-item-track v-for=\"track in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(track)\">\n <template slot=\"progress\">\n <range-slider\n class=\"track-progress\"\n min=\"0\"\n :max=\"track.length_ms\"\n step=\"1\"\n :disabled=\"true\"\n :value=\"track.seek_ms\" >\n </range-slider>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n <modal-dialog-track\n :show=\"show_details_modal\"\n :track=\"selected_track\"\n @close=\"show_details_modal = false\"\n @play-count-changed=\"reload_tracks\" />\n <modal-dialog-album\n :show=\"show_album_details_modal\"\n :album=\"album\"\n :media_kind=\"'podcast'\"\n :new_tracks=\"new_tracks\"\n @close=\"show_album_details_modal = false\"\n @play-count-changed=\"reload_tracks\"\n @remove-podcast=\"open_remove_podcast_dialog\" />\n <modal-dialog\n :show=\"show_remove_podcast_modal\"\n title=\"Remove podcast\"\n delete_action=\"Remove\"\n @close=\"show_remove_podcast_modal = false\"\n @delete=\"remove_podcast\">\n <template slot=\"modal-content\">\n <p>Permanently remove this podcast from your library?</p>\n <p class=\"is-size-7\">(This will also remove the RSS playlist <b>{{ rss_playlist_to_remove.name }}</b>.)</p>\n </template>\n </modal-dialog>\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialog from '@/components/ModalDialog'\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nconst albumData = {\n load: function (to) {\n return Promise.all([\n webapi.library_album(to.params.album_id),\n webapi.library_podcast_episodes(to.params.album_id)\n ])\n },\n\n set: function (vm, response) {\n vm.album = response[0].data\n vm.tracks = response[1].data.tracks.items\n }\n}\n\nexport default {\n name: 'PagePodcast',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHeading, ListItemTrack, ModalDialogTrack, RangeSlider, ModalDialogAlbum, ModalDialog },\n\n data () {\n return {\n album: {},\n tracks: [],\n\n show_details_modal: false,\n selected_track: {},\n\n show_album_details_modal: false,\n\n show_remove_podcast_modal: false,\n rss_playlist_to_remove: {}\n }\n },\n\n computed: {\n new_tracks () {\n return this.tracks.filter(track => track.play_count === 0).length\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.album.uri, false)\n },\n\n play_track: function (track) {\n webapi.player_play_uri(track.uri, false)\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n },\n\n open_remove_podcast_dialog: function () {\n this.show_album_details_modal = false\n webapi.library_track_playlists(this.tracks[0].id).then(({ data }) => {\n const rssPlaylists = data.items.filter(pl => pl.type === 'rss')\n if (rssPlaylists.length !== 1) {\n this.$store.dispatch('add_notification', { text: 'Podcast cannot be removed. Probably it was not added as an RSS playlist.', type: 'danger' })\n return\n }\n\n this.rss_playlist_to_remove = rssPlaylists[0]\n this.show_remove_podcast_modal = true\n })\n },\n\n remove_podcast: function () {\n this.show_remove_podcast_modal = false\n webapi.library_playlist_delete(this.rss_playlist_to_remove.id).then(() => {\n this.$router.replace({ path: '/podcasts' })\n })\n },\n\n reload_tracks: function () {\n webapi.library_podcast_episodes(this.album.id).then(({ data }) => {\n this.tracks = data.tracks.items\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcast.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePodcast.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePodcast.vue?vue&type=template&id=f135dc2e&\"\nimport script from \"./PagePodcast.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePodcast.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-audiobooks'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.albums_list.indexList}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Audiobooks\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums_list.sortedAndFiltered.length)+\" Audiobooks\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-tabs-section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small\"},[_c('ul',[_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/audiobooks/artists\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-artist\"})]),_c('span',{},[_vm._v(\"Authors\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/audiobooks/albums\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-album\"})]),_c('span',{},[_vm._v(\"Audiobooks\")])])])],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/audiobooks/artists\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-artist\"></i></span>\n <span class=\"\">Authors</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/audiobooks/albums\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-album\"></i></span>\n <span class=\"\">Audiobooks</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsAudiobooks'\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsAudiobooks.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsAudiobooks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsAudiobooks.vue?vue&type=template&id=0cda5528&\"\nimport script from \"./TabsAudiobooks.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsAudiobooks.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-audiobooks></tabs-audiobooks>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"albums_list.indexList\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Audiobooks</p>\n <p class=\"heading\">{{ albums_list.sortedAndFiltered.length }} Audiobooks</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums_list\"></list-albums>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport TabsAudiobooks from '@/components/TabsAudiobooks'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListAlbums from '@/components/ListAlbums'\nimport webapi from '@/webapi'\nimport Albums from '@/lib/Albums'\n\nconst albumsData = {\n load: function (to) {\n return webapi.library_albums('audiobook')\n },\n\n set: function (vm, response) {\n vm.albums = response.data\n }\n}\n\nexport default {\n name: 'PageAudiobooksAlbums',\n mixins: [LoadDataBeforeEnterMixin(albumsData)],\n components: { TabsAudiobooks, ContentWithHeading, IndexButtonList, ListAlbums },\n\n data () {\n return {\n albums: { items: [] }\n }\n },\n\n computed: {\n albums_list () {\n return new Albums(this.albums.items, {\n sort: 'Name',\n group: true\n })\n }\n },\n\n methods: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksAlbums.vue?vue&type=template&id=35fdc4d3&\"\nimport script from \"./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksAlbums.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-audiobooks'),_c('content-with-heading',[_c('template',{slot:\"options\"},[_c('index-button-list',{attrs:{\"index\":_vm.artists_list.indexList}})],1),_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Authors\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.artists_list.sortedAndFiltered.length)+\" Authors\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('list-artists',{attrs:{\"artists\":_vm.artists_list}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-audiobooks></tabs-audiobooks>\n\n <content-with-heading>\n <template slot=\"options\">\n <index-button-list :index=\"artists_list.indexList\"></index-button-list>\n </template>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Authors</p>\n <p class=\"heading\">{{ artists_list.sortedAndFiltered.length }} Authors</p>\n </template>\n <template slot=\"heading-right\">\n </template>\n <template slot=\"content\">\n <list-artists :artists=\"artists_list\"></list-artists>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsAudiobooks from '@/components/TabsAudiobooks'\nimport IndexButtonList from '@/components/IndexButtonList'\nimport ListArtists from '@/components/ListArtists'\nimport webapi from '@/webapi'\nimport Artists from '@/lib/Artists'\n\nconst artistsData = {\n load: function (to) {\n return webapi.library_artists('audiobook')\n },\n\n set: function (vm, response) {\n vm.artists = response.data\n }\n}\n\nexport default {\n name: 'PageAudiobooksArtists',\n mixins: [LoadDataBeforeEnterMixin(artistsData)],\n components: { ContentWithHeading, TabsAudiobooks, IndexButtonList, ListArtists },\n\n data () {\n return {\n artists: { items: [] }\n }\n },\n\n computed: {\n artists_list () {\n return new Artists(this.artists.items, {\n sort: 'Name',\n group: true\n })\n }\n },\n\n methods: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksArtists.vue?vue&type=template&id=57e179cc&\"\nimport script from \"./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksArtists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.artist.album_count)+\" albums\")]),_c('list-albums',{attrs:{\"albums\":_vm.albums.items}}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ artist.album_count }} albums</p>\n <list-albums :albums=\"albums.items\"></list-albums>\n <modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListAlbums from '@/components/ListAlbums'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport webapi from '@/webapi'\n\nconst artistData = {\n load: function (to) {\n return Promise.all([\n webapi.library_artist(to.params.artist_id),\n webapi.library_artist_albums(to.params.artist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0].data\n vm.albums = response[1].data\n }\n}\n\nexport default {\n name: 'PageAudiobooksArtist',\n mixins: [LoadDataBeforeEnterMixin(artistData)],\n components: { ContentWithHeading, ListAlbums, ModalDialogArtist },\n\n data () {\n return {\n artist: {},\n albums: {},\n\n show_artist_details_modal: false\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.albums.items.map(a => a.uri).join(','), false)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksArtist.vue?vue&type=template&id=1d8187dc&\"\nimport script from \"./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-hero',[_c('template',{slot:\"heading-left\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-6 has-text-link has-text-weight-normal\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artist))])]),_c('div',{staticClass:\"buttons fd-is-centered-mobile fd-has-margin-top\"},[_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Play\")])]),_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])])])]),_c('template',{slot:\"heading-right\"},[_c('p',{staticClass:\"image is-square fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.album.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name},on:{\"click\":function($event){_vm.show_album_details_modal = true}}})],1)]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading is-7 has-text-centered-mobile fd-has-margin-top\"},[_vm._v(_vm._s(_vm.album.track_count)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks,\"uris\":_vm.album.uri}}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album,\"media_kind\":'audiobook'},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-hero>\n <template slot=\"heading-left\">\n <h1 class=\"title is-5\">{{ album.name }}</h1>\n <h2 class=\"subtitle is-6 has-text-link has-text-weight-normal\"><a class=\"has-text-link\" @click=\"open_artist\">{{ album.artist }}</a></h2>\n\n <div class=\"buttons fd-is-centered-mobile fd-has-margin-top\">\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span>Play</span>\n </a>\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n </div>\n </template>\n <template slot=\"heading-right\">\n <p class=\"image is-square fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"album.artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n @click=\"show_album_details_modal = true\" />\n </p>\n </template>\n <template slot=\"content\">\n <p class=\"heading is-7 has-text-centered-mobile fd-has-margin-top\">{{ album.track_count }} tracks</p>\n <list-tracks :tracks=\"tracks\" :uris=\"album.uri\"></list-tracks>\n <modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" :media_kind=\"'audiobook'\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-hero>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHero from '@/templates/ContentWithHero'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport webapi from '@/webapi'\n\nconst albumData = {\n load: function (to) {\n return Promise.all([\n webapi.library_album(to.params.album_id),\n webapi.library_album_tracks(to.params.album_id)\n ])\n },\n\n set: function (vm, response) {\n vm.album = response[0].data\n vm.tracks = response[1].data.items\n }\n}\n\nexport default {\n name: 'PageAudiobooksAlbum',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHero, ListTracks, ModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n album: {},\n tracks: [],\n\n show_album_details_modal: false\n }\n },\n\n methods: {\n open_artist: function () {\n this.show_details_modal = false\n this.$router.push({ path: '/audiobooks/artists/' + this.album.artist_id })\n },\n\n play: function () {\n webapi.player_play_uri(this.album.uri, false)\n },\n\n play_track: function (position) {\n webapi.player_play_uri(this.album.uri, false, position)\n },\n\n open_dialog: function (track) {\n this.selected_track = track\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooksAlbum.vue?vue&type=template&id=efa1b7f2&\"\nimport script from \"./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooksAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.playlist.name))]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.playlists.total)+\" playlists\")])]),_c('template',{slot:\"content\"},[_c('list-playlists',{attrs:{\"playlists\":_vm.playlists.items}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_vm._l((_vm.playlists),function(playlist){return _c('list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist},on:{\"click\":function($event){return _vm.open_playlist(playlist)}}},[_c('template',{slot:\"icon\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:{ 'mdi-library-music': playlist.type !== 'folder', 'mdi-rss': playlist.type === 'rss', 'mdi-folder': playlist.type === 'folder' }})])]),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-playlist',{attrs:{\"show\":_vm.show_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[(_vm.slots().icon)?_c('figure',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"icon\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.playlist.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <figure class=\"media-left fd-has-action\" v-if=\"slots().icon\" @click=\"listeners.click\">\n <slot name=\"icon\"></slot>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.playlist.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemPlaylist',\n props: ['playlist']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemPlaylist.vue?vue&type=template&id=70e1d159&functional=true&\"\nimport script from \"./ListItemPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_playlist}},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.path))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.type))])])])]),(!_vm.playlist.folder)?_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])]):_vm._e()])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_playlist\">{{ playlist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ playlist.path }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ playlist.type }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\" v-if=\"!playlist.folder\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogPlaylist',\n props: ['show', 'playlist', 'uris'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.uris ? this.uris : this.playlist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.uris ? this.uris : this.playlist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.uris ? this.uris : this.playlist.uri)\n },\n\n open_playlist: function () {\n this.$emit('close')\n this.$router.push({ path: '/playlists/' + this.playlist.id + '/tracks' })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogPlaylist.vue?vue&type=template&id=eed38c78&\"\nimport script from \"./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <list-item-playlist v-for=\"playlist in playlists\" :key=\"playlist.id\" :playlist=\"playlist\" @click=\"open_playlist(playlist)\">\n <template slot=\"icon\">\n <span class=\"icon\">\n <i class=\"mdi\" :class=\"{ 'mdi-library-music': playlist.type !== 'folder', 'mdi-rss': playlist.type === 'rss', 'mdi-folder': playlist.type === 'folder' }\"></i>\n </span>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-playlist>\n <modal-dialog-playlist :show=\"show_details_modal\" :playlist=\"selected_playlist\" @close=\"show_details_modal = false\" />\n </div>\n</template>\n\n<script>\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\n\nexport default {\n name: 'ListPlaylists',\n components: { ListItemPlaylist, ModalDialogPlaylist },\n\n props: ['playlists'],\n\n data () {\n return {\n show_details_modal: false,\n selected_playlist: {}\n }\n },\n\n methods: {\n open_playlist: function (playlist) {\n if (playlist.type !== 'folder') {\n this.$router.push({ path: '/playlists/' + playlist.id + '/tracks' })\n } else {\n this.$router.push({ path: '/playlists/' + playlist.id })\n }\n },\n\n open_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListPlaylists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListPlaylists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListPlaylists.vue?vue&type=template&id=cb1e7e92&\"\nimport script from \"./ListPlaylists.vue?vue&type=script&lang=js&\"\nexport * from \"./ListPlaylists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ playlist.name }}</p>\n <p class=\"heading\">{{ playlists.total }} playlists</p>\n </template>\n <template slot=\"content\">\n <list-playlists :playlists=\"playlists.items\"></list-playlists>\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListPlaylists from '@/components/ListPlaylists'\nimport webapi from '@/webapi'\n\nconst playlistsData = {\n load: function (to) {\n return Promise.all([\n webapi.library_playlist(to.params.playlist_id),\n webapi.library_playlist_folder(to.params.playlist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.playlist = response[0].data\n vm.playlists = response[1].data\n }\n}\n\nexport default {\n name: 'PagePlaylists',\n mixins: [LoadDataBeforeEnterMixin(playlistsData)],\n components: { ContentWithHeading, ListPlaylists },\n\n data () {\n return {\n playlist: {},\n playlists: {}\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePlaylists.vue?vue&type=template&id=3470ce91&\"\nimport script from \"./PagePlaylists.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePlaylists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_playlist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.tracks.length)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks,\"uris\":_vm.uris}}),_c('modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.playlist,\"uris\":_vm.uris},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],1)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ playlist.name }}</div>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_playlist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ tracks.length }} tracks</p>\n <list-tracks :tracks=\"tracks\" :uris=\"uris\"></list-tracks>\n <modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"playlist\" :uris=\"uris\" @close=\"show_playlist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListTracks from '@/components/ListTracks'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\nimport webapi from '@/webapi'\n\nconst playlistData = {\n load: function (to) {\n return Promise.all([\n webapi.library_playlist(to.params.playlist_id),\n webapi.library_playlist_tracks(to.params.playlist_id)\n ])\n },\n\n set: function (vm, response) {\n vm.playlist = response[0].data\n vm.tracks = response[1].data.items\n }\n}\n\nexport default {\n name: 'PagePlaylist',\n mixins: [LoadDataBeforeEnterMixin(playlistData)],\n components: { ContentWithHeading, ListTracks, ModalDialogPlaylist },\n\n data () {\n return {\n playlist: {},\n tracks: [],\n\n show_playlist_details_modal: false\n }\n },\n\n computed: {\n uris () {\n if (this.playlist.random) {\n return this.tracks.map(a => a.uri).join(',')\n }\n return this.playlist.uri\n }\n },\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.uris, true)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PagePlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PagePlaylist.vue?vue&type=template&id=71750814&\"\nimport script from \"./PagePlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./PagePlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Files\")]),_c('p',{staticClass:\"title is-7 has-text-grey\"},[_vm._v(_vm._s(_vm.current_directory))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){return _vm.open_directory_dialog({ 'path': _vm.current_directory })}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Play\")])])])]),_c('template',{slot:\"content\"},[(_vm.$route.query.directory)?_c('div',{staticClass:\"media\",on:{\"click\":function($event){return _vm.open_parent_directory()}}},[_c('figure',{staticClass:\"media-left fd-has-action\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-subdirectory-arrow-left\"})])]),_c('div',{staticClass:\"media-content fd-has-action is-clipped\"},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(\"..\")])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)]):_vm._e(),_vm._l((_vm.files.directories),function(directory){return _c('list-item-directory',{key:directory.path,attrs:{\"directory\":directory},on:{\"click\":function($event){return _vm.open_directory(directory)}}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_directory_dialog(directory)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_vm._l((_vm.files.playlists.items),function(playlist){return _c('list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist},on:{\"click\":function($event){return _vm.open_playlist(playlist)}}},[_c('template',{slot:\"icon\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})])]),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_vm._l((_vm.files.tracks.items),function(track,index){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(index)}}},[_c('template',{slot:\"icon\"},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-file-outline\"})])]),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('modal-dialog-directory',{attrs:{\"show\":_vm.show_directory_details_modal,\"directory\":_vm.selected_directory},on:{\"close\":function($event){_vm.show_directory_details_modal = false}}}),_c('modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}}),_c('modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track},on:{\"close\":function($event){_vm.show_track_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[_c('figure',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._m(0)]),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.directory.path.substring(_vm.props.directory.path.lastIndexOf('/') + 1)))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey-light\"},[_vm._v(_vm._s(_vm.props.directory.path))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = [function (_h,_vm) {var _c=_vm._c;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder\"})])}]\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <figure class=\"media-left fd-has-action\" @click=\"listeners.click\">\n <span class=\"icon\">\n <i class=\"mdi mdi-folder\"></i>\n </span>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.directory.path.substring(props.directory.path.lastIndexOf('/') + 1) }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey-light\">{{ props.directory.path }}</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'ListItemDirectory',\n props: ['directory']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemDirectory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ListItemDirectory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ListItemDirectory.vue?vue&type=template&id=fc5a981a&functional=true&\"\nimport script from \"./ListItemDirectory.vue?vue&type=script&lang=js&\"\nexport * from \"./ListItemDirectory.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.directory.path)+\" \")])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ directory.path }}\n </p>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogDirectory',\n props: ['show', 'directory'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_expression('path starts with \"' + this.directory.path + '\" order by path asc', false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_expression_add('path starts with \"' + this.directory.path + '\" order by path asc')\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_expression_add_next('path starts with \"' + this.directory.path + '\" order by path asc')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogDirectory.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ModalDialogDirectory.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ModalDialogDirectory.vue?vue&type=template&id=47bd3efd&\"\nimport script from \"./ModalDialogDirectory.vue?vue&type=script&lang=js&\"\nexport * from \"./ModalDialogDirectory.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Files</p>\n <p class=\"title is-7 has-text-grey\">{{ current_directory }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"open_directory_dialog({ 'path': current_directory })\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span>Play</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <div class=\"media\" v-if=\"$route.query.directory\" @click=\"open_parent_directory()\">\n <figure class=\"media-left fd-has-action\">\n <span class=\"icon\">\n <i class=\"mdi mdi-subdirectory-arrow-left\"></i>\n </span>\n </figure>\n <div class=\"media-content fd-has-action is-clipped\">\n <h1 class=\"title is-6\">..</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n\n <list-item-directory v-for=\"directory in files.directories\" :key=\"directory.path\" :directory=\"directory\" @click=\"open_directory(directory)\">\n <template slot=\"actions\">\n <a @click=\"open_directory_dialog(directory)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-directory>\n\n <list-item-playlist v-for=\"playlist in files.playlists.items\" :key=\"playlist.id\" :playlist=\"playlist\" @click=\"open_playlist(playlist)\">\n <template slot=\"icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-library-music\"></i>\n </span>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-playlist>\n\n <list-item-track v-for=\"(track, index) in files.tracks.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\n <template slot=\"icon\">\n <span class=\"icon\">\n <i class=\"mdi mdi-file-outline\"></i>\n </span>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </list-item-track>\n\n <modal-dialog-directory :show=\"show_directory_details_modal\" :directory=\"selected_directory\" @close=\"show_directory_details_modal = false\" />\n <modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n <modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" @close=\"show_track_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemDirectory from '@/components/ListItemDirectory'\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogDirectory from '@/components/ModalDialogDirectory'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport webapi from '@/webapi'\n\nconst filesData = {\n load: function (to) {\n if (to.query.directory) {\n return webapi.library_files(to.query.directory)\n }\n return Promise.resolve()\n },\n\n set: function (vm, response) {\n if (response) {\n vm.files = response.data\n } else {\n vm.files = {\n directories: vm.$store.state.config.directories.map(dir => { return { path: dir } }),\n tracks: { items: [] },\n playlists: { items: [] }\n }\n }\n }\n}\n\nexport default {\n name: 'PageFiles',\n mixins: [LoadDataBeforeEnterMixin(filesData)],\n components: { ContentWithHeading, ListItemDirectory, ListItemPlaylist, ListItemTrack, ModalDialogDirectory, ModalDialogPlaylist, ModalDialogTrack },\n\n data () {\n return {\n files: { directories: [], tracks: { items: [] }, playlists: { items: [] } },\n\n show_directory_details_modal: false,\n selected_directory: {},\n\n show_playlist_details_modal: false,\n selected_playlist: {},\n\n show_track_details_modal: false,\n selected_track: {}\n }\n },\n\n computed: {\n current_directory () {\n if (this.$route.query && this.$route.query.directory) {\n return this.$route.query.directory\n }\n return '/'\n }\n },\n\n methods: {\n open_parent_directory: function () {\n var parent = this.current_directory.slice(0, this.current_directory.lastIndexOf('/'))\n if (parent === '' || this.$store.state.config.directories.includes(this.current_directory)) {\n this.$router.push({ path: '/files' })\n } else {\n this.$router.push({ path: '/files', query: { directory: this.current_directory.slice(0, this.current_directory.lastIndexOf('/')) } })\n }\n },\n\n open_directory: function (directory) {\n this.$router.push({ path: '/files', query: { directory: directory.path } })\n },\n\n open_directory_dialog: function (directory) {\n this.selected_directory = directory\n this.show_directory_details_modal = true\n },\n\n play: function () {\n webapi.player_play_expression('path starts with \"' + this.current_directory + '\" order by path asc', false)\n },\n\n play_track: function (position) {\n webapi.player_play_uri(this.files.tracks.items.map(a => a.uri).join(','), false, position)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n open_playlist: function (playlist) {\n this.$router.push({ path: '/playlists/' + playlist.id + '/tracks' })\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageFiles.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageFiles.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageFiles.vue?vue&type=template&id=2cd0e99e&\"\nimport script from \"./PageFiles.vue?vue&type=script&lang=js&\"\nexport * from \"./PageFiles.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Radio\")])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.tracks.total)+\" tracks\")]),_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items}})],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Radio</p>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ tracks.total }} tracks</p>\n <list-tracks :tracks=\"tracks.items\"></list-tracks>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListTracks from '@/components/ListTracks'\nimport webapi from '@/webapi'\n\nconst streamsData = {\n load: function (to) {\n return webapi.library_radio_streams()\n },\n\n set: function (vm, response) {\n vm.tracks = response.data.tracks\n }\n}\n\nexport default {\n name: 'PageRadioStreams',\n mixins: [LoadDataBeforeEnterMixin(streamsData)],\n components: { ContentWithHeading, ListTracks },\n\n data () {\n return {\n tracks: { items: [] }\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageRadioStreams.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageRadioStreams.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageRadioStreams.vue?vue&type=template&id=6286e82d&\"\nimport script from \"./PageRadioStreams.vue?vue&type=script&lang=js&\"\nexport * from \"./PageRadioStreams.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"section fd-remove-padding-bottom\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.new_search($event)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search_query),expression:\"search_query\"}],ref:\"search_field\",staticClass:\"input is-rounded is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"Search\",\"autocomplete\":\"off\"},domProps:{\"value\":(_vm.search_query)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search_query=$event.target.value}}}),_vm._m(0)]),_vm._m(1)])]),_c('div',{staticClass:\"tags\",staticStyle:{\"margin-top\":\"16px\"}},_vm._l((_vm.recent_searches),function(recent_search){return _c('a',{key:recent_search,staticClass:\"tag\",on:{\"click\":function($event){return _vm.open_recent_search(recent_search)}}},[_vm._v(_vm._s(recent_search))])}),0)])])])]),_c('tabs-search',{attrs:{\"query\":_vm.search_query}}),(_vm.show_tracks && _vm.tracks.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Tracks\")])]),_c('template',{slot:\"content\"},[_c('list-tracks',{attrs:{\"tracks\":_vm.tracks.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_tracks_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_tracks}},[_vm._v(\"Show all \"+_vm._s(_vm.tracks.total.toLocaleString())+\" tracks\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_tracks && !_vm.tracks.total)?_c('content-text',{staticClass:\"mt-6\"},[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No tracks found\")])])])],2):_vm._e(),(_vm.show_artists && _vm.artists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Artists\")])]),_c('template',{slot:\"content\"},[_c('list-artists',{attrs:{\"artists\":_vm.artists.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_artists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_artists}},[_vm._v(\"Show all \"+_vm._s(_vm.artists.total.toLocaleString())+\" artists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_artists && !_vm.artists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No artists found\")])])])],2):_vm._e(),(_vm.show_albums && _vm.albums.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Albums\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.albums.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_albums_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_albums}},[_vm._v(\"Show all \"+_vm._s(_vm.albums.total.toLocaleString())+\" albums\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_albums && !_vm.albums.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No albums found\")])])])],2):_vm._e(),(_vm.show_playlists && _vm.playlists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Playlists\")])]),_c('template',{slot:\"content\"},[_c('list-playlists',{attrs:{\"playlists\":_vm.playlists.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_playlists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_playlists}},[_vm._v(\"Show all \"+_vm._s(_vm.playlists.total.toLocaleString())+\" playlists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_playlists && !_vm.playlists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No playlists found\")])])])],2):_vm._e(),(_vm.show_podcasts && _vm.podcasts.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Podcasts\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.podcasts.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_podcasts_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_podcasts}},[_vm._v(\"Show all \"+_vm._s(_vm.podcasts.total.toLocaleString())+\" podcasts\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_podcasts && !_vm.podcasts.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No podcasts found\")])])])],2):_vm._e(),(_vm.show_audiobooks && _vm.audiobooks.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Audiobooks\")])]),_c('template',{slot:\"content\"},[_c('list-albums',{attrs:{\"albums\":_vm.audiobooks.items}})],1),_c('template',{slot:\"footer\"},[(_vm.show_all_audiobooks_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_audiobooks}},[_vm._v(\"Show all \"+_vm._s(_vm.audiobooks.total.toLocaleString())+\" audiobooks\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_audiobooks && !_vm.audiobooks.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No audiobooks found\")])])])],2):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"help has-text-centered\"},[_vm._v(\"Tip: you can search by a smart playlist query language \"),_c('a',{attrs:{\"href\":\"https://github.com/ejurgensen/forked-daapd/blob/master/README_SMARTPL.md\",\"target\":\"_blank\"}},[_vm._v(\"expression\")]),_vm._v(\" if you prefix it with \"),_c('code',[_vm._v(\"query:\")]),_vm._v(\". \")])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-content py-3\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_vm._t(\"content\")],2)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-content py-3\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <slot name=\"content\"></slot>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'ContentText'\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentText.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentText.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContentText.vue?vue&type=template&id=bfc5ab0a&\"\nimport script from \"./ContentText.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentText.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.spotify_enabled)?_c('section',{staticClass:\"section fd-remove-padding-bottom\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small is-toggle is-toggle-rounded\"},[_c('ul',[_c('li',{class:{ 'is-active': _vm.$route.path === '/search/library' }},[_c('a',{on:{\"click\":_vm.search_library}},[_vm._m(0),_c('span',{},[_vm._v(\"Library\")])])]),_c('li',{class:{ 'is-active': _vm.$route.path === '/search/spotify' }},[_c('a',{on:{\"click\":_vm.search_spotify}},[_vm._m(1),_c('span',{},[_vm._v(\"Spotify\")])])])])])])])])]):_vm._e()}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-library-books\"})])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-spotify\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-remove-padding-bottom\" v-if=\"spotify_enabled\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small is-toggle is-toggle-rounded\">\n <ul>\n <li :class=\"{ 'is-active': $route.path === '/search/library' }\">\n <a @click=\"search_library\">\n <span class=\"icon is-small\"><i class=\"mdi mdi-library-books\"></i></span>\n <span class=\"\">Library</span>\n </a>\n </li>\n <li :class=\"{ 'is-active': $route.path === '/search/spotify' }\">\n <a @click=\"search_spotify\">\n <span class=\"icon is-small\"><i class=\"mdi mdi-spotify\"></i></span>\n <span class=\"\">Spotify</span>\n </a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsSearch',\n\n props: ['query'],\n\n computed: {\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n }\n },\n\n methods: {\n search_library: function () {\n if (!this.query) {\n return\n }\n\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'track,artist,album,playlist,audiobook,podcast',\n query: this.query,\n limit: 3,\n offset: 0\n }\n })\n },\n\n search_spotify: function () {\n if (!this.query) {\n return\n }\n\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'track,artist,album,playlist,audiobook,podcast',\n query: this.query,\n limit: 3,\n offset: 0\n }\n })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsSearch.vue?vue&type=template&id=76e916b7&\"\nimport script from \"./TabsSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsSearch.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <!-- Search field + recent searches -->\n <section class=\"section fd-remove-padding-bottom\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <form v-on:submit.prevent=\"new_search\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-rounded is-shadowless\" type=\"text\" placeholder=\"Search\" v-model=\"search_query\" ref=\"search_field\" autocomplete=\"off\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-magnify\"></i>\n </span>\n </p>\n <p class=\"help has-text-centered\">Tip: you can search by a smart playlist query language <a href=\"https://github.com/ejurgensen/forked-daapd/blob/master/README_SMARTPL.md\" target=\"_blank\">expression</a> if you prefix it\n with <code>query:</code>.\n </p>\n </div>\n </form>\n <div class=\"tags\" style=\"margin-top: 16px;\">\n <a class=\"tag\" v-for=\"recent_search in recent_searches\" :key=\"recent_search\" @click=\"open_recent_search(recent_search)\">{{ recent_search }}</a>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <tabs-search :query=\"search_query\"></tabs-search>\n\n <!-- Tracks -->\n <content-with-heading v-if=\"show_tracks && tracks.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Tracks</p>\n </template>\n <template slot=\"content\">\n <list-tracks :tracks=\"tracks.items\"></list-tracks>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_tracks_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_tracks\">Show all {{ tracks.total.toLocaleString() }} tracks</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_tracks && !tracks.total\" class=\"mt-6\">\n <template slot=\"content\">\n <p><i>No tracks found</i></p>\n </template>\n </content-text>\n\n <!-- Artists -->\n <content-with-heading v-if=\"show_artists && artists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Artists</p>\n </template>\n <template slot=\"content\">\n <list-artists :artists=\"artists.items\"></list-artists>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_artists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_artists\">Show all {{ artists.total.toLocaleString() }} artists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_artists && !artists.total\">\n <template slot=\"content\">\n <p><i>No artists found</i></p>\n </template>\n </content-text>\n\n <!-- Albums -->\n <content-with-heading v-if=\"show_albums && albums.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Albums</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"albums.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_albums_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_albums\">Show all {{ albums.total.toLocaleString() }} albums</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_albums && !albums.total\">\n <template slot=\"content\">\n <p><i>No albums found</i></p>\n </template>\n </content-text>\n\n <!-- Playlists -->\n <content-with-heading v-if=\"show_playlists && playlists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Playlists</p>\n </template>\n <template slot=\"content\">\n <list-playlists :playlists=\"playlists.items\"></list-playlists>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_playlists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_playlists\">Show all {{ playlists.total.toLocaleString() }} playlists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_playlists && !playlists.total\">\n <template slot=\"content\">\n <p><i>No playlists found</i></p>\n </template>\n </content-text>\n\n <!-- Podcasts -->\n <content-with-heading v-if=\"show_podcasts && podcasts.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Podcasts</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"podcasts.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_podcasts_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_podcasts\">Show all {{ podcasts.total.toLocaleString() }} podcasts</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_podcasts && !podcasts.total\">\n <template slot=\"content\">\n <p><i>No podcasts found</i></p>\n </template>\n </content-text>\n\n <!-- Audiobooks -->\n <content-with-heading v-if=\"show_audiobooks && audiobooks.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Audiobooks</p>\n </template>\n <template slot=\"content\">\n <list-albums :albums=\"audiobooks.items\"></list-albums>\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_audiobooks_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_audiobooks\">Show all {{ audiobooks.total.toLocaleString() }} audiobooks</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_audiobooks && !audiobooks.total\">\n <template slot=\"content\">\n <p><i>No audiobooks found</i></p>\n </template>\n </content-text>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ContentText from '@/templates/ContentText'\nimport TabsSearch from '@/components/TabsSearch'\nimport ListTracks from '@/components/ListTracks'\nimport ListArtists from '@/components/ListArtists'\nimport ListAlbums from '@/components/ListAlbums'\nimport ListPlaylists from '@/components/ListPlaylists'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'PageSearch',\n components: { ContentWithHeading, ContentText, TabsSearch, ListTracks, ListArtists, ListAlbums, ListPlaylists },\n\n data () {\n return {\n search_query: '',\n\n tracks: { items: [], total: 0 },\n artists: { items: [], total: 0 },\n albums: { items: [], total: 0 },\n playlists: { items: [], total: 0 },\n audiobooks: { items: [], total: 0 },\n podcasts: { items: [], total: 0 }\n }\n },\n\n computed: {\n recent_searches () {\n return this.$store.state.recent_searches\n },\n\n show_tracks () {\n return this.$route.query.type && this.$route.query.type.includes('track')\n },\n show_all_tracks_button () {\n return this.tracks.total > this.tracks.items.length\n },\n\n show_artists () {\n return this.$route.query.type && this.$route.query.type.includes('artist')\n },\n show_all_artists_button () {\n return this.artists.total > this.artists.items.length\n },\n\n show_albums () {\n return this.$route.query.type && this.$route.query.type.includes('album')\n },\n show_all_albums_button () {\n return this.albums.total > this.albums.items.length\n },\n\n show_playlists () {\n return this.$route.query.type && this.$route.query.type.includes('playlist')\n },\n show_all_playlists_button () {\n return this.playlists.total > this.playlists.items.length\n },\n\n show_audiobooks () {\n return this.$route.query.type && this.$route.query.type.includes('audiobook')\n },\n show_all_audiobooks_button () {\n return this.audiobooks.total > this.audiobooks.items.length\n },\n\n show_podcasts () {\n return this.$route.query.type && this.$route.query.type.includes('podcast')\n },\n show_all_podcasts_button () {\n return this.podcasts.total > this.podcasts.items.length\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n search: function (route) {\n if (!route.query.query || route.query.query === '') {\n this.search_query = ''\n this.$refs.search_field.focus()\n return\n }\n\n this.search_query = route.query.query\n this.searchMusic(route.query)\n this.searchAudiobooks(route.query)\n this.searchPodcasts(route.query)\n this.$store.commit(types.ADD_RECENT_SEARCH, route.query.query)\n },\n\n searchMusic: function (query) {\n if (query.type.indexOf('track') < 0 && query.type.indexOf('artist') < 0 && query.type.indexOf('album') < 0 && query.type.indexOf('playlist') < 0) {\n return\n }\n\n var searchParams = {\n type: query.type,\n media_kind: 'music'\n }\n\n if (query.query.startsWith('query:')) {\n searchParams.expression = query.query.replace(/^query:/, '').trim()\n } else {\n searchParams.query = query.query\n }\n\n if (query.limit) {\n searchParams.limit = query.limit\n searchParams.offset = query.offset\n }\n\n webapi.search(searchParams).then(({ data }) => {\n this.tracks = data.tracks ? data.tracks : { items: [], total: 0 }\n this.artists = data.artists ? data.artists : { items: [], total: 0 }\n this.albums = data.albums ? data.albums : { items: [], total: 0 }\n this.playlists = data.playlists ? data.playlists : { items: [], total: 0 }\n })\n },\n\n searchAudiobooks: function (query) {\n if (query.type.indexOf('audiobook') < 0) {\n return\n }\n\n var searchParams = {\n type: 'album',\n media_kind: 'audiobook'\n }\n\n if (query.query.startsWith('query:')) {\n searchParams.expression = query.query.replace(/^query:/, '').trim()\n } else {\n searchParams.expression = '((album includes \"' + query.query + '\" or artist includes \"' + query.query + '\") and media_kind is audiobook)'\n }\n\n if (query.limit) {\n searchParams.limit = query.limit\n searchParams.offset = query.offset\n }\n\n webapi.search(searchParams).then(({ data }) => {\n this.audiobooks = data.albums ? data.albums : { items: [], total: 0 }\n })\n },\n\n searchPodcasts: function (query) {\n if (query.type.indexOf('podcast') < 0) {\n return\n }\n\n var searchParams = {\n type: 'album',\n media_kind: 'podcast'\n }\n\n if (query.query.startsWith('query:')) {\n searchParams.expression = query.query.replace(/^query:/, '').trim()\n } else {\n searchParams.expression = '((album includes \"' + query.query + '\" or artist includes \"' + query.query + '\") and media_kind is podcast)'\n }\n\n if (query.limit) {\n searchParams.limit = query.limit\n searchParams.offset = query.offset\n }\n\n webapi.search(searchParams).then(({ data }) => {\n this.podcasts = data.albums ? data.albums : { items: [], total: 0 }\n })\n },\n\n new_search: function () {\n if (!this.search_query) {\n return\n }\n\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'track,artist,album,playlist,audiobook,podcast',\n query: this.search_query,\n limit: 3,\n offset: 0\n }\n })\n this.$refs.search_field.blur()\n },\n\n open_search_tracks: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'track',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_artists: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'artist',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_albums: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'album',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_playlists: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'playlist',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_audiobooks: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'audiobook',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_podcasts: function () {\n this.$router.push({\n path: '/search/library',\n query: {\n type: 'podcast',\n query: this.$route.query.query\n }\n })\n },\n\n open_recent_search: function (query) {\n this.search_query = query\n this.new_search()\n }\n },\n\n mounted: function () {\n this.search(this.$route)\n },\n\n watch: {\n '$route' (to, from) {\n this.search(to)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageSearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageSearch.vue?vue&type=template&id=43848b0d&\"\nimport script from \"./PageSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./PageSearch.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths has-text-centered-mobile\"},[_c('p',{staticClass:\"heading\"},[_c('b',[_vm._v(\"forked-daapd\")]),_vm._v(\" - version \"+_vm._s(_vm.config.version))]),_c('h1',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.config.library_name))])])])])]),_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"content\"},[_c('nav',{staticClass:\"level is-mobile\"},[_vm._m(0),_c('div',{staticClass:\"level-right\"},[(_vm.library.updating)?_c('div',[_c('a',{staticClass:\"button is-small is-loading\"},[_vm._v(\"Update\")])]):_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.onClickOutside),expression:\"onClickOutside\"}],staticClass:\"dropdown is-right\",class:{ 'is-active': _vm.show_update_dropdown }},[_c('div',{staticClass:\"dropdown-trigger\"},[_c('div',{staticClass:\"buttons has-addons\"},[_c('a',{staticClass:\"button is-small\",on:{\"click\":_vm.update}},[_vm._v(\"Update\")]),_c('a',{staticClass:\"button is-small\",on:{\"click\":function($event){_vm.show_update_dropdown = !_vm.show_update_dropdown}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi\",class:{ 'mdi-chevron-down': !_vm.show_update_dropdown, 'mdi-chevron-up': _vm.show_update_dropdown }})])])])]),_c('div',{staticClass:\"dropdown-menu\",attrs:{\"id\":\"dropdown-menu\",\"role\":\"menu\"}},[_c('div',{staticClass:\"dropdown-content\"},[_c('div',{staticClass:\"dropdown-item\"},[_c('a',{staticClass:\"has-text-dark\",on:{\"click\":_vm.update}},[_c('strong',[_vm._v(\"Update\")]),_c('br'),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Adds new, removes deleted and updates modified files.\")])])]),_c('hr',{staticClass:\"dropdown-divider\"}),_c('div',{staticClass:\"dropdown-item\"},[_c('a',{staticClass:\"has-text-dark\",on:{\"click\":_vm.update_meta}},[_c('strong',[_vm._v(\"Rescan metadata\")]),_c('br'),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Same as update, but also rescans unmodified files.\")])])])])])])])]),_c('table',{staticClass:\"table\"},[_c('tbody',[_c('tr',[_c('th',[_vm._v(\"Artists\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.library.artists)))])]),_c('tr',[_c('th',[_vm._v(\"Albums\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.library.albums)))])]),_c('tr',[_c('th',[_vm._v(\"Tracks\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"number\")(_vm.library.songs)))])]),_c('tr',[_c('th',[_vm._v(\"Total playtime\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.library.db_playtime * 1000,'y [years], d [days], h [hours], m [minutes]')))])]),_c('tr',[_c('th',[_vm._v(\"Library updated\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"timeFromNow\")(_vm.library.updated_at))+\" \"),_c('span',{staticClass:\"has-text-grey\"},[_vm._v(\"(\"+_vm._s(_vm._f(\"time\")(_vm.library.updated_at,'lll'))+\")\")])])]),_c('tr',[_c('th',[_vm._v(\"Uptime\")]),_c('td',{staticClass:\"has-text-right\"},[_vm._v(_vm._s(_vm._f(\"timeFromNow\")(_vm.library.started_at,true))+\" \"),_c('span',{staticClass:\"has-text-grey\"},[_vm._v(\"(\"+_vm._s(_vm._f(\"time\")(_vm.library.started_at,'ll'))+\")\")])])])])])])])])])]),_c('section',{staticClass:\"section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"content has-text-centered-mobile\"},[_c('p',{staticClass:\"is-size-7\"},[_vm._v(\"Compiled with support for \"+_vm._s(_vm._f(\"join\")(_vm.config.buildoptions))+\".\")]),_vm._m(1)])])])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_c('h2',{staticClass:\"title is-5\"},[_vm._v(\"Library\")])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('p',{staticClass:\"is-size-7\"},[_vm._v(\"Web interface built with \"),_c('a',{attrs:{\"href\":\"http://bulma.io\"}},[_vm._v(\"Bulma\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://materialdesignicons.com/\"}},[_vm._v(\"Material Design Icons\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://vuejs.org/\"}},[_vm._v(\"Vue.js\")]),_vm._v(\", \"),_c('a',{attrs:{\"href\":\"https://github.com/mzabriskie/axios\"}},[_vm._v(\"axios\")]),_vm._v(\" and \"),_c('a',{attrs:{\"href\":\"https://github.com/ejurgensen/forked-daapd/network/dependencies\"}},[_vm._v(\"more\")]),_vm._v(\".\")])}]\n\nexport { render, staticRenderFns }","<template>\n <div>\n <section class=\"section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths has-text-centered-mobile\">\n <p class=\"heading\"><b>forked-daapd</b> - version {{ config.version }}</p>\n <h1 class=\"title is-4\">{{ config.library_name }}</h1>\n </div>\n </div>\n </div>\n </section>\n <section class=\"section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"content\">\n <nav class=\"level is-mobile\">\n <!-- Left side -->\n <div class=\"level-left\">\n <div class=\"level-item\">\n <h2 class=\"title is-5\">Library</h2>\n </div>\n </div>\n\n <!-- Right side -->\n <div class=\"level-right\">\n <div v-if=\"library.updating\"><a class=\"button is-small is-loading\">Update</a></div>\n <div v-else class=\"dropdown is-right\" :class=\"{ 'is-active': show_update_dropdown }\" v-click-outside=\"onClickOutside\">\n <div class=\"dropdown-trigger\">\n <div class=\"buttons has-addons\">\n <a @click=\"update\" class=\"button is-small\">Update</a>\n <a @click=\"show_update_dropdown = !show_update_dropdown\" class=\"button is-small\">\n <span class=\"icon\"><i class=\"mdi\" :class=\"{ 'mdi-chevron-down': !show_update_dropdown, 'mdi-chevron-up': show_update_dropdown }\"></i></span>\n </a>\n </div>\n </div>\n <div class=\"dropdown-menu\" id=\"dropdown-menu\" role=\"menu\">\n <div class=\"dropdown-content\">\n <div class=\"dropdown-item\">\n <a @click=\"update\" class=\"has-text-dark\">\n <strong>Update</strong><br>\n <span class=\"is-size-7\">Adds new, removes deleted and updates modified files.</span>\n </a>\n </div>\n <hr class=\"dropdown-divider\">\n <div class=\"dropdown-item\">\n <a @click=\"update_meta\" class=\"has-text-dark\">\n <strong>Rescan metadata</strong><br>\n <span class=\"is-size-7\">Same as update, but also rescans unmodified files.</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </nav>\n\n <table class=\"table\">\n <tbody>\n <tr>\n <th>Artists</th>\n <td class=\"has-text-right\">{{ library.artists | number }}</td>\n </tr>\n <tr>\n <th>Albums</th>\n <td class=\"has-text-right\">{{ library.albums | number }}</td>\n </tr>\n <tr>\n <th>Tracks</th>\n <td class=\"has-text-right\">{{ library.songs | number }}</td>\n </tr>\n <tr>\n <th>Total playtime</th>\n <td class=\"has-text-right\">{{ library.db_playtime * 1000 | duration('y [years], d [days], h [hours], m [minutes]') }}</td>\n </tr>\n <tr>\n <th>Library updated</th>\n <td class=\"has-text-right\">{{ library.updated_at | timeFromNow }} <span class=\"has-text-grey\">({{ library.updated_at | time('lll') }})</span></td>\n </tr>\n <tr>\n <th>Uptime</th>\n <td class=\"has-text-right\">{{ library.started_at | timeFromNow(true) }} <span class=\"has-text-grey\">({{ library.started_at | time('ll') }})</span></td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n </section>\n <section class=\"section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"content has-text-centered-mobile\">\n <p class=\"is-size-7\">Compiled with support for {{ config.buildoptions | join }}.</p>\n <p class=\"is-size-7\">Web interface built with <a href=\"http://bulma.io\">Bulma</a>, <a href=\"https://materialdesignicons.com/\">Material Design Icons</a>, <a href=\"https://vuejs.org/\">Vue.js</a>, <a href=\"https://github.com/mzabriskie/axios\">axios</a> and <a href=\"https://github.com/ejurgensen/forked-daapd/network/dependencies\">more</a>.</p>\n </div>\n </div>\n </div>\n </div>\n </section>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PageAbout',\n\n data () {\n return {\n show_update_dropdown: false\n }\n },\n\n computed: {\n config () {\n return this.$store.state.config\n },\n library () {\n return this.$store.state.library\n }\n },\n\n methods: {\n onClickOutside (event) {\n this.show_update_dropdown = false\n },\n\n update: function () {\n this.show_update_dropdown = false\n webapi.library_update()\n },\n\n update_meta: function () {\n this.show_update_dropdown = false\n webapi.library_rescan()\n }\n },\n\n filters: {\n join: function (array) {\n return array.join(', ')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAbout.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PageAbout.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAbout.vue?vue&type=template&id=474a48e7&\"\nimport script from \"./PageAbout.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAbout.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"New Releases\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.new_releases),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('router-link',{staticClass:\"button is-light is-small is-rounded\",attrs:{\"to\":\"/music/spotify/new-releases\"}},[_vm._v(\" Show more \")])],1)])])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Featured Playlists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.featured_playlists),function(playlist){return _c('spotify-list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('router-link',{staticClass:\"button is-light is-small is-rounded\",attrs:{\"to\":\"/music/spotify/featured-playlists\"}},[_vm._v(\" Show more \")])],1)])])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\"},[(_vm.$slots['artwork'])?_c('div',{staticClass:\"media-left fd-has-action\",on:{\"click\":_vm.listeners.click}},[_vm._t(\"artwork\")],2):_vm._e(),_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.listeners.click}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.props.album.name))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.props.album.artists[0].name))])]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey has-text-weight-normal\"},[_vm._v(\"(\"+_vm._s(_vm.props.album.album_type)+\", \"+_vm._s(_vm._f(\"time\")(_vm.props.album.release_date,'L'))+\")\")])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\">\n <div class=\"media-left fd-has-action\"\n v-if=\"$slots['artwork']\"\n @click=\"listeners.click\">\n <slot name=\"artwork\"></slot>\n </div>\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.album.name }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.album.artists[0].name }}</b></h2>\n <h2 class=\"subtitle is-7 has-text-grey has-text-weight-normal\">({{ props.album.album_type }}, {{ props.album.release_date | time('L') }})</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SpotifyListItemAlbum',\n props: ['album']\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemAlbum.vue?vue&type=template&id=62c75d12&functional=true&\"\nimport script from \"./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n true,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.open_playlist}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.name))]),_c('h2',{staticClass:\"subtitle is-7\"},[_vm._v(_vm._s(_vm.playlist.owner.display_name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"open_playlist\">\n <h1 class=\"title is-6\">{{ playlist.name }}</h1>\n <h2 class=\"subtitle is-7\">{{ playlist.owner.display_name }}</h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SpotifyListItemPlaylist',\n props: ['playlist'],\n\n methods: {\n open_playlist: function () {\n this.$router.push({ path: '/music/spotify/playlists/' + this.playlist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemPlaylist.vue?vue&type=template&id=5f06cfec&\"\nimport script from \"./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('figure',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.artwork_visible),expression:\"artwork_visible\"}],staticClass:\"image is-square fd-has-margin-bottom\"},[_c('img',{staticClass:\"fd-has-shadow\",attrs:{\"src\":_vm.artwork_url},on:{\"load\":_vm.artwork_loaded,\"error\":_vm.artwork_error}})]),_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.album.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.release_date,'L')))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Type\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.album_type))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <figure class=\"image is-square fd-has-margin-bottom\" v-show=\"artwork_visible\">\n <img :src=\"artwork_url\" @load=\"artwork_loaded\" @error=\"artwork_error\" class=\"fd-has-shadow\">\n </figure>\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_album\">{{ album.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ album.artists[0].name }}</a>\n </p>\n <p>\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ album.release_date | time('L') }}</span>\n </p>\n <p>\n <span class=\"heading\">Type</span>\n <span class=\"title is-6\">{{ album.album_type }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogAlbum',\n props: ['show', 'album'],\n\n data () {\n return {\n artwork_visible: false\n }\n },\n\n computed: {\n artwork_url: function () {\n if (this.album.images && this.album.images.length > 0) {\n return this.album.images[0].url\n }\n return ''\n }\n },\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.album.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.album.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.album.uri)\n },\n\n open_album: function () {\n this.$router.push({ path: '/music/spotify/albums/' + this.album.id })\n },\n\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.album.artists[0].id })\n },\n\n artwork_loaded: function () {\n this.artwork_visible = true\n },\n\n artwork_error: function () {\n this.artwork_visible = false\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogAlbum.vue?vue&type=template&id=c74b0d5a&\"\nimport script from \"./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_playlist}},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Owner\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.owner.display_name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Tracks\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.tracks.total))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.playlist.uri))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_playlist\">{{ playlist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Owner</span>\n <span class=\"title is-6\">{{ playlist.owner.display_name }}</span>\n </p>\n <p>\n <span class=\"heading\">Tracks</span>\n <span class=\"title is-6\">{{ playlist.tracks.total }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ playlist.uri }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogPlaylist',\n props: ['show', 'playlist'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.playlist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.playlist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.playlist.uri)\n },\n\n open_playlist: function () {\n this.$router.push({ path: '/music/spotify/playlists/' + this.playlist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogPlaylist.vue?vue&type=template&id=306ad148&\"\nimport script from \"./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogPlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-music></tabs-music>\n\n <!-- New Releases -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">New Releases</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-album v-for=\"album in new_releases\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_album_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"selected_album\" @close=\"show_album_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <router-link to=\"/music/spotify/new-releases\" class=\"button is-light is-small is-rounded\">\n Show more\n </router-link>\n </p>\n </nav>\n </template>\n </content-with-heading>\n\n <!-- Featured Playlists -->\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Featured Playlists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-playlist v-for=\"playlist in featured_playlists\" :key=\"playlist.id\" :playlist=\"playlist\">\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-playlist>\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav class=\"level\">\n <p class=\"level-item\">\n <router-link to=\"/music/spotify/featured-playlists\" class=\"button is-light is-small is-rounded\">\n Show more\n </router-link>\n </p>\n </nav>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyListItemPlaylist from '@/components/SpotifyListItemPlaylist'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst browseData = {\n load: function (to) {\n if (store.state.spotify_new_releases.length > 0 && store.state.spotify_featured_playlists.length > 0) {\n return Promise.resolve()\n }\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return Promise.all([\n spotifyApi.getNewReleases({ country: store.state.spotify.webapi_country, limit: 50 }),\n spotifyApi.getFeaturedPlaylists({ country: store.state.spotify.webapi_country, limit: 50 })\n ])\n },\n\n set: function (vm, response) {\n if (response) {\n store.commit(types.SPOTIFY_NEW_RELEASES, response[0].albums.items)\n store.commit(types.SPOTIFY_FEATURED_PLAYLISTS, response[1].playlists.items)\n }\n }\n}\n\nexport default {\n name: 'SpotifyPageBrowse',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, SpotifyListItemAlbum, SpotifyListItemPlaylist, SpotifyModalDialogAlbum, SpotifyModalDialogPlaylist, CoverArtwork },\n\n data () {\n return {\n show_album_details_modal: false,\n selected_album: {},\n\n show_playlist_details_modal: false,\n selected_playlist: {}\n }\n },\n\n computed: {\n new_releases () {\n return this.$store.state.spotify_new_releases.slice(0, 3)\n },\n\n featured_playlists () {\n return this.$store.state.spotify_featured_playlists.slice(0, 3)\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageBrowse.vue?vue&type=template&id=55573f08&\"\nimport script from \"./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageBrowse.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"New Releases\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.new_releases),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">New Releases</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-album v-for=\"album in new_releases\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_album_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"selected_album\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst browseData = {\n load: function (to) {\n if (store.state.spotify_new_releases.length > 0) {\n return Promise.resolve()\n }\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return spotifyApi.getNewReleases({ country: store.state.spotify.webapi_country, limit: 50 })\n },\n\n set: function (vm, response) {\n if (response) {\n store.commit(types.SPOTIFY_NEW_RELEASES, response.albums.items)\n }\n }\n}\n\nexport default {\n name: 'SpotifyPageBrowseNewReleases',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, SpotifyListItemAlbum, SpotifyModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n show_album_details_modal: false,\n selected_album: {}\n }\n },\n\n computed: {\n new_releases () {\n return this.$store.state.spotify_new_releases\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageBrowseNewReleases.vue?vue&type=template&id=81c5055e&\"\nimport script from \"./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageBrowseNewReleases.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-music'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Featured Playlists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.featured_playlists),function(playlist){return _c('spotify-list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-music></tabs-music>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Featured Playlists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-playlist v-for=\"playlist in featured_playlists\" :key=\"playlist.id\" :playlist=\"playlist\">\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-playlist>\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsMusic from '@/components/TabsMusic'\nimport SpotifyListItemPlaylist from '@/components/SpotifyListItemPlaylist'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst browseData = {\n load: function (to) {\n if (store.state.spotify_featured_playlists.length > 0) {\n return Promise.resolve()\n }\n\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n spotifyApi.getFeaturedPlaylists({ country: store.state.spotify.webapi_country, limit: 50 })\n },\n\n set: function (vm, response) {\n if (response) {\n store.commit(types.SPOTIFY_FEATURED_PLAYLISTS, response.playlists.items)\n }\n }\n}\n\nexport default {\n name: 'SpotifyPageBrowseFeaturedPlaylists',\n mixins: [LoadDataBeforeEnterMixin(browseData)],\n components: { ContentWithHeading, TabsMusic, SpotifyListItemPlaylist, SpotifyModalDialogPlaylist },\n\n data () {\n return {\n show_playlist_details_modal: false,\n selected_playlist: {}\n }\n },\n\n computed: {\n featured_playlists () {\n return this.$store.state.spotify_featured_playlists\n }\n },\n\n methods: {\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=template&id=0258f289&\"\nimport script from \"./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageBrowseFeaturedPlaylists.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_artist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.total)+\" albums\")]),_vm._l((_vm.albums),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.offset < _vm.total)?_c('infinite-loading',{on:{\"infinite\":_vm.load_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('spotify-modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.artist.name))])]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Popularity / Followers\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.popularity)+\" / \"+_vm._s(_vm.artist.followers.total))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Genres\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.genres.join(', ')))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n <a class=\"has-text-link\" @click=\"open_artist\">{{ artist.name }}</a>\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Popularity / Followers</span>\n <span class=\"title is-6\">{{ artist.popularity }} / {{ artist.followers.total }}</span>\n </p>\n <p>\n <span class=\"heading\">Genres</span>\n <span class=\"title is-6\">{{ artist.genres.join(', ') }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogArtist',\n props: ['show', 'artist'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.artist.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.artist.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.artist.uri)\n },\n\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.artist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogArtist.vue?vue&type=template&id=7a611bba&\"\nimport script from \"./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <p class=\"title is-4\">{{ artist.name }}</p>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_artist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ total }} albums</p>\n <spotify-list-item-album v-for=\"album in albums\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <infinite-loading v-if=\"offset < total\" @infinite=\"load_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @close=\"show_details_modal = false\" />\n <spotify-modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport SpotifyModalDialogArtist from '@/components/SpotifyModalDialogArtist'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\nimport InfiniteLoading from 'vue-infinite-loading'\n\nconst artistData = {\n load: function (to) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return Promise.all([\n spotifyApi.getArtist(to.params.artist_id),\n spotifyApi.getArtistAlbums(to.params.artist_id, { limit: 50, offset: 0, include_groups: 'album,single' })\n ])\n },\n\n set: function (vm, response) {\n vm.artist = response[0]\n\n vm.albums = []\n vm.total = 0\n vm.offset = 0\n vm.append_albums(response[1])\n }\n}\n\nexport default {\n name: 'SpotifyPageArtist',\n mixins: [LoadDataBeforeEnterMixin(artistData)],\n components: { ContentWithHeading, SpotifyListItemAlbum, SpotifyModalDialogAlbum, SpotifyModalDialogArtist, InfiniteLoading, CoverArtwork },\n\n data () {\n return {\n artist: {},\n albums: [],\n total: 0,\n offset: 0,\n\n show_details_modal: false,\n selected_album: {},\n\n show_artist_details_modal: false\n }\n },\n\n computed: {\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n load_next: function ($state) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getArtistAlbums(this.artist.id, { limit: 50, offset: this.offset, include_groups: 'album,single' }).then(data => {\n this.append_albums(data, $state)\n })\n },\n\n append_albums: function (data, $state) {\n this.albums = this.albums.concat(data.items)\n this.total = data.total\n this.offset += data.limit\n\n if ($state) {\n $state.loaded()\n if (this.offset >= this.total) {\n $state.complete()\n }\n }\n },\n\n play: function () {\n this.show_details_modal = false\n webapi.player_play_uri(this.artist.uri, true)\n },\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n open_dialog: function (album) {\n this.selected_album = album\n this.show_details_modal = true\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageArtist.vue?vue&type=template&id=b2a152d8&\"\nimport script from \"./SpotifyPageArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-hero',[_c('template',{slot:\"heading-left\"},[_c('h1',{staticClass:\"title is-5\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-6 has-text-link has-text-weight-normal\"},[_c('a',{staticClass:\"has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('div',{staticClass:\"buttons fd-is-centered-mobile fd-has-margin-top\"},[_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])]),_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_album_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])])])]),_c('template',{slot:\"heading-right\"},[_c('p',{staticClass:\"image is-square fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url,\"artist\":_vm.album.artist,\"album\":_vm.album.name},on:{\"click\":function($event){_vm.show_album_details_modal = true}}})],1)]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading is-7 has-text-centered-mobile fd-has-margin-top\"},[_vm._v(_vm._s(_vm.album.tracks.total)+\" tracks\")]),_vm._l((_vm.album.tracks.items),function(track,index){return _c('spotify-list-item-track',{key:track.id,attrs:{\"track\":track,\"position\":index,\"album\":_vm.album,\"context_uri\":_vm.album.uri}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('spotify-modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track,\"album\":_vm.album},on:{\"close\":function($event){_vm.show_track_details_modal = false}}}),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.play}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.name))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.track.artists[0].name))])])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"play\">\n <h1 class=\"title is-6\">{{ track.name }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ track.artists[0].name }}</b></h2>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyListItemTrack',\n\n props: ['track', 'position', 'album', 'context_uri'],\n\n methods: {\n play: function () {\n webapi.player_play_uri(this.context_uri, false, this.position)\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemTrack.vue?vue&type=template&id=28c7eaa1&\"\nimport script from \"./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('transition',{attrs:{\"name\":\"fade\"}},[(_vm.show)?_c('div',{staticClass:\"modal is-active\"},[_c('div',{staticClass:\"modal-background\",on:{\"click\":function($event){return _vm.$emit('close')}}}),_c('div',{staticClass:\"modal-content fd-modal-card\"},[_c('div',{staticClass:\"card\"},[_c('div',{staticClass:\"card-content\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\" \"+_vm._s(_vm.track.name)+\" \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\" \"+_vm._s(_vm.track.artists[0].name)+\" \")]),_c('div',{staticClass:\"content is-small\"},[_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_album}},[_vm._v(_vm._s(_vm.album.name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('a',{staticClass:\"title is-6 has-text-link\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Release date\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"time\")(_vm.album.release_date,'L')))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Track / Disc\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.track_number)+\" / \"+_vm._s(_vm.track.disc_number))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Length\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm._f(\"duration\")(_vm.track.duration_ms)))])]),_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Path\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.track.uri))])])])]),_c('footer',{staticClass:\"card-footer\"},[_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-plus\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.queue_add_next}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-playlist-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Add Next\")])]),_c('a',{staticClass:\"card-footer-item has-text-dark\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-play\"})]),_vm._v(\" \"),_c('span',{staticClass:\"is-size-7\"},[_vm._v(\"Play\")])])])])]),_c('button',{staticClass:\"modal-close is-large\",attrs:{\"aria-label\":\"close\"},on:{\"click\":function($event){return _vm.$emit('close')}}})]):_vm._e()])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <transition name=\"fade\">\n <div class=\"modal is-active\" v-if=\"show\">\n <div class=\"modal-background\" @click=\"$emit('close')\"></div>\n <div class=\"modal-content fd-modal-card\">\n <div class=\"card\">\n <div class=\"card-content\">\n <p class=\"title is-4\">\n {{ track.name }}\n </p>\n <p class=\"subtitle\">\n {{ track.artists[0].name }}\n </p>\n <div class=\"content is-small\">\n <p>\n <span class=\"heading\">Album</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_album\">{{ album.name }}</a>\n </p>\n <p>\n <span class=\"heading\">Album artist</span>\n <a class=\"title is-6 has-text-link\" @click=\"open_artist\">{{ album.artists[0].name }}</a>\n </p>\n <p>\n <span class=\"heading\">Release date</span>\n <span class=\"title is-6\">{{ album.release_date | time('L') }}</span>\n </p>\n <p>\n <span class=\"heading\">Track / Disc</span>\n <span class=\"title is-6\">{{ track.track_number }} / {{ track.disc_number }}</span>\n </p>\n <p>\n <span class=\"heading\">Length</span>\n <span class=\"title is-6\">{{ track.duration_ms | duration }}</span>\n </p>\n <p>\n <span class=\"heading\">Path</span>\n <span class=\"title is-6\">{{ track.uri }}</span>\n </p>\n </div>\n </div>\n <footer class=\"card-footer\">\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-plus\"></i></span> <span class=\"is-size-7\">Add</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"queue_add_next\">\n <span class=\"icon\"><i class=\"mdi mdi-playlist-play\"></i></span> <span class=\"is-size-7\">Add Next</span>\n </a>\n <a class=\"card-footer-item has-text-dark\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-play\"></i></span> <span class=\"is-size-7\">Play</span>\n </a>\n </footer>\n </div>\n </div>\n <button class=\"modal-close is-large\" aria-label=\"close\" @click=\"$emit('close')\"></button>\n </div>\n </transition>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SpotifyModalDialogTrack',\n props: ['show', 'track', 'album'],\n\n methods: {\n play: function () {\n this.$emit('close')\n webapi.player_play_uri(this.track.uri, false)\n },\n\n queue_add: function () {\n this.$emit('close')\n webapi.queue_add(this.track.uri)\n },\n\n queue_add_next: function () {\n this.$emit('close')\n webapi.queue_add_next(this.track.uri)\n },\n\n open_album: function () {\n this.$router.push({ path: '/music/spotify/albums/' + this.album.id })\n },\n\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.album.artists[0].id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyModalDialogTrack.vue?vue&type=template&id=094bebe4&\"\nimport script from \"./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyModalDialogTrack.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <content-with-hero>\n <template slot=\"heading-left\">\n <h1 class=\"title is-5\">{{ album.name }}</h1>\n <h2 class=\"subtitle is-6 has-text-link has-text-weight-normal\"><a class=\"has-text-link\" @click=\"open_artist\">{{ album.artists[0].name }}</a></h2>\n\n <div class=\"buttons fd-is-centered-mobile fd-has-margin-top\">\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n <a class=\"button is-small is-light is-rounded\" @click=\"show_album_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n </div>\n </template>\n\n <template slot=\"heading-right\">\n <p class=\"image is-square fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n @click=\"show_album_details_modal = true\" />\n </p>\n </template>\n\n <template slot=\"content\">\n <p class=\"heading is-7 has-text-centered-mobile fd-has-margin-top\">{{ album.tracks.total }} tracks</p>\n <spotify-list-item-track v-for=\"(track, index) in album.tracks.items\" :key=\"track.id\" :track=\"track\" :position=\"index\" :album=\"album\" :context_uri=\"album.uri\">\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-track>\n <spotify-modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" :album=\"album\" @close=\"show_track_details_modal = false\" />\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" @close=\"show_album_details_modal = false\" />\n </template>\n </content-with-hero>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHero from '@/templates/ContentWithHero'\nimport SpotifyListItemTrack from '@/components/SpotifyListItemTrack'\nimport SpotifyModalDialogTrack from '@/components/SpotifyModalDialogTrack'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport store from '@/store'\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\n\nconst albumData = {\n load: function (to) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return spotifyApi.getAlbum(to.params.album_id)\n },\n\n set: function (vm, response) {\n vm.album = response\n }\n}\n\nexport default {\n name: 'PageAlbum',\n mixins: [LoadDataBeforeEnterMixin(albumData)],\n components: { ContentWithHero, SpotifyListItemTrack, SpotifyModalDialogTrack, SpotifyModalDialogAlbum, CoverArtwork },\n\n data () {\n return {\n album: { artists: [{}], tracks: {} },\n\n show_track_details_modal: false,\n selected_track: {},\n\n show_album_details_modal: false\n }\n },\n\n computed: {\n artwork_url: function () {\n if (this.album.images && this.album.images.length > 0) {\n return this.album.images[0].url\n }\n return ''\n }\n },\n\n methods: {\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.album.artists[0].id })\n },\n\n play: function () {\n this.show_details_modal = false\n webapi.player_play_uri(this.album.uri, true)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageAlbum.vue?vue&type=template&id=63d70974&\"\nimport script from \"./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageAlbum.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.playlist.name))])]),_c('template',{slot:\"heading-right\"},[_c('div',{staticClass:\"buttons is-centered\"},[_c('a',{staticClass:\"button is-small is-light is-rounded\",on:{\"click\":function($event){_vm.show_playlist_details_modal = true}}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-dots-horizontal mdi-18px\"})])]),_c('a',{staticClass:\"button is-small is-dark is-rounded\",on:{\"click\":_vm.play}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-shuffle\"})]),_vm._v(\" \"),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_vm._v(_vm._s(_vm.playlist.tracks.total)+\" tracks\")]),_vm._l((_vm.tracks),function(item,index){return _c('spotify-list-item-track',{key:item.track.id,attrs:{\"track\":item.track,\"album\":item.track.album,\"position\":index,\"context_uri\":_vm.playlist.uri}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(item.track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.offset < _vm.total)?_c('infinite-loading',{on:{\"infinite\":_vm.load_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track,\"album\":_vm.selected_track.album},on:{\"close\":function($event){_vm.show_track_details_modal = false}}}),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ playlist.name }}</div>\n </template>\n <template slot=\"heading-right\">\n <div class=\"buttons is-centered\">\n <a class=\"button is-small is-light is-rounded\" @click=\"show_playlist_details_modal = true\">\n <span class=\"icon\"><i class=\"mdi mdi-dots-horizontal mdi-18px\"></i></span>\n </a>\n <a class=\"button is-small is-dark is-rounded\" @click=\"play\">\n <span class=\"icon\"><i class=\"mdi mdi-shuffle\"></i></span> <span>Shuffle</span>\n </a>\n </div>\n </template>\n <template slot=\"content\">\n <p class=\"heading has-text-centered-mobile\">{{ playlist.tracks.total }} tracks</p>\n <spotify-list-item-track v-for=\"(item, index) in tracks\" :key=\"item.track.id\" :track=\"item.track\" :album=\"item.track.album\" :position=\"index\" :context_uri=\"playlist.uri\">\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(item.track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-track>\n <infinite-loading v-if=\"offset < total\" @infinite=\"load_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" :album=\"selected_track.album\" @close=\"show_track_details_modal = false\" />\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport SpotifyListItemTrack from '@/components/SpotifyListItemTrack'\nimport SpotifyModalDialogTrack from '@/components/SpotifyModalDialogTrack'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport store from '@/store'\nimport webapi from '@/webapi'\nimport SpotifyWebApi from 'spotify-web-api-js'\nimport InfiniteLoading from 'vue-infinite-loading'\n\nconst playlistData = {\n load: function (to) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(store.state.spotify.webapi_token)\n return Promise.all([\n spotifyApi.getPlaylist(to.params.playlist_id),\n spotifyApi.getPlaylistTracks(to.params.playlist_id, { limit: 50, offset: 0 })\n ])\n },\n\n set: function (vm, response) {\n vm.playlist = response[0]\n vm.tracks = []\n vm.total = 0\n vm.offset = 0\n vm.append_tracks(response[1])\n }\n}\n\nexport default {\n name: 'SpotifyPagePlaylist',\n mixins: [LoadDataBeforeEnterMixin(playlistData)],\n components: { ContentWithHeading, SpotifyListItemTrack, SpotifyModalDialogTrack, SpotifyModalDialogPlaylist, InfiniteLoading },\n\n data () {\n return {\n playlist: { tracks: {} },\n tracks: [],\n total: 0,\n offset: 0,\n\n show_track_details_modal: false,\n selected_track: {},\n\n show_playlist_details_modal: false\n }\n },\n\n methods: {\n load_next: function ($state) {\n const spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(this.$store.state.spotify.webapi_token)\n spotifyApi.getPlaylistTracks(this.playlist.id, { limit: 50, offset: this.offset }).then(data => {\n this.append_tracks(data, $state)\n })\n },\n\n append_tracks: function (data, $state) {\n this.tracks = this.tracks.concat(data.items)\n this.total = data.total\n this.offset += data.limit\n\n if ($state) {\n $state.loaded()\n if (this.offset >= this.total) {\n $state.complete()\n }\n }\n },\n\n play: function () {\n this.show_details_modal = false\n webapi.player_play_uri(this.playlist.uri, true)\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPagePlaylist.vue?vue&type=template&id=c72f0fb2&\"\nimport script from \"./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPagePlaylist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('section',{staticClass:\"section fd-remove-padding-bottom\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.new_search($event)}}},[_c('div',{staticClass:\"field\"},[_c('p',{staticClass:\"control is-expanded has-icons-left\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.search_query),expression:\"search_query\"}],ref:\"search_field\",staticClass:\"input is-rounded is-shadowless\",attrs:{\"type\":\"text\",\"placeholder\":\"Search\",\"autocomplete\":\"off\"},domProps:{\"value\":(_vm.search_query)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.search_query=$event.target.value}}}),_vm._m(0)])])]),_c('div',{staticClass:\"tags\",staticStyle:{\"margin-top\":\"16px\"}},_vm._l((_vm.recent_searches),function(recent_search){return _c('a',{key:recent_search,staticClass:\"tag\",on:{\"click\":function($event){return _vm.open_recent_search(recent_search)}}},[_vm._v(_vm._s(recent_search))])}),0)])])])]),_c('tabs-search',{attrs:{\"query\":_vm.search_query}}),(_vm.show_tracks && _vm.tracks.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Tracks\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.tracks.items),function(track){return _c('spotify-list-item-track',{key:track.id,attrs:{\"track\":track,\"album\":track.album,\"position\":0,\"context_uri\":track.uri}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_track_dialog(track)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'track')?_c('infinite-loading',{on:{\"infinite\":_vm.search_tracks_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-track',{attrs:{\"show\":_vm.show_track_details_modal,\"track\":_vm.selected_track,\"album\":_vm.selected_track.album},on:{\"close\":function($event){_vm.show_track_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_tracks_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_tracks}},[_vm._v(\"Show all \"+_vm._s(_vm.tracks.total.toLocaleString())+\" tracks\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_tracks && !_vm.tracks.total)?_c('content-text',{staticClass:\"mt-6\"},[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No tracks found\")])])])],2):_vm._e(),(_vm.show_artists && _vm.artists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Artists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.artists.items),function(artist){return _c('spotify-list-item-artist',{key:artist.id,attrs:{\"artist\":artist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_artist_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'artist')?_c('infinite-loading',{on:{\"infinite\":_vm.search_artists_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-artist',{attrs:{\"show\":_vm.show_artist_details_modal,\"artist\":_vm.selected_artist},on:{\"close\":function($event){_vm.show_artist_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_artists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_artists}},[_vm._v(\"Show all \"+_vm._s(_vm.artists.total.toLocaleString())+\" artists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_artists && !_vm.artists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No artists found\")])])])],2):_vm._e(),(_vm.show_albums && _vm.albums.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Albums\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.albums.items),function(album){return _c('spotify-list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[(_vm.is_visible_artwork)?_c('template',{slot:\"artwork\"},[_c('p',{staticClass:\"image is-64x64 fd-has-shadow fd-has-action\"},[_c('cover-artwork',{attrs:{\"artwork_url\":_vm.artwork_url(album),\"artist\":album.artist,\"album\":album.name,\"maxwidth\":64,\"maxheight\":64}})],1)]):_vm._e(),_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album_dialog(album)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'album')?_c('infinite-loading',{on:{\"infinite\":_vm.search_albums_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_album_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_albums_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_albums}},[_vm._v(\"Show all \"+_vm._s(_vm.albums.total.toLocaleString())+\" albums\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_albums && !_vm.albums.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No albums found\")])])])],2):_vm._e(),(_vm.show_playlists && _vm.playlists.total)?_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Playlists\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.playlists.items),function(playlist){return _c('spotify-list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_playlist_dialog(playlist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),(_vm.query.type === 'playlist')?_c('infinite-loading',{on:{\"infinite\":_vm.search_playlists_next}},[_c('span',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_vm._v(\".\")])]):_vm._e(),_c('spotify-modal-dialog-playlist',{attrs:{\"show\":_vm.show_playlist_details_modal,\"playlist\":_vm.selected_playlist},on:{\"close\":function($event){_vm.show_playlist_details_modal = false}}})],2),_c('template',{slot:\"footer\"},[(_vm.show_all_playlists_button)?_c('nav',{staticClass:\"level\"},[_c('p',{staticClass:\"level-item\"},[_c('a',{staticClass:\"button is-light is-small is-rounded\",on:{\"click\":_vm.open_search_playlists}},[_vm._v(\"Show all \"+_vm._s(_vm.playlists.total.toLocaleString())+\" playlists\")])])]):_vm._e()])],2):_vm._e(),(_vm.show_playlists && !_vm.playlists.total)?_c('content-text',[_c('template',{slot:\"content\"},[_c('p',[_c('i',[_vm._v(\"No playlists found\")])])])],2):_vm._e()],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon is-left\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"media\"},[_c('div',{staticClass:\"media-content fd-has-action is-clipped\",on:{\"click\":_vm.open_artist}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.artist.name))])]),_c('div',{staticClass:\"media-right\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"media\">\n <div class=\"media-content fd-has-action is-clipped\" v-on:click=\"open_artist\">\n <h1 class=\"title is-6\">{{ artist.name }}</h1>\n </div>\n <div class=\"media-right\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: 'SpotifyListItemArtist',\n props: ['artist'],\n\n methods: {\n open_artist: function () {\n this.$router.push({ path: '/music/spotify/artists/' + this.artist.id })\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyListItemArtist.vue?vue&type=template&id=59bc374f&\"\nimport script from \"./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyListItemArtist.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <!-- Search field + recent searches -->\n <section class=\"section fd-remove-padding-bottom\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <form v-on:submit.prevent=\"new_search\">\n <div class=\"field\">\n <p class=\"control is-expanded has-icons-left\">\n <input class=\"input is-rounded is-shadowless\" type=\"text\" placeholder=\"Search\" v-model=\"search_query\" ref=\"search_field\" autocomplete=\"off\">\n <span class=\"icon is-left\">\n <i class=\"mdi mdi-magnify\"></i>\n </span>\n </p>\n </div>\n </form>\n <div class=\"tags\" style=\"margin-top: 16px;\">\n <a class=\"tag\" v-for=\"recent_search in recent_searches\" :key=\"recent_search\" @click=\"open_recent_search(recent_search)\">{{ recent_search }}</a>\n </div>\n </div>\n </div>\n </div>\n </section>\n\n <tabs-search :query=\"search_query\"></tabs-search>\n\n <!-- Tracks -->\n <content-with-heading v-if=\"show_tracks && tracks.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Tracks</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-track v-for=\"track in tracks.items\" :key=\"track.id\" :track=\"track\" :album=\"track.album\" :position=\"0\" :context_uri=\"track.uri\">\n <template slot=\"actions\">\n <a @click=\"open_track_dialog(track)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-track>\n <infinite-loading v-if=\"query.type === 'track'\" @infinite=\"search_tracks_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-track :show=\"show_track_details_modal\" :track=\"selected_track\" :album=\"selected_track.album\" @close=\"show_track_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_tracks_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_tracks\">Show all {{ tracks.total.toLocaleString() }} tracks</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_tracks && !tracks.total\" class=\"mt-6\">\n <template slot=\"content\">\n <p><i>No tracks found</i></p>\n </template>\n </content-text>\n\n <!-- Artists -->\n <content-with-heading v-if=\"show_artists && artists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Artists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-artist v-for=\"artist in artists.items\" :key=\"artist.id\" :artist=\"artist\">\n <template slot=\"actions\">\n <a @click=\"open_artist_dialog(artist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-artist>\n <infinite-loading v-if=\"query.type === 'artist'\" @infinite=\"search_artists_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-artist :show=\"show_artist_details_modal\" :artist=\"selected_artist\" @close=\"show_artist_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_artists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_artists\">Show all {{ artists.total.toLocaleString() }} artists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_artists && !artists.total\">\n <template slot=\"content\">\n <p><i>No artists found</i></p>\n </template>\n </content-text>\n\n <!-- Albums -->\n <content-with-heading v-if=\"show_albums && albums.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Albums</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-album v-for=\"album in albums.items\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\">\n <template slot=\"artwork\" v-if=\"is_visible_artwork\">\n <p class=\"image is-64x64 fd-has-shadow fd-has-action\">\n <cover-artwork\n :artwork_url=\"artwork_url(album)\"\n :artist=\"album.artist\"\n :album=\"album.name\"\n :maxwidth=\"64\"\n :maxheight=\"64\" />\n </p>\n </template>\n <template slot=\"actions\">\n <a @click=\"open_album_dialog(album)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-album>\n <infinite-loading v-if=\"query.type === 'album'\" @infinite=\"search_albums_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-album :show=\"show_album_details_modal\" :album=\"selected_album\" @close=\"show_album_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_albums_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_albums\">Show all {{ albums.total.toLocaleString() }} albums</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_albums && !albums.total\">\n <template slot=\"content\">\n <p><i>No albums found</i></p>\n </template>\n </content-text>\n\n <!-- Playlists -->\n <content-with-heading v-if=\"show_playlists && playlists.total\">\n <template slot=\"heading-left\">\n <p class=\"title is-4\">Playlists</p>\n </template>\n <template slot=\"content\">\n <spotify-list-item-playlist v-for=\"playlist in playlists.items\" :key=\"playlist.id\" :playlist=\"playlist\">\n <template slot=\"actions\">\n <a @click=\"open_playlist_dialog(playlist)\">\n <span class=\"icon has-text-dark\"><i class=\"mdi mdi-dots-vertical mdi-18px\"></i></span>\n </a>\n </template>\n </spotify-list-item-playlist>\n <infinite-loading v-if=\"query.type === 'playlist'\" @infinite=\"search_playlists_next\"><span slot=\"no-more\">.</span></infinite-loading>\n <spotify-modal-dialog-playlist :show=\"show_playlist_details_modal\" :playlist=\"selected_playlist\" @close=\"show_playlist_details_modal = false\" />\n </template>\n <template slot=\"footer\">\n <nav v-if=\"show_all_playlists_button\" class=\"level\">\n <p class=\"level-item\">\n <a class=\"button is-light is-small is-rounded\" v-on:click=\"open_search_playlists\">Show all {{ playlists.total.toLocaleString() }} playlists</a>\n </p>\n </nav>\n </template>\n </content-with-heading>\n <content-text v-if=\"show_playlists && !playlists.total\">\n <template slot=\"content\">\n <p><i>No playlists found</i></p>\n </template>\n </content-text>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ContentText from '@/templates/ContentText'\nimport TabsSearch from '@/components/TabsSearch'\nimport SpotifyListItemTrack from '@/components/SpotifyListItemTrack'\nimport SpotifyListItemArtist from '@/components/SpotifyListItemArtist'\nimport SpotifyListItemAlbum from '@/components/SpotifyListItemAlbum'\nimport SpotifyListItemPlaylist from '@/components/SpotifyListItemPlaylist'\nimport SpotifyModalDialogTrack from '@/components/SpotifyModalDialogTrack'\nimport SpotifyModalDialogArtist from '@/components/SpotifyModalDialogArtist'\nimport SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\nimport SpotifyModalDialogPlaylist from '@/components/SpotifyModalDialogPlaylist'\nimport CoverArtwork from '@/components/CoverArtwork'\nimport SpotifyWebApi from 'spotify-web-api-js'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport InfiniteLoading from 'vue-infinite-loading'\n\nexport default {\n name: 'SpotifyPageSearch',\n components: { ContentWithHeading, ContentText, TabsSearch, SpotifyListItemTrack, SpotifyListItemArtist, SpotifyListItemAlbum, SpotifyListItemPlaylist, SpotifyModalDialogTrack, SpotifyModalDialogArtist, SpotifyModalDialogAlbum, SpotifyModalDialogPlaylist, InfiniteLoading, CoverArtwork },\n\n data () {\n return {\n search_query: '',\n tracks: { items: [], total: 0 },\n artists: { items: [], total: 0 },\n albums: { items: [], total: 0 },\n playlists: { items: [], total: 0 },\n\n query: {},\n search_param: {},\n\n show_track_details_modal: false,\n selected_track: {},\n\n show_album_details_modal: false,\n selected_album: {},\n\n show_artist_details_modal: false,\n selected_artist: {},\n\n show_playlist_details_modal: false,\n selected_playlist: {},\n\n validSearchTypes: ['track', 'artist', 'album', 'playlist']\n }\n },\n\n computed: {\n recent_searches () {\n return this.$store.state.recent_searches.filter(search => !search.startsWith('query:'))\n },\n\n show_tracks () {\n return this.$route.query.type && this.$route.query.type.includes('track')\n },\n show_all_tracks_button () {\n return this.tracks.total > this.tracks.items.length\n },\n\n show_artists () {\n return this.$route.query.type && this.$route.query.type.includes('artist')\n },\n show_all_artists_button () {\n return this.artists.total > this.artists.items.length\n },\n\n show_albums () {\n return this.$route.query.type && this.$route.query.type.includes('album')\n },\n show_all_albums_button () {\n return this.albums.total > this.albums.items.length\n },\n\n show_playlists () {\n return this.$route.query.type && this.$route.query.type.includes('playlist')\n },\n show_all_playlists_button () {\n return this.playlists.total > this.playlists.items.length\n },\n\n is_visible_artwork () {\n return this.$store.getters.settings_option('webinterface', 'show_cover_artwork_in_album_lists').value\n }\n },\n\n methods: {\n reset: function () {\n this.tracks = { items: [], total: 0 }\n this.artists = { items: [], total: 0 }\n this.albums = { items: [], total: 0 }\n this.playlists = { items: [], total: 0 }\n },\n\n search: function () {\n this.reset()\n\n // If no search query present reset and focus search field\n if (!this.query.query || this.query.query === '' || this.query.query.startsWith('query:')) {\n this.search_query = ''\n this.$refs.search_field.focus()\n return\n }\n\n this.search_query = this.query.query\n this.search_param.limit = this.query.limit ? this.query.limit : 50\n this.search_param.offset = this.query.offset ? this.query.offset : 0\n\n this.$store.commit(types.ADD_RECENT_SEARCH, this.query.query)\n\n this.search_all()\n },\n\n spotify_search: function () {\n return webapi.spotify().then(({ data }) => {\n this.search_param.market = data.webapi_country\n\n var spotifyApi = new SpotifyWebApi()\n spotifyApi.setAccessToken(data.webapi_token)\n\n var types = this.query.type.split(',').filter(type => this.validSearchTypes.includes(type))\n return spotifyApi.search(this.query.query, types, this.search_param)\n })\n },\n\n search_all: function () {\n this.spotify_search().then(data => {\n this.tracks = data.tracks ? data.tracks : { items: [], total: 0 }\n this.artists = data.artists ? data.artists : { items: [], total: 0 }\n this.albums = data.albums ? data.albums : { items: [], total: 0 }\n this.playlists = data.playlists ? data.playlists : { items: [], total: 0 }\n })\n },\n\n search_tracks_next: function ($state) {\n this.spotify_search().then(data => {\n this.tracks.items = this.tracks.items.concat(data.tracks.items)\n this.tracks.total = data.tracks.total\n this.search_param.offset += data.tracks.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.tracks.total) {\n $state.complete()\n }\n })\n },\n\n search_artists_next: function ($state) {\n this.spotify_search().then(data => {\n this.artists.items = this.artists.items.concat(data.artists.items)\n this.artists.total = data.artists.total\n this.search_param.offset += data.artists.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.artists.total) {\n $state.complete()\n }\n })\n },\n\n search_albums_next: function ($state) {\n this.spotify_search().then(data => {\n this.albums.items = this.albums.items.concat(data.albums.items)\n this.albums.total = data.albums.total\n this.search_param.offset += data.albums.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.albums.total) {\n $state.complete()\n }\n })\n },\n\n search_playlists_next: function ($state) {\n this.spotify_search().then(data => {\n this.playlists.items = this.playlists.items.concat(data.playlists.items)\n this.playlists.total = data.playlists.total\n this.search_param.offset += data.playlists.limit\n\n $state.loaded()\n if (this.search_param.offset >= this.playlists.total) {\n $state.complete()\n }\n })\n },\n\n new_search: function () {\n if (!this.search_query) {\n return\n }\n\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'track,artist,album,playlist,audiobook,podcast',\n query: this.search_query,\n limit: 3,\n offset: 0\n }\n })\n this.$refs.search_field.blur()\n },\n\n open_search_tracks: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'track',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_artists: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'artist',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_albums: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'album',\n query: this.$route.query.query\n }\n })\n },\n\n open_search_playlists: function () {\n this.$router.push({\n path: '/search/spotify',\n query: {\n type: 'playlist',\n query: this.$route.query.query\n }\n })\n },\n\n open_recent_search: function (query) {\n this.search_query = query\n this.new_search()\n },\n\n open_track_dialog: function (track) {\n this.selected_track = track\n this.show_track_details_modal = true\n },\n\n open_album_dialog: function (album) {\n this.selected_album = album\n this.show_album_details_modal = true\n },\n\n open_artist_dialog: function (artist) {\n this.selected_artist = artist\n this.show_artist_details_modal = true\n },\n\n open_playlist_dialog: function (playlist) {\n this.selected_playlist = playlist\n this.show_playlist_details_modal = true\n },\n\n open_album: function (album) {\n this.$router.push({ path: '/music/spotify/albums/' + album.id })\n },\n\n artwork_url: function (album) {\n if (album.images && album.images.length > 0) {\n return album.images[0].url\n }\n return ''\n }\n },\n\n mounted: function () {\n this.query = this.$route.query\n this.search()\n },\n\n watch: {\n '$route' (to, from) {\n this.query = to.query\n this.search()\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageSearch.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SpotifyPageSearch.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SpotifyPageSearch.vue?vue&type=template&id=49e65ea6&\"\nimport script from \"./SpotifyPageSearch.vue?vue&type=script&lang=js&\"\nexport * from \"./SpotifyPageSearch.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Navbar items\")])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"content\"},[_vm._v(\" Select the top navigation bar menu items \")]),_c('div',{staticClass:\"notification is-size-7\"},[_vm._v(\" If you select more items than can be shown on your screen then the burger menu will disappear. \")]),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_playlists\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Playlists\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_music\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Music\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_podcasts\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Podcasts\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_audiobooks\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Audiobooks\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_radio\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Radio\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_files\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Files\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_menu_item_search\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Search\")])],2)],1)],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Album lists\")])]),_c('template',{slot:\"content\"},[_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_cover_artwork_in_album_lists\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Show cover artwork in album list\")])],2)],1)],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Now playing page\")])]),_c('template',{slot:\"content\"},[_c('settings-checkbox',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_composer_now_playing\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Show composer\")]),_c('template',{slot:\"info\"},[_vm._v(\"If enabled the composer of the current playing track is shown on the \\\"now playing page\\\"\")])],2),_c('settings-textfield',{attrs:{\"category_name\":\"webinterface\",\"option_name\":\"show_composer_for_genre\",\"disabled\":!_vm.settings_option_show_composer_now_playing,\"placeholder\":\"Genres\"}},[_c('template',{slot:\"label\"},[_vm._v(\"Show composer only for listed genres\")]),_c('template',{slot:\"info\"},[_c('p',{staticClass:\"help\"},[_vm._v(\" Comma separated list of genres the composer should be displayed on the \\\"now playing page\\\". \")]),_c('p',{staticClass:\"help\"},[_vm._v(\" Leave empty to always show the composer. \")]),_c('p',{staticClass:\"help\"},[_vm._v(\" The genre tag of the current track is matched by checking, if one of the defined genres are included. For example setting to \"),_c('code',[_vm._v(\"classical, soundtrack\")]),_vm._v(\" will show the composer for tracks with a genre tag of \\\"Contemporary Classical\\\".\"),_c('br')])])],2)],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{staticClass:\"section fd-tabs-section\"},[_c('div',{staticClass:\"container\"},[_c('div',{staticClass:\"columns is-centered\"},[_c('div',{staticClass:\"column is-four-fifths\"},[_c('div',{staticClass:\"tabs is-centered is-small\"},[_c('ul',[_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/webinterface\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Webinterface\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/remotes-outputs\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Remotes & Outputs\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/artwork\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Artwork\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/settings/online-services\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{},[_vm._v(\"Online Services\")])])])],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/settings/webinterface\" active-class=\"is-active\">\n <a>\n <span class=\"\">Webinterface</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/settings/remotes-outputs\" active-class=\"is-active\">\n <a>\n <span class=\"\">Remotes & Outputs</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/settings/artwork\" active-class=\"is-active\">\n <a>\n <span class=\"\">Artwork</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/settings/online-services\" active-class=\"is-active\">\n <a>\n <span class=\"\">Online Services</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsSettings',\n\n computed: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSettings.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsSettings.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsSettings.vue?vue&type=template&id=6c0a7918&\"\nimport script from \"./TabsSettings.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsSettings.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{ref:\"settings_checkbox\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.value},on:{\"change\":_vm.set_update_timer}}),_vm._t(\"label\"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdate === 'success',\n 'has-text-danger': _vm.statusUpdate === 'error'\n }},[_vm._v(\" \"+_vm._s(_vm.info))])],2),(_vm.$slots['info'])?_c('p',{staticClass:\"help\"},[_vm._t(\"info\")],2):_vm._e()])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div class=\"field\">\n <label class=\"checkbox\">\n <input type=\"checkbox\"\n :checked=\"value\"\n @change=\"set_update_timer\"\n ref=\"settings_checkbox\">\n <slot name=\"label\"></slot>\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdate === 'success',\n 'has-text-danger': statusUpdate === 'error'\n }\"> {{ info }}</i>\n </label>\n <p class=\"help\" v-if=\"$slots['info']\">\n <slot name=\"info\"></slot>\n </p>\n </div>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsCheckbox',\n\n props: ['category_name', 'option_name'],\n\n data () {\n return {\n timerDelay: 2000,\n timerId: -1,\n\n // <empty>: default/no changes, 'success': update succesful, 'error': update failed\n statusUpdate: ''\n }\n },\n\n computed: {\n category () {\n return this.$store.state.settings.categories.find(elem => elem.name === this.category_name)\n },\n\n option () {\n if (!this.category) {\n return {}\n }\n return this.category.options.find(elem => elem.name === this.option_name)\n },\n\n value () {\n return this.option.value\n },\n\n info () {\n if (this.statusUpdate === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdate === 'error') {\n return '(error saving setting)'\n }\n return ''\n }\n },\n\n methods: {\n set_update_timer () {\n if (this.timerId > 0) {\n window.clearTimeout(this.timerId)\n this.timerId = -1\n }\n\n this.statusUpdate = ''\n const newValue = this.$refs.settings_checkbox.checked\n if (newValue !== this.value) {\n this.timerId = window.setTimeout(this.update_setting, this.timerDelay)\n }\n },\n\n update_setting () {\n this.timerId = -1\n\n const newValue = this.$refs.settings_checkbox.checked\n if (newValue === this.value) {\n this.statusUpdate = ''\n return\n }\n\n const option = {\n category: this.category.name,\n name: this.option_name,\n value: newValue\n }\n webapi.settings_update(this.category.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdate = 'success'\n }).catch(() => {\n this.statusUpdate = 'error'\n this.$refs.settings_checkbox.checked = this.value\n }).finally(() => {\n this.timerId = window.setTimeout(this.clear_status, this.timerDelay)\n })\n },\n\n clear_status: function () {\n this.statusUpdate = ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsCheckbox.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsCheckbox.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsCheckbox.vue?vue&type=template&id=f722b06c&\"\nimport script from \"./SettingsCheckbox.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsCheckbox.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('fieldset',{attrs:{\"disabled\":_vm.disabled}},[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label has-text-weight-normal\"},[_vm._t(\"label\"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdate === 'success',\n 'has-text-danger': _vm.statusUpdate === 'error'\n }},[_vm._v(\" \"+_vm._s(_vm.info))])],2),_c('div',{staticClass:\"control\"},[_c('input',{ref:\"settings_text\",staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":_vm.placeholder},domProps:{\"value\":_vm.value},on:{\"input\":_vm.set_update_timer}})]),(_vm.$slots['info'])?_c('p',{staticClass:\"help\"},[_vm._t(\"info\")],2):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <fieldset :disabled=\"disabled\">\n <div class=\"field\">\n <label class=\"label has-text-weight-normal\">\n <slot name=\"label\"></slot>\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdate === 'success',\n 'has-text-danger': statusUpdate === 'error'\n }\"> {{ info }}</i>\n </label>\n <div class=\"control\">\n <input class=\"input\" type=\"text\" :placeholder=\"placeholder\"\n :value=\"value\"\n @input=\"set_update_timer\"\n ref=\"settings_text\">\n </div>\n <p class=\"help\" v-if=\"$slots['info']\">\n <slot name=\"info\"></slot>\n </p>\n </div>\n </fieldset>\n</template>\n\n<script>\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsTextfield',\n\n props: ['category_name', 'option_name', 'placeholder', 'disabled'],\n\n data () {\n return {\n timerDelay: 2000,\n timerId: -1,\n\n // <empty>: default/no changes, 'success': update succesful, 'error': update failed\n statusUpdate: ''\n }\n },\n\n computed: {\n category () {\n return this.$store.state.settings.categories.find(elem => elem.name === this.category_name)\n },\n\n option () {\n if (!this.category) {\n return {}\n }\n return this.category.options.find(elem => elem.name === this.option_name)\n },\n\n value () {\n return this.option.value\n },\n\n info () {\n if (this.statusUpdate === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdate === 'error') {\n return '(error saving setting)'\n }\n return ''\n }\n },\n\n methods: {\n set_update_timer () {\n if (this.timerId > 0) {\n window.clearTimeout(this.timerId)\n this.timerId = -1\n }\n\n this.statusUpdate = ''\n const newValue = this.$refs.settings_text.value\n if (newValue !== this.value) {\n this.timerId = window.setTimeout(this.update_setting, this.timerDelay)\n }\n },\n\n update_setting () {\n this.timerId = -1\n\n const newValue = this.$refs.settings_text.value\n if (newValue === this.value) {\n this.statusUpdate = ''\n return\n }\n\n const option = {\n category: this.category.name,\n name: this.option_name,\n value: newValue\n }\n webapi.settings_update(this.category.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdate = 'success'\n }).catch(() => {\n this.statusUpdate = 'error'\n this.$refs.settings_text.value = this.value\n }).finally(() => {\n this.timerId = window.setTimeout(this.clear_status, this.timerDelay)\n })\n },\n\n clear_status: function () {\n this.statusUpdate = ''\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsTextfield.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsTextfield.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsTextfield.vue?vue&type=template&id=4cc6d5ec&\"\nimport script from \"./SettingsTextfield.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsTextfield.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Navbar items</div>\n </template>\n\n <template slot=\"content\">\n <p class=\"content\">\n Select the top navigation bar menu items\n </p>\n <div class=\"notification is-size-7\">\n If you select more items than can be shown on your screen then the burger menu will disappear.\n </div>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_playlists\">\n <template slot=\"label\"> Playlists</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_music\">\n <template slot=\"label\"> Music</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_podcasts\">\n <template slot=\"label\"> Podcasts</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_audiobooks\">\n <template slot=\"label\"> Audiobooks</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_radio\">\n <template slot=\"label\"> Radio</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_files\">\n <template slot=\"label\"> Files</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_menu_item_search\">\n <template slot=\"label\"> Search</template>\n </settings-checkbox>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Album lists</div>\n </template>\n\n <template slot=\"content\">\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_cover_artwork_in_album_lists\">\n <template slot=\"label\"> Show cover artwork in album list</template>\n </settings-checkbox>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Now playing page</div>\n </template>\n\n <template slot=\"content\">\n <settings-checkbox category_name=\"webinterface\" option_name=\"show_composer_now_playing\">\n <template slot=\"label\"> Show composer</template>\n <template slot=\"info\">If enabled the composer of the current playing track is shown on the "now playing page"</template>\n </settings-checkbox>\n <settings-textfield category_name=\"webinterface\" option_name=\"show_composer_for_genre\"\n :disabled=\"!settings_option_show_composer_now_playing\"\n placeholder=\"Genres\">\n <template slot=\"label\">Show composer only for listed genres</template>\n <template slot=\"info\">\n <p class=\"help\">\n Comma separated list of genres the composer should be displayed on the "now playing page".\n </p>\n <p class=\"help\">\n Leave empty to always show the composer.\n </p>\n <p class=\"help\">\n The genre tag of the current track is matched by checking, if one of the defined genres are included.\n For example setting to <code>classical, soundtrack</code> will show the composer for tracks with\n a genre tag of "Contemporary Classical".<br>\n </p>\n </template>\n </settings-textfield>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport SettingsCheckbox from '@/components/SettingsCheckbox'\nimport SettingsTextfield from '@/components/SettingsTextfield'\n\nexport default {\n name: 'SettingsPageWebinterface',\n components: { ContentWithHeading, TabsSettings, SettingsCheckbox, SettingsTextfield },\n\n computed: {\n settings_option_show_composer_now_playing () {\n return this.$store.getters.settings_option_show_composer_now_playing\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageWebinterface.vue?vue&type=template&id=23484b31&\"\nimport script from \"./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageWebinterface.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Artwork\")])]),_c('template',{slot:\"content\"},[_c('div',{staticClass:\"content\"},[_c('p',[_vm._v(\" forked-daapd supports PNG and JPEG artwork which is either placed as separate image files in the library, embedded in the media files or made available online by radio stations. \")]),_c('p',[_vm._v(\"In addition to that, you can enable fetching artwork from the following artwork providers:\")])]),(_vm.spotify.libspotify_logged_in)?_c('settings-checkbox',{attrs:{\"category_name\":\"artwork\",\"option_name\":\"use_artwork_source_spotify\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Spotify\")])],2):_vm._e(),_c('settings-checkbox',{attrs:{\"category_name\":\"artwork\",\"option_name\":\"use_artwork_source_discogs\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Discogs (\"),_c('a',{attrs:{\"href\":\"https://www.discogs.com/\"}},[_vm._v(\"https://www.discogs.com/\")]),_vm._v(\")\")])],2),_c('settings-checkbox',{attrs:{\"category_name\":\"artwork\",\"option_name\":\"use_artwork_source_coverartarchive\"}},[_c('template',{slot:\"label\"},[_vm._v(\" Cover Art Archive (\"),_c('a',{attrs:{\"href\":\"https://coverartarchive.org/\"}},[_vm._v(\"https://coverartarchive.org/\")]),_vm._v(\")\")])],2)],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Artwork</div>\n </template>\n\n <template slot=\"content\">\n <div class=\"content\">\n <p>\n forked-daapd supports PNG and JPEG artwork which is either placed as separate image files in the library,\n embedded in the media files or made available online by radio stations.\n </p>\n <p>In addition to that, you can enable fetching artwork from the following artwork providers:</p>\n </div>\n <settings-checkbox category_name=\"artwork\" option_name=\"use_artwork_source_spotify\" v-if=\"spotify.libspotify_logged_in\">\n <template slot=\"label\"> Spotify</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"artwork\" option_name=\"use_artwork_source_discogs\">\n <template slot=\"label\"> Discogs (<a href=\"https://www.discogs.com/\">https://www.discogs.com/</a>)</template>\n </settings-checkbox>\n <settings-checkbox category_name=\"artwork\" option_name=\"use_artwork_source_coverartarchive\">\n <template slot=\"label\"> Cover Art Archive (<a href=\"https://coverartarchive.org/\">https://coverartarchive.org/</a>)</template>\n </settings-checkbox>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport SettingsCheckbox from '@/components/SettingsCheckbox'\n\nexport default {\n name: 'SettingsPageArtwork',\n components: { ContentWithHeading, TabsSettings, SettingsCheckbox },\n\n computed: {\n spotify () {\n return this.$store.state.spotify\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageArtwork.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageArtwork.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageArtwork.vue?vue&type=template&id=41b3d8bf&\"\nimport script from \"./SettingsPageArtwork.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageArtwork.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Spotify\")])]),_c('template',{slot:\"content\"},[(!_vm.spotify.libspotify_installed)?_c('div',{staticClass:\"notification is-size-7\"},[_c('p',[_vm._v(\"forked-daapd was either built without support for Spotify or libspotify is not installed.\")])]):_vm._e(),(_vm.spotify.libspotify_installed)?_c('div',[_c('div',{staticClass:\"notification is-size-7\"},[_c('b',[_vm._v(\"You must have a Spotify premium account\")]),_vm._v(\". If you normally log into Spotify with your Facebook account you must first go to Spotify's web site where you can get the Spotify username and password that matches your account. \")]),_c('div',[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"libspotify\")]),_vm._v(\" - Login with your Spotify username and password \")]),(_vm.spotify.libspotify_logged_in)?_c('p',{staticClass:\"fd-has-margin-bottom\"},[_vm._v(\" Logged in as \"),_c('b',[_c('code',[_vm._v(_vm._s(_vm.spotify.libspotify_user))])])]):_vm._e(),(_vm.spotify.libspotify_installed && !_vm.spotify.libspotify_logged_in)?_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.login_libspotify($event)}}},[_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.libspotify.user),expression:\"libspotify.user\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Username\"},domProps:{\"value\":(_vm.libspotify.user)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.libspotify, \"user\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.libspotify.errors.user))])]),_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.libspotify.password),expression:\"libspotify.password\"}],staticClass:\"input\",attrs:{\"type\":\"password\",\"placeholder\":\"Password\"},domProps:{\"value\":(_vm.libspotify.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.libspotify, \"password\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.libspotify.errors.password))])]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\"},[_vm._v(\"Login\")])])])]):_vm._e(),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.libspotify.errors.error))]),_c('p',{staticClass:\"help\"},[_vm._v(\" libspotify enables forked-daapd to play Spotify tracks. \")]),_c('p',{staticClass:\"help\"},[_vm._v(\" forked-daapd will not store your password, but will still be able to log you in automatically afterwards, because libspotify saves a login token. \")])]),_c('div',{staticClass:\"fd-has-margin-top\"},[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"Spotify Web API\")]),_vm._v(\" - Grant access to the Spotify Web API \")]),(_vm.spotify.webapi_token_valid)?_c('p',[_vm._v(\" Access granted for \"),_c('b',[_c('code',[_vm._v(_vm._s(_vm.spotify.webapi_user))])])]):_vm._e(),(_vm.spotify_missing_scope.length > 0)?_c('p',{staticClass:\"help is-danger\"},[_vm._v(\" Please reauthorize Web API access to grant forked-daapd the following additional access rights: \"),_c('b',[_c('code',[_vm._v(_vm._s(_vm._f(\"join\")(_vm.spotify_missing_scope)))])])]):_vm._e(),_c('div',{staticClass:\"field fd-has-margin-top \"},[_c('div',{staticClass:\"control\"},[_c('a',{staticClass:\"button\",class:{ 'is-info': !_vm.spotify.webapi_token_valid || _vm.spotify_missing_scope.length > 0 },attrs:{\"href\":_vm.spotify.oauth_uri}},[_vm._v(\"Authorize Web API access\")])])]),_c('p',{staticClass:\"help\"},[_vm._v(\" Access to the Spotify Web API enables scanning of your Spotify library. Required scopes are \"),_c('code',[_vm._v(_vm._s(_vm._f(\"join\")(_vm.spotify_required_scope)))]),_vm._v(\". \")])])]):_vm._e()])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Last.fm\")])]),_c('template',{slot:\"content\"},[(!_vm.lastfm.enabled)?_c('div',{staticClass:\"notification is-size-7\"},[_c('p',[_vm._v(\"forked-daapd was built without support for Last.fm.\")])]):_vm._e(),(_vm.lastfm.enabled)?_c('div',[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"Last.fm\")]),_vm._v(\" - Login with your Last.fm username and password to enable scrobbling \")]),(_vm.lastfm.scrobbling_enabled)?_c('div',[_c('a',{staticClass:\"button\",on:{\"click\":_vm.logoutLastfm}},[_vm._v(\"Stop scrobbling\")])]):_vm._e(),(!_vm.lastfm.scrobbling_enabled)?_c('div',[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.login_lastfm($event)}}},[_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.lastfm_login.user),expression:\"lastfm_login.user\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Username\"},domProps:{\"value\":(_vm.lastfm_login.user)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.lastfm_login, \"user\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.lastfm_login.errors.user))])]),_c('div',{staticClass:\"control is-expanded\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.lastfm_login.password),expression:\"lastfm_login.password\"}],staticClass:\"input\",attrs:{\"type\":\"password\",\"placeholder\":\"Password\"},domProps:{\"value\":(_vm.lastfm_login.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.lastfm_login, \"password\", $event.target.value)}}}),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.lastfm_login.errors.password))])]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\",attrs:{\"type\":\"submit\"}},[_vm._v(\"Login\")])])]),_c('p',{staticClass:\"help is-danger\"},[_vm._v(_vm._s(_vm.lastfm_login.errors.error))]),_c('p',{staticClass:\"help\"},[_vm._v(\" forked-daapd will not store your Last.fm username/password, only the session key. The session key does not expire. \")])])]):_vm._e()]):_vm._e()])],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Spotify</div>\n </template>\n\n <template slot=\"content\">\n <div class=\"notification is-size-7\" v-if=\"!spotify.libspotify_installed\">\n <p>forked-daapd was either built without support for Spotify or libspotify is not installed.</p>\n </div>\n <div v-if=\"spotify.libspotify_installed\">\n <div class=\"notification is-size-7\">\n <b>You must have a Spotify premium account</b>. If you normally log into Spotify with your Facebook account you must first go to Spotify's web site where you can get the Spotify username and password that matches your account.\n </div>\n\n <div>\n <p class=\"content\">\n <b>libspotify</b> - Login with your Spotify username and password\n </p>\n <p v-if=\"spotify.libspotify_logged_in\" class=\"fd-has-margin-bottom\">\n Logged in as <b><code>{{ spotify.libspotify_user }}</code></b>\n </p>\n <form v-if=\"spotify.libspotify_installed && !spotify.libspotify_logged_in\" @submit.prevent=\"login_libspotify\">\n <div class=\"field is-grouped\">\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"text\" placeholder=\"Username\" v-model=\"libspotify.user\">\n <p class=\"help is-danger\">{{ libspotify.errors.user }}</p>\n </div>\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"password\" placeholder=\"Password\" v-model=\"libspotify.password\">\n <p class=\"help is-danger\">{{ libspotify.errors.password }}</p>\n </div>\n <div class=\"control\">\n <button class=\"button is-info\">Login</button>\n </div>\n </div>\n </form>\n <p class=\"help is-danger\">{{ libspotify.errors.error }}</p>\n <p class=\"help\">\n libspotify enables forked-daapd to play Spotify tracks.\n </p>\n <p class=\"help\">\n forked-daapd will not store your password, but will still be able to log you in automatically afterwards, because libspotify saves a login token.\n </p>\n </div>\n\n <div class=\"fd-has-margin-top\">\n <p class=\"content\">\n <b>Spotify Web API</b> - Grant access to the Spotify Web API\n </p>\n <p v-if=\"spotify.webapi_token_valid\">\n Access granted for <b><code>{{ spotify.webapi_user }}</code></b>\n </p>\n <p class=\"help is-danger\" v-if=\"spotify_missing_scope.length > 0\">\n Please reauthorize Web API access to grant forked-daapd the following additional access rights:\n <b><code>{{ spotify_missing_scope | join }}</code></b>\n </p>\n <div class=\"field fd-has-margin-top \">\n <div class=\"control\">\n <a class=\"button\" :class=\"{ 'is-info': !spotify.webapi_token_valid || spotify_missing_scope.length > 0 }\" :href=\"spotify.oauth_uri\">Authorize Web API access</a>\n </div>\n </div>\n <p class=\"help\">\n Access to the Spotify Web API enables scanning of your Spotify library. Required scopes are\n <code>{{ spotify_required_scope | join }}</code>.\n </p>\n </div>\n </div>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Last.fm</div>\n </template>\n\n <template slot=\"content\">\n <div class=\"notification is-size-7\" v-if=\"!lastfm.enabled\">\n <p>forked-daapd was built without support for Last.fm.</p>\n </div>\n <div v-if=\"lastfm.enabled\">\n <p class=\"content\">\n <b>Last.fm</b> - Login with your Last.fm username and password to enable scrobbling\n </p>\n <div v-if=\"lastfm.scrobbling_enabled\">\n <a class=\"button\" @click=\"logoutLastfm\">Stop scrobbling</a>\n </div>\n <div v-if=\"!lastfm.scrobbling_enabled\">\n <form @submit.prevent=\"login_lastfm\">\n <div class=\"field is-grouped\">\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"text\" placeholder=\"Username\" v-model=\"lastfm_login.user\">\n <p class=\"help is-danger\">{{ lastfm_login.errors.user }}</p>\n </div>\n <div class=\"control is-expanded\">\n <input class=\"input\" type=\"password\" placeholder=\"Password\" v-model=\"lastfm_login.password\">\n <p class=\"help is-danger\">{{ lastfm_login.errors.password }}</p>\n </div>\n <div class=\"control\">\n <button class=\"button is-info\" type=\"submit\">Login</button>\n </div>\n </div>\n <p class=\"help is-danger\">{{ lastfm_login.errors.error }}</p>\n <p class=\"help\">\n forked-daapd will not store your Last.fm username/password, only the session key. The session key does not expire.\n </p>\n </form>\n </div>\n </div>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SettingsPageOnlineServices',\n components: { ContentWithHeading, TabsSettings },\n\n data () {\n return {\n libspotify: { user: '', password: '', errors: { user: '', password: '', error: '' } },\n lastfm_login: { user: '', password: '', errors: { user: '', password: '', error: '' } }\n }\n },\n\n computed: {\n lastfm () {\n return this.$store.state.lastfm\n },\n\n spotify () {\n return this.$store.state.spotify\n },\n\n spotify_required_scope () {\n if (this.spotify.webapi_token_valid && this.spotify.webapi_granted_scope && this.spotify.webapi_required_scope) {\n return this.spotify.webapi_required_scope.split(' ')\n }\n return []\n },\n\n spotify_missing_scope () {\n if (this.spotify.webapi_token_valid && this.spotify.webapi_granted_scope && this.spotify.webapi_required_scope) {\n return this.spotify.webapi_required_scope.split(' ').filter(scope => this.spotify.webapi_granted_scope.indexOf(scope) < 0)\n }\n return []\n }\n },\n\n methods: {\n login_libspotify () {\n webapi.spotify_login(this.libspotify).then(response => {\n this.libspotify.user = ''\n this.libspotify.password = ''\n this.libspotify.errors.user = ''\n this.libspotify.errors.password = ''\n this.libspotify.errors.error = ''\n\n if (!response.data.success) {\n this.libspotify.errors.user = response.data.errors.user\n this.libspotify.errors.password = response.data.errors.password\n this.libspotify.errors.error = response.data.errors.error\n }\n })\n },\n\n login_lastfm () {\n webapi.lastfm_login(this.lastfm_login).then(response => {\n this.lastfm_login.user = ''\n this.lastfm_login.password = ''\n this.lastfm_login.errors.user = ''\n this.lastfm_login.errors.password = ''\n this.lastfm_login.errors.error = ''\n\n if (!response.data.success) {\n this.lastfm_login.errors.user = response.data.errors.user\n this.lastfm_login.errors.password = response.data.errors.password\n this.lastfm_login.errors.error = response.data.errors.error\n }\n })\n },\n\n logoutLastfm () {\n webapi.lastfm_logout()\n }\n },\n\n filters: {\n join (array) {\n return array.join(', ')\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageOnlineServices.vue?vue&type=template&id=da8f0386&\"\nimport script from \"./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageOnlineServices.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('tabs-settings'),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Remote Pairing\")])]),_c('template',{slot:\"content\"},[(_vm.pairing.active)?_c('div',{staticClass:\"notification\"},[_c('form',{on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_pairing($event)}}},[_c('label',{staticClass:\"label has-text-weight-normal\"},[_vm._v(\" Remote pairing request from \"),_c('b',[_vm._v(_vm._s(_vm.pairing.remote))])]),_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.pairing_req.pin),expression:\"pairing_req.pin\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Enter pairing code\"},domProps:{\"value\":(_vm.pairing_req.pin)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.pairing_req, \"pin\", $event.target.value)}}})]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\",attrs:{\"type\":\"submit\"}},[_vm._v(\"Send\")])])])])]):_vm._e(),(!_vm.pairing.active)?_c('div',{staticClass:\"content\"},[_c('p',[_vm._v(\"No active pairing request.\")])]):_vm._e()])],2),_c('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Device Verification\")])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"content\"},[_vm._v(\" If your Apple TV requires device verification then activate the device below and enter the PIN that the Apple TV displays. \")]),_vm._l((_vm.outputs),function(output){return _c('div',{key:output.id},[_c('div',{staticClass:\"field\"},[_c('div',{staticClass:\"control\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(output.selected),expression:\"output.selected\"}],attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(output.selected)?_vm._i(output.selected,null)>-1:(output.selected)},on:{\"change\":[function($event){var $$a=output.selected,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.$set(output, \"selected\", $$a.concat([$$v])))}else{$$i>-1&&(_vm.$set(output, \"selected\", $$a.slice(0,$$i).concat($$a.slice($$i+1))))}}else{_vm.$set(output, \"selected\", $$c)}},function($event){return _vm.output_toggle(output.id)}]}}),_vm._v(\" \"+_vm._s(output.name)+\" \")])])]),(output.needs_auth_key)?_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_verification(output.id)}}},[_c('div',{staticClass:\"field is-grouped\"},[_c('div',{staticClass:\"control\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.verification_req.pin),expression:\"verification_req.pin\"}],staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Enter verification code\"},domProps:{\"value\":(_vm.verification_req.pin)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.verification_req, \"pin\", $event.target.value)}}})]),_c('div',{staticClass:\"control\"},[_c('button',{staticClass:\"button is-info\",attrs:{\"type\":\"submit\"}},[_vm._v(\"Verify\")])])])]):_vm._e()])})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <div>\n <tabs-settings></tabs-settings>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Remote Pairing</div>\n </template>\n\n <template slot=\"content\">\n <!-- Paring request active -->\n <div class=\"notification\" v-if=\"pairing.active\">\n <form v-on:submit.prevent=\"kickoff_pairing\">\n <label class=\"label has-text-weight-normal\">\n Remote pairing request from <b>{{ pairing.remote }}</b>\n </label>\n <div class=\"field is-grouped\">\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Enter pairing code\" v-model=\"pairing_req.pin\">\n </div>\n <div class=\"control\">\n <button class=\"button is-info\" type=\"submit\">Send</button>\n </div>\n </div>\n </form>\n </div>\n <!-- No pairing requests -->\n <div class=\"content\" v-if=\"!pairing.active\">\n <p>No active pairing request.</p>\n </div>\n </template>\n </content-with-heading>\n\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Device Verification</div>\n </template>\n\n <template slot=\"content\">\n <p class=\"content\">\n If your Apple TV requires device verification then activate the device below and enter the PIN that the Apple TV displays.\n </p>\n\n <div v-for=\"output in outputs\" :key=\"output.id\">\n <div class=\"field\">\n <div class=\"control\">\n <label class=\"checkbox\">\n <input type=\"checkbox\" v-model=\"output.selected\" @change=\"output_toggle(output.id)\"> {{ output.name }}\n </label>\n </div>\n </div>\n <form @submit.prevent=\"kickoff_verification(output.id)\" v-if=\"output.needs_auth_key\" class=\"fd-has-margin-bottom\">\n <div class=\"field is-grouped\">\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Enter verification code\" v-model=\"verification_req.pin\">\n </div>\n <div class=\"control\">\n <button class=\"button is-info\" type=\"submit\">Verify</button>\n </div>\n </div>\n </form>\n </div>\n </template>\n </content-with-heading>\n </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSettings from '@/components/TabsSettings'\nimport webapi from '@/webapi'\n\nexport default {\n name: 'SettingsPageRemotesOutputs',\n components: { ContentWithHeading, TabsSettings },\n\n data () {\n return {\n pairing_req: { pin: '' },\n verification_req: { pin: '' }\n }\n },\n\n computed: {\n pairing () {\n return this.$store.state.pairing\n },\n\n outputs () {\n return this.$store.state.outputs\n }\n },\n\n methods: {\n kickoff_pairing () {\n webapi.pairing_kickoff(this.pairing_req)\n },\n\n output_toggle (outputId) {\n webapi.output_toggle(outputId)\n },\n\n kickoff_verification (outputId) {\n webapi.output_update(outputId, this.verification_req)\n }\n },\n\n filters: {\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SettingsPageRemotesOutputs.vue?vue&type=template&id=2356d137&\"\nimport script from \"./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"\nexport * from \"./SettingsPageRemotesOutputs.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import Vue from 'vue'\nimport VueRouter from 'vue-router'\nimport store from '@/store'\nimport * as types from '@/store/mutation_types'\nimport PageQueue from '@/pages/PageQueue'\nimport PageNowPlaying from '@/pages/PageNowPlaying'\nimport PageBrowse from '@/pages/PageBrowse'\nimport PageBrowseRecentlyAdded from '@/pages/PageBrowseRecentlyAdded'\nimport PageBrowseRecentlyPlayed from '@/pages/PageBrowseRecentlyPlayed'\nimport PageArtists from '@/pages/PageArtists'\nimport PageArtist from '@/pages/PageArtist'\nimport PageAlbums from '@/pages/PageAlbums'\nimport PageAlbum from '@/pages/PageAlbum'\nimport PageGenres from '@/pages/PageGenres'\nimport PageGenre from '@/pages/PageGenre'\nimport PageGenreTracks from '@/pages/PageGenreTracks'\nimport PageArtistTracks from '@/pages/PageArtistTracks'\nimport PagePodcasts from '@/pages/PagePodcasts'\nimport PagePodcast from '@/pages/PagePodcast'\nimport PageAudiobooksAlbums from '@/pages/PageAudiobooksAlbums'\nimport PageAudiobooksArtists from '@/pages/PageAudiobooksArtists'\nimport PageAudiobooksArtist from '@/pages/PageAudiobooksArtist'\nimport PageAudiobooksAlbum from '@/pages/PageAudiobooksAlbum'\nimport PagePlaylists from '@/pages/PagePlaylists'\nimport PagePlaylist from '@/pages/PagePlaylist'\nimport PageFiles from '@/pages/PageFiles'\nimport PageRadioStreams from '@/pages/PageRadioStreams'\nimport PageSearch from '@/pages/PageSearch'\nimport PageAbout from '@/pages/PageAbout'\nimport SpotifyPageBrowse from '@/pages/SpotifyPageBrowse'\nimport SpotifyPageBrowseNewReleases from '@/pages/SpotifyPageBrowseNewReleases'\nimport SpotifyPageBrowseFeaturedPlaylists from '@/pages/SpotifyPageBrowseFeaturedPlaylists'\nimport SpotifyPageArtist from '@/pages/SpotifyPageArtist'\nimport SpotifyPageAlbum from '@/pages/SpotifyPageAlbum'\nimport SpotifyPagePlaylist from '@/pages/SpotifyPagePlaylist'\nimport SpotifyPageSearch from '@/pages/SpotifyPageSearch'\nimport SettingsPageWebinterface from '@/pages/SettingsPageWebinterface'\nimport SettingsPageArtwork from '@/pages/SettingsPageArtwork'\nimport SettingsPageOnlineServices from '@/pages/SettingsPageOnlineServices'\nimport SettingsPageRemotesOutputs from '@/pages/SettingsPageRemotesOutputs'\n\nVue.use(VueRouter)\n\nexport const router = new VueRouter({\n routes: [\n {\n path: '/',\n name: 'PageQueue',\n component: PageQueue\n },\n {\n path: '/about',\n name: 'About',\n component: PageAbout\n },\n {\n path: '/now-playing',\n name: 'Now playing',\n component: PageNowPlaying\n },\n {\n path: '/music',\n redirect: '/music/browse'\n },\n {\n path: '/music/browse',\n name: 'Browse',\n component: PageBrowse,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/browse/recently_added',\n name: 'Browse Recently Added',\n component: PageBrowseRecentlyAdded,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/browse/recently_played',\n name: 'Browse Recently Played',\n component: PageBrowseRecentlyPlayed,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/artists',\n name: 'Artists',\n component: PageArtists,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/artists/:artist_id',\n name: 'Artist',\n component: PageArtist,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/artists/:artist_id/tracks',\n name: 'Tracks',\n component: PageArtistTracks,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/albums',\n name: 'Albums',\n component: PageAlbums,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/albums/:album_id',\n name: 'Album',\n component: PageAlbum,\n meta: { show_progress: true }\n },\n {\n path: '/music/genres',\n name: 'Genres',\n component: PageGenres,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/music/genres/:genre',\n name: 'Genre',\n component: PageGenre,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/music/genres/:genre/tracks',\n name: 'GenreTracks',\n component: PageGenreTracks,\n meta: { show_progress: true, has_index: true }\n },\n {\n path: '/podcasts',\n name: 'Podcasts',\n component: PagePodcasts,\n meta: { show_progress: true }\n },\n {\n path: '/podcasts/:album_id',\n name: 'Podcast',\n component: PagePodcast,\n meta: { show_progress: true }\n },\n {\n path: '/audiobooks',\n redirect: '/audiobooks/artists'\n },\n {\n path: '/audiobooks/artists',\n name: 'AudiobooksArtists',\n component: PageAudiobooksArtists,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/audiobooks/artists/:artist_id',\n name: 'AudiobooksArtist',\n component: PageAudiobooksArtist,\n meta: { show_progress: true }\n },\n {\n path: '/audiobooks/albums',\n name: 'AudiobooksAlbums',\n component: PageAudiobooksAlbums,\n meta: { show_progress: true, has_tabs: true, has_index: true }\n },\n {\n path: '/audiobooks/:album_id',\n name: 'Audiobook',\n component: PageAudiobooksAlbum,\n meta: { show_progress: true }\n },\n {\n path: '/radio',\n name: 'Radio',\n component: PageRadioStreams,\n meta: { show_progress: true }\n },\n {\n path: '/files',\n name: 'Files',\n component: PageFiles,\n meta: { show_progress: true }\n },\n {\n path: '/playlists',\n redirect: '/playlists/0'\n },\n {\n path: '/playlists/:playlist_id',\n name: 'Playlists',\n component: PagePlaylists,\n meta: { show_progress: true }\n },\n {\n path: '/playlists/:playlist_id/tracks',\n name: 'Playlist',\n component: PagePlaylist,\n meta: { show_progress: true }\n },\n {\n path: '/search',\n redirect: '/search/library'\n },\n {\n path: '/search/library',\n name: 'Search Library',\n component: PageSearch\n },\n {\n path: '/music/spotify',\n name: 'Spotify',\n component: SpotifyPageBrowse,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/spotify/new-releases',\n name: 'Spotify Browse New Releases',\n component: SpotifyPageBrowseNewReleases,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/spotify/featured-playlists',\n name: 'Spotify Browse Featured Playlists',\n component: SpotifyPageBrowseFeaturedPlaylists,\n meta: { show_progress: true, has_tabs: true }\n },\n {\n path: '/music/spotify/artists/:artist_id',\n name: 'Spotify Artist',\n component: SpotifyPageArtist,\n meta: { show_progress: true }\n },\n {\n path: '/music/spotify/albums/:album_id',\n name: 'Spotify Album',\n component: SpotifyPageAlbum,\n meta: { show_progress: true }\n },\n {\n path: '/music/spotify/playlists/:playlist_id',\n name: 'Spotify Playlist',\n component: SpotifyPagePlaylist,\n meta: { show_progress: true }\n },\n {\n path: '/search/spotify',\n name: 'Spotify Search',\n component: SpotifyPageSearch\n },\n {\n path: '/settings/webinterface',\n name: 'Settings Webinterface',\n component: SettingsPageWebinterface\n },\n {\n path: '/settings/artwork',\n name: 'Settings Artwork',\n component: SettingsPageArtwork\n },\n {\n path: '/settings/online-services',\n name: 'Settings Online Services',\n component: SettingsPageOnlineServices\n },\n {\n path: '/settings/remotes-outputs',\n name: 'Settings Remotes Outputs',\n component: SettingsPageRemotesOutputs\n }\n ],\n scrollBehavior (to, from, savedPosition) {\n // console.log(to.path + '_' + from.path + '__' + to.hash + ' savedPosition:' + savedPosition)\n if (savedPosition) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(savedPosition)\n }, 10)\n })\n } else if (to.path === from.path && to.hash) {\n return { selector: to.hash, offset: { x: 0, y: 120 } }\n } else if (to.hash) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve({ selector: to.hash, offset: { x: 0, y: 120 } })\n }, 10)\n })\n } else if (to.meta.has_index) {\n return new Promise((resolve, reject) => {\n setTimeout(() => {\n if (to.meta.has_tabs) {\n resolve({ selector: '#top', offset: { x: 0, y: 140 } })\n } else {\n resolve({ selector: '#top', offset: { x: 0, y: 100 } })\n }\n }, 10)\n })\n } else {\n return { x: 0, y: 0 }\n }\n }\n})\n\nrouter.beforeEach((to, from, next) => {\n if (store.state.show_burger_menu) {\n store.commit(types.SHOW_BURGER_MENU, false)\n next(false)\n return\n }\n if (store.state.show_player_menu) {\n store.commit(types.SHOW_PLAYER_MENU, false)\n next(false)\n return\n }\n next(true)\n})\n","import Vue from 'vue'\nimport moment from 'moment'\nimport momentDurationFormatSetup from 'moment-duration-format'\n\nmomentDurationFormatSetup(moment)\nVue.filter('duration', function (value, format) {\n if (format) {\n return moment.duration(value).format(format)\n }\n return moment.duration(value).format('hh:*mm:ss')\n})\n\nVue.filter('time', function (value, format) {\n if (format) {\n return moment(value).format(format)\n }\n return moment(value).format()\n})\n\nVue.filter('timeFromNow', function (value, withoutSuffix) {\n return moment(value).fromNow(withoutSuffix)\n})\n\nVue.filter('number', function (value) {\n return value.toLocaleString()\n})\n\nVue.filter('channels', function (value) {\n if (value === 1) {\n return 'mono'\n }\n if (value === 2) {\n return 'stereo'\n }\n if (!value) {\n return ''\n }\n return value + ' channels'\n})\n","import Vue from 'vue'\nimport VueProgressBar from 'vue-progressbar'\n\nVue.use(VueProgressBar, {\n color: 'hsl(204, 86%, 53%)',\n failedColor: 'red',\n height: '1px'\n})\n","// The Vue build version to load with the `import` command\n// (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from './App'\nimport { router } from './router'\nimport store from './store'\nimport './filter'\nimport './progress'\nimport vClickOutside from 'v-click-outside'\nimport VueTinyLazyloadImg from 'vue-tiny-lazyload-img'\nimport VueObserveVisibility from 'vue-observe-visibility'\nimport VueScrollTo from 'vue-scrollto'\nimport 'mdi/css/materialdesignicons.css'\nimport 'vue-range-slider/dist/vue-range-slider.css'\nimport './mystyles.scss'\n\nVue.config.productionTip = false\n\nVue.use(vClickOutside)\nVue.use(VueTinyLazyloadImg)\nVue.use(VueObserveVisibility)\nVue.use(VueScrollTo)\n\n/* eslint-disable no-new */\nnew Vue({\n el: '#app',\n router,\n store,\n components: { App },\n template: '<App/>'\n})\n","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Notifications.vue?vue&type=style&index=0&lang=css&\"","import { render, staticRenderFns } from \"./ContentWithHero.vue?vue&type=template&id=357bedaa&\"\nimport script from \"./ContentWithHero.vue?vue&type=script&lang=js&\"\nexport * from \"./ContentWithHero.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""} |