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

1 line
627 KiB
Plaintext

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/templates/ContentWithHeading.vue?0a6b","webpack:///./src/templates/ContentWithHeading.vue?c731","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/App.vue?3b9e","webpack:///./src/components/NavbarTop.vue?e97b","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?69cb","webpack:///src/components/NavbarItemLink.vue","webpack:///./src/components/NavbarItemLink.vue?7266","webpack:///./src/components/NavbarItemLink.vue","webpack:///./src/components/NavbarItemOutput.vue?8067","webpack:///src/components/NavbarItemOutput.vue","webpack:///./src/components/NavbarItemOutput.vue?f284","webpack:///./src/components/NavbarItemOutput.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?3d68","webpack:///src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonPlayPause.vue?7730","webpack:///./src/components/PlayerButtonPlayPause.vue","webpack:///./src/components/PlayerButtonNext.vue?ea01","webpack:///src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonNext.vue?fbd2","webpack:///./src/components/PlayerButtonNext.vue","webpack:///./src/components/PlayerButtonPrevious.vue?f02e","webpack:///src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonPrevious.vue?7ab3","webpack:///./src/components/PlayerButtonPrevious.vue","webpack:///./src/components/PlayerButtonShuffle.vue?df28","webpack:///src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonShuffle.vue?f823","webpack:///./src/components/PlayerButtonShuffle.vue","webpack:///./src/components/PlayerButtonConsume.vue?bece","webpack:///src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonConsume.vue?f19d","webpack:///./src/components/PlayerButtonConsume.vue","webpack:///./src/components/PlayerButtonRepeat.vue?ffab","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?4a03","webpack:///src/components/NavbarBottom.vue","webpack:///./src/components/NavbarBottom.vue?5719","webpack:///./src/components/NavbarBottom.vue","webpack:///./src/components/Notifications.vue?3bbb","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?1cce","webpack:///./src/components/ListItemQueueItem.vue?c5fe","webpack:///src/components/ListItemQueueItem.vue","webpack:///./src/components/ListItemQueueItem.vue?ce06","webpack:///./src/components/ListItemQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?3f99","webpack:///src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogQueueItem.vue?f77a","webpack:///./src/components/ModalDialogQueueItem.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?9c3e","webpack:///src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogAddUrlStream.vue?1d31","webpack:///./src/components/ModalDialogAddUrlStream.vue","webpack:///./src/components/ModalDialogPlaylistSave.vue?adea","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?6f1f","webpack:///src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageNowPlaying.vue?5a32","webpack:///./src/pages/PageNowPlaying.vue","webpack:///./src/pages/PageBrowse.vue?1987","webpack:///./src/pages/mixin.js","webpack:///./src/components/TabsMusic.vue?7094","webpack:///src/components/TabsMusic.vue","webpack:///./src/components/TabsMusic.vue?2d68","webpack:///./src/components/TabsMusic.vue","webpack:///./src/components/ListItemAlbum.vue?2eb7","webpack:///src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemAlbum.vue?b729","webpack:///./src/components/ListItemAlbum.vue","webpack:///./src/components/ListItemTrack.vue?fe66","webpack:///src/components/ListItemTrack.vue","webpack:///./src/components/ListItemTrack.vue?c143","webpack:///./src/components/ListItemTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?7a74","webpack:///src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogTrack.vue?b9e3","webpack:///./src/components/ModalDialogTrack.vue","webpack:///./src/components/ModalDialogAlbum.vue?eabb","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?2a44","webpack:///src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyAdded.vue?11a8","webpack:///./src/pages/PageBrowseRecentlyAdded.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?c340","webpack:///src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue?b76d","webpack:///./src/pages/PageBrowseRecentlyPlayed.vue","webpack:///./src/pages/PageArtists.vue?e3cb","webpack:///./src/components/IndexButtonList.vue?c47f","webpack:///src/components/IndexButtonList.vue","webpack:///./src/components/IndexButtonList.vue?fb40","webpack:///./src/components/IndexButtonList.vue","webpack:///./src/components/ListItemArtist.vue?f4aa","webpack:///src/components/ListItemArtist.vue","webpack:///./src/components/ListItemArtist.vue?e871","webpack:///./src/components/ListItemArtist.vue","webpack:///./src/components/ModalDialogArtist.vue?aa16","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?2dc5","webpack:///src/pages/PageArtist.vue","webpack:///./src/pages/PageArtist.vue?54da","webpack:///./src/pages/PageArtist.vue","webpack:///./src/pages/PageAlbums.vue?e540","webpack:///src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbums.vue?dd41","webpack:///./src/pages/PageAlbums.vue","webpack:///./src/pages/PageAlbum.vue?613c","webpack:///src/pages/PageAlbum.vue","webpack:///./src/pages/PageAlbum.vue?07be","webpack:///./src/pages/PageAlbum.vue","webpack:///./src/pages/PageGenres.vue?a229","webpack:///./src/components/ListItemGenre.vue?fd58","webpack:///src/components/ListItemGenre.vue","webpack:///./src/components/ListItemGenre.vue?50b2","webpack:///./src/components/ListItemGenre.vue","webpack:///./src/components/ModalDialogGenre.vue?17c5","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?acce","webpack:///src/pages/PageGenre.vue","webpack:///./src/pages/PageGenre.vue?4090","webpack:///./src/pages/PageGenre.vue","webpack:///./src/pages/PageGenreTracks.vue?e1a9","webpack:///src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageGenreTracks.vue?0317","webpack:///./src/pages/PageGenreTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?ebb1","webpack:///src/pages/PageArtistTracks.vue","webpack:///./src/pages/PageArtistTracks.vue?7e28","webpack:///./src/pages/PageArtistTracks.vue","webpack:///./src/pages/PagePodcasts.vue?7b3a","webpack:///src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcasts.vue?ec36","webpack:///./src/pages/PagePodcasts.vue","webpack:///./src/pages/PagePodcast.vue?9f0e","webpack:///src/pages/PagePodcast.vue","webpack:///./src/pages/PagePodcast.vue?7353","webpack:///./src/pages/PagePodcast.vue","webpack:///./src/pages/PageAudiobooks.vue?f7d2","webpack:///src/pages/PageAudiobooks.vue","webpack:///./src/pages/PageAudiobooks.vue?e6b7","webpack:///./src/pages/PageAudiobooks.vue","webpack:///./src/pages/PageAudiobook.vue?2b8a","webpack:///src/pages/PageAudiobook.vue","webpack:///./src/pages/PageAudiobook.vue?599c","webpack:///./src/pages/PageAudiobook.vue","webpack:///./src/pages/PagePlaylists.vue?73af","webpack:///./src/components/ListItemPlaylist.vue?a83a","webpack:///src/components/ListItemPlaylist.vue","webpack:///./src/components/ListItemPlaylist.vue?5b1a","webpack:///./src/components/ListItemPlaylist.vue","webpack:///./src/components/ModalDialogPlaylist.vue?852e","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?8f2e","webpack:///src/pages/PagePlaylist.vue","webpack:///./src/pages/PagePlaylist.vue?f646","webpack:///./src/pages/PagePlaylist.vue","webpack:///./src/pages/PageFiles.vue?e0af","webpack:///./src/components/ListItemDirectory.vue?c4a0","webpack:///src/components/ListItemDirectory.vue","webpack:///./src/components/ListItemDirectory.vue?7c5d","webpack:///./src/components/ListItemDirectory.vue","webpack:///./src/components/ModalDialogDirectory.vue?93e8","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?6279","webpack:///./src/components/TabsSearch.vue?883b","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?306b","webpack:///src/pages/PageAbout.vue","webpack:///./src/pages/PageAbout.vue?4563","webpack:///./src/pages/PageAbout.vue","webpack:///./src/pages/SpotifyPageBrowse.vue?cbaa","webpack:///./src/components/SpotifyListItemAlbum.vue?487f","webpack:///src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemAlbum.vue?cf43","webpack:///./src/components/SpotifyListItemAlbum.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?1961","webpack:///src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyListItemPlaylist.vue?308c","webpack:///./src/components/SpotifyListItemPlaylist.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?684a","webpack:///src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogAlbum.vue?7978","webpack:///./src/components/SpotifyModalDialogAlbum.vue","webpack:///./src/components/SpotifyModalDialogPlaylist.vue?95ee","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?0f30","webpack:///src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue?d8c2","webpack:///./src/pages/SpotifyPageBrowseNewReleases.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?d4a8","webpack:///src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue?a73a","webpack:///./src/pages/SpotifyPageBrowseFeaturedPlaylists.vue","webpack:///./src/pages/SpotifyPageArtist.vue?26b5","webpack:///./src/components/SpotifyModalDialogArtist.vue?b364","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?97c0","webpack:///./src/components/SpotifyListItemTrack.vue?7fc6","webpack:///src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyListItemTrack.vue?d9dc","webpack:///./src/components/SpotifyListItemTrack.vue","webpack:///./src/components/SpotifyModalDialogTrack.vue?45fa","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?bdd1","webpack:///src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPagePlaylist.vue?4d63","webpack:///./src/pages/SpotifyPagePlaylist.vue","webpack:///./src/pages/SpotifyPageSearch.vue?d6fc","webpack:///./src/components/SpotifyListItemArtist.vue?e1e4","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?9cf6","webpack:///src/pages/SettingsPageWebinterface.vue","webpack:///./src/pages/SettingsPageWebinterface.vue?b41a","webpack:///./src/pages/SettingsPageWebinterface.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_SPOTIFY","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","spotify","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","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","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","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","owner","display_name","release_date","album_type","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","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","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 \"-!cache-loader?{\\\"cacheDirectory\\\":\\\"node_modules/.cache/vue-loader\\\",\\\"cacheIdentifier\\\":\\\"54fa9b40-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_SPOTIFY = 'UPDATE_SPOTIFY'\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 spotify: {},\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_SPOTIFY] (state, spotify) {\n state.spotify = spotify\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 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 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'] }))\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 }\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 }\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_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\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=325d7bd2&\"\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('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 </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=5992bb42&\"\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('content-with-heading',[_c('template',{slot:\"heading-left\"},[_c('div',{staticClass:\"title is-4\"},[_vm._v(\"Settings\")])]),_c('template',{slot:\"heading-right\"}),_c('template',{slot:\"content\"},[_c('div',{staticClass:\"heading fd-has-margin-bottom\"},[_vm._v(\"Now playing page\")]),_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)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\n <content-with-heading>\n <template slot=\"heading-left\">\n <div class=\"title is-4\">Settings</div>\n </template>\n\n <template slot=\"heading-right\">\n </template>\n\n <template slot=\"content\">\n <div class=\"heading fd-has-margin-bottom\">Now playing page</div>\n\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\n </template>\n </content-with-heading>\n</template>\n\n<script>\nimport ContentWithHeading from '@/templates/ContentWithHeading'\nimport webapi from '@/webapi'\nimport * as types from '@/store/mutation_types'\n\nexport default {\n name: 'SettingsPageWebinterface',\n components: { ContentWithHeading },\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=4ea3592a&\"\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","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'\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 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":""}