From f9e79c0a4eda2b6aca51244eb59d7541c47a7fdb Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 21:28:16 +0100 Subject: [PATCH 01/10] Migration of list.js and screensavermanager to ES6 modules --- .eslintignore | 1 - package.json | 2 + src/controllers/list.js | 270 ++++++++++++++-------------- src/libraries/screensavermanager.js | 256 +++++++++++++------------- 4 files changed, 264 insertions(+), 265 deletions(-) diff --git a/.eslintignore b/.eslintignore index 8e3aee83f..74b18ddcf 100644 --- a/.eslintignore +++ b/.eslintignore @@ -2,4 +2,3 @@ node_modules dist .idea .vscode -src/libraries diff --git a/package.json b/package.json index 30c0c481e..f412c0671 100644 --- a/package.json +++ b/package.json @@ -188,6 +188,7 @@ "src/controllers/dashboard/users/userparentalcontrol.js", "src/controllers/dashboard/users/userpasswordpage.js", "src/controllers/dashboard/users/userprofilespage.js", + "src/controllers/list.js", "src/controllers/playback/queue/index.js", "src/controllers/playback/video/index.js", "src/controllers/searchpage.js", @@ -230,6 +231,7 @@ "src/elements/emby-tabs/emby-tabs.js", "src/elements/emby-textarea/emby-textarea.js", "src/elements/emby-toggle/emby-toggle.js", + "src/libraries/screensavermanager.js", "src/plugins/backdropScreensaver/plugin.js", "src/plugins/bookPlayer/plugin.js", "src/plugins/bookPlayer/tableOfContents.js", diff --git a/src/controllers/list.js b/src/controllers/list.js index e550b535f..c7c4b2a31 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -1,8 +1,21 @@ -define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager', 'cardBuilder', 'loading', 'connectionManager', 'alphaNumericShortcuts', 'scroller', 'playbackManager', 'alphaPicker', 'emby-itemscontainer', 'emby-scroller'], function (globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, scroller, playbackManager, AlphaPicker) { - 'use strict'; +import globalize from 'globalize'; +import listView from 'listView'; +import layoutManager from 'layoutManager'; +import * as userSettings from 'userSettings'; +import focusManager from 'focusManager'; +import cardBuilder from 'cardBuilder'; +import loading from 'loading'; +import connectionManager from 'connectionManager'; +import AlphaNumericShortcuts from 'alphaNumericShortcuts'; +import playbackManager from 'playbackManager'; +import AlphaPicker from 'alphaPicker'; +import 'emby-itemscontainer'; +import 'emby-scroller'; + +/* eslint-disable indent */ function getInitialLiveTvQuery(instance, params) { - var query = { + const query = { UserId: connectionManager.getApiClient(params.serverId).getCurrentUserId(), StartIndex: 0, Fields: 'ChannelInfo,PrimaryImageAspectRatio', @@ -59,7 +72,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function modifyQueryWithFilters(instance, query) { - var sortValues = instance.getSortValues(); + const sortValues = instance.getSortValues(); if (!query.SortBy) { query.SortBy = sortValues.sortBy; @@ -68,9 +81,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' query.Fields = query.Fields ? query.Fields + ',PrimaryImageAspectRatio' : 'PrimaryImageAspectRatio'; query.ImageTypeLimit = 1; - var hasFilters; - var queryFilters = []; - var filters = instance.getFilters(); + let hasFilters; + const queryFilters = []; + const filters = instance.getFilters(); if (filters.IsPlayed) { queryFilters.push('IsPlayed'); @@ -164,21 +177,21 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function updateSortText(instance) { - var btnSortText = instance.btnSortText; + const btnSortText = instance.btnSortText; if (btnSortText) { - var options = instance.getSortMenuOptions(); - var values = instance.getSortValues(); - var sortBy = values.sortBy; + const options = instance.getSortMenuOptions(); + const values = instance.getSortValues(); + const sortBy = values.sortBy; - for (var i = 0, length = options.length; i < length; i++) { + for (let i = 0, length = options.length; i < length; i++) { if (sortBy === options[i].value) { btnSortText.innerHTML = globalize.translate('SortByValue', options[i].name); break; } } - var btnSortIcon = instance.btnSortIcon; + const btnSortIcon = instance.btnSortIcon; if (btnSortIcon) { setSortButtonIcon(btnSortIcon, 'Descending' === values.sortOrder ? 'arrow_downward' : 'arrow_upward'); @@ -198,10 +211,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' function updateAlphaPickerState(instance, numItems) { if (instance.alphaPicker) { - var alphaPicker = instance.alphaPickerElement; + const alphaPicker = instance.alphaPickerElement; if (alphaPicker) { - var values = instance.getSortValues(); + const values = instance.getSortValues(); if (null == numItems) { numItems = 100; @@ -219,7 +232,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function getItems(instance, params, item, sortBy, startIndex, limit) { - var apiClient = connectionManager.getApiClient(params.serverId); + const apiClient = connectionManager.getApiClient(params.serverId); instance.queryRecursive = false; if ('Recordings' === params.type) { @@ -248,7 +261,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' if (!item) { instance.queryRecursive = true; - var method = 'getItems'; + let method = 'getItems'; if ('MusicArtist' === params.type) { method = 'getArtists'; @@ -271,7 +284,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' if ('Genre' === item.Type || 'MusicGenre' === item.Type || 'Studio' === item.Type || 'Person' === item.Type) { instance.queryRecursive = true; - var query = { + const query = { StartIndex: startIndex, Limit: limit, Fields: 'PrimaryImageAspectRatio,SortName', @@ -320,8 +333,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' return Promise.resolve(null); } - var apiClient = connectionManager.getApiClient(params.serverId); - var itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId; + const apiClient = connectionManager.getApiClient(params.serverId); + const itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId; if (itemId) { return apiClient.getItem(apiClient.getCurrentUserId(), itemId); @@ -331,9 +344,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function showViewSettingsMenu() { - var instance = this; + const instance = this; - require(['viewSettings'], function (ViewSettings) { + import('viewSettings').then(({default: ViewSettings}) => { new ViewSettings().show({ settingsKey: instance.getSettingsKey(), settings: instance.getViewSettings(), @@ -346,9 +359,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function showFilterMenu() { - var instance = this; + const instance = this; - require(['filterMenu'], function (FilterMenu) { + import('filterMenu').then(({default: FilterMenu}) => { new FilterMenu().show({ settingsKey: instance.getSettingsKey(), settings: instance.getFilters(), @@ -365,9 +378,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function showSortMenu() { - var instance = this; + const instance = this; - require(['sortMenu'], function (SortMenu) { + import('sortMenu').then(({default: SortMenu}) => { new SortMenu().show({ settingsKey: instance.getSettingsKey(), settings: instance.getSortValues(), @@ -383,9 +396,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function onNewItemClick() { - var instance = this; + const instance = this; - require(['playlistEditor'], function (playlistEditor) { + import('playlistEditor').then(({default: playlistEditor}) => { new playlistEditor.showEditor({ items: [], serverId: instance.params.serverId @@ -394,7 +407,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function hideOrShowAll(elems, hide) { - for (var i = 0, length = elems.length; i < length; i++) { + for (let i = 0, length = elems.length; i < length; i++) { if (hide) { elems[i].classList.add('hide'); } else { @@ -404,12 +417,13 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function bindAll(elems, eventName, fn) { - for (var i = 0, length = elems.length; i < length; i++) { + for (let i = 0, length = elems.length; i < length; i++) { elems[i].addEventListener(eventName, fn); } } - function ItemsView(view, params) { +class ItemsView { + constructor(view, params) { function fetchData() { return getItems(self, params, self.currentItem).then(function (result) { if (null == self.totalItemCount) { @@ -422,7 +436,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function getItemsHtml(items) { - var settings = self.getViewSettings(); + const settings = self.getViewSettings(); if ('list' === settings.imageType) { return listView.getListViewHtml({ @@ -430,13 +444,13 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' }); } - var shape; - var preferThumb; - var preferDisc; - var preferLogo; - var defaultShape; - var item = self.currentItem; - var lines = settings.showTitle ? 2 : 0; + let shape; + let preferThumb; + let preferDisc; + let preferLogo; + let defaultShape; + const item = self.currentItem; + let lines = settings.showTitle ? 2 : 0; if ('banner' === settings.imageType) { shape = 'banner'; @@ -460,7 +474,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' shape = 'autoVertical'; } - var posterOptions = { + let posterOptions = { shape: shape, showTitle: settings.showTitle, showYear: settings.showTitle, @@ -493,19 +507,19 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' lines = 1; } else if ('Programs' === params.type) { lines = settings.showTitle ? 1 : 0; - var showParentTitle = settings.showTitle && 'true' !== params.IsMovie; + const showParentTitle = settings.showTitle && 'true' !== params.IsMovie; if (showParentTitle) { lines++; } - var showAirTime = settings.showTitle && 'Recordings' !== params.type; + const showAirTime = settings.showTitle && 'Recordings' !== params.type; if (showAirTime) { lines++; } - var showYear = settings.showTitle && 'true' === params.IsMovie && 'Recordings' === params.type; + const showYear = settings.showTitle && 'true' === params.IsMovie && 'Recordings' === params.type; if (showYear) { lines++; @@ -538,7 +552,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' function initAlphaPicker() { self.scroller = view.querySelector('.scrollFrameY'); - var alphaPickerElement = self.alphaPickerElement; + const alphaPickerElement = self.alphaPickerElement; alphaPickerElement.classList.add('alphaPicker-fixed-right'); alphaPickerElement.classList.add('focuscontainer-right'); @@ -649,7 +663,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function play() { - var currentItem = self.currentItem; + const currentItem = self.currentItem; if (currentItem && !self.hasFilters) { playbackManager.play({ @@ -665,7 +679,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function queue() { - var currentItem = self.currentItem; + const currentItem = self.currentItem; if (currentItem && !self.hasFilters) { playbackManager.queue({ @@ -681,7 +695,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } function shuffle() { - var currentItem = self.currentItem; + const currentItem = self.currentItem; if (currentItem && !self.hasFilters) { playbackManager.shuffle(currentItem); @@ -694,7 +708,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } } - var self = this; + const self = this; self.params = params; this.itemsContainer = view.querySelector('.itemsContainer'); @@ -708,20 +722,20 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' this.itemsContainer.setAttribute('data-refreshinterval', '300000'); } - var i; - var length; - var btnViewSettings = view.querySelectorAll('.btnViewSettings'); + let i; + let length; + const btnViewSettings = view.querySelectorAll('.btnViewSettings'); for (i = 0, length = btnViewSettings.length; i < length; i++) { btnViewSettings[i].addEventListener('click', showViewSettingsMenu.bind(this)); } - var filterButtons = view.querySelectorAll('.btnFilter'); + const filterButtons = view.querySelectorAll('.btnFilter'); this.filterButtons = filterButtons; - var hasVisibleFilters = this.getVisibleFilters().length; + const hasVisibleFilters = this.getVisibleFilters().length; for (i = 0, length = filterButtons.length; i < length; i++) { - var btnFilter = filterButtons[i]; + const btnFilter = filterButtons[i]; btnFilter.addEventListener('click', showFilterMenu.bind(this)); if (hasVisibleFilters) { @@ -731,10 +745,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } } - var sortButtons = view.querySelectorAll('.btnSort'); + const sortButtons = view.querySelectorAll('.btnSort'); for (this.sortButtons = sortButtons, i = 0, length = sortButtons.length; i < length; i++) { - var sortButton = sortButtons[i]; + const sortButton = sortButtons[i]; sortButton.addEventListener('click', showSortMenu.bind(this)); if ('nextup' !== params.type) { @@ -749,7 +763,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' self.itemsContainer.fetchData = fetchData; self.itemsContainer.getItemsHtml = getItemsHtml; view.addEventListener('viewshow', function (e) { - var isRestored = e.detail.isRestored; + const isRestored = e.detail.isRestored; if (!isRestored) { loading.show(); @@ -761,7 +775,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' getItem(params).then(function (item) { setTitle(item); self.currentItem = item; - var refresh = !isRestored; + const refresh = !isRestored; self.itemsContainer.resume({ refresh: refresh }).then(function () { @@ -776,7 +790,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' initAlphaPicker(); } - var itemType = item ? item.Type : null; + const itemType = item ? item.Type : null; if ('MusicGenre' === itemType || 'Programs' !== params.type && 'Channel' !== itemType) { hideOrShowAll(view.querySelectorAll('.btnPlay'), false); @@ -808,13 +822,13 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' }); }); view.addEventListener('viewhide', function (e) { - var itemsContainer = self.itemsContainer; + const itemsContainer = self.itemsContainer; if (itemsContainer) { itemsContainer.pause(); } - var alphaNumericShortcuts = self.alphaNumericShortcuts; + const alphaNumericShortcuts = self.alphaNumericShortcuts; if (alphaNumericShortcuts) { alphaNumericShortcuts.destroy(); @@ -841,9 +855,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' self.alphaPickerElement = null; }); } - - ItemsView.prototype.getFilters = function () { - var basekey = this.getSettingsKey(); + getFilters() { + const basekey = this.getSettingsKey(); return { IsPlayed: 'true' === userSettings.getFilter(basekey + '-filter-IsPlayed'), IsUnplayed: 'true' === userSettings.getFilter(basekey + '-filter-IsUnplayed'), @@ -862,30 +875,27 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' HasThemeVideo: userSettings.getFilter(basekey + '-filter-HasThemeVideo'), GenreIds: userSettings.getFilter(basekey + '-filter-GenreIds') }; - }; - - ItemsView.prototype.getSortValues = function () { - var basekey = this.getSettingsKey(); + } + getSortValues() { + const basekey = this.getSettingsKey(); return { sortBy: userSettings.getFilter(basekey + '-sortby') || this.getDefaultSortBy(), sortOrder: 'Descending' === userSettings.getFilter(basekey + '-sortorder') ? 'Descending' : 'Ascending' }; - }; - - ItemsView.prototype.getDefaultSortBy = function () { - var params = this.params; - var sortNameOption = this.getNameSortOption(params); + } + getDefaultSortBy() { + const params = this.params; + const sortNameOption = this.getNameSortOption(params); if (params.type) { return sortNameOption.value; } return 'IsFolder,' + sortNameOption.value; - }; - - ItemsView.prototype.getSortMenuOptions = function () { - var sortBy = []; - var params = this.params; + } + getSortMenuOptions() { + const sortBy = []; + const params = this.params; if ('Programs' === params.type) { sortBy.push({ @@ -894,7 +904,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' }); } - var option = this.getNameSortOption(params); + let option = this.getNameSortOption(params); if (option) { sortBy.push(option); @@ -952,9 +962,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' value: 'Runtime,SortName' }); return sortBy; - }; - - ItemsView.prototype.getNameSortOption = function (params) { + } + getNameSortOption(params) { if ('Episode' === params.type) { return { name: globalize.translate('Name'), @@ -966,9 +975,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' name: globalize.translate('Name'), value: 'SortName' }; - }; - - ItemsView.prototype.getPlayCountSortOption = function () { + } + getPlayCountSortOption() { if ('Programs' === this.params.type) { return null; } @@ -977,9 +985,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' name: globalize.translate('PlayCount'), value: 'PlayCount,SortName' }; - }; - - ItemsView.prototype.getDatePlayedSortOption = function () { + } + getDatePlayedSortOption() { if ('Programs' === this.params.type) { return null; } @@ -988,9 +995,8 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' name: globalize.translate('DatePlayed'), value: 'DatePlayed,SortName' }; - }; - - ItemsView.prototype.getCriticRatingSortOption = function () { + } + getCriticRatingSortOption() { if ('Programs' === this.params.type) { return null; } @@ -999,18 +1005,16 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' name: globalize.translate('CriticRating'), value: 'CriticRating,SortName' }; - }; - - ItemsView.prototype.getCommunityRatingSortOption = function () { + } + getCommunityRatingSortOption() { return { name: globalize.translate('CommunityRating'), value: 'CommunityRating,SortName' }; - }; - - ItemsView.prototype.getVisibleFilters = function () { - var filters = []; - var params = this.params; + } + getVisibleFilters() { + const filters = []; + const params = this.params; if (!('nextup' === params.type)) { if ('Programs' === params.type) { @@ -1034,16 +1038,15 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } return filters; - }; - - ItemsView.prototype.setFilterStatus = function (hasFilters) { + } + setFilterStatus(hasFilters) { this.hasFilters = hasFilters; - var filterButtons = this.filterButtons; + const filterButtons = this.filterButtons; if (filterButtons.length) { - for (var i = 0, length = filterButtons.length; i < length; i++) { - var btnFilter = filterButtons[i]; - var bubble = btnFilter.querySelector('.filterButtonBubble'); + for (let i = 0, length = filterButtons.length; i < length; i++) { + const btnFilter = filterButtons[i]; + let bubble = btnFilter.querySelector('.filterButtonBubble'); if (!bubble) { if (!hasFilters) { @@ -1062,10 +1065,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } } } - }; - - ItemsView.prototype.getFilterMenuOptions = function () { - var params = this.params; + } + getFilterMenuOptions() { + const params = this.params; return { IsAiring: params.IsAiring, IsMovie: params.IsMovie, @@ -1075,11 +1077,10 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' IsSeries: params.IsSeries, Recursive: this.queryRecursive }; - }; - - ItemsView.prototype.getVisibleViewSettings = function () { - var item = (this.params, this.currentItem); - var fields = ['showTitle']; + } + getVisibleViewSettings() { + const item = (this.params, this.currentItem); + const fields = ['showTitle']; if (!item || 'PhotoAlbum' !== item.Type && 'ChannelFolderItem' !== item.Type) { fields.push('imageType'); @@ -1087,13 +1088,12 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' fields.push('viewType'); return fields; - }; - - ItemsView.prototype.getViewSettings = function () { - var basekey = this.getSettingsKey(); - var params = this.params; - var item = this.currentItem; - var showTitle = userSettings.get(basekey + '-showTitle'); + } + getViewSettings() { + const basekey = this.getSettingsKey(); + const params = this.params; + const item = this.currentItem; + let showTitle = userSettings.get(basekey + '-showTitle'); if ('true' === showTitle) { showTitle = true; @@ -1105,7 +1105,7 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' showTitle = true; } - var imageType = userSettings.get(basekey + '-imageType'); + let imageType = userSettings.get(basekey + '-imageType'); if (!imageType && 'nextup' === params.type) { imageType = 'thumb'; @@ -1117,10 +1117,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' imageType: imageType || 'primary', viewType: userSettings.get(basekey + '-viewType') || 'images' }; - }; - - ItemsView.prototype.getItemTypes = function () { - var params = this.params; + } + getItemTypes() { + const params = this.params; if ('nextup' === params.type) { return ['Episode']; @@ -1131,12 +1130,11 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } return []; - }; - - ItemsView.prototype.getSettingsKey = function () { - var values = []; + } + getSettingsKey() { + const values = []; values.push('items'); - var params = this.params; + const params = this.params; if (params.type) { values.push(params.type); @@ -1193,7 +1191,9 @@ define(['globalize', 'listView', 'layoutManager', 'userSettings', 'focusManager' } return values.join('-'); - }; + } +} - return ItemsView; -}); +export default ItemsView; + +/* eslint-enable indent */ diff --git a/src/libraries/screensavermanager.js b/src/libraries/screensavermanager.js index b9d708285..61d128ff1 100644 --- a/src/libraries/screensavermanager.js +++ b/src/libraries/screensavermanager.js @@ -1,132 +1,130 @@ -define(["events", "playbackManager", "pluginManager", "inputManager", "connectionManager", "userSettings"], function (events, playbackManager, pluginManager, inputManager, connectionManager, userSettings) { - "use strict"; +import events from 'events'; +import playbackManager from 'playbackManager'; +import pluginManager from 'pluginManager'; +import inputManager from 'inputManager'; +import connectionManager from 'connectionManager'; +import * as userSettings from 'userSettings'; - function getMinIdleTime() { - // Returns the minimum amount of idle time required before the screen saver can be displayed - //time units used Millisecond - return 180000; +function getMinIdleTime() { + // Returns the minimum amount of idle time required before the screen saver can be displayed + //time units used Millisecond + return 180000; +} + +let lastFunctionalEvent = 0; + +function getFunctionalEventIdleTime() { + return new Date().getTime() - lastFunctionalEvent; +} + +events.on(playbackManager, 'playbackstop', function (e, stopInfo) { + const state = stopInfo.state; + if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') { + lastFunctionalEvent = new Date().getTime(); } - - var lastFunctionalEvent = 0; - - function getFunctionalEventIdleTime() { - return new Date().getTime() - lastFunctionalEvent; - } - - events.on(playbackManager, "playbackstop", function (e, stopInfo) { - var state = stopInfo.state; - if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") { - lastFunctionalEvent = new Date().getTime(); - } - }); - - function getScreensaverPlugin(isLoggedIn) { - - var option; - try { - option = userSettings.get("screensaver", false); - } catch (err) { - option = isLoggedIn ? "backdropscreensaver" : "logoscreensaver"; - } - - var plugins = pluginManager.ofType("screensaver"); - - for (var i = 0, length = plugins.length; i < length; i++) { - var plugin = plugins[i]; - - if (plugin.id === option) { - return plugin; - } - } - - return null; - } - - function ScreenSaverManager() { - - var self = this; - var activeScreenSaver; - - function showScreenSaver(screensaver) { - - if (activeScreenSaver) { - throw new Error("An existing screensaver is already active."); - } - - console.debug("Showing screensaver " + screensaver.name); - - screensaver.show(); - activeScreenSaver = screensaver; - - if (screensaver.hideOnClick !== false) { - window.addEventListener("click", hide, true); - } - if (screensaver.hideOnMouse !== false) { - window.addEventListener("mousemove", hide, true); - } - if (screensaver.hideOnKey !== false) { - window.addEventListener("keydown", hide, true); - } - } - - function hide() { - if (activeScreenSaver) { - console.debug("Hiding screensaver"); - activeScreenSaver.hide(); - activeScreenSaver = null; - } - - window.removeEventListener("click", hide, true); - window.removeEventListener("mousemove", hide, true); - window.removeEventListener("keydown", hide, true); - } - - self.isShowing = function () { - return activeScreenSaver != null; - }; - - self.show = function () { - var isLoggedIn; - var apiClient = connectionManager.currentApiClient(); - - if (apiClient && apiClient.isLoggedIn()) { - isLoggedIn = true; - } - - var screensaver = getScreensaverPlugin(isLoggedIn); - - if (screensaver) { - showScreenSaver(screensaver); - } - }; - - self.hide = function () { - hide(); - }; - - function onInterval() { - - if (self.isShowing()) { - return; - } - - if (inputManager.idleTime() < getMinIdleTime()) { - return; - } - - if (getFunctionalEventIdleTime < getMinIdleTime()) { - return; - } - - if (playbackManager.isPlayingVideo()) { - return; - } - - self.show(); - } - - setInterval(onInterval, 10000); - } - - return new ScreenSaverManager(); }); + +function getScreensaverPlugin(isLoggedIn) { + let option; + try { + option = userSettings.get('screensaver', false); + } catch (err) { + option = isLoggedIn ? 'backdropscreensaver' : 'logoscreensaver'; + } + + const plugins = pluginManager.ofType('screensaver'); + + for (let i = 0, length = plugins.length; i < length; i++) { + const plugin = plugins[i]; + + if (plugin.id === option) { + return plugin; + } + } + + return null; +} + +function ScreenSaverManager() { + let activeScreenSaver; + + function showScreenSaver(screensaver) { + if (activeScreenSaver) { + throw new Error('An existing screensaver is already active.'); + } + + console.debug('Showing screensaver ' + screensaver.name); + + screensaver.show(); + activeScreenSaver = screensaver; + + if (screensaver.hideOnClick !== false) { + window.addEventListener('click', hide, true); + } + if (screensaver.hideOnMouse !== false) { + window.addEventListener('mousemove', hide, true); + } + if (screensaver.hideOnKey !== false) { + window.addEventListener('keydown', hide, true); + } + } + + function hide() { + if (activeScreenSaver) { + console.debug('Hiding screensaver'); + activeScreenSaver.hide(); + activeScreenSaver = null; + } + + window.removeEventListener('click', hide, true); + window.removeEventListener('mousemove', hide, true); + window.removeEventListener('keydown', hide, true); + } + + this.isShowing = () => { + return activeScreenSaver != null; + }; + + this.show = function () { + let isLoggedIn; + const apiClient = connectionManager.currentApiClient(); + + if (apiClient && apiClient.isLoggedIn()) { + isLoggedIn = true; + } + + const screensaver = getScreensaverPlugin(isLoggedIn); + + if (screensaver) { + showScreenSaver(screensaver); + } + }; + + this.hide = function () { + hide(); + }; + + const onInterval = () => { + if (this.isShowing()) { + return; + } + + if (inputManager.idleTime() < getMinIdleTime()) { + return; + } + + if (getFunctionalEventIdleTime < getMinIdleTime()) { + return; + } + + if (playbackManager.isPlayingVideo()) { + return; + } + + this.show(); + }; + + setInterval(onInterval, 10000); +} + +export default new ScreenSaverManager; From d63a229e0ef0573af125e29d8981faf2a89a040f Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 28 Jul 2020 21:43:46 +0100 Subject: [PATCH 02/10] fix lint --- src/libraries/navdrawer/navdrawer.js | 86 ++++++++++++++-------------- src/libraries/scroller.js | 39 ------------- 2 files changed, 43 insertions(+), 82 deletions(-) diff --git a/src/libraries/navdrawer/navdrawer.js b/src/libraries/navdrawer/navdrawer.js index d9c246b40..750dd510b 100644 --- a/src/libraries/navdrawer/navdrawer.js +++ b/src/libraries/navdrawer/navdrawer.js @@ -1,5 +1,5 @@ -define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, dom) { - "use strict"; +define(['browser', 'dom', 'css!./navdrawer', 'scrollStyles'], function (browser, dom) { + 'use strict'; return function (options) { function getTouches(e) { @@ -7,7 +7,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, } function onMenuTouchStart(e) { - options.target.classList.remove("transition"); + options.target.classList.remove('transition'); var touches = getTouches(e); var touch = touches[0] || {}; menuTouchStartX = touch.clientX; @@ -36,7 +36,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, if (0 === dragMode && (!isOpen || Math.abs(deltaX) >= 10) && Math.abs(deltaY) < 5) { dragMode = 1; - scrollContainer.addEventListener("scroll", disableEvent); + scrollContainer.addEventListener('scroll', disableEvent); self.showMask(); } else if (0 === dragMode && Math.abs(deltaY) >= 5) { dragMode = 2; @@ -49,8 +49,8 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, } function onMenuTouchEnd(e) { - options.target.classList.add("transition"); - scrollContainer.removeEventListener("scroll", disableEvent); + options.target.classList.add('transition'); + scrollContainer.removeEventListener('scroll', disableEvent); dragMode = 0; var touches = getTouches(e); var touch = touches[0] || {}; @@ -69,9 +69,9 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, if (((getTouches(e)[0] || {}).clientX || 0) <= options.handleSize) { isPeeking = true; - if (e.type === "touchstart") { - dom.removeEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {}); - dom.addEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {}); + if (e.type === 'touchstart') { + dom.removeEventListener(edgeContainer, 'touchmove', onEdgeTouchMove, {}); + dom.addEventListener(edgeContainer, 'touchmove', onEdgeTouchMove, {}); } onMenuTouchStart(e); @@ -88,7 +88,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, function onEdgeTouchEnd(e) { if (isPeeking) { isPeeking = false; - dom.removeEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {}); + dom.removeEventListener(edgeContainer, 'touchmove', onEdgeTouchMove, {}); onMenuTouchEnd(e); } } @@ -142,8 +142,8 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, function onMaskTransitionEnd() { var classList = mask.classList; - if (!classList.contains("backdrop")) { - classList.add("hide"); + if (!classList.contains('backdrop')) { + classList.add('hide'); } } @@ -155,10 +155,10 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, var startPoint = 0; var countStart = 0; var velocity = 0; - options.target.classList.add("transition"); + options.target.classList.add('transition'); var dragMode = 0; - var scrollContainer = options.target.querySelector(".mainDrawer-scrollContainer"); - scrollContainer.classList.add("scrollY"); + var scrollContainer = options.target.querySelector('.mainDrawer-scrollContainer'); + scrollContainer.classList.add('scrollY'); var TouchMenuLA = function () { self = this; @@ -173,13 +173,13 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, }; TouchMenuLA.prototype.initElements = function () { - options.target.classList.add("touch-menu-la"); - options.target.style.width = options.width + "px"; - options.target.style.left = -options.width + "px"; + options.target.classList.add('touch-menu-la'); + options.target.style.width = options.width + 'px'; + options.target.style.left = -options.width + 'px'; if (!options.disableMask) { - mask = document.createElement("div"); - mask.className = "tmla-mask hide"; + mask = document.createElement('div'); + mask.className = 'tmla-mask hide'; document.body.appendChild(mask); dom.addEventListener(mask, dom.whichTransitionEvent(), onMaskTransitionEnd, { passive: true @@ -190,12 +190,12 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, var menuTouchStartX; var menuTouchStartY; var menuTouchStartTime; - var edgeContainer = document.querySelector(".mainDrawerHandle"); + var edgeContainer = document.querySelector('.mainDrawerHandle'); var isPeeking = false; TouchMenuLA.prototype.animateToPosition = function (pos) { requestAnimationFrame(function () { - options.target.style.transform = pos ? "translateX(" + pos + "px)" : "none"; + options.target.style.transform = pos ? 'translateX(' + pos + 'px)' : 'none'; }); }; @@ -206,7 +206,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, }; TouchMenuLA.prototype.clickMaskClose = function () { - mask.addEventListener("click", function () { + mask.addEventListener('click', function () { self.close(); }); }; @@ -233,7 +233,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, this.animateToPosition(options.width); currentPos = options.width; this.isVisible = true; - options.target.classList.add("drawer-open"); + options.target.classList.add('drawer-open'); self.showMask(); self.invoke(options.onChange); }; @@ -242,7 +242,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, this.animateToPosition(0); currentPos = 0; self.isVisible = false; - options.target.classList.remove("drawer-open"); + options.target.classList.remove('drawer-open'); self.hideMask(); self.invoke(options.onChange); }; @@ -259,13 +259,13 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, var backgroundTouchStartTime; TouchMenuLA.prototype.showMask = function () { - mask.classList.remove("hide"); - mask.classList.add("backdrop"); + mask.classList.remove('hide'); + mask.classList.add('backdrop'); }; TouchMenuLA.prototype.hideMask = function () { - mask.classList.add("hide"); - mask.classList.remove("backdrop"); + mask.classList.add('hide'); + mask.classList.remove('backdrop'); }; TouchMenuLA.prototype.invoke = function (fn) { @@ -282,26 +282,26 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, if (enabled) { if (!_edgeSwipeEnabled) { _edgeSwipeEnabled = true; - dom.addEventListener(edgeContainer, "touchstart", onEdgeTouchStart, { + dom.addEventListener(edgeContainer, 'touchstart', onEdgeTouchStart, { passive: true }); - dom.addEventListener(edgeContainer, "touchend", onEdgeTouchEnd, { + dom.addEventListener(edgeContainer, 'touchend', onEdgeTouchEnd, { passive: true }); - dom.addEventListener(edgeContainer, "touchcancel", onEdgeTouchEnd, { + dom.addEventListener(edgeContainer, 'touchcancel', onEdgeTouchEnd, { passive: true }); } } else { if (_edgeSwipeEnabled) { _edgeSwipeEnabled = false; - dom.removeEventListener(edgeContainer, "touchstart", onEdgeTouchStart, { + dom.removeEventListener(edgeContainer, 'touchstart', onEdgeTouchStart, { passive: true }); - dom.removeEventListener(edgeContainer, "touchend", onEdgeTouchEnd, { + dom.removeEventListener(edgeContainer, 'touchend', onEdgeTouchEnd, { passive: true }); - dom.removeEventListener(edgeContainer, "touchcancel", onEdgeTouchEnd, { + dom.removeEventListener(edgeContainer, 'touchcancel', onEdgeTouchEnd, { passive: true }); } @@ -320,26 +320,26 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, self.initElements(); if (browser.touch) { - dom.addEventListener(options.target, "touchstart", onMenuTouchStart, { + dom.addEventListener(options.target, 'touchstart', onMenuTouchStart, { passive: true }); - dom.addEventListener(options.target, "touchmove", onMenuTouchMove, { + dom.addEventListener(options.target, 'touchmove', onMenuTouchMove, { passive: true }); - dom.addEventListener(options.target, "touchend", onMenuTouchEnd, { + dom.addEventListener(options.target, 'touchend', onMenuTouchEnd, { passive: true }); - dom.addEventListener(options.target, "touchcancel", onMenuTouchEnd, { + dom.addEventListener(options.target, 'touchcancel', onMenuTouchEnd, { passive: true }); - dom.addEventListener(mask, "touchstart", onBackgroundTouchStart, { + dom.addEventListener(mask, 'touchstart', onBackgroundTouchStart, { passive: true }); - dom.addEventListener(mask, "touchmove", onBackgroundTouchMove, {}); - dom.addEventListener(mask, "touchend", onBackgroundTouchEnd, { + dom.addEventListener(mask, 'touchmove', onBackgroundTouchMove, {}); + dom.addEventListener(mask, 'touchend', onBackgroundTouchEnd, { passive: true }); - dom.addEventListener(mask, "touchcancel", onBackgroundTouchEnd, { + dom.addEventListener(mask, 'touchcancel', onBackgroundTouchEnd, { passive: true }); } diff --git a/src/libraries/scroller.js b/src/libraries/scroller.js index 645a8ea85..464b31059 100644 --- a/src/libraries/scroller.js +++ b/src/libraries/scroller.js @@ -52,8 +52,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc var dragTouchEvents = ['touchmove', 'touchend']; var wheelEvent = (document.implementation.hasFeature('Event.wheel', '3.0') ? 'wheel' : 'mousewheel'); var interactiveElements = ['INPUT', 'SELECT', 'TEXTAREA']; - var tmpArray = []; - var time; // Math shorthands var abs = Math.abs; @@ -61,10 +59,8 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc var pow = Math.pow; var round = Math.round; var max = Math.max; - var min = Math.min; var scrollerFactory = function (frame, options) { - // Extend options var o = Object.assign({}, { slidee: null, // Selector, DOM element, or jQuery object with DOM element representing SLIDEE. @@ -97,11 +93,9 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc // native smooth scroll options.enableNativeScroll = true; } else if (options.requireAnimation && (browser.animate || browser.supportsCssAnimation())) { - // transform is the only way to guarantee animation options.enableNativeScroll = false; } else if (!layoutManager.tv || !browser.animate) { - options.enableNativeScroll = true; } @@ -162,9 +156,7 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc var frameSize = 0; var slideeSize = 0; function ensureSizeInfo() { - if (requiresReflow) { - requiresReflow = false; // Reset global variables @@ -186,11 +178,9 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc * @return {Void} */ function load(isInit) { - requiresReflow = true; if (!isInit) { - ensureSizeInfo(); // Fix possible overflowing @@ -200,7 +190,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc } function initFrameResizeObserver() { - var observerOptions = {}; self.frameResizeObserver = new ResizeObserver(onResize, observerOptions); @@ -225,16 +214,13 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc }; function nativeScrollTo(container, pos, immediate) { - if (container.scroll) { if (o.horizontal) { - container.scroll({ left: pos, behavior: immediate ? 'instant' : 'smooth' }); } else { - container.scroll({ top: pos, behavior: immediate ? 'instant' : 'smooth' @@ -266,14 +252,12 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc * @return {Void} */ self.slideTo = function (newPos, immediate, fullItemPos) { - ensureSizeInfo(); var pos = self._pos; newPos = within(newPos, pos.start, pos.end); if (!transform) { - nativeScrollTo(nativeScrollElement, newPos, immediate); return; } @@ -291,7 +275,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc } if (!immediate && o.skipSlideToWhenVisible && fullItemPos && fullItemPos.isVisible) { - return; } @@ -303,7 +286,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc }; function setStyleProperty(elem, name, value, speed, resetTransition) { - var style = elem.style; if (resetTransition || browser.edge) { @@ -325,7 +307,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc } function renderAnimateWithTransform(fromPosition, toPosition, immediate) { - var speed = o.speed; if (immediate) { @@ -343,7 +324,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc } function getBoundingClientRect(elem) { - // Support: BlackBerry 5, iOS 3 (original iPhone) // If we don't have gBCR, just use 0,0 rather than error if (elem.getBoundingClientRect) { @@ -361,14 +341,10 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc * @return {Object} */ self.getPos = function (item) { - var scrollElement = transform ? slideeElement : nativeScrollElement; var slideeOffset = getBoundingClientRect(scrollElement); var itemOffset = getBoundingClientRect(item); - var slideeStartPos = o.horizontal ? slideeOffset.left : slideeOffset.top; - var slideeEndPos = o.horizontal ? slideeOffset.right : slideeOffset.bottom; - var offset = o.horizontal ? itemOffset.left - slideeOffset.left : itemOffset.top - slideeOffset.top; var size = o.horizontal ? itemOffset.width : itemOffset.height; @@ -405,7 +381,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc }; self.getCenterPosition = function (item) { - ensureSizeInfo(); var pos = self.getPos(item); @@ -450,7 +425,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc // Bind dragging events if (transform) { - if (isTouch) { dragTouchEvents.forEach(function (eventName) { dom.addEventListener(document, eventName, dragHandler, { @@ -554,9 +528,7 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc * @return {Boolean} */ function isInteractive(element) { - while (element) { - if (interactiveElements.indexOf(element.tagName) !== -1) { return true; } @@ -592,7 +564,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc * @return {Void} */ function scrollHandler(event) { - ensureSizeInfo(); var pos = self._pos; // Ignore if there is no scrolling to be done @@ -609,7 +580,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc self.slideBy(o.scrollBy * delta); } else { - if (isSmoothScrollSupported) { delta *= 12; } @@ -628,7 +598,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc * @return {Void} */ self.destroy = function () { - if (self.frameResizeObserver) { self.frameResizeObserver.disconnect(); self.frameResizeObserver = null; @@ -664,11 +633,9 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc var contentRect = {}; function onResize(entries) { - var entry = entries[0]; if (entry) { - var newRect = entry.contentRect; // handle element being hidden @@ -677,7 +644,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc } if (newRect.width !== contentRect.width || newRect.height !== contentRect.height) { - contentRect = newRect; load(false); @@ -703,7 +669,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc } self.getScrollPosition = function () { - if (transform) { return self._pos.cur; } @@ -716,7 +681,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc }; self.getScrollSize = function () { - if (transform) { return slideeSize; } @@ -792,7 +756,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc initFrameResizeObserver(); if (transform) { - dom.addEventListener(dragSourceElement, 'touchstart', dragInitSlidee, { passive: true }); @@ -809,9 +772,7 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc passive: true }); } - } else if (o.horizontal) { - // Don't bind to mouse events with vertical scroll since the mouse wheel can handle this natively if (o.mouseWheel) { From 275676f7126655981fa4600661be4519049da358 Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 2 Aug 2020 17:58:21 +0100 Subject: [PATCH 03/10] remove defaults --- src/controllers/list.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index c7c4b2a31..aea791c16 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -558,7 +558,7 @@ class ItemsView { alphaPickerElement.classList.add('focuscontainer-right'); self.itemsContainer.parentNode.classList.add('padded-right-withalphapicker'); - self.alphaPicker = new AlphaPicker.default({ + self.alphaPicker = new AlphaPicker({ element: alphaPickerElement, itemsContainer: layoutManager.tv ? self.itemsContainer : null, itemClass: 'card', @@ -817,7 +817,7 @@ class ItemsView { bindAll(view.querySelectorAll('.btnShuffle'), 'click', shuffle); } - self.alphaNumericShortcuts = new AlphaNumericShortcuts.default({ + self.alphaNumericShortcuts = new AlphaNumericShortcuts({ itemsContainer: self.itemsContainer }); }); From 6b54d25b4d36b44eb357244ea8a06028d240c567 Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 2 Aug 2020 18:06:40 +0100 Subject: [PATCH 04/10] Update list.js --- src/controllers/list.js | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index 7dab6f5f3..b9237887d 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -14,9 +14,6 @@ import 'emby-scroller'; /* eslint-disable indent */ - playbackManager = playbackManager.default || playbackManager; - loading = loading.default || loading; - function getInitialLiveTvQuery(instance, params) { const query = { UserId: connectionManager.getApiClient(params.serverId).getCurrentUserId(), @@ -523,7 +520,7 @@ class ItemsView { } const showYear = settings.showTitle && params.IsMovie === 'true' && params.type === 'Recordings'; - + if (showYear) { lines++; } @@ -858,6 +855,7 @@ class ItemsView { self.alphaPickerElement = null; }); } + getFilters() { const basekey = this.getSettingsKey(); return { @@ -879,6 +877,7 @@ class ItemsView { GenreIds: userSettings.getFilter(basekey + '-filter-GenreIds') }; } + getSortValues() { const basekey = this.getSettingsKey(); return { @@ -886,6 +885,7 @@ class ItemsView { sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending' }; } + getDefaultSortBy() { const params = this.params; const sortNameOption = this.getNameSortOption(params); @@ -896,6 +896,7 @@ class ItemsView { return 'IsFolder,' + sortNameOption.value; } + getSortMenuOptions() { const sortBy = []; const params = this.params; @@ -966,6 +967,7 @@ class ItemsView { }); return sortBy; } + getNameSortOption(params) { if (params.type === 'Episode') { return { @@ -979,6 +981,7 @@ class ItemsView { value: 'SortName' }; } + getPlayCountSortOption() { if (this.params.type === 'Programs') { return null; @@ -988,8 +991,8 @@ class ItemsView { name: globalize.translate('PlayCount'), value: 'PlayCount,SortName' }; - } + getDatePlayedSortOption() { if (this.params.type === 'Programs') { return null; @@ -1000,12 +1003,9 @@ class ItemsView { value: 'DatePlayed,SortName' }; } + getCriticRatingSortOption() { if (this.params.type === 'Programs') { - }; - - ItemsView.prototype.getCriticRatingSortOption = function () { - if () { return null; } @@ -1014,12 +1014,14 @@ class ItemsView { value: 'CriticRating,SortName' }; } + getCommunityRatingSortOption() { return { name: globalize.translate('CommunityRating'), value: 'CommunityRating,SortName' }; } + getVisibleFilters() { const filters = []; const params = this.params; @@ -1047,6 +1049,7 @@ class ItemsView { return filters; } + setFilterStatus(hasFilters) { this.hasFilters = hasFilters; const filterButtons = this.filterButtons; @@ -1074,6 +1077,7 @@ class ItemsView { } } } + getFilterMenuOptions() { const params = this.params; return { @@ -1086,6 +1090,7 @@ class ItemsView { Recursive: this.queryRecursive }; } + getVisibleViewSettings() { const item = (this.params, this.currentItem); const fields = ['showTitle']; @@ -1097,6 +1102,7 @@ class ItemsView { fields.push('viewType'); return fields; } + getViewSettings() { const basekey = this.getSettingsKey(); const params = this.params; @@ -1126,6 +1132,7 @@ class ItemsView { viewType: userSettings.get(basekey + '-viewType') || 'images' }; } + getItemTypes() { const params = this.params; @@ -1139,6 +1146,7 @@ class ItemsView { return []; } + getSettingsKey() { const values = []; values.push('items'); From 57fb1331666e1f57cfe0111cbb15a5d5a071c969 Mon Sep 17 00:00:00 2001 From: Cameron Date: Sun, 2 Aug 2020 18:09:17 +0100 Subject: [PATCH 05/10] fix yoda --- src/libraries/navdrawer/navdrawer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/navdrawer/navdrawer.js b/src/libraries/navdrawer/navdrawer.js index d70ef9096..41e7af333 100644 --- a/src/libraries/navdrawer/navdrawer.js +++ b/src/libraries/navdrawer/navdrawer.js @@ -32,19 +32,19 @@ define(['browser', 'dom', 'css!./navdrawer', 'scrollStyles'], function (browser, var deltaY = endY - (menuTouchStartY || 0); setVelocity(deltaX); - if (isOpen && 1 !== dragMode && deltaX > 0) { + if (isOpen && dragMode !== 1 && deltaX > 0) { dragMode = 2; } - if (0 === dragMode && (!isOpen || Math.abs(deltaX) >= 10) && Math.abs(deltaY) < 5) { + if (dragMode === 0 && (!isOpen || Math.abs(deltaX) >= 10) && Math.abs(deltaY) < 5) { dragMode = 1; scrollContainer.addEventListener('scroll', disableEvent); self.showMask(); - } else if (0 === dragMode && Math.abs(deltaY) >= 5) { + } else if (dragMode === 0 && Math.abs(deltaY) >= 5) { dragMode = 2; } - if (1 === dragMode) { + if (dragMode === 1) { newPos = currentPos + deltaX; self.changeMenuPos(); } From 8e17d603a87dc7581334b362c6c5c54048e542e2 Mon Sep 17 00:00:00 2001 From: Cameron Date: Tue, 4 Aug 2020 21:43:24 +0100 Subject: [PATCH 06/10] Update list.js --- src/controllers/list.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index b9237887d..7d35bcf5c 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -722,11 +722,9 @@ class ItemsView { this.itemsContainer.setAttribute('data-refreshinterval', '300000'); } - let i; - let length; const btnViewSettings = view.querySelectorAll('.btnViewSettings'); - for (i = 0, length = btnViewSettings.length; i < length; i++) { + for (let i = 0, length = btnViewSettings.length; i < length; i++) { btnViewSettings[i].addEventListener('click', showViewSettingsMenu.bind(this)); } @@ -734,7 +732,7 @@ class ItemsView { this.filterButtons = filterButtons; const hasVisibleFilters = this.getVisibleFilters().length; - for (i = 0, length = filterButtons.length; i < length; i++) { + for (let i = 0, length = filterButtons.length; i < length; i++) { const btnFilter = filterButtons[i]; btnFilter.addEventListener('click', showFilterMenu.bind(this)); From 6e5dc7f7d11672ad70567cc3953220f6cd242611 Mon Sep 17 00:00:00 2001 From: Cameron Date: Wed, 5 Aug 2020 20:08:42 +0100 Subject: [PATCH 07/10] lint --- src/controllers/list.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index 7d35bcf5c..979bb76a2 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -744,7 +744,8 @@ class ItemsView { } const sortButtons = view.querySelectorAll('.btnSort'); - + let i; + let length; for (this.sortButtons = sortButtons, i = 0, length = sortButtons.length; i < length; i++) { const sortButton = sortButtons[i]; sortButton.addEventListener('click', showSortMenu.bind(this)); From 0872f3f0010263d48a3b546031d215a7f2c3c3b4 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Aug 2020 09:27:11 +0100 Subject: [PATCH 08/10] Apply suggestions --- src/controllers/list.js | 49 +++++++++++++---------------- src/libraries/screensavermanager.js | 4 +-- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index 979bb76a2..2c3b966c4 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -184,9 +184,9 @@ import 'emby-scroller'; const values = instance.getSortValues(); const sortBy = values.sortBy; - for (let i = 0, length = options.length; i < length; i++) { - if (sortBy === options[i].value) { - btnSortText.innerHTML = globalize.translate('SortByValue', options[i].name); + for (const option of options) { + if (sortBy === option.value) { + btnSortText.innerHTML = globalize.translate('SortByValue', option.name); break; } } @@ -407,18 +407,18 @@ import 'emby-scroller'; } function hideOrShowAll(elems, hide) { - for (let i = 0, length = elems.length; i < length; i++) { + for (const elem of elems) { if (hide) { - elems[i].classList.add('hide'); + elem.classList.add('hide'); } else { - elems[i].classList.remove('hide'); + elem.classList.remove('hide'); } } } function bindAll(elems, eventName, fn) { - for (let i = 0, length = elems.length; i < length; i++) { - elems[i].addEventListener(eventName, fn); + for (const elem of elems) { + elem.addEventListener(eventName, fn); } } @@ -724,16 +724,15 @@ class ItemsView { const btnViewSettings = view.querySelectorAll('.btnViewSettings'); - for (let i = 0, length = btnViewSettings.length; i < length; i++) { - btnViewSettings[i].addEventListener('click', showViewSettingsMenu.bind(this)); + for (const btnViewSetting of btnViewSettings) { + btnViewSetting.addEventListener('click', showViewSettingsMenu.bind(this)); } const filterButtons = view.querySelectorAll('.btnFilter'); this.filterButtons = filterButtons; const hasVisibleFilters = this.getVisibleFilters().length; - for (let i = 0, length = filterButtons.length; i < length; i++) { - const btnFilter = filterButtons[i]; + for (const btnFilter of filterButtons) { btnFilter.addEventListener('click', showFilterMenu.bind(this)); if (hasVisibleFilters) { @@ -744,10 +743,9 @@ class ItemsView { } const sortButtons = view.querySelectorAll('.btnSort'); - let i; - let length; - for (this.sortButtons = sortButtons, i = 0, length = sortButtons.length; i < length; i++) { - const sortButton = sortButtons[i]; + + this.sortButtons = sortButtons; + for (const sortButton of sortButtons) { sortButton.addEventListener('click', showSortMenu.bind(this)); if (params.type !== 'nextup') { @@ -886,10 +884,9 @@ class ItemsView { } getDefaultSortBy() { - const params = this.params; - const sortNameOption = this.getNameSortOption(params); + const sortNameOption = this.getNameSortOption(this.params); - if (params.type) { + if (this.params.type) { return sortNameOption.value; } @@ -898,16 +895,15 @@ class ItemsView { getSortMenuOptions() { const sortBy = []; - const params = this.params; - if (params.type === 'Programs') { + if (this.params.type === 'Programs') { sortBy.push({ name: globalize.translate('AirDate'), value: 'StartDate,SortName' }); } - let option = this.getNameSortOption(params); + let option = this.getNameSortOption(this.params); if (option) { sortBy.push(option); @@ -925,7 +921,7 @@ class ItemsView { sortBy.push(option); } - if (params.type !== 'Programs') { + if (this.params.type !== 'Programs') { sortBy.push({ name: globalize.translate('DateAdded'), value: 'DateCreated,SortName' @@ -938,8 +934,8 @@ class ItemsView { sortBy.push(option); } - if (!params.type) { - option = this.getNameSortOption(params); + if (!this.params.type) { + option = this.getNameSortOption(this.params); sortBy.push({ name: globalize.translate('Folders'), value: 'IsFolder,' + option.value @@ -1054,8 +1050,7 @@ class ItemsView { const filterButtons = this.filterButtons; if (filterButtons.length) { - for (let i = 0, length = filterButtons.length; i < length; i++) { - const btnFilter = filterButtons[i]; + for (const btnFilter of filterButtons) { let bubble = btnFilter.querySelector('.filterButtonBubble'); if (!bubble) { diff --git a/src/libraries/screensavermanager.js b/src/libraries/screensavermanager.js index 61d128ff1..5c24ec63d 100644 --- a/src/libraries/screensavermanager.js +++ b/src/libraries/screensavermanager.js @@ -34,9 +34,7 @@ function getScreensaverPlugin(isLoggedIn) { const plugins = pluginManager.ofType('screensaver'); - for (let i = 0, length = plugins.length; i < length; i++) { - const plugin = plugins[i]; - + for (const plugin of plugins) { if (plugin.id === option) { return plugin; } From dbb6cd97301cc111ae54f500e683d88759b579c4 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Aug 2020 22:46:12 +0100 Subject: [PATCH 09/10] Lint --- src/libraries/scroller.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libraries/scroller.js b/src/libraries/scroller.js index 4bfcb7d5b..c460ec5b2 100644 --- a/src/libraries/scroller.js +++ b/src/libraries/scroller.js @@ -883,4 +883,4 @@ scrollerFactory.create = function (frame, options) { return Promise.resolve(instance); }; -export default scrollerFactory; \ No newline at end of file +export default scrollerFactory; From 28d34b1bae8f8b77458fb98c11f134c8fed1ad52 Mon Sep 17 00:00:00 2001 From: Cameron Date: Fri, 7 Aug 2020 23:13:54 +0100 Subject: [PATCH 10/10] Update src/controllers/list.js Co-authored-by: Dmitry Lyzo <56478732+dmitrylyzo@users.noreply.github.com> --- src/controllers/list.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/list.js b/src/controllers/list.js index 2c3b966c4..0027c576f 100644 --- a/src/controllers/list.js +++ b/src/controllers/list.js @@ -399,7 +399,7 @@ import 'emby-scroller'; const instance = this; import('playlistEditor').then(({default: playlistEditor}) => { - new playlistEditor.showEditor({ + new playlistEditor({ items: [], serverId: instance.params.serverId });