owntone-server/htdocs/player/js/app.js.map

1 line
669 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/ContentWithHeading.vue?d5f9","webpack:///./src/templates/ContentWithHeading.vue?c731","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/App.vue?c33e","webpack:///./src/components/NavbarTop.vue?228b","webpack:///./src/store/mutation_types.js","webpack:///./src/store/index.js","webpack:///./src/webapi/index.js","webpack:///./src/audio.js","webpack:///./src/components/NavbarItemLink.vue?9073","webpack:///src/components/NavbarItemLink.vue","webpack:///./src/components/NavbarItemLink.vue?7266","webpack:///./src/components/NavbarItemLink.vue","webpack:///./src/components/NavbarItemOutput.vue?b6dc","webpack:///src/components/NavbarItemOutput.vue","webpack:///./src/components/NavbarItemOutput.vue?f284","webpack:///./src/components/NavbarItemOutput.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?ae16","webpack:///src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?7730","webpack:///./src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonNext.vue?2429","webpack:///src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonNext.vue?fbd2","webpack:///./src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonPrevious.vue?f94f","webpack:///src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonPrevious.vue?7ab3","webpack:///./src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonShuffle.vue?a2ab","webpack:///src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonShuffle.vue?f823","webpack:///./src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonConsume.vue?5fbe","webpack:///src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonConsume.vue?f19d","webpack:///./src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonRepeat.vue?e800","webpack:///src/components/PlayerButtonRepeat.vue","webpack:///./src/components/PlayerButtonRepeat.vue?51a7","webpack:///./src/components/PlayerButtonRepeat.vue","webpack:///src/components/NavbarTop.vue","webpack:///./src/components/NavbarTop.vue?2942","webpack:///./src/components/NavbarTop.vue","webpack:///./src/components/NavbarBottom.vue?0380","webpack:///src/components/NavbarBottom.vue","webpack:///./src/components/NavbarBottom.vue?5719","webpack:///./src/components/NavbarBottom.vue","webpack:///./src/components/Notifications.vue?16d9","webpack:///src/components/Notifications.vue","webpack:///./src/components/Notifications.vue?7a53","webpack:///./src/components/Notifications.vue","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/pages/PageQueue.vue?dae9","webpack:///./src/components/ListItemQueueItem.vue?21f7","webpack:///src/components/ListItemQueueItem.vue","webpack:///./src/components/ListItemQueueItem.vue?ce06","webpack:///./src/components/ListItemQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?7839","webpack:///src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?f77a","webpack:///./src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?a723","webpack:///src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?1d31","webpack:///./src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?26a1","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?9682","webpack:///src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageNowPlaying.vue?5a32","webpack:///./src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageBrowse.vue?aec1","webpack:///./src/pages/mixin.js","webpack:///./src/components/TabsMusic.vue?b534","webpack:///src/components/TabsMusic.vue","webpack:///./src/components/TabsMusic.vue?2d68","webpack:///./src/components/TabsMusic.vue","webpack:///./src/components/ListItemAlbum.vue?422c","webpack:///src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemAlbum.vue?b729","webpack:///./src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemTrack.vue?8ee7","webpack:///src/components/ListItemTrack.vue","webpack:///./src/components/ListItemTrack.vue?c143","webpack:///./src/components/ListItemTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?2afa","webpack:///src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?b9e3","webpack:///./src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogAlbum.vue?003a","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?9935","webpack:///src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?11a8","webpack:///./src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?b9e9","webpack:///src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?b76d","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageArtists.vue?31a5","webpack:///./src/components/IndexButtonList.vue?c877","webpack:///src/components/IndexButtonList.vue","webpack:///./src/components/IndexButtonList.vue?fb40","webpack:///./src/components/IndexButtonList.vue","webpack:///./src/components/ListItemArtist.vue?1f61","webpack:///src/components/ListItemArtist.vue","webpack:///./src/components/ListItemArtist.vue?e871","webpack:///./src/components/ListItemArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?524b","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?ac15","webpack:///src/pages/PageArtist.vue","webpack:///./src/pages/PageArtist.vue?54da","webpack:///./src/pages/PageArtist.vue","webpack:///./src/pages/PageAlbums.vue?710c","webpack:///src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbums.vue?dd41","webpack:///./src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbum.vue?73d1","webpack:///src/pages/PageAlbum.vue","webpack:///./src/pages/PageAlbum.vue?07be","webpack:///./src/pages/PageAlbum.vue","webpack:///./src/pages/PageGenres.vue?47ca","webpack:///./src/components/ListItemGenre.vue?aa13","webpack:///src/components/ListItemGenre.vue","webpack:///./src/components/ListItemGenre.vue?50b2","webpack:///./src/components/ListItemGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?eda1","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?321c","webpack:///src/pages/PageGenre.vue","webpack:///./src/pages/PageGenre.vue?4090","webpack:///./src/pages/PageGenre.vue","webpack:///./src/pages/PageGenreTracks.vue?8153","webpack:///src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageGenreTracks.vue?0317","webpack:///./src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?7f1f","webpack:///src/pages/PageArtistTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?7e28","webpack:///./src/pages/PageArtistTracks.vue","webpack:///./src/pages/PagePodcasts.vue?056c","webpack:///src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcasts.vue?ec36","webpack:///./src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcast.vue?54e6","webpack:///src/pages/PagePodcast.vue","webpack:///./src/pages/PagePodcast.vue?7353","webpack:///./src/pages/PagePodcast.vue","webpack:///./src/pages/PageAudiobooks.vue?1e4f","webpack:///src/pages/PageAudiobooks.vue","webpack:///./src/pages/PageAudiobooks.vue?e6b7","webpack:///./src/pages/PageAudiobooks.vue","webpack:///./src/pages/PageAudiobook.vue?c6de","webpack:///src/pages/PageAudiobook.vue","webpack:///./src/pages/PageAudiobook.vue?599c","webpack:///./src/pages/PageAudiobook.vue","webpack:///./src/pages/PagePlaylists.vue?e39c","webpack:///./src/components/ListItemPlaylist.vue?f037","webpack:///src/components/ListItemPlaylist.vue","webpack:///./src/components/ListItemPlaylist.vue?5b1a","webpack:///./src/components/ListItemPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?f1b7","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?304a","webpack:///src/pages/PagePlaylist.vue","webpack:///./src/pages/PagePlaylist.vue?f646","webpack:///./src/pages/PagePlaylist.vue","webpack:///./src/pages/PageFiles.vue?c9ef","webpack:///./src/components/ListItemDirectory.vue?359a","webpack:///src/components/ListItemDirectory.vue","webpack:///./src/components/ListItemDirectory.vue?7c5d","webpack:///./src/components/ListItemDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?9a90","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/PageSearch.vue?a8e4","webpack:///./src/components/TabsSearch.vue?92d5","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?1bcd","webpack:///src/pages/PageAbout.vue","webpack:///./src/pages/PageAbout.vue?4563","webpack:///./src/pages/PageAbout.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?aef5","webpack:///./src/components/SpotifyListItemAlbum.vue?ae27","webpack:///src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemAlbum.vue?cf43","webpack:///./src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?d3e0","webpack:///src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?308c","webpack:///./src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?1015","webpack:///src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?7978","webpack:///./src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?4042","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?0ee3","webpack:///src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?d8c2","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?9368","webpack:///src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?a73a","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageArtist.vue?1ee6","webpack:///./src/components/SpotifyModalDialogArtist.vue?675b","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?4745","webpack:///./src/components/SpotifyListItemTrack.vue?d4c4","webpack:///src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyListItemTrack.vue?d9dc","webpack:///./src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?f22e","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?3dc8","webpack:///src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?4d63","webpack:///./src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPageSearch.vue?2bc6","webpack:///./src/components/SpotifyListItemArtist.vue?c67c","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?6595","webpack:///./src/components/TabsSettings.vue?0592","webpack:///src/components/TabsSettings.vue","webpack:///./src/components/TabsSettings.vue?e341","webpack:///./src/components/TabsSettings.vue","webpack:///src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageWebinterface.vue?b41a","webpack:///./src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?ccad","webpack:///src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageOnlineServices.vue?e878","webpack:///./src/pages/SettingsPageOnlineServices.vue","webpack:///./src/pages/SettingsPageRemotesOutputs.vue?060e","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?e155"],"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","_t","attrs","staticStyle","staticRenderFns","map","webpackContext","req","id","webpackContextResolve","e","Error","code","keys","resolve","directives","rawName","expression","show_burger_menu","podcasts","tracks","_e","audiobooks","class","on","update_show_burger_menu","show_outputs_menu","show_settings_menu","$event","_m","toggle_mute_volume","player","volume","_v","set_volume","_l","output","loading","playing","togglePlay","stream_volume","set_stream_volume","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","Vue","use","Vuex","Store","state","config","settings","library","audiobooks_count","podcasts_count","outputs","queue","lastfm","spotify","pairing","spotify_new_releases","spotify_featured_playlists","notifications","recent_searches","hide_singles","show_only_next_items","getters","now_playing","item","items","find","item_id","undefined","settings_webinterface","categories","elem","settings_option_show_composer_now_playing","option","options","settings_option_show_composer_for_genre","mutations","types","settingCategory","category","settingOption","libraryStats","count","playerStatus","newReleases","featuredPlaylists","notification","topic","index","list","findIndex","indexOf","query","pop","hideSingles","showOnlyNextItems","showBurgerMenu","actions","add_notification","commit","newNotification","next_id","type","text","timeout","setTimeout","axios","interceptors","response","error","store","dispatch","request","status","statusText","responseURL","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","shuffle","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","consume","player_repeat","newRepeatMode","player_volume","player_output_volume","outputId","outputVolume","player_seek","output_update","output_toggle","library_artists","library_artist","artistId","library_albums","library_album","albumId","library_album_tracks","library_genres","library_genre","genre","genreParams","library_genre_tracks","library_artist_tracks","artist","artistParams","library_podcasts","library_podcasts_new_episodes","episodesParams","library_podcast_episodes","library_audiobooks","library_playlists","library_playlist","playlistId","library_playlist_tracks","library_track","trackId","library_track_update","attributes","library_files","directory","filesParams","search","searchParams","spotify_login","credentials","lastfm_login","lastfm_logout","pairing_kickoff","pairingReq","verification_kickoff","verificationReq","artwork_url_append_size_params","artworkUrl","maxwidth","maxheight","startsWith","includes","_audio","Audio","_context","_source","_gain","setupAudio","AudioContext","webkitAudioContext","createMediaElementSource","createGain","connect","destination","addEventListener","play","setVolume","parseFloat","gain","playSource","source","stopAudio","resume","src","String","Date","now","crossOrigin","load","pause","stop","close","is_active","full_path","preventDefault","open_link","props","computed","$route","path","to","methods","$store","$router","resolved","href","component","selected","set_enabled","type_class","_s","components","play_next","webapi","newVolume","values","disabled","toggle_play_pause","icon_style","is_playing","is_pause_allowed","Boolean","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","repeat","old_volume","on_click_outside_outputs","on_click_outside_settings","a","closeAudio","playChannel","watch","mounted","destroyed","title","data_kind","album","remove","template","token_timer_id","reconnect_attempts","created","$Progress","start","beforeEach","meta","show_progress","progress","next","afterEach","document","library_name","open_ws","websocket_port","protocol","location","socket","onopen","vm","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","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","$emit","open_album","open_album_artist","album_artist","composer","year","open_genre","track_number","disc_number","_f","length_ms","media_kind","open_spotify_artist","open_spotify_album","samplerate","channels","bitrate","spotify_track","spotifyApi","setAccessToken","getTrack","lastIndexOf","ref","domProps","target","composing","url","add_stream","show","save","playlist_name","is_queue_save_allowed","allow_modifying_stored_playlists","default_playlist_directory","set","nowPlaying","oldPosition","oldIndex","newIndex","artwork_url","artwork_loaded","artwork_error","artwork_visible","item_length_ms","item_progress_ms","seek","interval_id","tick","catch","setInterval","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","from","beforeRouteUpdate","spotify_enabled","webapi_token_valid","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","all","albums","mixins","limit","index_list","artists","total","update_hide_singles","album_count","selected_artist","filtered_index","char","nav","scroll_to_top","filter","scrollTo","show_artist_details_modal","open_tracks","genres","selected_genre","show_genre_details_modal","genre_albums","new_episodes","seek_ms","reload_new_episodes","reload_tracks","playlists","playlist","open_playlist","selected_playlist","show_playlist_details_modal","current_directory","open_directory_dialog","open_parent_directory","files","open_directory","open_playlist_dialog","show_directory_details_modal","selected_directory","substring","directories","parent","new_search","search_query","recent_search","open_recent_search","open_search_tracks","open_artist_dialog","open_search_artists","open_search_albums","open_search_playlists","show_tracks","show_all_tracks_button","show_artists","show_all_artists_button","show_albums","show_all_albums_button","show_playlists","show_all_playlists_button","route","$refs","search_field","focus","offset","blur","version","updating","update","update_meta","songs","db_playtime","updated_at","started_at","buildoptions","filters","join","array","album_type","release_date","owner","display_name","images","new_releases","featured_playlists","getNewReleases","getFeaturedPlaylists","load_next","popularity","followers","append_albums","getArtistAlbums","concat","$state","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","set_timer_show_composer_now_playing","statusUpdateShowComposerNowPlaying","info_option_show_composer_now_playing","statusUpdateShowComposerForGenre","info_option_show_composer_for_genre","set_timer_show_composer_for_genre","timerDelay","timerIdShowComposerNowPlaying","timerIdShowComposerForGenre","settings_category_webinterface","newValue","update_show_composer_now_playing","update_show_composer_for_genre","clear_status_show_composer_for_genre","clear_status_show_composer_now_playing","libspotify_installed","libspotify_user","libspotify_logged_in","login_libspotify","libspotify","$set","errors","user","password","webapi_user","spotify_missing_scope","oauth_uri","spotify_required_scope","enabled","logoutLastfm","scrobbling_enabled","login_lastfm","webapi_granted_scope","webapi_required_scope","split","success","kickoff_pairing","remote","pairing_req","active","Array","isArray","_i","$$a","$$el","$$c","checked","$$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","PagePodcasts","PagePodcast","PageAudiobooks","PageAudiobook","PageFiles","PagePlaylists","PagePlaylist","PageSearch","SpotifyPageBrowse","SpotifyPageBrowseNewReleases","SpotifyPageBrowseFeaturedPlaylists","SpotifyPageArtist","SpotifyPageAlbum","SpotifyPagePlaylist","SpotifyPageSearch","SettingsPageWebinterface","SettingsPageOnlineServices","SettingsPageRemotesOutputs","scrollBehavior","savedPosition","hash","selector","x","y","burgerMenuVisible","momentDurationFormatSetup","moment","format","duration","withoutSuffix","fromNow","toLocaleString","VueProgressBar","color","failedColor","height","productionTip","vClickOutside","el","App"],"mappings":"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AW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,gBAAiB,OACjB,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,UAAW,OACX,aAAc,OACd,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,aAAc,OACd,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR,UAAW,OACX,OAAQ,OACR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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('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 }","export * from \"-!../../node_modules/cache-loader/dist/cjs.js?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"21c5ac92-vue-loader-template\\\"}!../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContentWithHeading.vue?vue&type=template&id=74d9008c&\"","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-SG\": \"cdab\",\n\t\"./en-SG.js\": \"cdab\",\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-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\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\"./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-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\"./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\"./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-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('notifications',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.show_burger_menu),expression:\"!show_burger_menu\"}]}),_c('navbar-bottom',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.show_burger_menu),expression:\"!show_burger_menu\"}]})],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:\"navbar is-light is-fixed-top\",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\"})])]),(_vm.podcasts.tracks > 0)?_c('navbar-item-link',{attrs:{\"to\":\"/podcasts\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-microphone\"})])]):_vm._e(),(_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\":_vm.update_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',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.on_click_outside_outputs),expression:\"on_click_outside_outputs\"}],staticClass:\"navbar-item has-dropdown\",class:{ 'is-active': _vm.show_outputs_menu, 'is-hoverable': !_vm.show_outputs_menu && !_vm.show_settings_menu },on:{\"click\":function($event){_vm.show_outputs_menu = !_vm.show_outputs_menu}}},[_vm._m(0),_c('div',{staticClass:\"navbar-dropdown is-right\"},[_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:\"navbar-divider\"}),_vm._l((_vm.outputs),function(output){return _c('navbar-item-output',{key:output.id,attrs:{\"output\":output}})}),_c('hr',{staticClass:\"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(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)])])])]),_c('hr',{staticClass:\"navbar-divider\"}),_c('div',{staticClass:\"navbar-item\"},[_c('div',{staticClass:\"level is-mobile\"},[_c('div',{staticClass:\"level-left\"},[_c('div',{staticClass:\"level-item\"},[_c('div',{staticClass:\"buttons has-addons\"},[_c('player-button-previous',{staticClass:\"button\"}),_c('player-button-play-pause',{staticClass:\"button\"}),_c('player-button-next',{staticClass:\"button\"})],1)]),_c('div',{staticClass:\"level-item\"},[_c('div',{staticClass:\"buttons has-addons\"},[_c('player-button-repeat',{staticClass:\"button is-light\"}),_c('player-button-shuffle',{staticClass:\"button is-light\"}),_c('player-button-consume',{staticClass:\"button is-light\"})],1)])])])])],2)]),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.on_click_outside_settings),expression:\"on_click_outside_settings\"}],staticClass:\"navbar-item has-dropdown\",class:{ 'is-active': _vm.show_settings_menu, 'is-hoverable': !_vm.show_outputs_menu && !_vm.show_settings_menu },on:{\"click\":function($event){_vm.show_settings_menu = !_vm.show_settings_menu}}},[_vm._m(2),_c('div',{staticClass:\"navbar-dropdown is-right\"},[_c('a',{staticClass:\"navbar-item\",attrs:{\"href\":\"/admin.html\"}},[_vm._v(\"Admin\")]),_c('hr',{staticClass:\"navbar-divider\"}),_c('navbar-item-link',{attrs:{\"to\":\"/settings/webinterface\"}},[_vm._v(\"Settings\")]),_c('navbar-item-link',{attrs:{\"to\":\"/about\"}},[_vm._v(\"About\")])],1)])])])])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('a',{staticClass:\"navbar-link is-arrowless\"},[_c('span',{staticClass:\"icon is-hidden-mobile is-hidden-tablet-only\"},[_c('i',{staticClass:\"mdi mdi-volume-high\"})]),_c('span',{staticClass:\"is-hidden-desktop has-text-weight-bold\"},[_vm._v(\"Volume\")])])},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',{staticClass:\"navbar-link is-arrowless\"},[_c('span',{staticClass:\"icon is-hidden-mobile is-hidden-tablet-only\"},[_c('i',{staticClass:\"mdi mdi-settings\"})]),_c('span',{staticClass:\"is-hidden-desktop has-text-weight-bold\"},[_vm._v(\"forked-daapd\")])])}]\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'\n","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 },\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 },\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 store.dispatch('add_notification', { text: 'Request failed (status: ' + error.request.status + ' ' + error.request.statusText + ', url: ' + error.request.responseURL + ')', type: 'danger' })\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 (newPosition) {\n return axios.put('/api/player/seek?position_ms=' + newPosition)\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_albums (artistId) {\n if (artistId) {\n return axios.get('/api/library/artists/' + artistId + '/albums')\n }\n return axios.get('/api/library/albums?media_kind=music')\n },\n\n library_album (albumId) {\n return axios.get('/api/library/albums/' + albumId)\n },\n\n library_album_tracks (albumId) {\n return axios.get('/api/library/albums/' + albumId + '/tracks')\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_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 () {\n return axios.get('/api/library/albums?media_kind=podcast')\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 time_added DESC'\n }\n return axios.get('/api/search', {\n params: episodesParams\n })\n },\n\n library_audiobooks () {\n return axios.get('/api/library/albums?media_kind=audiobook')\n },\n\n library_playlists () {\n return axios.get('/api/library/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_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 verification_kickoff (verificationReq) {\n return axios.post('/api/verification', verificationReq)\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('a',{staticClass:\"navbar-item\",class:{ 'is-active': _vm.is_active },attrs:{\"href\":_vm.full_path()},on:{\"click\":function($event){$event.preventDefault();return _vm.open_link()}}},[_vm._t(\"default\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a class=\"navbar-item\" :class=\"{ 'is-active': is_active }\" @click.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: [ 'to' ],\n\n computed: {\n is_active () {\n return this.$route.path.startsWith(this.to)\n }\n },\n\n methods: {\n open_link: function () {\n this.$store.commit(types.SHOW_BURGER_MENU, false)\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=30d2082c&\"\nimport script from \"./NavbarItemLink.vue?vue&type=script&lang=js&\"\nexport * from \"./NavbarItemLink.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{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\"><span class=\"icon fd-has-action\" :class=\"{ 'has-text-grey-light': !output.selected }\" v-on:click=\"set_enabled\"><i class=\"mdi mdi-18px\" v-bind:class=\"type_class\"></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': !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 === '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=8db1f65e&\"\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\" v-bind: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=179011aa&\"\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}},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-skip-forward\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <a v-on:click=\"play_next\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi mdi-skip-forward\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonNext',\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=33643a35&\"\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}},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-skip-backward\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <a v-on:click=\"play_previous\" :disabled=\"disabled\">\n <span class=\"icon\"><i class=\"mdi mdi-skip-backward\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonPrevious',\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=70f8369f&\"\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:{ 'mdi-shuffle': _vm.is_shuffle, 'mdi-shuffle-disabled': !_vm.is_shuffle }})])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <a v-on:click=\"toggle_shuffle_mode\" v-bind:class=\"{ 'is-warning': is_shuffle }\">\n <span class=\"icon\"><i class=\"mdi\" v-bind:class=\"{ '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 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=0baed9c3&\"\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}},[_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-fire\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <a v-on:click=\"toggle_consume_mode\" v-bind:class=\"{ 'is-warning': is_consume }\">\n <span class=\"icon\"><i class=\"mdi mdi-fire\"></i></span>\n </a>\n</template>\n\n<script>\nimport webapi from '@/webapi'\n\nexport default {\n name: 'PlayerButtonConsume',\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=74ecbfd2&\"\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:{ '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 v-on:click=\"toggle_repeat_mode\" v-bind:class=\"{ 'is-warning': !is_repeat_off }\">\n <span class=\"icon\"><i class=\"mdi\" v-bind:class=\"{ '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 data () {\n return { }\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=6375ce2e&\"\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","<template>\n <nav class=\"navbar is-light is-fixed-top\" 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\" v-if=\"podcasts.tracks > 0\">\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=\"update_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 <!-- Outputs dropdown -->\n <div class=\"navbar-item has-dropdown\"\n :class=\"{ 'is-active': show_outputs_menu, 'is-hoverable': !show_outputs_menu && !show_settings_menu }\"\n @click=\"show_outputs_menu = !show_outputs_menu\"\n v-click-outside=\"on_click_outside_outputs\">\n <a class=\"navbar-link is-arrowless\"><span class=\"icon is-hidden-mobile is-hidden-tablet-only\"><i class=\"mdi mdi-volume-high\"></i></span> <span class=\"is-hidden-desktop has-text-weight-bold\">Volume</span></a>\n\n <div class=\"navbar-dropdown is-right\">\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=\"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=\"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=\"navbar-divider\">\n <div class=\"navbar-item\">\n <div class=\"level is-mobile\">\n <div class=\"level-left\">\n <div class=\"level-item\">\n <div class=\"buttons has-addons\">\n <player-button-previous class=\"button\"></player-button-previous>\n <player-button-play-pause class=\"button\"></player-button-play-pause>\n <player-button-next class=\"button\"></player-button-next>\n </div>\n </div>\n <div class=\"level-item\">\n <div class=\"buttons has-addons\">\n <player-button-repeat class=\"button is-light\"></player-button-repeat>\n <player-button-shuffle class=\"button is-light\"></player-button-shuffle>\n <player-button-consume class=\"button is-light\"></player-button-consume>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Settings drop down -->\n <div class=\"navbar-item has-dropdown\"\n :class=\"{ 'is-active': show_settings_menu, 'is-hoverable': !show_outputs_menu && !show_settings_menu }\"\n @click=\"show_settings_menu = !show_settings_menu\"\n v-click-outside=\"on_click_outside_settings\">\n <a class=\"navbar-link is-arrowless\"><span class=\"icon is-hidden-mobile is-hidden-tablet-only\"><i class=\"mdi mdi-settings\"></i></span> <span class=\"is-hidden-desktop has-text-weight-bold\">forked-daapd</span></a>\n\n <div class=\"navbar-dropdown is-right\">\n <a class=\"navbar-item\" href=\"/admin.html\">Admin</a>\n <hr class=\"navbar-divider\">\n <navbar-item-link to=\"/settings/webinterface\">Settings</navbar-item-link>\n <navbar-item-link to=\"/about\">About</navbar-item-link>\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 './PlayerButtonPlayPause'\nimport PlayerButtonNext from './PlayerButtonNext'\nimport PlayerButtonPrevious from './PlayerButtonPrevious'\nimport PlayerButtonShuffle from './PlayerButtonShuffle'\nimport PlayerButtonConsume from './PlayerButtonConsume'\nimport PlayerButtonRepeat from './PlayerButtonRepeat'\nimport RangeSlider from 'vue-range-slider'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'NavbarTop',\n components: { NavbarItemLink, NavbarItemOutput, PlayerButtonPlayPause, PlayerButtonNext, PlayerButtonPrevious, PlayerButtonShuffle, PlayerButtonConsume, PlayerButtonRepeat, RangeSlider },\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_settings_menu: false\n }\n },\n\n computed: {\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 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 show_burger_menu () {\n return this.$store.state.show_burger_menu\n }\n },\n\n methods: {\n update_show_burger_menu: function () {\n this.$store.commit(types.SHOW_BURGER_MENU, !this.show_burger_menu)\n },\n\n on_click_outside_outputs () {\n this.show_outputs_menu = false\n },\n\n on_click_outside_settings () {\n this.show_settings_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!./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=de5c7f1c&\"\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:\"navbar is-dark is-fixed-bottom\",attrs:{\"role\":\"navigation\",\"aria-label\":\"player controls\"}},[_c('div',{staticClass:\"navbar-brand fd-expanded\"},[_c('router-link',{staticClass:\"navbar-item\",attrs:{\"to\":\"/\",\"active-class\":\"is-active\",\"exact\":\"\"}},[_c('span',{staticClass:\"icon\"},[_c('i',{staticClass:\"mdi mdi-24px mdi-playlist-play\"})])]),_c('router-link',{staticClass:\"navbar-item is-expanded is-clipped\",attrs:{\"to\":\"/now-playing\",\"active-class\":\"is-active\",\"exact\":\"\"}},[_c('div',[_c('p',{staticClass:\"is-size-7 fd-is-text-clipped\"},[_c('strong',[_vm._v(_vm._s(_vm.now_playing.title))]),_c('br'),_vm._v(\"\\n \"+_vm._s(_vm.now_playing.artist)),(_vm.now_playing.data_kind === 'url')?_c('span',[_vm._v(\" - \"+_vm._s(_vm.now_playing.album))]):_vm._e()])])]),_c('player-button-play-pause',{staticClass:\"navbar-item fd-margin-left-auto\",attrs:{\"icon_style\":\"mdi-36px\",\"show_disabled_message\":\"\"}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <nav class=\"navbar is-dark is-fixed-bottom\" role=\"navigation\" aria-label=\"player controls\">\n <div class=\"navbar-brand fd-expanded\">\n <router-link to=\"/\" class=\"navbar-item\" active-class=\"is-active\" exact>\n <span class=\"icon\"><i class=\"mdi mdi-24px mdi-playlist-play\"></i></span>\n </router-link>\n <router-link to=\"/now-playing\" class=\"navbar-item is-expanded is-clipped\" active-class=\"is-active\" exact>\n <div>\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 <player-button-play-pause class=\"navbar-item fd-margin-left-auto\" icon_style=\"mdi-36px\" show_disabled_message></player-button-play-pause>\n </div>\n </nav>\n</template>\n\n<script>\nimport PlayerButtonPlayPause from './PlayerButtonPlayPause'\n\nexport default {\n name: 'NavbarBottom',\n components: { PlayerButtonPlayPause },\n\n data () {\n return { }\n },\n\n computed: {\n state () {\n return this.$store.state.player\n },\n now_playing () {\n return this.$store.getters.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!./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=5b9914ae&\"\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(\"\\n \"+_vm._s(notification.text)+\"\\n \")])}),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","<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 <notifications v-show=\"!show_burger_menu\" />\n <navbar-bottom v-show=\"!show_burger_menu\" />\n </div>\n</template>\n\n<script>\nimport NavbarTop from '@/components/NavbarTop'\nimport NavbarBottom from '@/components/NavbarBottom'\nimport Notifications from '@/components/Notifications'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\nimport ReconnectingWebSocket from 'reconnectingwebsocket'\n\nexport default {\n name: 'App',\n components: { NavbarTop, NavbarBottom, Notifications },\n template: '<App/>',\n\n data () {\n return {\n token_timer_id: 0,\n reconnect_attempts: 0\n }\n },\n\n computed: {\n show_burger_menu () {\n return this.$store.state.show_burger_menu\n }\n },\n\n created: function () {\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 let 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 socket = new ReconnectingWebSocket(\n protocol + window.location.hostname + ':' + vm.$store.state.config.websocket_port,\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 })\n }\n },\n\n watch: {\n 'show_burger_menu' () {\n if (this.show_burger_menu) {\n document.querySelector('html').classList.add('is-clipped')\n } else {\n document.querySelector('html').classList.remove('is-clipped')\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!./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=f6eb5dfa&\"\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=39da1b70&\"\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(\"\\n \"+_vm._s(_vm.item.title)+\"\\n \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\"\\n \"+_vm._s(_vm.item.artist)+\"\\n \")]),_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._s(_vm.item.samplerate)+\" Hz | \"+_vm._s(_vm.item.channels)+\" | \"+_vm._s(_vm.item.bitrate)+\" Kb/s\")])])])]),_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\"})]),_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\"})]),_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\">{{ item.type}} | {{ item.samplerate }} Hz | {{ item.channels }} | {{ item.bitrate }} Kb/s</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=5420c8ea&\"\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(\"\\n Add stream URL\\n \")]),_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\"})]),_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\"})]),_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\"})]),_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\"})]),_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=c5a17588&\"\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(\"\\n Save queue to playlist\\n \")]),_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\"})]),_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\"})]),_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\"})]),_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=95476efe&\"\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 <!--\n <a class=\"button\" :class=\"{ 'is-info': edit_mode }\" @click=\"edit_mode = !edit_mode\">\n <span class=\"icon\">\n <i class=\"mdi mdi-content-save\"></i>\n </span>\n <span>Save</span>\n </a>\n -->\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 this.show_pls_save_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!./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=54f85467&\"\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',{staticClass:\"hero fd-is-fullheight\"},[_c('div',{staticClass:\"hero-head fd-has-padding-left-right\"},[_c('div',{staticClass:\"container has-text-centered fd-has-margin-top\"},[_c('h1',{staticClass:\"title is-4\"},[_vm._v(\"\\n \"+_vm._s(_vm.now_playing.title)+\"\\n \")]),_c('h2',{staticClass:\"title is-6\"},[_vm._v(\"\\n \"+_vm._s(_vm.now_playing.artist)+\"\\n \")]),(_vm.composer)?_c('h2',{staticClass:\"subtitle is-6 has-text-grey has-text-weight-bold\"},[_vm._v(\"\\n \"+_vm._s(_vm.composer)+\"\\n \")]):_vm._e(),_c('h3',{staticClass:\"subtitle is-6\"},[_vm._v(\"\\n \"+_vm._s(_vm.now_playing.album)+\"\\n \")])])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.artwork_visible),expression:\"artwork_visible\"}],staticClass:\"hero-body fd-is-fullheight-body has-text-centered\"},[_c('img',{staticClass:\"fd-has-shadow fd-image-fullheight fd-has-action\",attrs:{\"src\":_vm.artwork_url},on:{\"load\":_vm.artwork_loaded,\"error\":_vm.artwork_error,\"click\":function($event){return _vm.open_dialog(_vm.now_playing)}}})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.artwork_visible),expression:\"!artwork_visible\"}],staticClass:\"hero-body fd-is-fullheight-body has-text-centered\"},[_c('a',{staticClass:\"button is-white is-medium\",on:{\"click\":function($event){return _vm.open_dialog(_vm.now_playing)}}},[_vm._m(0)])]),_c('div',{staticClass:\"hero-foot fd-has-padding-left-right\"},[_c('div',{staticClass:\"container has-text-centered fd-has-margin-bottom\"},[_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:\"buttons has-addons is-centered\"},[_c('player-button-previous',{staticClass:\"button is-medium\"}),_c('player-button-play-pause',{staticClass:\"button is-medium\",attrs:{\"icon_style\":\"mdi-36px\"}}),_c('player-button-next',{staticClass:\"button is-medium\"}),_c('player-button-repeat',{staticClass:\"button is-medium is-light\"}),_c('player-button-shuffle',{staticClass:\"button is-medium is-light\"}),_c('player-button-consume',{staticClass:\"button is-medium is-light\"})],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}}})],1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('span',{staticClass:\"icon has-text-grey-light\"},[_c('i',{staticClass:\"mdi mdi-information-outline\"})])}]\n\nexport { render, staticRenderFns }","<template>\n <section class=\"hero fd-is-fullheight\">\n <div class=\"hero-head fd-has-padding-left-right\">\n <div class=\"container has-text-centered fd-has-margin-top\">\n <h1 class=\"title is-4\">\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 class=\"hero-body fd-is-fullheight-body has-text-centered\" v-show=\"artwork_visible\">\n <img :src=\"artwork_url\" class=\"fd-has-shadow fd-image-fullheight fd-has-action\"\n @load=\"artwork_loaded\"\n @error=\"artwork_error\"\n @click=\"open_dialog(now_playing)\">\n </div>\n <div class=\"hero-body fd-is-fullheight-body has-text-centered\" v-show=\"!artwork_visible\">\n <a @click=\"open_dialog(now_playing)\" class=\"button is-white is-medium\">\n <span class=\"icon has-text-grey-light\"><i class=\"mdi mdi-information-outline\"></i></span>\n </a>\n </div>\n <div class=\"hero-foot fd-has-padding-left-right\">\n <div class=\"container has-text-centered fd-has-margin-bottom\">\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 class=\"buttons has-addons is-centered\">\n <player-button-previous class=\"button is-medium\"></player-button-previous>\n <player-button-play-pause class=\"button is-medium\" icon_style=\"mdi-36px\"></player-button-play-pause>\n <player-button-next class=\"button is-medium\"></player-button-next>\n <player-button-repeat class=\"button is-medium is-light\"></player-button-repeat>\n <player-button-shuffle class=\"button is-medium is-light\"></player-button-shuffle>\n <player-button-consume class=\"button is-medium is-light\"></player-button-consume>\n </div>\n </div>\n <modal-dialog-queue-item :show=\"show_details_modal\" :item=\"selected_item\" @close=\"show_details_modal = false\" />\n </div>\n </section>\n</template>\n\n<script>\nimport ModalDialogQueueItem from '@/components/ModalDialogQueueItem'\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 RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'PageNowPlaying',\n components: { ModalDialogQueueItem, PlayerButtonPlayPause, PlayerButtonNext, PlayerButtonPrevious, PlayerButtonShuffle, PlayerButtonConsume, PlayerButtonRepeat, RangeSlider },\n\n data () {\n return {\n item_progress_ms: 0,\n interval_id: 0,\n artwork_visible: false,\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 artwork_url: function () {\n return webapi.artwork_url_append_size_params(this.now_playing.artwork_url)\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(newPosition).catch(() => {\n this.item_progress_ms = this.state.item_progress_ms\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 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=3a4e4f11&\"\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\")])])]),(_vm.spotify_enabled)?_c('router-link',{attrs:{\"tag\":\"li\",\"to\":\"/music/spotify\",\"active-class\":\"is-active\"}},[_c('a',[_c('span',{staticClass:\"icon is-small\"},[_c('i',{staticClass:\"mdi mdi-spotify\"})]),_c('span',{},[_vm._v(\"Spotify\")])])]):_vm._e()],1)])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <section class=\"section fd-tabs-section\">\n <div class=\"container\">\n <div class=\"columns is-centered\">\n <div class=\"column is-four-fifths\">\n <div class=\"tabs is-centered is-small\">\n <ul>\n <router-link tag=\"li\" to=\"/music/browse\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-web\"></i></span>\n <span class=\"\">Browse</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/artists\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-artist\"></i></span>\n <span class=\"\">Artists</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/albums\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-album\"></i></span>\n <span class=\"\">Albums</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/genres\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-speaker\"></i></span>\n <span class=\"\">Genres</span>\n </a>\n </router-link>\n <router-link tag=\"li\" to=\"/music/spotify\" v-if=\"spotify_enabled\" active-class=\"is-active\">\n <a>\n <span class=\"icon is-small\"><i class=\"mdi mdi-spotify\"></i></span>\n <span class=\"\">Spotify</span>\n </a>\n </router-link>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </section>\n</template>\n\n<script>\nexport default {\n name: 'TabsMusic',\n\n computed: {\n spotify_enabled () {\n return this.$store.state.spotify.webapi_token_valid\n }\n }\n}\n</script>\n\n<style>\n</style>\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsMusic.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TabsMusic.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./TabsMusic.vue?vue&type=template&id=f9ae6826&\"\nimport script from \"./TabsMusic.vue?vue&type=script&lang=js&\"\nexport * from \"./TabsMusic.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function (_h,_vm) {var _c=_vm._c;return _c('div',{staticClass:\"media\",attrs:{\"id\":'index_' + _vm.props.album.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.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\"},[_vm._t(\"actions\")],2)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template functional>\n <div class=\"media\" :id=\"'index_' + props.album.name_sort.charAt(0).toUpperCase()\">\n <div class=\"media-content fd-has-action is-clipped\" @click=\"listeners.click\">\n <h1 class=\"title is-6\">{{ props.album.name }}</h1>\n <h2 class=\"subtitle is-7 has-text-grey\"><b>{{ props.album.artist }}</b></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: '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=cefba138&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(\"\\n \"+_vm._s(_vm.track.title)+\"\\n \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\"\\n \"+_vm._s(_vm.track.artist)+\"\\n \")]),(_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._s(_vm.track.samplerate)+\" Hz | \"+_vm._s(_vm.track.channels)+\" channels | \"+_vm._s(_vm.track.bitrate)+\" Kb/s\")])]),_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\"})]),_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\"})]),_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\"})]),_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\">{{ track.type}} | {{ track.samplerate}} Hz | {{ track.channels }} channels | {{ track.bitrate}} Kb/s</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=68175aa6&\"\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('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\"},[(_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))])])])]),_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\"})]),_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\"})]),_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\"})]),_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 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 webapi from '@/webapi'\n\nexport default {\n name: 'ModalDialogAlbum',\n props: [ 'show', 'album', 'media_kind' ],\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 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=65471da6&\"\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=81f4ea5e&\"\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=1ef675a1&\"\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=5d4426e7&\"\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.items),function(artist){return (!_vm.hide_singles || artist.track_count > (artist.album_count * 2))?_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):_vm._e()}),_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\"})]),_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\"})]),_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\"})]),_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=7aeba05d&\"\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.items\"\n :key=\"artist.id\"\n :artist=\"artist\"\n @click=\"open_artist(artist)\"\n v-if=\"!hide_singles || artist.track_count > (artist.album_count * 2)\">\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\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=1d63ddaa&\"\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\"})]),_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_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=71e136cc&\"\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.items),function(album){return (!_vm.hide_singles || album.track_count > 2)?_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):_vm._e()}),_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.items\"\n :key=\"album.id\"\n :album=\"album\"\n @click=\"open_album(album)\"\n v-if=\"!hide_singles || album.track_count > 2\">\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()\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\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=744cb385&\"\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-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.album.name))]),_c('a',{staticClass:\"title is-4 has-text-link has-text-weight-normal\",on:{\"click\":_vm.open_artist}},[_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-shuffle\"})]),_c('span',[_vm._v(\"Shuffle\")])])])]),_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},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 <a class=\"title is-4 has-text-link has-text-weight-normal\" @click=\"open_artist\">{{ album.artist }}</a>\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\"><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\">{{ 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-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: 'PageAlbum',\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 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=6ca63cc5&\"\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=e0ee415e&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\"})]),_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\"})]),_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\"})]),_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=7bd8ce68&\"\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=1679dabe&\"\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\"})]),_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 TabsMusic from '@/components/TabsMusic'\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, TabsMusic, 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=d5a5773a&\"\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\"})]),_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=f64d0bfa&\"\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\"})]),_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=18fbb673&\"\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:\"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:\"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}}})],2)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<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=\"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=\"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 :show=\"show_album_details_modal\" :album=\"selected_album\" :media_kind=\"'podcast'\" @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 ListItemTrack from '@/components/ListItemTrack'\nimport ListItemAlbum from '@/components/ListItemAlbum'\nimport ModalDialogTrack from '@/components/ModalDialogTrack'\nimport ModalDialogAlbum from '@/components/ModalDialogAlbum'\nimport RangeSlider from 'vue-range-slider'\nimport webapi from '@/webapi'\n\nconst albumsData = {\n load: function (to) {\n return Promise.all([\n webapi.library_podcasts(),\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, 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_track_details_modal: false,\n selected_track: {}\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 reload_new_episodes: function () {\n webapi.library_podcasts_new_episodes().then(({ data }) => {\n this.new_episodes = data.tracks\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=990e3fe4&\"\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'},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 </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 :show=\"show_details_modal\" :track=\"selected_track\" @close=\"show_details_modal = false\" @play_count_changed=\"reload_tracks\" />\n <modal-dialog-album :show=\"show_album_details_modal\" :album=\"album\" :media_kind=\"'podcast'\" @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 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 },\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 (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 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=bd2f49ee&\"\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_audiobooks()\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=d4a1b0f4&\"\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=651c2554&\"\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(\"Playlists\")]),_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:\"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('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\"})]),_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\"})]),_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\"})]),_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\">Path</span>\n <span class=\"title is-6\">{{ playlist.path }}</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: '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 })\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=92082ff0&\"\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\">Playlists</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=\"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 TabsMusic from '@/components/TabsMusic'\nimport ListItemPlaylist from '@/components/ListItemPlaylist'\nimport ModalDialogPlaylist from '@/components/ModalDialogPlaylist'\nimport webapi from '@/webapi'\n\nconst playlistsData = {\n load: function (to) {\n return webapi.library_playlists()\n },\n\n set: function (vm, response) {\n vm.playlists = response.data\n }\n}\n\nexport default {\n name: 'PagePlaylists',\n mixins: [ LoadDataBeforeEnterMixin(playlistsData) ],\n components: { ContentWithHeading, TabsMusic, ListItemPlaylist, ModalDialogPlaylist },\n\n data () {\n return {\n playlists: {},\n\n show_details_modal: false,\n selected_playlist: {}\n }\n },\n\n methods: {\n open_playlist: function (playlist) {\n this.$router.push({ path: '/playlists/' + playlist.id })\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=f7b94914&\"\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\"})]),_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=29ad1c4e&\"\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\"})]),_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=23cb81de&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(\"\\n \"+_vm._s(_vm.directory.path)+\"\\n \")])]),_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\"})]),_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\"})]),_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\"})]),_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=55bc5569&\"\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 })\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=34ef1b68&\"\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('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('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\"})])}]\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 </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 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 'query': route.query.query,\n 'media_kind': 'music'\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, searchParams.query)\n })\n },\n\n new_search: function () {\n if (!this.search_query) {\n return\n }\n\n this.$router.push({ 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({ 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({ 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({ 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({ 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 })\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=a1a05a02&\"\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 buttons\"},[_c('a',{staticClass:\"button is-small is-outlined is-link\",class:{ 'is-loading': _vm.library.updating },on:{\"click\":_vm.update}},[_vm._v(\"Update\")]),_c('a',{staticClass:\"button is-small is-outlined is-link\",class:{ 'is-loading': _vm.library.updating },on:{\"click\":_vm.update_meta}},[_vm._v(\"Force Meta Rescan\")])])]),_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,'MMM Do, h:mm'))+\")\")])])]),_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,'MMM Do, h:mm'))+\")\")])])])])])])])])])]),_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 buttons\">\n <a class=\"button is-small is-outlined is-link\" :class=\"{ 'is-loading': library.updating }\" @click=\"update\">Update</a>\n <a class=\"button is-small is-outlined is-link\" :class=\"{ 'is-loading': library.updating }\" @click=\"update_meta\">Force Meta Rescan</a>\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('MMM Do, h:mm') }})</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('MMM Do, h:mm') }})</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 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 webapi.library_update()\n },\n\n update_meta: function () {\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=72b20bd6&\"\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(\"\\n Show more\\n \")])],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(\"\\n Show more\\n \")])],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.album.release_date)+\")\")])]),_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 }})</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=1f7a3a96&\"\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.album.release_date))])]),_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\"})]),_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\"})]),_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\"})]),_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 }}</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=7505d036&\"\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\"})]),_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\"})]),_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\"})]),_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=05d301c6&\"\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=4c5614ca&\"\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=3ce7b23a&\"\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=3bd7dedf&\"\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\"})]),_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\"})]),_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\"})]),_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\"})]),_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=eb65b2cc&\"\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=8507ca16&\"\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-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(_vm._s(_vm.album.name))]),_c('a',{staticClass:\"title is-4 has-text-link has-text-weight-normal\",on:{\"click\":_vm.open_artist}},[_vm._v(_vm._s(_vm.album.artists[0].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-shuffle\"})]),_c('span',[_vm._v(\"Shuffle\")])])])]),_c('template',{slot:\"content\"},[_c('p',{staticClass:\"heading has-text-centered-mobile\"},[_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(\"\\n \"+_vm._s(_vm.track.name)+\"\\n \")]),_c('p',{staticClass:\"subtitle\"},[_vm._v(\"\\n \"+_vm._s(_vm.track.artists[0].name)+\"\\n \")]),_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.album.release_date))])]),_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\"})]),_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\"})]),_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\"})]),_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 }}</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=08d22ed2&\"\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-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">{{ album.name }}</div>\n <a class=\"title is-4 has-text-link has-text-weight-normal\" @click=\"open_artist\">{{ album.artists[0].name }}</a>\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\"><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\">{{ 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-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 SpotifyModalDialogAlbum from '@/components/SpotifyModalDialogAlbum'\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: { ContentWithHeading, SpotifyListItemTrack, SpotifyModalDialogTrack, SpotifyModalDialogAlbum },\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 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=7c4a7d19&\"\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\"})]),_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=73df8d0d&\"\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\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 === '') {\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({ 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({ 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({ 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({ 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({ 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=367274c4&\"\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('div',{staticClass:\"field\"},[_c('label',{staticClass:\"checkbox\"},[_c('input',{ref:\"checkbox_show_composer\",attrs:{\"type\":\"checkbox\"},domProps:{\"checked\":_vm.settings_option_show_composer_now_playing},on:{\"change\":_vm.set_timer_show_composer_now_playing}}),_vm._v(\"\\n Show composer\\n \"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdateShowComposerNowPlaying === 'success',\n 'has-text-danger': _vm.statusUpdateShowComposerNowPlaying === 'error'\n }},[_vm._v(_vm._s(_vm.info_option_show_composer_now_playing))])]),_c('p',{staticClass:\"help has-text-justified\"},[_vm._v(\"\\n If enabled the composer of the current playing track is shown on the \\\"now playing page\\\"\\n \")])]),_c('fieldset',{attrs:{\"disabled\":!_vm.settings_option_show_composer_now_playing}},[_c('div',{staticClass:\"field\"},[_c('label',{staticClass:\"label has-text-weight-normal\"},[_vm._v(\"\\n Show composer only for listed genres\\n \"),_c('i',{staticClass:\"is-size-7\",class:{\n 'has-text-info': _vm.statusUpdateShowComposerForGenre === 'success',\n 'has-text-danger': _vm.statusUpdateShowComposerForGenre === 'error'\n }},[_vm._v(_vm._s(_vm.info_option_show_composer_for_genre))])]),_c('div',{staticClass:\"control\"},[_c('input',{ref:\"field_composer_for_genre\",staticClass:\"input\",attrs:{\"type\":\"text\",\"placeholder\":\"Genres\"},domProps:{\"value\":_vm.settings_option_show_composer_for_genre},on:{\"input\":_vm.set_timer_show_composer_for_genre}})]),_c('p',{staticClass:\"help\"},[_vm._v(\"\\n Comma separated list of genres the composer should be displayed on the \\\"now playing page\\\".\\n \")]),_c('p',{staticClass:\"help\"},[_vm._v(\"\\n Leave empty to always show the composer.\\n \")]),_c('p',{staticClass:\"help\"},[_vm._v(\"\\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 \"),_c('code',[_vm._v(\"classical, soundtrack\")]),_vm._v(\" will show the composer for tracks with\\n a genre tag of \\\"Contemporary Classical\\\".\"),_c('br')])])])])],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/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/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=84cb04d8&\"\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","<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 <div class=\"field\">\n <label class=\"checkbox\">\n <input type=\"checkbox\" :checked=\"settings_option_show_composer_now_playing\" @change=\"set_timer_show_composer_now_playing\" ref=\"checkbox_show_composer\">\n Show composer\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdateShowComposerNowPlaying === 'success',\n 'has-text-danger': statusUpdateShowComposerNowPlaying === 'error'\n }\">{{ info_option_show_composer_now_playing }}</i>\n </label>\n <p class=\"help has-text-justified\">\n If enabled the composer of the current playing track is shown on the &quot;now playing page&quot;\n </p>\n </div>\n <fieldset :disabled=\"!settings_option_show_composer_now_playing\">\n <div class=\"field\">\n <label class=\"label has-text-weight-normal\">\n Show composer only for listed genres\n <i class=\"is-size-7\"\n :class=\"{\n 'has-text-info': statusUpdateShowComposerForGenre === 'success',\n 'has-text-danger': statusUpdateShowComposerForGenre === 'error'\n }\">{{ info_option_show_composer_for_genre }}</i>\n </label>\n <div class=\"control\">\n <input class=\"input\" type=\"text\" placeholder=\"Genres\"\n :value=\"settings_option_show_composer_for_genre\"\n @input=\"set_timer_show_composer_for_genre\"\n ref=\"field_composer_for_genre\">\n </div>\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 </div>\n </fieldset>\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'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsPageWebinterface',\n components: { ContentWithHeading, TabsSettings },\n\n data () {\n return {\n timerDelay: 2000,\n timerIdShowComposerNowPlaying: -1,\n timerIdShowComposerForGenre: -1,\n\n // <empty>: default/no changes, 'success': update succesful, 'error': update failed\n statusUpdateShowComposerNowPlaying: '',\n statusUpdateShowComposerForGenre: ''\n }\n },\n\n computed: {\n settings_category_webinterface () {\n return this.$store.getters.settings_webinterface\n },\n settings_option_show_composer_now_playing () {\n return this.$store.getters.settings_option_show_composer_now_playing\n },\n settings_option_show_composer_for_genre () {\n return this.$store.getters.settings_option_show_composer_for_genre\n },\n info_option_show_composer_for_genre () {\n if (this.statusUpdateShowComposerForGenre === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdateShowComposerForGenre === 'error') {\n return '(error saving setting)'\n }\n return ''\n },\n info_option_show_composer_now_playing () {\n if (this.statusUpdateShowComposerNowPlaying === 'success') {\n return '(setting saved)'\n } else if (this.statusUpdateShowComposerNowPlaying === 'error') {\n return '(error saving setting)'\n }\n return ''\n }\n },\n\n methods: {\n set_timer_show_composer_now_playing () {\n if (this.timerIdShowComposerNowPlaying > 0) {\n window.clearTimeout(this.timerIdShowComposerNowPlaying)\n this.timerIdShowComposerNowPlaying = -1\n }\n\n this.statusUpdateShowComposerNowPlaying = ''\n const newValue = this.$refs.checkbox_show_composer.checked\n if (newValue !== this.settings_option_show_composer_now_playing) {\n this.timerIdShowComposerNowPlaying = window.setTimeout(this.update_show_composer_now_playing, this.timerDelay)\n }\n },\n\n update_show_composer_now_playing () {\n this.timerIdShowComposerNowPlaying = -1\n\n const newValue = this.$refs.checkbox_show_composer.checked\n if (newValue === this.settings_option_show_composer_now_playing) {\n this.statusUpdateShowComposerNowPlaying = ''\n return\n }\n\n const option = {\n category: this.settings_category_webinterface.name,\n name: 'show_composer_now_playing',\n value: newValue\n }\n webapi.settings_update(this.settings_category_webinterface.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdateShowComposerNowPlaying = 'success'\n }).catch(() => {\n this.statusUpdateShowComposerNowPlaying = 'error'\n this.$refs.checkbox_show_composer.checked = this.settings_option_show_composer_now_playing\n }).finally(() => {\n this.timerIdShowComposerNowPlaying = window.setTimeout(this.clear_status_show_composer_now_playing, this.timerDelay)\n })\n },\n\n set_timer_show_composer_for_genre () {\n if (this.timerIdShowComposerForGenre > 0) {\n window.clearTimeout(this.timerIdShowComposerForGenre)\n this.timerIdShowComposerForGenre = -1\n }\n\n this.statusUpdateShowComposerForGenre = ''\n const newValue = this.$refs.field_composer_for_genre.value\n if (newValue !== this.settings_option_show_composer_for_genre) {\n this.timerIdShowComposerForGenre = window.setTimeout(this.update_show_composer_for_genre, this.timerDelay)\n }\n },\n\n update_show_composer_for_genre () {\n this.timerIdShowComposerForGenre = -1\n\n const newValue = this.$refs.field_composer_for_genre.value\n if (newValue === this.settings_option_show_composer_for_genre) {\n this.statusUpdateShowComposerForGenre = ''\n return\n }\n\n const option = {\n category: this.settings_category_webinterface.name,\n name: 'show_composer_for_genre',\n value: newValue\n }\n webapi.settings_update(this.settings_category_webinterface.name, option).then(() => {\n this.$store.commit(types.UPDATE_SETTINGS_OPTION, option)\n this.statusUpdateShowComposerForGenre = 'success'\n }).catch(() => {\n this.statusUpdateShowComposerForGenre = 'error'\n this.$refs.field_composer_for_genre.value = this.settings_option_show_composer_for_genre\n }).finally(() => {\n this.timerIdShowComposerForGenre = window.setTimeout(this.clear_status_show_composer_for_genre, this.timerDelay)\n })\n },\n\n clear_status_show_composer_for_genre () {\n this.statusUpdateShowComposerForGenre = ''\n },\n\n clear_status_show_composer_now_playing () {\n this.statusUpdateShowComposerNowPlaying = ''\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!./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=bee1cf22&\"\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(\"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.\\n \")]),_c('div',[_c('p',{staticClass:\"content\"},[_c('b',[_vm._v(\"libspotify\")]),_vm._v(\" - Login with your Spotify username and password\\n \")]),(_vm.spotify.libspotify_logged_in)?_c('p',{staticClass:\"fd-has-margin-bottom\"},[_vm._v(\"\\n 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(\"\\n libspotify enables forked-daapd to play Spotify tracks.\\n \")]),_c('p',{staticClass:\"help\"},[_vm._v(\"\\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 \")])]),_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\\n \")]),(_vm.spotify.webapi_token_valid)?_c('p',[_vm._v(\"\\n 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(\"\\n Please reauthorize Web API access to grant forked-daapd the following additional access rights:\\n \"),_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(\"\\n Access to the Spotify Web API enables scanning of your Spotify library. Required scopes are\\n \"),_c('code',[_vm._v(_vm._s(_vm._f(\"join\")(_vm.spotify_required_scope)))]),_vm._v(\".\\n \")])])]):_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\\n \")]),(_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(\"\\n forked-daapd will not store your Last.fm username/password, only the session key. The session key does not expire.\\n \")])])]):_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(\"\\n 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(\"\\n If your Apple TV requires device verification then activate the device below and enter the PIN that the Apple TV displays.\\n \")]),_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)+\"\\n \")])])]),(output.needs_auth_key)?_c('form',{staticClass:\"fd-has-margin-bottom\",on:{\"submit\":function($event){$event.preventDefault();return _vm.kickoff_verification($event)}}},[_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\" 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 () {\n webapi.verification_kickoff(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=59c5fb04&\"\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 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 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: '/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 name: 'Playlists',\n component: PagePlaylists,\n meta: { show_progress: true }\n },\n {\n path: '/playlists/:playlist_id',\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/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 const burgerMenuVisible = store.state.show_burger_menu\n if (burgerMenuVisible) {\n store.commit(types.SHOW_BURGER_MENU, false)\n }\n next(!burgerMenuVisible)\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","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 'bulma/css/bulma.css'\nimport 'mdi/css/materialdesignicons.css'\nimport 'vue-range-slider/dist/vue-range-slider.css'\nimport './mystyles.css'\n\nVue.config.productionTip = false\n\nVue.use(vClickOutside)\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/index.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/index.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&\""],"sourceRoot":""}