diff --git a/dashboard-ui/episodes.html b/dashboard-ui/episodes.html deleted file mode 100644 index 5f866e1142..0000000000 --- a/dashboard-ui/episodes.html +++ /dev/null @@ -1,179 +0,0 @@ - - - - Emby - - -
- -
- ${TabSuggestions} - ${TabLatest} - ${TabUpcoming} - ${TabShows} - ${TabEpisodes} - ${TabGenres} - ${TabPeople} - ${TabNetworks} -
- -
-
-
-
-
-
- -
-
-
- -
-
- - - -
- -
- - -
-
-
- - -
- -
-
-
- - ${HeaderFilters} - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - ${LabelVideoType} - - - - - - - - - - - - - - - - -
- -
- - ${LabelFeatures} - - - - -
-
-
-
- - ${HeaderSortBy} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- - ${HeaderSortOrder} - - - - - - - -
-
-
-
-
- - diff --git a/dashboard-ui/scripts/episodes.js b/dashboard-ui/scripts/episodes.js index bcd51ef2ca..33277446d5 100644 --- a/dashboard-ui/scripts/episodes.js +++ b/dashboard-ui/scripts/episodes.js @@ -1,36 +1,57 @@ (function ($, document) { - var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster'); + var data = {}; - // The base query options - var query = { + function getPageData() { + var key = getSavedQueryKey(); + var pageData = data[key]; - SortBy: "SeriesSortName,SortName", - SortOrder: "Ascending", - IncludeItemTypes: "Episode", - Recursive: true, - Fields: "PrimaryImageAspectRatio,MediaSourceCount,UserData,SyncInfo", - StartIndex: 0, - IsMissing: false, - IsVirtualUnaired: false, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb" - }; + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SeriesSortName,SortName", + SortOrder: "Ascending", + IncludeItemTypes: "Episode", + Recursive: true, + Fields: "PrimaryImageAspectRatio,MediaSourceCount,UserData,SyncInfo", + IsMissing: false, + IsVirtualUnaired: false, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + StartIndex: 0, + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster') + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery() { + + return getPageData().query; + } function getSavedQueryKey() { - return 'episodes' + (query.ParentId || ''); + return getWindowUrl() + 'episodes'; } - function reloadItems(page) { + function reloadItems(page, viewPanel) { Dashboard.showLoadingMsg(); + var query = getQuery(); ApiClient.getItems(Dashboard.getCurrentUserId(), query).done(function (result) { // Scroll back up so they can see the results from the beginning window.scrollTo(0, 0); + var view = getPageData().view; + var html = ''; var pagingHtml = LibraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, @@ -38,12 +59,19 @@ totalRecordCount: result.TotalRecordCount, viewButton: true, showLimit: false, - addSelectionButton: true + addSelectionButton: true, + viewPanelClass: 'episodesViewPanel', + updatePageSizeSetting: false, + addLayoutButton: true, + viewIcon: 'filter-list', + sortButton: true, + currentLayout: view, + layouts: 'Poster,PosterCard' }); page.querySelector('.listTopPaging').innerHTML = pagingHtml; - updateFilterControls(); + updateFilterControls(page, viewPanel); var trigger = false; if (view == "List") { @@ -87,12 +115,64 @@ $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; - reloadItems(page); + reloadItems(page, viewPanel); }); $('.btnPreviousPage', page).on('click', function () { query.StartIndex -= query.Limit; - reloadItems(page); + reloadItems(page, viewPanel); + }); + + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + getPageData().view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout); + reloadItems(page, viewPanel); + }); + + // On callback make sure to set StartIndex = 0 + $('.btnSort', page).on('click', function () { + LibraryBrowser.showSortMenu({ + items: [{ + name: Globalize.translate('OptionNameSort'), + id: 'SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionTvdbRating'), + id: 'CommunityRating,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionDateAdded'), + id: 'DateCreated,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionPremiereDate'), + id: 'PremiereDate,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionDatePlayed'), + id: 'DatePlayed,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionParentalRating'), + id: 'OfficialRating,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionPlayCount'), + id: 'PlayCount,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionRuntime'), + id: 'Runtime,SeriesSortName,SortName' + }, + { + name: Globalize.translate('OptionVideoBitrate'), + id: 'VideoBitRate,SeriesSortName,SortName' + }], + callback: function () { + reloadItems(page, viewPanel); + }, + query: query + }); }); LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); @@ -101,23 +181,10 @@ }); } - function updateFilterControls(page) { + function updateFilterControls(tabContent, viewPanel) { - - // Reset form values using the last used query - $('.radioSortBy', page).each(function () { - - this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase(); - - }); - - $('.radioSortOrder', page).each(function () { - - this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase(); - - }); - - $('.chkStandardFilter', page).each(function () { + var query = getQuery(); + $('.chkStandardFilter', viewPanel).each(function () { var filters = "," + (query.Filters || ""); var filterName = this.getAttribute('data-filter'); @@ -126,7 +193,7 @@ }); - $('.chkVideoTypeFilter', page).each(function () { + $('.chkVideoTypeFilter', viewPanel).each(function () { var filters = "," + (query.VideoTypes || ""); var filterName = this.getAttribute('data-filter'); @@ -135,42 +202,26 @@ }); - $('#selectView', page).val(view); + $('#chkHD', viewPanel).checked(query.IsHD == true); + $('#chkSD', viewPanel).checked(query.IsHD == false); - $('#chkHD', page).checked(query.IsHD == true); - $('#chkSD', page).checked(query.IsHD == false); + $('#chkSubtitle', viewPanel).checked(query.HasSubtitles == true); + $('#chkTrailer', viewPanel).checked(query.HasTrailer == true); + $('#chkThemeSong', viewPanel).checked(query.HasThemeSong == true); + $('#chkThemeVideo', viewPanel).checked(query.HasThemeVideo == true); + $('#chkSpecialFeature', viewPanel).checked(query.ParentIndexNumber == 0); - $('#chkSubtitle', page).checked(query.HasSubtitles == true); - $('#chkTrailer', page).checked(query.HasTrailer == true); - $('#chkThemeSong', page).checked(query.HasThemeSong == true); - $('#chkThemeVideo', page).checked(query.HasThemeVideo == true); - $('#chkSpecialFeature', page).checked(query.ParentIndexNumber == 0); + $('#chkMissingEpisode', viewPanel).checked(query.IsMissing == true); + $('#chkFutureEpisode', viewPanel).checked(query.IsUnaired == true); - $('#chkMissingEpisode', page).checked(query.IsMissing == true); - $('#chkFutureEpisode', page).checked(query.IsUnaired == true); - - $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater); - $('#selectPageSize', page).val(query.Limit); + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); } - $(document).on('pageinit', "#episodesPage", function () { + function initPage(tabContent, viewPanel) { - var page = this; - - $('.radioSortBy', this).on('click', function () { - query.StartIndex = 0; - query.SortBy = this.getAttribute('data-sortby'); - reloadItems(page); - }); - - $('.radioSortOrder', this).on('click', function () { - query.StartIndex = 0; - query.SortOrder = this.getAttribute('data-sortorder'); - reloadItems(page); - }); - - $('.chkStandardFilter', this).on('change', function () { + $('.chkStandardFilter', viewPanel).on('change', function () { + var query = getQuery(); var filterName = this.getAttribute('data-filter'); var filters = query.Filters || ""; @@ -183,12 +234,13 @@ query.StartIndex = 0; query.Filters = filters; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.chkVideoTypeFilter', this).on('change', function () { + $('.chkVideoTypeFilter', viewPanel).on('change', function () { + var query = getQuery(); var filterName = this.getAttribute('data-filter'); var filters = query.VideoTypes || ""; @@ -201,58 +253,65 @@ query.StartIndex = 0; query.VideoTypes = filters; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkSubtitle', this).on('change', function () { + $('#chkSubtitle', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.HasSubtitles = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkTrailer', this).on('change', function () { + $('#chkTrailer', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.HasTrailer = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkThemeSong', this).on('change', function () { + $('#chkThemeSong', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.HasThemeSong = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkThemeVideo', this).on('change', function () { + $('#chkThemeVideo', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.HasThemeVideo = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkSpecialFeature', this).on('change', function () { + $('#chkSpecialFeature', viewPanel).on('change', function () { + var query = getQuery(); query.ParentIndexNumber = this.checked ? 0 : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkMissingEpisode', this).on('change', function () { + $('#chkMissingEpisode', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.IsMissing = this.checked ? true : false; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkFutureEpisode', this).on('change', function () { + $('#chkFutureEpisode', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; if (this.checked) { @@ -264,111 +323,71 @@ } - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkHD', this).on('change', function () { + $('#chkHD', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.IsHD = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkSD', this).on('change', function () { + $('#chkSD', viewPanel).on('change', function () { + var query = getQuery(); query.StartIndex = 0; query.IsHD = this.checked ? false : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.alphabetPicker', this).on('alphaselect', function (e, character) { + $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { + var query = getQuery(); query.NameStartsWithOrGreater = character; query.StartIndex = 0; - reloadItems(page); + reloadItems(tabContent, viewPanel); }).on('alphaclear', function (e) { + var query = getQuery(); query.NameStartsWithOrGreater = ''; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.itemsContainer', page).on('needsrefresh', function () { + $('.itemsContainer', tabContent).on('needsrefresh', function () { - reloadItems(page); + reloadItems(tabContent, viewPanel); }); + } - $('#selectView', this).on('change', function () { + window.TvPage.initEpisodesTab = function (page, tabContent) { - view = this.value; + var viewPanel = page.querySelector('.episodesViewPanel'); + initPage(tabContent, viewPanel); + }; - reloadItems(page); + window.TvPage.renderEpisodesTab = function (page, tabContent) { - LibraryBrowser.saveViewSetting(getSavedQueryKey(), view); - }); - - $('#selectPageSize', page).on('change', function () { - query.Limit = parseInt(this.value); - query.StartIndex = 0; - reloadItems(page); - }); - - }).on('pagebeforeshow', "#episodesPage", function () { - - var page = this; - query.ParentId = LibraryMenu.getTopParentId(); - - var limit = LibraryBrowser.getDefaultPageSize(); - - // If the default page size has changed, the start index will have to be reset - if (limit != query.Limit) { - query.Limit = limit; - query.StartIndex = 0; + if (LibraryBrowser.needsRefresh(tabContent)) { + var viewPanel = page.querySelector('.episodesViewPanel'); + reloadItems(tabContent, viewPanel); + updateFilterControls(tabContent, viewPanel); } - var viewkey = getSavedQueryKey(); - - LibraryBrowser.loadSavedQueryValues(viewkey, query); - - var filters = getParameterByName('filters'); - if (filters) { - query.Filters = filters; - } - - var sortby = getParameterByName('sortby'); - if (sortby) { - query.SortBy = sortby; - } - - var sortorder = getParameterByName('sortorder'); - if (sortorder) { - query.SortOrder = sortorder; - } - - LibraryBrowser.getSavedViewSetting(viewkey).done(function (val) { - - if (val) { - Events.trigger($('#selectView', page).val(val)[0], 'change'); - } else { - reloadItems(page); - } - }); - - updateFilterControls(this); - - Dashboard.getCurrentUser().done(function(user) { + Dashboard.getCurrentUser().done(function (user) { if (user.Policy.IsAdministrator) { $('.btnMergeVersions', page).show(); } else { $('.btnMergeVersions', page).hide(); } }); - - }); + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/moviepeople.js b/dashboard-ui/scripts/moviepeople.js index 145b69a124..54529babe6 100644 --- a/dashboard-ui/scripts/moviepeople.js +++ b/dashboard-ui/scripts/moviepeople.js @@ -63,7 +63,6 @@ html = LibraryBrowser.getPosterViewHtml({ items: result.Items, shape: "portrait", - context: 'movies', showTitle: true, showItemCounts: true, coverImage: true, diff --git a/dashboard-ui/scripts/searchmenu.js b/dashboard-ui/scripts/searchmenu.js index d7445300ca..bbc1d08748 100644 --- a/dashboard-ui/scripts/searchmenu.js +++ b/dashboard-ui/scripts/searchmenu.js @@ -55,6 +55,7 @@ }); $('.btnCloseSearch').on('click', function () { + self.hide(); Events.trigger(self, 'closed'); }); diff --git a/dashboard-ui/scripts/tvgenres.js b/dashboard-ui/scripts/tvgenres.js index fdfd373c5e..18ba49797d 100644 --- a/dashboard-ui/scripts/tvgenres.js +++ b/dashboard-ui/scripts/tvgenres.js @@ -32,7 +32,7 @@ function getSavedQueryKey() { - return getWindowUrl(); + return getWindowUrl() + 'genres'; } function reloadItems(page) { @@ -132,10 +132,11 @@ }); } - $(document).on('pagebeforeshow', "#tvGenresPage", function () { + window.TvPage.renderGenresTab = function (page, tabContent) { - var page = this; - reloadItems(page); - }); + if (LibraryBrowser.needsRefresh(tabContent)) { + reloadItems(tabContent); + } + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvlatest.js b/dashboard-ui/scripts/tvlatest.js index cdc5a20835..b8b4752fbe 100644 --- a/dashboard-ui/scripts/tvlatest.js +++ b/dashboard-ui/scripts/tvlatest.js @@ -77,13 +77,11 @@ }); } - $(document).on('pagebeforeshow', "#tvNextUpPage", function () { + window.TvPage.renderLatestTab = function (page, tabContent) { - var page = this; - if (LibraryBrowser.needsRefresh(page)) { - loadLatest(page); + if (LibraryBrowser.needsRefresh(tabContent)) { + loadLatest(tabContent); } - }); - + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvpeople.js b/dashboard-ui/scripts/tvpeople.js index 78baa35632..cc04405b2f 100644 --- a/dashboard-ui/scripts/tvpeople.js +++ b/dashboard-ui/scripts/tvpeople.js @@ -1,29 +1,43 @@ (function ($, document) { var pageSizeKey = 'people'; + var data = {}; - // The base query options - var query = { + function getQuery() { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "Series,Episode", - Recursive: true, - Fields: "DateCreated,ItemCounts", - PersonTypes: "", - StartIndex: 0, - Limit: 100 - }; + var key = getSavedQueryKey(); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "Series,Episode", + Recursive: true, + Fields: "DateCreated,ItemCounts", + PersonTypes: "", + StartIndex: 0, + Limit: 100 + } + }; + + pageData.query.ParentId = LibraryMenu.getTopParentId(); + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData.query; + } function getSavedQueryKey() { - return 'tvpeople' + (query.ParentId || ''); + return getWindowUrl() + 'people'; } - function reloadItems(page) { + function reloadItems(page, viewPanel) { Dashboard.showLoadingMsg(); + var query = getQuery(); ApiClient.getPeople(Dashboard.getCurrentUserId(), query).done(function (result) { // Scroll back up so they can see the results from the beginning @@ -36,12 +50,15 @@ totalRecordCount: result.TotalRecordCount, viewButton: true, viewIcon: 'filter-list', - showLimit: false + showLimit: false, + updatePageSizeSetting: false, + pageSizeKey: pageSizeKey, + viewPanelClass: 'peopleViewPanel' }); page.querySelector('.listTopPaging').innerHTML = pagingHtml; - updateFilterControls(page); + updateFilterControls(page, viewPanel); html = LibraryBrowser.getPosterViewHtml({ items: result.Items, @@ -53,18 +70,18 @@ lazy: true }); - var elem = page.querySelector('#items'); + var elem = page.querySelector('.itemsContainer'); elem.innerHTML = html + pagingHtml; ImageLoader.lazyChildren(elem); $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; - reloadItems(page); + reloadItems(page, viewPanel); }); $('.btnPreviousPage', page).on('click', function () { query.StartIndex -= query.Limit; - reloadItems(page); + reloadItems(page, viewPanel); }); LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); @@ -73,35 +90,26 @@ }); } - function updateFilterControls(page) { + function updateFilterControls(tabContent, viewPanel) { - $('.chkStandardFilter', page).each(function () { - - var filters = "," + (query.Filters || ""); - var filterName = this.getAttribute('data-filter'); - - this.checked = filters.indexOf(',' + filterName) != -1; - - }).checkboxradio('refresh'); - - $('.chkPersonTypeFilter', page).each(function () { + var query = getQuery(); + $('.chkPersonTypeFilter', viewPanel).each(function () { var filters = "," + (query.PersonTypes || ""); var filterName = this.getAttribute('data-filter'); this.checked = filters.indexOf(',' + filterName) != -1; - }).checkboxradio('refresh'); + }); - $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater); + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); } - $(document).on('pageinit', "#tvPeoplePage", function () { + function initPage(tabContent, viewPanel) { - var page = this; - - $('.chkStandardFilter', this).on('change', function () { + $('.chkStandardFilter', viewPanel).on('change', function () { + var query = getQuery(); var filterName = this.getAttribute('data-filter'); var filters = query.Filters || ""; @@ -114,11 +122,12 @@ query.StartIndex = 0; query.Filters = filters; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.chkPersonTypeFilter', this).on('change', function () { + $('.chkPersonTypeFilter', viewPanel).on('change', function () { + var query = getQuery(); var filterName = this.getAttribute('data-filter'); var filters = query.PersonTypes || ""; @@ -131,41 +140,39 @@ query.StartIndex = 0; query.PersonTypes = filters; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.alphabetPicker', this).on('alphaselect', function (e, character) { + $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { + var query = getQuery(); query.NameStartsWithOrGreater = character; query.StartIndex = 0; - reloadItems(page); + reloadItems(tabContent, viewPanel); }).on('alphaclear', function (e) { + var query = getQuery(); query.NameStartsWithOrGreater = ''; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); + } - }).on('pagebeforeshow', "#tvPeoplePage", function () { + window.TvPage.initPeopleTab = function (page, tabContent) { - query.ParentId = LibraryMenu.getTopParentId(); + var viewPanel = page.querySelector('.peopleViewPanel'); + initPage(tabContent, viewPanel); + }; - var limit = LibraryBrowser.getDefaultPageSize(pageSizeKey, 100); + window.TvPage.renderPeopleTab = function (page, tabContent) { - // If the default page size has changed, the start index will have to be reset - if (limit != query.Limit) { - query.Limit = limit; - query.StartIndex = 0; + if (LibraryBrowser.needsRefresh(tabContent)) { + var viewPanel = page.querySelector('.peopleViewPanel'); + reloadItems(tabContent, viewPanel); + updateFilterControls(tabContent, viewPanel); } - - LibraryBrowser.loadSavedQueryValues(getSavedQueryKey(), query); - query.SortBy = "SortName"; - - reloadItems(this); - - updateFilterControls(this); - }); + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index 8cb18ee041..953c7f344e 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -185,5 +185,147 @@ } }); + function loadSuggestionsTab(page, tabContent) { + + if (enableScrollX()) { + tabContent.querySelector('#resumableItems').classList.add('hiddenScrollX'); + } else { + tabContent.querySelector('#resumableItems').classList.remove('hiddenScrollX'); + } + + if (LibraryBrowser.needsRefresh(tabContent)) { + reload(tabContent); + } + } + + function loadTab(page, index) { + + var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']'); + var depends = []; + var scope = 'TvPage'; + var renderMethod = ''; + var initMethod = ''; + + switch (index) { + + case 0: + renderMethod = 'renderSuggestedTab'; + break; + case 1: + depends.push('scripts/tvlatest'); + renderMethod = 'renderLatestTab'; + break; + case 2: + depends.push('scripts/tvupcoming'); + renderMethod = 'renderUpcomingTab'; + break; + case 3: + depends.push('scripts/tvshows'); + depends.push('scripts/queryfilters'); + renderMethod = 'renderSeriesTab'; + initMethod = 'initSeriesTab'; + break; + case 4: + depends.push('scripts/episodes'); + renderMethod = 'renderEpisodesTab'; + initMethod = 'initEpisodesTab'; + break; + case 5: + depends.push('scripts/tvgenres'); + renderMethod = 'renderGenresTab'; + break; + case 6: + depends.push('scripts/tvpeople'); + renderMethod = 'renderPeopleTab'; + initMethod = 'initPeopleTab'; + break; + case 7: + depends.push('scripts/tvstudios'); + renderMethod = 'renderStudiosTab'; + break; + default: + break; + } + + require(depends, function () { + + if (initMethod && !tabContent.initComplete) { + + window[scope][initMethod](page, tabContent); + tabContent.initComplete = true; + } + + window[scope][renderMethod](page, tabContent); + + }); + } + + window.TvPage = window.TvPage || {}; + window.TvPage.renderSuggestedTab = loadSuggestionsTab; + + pageIdOn('pageinit', "tvRecommendedPage", function () { + + var page = this; + + $('.recommendations', page).createCardMenus(); + + var tabs = page.querySelector('paper-tabs'); + var pages = page.querySelector('neon-animated-pages'); + + var baseUrl = 'tvrecommended.html'; + var topParentId = LibraryMenu.getTopParentId(); + if (topParentId) { + baseUrl += '?topParentId=' + topParentId; + } + + LibraryBrowser.configurePaperLibraryTabs(page, tabs, pages, baseUrl); + + $(pages).on('tabchange', function () { + loadTab(page, parseInt(this.selected)); + }); + }); + + pageIdOn('pageshowready', "tvRecommendedPage", function () { + + var page = this; + + if (!page.getAttribute('data-title')) { + + var parentId = LibraryMenu.getTopParentId(); + + if (parentId) { + + ApiClient.getItem(Dashboard.getCurrentUserId(), parentId).done(function (item) { + + page.setAttribute('data-title', item.Name); + LibraryMenu.setTitle(item.Name); + }); + + + } else { + page.setAttribute('data-title', Globalize.translate('TabShows')); + LibraryMenu.setTitle(Globalize.translate('TabShows')); + } + } + + $(MediaController).on('playbackstop', onPlaybackStop); + }); + + pageIdOn('pagebeforehide', "tvRecommendedPage", function () { + + var page = this; + $(MediaController).off('playbackstop', onPlaybackStop); + }); + + function onPlaybackStop(e, state) { + + if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { + var page = $($.mobile.activePage)[0]; + var pages = page.querySelector('neon-animated-pages'); + + $(pages).trigger('tabchange'); + } + } + })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index 5cc6f6848b..2ac8830f1e 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -1,11 +1,8 @@ (function ($, document) { - var view = LibraryBrowser.getDefaultItemsView('Poster', 'Thumb'); - var data = {}; - function getQuery() { - + function getPageData() { var key = getSavedQueryKey(); var pageData = data[key]; @@ -21,21 +18,27 @@ EnableImageTypes: "Primary,Backdrop,Banner,Thumb", StartIndex: 0, Limit: LibraryBrowser.getDefaultPageSize() - } + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Thumb') }; pageData.query.ParentId = LibraryMenu.getTopParentId(); LibraryBrowser.loadSavedQueryValues(key, pageData.query); } - return pageData.query; + return pageData; + } + + function getQuery() { + + return getPageData().query; } function getSavedQueryKey() { - return getWindowUrl(); + return getWindowUrl() + 'series'; } - function reloadItems(page) { + function reloadItems(page, viewPanel) { Dashboard.showLoadingMsg(); @@ -46,6 +49,8 @@ // Scroll back up so they can see the results from the beginning window.scrollTo(0, 0); + var view = getPageData().view; + var html = ''; var trigger = false; var pagingHtml = LibraryBrowser.getQueryPagingHtml({ @@ -53,7 +58,15 @@ limit: query.Limit, totalRecordCount: result.TotalRecordCount, viewButton: true, - showLimit: false + showLimit: false, + addSelectionButton: true, + viewPanelClass: 'seriesViewPanel', + updatePageSizeSetting: false, + addLayoutButton: true, + viewIcon: 'filter-list', + sortButton: true, + currentLayout: view, + layouts: 'Banner,List,Poster,PosterCard,Thumb,ThumbCard' }); page.querySelector('.listTopPaging').innerHTML = pagingHtml; @@ -136,12 +149,60 @@ $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; - reloadItems(page); + reloadItems(page, viewPanel); }); $('.btnPreviousPage', page).on('click', function () { query.StartIndex -= query.Limit; - reloadItems(page); + reloadItems(page, viewPanel); + }); + + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + getPageData().view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout); + reloadItems(page, viewPanel); + }); + + // On callback make sure to set StartIndex = 0 + $('.btnSort', page).on('click', function () { + LibraryBrowser.showSortMenu({ + items: [{ + name: Globalize.translate('OptionNameSort'), + id: 'SortName' + }, + { + name: Globalize.translate('OptionImdbRating'), + id: 'CommunityRating,SortName' + }, + { + name: Globalize.translate('OptionDateAdded'), + id: 'DateCreated,SortName' + }, + { + name: Globalize.translate('OptionDatePlayed'), + id: 'DatePlayed,SortName' + }, + { + name: Globalize.translate('OptionMetascore'), + id: 'Metascore,SortName' + }, + { + name: Globalize.translate('OptionParentalRating'), + id: 'OfficialRating,SortName' + }, + { + name: Globalize.translate('OptionPlayCount'), + id: 'PlayCount,SortName' + }, + { + name: Globalize.translate('OptionReleaseDate'), + id: 'PremiereDate,SortName' + }], + callback: function () { + reloadItems(page, viewPanel); + }, + query: query + }); }); LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); @@ -151,101 +212,67 @@ }); } - function updateFilterControls(page) { + function updateFilterControls(tabContent, viewPanel) { - // Reset form values using the last used query - $('.radioSortBy', page).each(function () { - - this.checked = (getQuery().SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase(); - - }).checkboxradio('refresh'); - - $('.radioSortOrder', page).each(function () { - - this.checked = (getQuery().SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase(); - - }).checkboxradio('refresh'); - - $('.chkStatus', page).each(function () { + $('.chkStatus', viewPanel).each(function () { var filters = "," + (getQuery().SeriesStatus || ""); var filterName = this.getAttribute('data-filter'); this.checked = filters.indexOf(',' + filterName) != -1; - }).checkboxradio('refresh'); + }); - $('.chkStandardFilter', page).each(function () { + $('.chkStandardFilter', viewPanel).each(function () { var filters = "," + (getQuery().Filters || ""); var filterName = this.getAttribute('data-filter'); this.checked = filters.indexOf(',' + filterName) != -1; - }).checkboxradio('refresh'); + }); - $('.chkAirDays', page).each(function () { + $('.chkAirDays', viewPanel).each(function () { var filters = "," + (getQuery().AirDays || ""); var filterName = this.getAttribute('data-filter'); this.checked = filters.indexOf(',' + filterName) != -1; - }).checkboxradio('refresh'); + }); var query = getQuery(); - $('#selectView', page).val(view); + $('#chkTrailer', viewPanel).checked(query.HasTrailer == true); + $('#chkThemeSong', viewPanel).checked(query.HasThemeSong == true); + $('#chkThemeVideo', viewPanel).checked(query.HasThemeVideo == true); + $('#chkSpecialFeature', viewPanel).checked(query.HasSpecialFeature == true); - $('#chkTrailer', page).checked(query.HasTrailer == true).checkboxradio('refresh'); - $('#chkThemeSong', page).checked(query.HasThemeSong == true).checkboxradio('refresh'); - $('#chkThemeVideo', page).checked(query.HasThemeVideo == true).checkboxradio('refresh'); - $('#chkSpecialFeature', page).checked(query.HasSpecialFeature == true).checkboxradio('refresh'); - - $('.alphabetPicker', page).alphaValue(query.NameStartsWith); - $('#selectPageSize', page).val(query.Limit); + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWith); } - var filtersLoaded; - function reloadFiltersIfNeeded(page) { + function reloadFiltersIfNeeded(tabContent, viewPanel) { - if (!filtersLoaded) { + if (!getPageData().filtersLoaded) { - filtersLoaded = true; + getPageData().filtersLoaded = true; var query = getQuery(); + QueryFilters.loadFilters(viewPanel, Dashboard.getCurrentUserId(), query, function () { - QueryFilters.loadFilters(page, Dashboard.getCurrentUserId(), query, function () { - - reloadItems(page); + reloadItems(tabContent, viewPanel); }); } } - $(document).on('pageinit', "#tvShowsPage", function () { + function initPage(tabContent, viewPanel) { - var page = this; + $(viewPanel).on('panelopen', function () { - $('.viewPanel', page).on('panelopen', function () { - - reloadFiltersIfNeeded(page); + reloadFiltersIfNeeded(tabContent, viewPanel); }); - $('.radioSortBy', this).on('click', function () { - var query = getQuery(); - query.SortBy = this.getAttribute('data-sortby'); - query.StartIndex = 0; - reloadItems(page); - }); - - $('.radioSortOrder', this).on('click', function () { - var query = getQuery(); - query.SortOrder = this.getAttribute('data-sortorder'); - query.StartIndex = 0; - reloadItems(page); - }); - - $('.chkStandardFilter', this).on('change', function () { + $('.chkStandardFilter', viewPanel).on('change', function () { var query = getQuery(); var filterName = this.getAttribute('data-filter'); @@ -259,10 +286,10 @@ query.Filters = filters; query.StartIndex = 0; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.chkStatus', this).on('change', function () { + $('.chkStatus', viewPanel).on('change', function () { var query = getQuery(); var filterName = this.getAttribute('data-filter'); @@ -276,10 +303,10 @@ query.SeriesStatus = filters; query.StartIndex = 0; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.chkAirDays', this).on('change', function () { + $('.chkAirDays', viewPanel).on('change', function () { var query = getQuery(); var filterName = this.getAttribute('data-filter'); @@ -293,128 +320,95 @@ query.AirDays = filters; query.StartIndex = 0; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#selectView', this).on('change', function () { - - var query = getQuery(); - view = this.value; - - if (view == "Timeline") { - - query.SortBy = "PremiereDate"; - query.SortOrder = "Descending"; - query.StartIndex = 0; - $('#radioPremiereDate', page)[0].click(); - - } else { - reloadItems(page); - } - LibraryBrowser.saveViewSetting(getSavedQueryKey(), view); - }); - - $('#chkTrailer', this).on('change', function () { + $('#chkTrailer', viewPanel).on('change', function () { var query = getQuery(); query.StartIndex = 0; query.HasTrailer = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkThemeSong', this).on('change', function () { + $('#chkThemeSong', viewPanel).on('change', function () { var query = getQuery(); query.StartIndex = 0; query.HasThemeSong = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkSpecialFeature', this).on('change', function () { + $('#chkSpecialFeature', viewPanel).on('change', function () { var query = getQuery(); query.StartIndex = 0; query.HasSpecialFeature = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#chkThemeVideo', this).on('change', function () { + $('#chkThemeVideo', viewPanel).on('change', function () { var query = getQuery(); query.StartIndex = 0; query.HasThemeVideo = this.checked ? true : null; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('.alphabetPicker', this).on('alphaselect', function (e, character) { + $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { var query = getQuery(); query.NameStartsWithOrGreater = character; query.StartIndex = 0; - reloadItems(page); + reloadItems(tabContent, viewPanel); }).on('alphaclear', function (e) { var query = getQuery(); query.NameStartsWithOrGreater = ''; - reloadItems(page); + reloadItems(tabContent, viewPanel); }); - $('#radioBasicFilters', this).on('change', function () { + $('#radioBasicFilters', viewPanel).on('change', function () { if (this.checked) { - $('.basicFilters', page).show(); - $('.advancedFilters', page).hide(); + $('.basicFilters', viewPanel).show(); + $('.advancedFilters', viewPanel).hide(); } else { - $('.basicFilters', page).hide(); + $('.basicFilters', viewPanel).hide(); } }); - $('#radioAdvancedFilters', this).on('change', function () { + $('#radioAdvancedFilters', viewPanel).on('change', function () { if (this.checked) { - $('.advancedFilters', page).show(); - $('.basicFilters', page).hide(); + $('.advancedFilters', viewPanel).show(); + $('.basicFilters', viewPanel).hide(); } else { - $('.advancedFilters', page).hide(); + $('.advancedFilters', viewPanel).hide(); } }); + } - $('#selectPageSize', page).on('change', function () { - var query = getQuery(); - query.Limit = parseInt(this.value); - query.StartIndex = 0; - reloadItems(page); - }); + window.TvPage.initSeriesTab = function (page, tabContent) { - }).on('pagebeforeshow', "#tvShowsPage", function () { + var viewPanel = page.querySelector('.seriesViewPanel'); + initPage(tabContent, viewPanel); + }; - var query = getQuery(); + window.TvPage.renderSeriesTab = function (page, tabContent) { - var page = this; - - var viewKey = getSavedQueryKey(); - - QueryFilters.onPageShow(page, query); - - if (LibraryBrowser.needsRefresh(page)) { - LibraryBrowser.getSavedViewSetting(viewKey).done(function (val) { - - if (val) { - Events.trigger($('#selectView', page).val(val)[0], 'change'); - } else { - reloadItems(page); - } - }); + if (LibraryBrowser.needsRefresh(tabContent)) { + var viewPanel = page.querySelector('.seriesViewPanel'); + reloadItems(tabContent, viewPanel); + updateFilterControls(tabContent, viewPanel); } - - updateFilterControls(this); - }); + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvstudios.js b/dashboard-ui/scripts/tvstudios.js index 2af87eb177..38a11366f4 100644 --- a/dashboard-ui/scripts/tvstudios.js +++ b/dashboard-ui/scripts/tvstudios.js @@ -29,7 +29,7 @@ function getSavedQueryKey() { - return getWindowUrl(); + return getWindowUrl() + 'studios' } function reloadItems(page) { @@ -85,13 +85,11 @@ }); } - $(document).on('pagebeforeshow', "#tvStudiosPage", function () { + window.TvPage.renderStudiosTab = function (page, tabContent) { - var page = this; - - if (LibraryBrowser.needsRefresh(page)) { - reloadItems(page); + if (LibraryBrowser.needsRefresh(tabContent)) { + reloadItems(tabContent); } - }); + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvupcoming.js b/dashboard-ui/scripts/tvupcoming.js index 6b8e457121..4189a7e2b5 100644 --- a/dashboard-ui/scripts/tvupcoming.js +++ b/dashboard-ui/scripts/tvupcoming.js @@ -123,14 +123,11 @@ ImageLoader.lazyChildren(elem); } - $(document).on('pagebeforeshow', "#tvUpcomingPage", function () { + window.TvPage.renderUpcomingTab = function (page, tabContent) { - var page = this; - - if (LibraryBrowser.needsRefresh(page)) { - loadUpcoming(page); + if (LibraryBrowser.needsRefresh(tabContent)) { + loadUpcoming(tabContent); } - }); - + }; })(jQuery, document); \ No newline at end of file diff --git a/dashboard-ui/strings/javascript/javascript.json b/dashboard-ui/strings/javascript/javascript.json index 3750c42f43..67dcfe2248 100644 --- a/dashboard-ui/strings/javascript/javascript.json +++ b/dashboard-ui/strings/javascript/javascript.json @@ -865,6 +865,8 @@ "OptionAscending": "Ascending", "OptionDescending": "Descending", "OptionNameSort": "Name", + "OptionTvdbRating": "Tvdb Rating", + "OptionPremiereDate": "Premiere Date", "OptionImdbRating": "IMDb Rating", "OptionDatePlayed": "Date Played", "OptionDateAdded": "Date Added", diff --git a/dashboard-ui/tvgenres.html b/dashboard-ui/tvgenres.html deleted file mode 100644 index 8cd002d08a..0000000000 --- a/dashboard-ui/tvgenres.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - Emby - - -
-
- ${TabSuggestions} - ${TabLatest} - ${TabUpcoming} - ${TabShows} - ${TabEpisodes} - ${TabGenres} - ${TabPeople} - ${TabNetworks} -
-
-
-
-
-
-
-
- -
- - diff --git a/dashboard-ui/tvlatest.html b/dashboard-ui/tvlatest.html deleted file mode 100644 index 19f2db3133..0000000000 --- a/dashboard-ui/tvlatest.html +++ /dev/null @@ -1,34 +0,0 @@ - - - - Emby - - -
- -
- ${TabSuggestions} - ${TabLatest} - ${TabUpcoming} - ${TabShows} - ${TabEpisodes} - ${TabGenres} - ${TabPeople} - ${TabNetworks} -
-
-
- -
-
-

${HeaderLatestEpisodes}

- ${ButtonSync} -
-
-
-
-
-
-
- - diff --git a/dashboard-ui/tvpeople.html b/dashboard-ui/tvpeople.html deleted file mode 100644 index 08d7b953ff..0000000000 --- a/dashboard-ui/tvpeople.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - Emby - - -
-
- ${TabSuggestions} - ${TabLatest} - ${TabUpcoming} - ${TabShows} - ${TabEpisodes} - ${TabGenres} - ${TabPeople} - ${TabNetworks} -
- -
-
-
-
-
-
-
-
-
- -
-
- - - -
-
- - ${HeaderFilters} - - - - - - - - - -
-
- - ${HeaderPersonTypes} - - - - - - - - - - - - -
-
-
-
- -
- - diff --git a/dashboard-ui/tvrecommended.html b/dashboard-ui/tvrecommended.html index 002770489d..44b90ba357 100644 --- a/dashboard-ui/tvrecommended.html +++ b/dashboard-ui/tvrecommended.html @@ -4,41 +4,298 @@ Emby -
+
-
- ${TabSuggestions} - ${TabLatest} - ${TabUpcoming} - ${TabShows} - ${TabEpisodes} - ${TabGenres} - ${TabPeople} - ${TabNetworks} +
+ + ${TabSuggestions} + ${TabLatest} + ${TabUpcoming} + ${TabShows} + ${TabEpisodes} + ${TabGenres} + ${TabPeople} + ${TabNetworks} + + +
+ +
+ + +
+ + +
+
+

${HeaderNextUp}

+ ${ButtonSync} +
+
+
+
+ +
+
+ +
+
+
+

${HeaderLatestEpisodes}

+ ${ButtonSync} +
+
+
+
+
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+

+ ${HeaderFilters} +

+
+ ${OptionPlayed} + ${OptionUnplayed} + ${OptionFavorite} + ${OptionLikes} + ${OptionDislikes} +
+
+ +
+

+ ${HeaderStatus} +

+
+ ${OptionContinuing} + ${OptionEnded} +
+
+
+ +
+

${HeaderAirDays}

+ +
+ ${OptionSunday} + ${OptionMonday} + ${OptionTuesday} + ${OptionWednesday} + ${OptionThursday} + ${OptionFriday} + ${OptionSaturday} +
+
+
+

${HeaderFeatures}

+ +
+ ${OptionHasTrailer} + ${OptionHasSpecialFeatures} + ${OptionHasThemeSong} + ${OptionHasThemeVideo} +
+
+ +
+

${HeaderGenres}

+ +
+
+
+ +
+

${HeaderParentalRatings}

+ +
+
+
+ +
+

${HeaderTags}

+ +
+
+
+ +
+

${HeaderYears}

+ +
+
+
+ +
+
+ +
+
+ +
+

+ ${HeaderFilters} +

+ +
+ ${OptionPlayed} + ${OptionUnplayed} + ${OptionResumable} + ${OptionFavorite} + ${OptionLikes} + ${OptionDislikes} + + ${OptionSpecialEpisode} + ${OptionMissingEpisode} + ${OptionUnairedEpisode} +
+ +
+
+

+ ${LabelVideoType} +

+ +
+ ${OptionBluray} + ${OptionDvd} + ${OptionIso} + ${OptionIsHD} + ${OptionIsSD} +
+
+ +
+

+ ${LabelFeatures} +

+ +
+ ${OptionHasSubtitles} +
+
+
+
+ +
+
+
+ +
+

+ ${HeaderFilters} +

+
+ ${OptionFavorite} + ${OptionLikes} + ${OptionDislikes} +
+
+
+

+ ${HeaderPersonTypes} +

+ +
+ ${OptionActors} + ${OptionGuestStars} + ${OptionDirectors} + ${OptionProducers} + ${OptionWriters} +
+
+
+
-
- - - -
-
-

${HeaderNextUp}

- ${ButtonSync} -
-
-
-
- -
diff --git a/dashboard-ui/tvshows.html b/dashboard-ui/tvshows.html deleted file mode 100644 index 3062ff63c7..0000000000 --- a/dashboard-ui/tvshows.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - Emby - - -
- -
-
-
-
-
-
-
-
-
- -
-
- - - -
- -
- - -
-
-
- - -
- -
-
-
- - ${HeaderFilters} - - - - - - - - - - - - - - - -
- -
- - ${HeaderStatus} - - - - - -
-
- -
-

${HeaderAirDays}

- -
- - - - - - - - - - - - - - -
-
-
-

${HeaderFeatures}

- -
- - - - - - - - - - - -
-
- -
-

${HeaderGenres}

- -
-
-
- -
-

${HeaderParentalRatings}

- -
-
-
- -
-

${HeaderTags}

- -
-
-
- -
-

${HeaderYears}

- -
-
-
- -
- -
-
- - ${HeaderSortBy} - - - - - - - - - - - - - - - - - - - -
- -
- - ${HeaderSortOrder} - - - - - - - -
-
-
-
-
- - diff --git a/dashboard-ui/tvstudios.html b/dashboard-ui/tvstudios.html deleted file mode 100644 index 3e54340a02..0000000000 --- a/dashboard-ui/tvstudios.html +++ /dev/null @@ -1,28 +0,0 @@ - - - - Emby - - - - - diff --git a/dashboard-ui/tvupcoming.html b/dashboard-ui/tvupcoming.html deleted file mode 100644 index 61b66dd8b9..0000000000 --- a/dashboard-ui/tvupcoming.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - Emby - - - - -