{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/ContentWithHero.vue?8bc9","webpack:///./src/templates/ContentWithHeading.vue?f38e","webpack:///./src/templates/ContentWithHero.vue?0763","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/App.vue?8696","webpack:///./src/components/NavbarTop.vue?4ff8","webpack:///./src/components/NavbarItemLink.vue?ce05","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/NavbarTop.vue","webpack:///./src/components/NavbarTop.vue?2942","webpack:///./src/components/NavbarTop.vue","webpack:///./src/components/NavbarBottom.vue?be4a","webpack:///./src/store/index.js","webpack:///./src/webapi/index.js","webpack:///./src/audio.js","webpack:///./src/components/NavbarItemOutput.vue?7850","webpack:///src/components/NavbarItemOutput.vue","webpack:///./src/components/NavbarItemOutput.vue?f284","webpack:///./src/components/NavbarItemOutput.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?b168","webpack:///src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?7730","webpack:///./src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonNext.vue?4357","webpack:///src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonNext.vue?fbd2","webpack:///./src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonPrevious.vue?4cad","webpack:///src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonPrevious.vue?7ab3","webpack:///./src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonShuffle.vue?afc8","webpack:///src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonShuffle.vue?f823","webpack:///./src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonConsume.vue?121c","webpack:///src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonConsume.vue?f19d","webpack:///./src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonRepeat.vue?f826","webpack:///src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonRepeat.vue?51a7","webpack:///./src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonSeekBack.vue?20ed","webpack:///src/components/PlayerButtonSeekBack.vue","webpack:///./src/components/PlayerButtonSeekBack.vue?de1a","webpack:///./src/components/PlayerButtonSeekBack.vue","webpack:///./src/components/PlayerButtonSeekForward.vue?b06e","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?d4a7","webpack:///src/components/Notifications.vue","webpack:///./src/components/Notifications.vue?7a53","webpack:///./src/components/Notifications.vue","webpack:///./src/components/ModalDialogRemotePairing.vue?8225","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?cd63","webpack:///./src/components/ListItemQueueItem.vue?8861","webpack:///src/components/ListItemQueueItem.vue","webpack:///./src/components/ListItemQueueItem.vue?ce06","webpack:///./src/components/ListItemQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?9a3c","webpack:///src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?f77a","webpack:///./src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?1b57","webpack:///src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?1d31","webpack:///./src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?3720","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?7ccd","webpack:///./src/components/CoverArtwork.vue?38ca","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?226b","webpack:///./src/pages/mixin.js","webpack:///./src/components/TabsMusic.vue?c251","webpack:///src/components/TabsMusic.vue","webpack:///./src/components/TabsMusic.vue?2d68","webpack:///./src/components/TabsMusic.vue","webpack:///./src/components/ListItemAlbum.vue?13e9","webpack:///src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemAlbum.vue?b729","webpack:///./src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemTrack.vue?5cdb","webpack:///src/components/ListItemTrack.vue","webpack:///./src/components/ListItemTrack.vue?c143","webpack:///./src/components/ListItemTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?fc20","webpack:///src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?b9e3","webpack:///./src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogAlbum.vue?1147","webpack:///src/components/ModalDialogAlbum.vue","webpack:///./src/components/ModalDialogAlbum.vue?f2cf","webpack:///./src/components/ModalDialogAlbum.vue","webpack:///src/pages/PageBrowse.vue","webpack:///./src/pages/PageBrowse.vue?ac81","webpack:///./src/pages/PageBrowse.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?5ad5","webpack:///src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?11a8","webpack:///./src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?3007","webpack:///src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?b76d","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageArtists.vue?e053","webpack:///./src/components/IndexButtonList.vue?0eca","webpack:///src/components/IndexButtonList.vue","webpack:///./src/components/IndexButtonList.vue?fb40","webpack:///./src/components/IndexButtonList.vue","webpack:///./src/components/ListItemArtist.vue?92f3","webpack:///src/components/ListItemArtist.vue","webpack:///./src/components/ListItemArtist.vue?e871","webpack:///./src/components/ListItemArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?b0c6","webpack:///src/components/ModalDialogArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?3f0b","webpack:///./src/components/ModalDialogArtist.vue","webpack:///src/pages/PageArtists.vue","webpack:///./src/pages/PageArtists.vue?06ce","webpack:///./src/pages/PageArtists.vue","webpack:///./src/pages/PageArtist.vue?7f21","webpack:///src/pages/PageArtist.vue","webpack:///./src/pages/PageArtist.vue?54da","webpack:///./src/pages/PageArtist.vue","webpack:///./src/pages/PageAlbums.vue?16c1","webpack:///src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbums.vue?dd41","webpack:///./src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbum.vue?956d","webpack:///src/pages/PageAlbum.vue","webpack:///./src/pages/PageAlbum.vue?07be","webpack:///./src/pages/PageAlbum.vue","webpack:///./src/pages/PageGenres.vue?84db","webpack:///./src/components/ListItemGenre.vue?d539","webpack:///src/components/ListItemGenre.vue","webpack:///./src/components/ListItemGenre.vue?50b2","webpack:///./src/components/ListItemGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?4d63","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?3473","webpack:///src/pages/PageGenre.vue","webpack:///./src/pages/PageGenre.vue?4090","webpack:///./src/pages/PageGenre.vue","webpack:///./src/pages/PageGenreTracks.vue?5f67","webpack:///src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageGenreTracks.vue?0317","webpack:///./src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?cc24","webpack:///src/pages/PageArtistTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?7e28","webpack:///./src/pages/PageArtistTracks.vue","webpack:///./src/pages/PagePodcasts.vue?c057","webpack:///./src/components/ModalDialogAddRss.vue?6aed","webpack:///src/components/ModalDialogAddRss.vue","webpack:///./src/components/ModalDialogAddRss.vue?3bb2","webpack:///./src/components/ModalDialogAddRss.vue","webpack:///./src/components/ModalDialog.vue?7af5","webpack:///src/components/ModalDialog.vue","webpack:///./src/components/ModalDialog.vue?9194","webpack:///./src/components/ModalDialog.vue","webpack:///src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcasts.vue?ec36","webpack:///./src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcast.vue?8a0e","webpack:///src/pages/PagePodcast.vue","webpack:///./src/pages/PagePodcast.vue?7353","webpack:///./src/pages/PagePodcast.vue","webpack:///./src/pages/PageAudiobooks.vue?feba","webpack:///src/pages/PageAudiobooks.vue","webpack:///./src/pages/PageAudiobooks.vue?e6b7","webpack:///./src/pages/PageAudiobooks.vue","webpack:///./src/pages/PageAudiobook.vue?c3f1","webpack:///src/pages/PageAudiobook.vue","webpack:///./src/pages/PageAudiobook.vue?599c","webpack:///./src/pages/PageAudiobook.vue","webpack:///./src/pages/PagePlaylists.vue?2c42","webpack:///./src/components/ListItemPlaylist.vue?f96a","webpack:///src/components/ListItemPlaylist.vue","webpack:///./src/components/ListItemPlaylist.vue?5b1a","webpack:///./src/components/ListItemPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?ea26","webpack:///src/components/ModalDialogPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?8ac7","webpack:///./src/components/ModalDialogPlaylist.vue","webpack:///src/pages/PagePlaylists.vue","webpack:///./src/pages/PagePlaylists.vue?5936","webpack:///./src/pages/PagePlaylists.vue","webpack:///./src/pages/PagePlaylist.vue?e870","webpack:///src/pages/PagePlaylist.vue","webpack:///./src/pages/PagePlaylist.vue?f646","webpack:///./src/pages/PagePlaylist.vue","webpack:///./src/pages/PageFiles.vue?25b0","webpack:///./src/components/ListItemDirectory.vue?feb5","webpack:///src/components/ListItemDirectory.vue","webpack:///./src/components/ListItemDirectory.vue?7c5d","webpack:///./src/components/ListItemDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?b063","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?d7cf","webpack:///src/pages/PageRadioStreams.vue","webpack:///./src/pages/PageRadioStreams.vue?16e0","webpack:///./src/pages/PageRadioStreams.vue","webpack:///./src/pages/PageSearch.vue?a290","webpack:///./src/components/TabsSearch.vue?ebbd","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?2890","webpack:///src/pages/PageAbout.vue","webpack:///./src/pages/PageAbout.vue?4563","webpack:///./src/pages/PageAbout.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?8188","webpack:///./src/components/SpotifyListItemAlbum.vue?2556","webpack:///src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemAlbum.vue?cf43","webpack:///./src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?cee0","webpack:///src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?308c","webpack:///./src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?7da5","webpack:///src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?7978","webpack:///./src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?db7b","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?26e8","webpack:///src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?d8c2","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?1148","webpack:///src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?a73a","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageArtist.vue?2d2a","webpack:///./src/components/SpotifyModalDialogArtist.vue?6c4f","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?8ec0","webpack:///./src/components/SpotifyListItemTrack.vue?c093","webpack:///src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyListItemTrack.vue?d9dc","webpack:///./src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?7c32","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?377a","webpack:///src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?4d63","webpack:///./src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPageSearch.vue?2da2","webpack:///./src/components/SpotifyListItemArtist.vue?ea50","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?d49d","webpack:///./src/components/TabsSettings.vue?6849","webpack:///src/components/TabsSettings.vue","webpack:///./src/components/TabsSettings.vue?e341","webpack:///./src/components/TabsSettings.vue","webpack:///./src/components/SettingsCheckbox.vue?3e36","webpack:///src/components/SettingsCheckbox.vue","webpack:///./src/components/SettingsCheckbox.vue?4dd0","webpack:///./src/components/SettingsCheckbox.vue","webpack:///./src/components/SettingsTextfield.vue?91f9","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?2943","webpack:///src/pages/SettingsPageArtwork.vue","webpack:///./src/pages/SettingsPageArtwork.vue?4d58","webpack:///./src/pages/SettingsPageArtwork.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?7fec","webpack:///src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?e878","webpack:///./src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageRemotesOutputs.vue?5b9a","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/templates/ContentWithHeading.vue","webpack:///./src/templates/ContentWithHeading.vue?9dc6","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","attrs","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","directives","rawName","expression","pairing_active","on","$event","show_burger_menu","show_player_menu","style","audiobooks","tracks","_e","class","show_settings_menu","on_click_outside_settings","_m","_v","is_active","full_path","stopPropagation","preventDefault","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","SHOW_ONLY_NEXT_ITEMS","SHOW_BURGER_MENU","SHOW_PLAYER_MENU","props","to","String","exact","Boolean","computed","$route","path","startsWith","$store","state","commit","methods","$router","resolved","href","component","components","player","config","library","audiobooks_count","podcasts_count","spotify","webapi_token_valid","watch","is_now_playing_page","_s","now_playing","title","artist","data_kind","album","toggle_mute_volume","volume","set_volume","_l","output","loading","playing","togglePlay","stream_volume","set_stream_volume","Vue","use","Vuex","Store","websocket_port","version","buildoptions","settings","categories","artists","albums","songs","db_playtime","updating","outputs","repeat","consume","shuffle","item_id","item_length_ms","item_progress_ms","queue","count","items","lastfm","pairing","spotify_new_releases","spotify_featured_playlists","notifications","next_id","list","recent_searches","hide_singles","show_only_next_items","getters","item","find","undefined","settings_webinterface","elem","settings_option_show_composer_now_playing","option","options","settings_option_show_composer_for_genre","mutations","types","settingCategory","category","settingOption","libraryStats","playerStatus","newReleases","featuredPlaylists","notification","topic","index","findIndex","indexOf","query","pop","hideSingles","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","categoryName","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_toggle","library_artists","library_artist","artistId","library_artist_albums","library_albums","media_kind","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","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","_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","webapi","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","seek_ms","NavbarItemLink","NavbarItemOutput","RangeSlider","PlayerButtonPlayPause","PlayerButtonNext","PlayerButtonPrevious","PlayerButtonShuffle","PlayerButtonConsume","PlayerButtonRepeat","PlayerButtonSeekForward","PlayerButtonSeekBack","old_volume","show_outputs_menu","show_desktop_outputs_menu","a","closeAudio","playChannel","channel","remove","$emit","kickoff_pairing","remote","pairing_req","ref","domProps","target","composing","$set","pin","show","$refs","pin_field","focus","template","token_timer_id","reconnect_attempts","created","$Progress","start","beforeEach","from","next","meta","show_progress","progress","parseMeta","afterEach","finish","document","library_name","open_ws","vm","protocol","location","wsUrl","hostname","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","active","update_is_clipped","querySelector","classList","add","slot","update_show_next_items","open_add_stream_dialog","edit_mode","queue_items","save_dialog","move_item","model","callback","$$v","current_position","open_dialog","show_details_modal","selected_item","show_url_modal","show_pls_save_modal","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","url_field","save","playlist_name","playlist_name_field","allow_modifying_stored_playlists","default_playlist_directory","nowPlaying","oldPosition","oldIndex","newIndex","artwork_url","dataURI","artwork_url_with_size","SVGRenderer","svg","width","height","textColor","fontFamily","fontSize","fontWeight","backgroundColor","caption","encodeURIComponent","font_family","font_size","font_weight","substring","hex","background_color","replace","parseInt","substr","g","b","luma","is_background_light","text_color","rendererParams","interval_id","setInterval","tick","catch","recently_added","open_album_dialog","show_album_details_modal","selected_album","open_browse","recently_played","track","play_track","open_track_dialog","show_track_details_modal","selected_track","LoadDataBeforeEnterMixin","dataObject","beforeRouteEnter","set","beforeRouteUpdate","name_sort","charAt","toUpperCase","listeners","click","slots","title_sort","play_count","mark_new","mark_played","open_artist","date_released","time_added","Math","floor","rating","track_count","artwork_visible","artwork_loaded","artwork_error","browseData","all","mixins","index_list","total","update_hide_singles","selected_artist","filtered_index","char","nav","scroll_to_top","specialChars","scrollTo","album_count","artistsData","Set","show_artist_details_modal","open_tracks","artistData","join","albumsData","albumData","genres","selected_genre","genresData","show_genre_details_modal","genre_albums","genreData","tracksData","new_episodes","mark_all_played","reload_new_episodes","open_add_podcast_dialog","open_remove_podcast_dialog","show_remove_podcast_modal","remove_podcast","rss_playlist_to_remove","reload_podcasts","delete_action","ok_action","forEach","ep","rssPlaylists","pl","reload_tracks","new_tracks","playlist","playlists","open_playlist","selected_playlist","folder","playlistsData","show_playlist_details_modal","playlistData","current_directory","open_directory_dialog","open_parent_directory","files","open_directory","open_playlist_dialog","show_directory_details_modal","selected_directory","filesData","directories","dir","parent","streamsData","new_search","search_query","recent_search","open_recent_search","open_search_tracks","open_artist_dialog","open_search_artists","open_search_albums","open_search_playlists","route","search_field","trim","blur","mounted","show_update_dropdown","update","update_meta","updated_at","started_at","filters","array","album_type","release_date","owner","display_name","images","getNewReleases","getFeaturedPlaylists","load_next","popularity","followers","append_albums","$state","getArtistAlbums","concat","loaded","complete","context_uri","duration_ms","getAlbum","album_id","append_tracks","getPlaylistTracks","search_tracks_next","search_artists_next","search_albums_next","search_playlists_next","search_param","reset","search_all","spotify_search","market","webapi_country","split","set_update_timer","statusUpdate","info","$slots","timerDelay","timerId","category_name","option_name","newValue","settings_checkbox","checked","update_setting","clear_status","placeholder","settings_text","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","scope","success","Array","isArray","_i","$$a","$$el","$$c","$$i","kickoff_verification","verification_req","VueRouter","router","routes","PageQueue","PageAbout","PageNowPlaying","redirect","PageBrowse","has_tabs","PageBrowseRecentlyAdded","PageBrowseRecentlyPlayed","PageArtists","has_index","PageArtist","PageArtistTracks","PageAlbums","PageAlbum","PageGenres","PageGenre","PageGenreTracks","PageRadioStreams","PagePodcasts","PagePodcast","PageAudiobooks","PageAudiobook","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","toLocaleString","VueProgressBar","color","failedColor","productionTip","vClickOutside","VueTinyLazyloadImg","el","App"],"mappings":"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","file":"player/js/app.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 }","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._t(\"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 = []\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.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-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\"},[_c('navbar-item-link',{attrs:{\"to\":\"/playlists\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-library-music\"})])]),_c('navbar-item-link',{attrs:{\"to\":\"/music\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-music\"})])]),_c('navbar-item-link',{attrs:{\"to\":\"/podcasts\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-microphone\"})])]),(_vm.audiobooks.tracks > 0)?_c('navbar-item-link',{attrs:{\"to\":\"/audiobooks\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-book-open-variant\"})])]):_vm._e(),_c('navbar-item-link',{attrs:{\"to\":\"/files\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-folder-open\"})])]),_c('navbar-item-link',{attrs:{\"to\":\"/search\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-magnify\"})])]),_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\")])]),_c('navbar-item-link',{attrs:{\"to\":\"/music/radio\"}},[_c('span',{staticClass:\"fd-navbar-item-level2\"},[_vm._v(\"Radio\")])]),(_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\":\"/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('navbar-item-link',{attrs:{\"to\":\"/about\"}},[_vm._v(\"About\")]),_c('div',{staticClass:\"navbar-item is-hidden-desktop\",staticStyle:{\"margin-bottom\":\"2.5rem\"}})],1)])])]),_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}}})])}\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 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","<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\">\n        <span class=\"icon\"><i class=\"mdi mdi-library-music\"></i></span>\n      </navbar-item-link>\n      <navbar-item-link to=\"/music\">\n        <span class=\"icon\"><i class=\"mdi mdi-music\"></i></span>\n      </navbar-item-link>\n      <navbar-item-link to=\"/podcasts\">\n        <span class=\"icon\"><i class=\"mdi mdi-microphone\"></i></span>\n      </navbar-item-link>\n      <navbar-item-link to=\"/audiobooks\" v-if=\"audiobooks.tracks > 0\">\n        <span class=\"icon\"><i class=\"mdi mdi-book-open-variant\"></i></span>\n      </navbar-item-link>\n      <navbar-item-link to=\"/files\">\n        <span class=\"icon\"><i class=\"mdi mdi-folder-open\"></i></span>\n      </navbar-item-link>\n      <navbar-item-link to=\"/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        <!-- Settings drop down -->\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/radio\"><span class=\"fd-navbar-item-level2\">Radio</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=\"/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            <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    <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 * as types from '@/store/mutation_types'\n\nexport default {\n  name: 'NavbarTop',\n  components: { NavbarItemLink },\n\n  data () {\n    return {\n      show_settings_menu: false\n    }\n  },\n\n  computed: {\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\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=a505df3e&\"\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 }","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    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\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.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 () {\n    return axios.get('/api/library/artists?media_kind=music')\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","/**\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=5c2b2dcf&\"\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 (_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\"}],attrs:{\"src\":_vm.dataURI,\"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      :src=\"dataURI\"\n      :data-src=\"artwork_url_with_size\"\n      :data-err=\"dataURI\"\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'],\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      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=6ebb53dc&\"\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\"},[_vm._l((_vm.recently_added.items),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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('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('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\"},[_vm._l((_vm.recently_played.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:\"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}}})],2),_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\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/radio\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-radio\"})]),_c('span',{},[_vm._v(\"Radio\")])])]),(_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/radio\" active-class=\"is-active\">\n                <a>\n                  <span class=\"icon is-small\"><i class=\"mdi mdi-radio\"></i></span>\n                  <span class=\"\">Radio</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=21591124&\"\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 (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.album.name_sort.charAt(0).toUpperCase()}},[_vm._t(\"artwork\"),_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))])])])]),_c('div',{staticClass:\"media-right\",staticStyle:{\"padding-top\":\"0.7rem\"}},[_vm._t(\"actions\")],2)],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n  <div class=\"media\" :id=\"'index_' + props.album.name_sort.charAt(0).toUpperCase()\">\n    <slot name=\"artwork\"></slot>\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      </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=4f3de3e3&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 (_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=6040054d&\"\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","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 === '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 && _vm.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.album.artist))])]):_vm._e(),(_vm.album.artist && _vm.media_kind === 'audiobook')?_c('p',[_c('span',{staticClass:\"heading\"},[_vm._v(\"Album artist\")]),_c('span',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.artist))])]):_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))])])])],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 === '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 && media_kind !== 'audiobook'\">\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.artist && media_kind === 'audiobook'\">\n                  <span class=\"heading\">Album artist</span>\n                  <span class=\"title is-6\">{{ album.artist }}</span>\n                </p>\n                <p>\n                  <span class=\"heading\">Tracks</span>\n                  <span class=\"title is-6\">{{ album.track_count }}</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\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 === 'podcast') {\n        this.$router.push({ path: '/podcasts/' + this.album.id })\n      } else if (this.media_kind === '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      this.$router.push({ path: '/music/artists/' + this.album.artist_id })\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=768ad68e&\"\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","<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-item-album v-for=\"album in recently_added.items\" :key=\"album.id\" :album=\"album\" @click=\"open_album(album)\">\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        </list-item-album>\n        <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            <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-item-track v-for=\"track in recently_played.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(track)\">\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\" />\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 ListItemAlbum from '@/components/ListItemAlbum'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\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, ListItemAlbum, ListItemTrack, ModalDialogTrack, ModalDialogAlbum },\n\n  data () {\n    return {\n      recently_added: {},\n      recently_played: {},\n\n      show_track_details_modal: false,\n      selected_track: {},\n\n      show_album_details_modal: false,\n      selected_album: {}\n    }\n  },\n\n  methods: {\n    open_browse: function (type) {\n      this.$router.push({ path: '/music/browse/' + type })\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: function (album) {\n      this.$router.push({ path: '/music/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    play_track: function (track) {\n      webapi.player_play_uri(track.uri, 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!./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=55310e32&\"\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\"},[_vm._l((_vm.recently_added.items),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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)}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_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\">Recently added</p>\n        <p class=\"heading\">albums</p>\n      </template>\n      <template slot=\"content\">\n        <list-item-album v-for=\"album in recently_added.items\" :key=\"album.id\" :album=\"album\" @click=\"open_album(album)\">\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        <modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @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 ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\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, ListItemAlbum, ModalDialogAlbum },\n\n  data () {\n    return {\n      recently_added: {},\n\n      show_details_modal: false,\n      selected_album: {}\n    }\n  },\n\n  methods: {\n    open_album: function (album) {\n      this.$router.push({ path: '/music/albums/' + album.id })\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!./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=c26e9fea&\"\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\"},[_vm._l((_vm.recently_played.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:\"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)],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-item-track v-for=\"track in recently_played.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(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      </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 ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\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, ListItemTrack, ModalDialogTrack },\n\n  data () {\n    return {\n      recently_played: {},\n\n      show_details_modal: false,\n      selected_track: {}\n    }\n  },\n\n  methods: {\n    open_dialog: function (track) {\n      this.selected_track = track\n      this.show_details_modal = true\n    },\n\n    play_track: function (track) {\n      webapi.player_play_uri(track.uri, 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!./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=3ae963fd&\"\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.index_list}})],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.total)+\" artists\")])]),_c('template',{slot:\"heading-right\"},[_c('a',{staticClass:\"button is-small\",class:{ 'is-info': _vm.hide_singles },on:{\"click\":_vm.update_hide_singles}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-numeric-1-box-multiple-outline\"})]),_c('span',[_vm._v(\"Hide singles\")])])]),_c('template',{slot:\"content\"},[_vm._l((_vm.artists_filtered),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)}),_c('modal-dialog-artist',{attrs:{\"show\":_vm.show_details_modal,\"artist\":_vm.selected_artist},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)],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',[(_vm.filtered_index.length > 1)?_c('nav',{staticClass:\"buttons is-centered fd-is-square\",staticStyle:{\"margin-bottom\":\"48px\"}},_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):_vm._e(),(_vm.filtered_index.length > 1)?_c('nav',{staticClass:\"buttons is-centered\",staticStyle:{\"margin-bottom\":\"6px\"}},[_c('a',{staticClass:\"button is-small is-white\",on:{\"click\":_vm.scroll_to_top}},[_vm._m(0)])]):_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-chevron-up\"})])}]\n\nexport { render, staticRenderFns }","<template>\n  <section>\n    <nav class=\"buttons is-centered fd-is-square\" style=\"margin-bottom: 48px;\" v-if=\"filtered_index.length > 1\">\n      <a v-for=\"char in filtered_index\" :key=\"char\" class=\"button is-small\" @click=\"nav(char)\">{{ char }}</a>\n    </nav>\n    <nav class=\"buttons is-centered\" style=\"margin-bottom: 6px;\" v-if=\"filtered_index.length > 1\">\n      <a 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    </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=8f6beb24&\"\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 (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.artist.name_sort.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.artist.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.artist.name_sort.charAt(0).toUpperCase()\">\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=90e1199c&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('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              </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=1f222406&\"\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","<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\">Artists</p>\n        <p class=\"heading\">{{ artists.total }} artists</p>\n      </template>\n      <template slot=\"heading-right\">\n        <a class=\"button is-small\" :class=\"{ 'is-info': hide_singles }\" @click=\"update_hide_singles\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-numeric-1-box-multiple-outline\"></i>\n          </span>\n          <span>Hide singles</span>\n        </a>\n      </template>\n      <template slot=\"content\">\n        <list-item-artist v-for=\"artist in artists_filtered\"\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        <modal-dialog-artist :show=\"show_details_modal\" :artist=\"selected_artist\" @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 ListItemArtist from '@/components/ListItemArtist'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nconst artistsData = {\n  load: function (to) {\n    return webapi.library_artists()\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, ListItemArtist, ModalDialogArtist },\n\n  data () {\n    return {\n      artists: { items: [] },\n\n      show_details_modal: false,\n      selected_artist: {}\n    }\n  },\n\n  computed: {\n    hide_singles () {\n      return this.$store.state.hide_singles\n    },\n\n    index_list () {\n      return [...new Set(this.artists.items\n        .filter(artist => !this.$store.state.hide_singles || artist.track_count > (artist.album_count * 2))\n        .map(artist => artist.name_sort.charAt(0).toUpperCase()))]\n    },\n\n    artists_filtered () {\n      return this.artists.items.filter(artist => !this.hide_singles || artist.track_count > (artist.album_count * 2))\n    }\n  },\n\n  methods: {\n    update_hide_singles: function (e) {\n      this.$store.commit(types.HIDE_SINGLES, !this.hide_singles)\n    },\n\n    open_artist: function (artist) {\n      this.$router.push({ path: '/music/artists/' + artist.id })\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!./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=c47c11f2&\"\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:\"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\")])]),_vm._l((_vm.albums.items),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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)}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_c('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 }","<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\">{{ artist.album_count }} albums | <a class=\"has-text-link\" @click=\"open_tracks\">{{ artist.track_count }} tracks</a></p>\n      <list-item-album v-for=\"album in albums.items\" :key=\"album.id\" :album=\"album\" @click=\"open_album(album)\">\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      <modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @close=\"show_details_modal = false\" />\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 ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\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: 'PageArtist',\n  mixins: [LoadDataBeforeEnterMixin(artistData)],\n  components: { ContentWithHeading, ListItemAlbum, ModalDialogAlbum, ModalDialogArtist },\n\n  data () {\n    return {\n      artist: {},\n      albums: {},\n\n      show_details_modal: false,\n      selected_album: {},\n\n      show_artist_details_modal: false\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    open_album: function (album) {\n      this.$router.push({ path: '/music/albums/' + album.id })\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!./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=3d3df328&\"\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.index_list}})],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.total)+\" albums\")])]),_c('template',{slot:\"heading-right\"},[_c('a',{staticClass:\"button is-small\",class:{ 'is-info': _vm.hide_singles },on:{\"click\":_vm.update_hide_singles}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-numeric-1-box-multiple-outline\"})]),_c('span',[_vm._v(\"Hide singles\")])])]),_c('template',{slot:\"content\"},[_vm._l((_vm.albums_filtered),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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)}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_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=\"options\">\n        <index-button-list :index=\"index_list\"></index-button-list>\n      </template>\n      <template slot=\"heading-left\">\n        <p class=\"title is-4\">Albums</p>\n        <p class=\"heading\">{{ albums.total }} albums</p>\n      </template>\n      <template slot=\"heading-right\">\n        <a class=\"button is-small\" :class=\"{ 'is-info': hide_singles }\" @click=\"update_hide_singles\">\n          <span class=\"icon\">\n            <i class=\"mdi mdi-numeric-1-box-multiple-outline\"></i>\n          </span>\n          <span>Hide singles</span>\n        </a>\n      </template>\n      <template slot=\"content\">\n        <list-item-album v-for=\"album in albums_filtered\"\n          :key=\"album.id\"\n          :album=\"album\"\n          @click=\"open_album(album)\">\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        <modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @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 ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\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, ListItemAlbum, ModalDialogAlbum },\n\n  data () {\n    return {\n      albums: { items: [] },\n      index_list: [],\n\n      show_details_modal: false,\n      selected_album: {}\n    }\n  },\n\n  computed: {\n    hide_singles () {\n      return this.$store.state.hide_singles\n    },\n\n    albums_filtered () {\n      return this.albums.items.filter(album => !this.hide_singles || album.track_count > 2)\n    }\n  },\n\n  methods: {\n    update_hide_singles: function (e) {\n      this.$store.commit(types.HIDE_SINGLES, !this.hide_singles)\n    },\n\n    open_album: function (album) {\n      this.$router.push({ path: '/music/albums/' + album.id })\n    },\n\n    open_dialog: function (album) {\n      this.selected_album = album\n      this.show_details_modal = true\n    }\n  },\n\n  watch: {\n    'hide_singles' () {\n      this.index_list = [...new Set(this.albums.items\n        .filter(album => !this.$store.state.hide_singles || album.track_count > 2)\n        .map(album => album.name_sort.charAt(0).toUpperCase()))]\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=4a49ea02&\"\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\")]),_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)}}},[_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}}}),_c('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 }","<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-item-track v-for=\"(track, index) in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\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      <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 ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\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, ListItemTrack, ModalDialogTrack, ModalDialogAlbum, CoverArtwork },\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  },\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    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!./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=00a258a2&\"\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\")])]),_vm._l((_vm.genre_albums.items),function(album){return _c('list-item-albums',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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)}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album},on:{\"close\":function($event){_vm.show_details_modal = false}}}),_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}}})],2)],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-item-albums v-for=\"album in genre_albums.items\" :key=\"album.id\" :album=\"album\" @click=\"open_album(album)\">\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-albums>\n        <modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" @close=\"show_details_modal = false\" />\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 ListItemAlbums from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\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, ListItemAlbums, ModalDialogAlbum, ModalDialogGenre },\n\n  data () {\n    return {\n      name: '',\n      genre_albums: { items: [] },\n\n      show_details_modal: false,\n      selected_album: {},\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_album: function (album) {\n      this.$router.push({ path: '/music/albums/' + album.id })\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=6f27a5df&\"\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\")]),_vm._l((_vm.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:\"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}}}),_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}}})],2)],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-item-track v-for=\"(track, index) in tracks.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\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        <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 ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\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, ListItemTrack, IndexButtonList, ModalDialogTrack, ModalDialogGenre },\n\n  data () {\n    return {\n      tracks: { items: [] },\n      genre: '',\n\n      show_details_modal: false,\n      selected_track: {},\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\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('genre is \"' + this.genre + '\" and media_kind is music', true)\n    },\n\n    play_track: function (position) {\n      webapi.player_play_expression('genre is \"' + this.genre + '\" and media_kind is music', 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!./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=439ea4f1&\"\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\")]),_vm._l((_vm.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:\"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}}}),_c('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)],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-item-track v-for=\"(track, index) in tracks.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\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        <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 ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\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, ListItemTrack, IndexButtonList, ModalDialogTrack, ModalDialogArtist },\n\n  data () {\n    return {\n      artist: {},\n      tracks: { items: [] },\n\n      show_details_modal: false,\n      selected_track: {},\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\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    play_track: function (position) {\n      webapi.player_play_uri(this.tracks.items.map(a => a.uri).join(','), 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!./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=4c4e953e&\"\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\"},[_vm._l((_vm.albums.items),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album,\"media_kind\":'podcast'},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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('modal-dialog-album',{attrs:{\"show\":_vm.show_album_details_modal,\"album\":_vm.selected_album,\"media_kind\":'podcast'},on:{\"close\":function($event){_vm.show_album_details_modal = false},\"play_count_changed\":_vm.reload_new_episodes,\"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),_c('modal-dialog-add-rss',{attrs:{\"show\":_vm.show_url_modal},on:{\"close\":function($event){_vm.show_url_modal = false},\"podcast_added\":_vm.reload_podcasts}})],2)],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=1b725acb&\"\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","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(\"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\">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']\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=4f18403e&\"\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","<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-item-album v-for=\"album in albums.items\" :key=\"album.id\" :album=\"album\" :media_kind=\"'podcast'\" @click=\"open_album(album)\">\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        </list-item-album>\n        <modal-dialog-album\n          :show=\"show_album_details_modal\"\n          :album=\"selected_album\"\n          :media_kind=\"'podcast'\"\n          @close=\"show_album_details_modal = false\"\n          @play_count_changed=\"reload_new_episodes\"\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        <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 ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialogAddRss from '@/components/ModalDialogAddRss'\nimport ModalDialog from '@/components/ModalDialog'\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, ListItemAlbum, ModalDialogTrack, ModalDialogAlbum, ModalDialogAddRss, ModalDialog, RangeSlider },\n\n  data () {\n    return {\n      albums: {},\n      new_episodes: { items: [] },\n\n      show_album_details_modal: false,\n      selected_album: {},\n\n      show_url_modal: false,\n\n      show_track_details_modal: false,\n      selected_track: {},\n\n      show_remove_podcast_modal: false,\n      rss_playlist_to_remove: {}\n    }\n  },\n\n  methods: {\n    open_album: function (album) {\n      this.$router.push({ path: '/podcasts/' + album.id })\n    },\n\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    open_album_dialog: function (album) {\n      this.selected_album = album\n      this.show_album_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    open_remove_podcast_dialog: function () {\n      this.show_album_details_modal = false\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        })\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.reload_podcasts()\n      })\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=c53c9e2a&\"\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=983fcca2&\"\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('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('p',{staticClass:\"title is-4\"},[_vm._v(\"Audiobooks\")]),_c('p',{staticClass:\"heading\"},[_vm._v(_vm._s(_vm.albums.total)+\" audiobooks\")])]),_c('template',{slot:\"content\"},[_vm._l((_vm.albums.items),function(album){return _c('list-item-album',{key:album.id,attrs:{\"album\":album,\"media_kind\":'audiobook'},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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)}),_c('modal-dialog-album',{attrs:{\"show\":_vm.show_details_modal,\"album\":_vm.selected_album,\"media_kind\":'audiobook'},on:{\"close\":function($event){_vm.show_details_modal = false}}})],2)],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\">Audiobooks</p>\n        <p class=\"heading\">{{ albums.total }} audiobooks</p>\n      </template>\n      <template slot=\"content\">\n        <list-item-album v-for=\"album in albums.items\" :key=\"album.id\" :album=\"album\" :media_kind=\"'audiobook'\" @click=\"open_album(album)\">\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        <modal-dialog-album :show=\"show_details_modal\" :album=\"selected_album\" :media_kind=\"'audiobook'\" @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 ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport webapi from '@/webapi'\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: 'PageAudiobooks',\n  mixins: [LoadDataBeforeEnterMixin(albumsData)],\n  components: { ContentWithHeading, ListItemAlbum, ModalDialogAlbum },\n\n  data () {\n    return {\n      albums: {},\n\n      show_details_modal: false,\n      selected_album: {}\n    }\n  },\n\n  methods: {\n    open_album: function (album) {\n      this.$router.push({ path: '/audiobooks/' + album.id })\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!./PageAudiobooks.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!./PageAudiobooks.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobooks.vue?vue&type=template&id=2f04dc7f&\"\nimport script from \"./PageAudiobooks.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobooks.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('div',{staticClass:\"title is-4 has-text-grey has-text-weight-normal\"},[_vm._v(_vm._s(_vm.album.artist))])]),_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,index){return _c('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(index)}}},[_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}}}),_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}}})],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 }}</div>\n      <div class=\"title is-4 has-text-grey has-text-weight-normal\">{{ album.artist }}</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, index) in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\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      <modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" :media_kind=\"'audiobook'\" @close=\"show_album_details_modal = false\" />\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 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: 'PageAudiobook',\n  mixins: [LoadDataBeforeEnterMixin(albumData)],\n  components: { ContentWithHeading, ListItemTrack, ModalDialogTrack, ModalDialogAlbum },\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  },\n\n  methods: {\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!./PageAudiobook.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!./PageAudiobook.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PageAudiobook.vue?vue&type=template&id=7ca9ecd4&\"\nimport script from \"./PageAudiobook.vue?vue&type=script&lang=js&\"\nexport * from \"./PageAudiobook.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\"},[_vm._l((_vm.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\",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)],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'],\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.$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=7f9ac78a&\"\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  <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-item-playlist v-for=\"playlist in playlists.items\" :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    </template>\n  </content-with-heading>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\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, ListItemPlaylist, ModalDialogPlaylist },\n\n  data () {\n    return {\n      playlist: {},\n      playlists: {},\n\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!./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=18ce8b94&\"\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\")]),_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)}}},[_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}}}),_c('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\">{{ tracks.length }} tracks</p>\n      <list-item-track v-for=\"(track, index) in tracks\" :key=\"track.id\" :track=\"track\" @click=\"play_track(index)\">\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      <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 ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\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, ListItemTrack, ModalDialogTrack, ModalDialogPlaylist },\n\n  data () {\n    return {\n      playlist: {},\n      tracks: [],\n\n      show_details_modal: false,\n      selected_track: {},\n\n      show_playlist_details_modal: false\n    }\n  },\n\n  methods: {\n    play: function () {\n      webapi.player_play_uri(this.playlist.uri, true)\n    },\n\n    play_track: function (position) {\n      webapi.player_play_uri(this.playlist.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!./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=05a6879a&\"\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('tabs-music'),_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\")]),_vm._l((_vm.tracks.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:\"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)],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\">Radio</p>\n      </template>\n      <template slot=\"content\">\n        <p class=\"heading has-text-centered-mobile\">{{ tracks.total }} tracks</p>\n        <list-item-track v-for=\"track in tracks.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(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      </template>\n    </content-with-heading>\n  </div>\n</template>\n\n<script>\nimport { LoadDataBeforeEnterMixin } from './mixin'\nimport TabsMusic from '@/components/TabsMusic'\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\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: { TabsMusic, ContentWithHeading, ListItemTrack, ModalDialogTrack },\n\n  data () {\n    return {\n      tracks: { items: [] },\n\n      show_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_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!./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=35fd1cce&\"\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'),(_vm.show_tracks)?_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('list-item-track',{key:track.id,attrs:{\"track\":track},on:{\"click\":function($event){return _vm.play_track(track)}}},[_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}}})],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)+\" tracks\")])])]):_vm._e(),(!_vm.tracks.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],2):_vm._e(),(_vm.show_artists)?_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('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_artist_dialog(artist)}}},[_c('span',{staticClass:\"icon has-text-dark\"},[_c('i',{staticClass:\"mdi mdi-dots-vertical mdi-18px\"})])])])],2)}),_c('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)+\" artists\")])])]):_vm._e(),(!_vm.artists.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],2):_vm._e(),(_vm.show_albums)?_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('list-item-album',{key:album.id,attrs:{\"album\":album},on:{\"click\":function($event){return _vm.open_album(album)}}},[_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('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)+\" albums\")])])]):_vm._e(),(!_vm.albums.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],2):_vm._e(),(_vm.show_playlists)?_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('list-item-playlist',{key:playlist.id,attrs:{\"playlist\":playlist},on:{\"click\":function($event){return _vm.open_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('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)+\" playlists\")])])]):_vm._e(),(!_vm.playlists.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],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 (_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('router-link',{attrs:{\"tag\":\"li\",\"to\":{ path: '/search/library', query: _vm.$route.query },\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-library-books\"})]),_c('span',{},[_vm._v(\"Library\")])])]),_c('router-link',{attrs:{\"tag\":\"li\",\"to\":{ path: '/search/spotify', query: _vm.$route.query },\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-spotify\"})]),_c('span',{},[_vm._v(\"Spotify\")])])])],1)])])])])]):_vm._e()}\nvar staticRenderFns = []\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              <router-link tag=\"li\" :to=\"{ path: '/search/library', query: $route.query }\" active-class=\"is-active\">\n                <a>\n                  <span class=\"icon is-small\"><i class=\"mdi mdi-library-books\"></i></span>\n                  <span class=\"\">Library</span>\n                </a>\n              </router-link>\n              <router-link tag=\"li\" :to=\"{ path: '/search/spotify', query: $route.query }\" 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: 'TabsSearch',\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!./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=b56295a0&\"\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></tabs-search>\n\n    <!-- Tracks -->\n    <content-with-heading v-if=\"show_tracks\">\n      <template slot=\"heading-left\">\n        <p class=\"title is-4\">Tracks</p>\n      </template>\n      <template slot=\"content\">\n        <list-item-track v-for=\"track in tracks.items\" :key=\"track.id\" :track=\"track\" @click=\"play_track(track)\">\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\" />\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 }} tracks</a>\n          </p>\n        </nav>\n        <p v-if=\"!tracks.total\">No results</p>\n      </template>\n    </content-with-heading>\n\n    <!-- Artists -->\n    <content-with-heading v-if=\"show_artists\">\n      <template slot=\"heading-left\">\n        <p class=\"title is-4\">Artists</p>\n      </template>\n      <template slot=\"content\">\n        <list-item-artist v-for=\"artist in artists.items\" :key=\"artist.id\" :artist=\"artist\" @click=\"open_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        </list-item-artist>\n        <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 }} artists</a>\n          </p>\n        </nav>\n        <p v-if=\"!artists.total\">No results</p>\n      </template>\n    </content-with-heading>\n\n    <!-- Albums -->\n    <content-with-heading v-if=\"show_albums\">\n      <template slot=\"heading-left\">\n        <p class=\"title is-4\">Albums</p>\n      </template>\n      <template slot=\"content\">\n        <list-item-album v-for=\"album in albums.items\" :key=\"album.id\" :album=\"album\" @click=\"open_album(album)\">\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        </list-item-album>\n        <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 }} albums</a>\n          </p>\n        </nav>\n        <p v-if=\"!albums.total\">No results</p>\n      </template>\n    </content-with-heading>\n\n    <!-- Playlists -->\n    <content-with-heading v-if=\"show_playlists\">\n      <template slot=\"heading-left\">\n        <p class=\"title is-4\">Playlists</p>\n      </template>\n      <template slot=\"content\">\n        <list-item-playlist v-for=\"playlist in playlists.items\" :key=\"playlist.id\" :playlist=\"playlist\" @click=\"open_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        </list-item-playlist>\n        <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 }} playlists</a>\n          </p>\n        </nav>\n        <p v-if=\"!playlists.total\">No results</p>\n      </template>\n    </content-with-heading>\n  </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport TabsSearch from '@/components/TabsSearch'\nimport ListItemTrack from '@/components/ListItemTrack'\nimport ListItemArtist from '@/components/ListItemArtist'\nimport ListItemAlbum from '@/components/ListItemAlbum'\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport ModalDialogArtist from '@/components/ModalDialogArtist'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n  name: 'PageSearch',\n  components: { ContentWithHeading, TabsSearch, ListItemTrack, ListItemArtist, ListItemAlbum, ListItemPlaylist, ModalDialogTrack, ModalDialogAlbum, ModalDialogArtist, ModalDialogPlaylist },\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\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  },\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\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      var searchParams = {\n        type: route.query.type,\n        media_kind: 'music'\n      }\n\n      if (route.query.query.startsWith('query:')) {\n        searchParams.expression = route.query.query.replace(/^query:/, '').trim()\n      } else {\n        searchParams.query = route.query.query\n      }\n\n      if (route.query.limit) {\n        searchParams.limit = route.query.limit\n        searchParams.offset = route.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        this.$store.commit(types.ADD_RECENT_SEARCH, route.query.query)\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',\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    play_track: function (track) {\n      webapi.player_play_uri(track.uri, false)\n    },\n\n    open_artist: function (artist) {\n      this.$router.push({ path: '/music/artists/' + artist.id })\n    },\n\n    open_album: function (album) {\n      this.$router.push({ path: '/music/albums/' + album.id })\n    },\n\n    open_playlist: function (playlist) {\n      this.$router.push({ path: '/playlists/' + playlist.id + '/tracks' })\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\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=68bf06fe&\"\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',{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 }\">\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    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=bf835a62&\"\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}},[_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 () {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_album}},[_c('h1',{staticClass:\"title is-6\"},[_vm._v(_vm._s(_vm.album.name))]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey\"},[_c('b',[_vm._v(_vm._s(_vm.album.artists[0].name))])]),_c('h2',{staticClass:\"subtitle is-7 has-text-grey has-text-weight-normal\"},[_vm._v(\"(\"+_vm._s(_vm.album.album_type)+\", \"+_vm._s(_vm._f(\"time\")(_vm.album.release_date,'L'))+\")\")])]),_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_album\">\n      <h1 class=\"title is-6\">{{ album.name }}</h1>\n      <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ album.artists[0].name }}</b></h2>\n      <h2 class=\"subtitle is-7 has-text-grey has-text-weight-normal\">({{ album.album_type }}, {{ 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\n  props: ['album'],\n\n  methods: {\n    open_album: function () {\n      this.$router.push({ path: '/music/spotify/albums/' + this.album.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!./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=07b843f4&\"\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  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:\"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\" :key=\"album.id\" :album=\"album\">\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 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 },\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\n  methods: {\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}\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=0bc5fdf4&\"\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}},[_c('template',{slot:\"actions\"},[_c('a',{on:{\"click\":function($event){return _vm.open_album(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\" :key=\"album.id\" :album=\"album\">\n          <template slot=\"actions\">\n            <a @click=\"open_album(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 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 },\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\n  methods: {\n    open_album: function (album) {\n      this.selected_album = album\n      this.show_album_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!./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=e8543ee6&\"\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}},[_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\" :key=\"album.id\" :album=\"album\">\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 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 },\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  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_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!./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=a4bc8476&\"\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'),(_vm.show_tracks)?_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)+\" tracks\")])])]):_vm._e(),(!_vm.tracks.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],2):_vm._e(),(_vm.show_artists)?_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)+\" artists\")])])]):_vm._e(),(!_vm.artists.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],2):_vm._e(),(_vm.show_albums)?_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}},[_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)+\" albums\")])])]):_vm._e(),(!_vm.albums.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],2):_vm._e(),(_vm.show_playlists)?_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)+\" playlists\")])])]):_vm._e(),(!_vm.playlists.total)?_c('p',[_vm._v(\"No results\")]):_vm._e()])],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></tabs-search>\n\n    <!-- Tracks -->\n    <content-with-heading v-if=\"show_tracks\">\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 }} tracks</a>\n          </p>\n        </nav>\n        <p v-if=\"!tracks.total\">No results</p>\n      </template>\n    </content-with-heading>\n\n    <!-- Artists -->\n    <content-with-heading v-if=\"show_artists\">\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 }} artists</a>\n          </p>\n        </nav>\n        <p v-if=\"!artists.total\">No results</p>\n      </template>\n    </content-with-heading>\n\n    <!-- Albums -->\n    <content-with-heading v-if=\"show_albums\">\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\" :key=\"album.id\" :album=\"album\">\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 }} albums</a>\n          </p>\n        </nav>\n        <p v-if=\"!albums.total\">No results</p>\n      </template>\n    </content-with-heading>\n\n    <!-- Playlists -->\n    <content-with-heading v-if=\"show_playlists\">\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 }} playlists</a>\n          </p>\n        </nav>\n        <p v-if=\"!playlists.total\">No results</p>\n      </template>\n    </content-with-heading>\n  </div>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\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 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, TabsSearch, SpotifyListItemTrack, SpotifyListItemArtist, SpotifyListItemAlbum, SpotifyListItemPlaylist, SpotifyModalDialogTrack, SpotifyModalDialogArtist, SpotifyModalDialogAlbum, SpotifyModalDialogPlaylist, InfiniteLoading },\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  },\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\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_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      if (this.query.type.includes(',')) {\n        this.search_all()\n      }\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        return spotifyApi.search(this.query.query, this.query.type.split(','), 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',\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\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=159019f2&\"\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(\"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 &amp; 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\">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 &quot;now playing page&quot;</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 &quot;now playing page&quot;.\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 &quot;Contemporary Classical&quot;.<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=96616ad4&\"\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 PageAudiobooks from '@/pages/PageAudiobooks'\nimport PageAudiobook from '@/pages/PageAudiobook'\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 }\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: '/music/radio',\n      name: 'Radio',\n      component: PageRadioStreams,\n      meta: { show_progress: true, has_tabs: 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      name: 'Audiobooks',\n      component: PageAudiobooks,\n      meta: { show_progress: true }\n    },\n    {\n      path: '/audiobooks/:album_id',\n      name: 'Audiobook',\n      component: PageAudiobook,\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: 90 } }\n    } else if (to.hash) {\n      return new Promise((resolve, reject) => {\n        setTimeout(() => {\n          resolve({ selector: to.hash, offset: { x: 0, y: 90 } })\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 'mdi/css/materialdesignicons.css'\nimport 'vue-range-slider/dist/vue-range-slider.css'\nimport './mystyles.scss'\nVue.config.productionTip = false\n\nVue.use(vClickOutside)\nVue.use(VueTinyLazyloadImg)\n\n/* eslint-disable no-new */\nnew Vue({\n  el: '#app',\n  router,\n  store,\n  components: { App },\n  template: '<App/>'\n})\n","import { render, staticRenderFns } from \"./ContentWithHeading.vue?vue&type=template&id=74d9008c&\"\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","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 mod 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&\"; export default mod; 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":""}