diff --git a/dashboard-ui/favorites.html b/dashboard-ui/favorites.html index 228990928f..ee8bbe571b 100644 --- a/dashboard-ui/favorites.html +++ b/dashboard-ui/favorites.html @@ -1,4 +1,4 @@ -
+
diff --git a/dashboard-ui/itemlist.html b/dashboard-ui/itemlist.html index a045ed409b..8c4cdd2559 100644 --- a/dashboard-ui/itemlist.html +++ b/dashboard-ui/itemlist.html @@ -1,4 +1,4 @@ -
+
diff --git a/dashboard-ui/scripts/episodes.js b/dashboard-ui/scripts/episodes.js index be1395c055..f3b6979da9 100644 --- a/dashboard-ui/scripts/episodes.js +++ b/dashboard-ui/scripts/episodes.js @@ -1,244 +1,247 @@ -(function ($, document) { - - var data = {}; - - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; - - 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(context) { - - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('episodes'); - } - return context.savedQueryKey; - } - - function reloadItems(page) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var view = getPageData(page).view; - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - updatePageSizeSetting: false, - addLayoutButton: true, - sortButton: true, - currentLayout: view, - layouts: 'Poster,PosterCard', - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - updateFilterControls(page); - - if (view == "List") { - - html = LibraryBrowser.getListViewHtml({ - items: result.Items, - sortBy: query.SortBy - }); - } - else if (view == "Poster") { - html += LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - showTitle: true, - showParentTitle: true, - overlayText: true, - lazy: true, - showDetailsMenu: true, - overlayPlayButton: true - }); - } - else if (view == "PosterCard") { - html += LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - showTitle: true, - showParentTitle: true, - lazy: true, - cardLayout: true, - showDetailsMenu: true - }); - } - - var elem = page.querySelector('.itemsContainer'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData(page).view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); - reloadItems(page); - }); - - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - // 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); - }, - query: query - }); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - - Dashboard.hideLoadingMsg(); - }); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'episodes' - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - function updateFilterControls(tabContent) { - - var query = getQuery(tabContent); - - $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); - } - - function initPage(tabContent) { - - $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { - - var query = getQuery(tabContent); - query.NameStartsWithOrGreater = character; - query.StartIndex = 0; - - reloadItems(tabContent); - - }).on('alphaclear', function (e) { - - var query = getQuery(tabContent); - query.NameStartsWithOrGreater = ''; - - reloadItems(tabContent); - }); - - $('.itemsContainer', tabContent).on('needsrefresh', function () { - - reloadItems(tabContent); - }); - } - - window.TvPage.initEpisodesTab = function (page, tabContent) { - - initPage(tabContent); - }; - - window.TvPage.renderEpisodesTab = function (page, tabContent) { - - if (LibraryBrowser.needsRefresh(tabContent)) { - reloadItems(tabContent); - updateFilterControls(tabContent); - } - }; - -})(jQuery, document); \ No newline at end of file +define([], function () { + + return function (view, params, tabContent) { + + var self = this; + + var data = {}; + + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + 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 = params.topParentId; + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery(context) { + + return getPageData(context).query; + } + + function getSavedQueryKey(context) { + + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('episodes'); + } + return context.savedQueryKey; + } + + function reloadItems(page) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(page); + ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var view = getPageData(page).view; + + var html = ''; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + updatePageSizeSetting: false, + addLayoutButton: true, + sortButton: true, + currentLayout: view, + layouts: 'Poster,PosterCard', + filterButton: true + }); + + page.querySelector('.listTopPaging').innerHTML = pagingHtml; + + updateFilterControls(page); + + if (view == "List") { + + html = LibraryBrowser.getListViewHtml({ + items: result.Items, + sortBy: query.SortBy + }); + } + else if (view == "Poster") { + html += LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + showTitle: true, + showParentTitle: true, + overlayText: true, + lazy: true, + showDetailsMenu: true, + overlayPlayButton: true + }); + } + else if (view == "PosterCard") { + html += LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + showTitle: true, + showParentTitle: true, + lazy: true, + cardLayout: true, + showDetailsMenu: true + }); + } + + var elem = page.querySelector('.itemsContainer'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', page).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(page); + }); + + $('.btnPreviousPage', page).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(page); + }); + + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + getPageData(page).view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); + reloadItems(page); + }); + + $('.btnFilter', page).on('click', function () { + showFilterMenu(page); + }); + + // 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); + }, + query: query + }); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + + Dashboard.hideLoadingMsg(); + }); + } + + function showFilterMenu(page) { + + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery(page), + mode: 'episodes' + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(page); + }); + + filterDialog.show(); + }); + } + + function updateFilterControls(tabContent) { + + var query = getQuery(tabContent); + + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWithOrGreater); + } + + function initPage(tabContent) { + + $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { + + var query = getQuery(tabContent); + query.NameStartsWithOrGreater = character; + query.StartIndex = 0; + + reloadItems(tabContent); + + }).on('alphaclear', function (e) { + + var query = getQuery(tabContent); + query.NameStartsWithOrGreater = ''; + + reloadItems(tabContent); + }); + + $('.itemsContainer', tabContent).on('needsrefresh', function () { + + reloadItems(tabContent); + }); + } + + self.initTab = function () { + + initPage(tabContent); + }; + self.renderTab = function () { + + if (LibraryBrowser.needsRefresh(tabContent)) { + reloadItems(tabContent); + updateFilterControls(tabContent); + } + }; + }; +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/itembynamedetailpage.js b/dashboard-ui/scripts/itembynamedetailpage.js index 0f1ec28439..bf3bde549f 100644 --- a/dashboard-ui/scripts/itembynamedetailpage.js +++ b/dashboard-ui/scripts/itembynamedetailpage.js @@ -264,7 +264,7 @@ function getMoreItemsHref(item, type) { - return 'secondaryitems.html?type=' + type + '&parentid=' + item.Id; + return 'secondaryitems.html?type=' + type + '&parentId=' + item.Id; } function addCurrentItemToQuery(query, item) { diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js index b7ad70e654..65e349d300 100644 --- a/dashboard-ui/scripts/itemlistpage.js +++ b/dashboard-ui/scripts/itemlistpage.js @@ -1,313 +1,285 @@ -(function ($, document) { +define(['libraryBrowser', 'jQuery'], function (libraryBrowser, $) { - var currentItem; + return function (view, params) { - var data = {}; + var currentItem; - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; + var data; - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb", - StartIndex: 0, - Limit: LibraryBrowser.getDefaultPageSize() - } - }; + function getPageData() { + var pageData = data; - pageData.query.Filters = ""; - pageData.query.NameStartsWithOrGreater = ''; - pageData.view = LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Poster'); + if (!pageData) { + pageData = data = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo", + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + StartIndex: 0, + Limit: libraryBrowser.getDefaultPageSize() + } + }; - pageData.query.ParentId = getParam(context, 'parentId'); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData; - } + pageData.query.Filters = ""; + pageData.query.NameStartsWithOrGreater = ''; + var key = getSavedQueryKey(); + pageData.view = libraryBrowser.getSavedView(key) || libraryBrowser.getDefaultItemsView('Poster', 'Poster'); - function getParam(context, name) { - - if (!context.pageParams) { - context.pageParams = {}; + pageData.query.ParentId = params.parentId || null; + libraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; } - if (!context.pageParams[name]) { - context.pageParams[name] = getParameterByName(name); + function getQuery() { + + return getPageData().query; + } + function getSavedQueryKey() { + + if (!view.savedQueryKey) { + view.savedQueryKey = libraryBrowser.getSavedQueryKey('items'); + } + return view.savedQueryKey; } - return context.pageParams[name]; - } + function reloadItems() { - function getQuery(context) { + Dashboard.showLoadingMsg(); - return getPageData(context).query; - } - function getSavedQueryKey(context) { + var query = getQuery(); + var userId = Dashboard.getCurrentUserId(); - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('items'); - } - return context.savedQueryKey; - } + var parentItemPromise = query.ParentId ? + ApiClient.getItem(userId, query.ParentId) : + ApiClient.getRootFolder(userId); - function reloadItems(page) { + var itemsPromise = ApiClient.getItems(userId, query); - Dashboard.showLoadingMsg(); + Promise.all([parentItemPromise, itemsPromise]).then(function (responses) { - var query = getQuery(page); - var userId = Dashboard.getCurrentUserId(); + var item = responses[0]; + currentItem = item; + var result = responses[1]; - var parentItemPromise = query.ParentId ? - ApiClient.getItem(userId, query.ParentId) : - ApiClient.getRootFolder(userId); + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); - var itemsPromise = ApiClient.getItems(userId, query); + var viewStyle = getPageData(view).view; - Promise.all([parentItemPromise, itemsPromise]).then(function (responses) { - - var item = responses[0]; - currentItem = item; - var result = responses[1]; - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var view = getPageData(page).view; - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - addLayoutButton: true, - currentLayout: view, - sortButton: true, - layouts: 'Poster,PosterCard,Thumb', - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - updateFilterControls(page); - - var context = getParam(page, 'context'); - - var posterOptions = { - items: result.Items, - shape: "auto", - centerText: true, - lazy: true, - coverImage: item.Type == 'PhotoAlbum' - }; - - if (view == "Backdrop") { - - posterOptions.shape = 'backdrop'; - posterOptions.showTitle = true; - posterOptions.preferBackdrop = true; - - html = LibraryBrowser.getPosterViewHtml(posterOptions); - } - else if (view == "Poster") { - - posterOptions.showTitle = context == 'photos' ? 'auto' : true; - posterOptions.overlayText = context == 'photos'; - - html = LibraryBrowser.getPosterViewHtml(posterOptions); - } - else if (view == "PosterCard") { - - posterOptions.showTitle = true; - posterOptions.showYear = true; - posterOptions.cardLayout = true; - posterOptions.centerText = false; - - html = LibraryBrowser.getPosterViewHtml(posterOptions); - } - else if (view == "Thumb") { - - posterOptions.preferThumb = true; - posterOptions.shape = "backdrop"; - html = LibraryBrowser.getPosterViewHtml(posterOptions); - } - - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData(page).view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); - reloadItems(page); - }); - - // 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('OptionCommunityRating'), - id: 'CommunityRating,SortName' - }, - { - name: Globalize.translate('OptionCriticRating'), - id: 'CriticRating,SortName' - }, - { - name: Globalize.translate('OptionDateAdded'), - id: 'DateCreated,SortName' - }, - { - name: Globalize.translate('OptionDatePlayed'), - id: 'DatePlayed,SortName' - }, - { - name: Globalize.translate('OptionParentalRating'), - id: 'OfficialRating,SortName' - }, - { - name: Globalize.translate('OptionPlayCount'), - id: 'PlayCount,SortName' - }, - { - name: Globalize.translate('OptionReleaseDate'), - id: 'PremiereDate,SortName' - }, - { - name: Globalize.translate('OptionRuntime'), - id: 'Runtime,SortName' - }], - callback: function () { - reloadItems(page); - }, - query: query + var html = ''; + var pagingHtml = libraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + addLayoutButton: true, + currentLayout: viewStyle, + sortButton: true, + layouts: 'Poster,PosterCard,Thumb', + filterButton: true }); + + view.querySelector('.listTopPaging').innerHTML = pagingHtml; + + updateFilterControls(); + + var context = params.context; + + var posterOptions = { + items: result.Items, + shape: "auto", + centerText: true, + lazy: true, + coverImage: item.Type == 'PhotoAlbum' + }; + + if (viewStyle == "Backdrop") { + + posterOptions.shape = 'backdrop'; + posterOptions.showTitle = true; + posterOptions.preferBackdrop = true; + + html = libraryBrowser.getPosterViewHtml(posterOptions); + } + else if (viewStyle == "Poster") { + + posterOptions.showTitle = context == 'photos' ? 'auto' : true; + posterOptions.overlayText = context == 'photos'; + + html = libraryBrowser.getPosterViewHtml(posterOptions); + } + else if (viewStyle == "PosterCard") { + + posterOptions.showTitle = true; + posterOptions.showYear = true; + posterOptions.cardLayout = true; + posterOptions.centerText = false; + + html = libraryBrowser.getPosterViewHtml(posterOptions); + } + else if (viewStyle == "Thumb") { + + posterOptions.preferThumb = true; + posterOptions.shape = "backdrop"; + html = libraryBrowser.getPosterViewHtml(posterOptions); + } + + var elem = view.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnFilter', view).on('click', function () { + showFilterMenu(); + }); + + $('.btnNextPage', view).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(view); + }); + + $('.btnPreviousPage', view).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(view); + }); + + $('.btnChangeLayout', view).on('layoutchange', function (e, layout) { + getPageData(view).view = layout; + libraryBrowser.saveViewSetting(getSavedQueryKey(), layout); + reloadItems(view); + }); + + // On callback make sure to set StartIndex = 0 + $('.btnSort', view).on('click', function () { + libraryBrowser.showSortMenu({ + items: [{ + name: Globalize.translate('OptionNameSort'), + id: 'SortName' + }, + { + name: Globalize.translate('OptionCommunityRating'), + id: 'CommunityRating,SortName' + }, + { + name: Globalize.translate('OptionCriticRating'), + id: 'CriticRating,SortName' + }, + { + name: Globalize.translate('OptionDateAdded'), + id: 'DateCreated,SortName' + }, + { + name: Globalize.translate('OptionDatePlayed'), + id: 'DatePlayed,SortName' + }, + { + name: Globalize.translate('OptionParentalRating'), + id: 'OfficialRating,SortName' + }, + { + name: Globalize.translate('OptionPlayCount'), + id: 'PlayCount,SortName' + }, + { + name: Globalize.translate('OptionReleaseDate'), + id: 'PremiereDate,SortName' + }, + { + name: Globalize.translate('OptionRuntime'), + id: 'Runtime,SortName' + }], + callback: function () { + reloadItems(view); + }, + query: query + }); + }); + + libraryBrowser.saveQueryValues(params.parentId, query); + + var name = item.Name; + + if (item.IndexNumber != null) { + name = item.IndexNumber + " - " + name; + } + if (item.ParentIndexNumber != null) { + name = item.ParentIndexNumber + "." + name; + } + + LibraryMenu.setTitle(name); + + view.dispatchEvent(new CustomEvent("displayingitem", { + detail: { + item: item + }, + bubbles: true + })); + + libraryBrowser.setLastRefreshed(view); + Dashboard.hideLoadingMsg(); }); - - LibraryBrowser.saveQueryValues(getParam(page, 'parentId'), query); - - var name = item.Name; - - if (item.IndexNumber != null) { - name = item.IndexNumber + " - " + name; - } - if (item.ParentIndexNumber != null) { - name = item.ParentIndexNumber + "." + name; - } - - LibraryMenu.setTitle(name); - - page.dispatchEvent(new CustomEvent("displayingitem", { - detail: { - item: item - }, - bubbles: true - })); - - LibraryBrowser.setLastRefreshed(page); - Dashboard.hideLoadingMsg(); - }); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page) - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - function updateFilterControls(page) { - - var query = getQuery(page); - - $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater); - } - - function onListItemClick(e) { - - var page = $(this).parents('.page')[0]; - var query = getQuery(page); - var info = LibraryBrowser.getListItemInfo(this); - - if (info.mediaType == 'Photo') { - require(['scripts/photos'], function () { - Photos.startSlideshow(page, query, info.id); - }); - return false; } - } - pageIdOn('pageinit', "itemListPage", function () { + function showFilterMenu() { - var page = this; + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery() + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(); + }); + + filterDialog.show(); + }); + } + + function updateFilterControls() { + + var query = getQuery(); + + $('.alphabetPicker', view).alphaValue(query.NameStartsWithOrGreater); + } + + function onListItemClick(e) { + + var query = getQuery(); + var info = libraryBrowser.getListItemInfo(this); + + if (info.mediaType == 'Photo') { + require(['scripts/photos'], function () { + Photos.startSlideshow(view, query, info.id); + }); + return false; + } + } $('.alphabetPicker', this).on('alphaselect', function (e, character) { - var query = getQuery(page); + var query = getQuery(); query.NameStartsWithOrGreater = character; query.StartIndex = 0; - reloadItems(page); + reloadItems(view); }).on('alphaclear', function (e) { - var query = getQuery(page); + var query = getQuery(); query.NameStartsWithOrGreater = ''; - reloadItems(page); + reloadItems(view); }); - $(page).on('click', '.mediaItem', onListItemClick); + $(view).on('click', '.mediaItem', onListItemClick); - }); - - pageIdOn('pagebeforeshow', "itemListPage", function () { - - var page = this; - - reloadItems(page); - updateFilterControls(page); - LibraryMenu.setBackButtonVisible(getParam(page, 'context')); - - }); - - pageIdOn('pagebeforehide', "itemListPage", function () { - - currentItem = null; - - }); - -})(jQuery, document); \ No newline at end of file + view.addEventListener('viewbeforeshow', function (e) { + reloadItems(view); + updateFilterControls(); + LibraryMenu.setBackButtonVisible(params.context); + }); + }; +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 6f393e98ed..d47db160b5 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -1157,7 +1157,7 @@ } } if (item.Type == 'CollectionFolder') { - return 'itemlist.html?topParentId=' + item.Id + '&parentid=' + item.Id; + return 'itemlist.html?topParentId=' + item.Id + '&parentId=' + item.Id; } if (item.Type == "PhotoAlbum") { diff --git a/dashboard-ui/scripts/livetvtunerprovider-satip.js b/dashboard-ui/scripts/livetvtunerprovider-satip.js index cbeb6a39a8..8ae290105a 100644 --- a/dashboard-ui/scripts/livetvtunerprovider-satip.js +++ b/dashboard-ui/scripts/livetvtunerprovider-satip.js @@ -18,34 +18,6 @@ } } - function submitForm(page) { - - Dashboard.showLoadingMsg(); - - var id = getParameterByName('id'); - - if (id) { - - ApiClient.getNamedConfiguration("livetv").then(function (config) { - - var info = config.TunerHosts.filter(function (i) { - return i.Id == id; - })[0]; - - fillInfoFromPage(page, info); - submitTunerInfo(page, info); - }); - - } else { - var info = { - Type: 'satip' - }; - - fillInfoFromPage(page, info); - submitTunerInfo(page, info); - } - } - function fillInfoFromPage(page, info) { info.Url = page.querySelector('.txtDevicePath').value; info.M3UUrl = page.querySelector('.txtM3uUrl').value; @@ -91,6 +63,34 @@ return function (view, params) { + function submitForm() { + + Dashboard.showLoadingMsg(); + + var id = params.id; + + if (id) { + + ApiClient.getNamedConfiguration("livetv").then(function (config) { + + var info = config.TunerHosts.filter(function (i) { + return i.Id == id; + })[0]; + + fillInfoFromPage(view, info); + submitTunerInfo(view, info); + }); + + } else { + var info = { + Type: 'satip' + }; + + fillInfoFromPage(view, info); + submitTunerInfo(view, info); + } + } + function onSelectDiseqCChange(e) { var select = e.target; @@ -113,7 +113,7 @@ } view.querySelector('form').addEventListener('submit', function (e) { - submitForm(view); + submitForm(); e.preventDefault(); return false; }); diff --git a/dashboard-ui/scripts/secondaryitems.js b/dashboard-ui/scripts/secondaryitems.js index 381416c95d..0d00ea128e 100644 --- a/dashboard-ui/scripts/secondaryitems.js +++ b/dashboard-ui/scripts/secondaryitems.js @@ -1,195 +1,189 @@ -(function ($, document) { +define(['libraryBrowser', 'jQuery'], function (libraryBrowser, $) { - var data = {}; + return function (view, params) { - function addCurrentItemToQuery(query, item) { + var data = {}; - if (item.Type == "Person") { - query.PersonIds = item.Id; - } - else if (item.Type == "Genre") { - query.Genres = item.Name; - } - else if (item.Type == "MusicGenre") { - query.Genres = item.Name; - } - else if (item.Type == "GameGenre") { - query.Genres = item.Name; - } - else if (item.Type == "Studio") { - query.StudioIds = item.Id; - } - else if (item.Type == "MusicArtist") { - query.ArtistIds = item.Id; - } else { - query.ParentId = item.Id; - } - } + function addCurrentItemToQuery(query, item) { - function getQuery(parentItem) { - - var key = getSavedQueryKey(); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - Recursive: getParameterByName('recursive') !== 'false', - Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb", - StartIndex: 0, - Limit: LibraryBrowser.getDefaultPageSize() - } - }; - - var type = getParameterByName('type'); - if (type) { - pageData.query.IncludeItemTypes = type; - - if (type == 'Audio') { - pageData.query.SortBy = 'Album,SortName'; - } + if (item.Type == "Person") { + query.PersonIds = item.Id; } - - var filters = getParameterByName('filters'); - if (type) { - pageData.query.Filters = filters; + else if (item.Type == "Genre") { + query.Genres = item.Name; } - - if (parentItem) { - addCurrentItemToQuery(pageData.query, parentItem); + else if (item.Type == "MusicGenre") { + query.Genres = item.Name; } - - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData.query; - } - - function getSavedQueryKey() { - - return LibraryBrowser.getSavedQueryKey(); - } - - function onListItemClick(e) { - - var page = $(this).parents('.page')[0]; - var info = LibraryBrowser.getListItemInfo(this); - - if (info.mediaType == 'Photo') { - var query = getQuery(); - - require(['scripts/photos'], function () { - Photos.startSlideshow(page, query, info.id); - }); - return false; - } - } - - function reloadItems(page, parentItem) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(parentItem); - - ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - if (query.IncludeItemTypes == "Audio") { - - html = '
' + LibraryBrowser.getListViewHtml({ - items: result.Items, - playFromHere: true, - defaultAction: 'playallfromhere', - smallIcon: true - }) + '
'; - + else if (item.Type == "GameGenre") { + query.Genres = item.Name; + } + else if (item.Type == "Studio") { + query.StudioIds = item.Id; + } + else if (item.Type == "MusicArtist") { + query.ArtistIds = item.Id; } else { - var posterOptions = { - items: result.Items, - shape: "auto", - centerText: true, - lazy: true + query.ParentId = item.Id; + } + } + + function getQuery(parentItem) { + + var key = getSavedQueryKey(); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + Recursive: params.recursive !== 'false', + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + StartIndex: 0, + Limit: libraryBrowser.getDefaultPageSize() + } }; - if (query.IncludeItemTypes == "MusicAlbum") { - posterOptions.overlayText = false; - posterOptions.showParentTitle = true; - posterOptions.overlayPlayButton = true; - } - else if (query.IncludeItemTypes == "MusicArtist") { - posterOptions.overlayText = false; - posterOptions.overlayPlayButton = true; - } - else if (query.IncludeItemTypes == "Episode") { - posterOptions.overlayText = false; - posterOptions.showParentTitle = true; - posterOptions.showTitle = true; - posterOptions.overlayPlayButton = true; + var type = params.type; + if (type) { + pageData.query.IncludeItemTypes = type; + + if (type == 'Audio') { + pageData.query.SortBy = 'Album,SortName'; + } } - // Poster - html = LibraryBrowser.getPosterViewHtml(posterOptions); + var filters = params.filters; + if (type) { + pageData.query.Filters = filters; + } + + if (parentItem) { + addCurrentItemToQuery(pageData.query, parentItem); + } + + libraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData.query; + } + + function getSavedQueryKey() { + + return libraryBrowser.getSavedQueryKey(); + } + + function onListItemClick(e) { + + var info = libraryBrowser.getListItemInfo(this); + + if (info.mediaType == 'Photo') { + var query = getQuery(); + + require(['scripts/photos'], function () { + Photos.startSlideshow(view, query, info.id); + }); + return false; + } + } + + function reloadItems(parentItem) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(parentItem); + + ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var html = ''; + var pagingHtml = libraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false + }); + + view.querySelector('.listTopPaging').innerHTML = pagingHtml; + + if (query.IncludeItemTypes == "Audio") { + + html = '
' + libraryBrowser.getListViewHtml({ + items: result.Items, + playFromHere: true, + defaultAction: 'playallfromhere', + smallIcon: true + }) + '
'; + + } else { + var posterOptions = { + items: result.Items, + shape: "auto", + centerText: true, + lazy: true + }; + + if (query.IncludeItemTypes == "MusicAlbum") { + posterOptions.overlayText = false; + posterOptions.showParentTitle = true; + posterOptions.overlayPlayButton = true; + } + else if (query.IncludeItemTypes == "MusicArtist") { + posterOptions.overlayText = false; + posterOptions.overlayPlayButton = true; + } + else if (query.IncludeItemTypes == "Episode") { + posterOptions.overlayText = false; + posterOptions.showParentTitle = true; + posterOptions.showTitle = true; + posterOptions.overlayPlayButton = true; + } + + // Poster + html = libraryBrowser.getPosterViewHtml(posterOptions); + } + + var elem = view.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', view).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(parentItem); + }); + + $('.btnPreviousPage', view).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(parentItem); + }); + + libraryBrowser.setLastRefreshed(view); + Dashboard.hideLoadingMsg(); + }); + } + + $(view).on('click', '.mediaItem', onListItemClick); + + view.addEventListener('viewbeforeshow', function (e) { + if (params.parentId) { + ApiClient.getItem(Dashboard.getCurrentUserId(), params.parentId).then(function (parent) { + LibraryMenu.setTitle(parent.Name); + + if (libraryBrowser.needsRefresh(view)) { + reloadItems(parent); + } + }); } - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page, parentItem); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page, parentItem); - }); - - LibraryBrowser.setLastRefreshed(page); - Dashboard.hideLoadingMsg(); + else if (libraryBrowser.needsRefresh(view)) { + reloadItems(); + } }); - } + }; - pageIdOn('pageinit', "secondaryItemsPage", function () { - var page = this; - - $(page).on('click', '.mediaItem', onListItemClick); - - }); - - pageIdOn('pagebeforeshow', "secondaryItemsPage", function () { - - var page = this; - - if (getParameterByName('parentid')) { - ApiClient.getItem(Dashboard.getCurrentUserId(), getParameterByName('parentid')).then(function (parent) { - LibraryMenu.setTitle(parent.Name); - - if (LibraryBrowser.needsRefresh(page)) { - reloadItems(page, parent); - } - }); - } - - else if (LibraryBrowser.needsRefresh(page)) { - reloadItems(page); - } - }); - -})(jQuery, document); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 8194fb9e49..2beab39105 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -2447,8 +2447,9 @@ var AppInfo = {}; defineRoute({ path: '/itemlist.html', - dependencies: ['jQuery'], - autoFocus: false + dependencies: ['paper-checkbox', 'scripts/alphapicker'], + autoFocus: false, + controller: 'scripts/itemlistpage' }); defineRoute({ @@ -2746,8 +2747,9 @@ var AppInfo = {}; defineRoute({ path: '/secondaryitems.html', - dependencies: ['jQuery'], - autoFocus: false + dependencies: [], + autoFocus: false, + controller: 'scripts/secondaryitems' }); defineRoute({ diff --git a/dashboard-ui/scripts/tvgenres.js b/dashboard-ui/scripts/tvgenres.js index 2b6f5e9277..c6df98be2b 100644 --- a/dashboard-ui/scripts/tvgenres.js +++ b/dashboard-ui/scripts/tvgenres.js @@ -1,144 +1,147 @@ -(function ($, document) { - - var data = {}; - function getPageData() { - var key = getSavedQueryKey(); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "Series", - Recursive: true, - Fields: "DateCreated,SyncInfo,ItemCounts", - StartIndex: 0, - Limit: LibraryBrowser.getDefaultPageSize() - }, - view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb') - }; - - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); +define([], function () { + + return function (view, params, tabContent) { + + var self = this; + + var data = {}; + function getPageData() { + var key = getSavedQueryKey(); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "Series", + Recursive: true, + Fields: "DateCreated,SyncInfo,ItemCounts", + StartIndex: 0, + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb') + }; + + pageData.query.ParentId = params.topParentId; + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery() { + + return getPageData().query; + } + + function getSavedQueryKey() { + + return LibraryBrowser.getSavedQueryKey('genres'); + } + + function reloadItems(context) { + + Dashboard.showLoadingMsg(); + var query = getQuery(); + + ApiClient.getGenres(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var html = ''; + + var viewStyle = getPageData().view; + + $('.listTopPaging', context).html(LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + viewButton: false, + showLimit: false, + updatePageSizeSetting: false, + addLayoutButton: true, + currentLayout: viewStyle + })); + + if (viewStyle == "Thumb") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + context: 'tv', + showItemCounts: true, + centerText: true, + lazy: true, + overlayPlayButton: true + }); + } + else if (viewStyle == "ThumbCard") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + context: 'tv', + showItemCounts: true, + cardLayout: true, + showTitle: true, + lazy: true + }); + } + else if (viewStyle == "PosterCard") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'tv', + showItemCounts: true, + lazy: true, + cardLayout: true, + showTitle: true + }); + } + else if (viewStyle == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'tv', + centerText: true, + showItemCounts: true, + lazy: true, + overlayPlayButton: true + }); + } + + var elem = context.querySelector('#items'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', context).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(context); + }); + + $('.btnPreviousPage', context).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(context); + }); + + $('.btnChangeLayout', context).on('layoutchange', function (e, layout) { + getPageData().view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout); + reloadItems(context); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); + + Dashboard.hideLoadingMsg(); + }); } - return pageData; - } - - function getQuery() { - - return getPageData().query; - } - - function getSavedQueryKey() { - - return LibraryBrowser.getSavedQueryKey('genres'); - } - - function reloadItems(page) { - - Dashboard.showLoadingMsg(); - var query = getQuery(); - - ApiClient.getGenres(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var html = ''; - - var view = getPageData().view; - - $('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - viewButton: false, - showLimit: false, - updatePageSizeSetting: false, - addLayoutButton: true, - currentLayout: view - })); - - if (view == "Thumb") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - preferThumb: true, - context: 'tv', - showItemCounts: true, - centerText: true, - lazy: true, - overlayPlayButton: true - }); - } - else if (view == "ThumbCard") { - - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - preferThumb: true, - context: 'tv', - showItemCounts: true, - cardLayout: true, - showTitle: true, - lazy: true - }); - } - else if (view == "PosterCard") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "portrait", - context: 'tv', - showItemCounts: true, - lazy: true, - cardLayout: true, - showTitle: true - }); - } - else if (view == "Poster") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "portrait", - context: 'tv', - centerText: true, - showItemCounts: true, - lazy: true, - overlayPlayButton: true - }); - } - - var elem = page.querySelector('#items'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData().view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(), layout); - reloadItems(page); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); - - Dashboard.hideLoadingMsg(); - }); - } - - window.TvPage.renderGenresTab = function (page, tabContent) { - - if (LibraryBrowser.needsRefresh(tabContent)) { - reloadItems(tabContent); - } - }; - -})(jQuery, document); \ No newline at end of file + self.renderTab = function () { + + if (LibraryBrowser.needsRefresh(tabContent)) { + reloadItems(tabContent); + } + }; + }; +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvlatest.js b/dashboard-ui/scripts/tvlatest.js index 378db861b9..e25d09a420 100644 --- a/dashboard-ui/scripts/tvlatest.js +++ b/dashboard-ui/scripts/tvlatest.js @@ -1,87 +1,90 @@ -(function ($, document) { - - function getView() { - - return 'Thumb'; +define([], function () { + + function getView() { + + return 'Thumb'; + } + + function loadLatest(context, params) { + + Dashboard.showLoadingMsg(); + + var userId = Dashboard.getCurrentUserId(); + + var parentId = params.topParentId; + + var limit = 30; + + if (AppInfo.hasLowImageBandwidth) { + limit = 16; + } + + var options = { + + IncludeItemTypes: "Episode", + Limit: limit, + Fields: "PrimaryImageAspectRatio,SyncInfo", + ParentId: parentId, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb" + }; + + ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) { + + var view = getView(); + var html = ''; + + if (view == 'ThumbCard') { + + html += LibraryBrowser.getPosterViewHtml({ + items: items, + shape: "backdrop", + preferThumb: true, + inheritThumb: false, + showUnplayedIndicator: false, + showChildCountIndicator: true, + overlayText: false, + showParentTitle: true, + lazy: true, + showTitle: true, + cardLayout: true + }); + + } else if (view == 'Thumb') { + + html += LibraryBrowser.getPosterViewHtml({ + items: items, + shape: "backdrop", + preferThumb: true, + inheritThumb: false, + showParentTitle: false, + showUnplayedIndicator: false, + showChildCountIndicator: true, + overlayText: false, + centerText: true, + lazy: true, + showTitle: false, + overlayPlayButton: AppInfo.enableAppLayouts + }); + } + + var elem = context.querySelector('#latestEpisodes'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + + Dashboard.hideLoadingMsg(); + LibraryBrowser.setLastRefreshed(context); + }); } - - function loadLatest(page) { - - Dashboard.showLoadingMsg(); - - var userId = Dashboard.getCurrentUserId(); - - var parentId = LibraryMenu.getTopParentId(); - - var limit = 30; - - if (AppInfo.hasLowImageBandwidth) { - limit = 16; - } - - var options = { - - IncludeItemTypes: "Episode", - Limit: limit, - Fields: "PrimaryImageAspectRatio,SyncInfo", - ParentId: parentId, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb" + return function (view, params, tabContent) { + + var self = this; + + self.renderTab = function() { + + if (LibraryBrowser.needsRefresh(tabContent)) { + loadLatest(tabContent, params); + } }; - - ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) { - - var view = getView(); - var html = ''; - - if (view == 'ThumbCard') { - - html += LibraryBrowser.getPosterViewHtml({ - items: items, - shape: "backdrop", - preferThumb: true, - inheritThumb: false, - showUnplayedIndicator: false, - showChildCountIndicator: true, - overlayText: false, - showParentTitle: true, - lazy: true, - showTitle: true, - cardLayout: true - }); - - } else if (view == 'Thumb') { - - html += LibraryBrowser.getPosterViewHtml({ - items: items, - shape: "backdrop", - preferThumb: true, - inheritThumb: false, - showParentTitle: false, - showUnplayedIndicator: false, - showChildCountIndicator: true, - overlayText: false, - centerText: true, - lazy: true, - showTitle: false, - overlayPlayButton: AppInfo.enableAppLayouts - }); - } - - var elem = page.querySelector('#latestEpisodes'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - - Dashboard.hideLoadingMsg(); - LibraryBrowser.setLastRefreshed(page); - }); - } - - window.TvPage.renderLatestTab = function (page, tabContent) { - - if (LibraryBrowser.needsRefresh(tabContent)) { - loadLatest(tabContent); - } }; - -})(jQuery, document); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index 75e5c737c6..f12d743738 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -1,258 +1,246 @@ define(['libraryBrowser', 'scripts/alphapicker'], function (libraryBrowser) { - function getView() { - - return 'Thumb'; - } - - function getResumeView() { - - return 'Poster'; - } - - function reload(page) { - - Dashboard.showLoadingMsg(); - - loadResume(page); - loadNextUp(page); - } - - function loadNextUp(page) { - - var limit = AppInfo.hasLowImageBandwidth ? - 16 : - 24; - - var query = { - - Limit: limit, - Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,SyncInfo", - UserId: Dashboard.getCurrentUserId(), - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb" - }; - - query.ParentId = LibraryMenu.getTopParentId(); - - ApiClient.getNextUpEpisodes(query).then(function (result) { - - if (result.Items.length) { - page.querySelector('.noNextUpItems').classList.add('hide'); - } else { - page.querySelector('.noNextUpItems').classList.remove('hide'); - } - - var view = getView(); - var html = ''; - - if (view == 'ThumbCard') { - - html += libraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - showTitle: true, - preferThumb: true, - showParentTitle: true, - lazy: true, - cardLayout: true, - showDetailsMenu: true - }); - - } else if (view == 'Thumb') { - - html += libraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - showTitle: true, - showParentTitle: true, - overlayText: false, - lazy: true, - preferThumb: true, - showDetailsMenu: true, - centerText: true, - overlayPlayButton: AppInfo.enableAppLayouts - }); - } - - var elem = page.querySelector('#nextUpItems'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - Dashboard.hideLoadingMsg(); - - libraryBrowser.setLastRefreshed(page); - }); - } - - function enableScrollX() { - return browserInfo.mobile && AppInfo.enableAppLayouts; - } - - function getThumbShape() { - return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; - } - - function loadResume(page) { - - var parentId = LibraryMenu.getTopParentId(); - - var limit = 6; - - var options = { - - SortBy: "DatePlayed", - SortOrder: "Descending", - IncludeItemTypes: "Episode", - Filters: "IsResumable", - Limit: limit, - Recursive: true, - Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo", - ExcludeLocationTypes: "Virtual", - ParentId: parentId, - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb" - }; - - ApiClient.getItems(Dashboard.getCurrentUserId(), options).then(function (result) { - - if (result.Items.length) { - page.querySelector('#resumableSection').classList.remove('hide'); - } else { - page.querySelector('#resumableSection').classList.add('hide'); - } - - var view = getResumeView(); - var html = ''; - - if (view == 'PosterCard') { - - html += libraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: getThumbShape(), - showTitle: true, - showParentTitle: true, - lazy: true, - cardLayout: true, - showDetailsMenu: true, - preferThumb: true - }); - - } else if (view == 'Poster') { - - html += libraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: getThumbShape(), - showTitle: true, - showParentTitle: true, - lazy: true, - showDetailsMenu: true, - overlayPlayButton: true, - preferThumb: true, - centerText: true - }); - } - - var elem = page.querySelector('#resumableItems'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - }); - } - - function initSuggestedTab(page, tabContent) { - - if (enableScrollX()) { - tabContent.querySelector('#resumableItems').classList.add('hiddenScrollX'); - } else { - tabContent.querySelector('#resumableItems').classList.remove('hiddenScrollX'); - } - libraryBrowser.createCardMenus(tabContent.querySelector('#resumableItems')); - } - - function loadSuggestionsTab(page, tabContent) { - - 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: - initMethod = 'initSuggestedTab'; - 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'); - 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/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; - window.TvPage.initSuggestedTab = initSuggestedTab; - - function onPlaybackStop(e, state) { - - if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { - var page = $.mobile.activePage; - var pages = page.querySelector('neon-animated-pages'); - - pages.dispatchEvent(new CustomEvent("tabchange", {})); - } - } - return function (view, params) { - var tabs = view.querySelector('paper-tabs'); + var self = this; + + function getView() { + + return 'Thumb'; + } + + function getResumeView() { + + return 'Poster'; + } + + function reload() { + + Dashboard.showLoadingMsg(); + + loadResume(); + loadNextUp(); + } + + function loadNextUp() { + + var limit = AppInfo.hasLowImageBandwidth ? + 16 : + 24; + + var query = { + + Limit: limit, + Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,SyncInfo", + UserId: Dashboard.getCurrentUserId(), + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb" + }; + + query.ParentId = LibraryMenu.getTopParentId(); + + ApiClient.getNextUpEpisodes(query).then(function (result) { + + if (result.Items.length) { + view.querySelector('.noNextUpItems').classList.add('hide'); + } else { + view.querySelector('.noNextUpItems').classList.remove('hide'); + } + + var viewStyle = getView(); + var html = ''; + + if (viewStyle == 'ThumbCard') { + + html += libraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + showTitle: true, + preferThumb: true, + showParentTitle: true, + lazy: true, + cardLayout: true, + showDetailsMenu: true + }); + + } else if (viewStyle == 'Thumb') { + + html += libraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + showTitle: true, + showParentTitle: true, + overlayText: false, + lazy: true, + preferThumb: true, + showDetailsMenu: true, + centerText: true, + overlayPlayButton: AppInfo.enableAppLayouts + }); + } + + var elem = view.querySelector('#nextUpItems'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + Dashboard.hideLoadingMsg(); + + libraryBrowser.setLastRefreshed(view); + }); + } + + function enableScrollX() { + return browserInfo.mobile && AppInfo.enableAppLayouts; + } + + function getThumbShape() { + return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; + } + + function loadResume() { + + var parentId = LibraryMenu.getTopParentId(); + + var limit = 6; + + var options = { + + SortBy: "DatePlayed", + SortOrder: "Descending", + IncludeItemTypes: "Episode", + Filters: "IsResumable", + Limit: limit, + Recursive: true, + Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo", + ExcludeLocationTypes: "Virtual", + ParentId: parentId, + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb" + }; + + ApiClient.getItems(Dashboard.getCurrentUserId(), options).then(function (result) { + + if (result.Items.length) { + view.querySelector('#resumableSection').classList.remove('hide'); + } else { + view.querySelector('#resumableSection').classList.add('hide'); + } + + var viewStyle = getResumeView(); + var html = ''; + + if (viewStyle == 'PosterCard') { + + html += libraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: getThumbShape(), + showTitle: true, + showParentTitle: true, + lazy: true, + cardLayout: true, + showDetailsMenu: true, + preferThumb: true + }); + + } else if (viewStyle == 'Poster') { + + html += libraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: getThumbShape(), + showTitle: true, + showParentTitle: true, + lazy: true, + showDetailsMenu: true, + overlayPlayButton: true, + preferThumb: true, + centerText: true + }); + } + + var elem = view.querySelector('#resumableItems'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + }); + } + + self.initTab = function () { + + var tabContent = self.tabContent; + if (enableScrollX()) { + tabContent.querySelector('#resumableItems').classList.add('hiddenScrollX'); + } else { + tabContent.querySelector('#resumableItems').classList.remove('hiddenScrollX'); + } + libraryBrowser.createCardMenus(tabContent.querySelector('#resumableItems')); + }; + + self.renderTab = function () { + var tabContent = self.tabContent; + if (libraryBrowser.needsRefresh(tabContent)) { + reload(); + } + }; + + function loadTab(page, index) { + + var tabContent = page.querySelector('.pageTabContent[data-index=\'' + index + '\']'); + var depends = []; + + switch (index) { + + case 0: + break; + case 1: + depends.push('scripts/tvlatest'); + break; + case 2: + depends.push('scripts/tvupcoming'); + break; + case 3: + depends.push('scripts/tvshows'); + break; + case 4: + depends.push('scripts/episodes'); + break; + case 5: + depends.push('scripts/tvgenres'); + break; + case 6: + depends.push('scripts/tvstudios'); + break; + default: + break; + } + + require(depends, function (controllerFactory) { + + if (index == 0) { + self.tabContent = tabContent; + } + var controller = index ? new controllerFactory(view, params, tabContent) : self; + + if (controller.initTab) { + controller.initTab(); + tabContent.initComplete = true; + } + + controller.renderTab(); + + }); + } + + function onPlaybackStop(e, state) { + + if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { + var pages = view.querySelector('neon-animated-pages'); + + pages.dispatchEvent(new CustomEvent("tabchange", {})); + } + } + var pages = view.querySelector('neon-animated-pages'); var baseUrl = 'tv.html'; - var topParentId = LibraryMenu.getTopParentId(); + var topParentId = params.topParentId; if (topParentId) { baseUrl += '?topParentId=' + topParentId; } @@ -264,7 +252,7 @@ } libraryBrowser.createCardMenus(view.querySelector('#resumableItems')); - libraryBrowser.configurePaperLibraryTabs(view, tabs, pages, baseUrl); + libraryBrowser.configurePaperLibraryTabs(view, view.querySelector('paper-tabs'), pages, baseUrl); pages.addEventListener('tabchange', function (e) { loadTab(view, parseInt(this.selected)); @@ -272,23 +260,21 @@ view.addEventListener('viewbeforeshow', function (e) { - var page = this; + if (!view.getAttribute('data-title')) { - if (!page.getAttribute('data-title')) { - - var parentId = LibraryMenu.getTopParentId(); + var parentId = params.topParentId; if (parentId) { ApiClient.getItem(Dashboard.getCurrentUserId(), parentId).then(function (item) { - page.setAttribute('data-title', item.Name); + view.setAttribute('data-title', item.Name); LibraryMenu.setTitle(item.Name); }); } else { - page.setAttribute('data-title', Globalize.translate('TabShows')); + view.setAttribute('data-title', Globalize.translate('TabShows')); LibraryMenu.setTitle(Globalize.translate('TabShows')); } } @@ -298,7 +284,6 @@ view.addEventListener('viewbeforehide', function (e) { - var page = this; Events.off(MediaController, 'playbackstop', onPlaybackStop); }); }; diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index dbfa78739c..419016b1a4 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -1,270 +1,273 @@ -(function ($, document) { - - var data = {}; - - function getPageData(context) { - var key = getSavedQueryKey(context); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "Series", - Recursive: true, - Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", - ImageTypeLimit: 1, - 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; - } - - function getQuery(context) { - - return getPageData(context).query; - } - - function getSavedQueryKey(context) { - - if (!context.savedQueryKey) { - context.savedQueryKey = LibraryBrowser.getSavedQueryKey('series'); - } - return context.savedQueryKey; - } - - function reloadItems(page) { - - Dashboard.showLoadingMsg(); - - var query = getQuery(page); - - ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var view = getPageData(page).view; - - var html = ''; - var pagingHtml = LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false, - updatePageSizeSetting: false, - addLayoutButton: true, - sortButton: true, - currentLayout: view, - layouts: 'Banner,List,Poster,PosterCard,Thumb,ThumbCard', - filterButton: true - }); - - page.querySelector('.listTopPaging').innerHTML = pagingHtml; - - updateFilterControls(page); - - if (view == "Thumb") { - - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - preferThumb: true, - context: 'tv', - lazy: true, - overlayPlayButton: true - }); - - } - else if (view == "ThumbCard") { - - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - preferThumb: true, - context: 'tv', - lazy: true, - cardLayout: true, - showTitle: true, - showSeriesYear: true - }); - } - else if (view == "Banner") { - - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "banner", - preferBanner: true, - context: 'tv', - lazy: true - }); - } - else if (view == "List") { - - html = LibraryBrowser.getListViewHtml({ - items: result.Items, - context: 'tv', - sortBy: query.SortBy - }); - } - else if (view == "PosterCard") { - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "portrait", - context: 'tv', - showTitle: true, - showYear: true, - lazy: true, - cardLayout: true - }); - } - else { - - // Poster - html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "portrait", - context: 'tv', - centerText: true, - lazy: true, - overlayPlayButton: true - }); - } - - var elem = page.querySelector('#items'); - elem.innerHTML = html + pagingHtml; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { - getPageData(page).view = layout; - LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); - reloadItems(page); - }); - - $('.btnFilter', page).on('click', function () { - showFilterMenu(page); - }); - - // 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); - }, - query: query - }); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); - - LibraryBrowser.setLastRefreshed(page); - Dashboard.hideLoadingMsg(); - }); - } - - function showFilterMenu(page) { - - require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { - - var filterDialog = new filterDialogFactory({ - query: getQuery(page), - mode: 'series' - }); - - Events.on(filterDialog, 'filterchange', function () { - reloadItems(page); - }); - - filterDialog.show(); - }); - } - - function updateFilterControls(tabContent) { - - var query = getQuery(tabContent); - $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWith); - } - - function initPage(tabContent) { - - $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { - - var query = getQuery(tabContent); - query.NameStartsWithOrGreater = character; - query.StartIndex = 0; - - reloadItems(tabContent); - - }).on('alphaclear', function (e) { - - var query = getQuery(tabContent); - query.NameStartsWithOrGreater = ''; - - reloadItems(tabContent); - }); - } - - window.TvPage.initSeriesTab = function (page, tabContent) { - - initPage(tabContent); - }; - - window.TvPage.renderSeriesTab = function (page, tabContent) { - - if (LibraryBrowser.needsRefresh(tabContent)) { - reloadItems(tabContent); - updateFilterControls(tabContent); - } - }; - -})(jQuery, document); \ No newline at end of file +define([], function () { + + return function (view, params, tabContent) { + + var self = this; + + var data = {}; + + function getPageData(context) { + var key = getSavedQueryKey(context); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "Series", + Recursive: true, + Fields: "PrimaryImageAspectRatio,SortName,SyncInfo", + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb", + StartIndex: 0, + Limit: LibraryBrowser.getDefaultPageSize() + }, + view: LibraryBrowser.getSavedView(key) || LibraryBrowser.getDefaultItemsView('Poster', 'Thumb') + }; + + pageData.query.ParentId = params.topParentId; + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData; + } + + function getQuery(context) { + + return getPageData(context).query; + } + + function getSavedQueryKey(context) { + + if (!context.savedQueryKey) { + context.savedQueryKey = LibraryBrowser.getSavedQueryKey('series'); + } + return context.savedQueryKey; + } + + function reloadItems(page) { + + Dashboard.showLoadingMsg(); + + var query = getQuery(page); + + ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var view = getPageData(page).view; + + var html = ''; + var pagingHtml = LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false, + updatePageSizeSetting: false, + addLayoutButton: true, + sortButton: true, + currentLayout: view, + layouts: 'Banner,List,Poster,PosterCard,Thumb,ThumbCard', + filterButton: true + }); + + page.querySelector('.listTopPaging').innerHTML = pagingHtml; + + updateFilterControls(page); + + if (view == "Thumb") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + context: 'tv', + lazy: true, + overlayPlayButton: true + }); + + } + else if (view == "ThumbCard") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + preferThumb: true, + context: 'tv', + lazy: true, + cardLayout: true, + showTitle: true, + showSeriesYear: true + }); + } + else if (view == "Banner") { + + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "banner", + preferBanner: true, + context: 'tv', + lazy: true + }); + } + else if (view == "List") { + + html = LibraryBrowser.getListViewHtml({ + items: result.Items, + context: 'tv', + sortBy: query.SortBy + }); + } + else if (view == "PosterCard") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'tv', + showTitle: true, + showYear: true, + lazy: true, + cardLayout: true + }); + } + else { + + // Poster + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + context: 'tv', + centerText: true, + lazy: true, + overlayPlayButton: true + }); + } + + var elem = page.querySelector('#items'); + elem.innerHTML = html + pagingHtml; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', page).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(page); + }); + + $('.btnPreviousPage', page).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(page); + }); + + $('.btnChangeLayout', page).on('layoutchange', function (e, layout) { + getPageData(page).view = layout; + LibraryBrowser.saveViewSetting(getSavedQueryKey(page), layout); + reloadItems(page); + }); + + $('.btnFilter', page).on('click', function () { + showFilterMenu(page); + }); + + // 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); + }, + query: query + }); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(page), query); + + LibraryBrowser.setLastRefreshed(page); + Dashboard.hideLoadingMsg(); + }); + } + + function showFilterMenu(page) { + + require(['components/filterdialog/filterdialog'], function (filterDialogFactory) { + + var filterDialog = new filterDialogFactory({ + query: getQuery(page), + mode: 'series' + }); + + Events.on(filterDialog, 'filterchange', function () { + reloadItems(page); + }); + + filterDialog.show(); + }); + } + + function updateFilterControls(tabContent) { + + var query = getQuery(tabContent); + $('.alphabetPicker', tabContent).alphaValue(query.NameStartsWith); + } + + function initPage(tabContent) { + + $('.alphabetPicker', tabContent).on('alphaselect', function (e, character) { + + var query = getQuery(tabContent); + query.NameStartsWithOrGreater = character; + query.StartIndex = 0; + + reloadItems(tabContent); + + }).on('alphaclear', function (e) { + + var query = getQuery(tabContent); + query.NameStartsWithOrGreater = ''; + + reloadItems(tabContent); + }); + } + + self.initTab = function () { + + initPage(tabContent); + }; + self.renderTab = function () { + + if (LibraryBrowser.needsRefresh(tabContent)) { + reloadItems(tabContent); + updateFilterControls(tabContent); + } + }; + }; +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvstudios.js b/dashboard-ui/scripts/tvstudios.js index 0ce5e76ca6..4dedd76e8b 100644 --- a/dashboard-ui/scripts/tvstudios.js +++ b/dashboard-ui/scripts/tvstudios.js @@ -1,95 +1,98 @@ -(function ($, document) { - - // The base query options - var data = {}; - - function getQuery() { - - var key = getSavedQueryKey(); - var pageData = data[key]; - - if (!pageData) { - pageData = data[key] = { - query: { - SortBy: "SortName", - SortOrder: "Ascending", - IncludeItemTypes: "Series", - Recursive: true, - Fields: "DateCreated,ItemCounts", - StartIndex: 0, - Limit: LibraryBrowser.getDefaultPageSize() - } - }; - - pageData.query.ParentId = LibraryMenu.getTopParentId(); - LibraryBrowser.loadSavedQueryValues(key, pageData.query); - } - return pageData.query; +define([], function () { + + // The base query options + var data = {}; + + function getQuery(params) { + + var key = getSavedQueryKey(); + var pageData = data[key]; + + if (!pageData) { + pageData = data[key] = { + query: { + SortBy: "SortName", + SortOrder: "Ascending", + IncludeItemTypes: "Series", + Recursive: true, + Fields: "DateCreated,ItemCounts", + StartIndex: 0, + Limit: LibraryBrowser.getDefaultPageSize() + } + }; + + pageData.query.ParentId = params.topParentId; + LibraryBrowser.loadSavedQueryValues(key, pageData.query); + } + return pageData.query; + } + + function getSavedQueryKey() { + + return LibraryBrowser.getSavedQueryKey('studios'); + } + + function reloadItems(context, params) { + + var query = getQuery(params); + + Dashboard.showLoadingMsg(); + + ApiClient.getStudios(Dashboard.getCurrentUserId(), query).then(function (result) { + + // Scroll back up so they can see the results from the beginning + window.scrollTo(0, 0); + + var html = ''; + + $('.listTopPaging', context).html(LibraryBrowser.getQueryPagingHtml({ + startIndex: query.StartIndex, + limit: query.Limit, + totalRecordCount: result.TotalRecordCount, + showLimit: false + })); + + html += LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "backdrop", + showTitle: false, + context: 'tv', + preferThumb: true, + showItemCounts: true, + centerText: true, + lazy: true + + }); + + var elem = context.querySelector('#items'); + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); + + $('.btnNextPage', context).on('click', function () { + query.StartIndex += query.Limit; + reloadItems(context, params); + }); + + $('.btnPreviousPage', context).on('click', function () { + query.StartIndex -= query.Limit; + reloadItems(context, params); + }); + + LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); + + LibraryBrowser.setLastRefreshed(context); + Dashboard.hideLoadingMsg(); + }); } - - function getSavedQueryKey() { - - return LibraryBrowser.getSavedQueryKey('studios'); - } - - function reloadItems(page) { - - var query = getQuery(); - - Dashboard.showLoadingMsg(); - - ApiClient.getStudios(Dashboard.getCurrentUserId(), query).then(function (result) { - - // Scroll back up so they can see the results from the beginning - window.scrollTo(0, 0); - - var html = ''; - - $('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({ - startIndex: query.StartIndex, - limit: query.Limit, - totalRecordCount: result.TotalRecordCount, - showLimit: false - })); - - html += LibraryBrowser.getPosterViewHtml({ - items: result.Items, - shape: "backdrop", - showTitle: false, - context: 'tv', - preferThumb: true, - showItemCounts: true, - centerText: true, - lazy: true - - }); - - var elem = page.querySelector('#items'); - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - - $('.btnNextPage', page).on('click', function () { - query.StartIndex += query.Limit; - reloadItems(page); - }); - - $('.btnPreviousPage', page).on('click', function () { - query.StartIndex -= query.Limit; - reloadItems(page); - }); - - LibraryBrowser.saveQueryValues(getSavedQueryKey(), query); - - LibraryBrowser.setLastRefreshed(page); - Dashboard.hideLoadingMsg(); - }); - } - - window.TvPage.renderStudiosTab = function (page, tabContent) { - - if (LibraryBrowser.needsRefresh(tabContent)) { - reloadItems(tabContent); - } - }; - -})(jQuery, document); \ No newline at end of file + return function (view, params, tabContent) { + + var self = this; + + self.renderTab = function () { + + if (LibraryBrowser.needsRefresh(tabContent)) { + reloadItems(tabContent, params); + } + }; + }; +}); \ No newline at end of file diff --git a/dashboard-ui/scripts/tvupcoming.js b/dashboard-ui/scripts/tvupcoming.js index 75ba25c394..a4402edfed 100644 --- a/dashboard-ui/scripts/tvupcoming.js +++ b/dashboard-ui/scripts/tvupcoming.js @@ -1,133 +1,136 @@ -(function ($, document) { - - function loadUpcoming(page) { - - Dashboard.showLoadingMsg(); - - var limit = AppInfo.hasLowImageBandwidth && !enableScrollX() ? - 24 : - 40; - - var query = { - - Limit: limit, - Fields: "AirTime,UserData,SeriesStudio,SyncInfo", - UserId: Dashboard.getCurrentUserId(), - ImageTypeLimit: 1, - EnableImageTypes: "Primary,Backdrop,Banner,Thumb" - }; - - query.ParentId = LibraryMenu.getTopParentId(); - - ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).then(function (result) { - - var items = result.Items; - - if (items.length) { - page.querySelector('.noItemsMessage').style.display = 'none'; - } else { - page.querySelector('.noItemsMessage').style.display = 'block'; - } - - var elem = page.querySelector('#upcomingItems'); - renderUpcoming(elem, items); - - Dashboard.hideLoadingMsg(); - - LibraryBrowser.setLastRefreshed(page); - - }); +define([], function () { + + function loadUpcoming(context, params) { + + Dashboard.showLoadingMsg(); + + var limit = AppInfo.hasLowImageBandwidth && !enableScrollX() ? + 24 : + 40; + + var query = { + + Limit: limit, + Fields: "AirTime,UserData,SeriesStudio,SyncInfo", + UserId: Dashboard.getCurrentUserId(), + ImageTypeLimit: 1, + EnableImageTypes: "Primary,Backdrop,Banner,Thumb" + }; + + query.ParentId = params.topParentId; + + ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).then(function (result) { + + var items = result.Items; + + if (items.length) { + context.querySelector('.noItemsMessage').style.display = 'none'; + } else { + context.querySelector('.noItemsMessage').style.display = 'block'; + } + + var elem = context.querySelector('#upcomingItems'); + renderUpcoming(elem, items); + + Dashboard.hideLoadingMsg(); + + LibraryBrowser.setLastRefreshed(context); + + }); + } + + function enableScrollX() { + return browserInfo.mobile && AppInfo.enableAppLayouts; + } + + function getThumbShape() { + return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; + } + + function renderUpcoming(elem, items) { + + var groups = []; + + var currentGroupName = ''; + var currentGroup = []; + + var i, length; + + for (i = 0, length = items.length; i < length; i++) { + + var item = items[i]; + + var dateText = ''; + + if (item.PremiereDate) { + try { + + dateText = LibraryBrowser.getFutureDateText(parseISO8601Date(item.PremiereDate, { toLocal: true }), true); + + } catch (err) { + } + } + + if (dateText != currentGroupName) { + + if (currentGroup.length) { + groups.push({ + name: currentGroupName, + items: currentGroup + }); + } + + currentGroupName = dateText; + currentGroup = [item]; + } else { + currentGroup.push(item); + } + } + + var html = ''; + + for (i = 0, length = groups.length; i < length; i++) { + + var group = groups[i]; + + html += '
'; + html += '

' + group.name + '

'; + + if (enableScrollX()) { + html += '
'; + } else { + html += '
'; + } + + html += LibraryBrowser.getPosterViewHtml({ + items: group.items, + showLocationTypeIndicator: false, + shape: getThumbShape(), + showTitle: true, + showPremiereDate: true, + preferThumb: true, + lazy: true, + showDetailsMenu: true, + centerText: true + + }); + html += '
'; + + html += '
'; + } + + elem.innerHTML = html; + ImageLoader.lazyChildren(elem); } - - function enableScrollX() { - return browserInfo.mobile && AppInfo.enableAppLayouts; - } - - function getThumbShape() { - return enableScrollX() ? 'overflowBackdrop' : 'backdrop'; - } - - function renderUpcoming(elem, items) { - - var groups = []; - - var currentGroupName = ''; - var currentGroup = []; - - var i, length; - - for (i = 0, length = items.length; i < length; i++) { - - var item = items[i]; - - var dateText = ''; - - if (item.PremiereDate) { - try { - - dateText = LibraryBrowser.getFutureDateText(parseISO8601Date(item.PremiereDate, { toLocal: true }), true); - - } catch (err) { - } - } - - if (dateText != currentGroupName) { - - if (currentGroup.length) { - groups.push({ - name: currentGroupName, - items: currentGroup - }); - } - - currentGroupName = dateText; - currentGroup = [item]; - } else { - currentGroup.push(item); - } - } - - var html = ''; - - for (i = 0, length = groups.length; i < length; i++) { - - var group = groups[i]; - - html += '
'; - html += '

' + group.name + '

'; - - if (enableScrollX()) { - html += '
'; - } else { - html += '
'; - } - - html += LibraryBrowser.getPosterViewHtml({ - items: group.items, - showLocationTypeIndicator: false, - shape: getThumbShape(), - showTitle: true, - showPremiereDate: true, - preferThumb: true, - lazy: true, - showDetailsMenu: true, - centerText: true - - }); - html += '
'; - - html += '
'; - } - - elem.innerHTML = html; - ImageLoader.lazyChildren(elem); - } - - window.TvPage.renderUpcomingTab = function (page, tabContent) { - - if (LibraryBrowser.needsRefresh(tabContent)) { - loadUpcoming(tabContent); - } - }; - -})(jQuery, document); \ No newline at end of file + return function (view, params, tabContent) { + + var self = this; + + self.renderTab = function () { + + if (LibraryBrowser.needsRefresh(tabContent)) { + loadUpcoming(tabContent, params); + } + }; + }; +}); \ No newline at end of file diff --git a/dashboard-ui/secondaryitems.html b/dashboard-ui/secondaryitems.html index 929961f866..a2f595d35b 100644 --- a/dashboard-ui/secondaryitems.html +++ b/dashboard-ui/secondaryitems.html @@ -1,4 +1,4 @@ -
+