diff --git a/.eslintrc.js b/.eslintrc.js index baf6d0e084..765db89daa 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,7 +28,7 @@ module.exports = { ], rules: { 'block-spacing': ['error'], - 'brace-style': ['error'], + 'brace-style': ['error', "1tbs", { "allowSingleLine": true }], 'comma-dangle': ['error', 'never'], 'comma-spacing': ['error'], 'eol-last': ['error'], @@ -39,7 +39,10 @@ module.exports = { 'no-multi-spaces': ['error'], 'no-multiple-empty-lines': ['error', { 'max': 1 }], 'no-trailing-spaces': ['error'], + 'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], + "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }], 'one-var': ['error', 'never'], + 'padded-blocks': ['error', 'never'], 'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], 'semi': ['error'], 'space-before-blocks': ['error'], @@ -98,9 +101,8 @@ module.exports = { }, rules: { // TODO: Fix warnings and remove these rules - 'no-redeclare': ['warn'], - 'no-unused-vars': ['warn'], - 'no-useless-escape': ['warn'], + 'no-redeclare': ['off'], + 'no-useless-escape': ['off'], // TODO: Remove after ES6 migration is complete 'import/no-unresolved': ['off'] }, diff --git a/package.json b/package.json index e0a16bc55f..1d5bd016c6 100644 --- a/package.json +++ b/package.json @@ -14,9 +14,9 @@ "autoprefixer": "^9.8.5", "babel-eslint": "^11.0.0-beta.2", "babel-loader": "^8.0.6", - "browser-sync": "^2.26.10", + "browser-sync": "^2.26.12", "copy-webpack-plugin": "^5.1.1", - "css-loader": "^3.6.0", + "css-loader": "^4.0.0", "cssnano": "^4.1.10", "del": "^5.1.0", "eslint": "^6.8.0", @@ -76,7 +76,6 @@ "query-string": "^6.13.1", "resize-observer-polyfill": "^1.5.1", "screenfull": "^5.0.2", - "shaka-player": "^2.5.13", "sortablejs": "^1.10.2", "swiper": "^5.4.5", "webcomponents.js": "^0.7.24", @@ -158,11 +157,11 @@ "src/components/syncPlay/playbackPermissionManager.js", "src/components/syncPlay/syncPlayManager.js", "src/components/syncPlay/timeSyncManager.js", - "src/controllers/auth/addserver.js", - "src/controllers/auth/forgotpassword.js", - "src/controllers/auth/forgotpasswordpin.js", - "src/controllers/auth/login.js", - "src/controllers/auth/selectserver.js", + "src/controllers/session/addServer/index.js", + "src/controllers/session/forgotPassword/index.js", + "src/controllers/session/redeemPassword/index.js", + "src/controllers/session/login/index.js", + "src/controllers/sessopm/selectServer/index.js", "src/controllers/dashboard/apikeys.js", "src/controllers/dashboard/dashboard.js", "src/controllers/dashboard/devices/device.js", @@ -179,7 +178,7 @@ "src/controllers/dashboard/metadatanfo.js", "src/controllers/dashboard/networking.js", "src/controllers/dashboard/playback.js", - "src/controllers/dashboard/plugins/repositories.js", + "src/controllers/dashboard/plugins/repositories/index.js", "src/controllers/dashboard/scheduledtasks/scheduledtask.js", "src/controllers/dashboard/scheduledtasks/scheduledtasks.js", "src/controllers/dashboard/serveractivity.js", @@ -190,8 +189,8 @@ "src/controllers/dashboard/users/userparentalcontrol.js", "src/controllers/dashboard/users/userpasswordpage.js", "src/controllers/dashboard/users/userprofilespage.js", - "src/controllers/playback/nowplaying.js", - "src/controllers/playback/videoosd.js", + "src/controllers/playback/queue/index.js", + "src/controllers/playback/video/index.js", "src/controllers/searchpage.js", "src/controllers/shows/episodes.js", "src/controllers/shows/tvgenres.js", @@ -200,18 +199,18 @@ "src/controllers/shows/tvshows.js", "src/controllers/shows/tvstudios.js", "src/controllers/shows/tvupcoming.js", - "src/controllers/user/display.js", - "src/controllers/user/home.js", - "src/controllers/user/menu.js", - "src/controllers/user/playback.js", - "src/controllers/user/profile.js", - "src/controllers/user/subtitles.js", - "src/controllers/user/subtitles.js", - "src/controllers/wizard/finish.js", - "src/controllers/wizard/remoteaccess.js", - "src/controllers/wizard/settings.js", - "src/controllers/wizard/start.js", - "src/controllers/wizard/user.js", + "src/controllers/user/display/index.js", + "src/controllers/user/home/index.js", + "src/controllers/user/menu/index.js", + "src/controllers/user/playback/index.js", + "src/controllers/user/profile/index.js", + "src/controllers/user/subtitles/index.js", + "src/controllers/user/subtitles/index.js", + "src/controllers/wizard/finish/index.js", + "src/controllers/wizard/remote/index.js", + "src/controllers/wizard/settings/index.js", + "src/controllers/wizard/start/index.js", + "src/controllers/wizard/user/index.js", "src/elements/emby-button/emby-button.js", "src/elements/emby-button/paper-icon-button-light.js", "src/elements/emby-checkbox/emby-checkbox.js", diff --git a/src/assets/css/site.css b/src/assets/css/site.css index f6326f4c9e..38e056df89 100644 --- a/src/assets/css/site.css +++ b/src/assets/css/site.css @@ -133,3 +133,13 @@ div[data-role=page] { .w-100 { width: 100%; } + +.margin-auto-x { + margin-left: auto; + margin-right: auto; +} + +.margin-auto-y { + margin-top: auto; + margin-bottom: auto; +} diff --git a/src/bundle.js b/src/bundle.js index dd1ff6548b..ae2a59f0d5 100644 --- a/src/bundle.js +++ b/src/bundle.js @@ -78,12 +78,6 @@ _define('webcomponents', function() { return webcomponents; }); -// shaka -var shaka = require('shaka-player'); -_define('shaka', function() { - return shaka; -}); - // libass-wasm var libassWasm = require('libass-wasm'); _define('JavascriptSubtitlesOctopus', function() { diff --git a/src/components/actionSheet/actionSheet.js b/src/components/actionSheet/actionSheet.js index a68d6a6acd..937cd2afe5 100644 --- a/src/components/actionSheet/actionSheet.js +++ b/src/components/actionSheet/actionSheet.js @@ -9,7 +9,6 @@ import 'scrollStyles'; import 'listViewStyle'; function getOffsets(elems) { - let results = []; if (!document) { @@ -31,7 +30,6 @@ function getOffsets(elems) { } function getPosition(options, dlg) { - const windowSize = dom.getWindowSize(); const windowHeight = windowSize.innerHeight; const windowWidth = windowSize.innerWidth; @@ -80,7 +78,6 @@ function centerFocus(elem, horiz, on) { } export function show(options) { - // items // positionTo // showCancel @@ -98,7 +95,6 @@ export function show(options) { isFullscreen = true; dialogOptions.autoFocus = true; } else { - dialogOptions.modal = false; dialogOptions.entryAnimation = options.entryAnimation; dialogOptions.exitAnimation = options.exitAnimation; @@ -136,7 +132,6 @@ export function show(options) { let icons = []; let itemIcon; for (const item of options.items) { - itemIcon = item.icon || (item.selected ? 'check' : null); if (itemIcon) { @@ -161,7 +156,6 @@ export function show(options) { } if (options.title) { - html += '

' + options.title + '

'; } if (options.text) { @@ -197,7 +191,6 @@ export function show(options) { const item = options.items[i]; if (item.divider) { - html += '
'; continue; } @@ -255,8 +248,6 @@ export function show(options) { }); } - // Seeing an issue in some non-chrome browsers where this is requiring a double click - //var eventName = browser.firefox ? 'mousedown' : 'click'; let selectedId; let timeout; @@ -267,26 +258,20 @@ export function show(options) { } return new Promise(function (resolve, reject) { - let isResolved; dlg.addEventListener('click', function (e) { - const actionSheetMenuItem = dom.parentWithClass(e.target, 'actionSheetMenuItem'); if (actionSheetMenuItem) { selectedId = actionSheetMenuItem.getAttribute('data-id'); if (options.resolveOnClick) { - if (options.resolveOnClick.indexOf) { - if (options.resolveOnClick.indexOf(selectedId) !== -1) { - resolve(selectedId); isResolved = true; } - } else { resolve(selectedId); isResolved = true; @@ -295,11 +280,9 @@ export function show(options) { dialogHelper.close(dlg); } - }); dlg.addEventListener('close', function () { - if (layoutManager.tv) { centerFocus(dlg.querySelector('.actionSheetScroller'), false, false); } diff --git a/src/components/activitylog.js b/src/components/activitylog.js index 2d5a21756f..9834255003 100644 --- a/src/components/activitylog.js +++ b/src/components/activitylog.js @@ -3,7 +3,6 @@ import globalize from 'globalize'; import dom from 'dom'; import * as datefns from 'date-fns'; import dfnshelper from 'dfnshelper'; -import userSettings from 'userSettings'; import serverNotifications from 'serverNotifications'; import connectionManager from 'connectionManager'; import 'emby-button'; @@ -69,6 +68,7 @@ import 'listViewStyle'; const minDate = new Date(); const hasUserId = 'false' !== elem.getAttribute('data-useractivity'); + // TODO: Use date-fns if (hasUserId) { minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back } else { diff --git a/src/components/alert.js b/src/components/alert.js index 5d396e3a62..1420c7f428 100644 --- a/src/components/alert.js +++ b/src/components/alert.js @@ -10,7 +10,6 @@ import globalize from 'globalize'; } export default function (text, title) { - let options; if (typeof text === 'string') { options = { diff --git a/src/components/alphaPicker/alphaPicker.js b/src/components/alphaPicker/alphaPicker.js index 4bc8af56f0..95b5881677 100644 --- a/src/components/alphaPicker/alphaPicker.js +++ b/src/components/alphaPicker/alphaPicker.js @@ -26,7 +26,6 @@ import 'material-icons'; } function getAlphaPickerButtonClassName(vertical) { - let alphaPickerButtonClassName = 'alphaPickerButton'; if (layoutManager.tv) { @@ -45,14 +44,12 @@ import 'material-icons'; } function mapLetters(letters, vertical) { - return letters.map(l => { return getLetterButton(l, vertical); }); } function render(element, options) { - element.classList.add('alphaPicker'); if (layoutManager.tv) { @@ -137,7 +134,6 @@ import 'material-icons'; } function onAlphaPickerInKeyboardModeClick(e) { - const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton'); if (alphaPickerButton) { @@ -153,7 +149,6 @@ import 'material-icons'; } function onAlphaPickerClick(e) { - const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton'); if (alphaPickerButton) { @@ -167,7 +162,6 @@ import 'material-icons'; } function onAlphaPickerFocusIn(e) { - if (alphaFocusTimeout) { clearTimeout(alphaFocusTimeout); alphaFocusTimeout = null; @@ -182,13 +176,11 @@ import 'material-icons'; } function onItemsFocusIn(e) { - const item = dom.parentWithClass(e.target, itemClass); if (item) { const prefix = item.getAttribute('data-prefix'); if (prefix && prefix.length) { - itemFocusValue = prefix[0]; if (itemFocusTimeout) { clearTimeout(itemFocusTimeout); @@ -199,9 +191,7 @@ import 'material-icons'; } this.enabled = function (enabled) { - if (enabled) { - if (itemsContainer) { itemsContainer.addEventListener('focus', onItemsFocusIn, true); } @@ -215,9 +205,7 @@ import 'material-icons'; } else { element.addEventListener('click', onAlphaPickerClick.bind(this)); } - } else { - if (itemsContainer) { itemsContainer.removeEventListener('focus', onItemsFocusIn, true); } @@ -235,14 +223,12 @@ import 'material-icons'; } value(value, applyValue) { - const element = this.options.element; let btn; let selected; if (value !== undefined) { if (value != null) { - value = value.toUpperCase(); this._currentValue = value; @@ -295,33 +281,27 @@ import 'material-icons'; } visible(visible) { - const element = this.options.element; element.style.visibility = visible ? 'visible' : 'hidden'; } values() { - const element = this.options.element; const elems = element.querySelectorAll('.alphaPickerButton'); const values = []; for (let i = 0, length = elems.length; i < length; i++) { - values.push(elems[i].getAttribute('data-value')); - } return values; } focus() { - const element = this.options.element; focusManager.autoFocus(element, true); } destroy() { - const element = this.options.element; this.enabled(false); element.classList.remove('focuscontainer-x'); diff --git a/src/components/appFooter/appFooter.js b/src/components/appFooter/appFooter.js index af50ef7bf9..c60aa1a27c 100644 --- a/src/components/appFooter/appFooter.js +++ b/src/components/appFooter/appFooter.js @@ -1,4 +1,3 @@ -import browser from 'browser'; import 'css!./appFooter'; function render(options) { diff --git a/src/components/appRouter.js b/src/components/appRouter.js index 8054279c92..138d58e5c0 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -16,7 +16,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro show('/settings/settings.html'); }, showNowPlaying: function () { - show('/nowplaying.html'); + show('queue'); } }; @@ -153,20 +153,14 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro }; if (!isBackNav) { - // Don't force a new view for home due to the back menu - //if (route.type !== 'home') { onNewViewNeeded(); return; - //} } viewManager.tryRestoreView(currentRequest, function () { - - // done currentRouteInfo = { route: route, path: ctx.path }; - }).catch(function (result) { if (!result || !result.cancelled) { onNewViewNeeded(); @@ -197,12 +191,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro } function onRequestFail(e, data) { - var apiClient = this; if (data.status === 403) { if (data.errorCode === 'ParentalControl') { - var isCurrentAllowed = currentRouteInfo ? (currentRouteInfo.route.anonymous || currentRouteInfo.route.startup) : true; // Bounce to the login screen, but not if a password entry fails, obviously @@ -210,7 +202,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro showForcedLogoutMessage(globalize.translate('AccessRestrictedTryAgainLater')); appRouter.showLocalLogin(apiClient.serverId()); } - } } } @@ -237,7 +228,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro if (navigator.connection) { var max = navigator.connection.downlinkMax; if (max && max > 0 && max < Number.POSITIVE_INFINITY) { - max /= 8; max *= 1000000; max *= 0.7; @@ -255,7 +245,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro } function onApiClientCreated(e, newApiClient) { - newApiClient.normalizeImageOptions = normalizeImageOptions; if (browser.iOS) { @@ -269,12 +258,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro } function initApiClient(apiClient) { - onApiClientCreated({}, apiClient); } function initApiClients() { - connectionManager.getApiClients().forEach(initApiClient); events.on(connectionManager, 'apiclientcreated', onApiClientCreated); @@ -290,7 +277,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro var firstConnectionResult; function start(options) { - loading.show(); initApiClients(); @@ -302,53 +288,29 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro enableAutoLogin: appSettings.enableAutoLogin() }).then(function (result) { - firstConnectionResult = result; options = options || {}; page({ click: options.click !== false, - hashbang: options.hashbang !== false, - enableHistory: enableHistory() + hashbang: options.hashbang !== false }); }).catch().then(function() { loading.hide(); }); } - function enableHistory() { - - //if (browser.edgeUwp) { - // return false; - //} - - // shows status bar on navigation - if (browser.xboxOne) { - return false; - } - - // Does not support history - if (browser.orsay) { - return false; - } - - return true; - } - function enableNativeHistory() { return false; } function authenticate(ctx, route, callback) { - var firstResult = firstConnectionResult; if (firstResult) { - firstConnectionResult = null; if (firstResult.State !== 'SignedIn' && !route.anonymous) { - handleConnectionResult(firstResult); return; } @@ -377,7 +339,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro } if (apiClient && apiClient.isLoggedIn()) { - console.debug('appRouter - user is authenticated'); if (route.isDefaultRoute) { @@ -385,11 +346,8 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro loadUserSkinWithOptions(ctx); return; } else if (route.roles) { - validateRoles(apiClient, route.roles).then(function () { - callback(); - }, beginConnectionWizard); return; } @@ -431,7 +389,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro var isDummyBackToHome; function loadContent(ctx, route, html, request) { - html = globalize.translateHtml(html, route.dictionary); request.view = html; @@ -491,7 +448,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro } function getWindowLocationSearch(win) { - var currentPath = currentRouteInfo ? (currentRouteInfo.path || '') : ''; var index = currentPath.indexOf('?'); @@ -535,9 +491,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro if (!document.querySelector('.dialogContainer') && startPages.indexOf(curr.type) !== -1) { return false; } - if (enableHistory()) { - return history.length > 1; - } + return (page.len || 0) > 0; } @@ -644,7 +598,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro function pushState(state, title, url) { state.navigate = false; history.pushState(state, title, url); - } function setBaseRoute() { diff --git a/src/components/apphost.js b/src/components/apphost.js index f200b9a642..d447c7ea45 100644 --- a/src/components/apphost.js +++ b/src/components/apphost.js @@ -257,12 +257,6 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g features.push('fullscreenchange'); } - if (browser.chrome || browser.edge && !browser.slow) { - if (!browser.noAnimation && !browser.edgeUwp && !browser.xboxOne) { - features.push('imageanalysis'); - } - } - if (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) { features.push('physicalvolumecontrol'); } diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js index a6d0b10662..edb9db28ba 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -291,12 +291,10 @@ import 'programStyles'; const primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items); if (['auto', 'autohome', 'autooverflow', 'autoVertical'].includes(options.shape)) { - const requestedShape = options.shape; options.shape = null; if (primaryImageAspectRatio) { - if (primaryImageAspectRatio >= 3) { options.shape = 'banner'; options.coverImage = true; @@ -394,7 +392,6 @@ import 'programStyles'; } if (newIndexValue !== currentIndexValue) { - if (hasOpenRow) { html += ''; hasOpenRow = false; @@ -402,7 +399,6 @@ import 'programStyles'; } if (hasOpenSection) { - html += ''; if (isVertical) { @@ -426,7 +422,6 @@ import 'programStyles'; } if (options.rows && itemsInRow === 0) { - if (hasOpenRow) { html += ''; hasOpenRow = false; @@ -686,7 +681,6 @@ import 'programStyles'; let valid = 0; for (let i = 0; i < lines.length; i++) { - let currentCssClass = cssClass; let text = lines[i]; @@ -713,7 +707,6 @@ import 'programStyles'; } if (forceLines) { - let linesLength = maxLines || Math.min(lines.length, maxLines || lines.length); while (valid < linesLength) { @@ -745,7 +738,6 @@ import 'programStyles'; let airTimeText = ''; if (item.StartDate) { - try { let date = datetime.parseISO8601Date(item.StartDate); @@ -792,7 +784,6 @@ import 'programStyles'; const showOtherText = isOuterFooter ? !overlayText : overlayText; if (isOuterFooter && options.cardLayout && layoutManager.mobile) { - if (options.cardFooterAside !== 'none') { html += ''; } @@ -807,9 +798,7 @@ import 'programStyles'; if (showOtherText) { if ((options.showParentTitle || options.showParentTitleOrTitle) && !parentTitleUnderneath) { - if (isOuterFooter && item.Type === 'Episode' && item.SeriesName) { - if (item.SeriesId) { lines.push(getTextActionButton({ Id: item.SeriesId, @@ -822,15 +811,12 @@ import 'programStyles'; lines.push(item.SeriesName); } } else { - if (isUsingLiveTvNaming(item)) { - lines.push(item.Name); if (!item.EpisodeTitle) { titleAdded = true; } - } else { const parentTitle = item.SeriesName || item.Series || item.Album || item.AlbumArtist || ''; @@ -848,7 +834,6 @@ import 'programStyles'; } if (showMediaTitle) { - const name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, { includeParentInfo: options.includeParentInfoInTitle }); @@ -865,7 +850,6 @@ import 'programStyles'; if (showOtherText) { if (options.showParentTitle && parentTitleUnderneath) { - if (isOuterFooter && item.AlbumArtists && item.AlbumArtists.length) { item.AlbumArtists[0].Type = 'MusicArtist'; item.AlbumArtists[0].IsFolder = true; @@ -899,7 +883,6 @@ import 'programStyles'; } if (options.showPremiereDate) { - if (item.PremiereDate) { try { lines.push(datetime.toLocaleDateString( @@ -908,7 +891,6 @@ import 'programStyles'; )); } catch (err) { lines.push(''); - } } else { lines.push(''); @@ -916,14 +898,10 @@ import 'programStyles'; } if (options.showYear || options.showSeriesYear) { - if (item.Type === 'Series') { if (item.Status === 'Continuing') { - lines.push(globalize.translate('SeriesYearToPresent', item.ProductionYear || '')); - } else { - if (item.EndDate && item.ProductionYear) { const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear))); @@ -937,9 +915,7 @@ import 'programStyles'; } if (options.showRuntime) { - if (item.RunTimeTicks) { - lines.push(datetime.getDisplayRunningTime(item.RunTimeTicks)); } else { lines.push(''); @@ -947,14 +923,11 @@ import 'programStyles'; } if (options.showAirTime) { - lines.push(getAirTimeText(item, options.showAirDateTime, options.showAirEndTime) || ''); } if (options.showChannelName) { - if (item.ChannelId) { - lines.push(getTextActionButton({ Id: item.ChannelId, @@ -971,7 +944,6 @@ import 'programStyles'; } if (options.showCurrentProgram && item.Type === 'TvChannel') { - if (item.CurrentProgram) { lines.push(item.CurrentProgram.Name); } else { @@ -980,7 +952,6 @@ import 'programStyles'; } if (options.showCurrentProgramTime && item.Type === 'TvChannel') { - if (item.CurrentProgram) { lines.push(getAirTimeText(item.CurrentProgram, false, true) || ''); } else { @@ -990,7 +961,6 @@ import 'programStyles'; if (options.showSeriesTimerTime) { if (item.RecordAnyTime) { - lines.push(globalize.translate('Anytime')); } else { lines.push(datetime.getDisplayTime(item.StartDate)); @@ -1025,7 +995,6 @@ import 'programStyles'; } if (html) { - if (!isOuterFooter || logoUrl || options.cardLayout) { html = '
' + html; @@ -1071,27 +1040,21 @@ import 'programStyles'; let childText; if (item.Type === 'Playlist') { - childText = ''; if (item.RunTimeTicks) { - let minutes = item.RunTimeTicks / 600000000; minutes = minutes || 1; childText += globalize.translate('ValueMinutes', Math.round(minutes)); - } else { childText += globalize.translate('ValueMinutes', 0); } counts.push(childText); - } else if (item.Type === 'Genre' || item.Type === 'Studio') { - if (item.MovieCount) { - childText = item.MovieCount === 1 ? globalize.translate('ValueOneMovie') : globalize.translate('ValueMovieCount', item.MovieCount); @@ -1100,7 +1063,6 @@ import 'programStyles'; } if (item.SeriesCount) { - childText = item.SeriesCount === 1 ? globalize.translate('ValueOneSeries') : globalize.translate('ValueSeriesCount', item.SeriesCount); @@ -1108,18 +1070,14 @@ import 'programStyles'; counts.push(childText); } if (item.EpisodeCount) { - childText = item.EpisodeCount === 1 ? globalize.translate('ValueOneEpisode') : globalize.translate('ValueEpisodeCount', item.EpisodeCount); counts.push(childText); } - } else if (item.Type === 'MusicGenre' || options.context === 'MusicArtist') { - if (item.AlbumCount) { - childText = item.AlbumCount === 1 ? globalize.translate('ValueOneAlbum') : globalize.translate('ValueAlbumCount', item.AlbumCount); @@ -1127,7 +1085,6 @@ import 'programStyles'; counts.push(childText); } if (item.SongCount) { - childText = item.SongCount === 1 ? globalize.translate('ValueOneSong') : globalize.translate('ValueSongCount', item.SongCount); @@ -1135,16 +1092,13 @@ import 'programStyles'; counts.push(childText); } if (item.MusicVideoCount) { - childText = item.MusicVideoCount === 1 ? globalize.translate('ValueOneMusicVideo') : globalize.translate('ValueMusicVideoCount', item.MusicVideoCount); counts.push(childText); } - } else if (item.Type === 'Series') { - childText = item.RecursiveItemCount === 1 ? globalize.translate('ValueOneEpisode') : globalize.translate('ValueEpisodeCount', item.RecursiveItemCount); @@ -1163,6 +1117,7 @@ import 'programStyles'; function importRefreshIndicator() { if (!refreshIndicatorLoaded) { refreshIndicatorLoaded = true; + /* eslint-disable-next-line no-unused-expressions */ import('emby-itemrefreshindicator'); } } @@ -1197,13 +1152,11 @@ import 'programStyles'; let shape = options.shape; if (shape === 'mixed') { - shape = null; const primaryImageAspectRatio = item.PrimaryImageAspectRatio; if (primaryImageAspectRatio) { - if (primaryImageAspectRatio >= 1.33) { shape = 'mixedBackdrop'; } else if (primaryImageAspectRatio > 0.71) { @@ -1295,7 +1248,6 @@ import 'programStyles'; } if (overlayText) { - logoUrl = null; footerCssClass = progressHtml ? 'innerCardFooter fullInnerCardFooter' : 'innerCardFooter'; @@ -1404,7 +1356,6 @@ import 'programStyles'; indicatorsHtml += indicators.getTypeIndicator(item); if (options.showGroupCount) { - indicatorsHtml += indicators.getChildCountIndicatorHtml(item, { minCount: 1 }); @@ -1498,14 +1449,15 @@ import 'programStyles'; const userData = item.UserData || {}; if (itemHelper.canMarkPlayed(item)) { + /* eslint-disable-next-line no-unused-expressions */ import('emby-playstatebutton'); html += ''; } if (itemHelper.canRate(item)) { - const likes = userData.Likes == null ? '' : userData.Likes; + /* eslint-disable-next-line no-unused-expressions */ import('emby-ratingbutton'); html += ''; } @@ -1583,7 +1535,6 @@ import 'programStyles'; const html = buildCardsHtmlInternal(items, options); if (html) { - if (options.itemsContainer.cardBuilderHtml !== html) { options.itemsContainer.innerHTML = html; @@ -1596,7 +1547,6 @@ import 'programStyles'; imageLoader.lazyChildren(options.itemsContainer); } else { - options.itemsContainer.innerHTML = html; options.itemsContainer.cardBuilderHtml = null; } @@ -1620,7 +1570,6 @@ import 'programStyles'; indicatorsElem = card.querySelector('.cardIndicators'); if (!indicatorsElem) { - const cardImageContainer = card.querySelector('.cardImageContainer'); indicatorsElem = document.createElement('div'); indicatorsElem.classList.add('cardIndicators'); @@ -1644,11 +1593,9 @@ import 'programStyles'; let itemProgressBar = null; if (userData.Played) { - playedIndicator = card.querySelector('.playedIndicator'); if (!playedIndicator) { - playedIndicator = document.createElement('div'); playedIndicator.classList.add('playedIndicator'); playedIndicator.classList.add('indicator'); @@ -1657,10 +1604,8 @@ import 'programStyles'; } playedIndicator.innerHTML = ''; } else { - playedIndicator = card.querySelector('.playedIndicator'); if (playedIndicator) { - playedIndicator.parentNode.removeChild(playedIndicator); } } @@ -1668,7 +1613,6 @@ import 'programStyles'; countIndicator = card.querySelector('.countIndicator'); if (!countIndicator) { - countIndicator = document.createElement('div'); countIndicator.classList.add('countIndicator'); indicatorsElem = ensureIndicators(card, indicatorsElem); @@ -1676,10 +1620,8 @@ import 'programStyles'; } countIndicator.innerHTML = userData.UnplayedItemCount; } else if (enableCountIndicator) { - countIndicator = card.querySelector('.countIndicator'); if (countIndicator) { - countIndicator.parentNode.removeChild(countIndicator); } } @@ -1691,7 +1633,6 @@ import 'programStyles'; }); if (progressHtml) { - itemProgressBar = card.querySelector('.itemProgressBar'); if (!itemProgressBar) { @@ -1710,7 +1651,6 @@ import 'programStyles'; itemProgressBar.innerHTML = progressHtml; } else { - itemProgressBar = card.querySelector('.itemProgressBar'); if (itemProgressBar) { itemProgressBar.parentNode.removeChild(itemProgressBar); diff --git a/src/components/cardbuilder/chaptercardbuilder.js b/src/components/cardbuilder/chaptercardbuilder.js index c6ee9ba3c5..0215f8d8e5 100644 --- a/src/components/cardbuilder/chaptercardbuilder.js +++ b/src/components/cardbuilder/chaptercardbuilder.js @@ -14,7 +14,6 @@ import browser from 'browser'; const enableFocusTransform = !browser.slow && !browser.edge; function buildChapterCardsHtml(item, chapters, options) { - // TODO move card creation code to Card component let className = 'card itemAction chapterCard'; @@ -35,7 +34,6 @@ import browser from 'browser'; let shape = (options.backdropShape || 'backdrop'); if (videoStream.Width && videoStream.Height) { - if ((videoStream.Width / videoStream.Height) <= 1.2) { shape = (options.squareShape || 'square'); } @@ -53,7 +51,6 @@ import browser from 'browser'; const apiClient = connectionManager.getApiClient(item.ServerId); for (let i = 0, length = chapters.length; i < length; i++) { - if (options.rows && itemsInRow === 0) { html += '
'; } @@ -73,9 +70,7 @@ import browser from 'browser'; } function getImgUrl({Id}, {ImageTag}, index, maxWidth, apiClient) { - if (ImageTag) { - return apiClient.getScaledImageUrl(Id, { maxWidth: maxWidth * 2, @@ -89,7 +84,6 @@ import browser from 'browser'; } function buildChapterCard(item, apiClient, chapter, index, {width, coverImage}, className, shape) { - const imgUrl = getImgUrl(item, chapter, index, width || 400, apiClient); let cardImageContainerClass = 'cardContent cardContent-shadow cardImageContainer chapterCardImageContainer'; @@ -116,7 +110,6 @@ import browser from 'browser'; } export function buildChapterCards(item, chapters, options) { - if (options.parentContainer) { // Abort if the container has been disposed if (!document.body.contains(options.parentContainer)) { diff --git a/src/components/cardbuilder/peoplecardbuilder.js b/src/components/cardbuilder/peoplecardbuilder.js index 3b9a26a704..5fc9e8ade5 100644 --- a/src/components/cardbuilder/peoplecardbuilder.js +++ b/src/components/cardbuilder/peoplecardbuilder.js @@ -8,7 +8,6 @@ import cardBuilder from 'cardBuilder'; export function buildPeopleCards(items, options) { - options = Object.assign(options || {}, { cardLayout: false, centerText: true, diff --git a/src/components/collectionEditor/collectionEditor.js b/src/components/collectionEditor/collectionEditor.js index 18cc0d311f..a115b86a8f 100644 --- a/src/components/collectionEditor/collectionEditor.js +++ b/src/components/collectionEditor/collectionEditor.js @@ -1,7 +1,6 @@ import dom from 'dom'; import dialogHelper from 'dialogHelper'; import loading from 'loading'; -import appHost from 'apphost'; import layoutManager from 'layoutManager'; import connectionManager from 'connectionManager'; import appRouter from 'appRouter'; @@ -39,7 +38,6 @@ import 'flexStyles'; } function createCollection(apiClient, dlg) { - const url = apiClient.getUrl('Collections', { Name: dlg.querySelector('#txtNewCollectionName').value, @@ -53,7 +51,6 @@ import 'flexStyles'; dataType: 'json' }).then(result => { - loading.hide(); const id = result.Id; @@ -61,17 +58,14 @@ import 'flexStyles'; dlg.submitted = true; dialogHelper.close(dlg); redirectToCollection(apiClient, id); - }); } function redirectToCollection(apiClient, id) { - appRouter.showItem(id, apiClient.serverId()); } function addToCollection(apiClient, dlg, id) { - const url = apiClient.getUrl(`Collections/${id}/Items`, { Ids: dlg.querySelector('.fldSelectedItemIds').value || '' @@ -82,7 +76,6 @@ import 'flexStyles'; url: url }).then(() => { - loading.hide(); dlg.submitted = true; @@ -99,7 +92,6 @@ import 'flexStyles'; } function populateCollections(panel) { - loading.show(); const select = panel.querySelector('#selectCollectionToAddTo'); @@ -116,13 +108,11 @@ import 'flexStyles'; const apiClient = connectionManager.getApiClient(currentServerId); apiClient.getItems(apiClient.getCurrentUserId(), options).then(result => { - let html = ''; html += ``; html += result.Items.map(i => { - return ``; }); @@ -135,7 +125,6 @@ import 'flexStyles'; } function getEditorHtml() { - let html = ''; html += '
'; @@ -183,7 +172,6 @@ import 'flexStyles'; } function initEditor(content, items) { - content.querySelector('#selectCollectionToAddTo').addEventListener('change', function () { if (this.value) { content.querySelector('.newCollectionInfo').classList.add('hide'); @@ -220,7 +208,6 @@ import 'flexStyles'; export class showEditor { constructor(options) { - const items = options.items || {}; currentServerId = options.serverId; @@ -248,10 +235,6 @@ import 'flexStyles'; html += title; html += ''; - if (appHost.supports('externallinks')) { - html += `${globalize.translate('Help')}`; - } - html += '
'; html += getEditorHtml(); @@ -261,7 +244,6 @@ import 'flexStyles'; initEditor(dlg, items); dlg.querySelector('.btnCancel').addEventListener('click', () => { - dialogHelper.close(dlg); }); @@ -270,7 +252,6 @@ import 'flexStyles'; } return dialogHelper.open(dlg).then(() => { - if (layoutManager.tv) { centerFocus(dlg.querySelector('.formDialogContent'), false, false); } diff --git a/src/components/confirm/confirm.js b/src/components/confirm/confirm.js index 2d5cfdb55c..0670816a53 100644 --- a/src/components/confirm/confirm.js +++ b/src/components/confirm/confirm.js @@ -4,7 +4,6 @@ import globalize from 'globalize'; /* eslint-disable indent */ export default (() => { - function replaceAll(str, find, replace) { return str.split(find).join(replace); } diff --git a/src/components/dialog/dialog.js b/src/components/dialog/dialog.js index 937e96d297..1b13900d85 100644 --- a/src/components/dialog/dialog.js +++ b/src/components/dialog/dialog.js @@ -13,7 +13,6 @@ import 'flexStyles'; /* eslint-disable indent */ function showDialog(options, template) { - const dialogOptions = { removeOnClose: true, scrollY: false @@ -45,10 +44,6 @@ import 'flexStyles'; dlg.classList.add('dialog-fullscreen-lowres'); } - //dlg.querySelector('.btnCancel').addEventListener('click', function (e) { - // dialogHelper.close(dlg); - //}); - if (options.title) { dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.title || ''; } else { @@ -68,7 +63,6 @@ import 'flexStyles'; let hasDescriptions = false; for (i = 0, length = options.buttons.length; i < length; i++) { - const item = options.buttons[i]; const autoFocus = i === 0 ? ' autofocus' : ''; @@ -111,7 +105,6 @@ import 'flexStyles'; } return dialogHelper.open(dlg).then(() => { - if (enableTvLayout) { scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); } @@ -125,7 +118,6 @@ import 'flexStyles'; } export async function show(text, title) { - let options; if (typeof text === 'string') { options = { diff --git a/src/components/dialogHelper/dialogHelper.js b/src/components/dialogHelper/dialogHelper.js index ca7c94a416..1f11d8a195 100644 --- a/src/components/dialogHelper/dialogHelper.js +++ b/src/components/dialogHelper/dialogHelper.js @@ -12,7 +12,6 @@ import 'scrollStyles'; let globalOnOpenCallback; function enableAnimation() { - // too slow if (browser.tv) { return false; @@ -22,7 +21,6 @@ import 'scrollStyles'; } function removeCenterFocus(dlg) { - if (layoutManager.tv) { if (dlg.classList.contains('scrollX')) { centerFocus(dlg, true, false); @@ -35,7 +33,6 @@ import 'scrollStyles'; function tryRemoveElement(elem) { const parentNode = elem.parentNode; if (parentNode) { - // Seeing crashes in edge webview try { parentNode.removeChild(elem); @@ -46,14 +43,12 @@ import 'scrollStyles'; } function DialogHashHandler(dlg, hash, resolve) { - const self = this; self.originalUrl = window.location.href; const activeElement = document.activeElement; let removeScrollLockOnClose = false; function onHashChange(e) { - const isBack = self.originalUrl === window.location.href; if (isBack || !isOpened(dlg)) { @@ -67,7 +62,6 @@ import 'scrollStyles'; } function onBackCommand(e) { - if (e.detail.command === 'back') { self.closedByBack = true; e.preventDefault(); @@ -77,7 +71,6 @@ import 'scrollStyles'; } function onDialogClosed() { - if (!isHistoryEnabled(dlg)) { inputManager.off(dlg, onBackCommand); } @@ -158,7 +151,6 @@ import 'scrollStyles'; } function addBackdropOverlay(dlg) { - const backdrop = document.createElement('div'); backdrop.classList.add('dialogBackdrop'); @@ -193,7 +185,6 @@ import 'scrollStyles'; } export function open(dlg) { - if (globalOnOpenCallback) { globalOnOpenCallback(dlg); } @@ -210,19 +201,16 @@ import 'scrollStyles'; document.body.appendChild(dialogContainer); return new Promise((resolve, reject) => { - new DialogHashHandler(dlg, `dlg${new Date().getTime()}`, resolve); }); } function isOpened(dlg) { - //return dlg.opened; return !dlg.classList.contains('hide'); } export function close(dlg) { - if (isOpened(dlg)) { if (isHistoryEnabled(dlg)) { history.back(); @@ -233,9 +221,7 @@ import 'scrollStyles'; } function closeDialog(dlg) { - if (!dlg.classList.contains('hide')) { - dlg.dispatchEvent(new CustomEvent('closing', { bubbles: false, cancelable: false @@ -256,7 +242,6 @@ import 'scrollStyles'; } function animateDialogOpen(dlg) { - const onAnimationFinish = () => { focusManager.pushScope(dlg); @@ -271,7 +256,6 @@ import 'scrollStyles'; }; if (enableAnimation()) { - const onFinish = () => { dom.removeEventListener(dlg, dom.whichAnimationEvent(), onFinish, { once: true @@ -288,13 +272,10 @@ import 'scrollStyles'; } function animateDialogClose(dlg, onAnimationFinish) { - if (enableAnimation()) { - let animated = true; switch (dlg.animationConfig.exit.name) { - case 'fadeout': dlg.style.animation = `fadeout ${dlg.animationConfig.exit.timing.duration}ms ease-out normal both`; break; @@ -329,7 +310,6 @@ import 'scrollStyles'; const supportsOverscrollBehavior = 'overscroll-behavior-y' in document.body.style; function shouldLockDocumentScroll(options) { - if (supportsOverscrollBehavior && (options.size || !browser.touch)) { return false; } @@ -350,7 +330,6 @@ import 'scrollStyles'; } function removeBackdrop(dlg) { - const backdrop = dlg.backdrop; if (!backdrop) { @@ -364,7 +343,6 @@ import 'scrollStyles'; }; if (enableAnimation()) { - backdrop.classList.remove('dialogBackdropOpened'); // this is not firing animatonend @@ -383,7 +361,6 @@ import 'scrollStyles'; } export function createDialog(options) { - options = options || {}; // If there's no native dialog support, use a plain div @@ -473,9 +450,7 @@ import 'scrollStyles'; } if (enableAnimation()) { - switch (dlg.animationConfig.entry.name) { - case 'fadein': dlg.style.animation = `fadein ${entryAnimationDuration}ms ease-out normal`; break; diff --git a/src/components/displaySettings/displaySettings.js b/src/components/displaySettings/displaySettings.js index 4e24a3b730..ba78ab99e1 100644 --- a/src/components/displaySettings/displaySettings.js +++ b/src/components/displaySettings/displaySettings.js @@ -55,7 +55,6 @@ import 'emby-button'; } function loadSoundEffects(context, userSettings) { - const selectSoundEffects = context.querySelector('.selectSoundEffects'); const options = pluginManager.ofType('soundeffects').map(plugin => { return { @@ -81,7 +80,6 @@ import 'emby-button'; } function loadSkins(context, userSettings) { - const selectSkin = context.querySelector('.selectSkin'); const options = pluginManager.ofType('skin').map(plugin => { @@ -108,7 +106,6 @@ import 'emby-button'; } function showOrHideMissingEpisodesField(context) { - if (browser.tizen || browser.web0s) { context.querySelector('.fldDisplayMissingEpisodes').classList.add('hide'); return; @@ -118,7 +115,6 @@ import 'emby-button'; } function loadForm(context, user, userSettings) { - if (user.Policy.IsAdministrator) { context.querySelector('.selectDashboardThemeContainer').classList.remove('hide'); } else { @@ -213,7 +209,6 @@ import 'emby-button'; } function saveUser(context, user, userSettingsInstance, apiClient) { - appSettings.runAtStartup(context.querySelector('.chkRunAtStartup').checked); user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked; diff --git a/src/components/favoriteitems.js b/src/components/favoriteitems.js index 38715043e7..358bf04112 100644 --- a/src/components/favoriteitems.js +++ b/src/components/favoriteitems.js @@ -154,8 +154,7 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'dom', 'apphost', 'imageLoad html += '
'; } - var supportsImageAnalysis = appHost.supports('imageanalysis'); - var cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.autoCardLayout && section.showTitle; + var cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle; cardLayout = false; html += cardBuilder.getCardsHtml(result.Items, { preferThumb: section.preferThumb, diff --git a/src/components/fetchhelper.js b/src/components/fetchhelper.js index f626abefee..00bffc235a 100644 --- a/src/components/fetchhelper.js +++ b/src/components/fetchhelper.js @@ -1,6 +1,5 @@ /* eslint-disable indent */ export function getFetchPromise(request) { - const headers = request.headers || {}; if (request.dataType === 'json') { @@ -16,7 +15,6 @@ let contentType = request.contentType; if (request.data) { - if (typeof request.data === 'string') { fetchRequest.body = request.data; } else { @@ -27,7 +25,6 @@ } if (contentType) { - headers['Content-Type'] = contentType; } @@ -48,11 +45,9 @@ } function fetchWithTimeout(url, options, timeoutMs) { - console.debug(`fetchWithTimeout: timeoutMs: ${timeoutMs}, url: ${url}`); return new Promise(function (resolve, reject) { - const timeout = setTimeout(reject, timeoutMs); options = options || {}; @@ -65,7 +60,6 @@ resolve(response); }, function (error) { - clearTimeout(timeout); console.debug(`fetchWithTimeout: timed out connecting to url: ${url}`); diff --git a/src/components/filtermenu/filtermenu.js b/src/components/filtermenu/filtermenu.js index 936e2b0407..20399fb52d 100644 --- a/src/components/filtermenu/filtermenu.js +++ b/src/components/filtermenu/filtermenu.js @@ -2,19 +2,15 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', 'use strict'; function onSubmit(e) { - e.preventDefault(); return false; } function renderOptions(context, selector, cssClass, items, isCheckedFn) { - var elem = context.querySelector(selector); if (items.length) { - elem.classList.remove('hide'); - } else { elem.classList.add('hide'); } @@ -22,7 +18,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', var html = ''; html += items.map(function (filter) { - var itemHtml = ''; var checkedHtml = isCheckedFn(filter) ? ' checked' : ''; @@ -32,45 +27,20 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', itemHtml += ''; return itemHtml; - }).join(''); elem.querySelector('.filterOptions').innerHTML = html; } function renderDynamicFilters(context, result, options) { - - // If there's a huge number of these they will be really show to render - //if (result.Tags) { - // result.Tags.length = Math.min(result.Tags.length, 50); - //} - renderOptions(context, '.genreFilters', 'chkGenreFilter', result.Genres, function (i) { - // Switching from | to , var delimeter = (options.settings.GenreIds || '').indexOf('|') === -1 ? ',' : '|'; return (delimeter + (options.settings.GenreIds || '') + delimeter).indexOf(delimeter + i.Id + delimeter) !== -1; }); - - //renderOptions(context, '.officialRatingFilters', 'chkOfficialRatingFilter', result.OfficialRatings, function (i) { - // var delimeter = '|'; - // return (delimeter + (query.OfficialRatings || '') + delimeter).indexOf(delimeter + i + delimeter) != -1; - //}); - - //renderOptions(context, '.tagFilters', 'chkTagFilter', result.Tags, function (i) { - // var delimeter = '|'; - // return (delimeter + (query.Tags || '') + delimeter).indexOf(delimeter + i + delimeter) != -1; - //}); - - //renderOptions(context, '.yearFilters', 'chkYearFilter', result.Years, function (i) { - - // var delimeter = ','; - // return (delimeter + (query.Years || '') + delimeter).indexOf(delimeter + i + delimeter) != -1; - //}); } function loadDynamicFilters(context, options) { - var apiClient = connectionManager.getApiClient(options.serverId); var filterMenuOptions = Object.assign(options.filterMenuOptions, { @@ -81,16 +51,11 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', }); apiClient.getFilters(filterMenuOptions).then(function (result) { - renderDynamicFilters(context, result, options); - }, function () { - - // older server }); } function initEditor(context, settings) { - context.querySelector('form').addEventListener('submit', onSubmit); var elems = context.querySelectorAll('.simpleFilter'); @@ -98,7 +63,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', var length; for (i = 0, length = elems.length; i < length; i++) { - if (elems[i].tagName === 'INPUT') { elems[i].checked = settings[elems[i].getAttribute('data-settingname')] || false; } else { @@ -110,7 +74,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', elems = context.querySelectorAll('.chkVideoTypeFilter'); for (i = 0, length = elems.length; i < length; i++) { - elems[i].checked = videoTypes.indexOf(elems[i].getAttribute('data-filter')) !== -1; } @@ -118,7 +81,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', elems = context.querySelectorAll('.chkSeriesStatus'); for (i = 0, length = elems.length; i < length; i++) { - elems[i].checked = seriesStatuses.indexOf(elems[i].getAttribute('data-filter')) !== -1; } @@ -136,12 +98,10 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } function saveValues(context, settings, settingsKey) { - var elems = context.querySelectorAll('.simpleFilter'); var i; var length; for (i = 0, length = elems.length; i < length; i++) { - if (elems[i].tagName === 'INPUT') { setBasicFilter(context, settingsKey + '-filter-' + elems[i].getAttribute('data-settingname'), elems[i]); } else { @@ -154,7 +114,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', elems = context.querySelectorAll('.chkVideoTypeFilter'); for (i = 0, length = elems.length; i < length; i++) { - if (elems[i].checked) { videoTypes.push(elems[i].getAttribute('data-filter')); } @@ -166,7 +125,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', elems = context.querySelectorAll('.chkSeriesStatus'); for (i = 0, length = elems.length; i < length; i++) { - if (elems[i].checked) { seriesStatuses.push(elems[i].getAttribute('data-filter')); } @@ -177,7 +135,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', elems = context.querySelectorAll('.chkGenreFilter'); for (i = 0, length = elems.length; i < length; i++) { - if (elems[i].checked) { genres.push(elems[i].getAttribute('data-filter')); } @@ -186,7 +143,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } function setBasicFilter(context, key, elem) { - var value = elem.checked; value = value ? value : null; userSettings.setFilter(key, value); @@ -200,7 +156,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } function moveCheckboxFocus(elem, offset) { - var parent = dom.parentWithClass(elem, 'checkboxList-verticalwrap'); var elems = focusManager.getFocusableElements(parent); @@ -225,7 +180,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', function onInputCommand(e) { switch (e.detail.command) { - case 'left': moveCheckboxFocus(e.target, -1); e.preventDefault(); @@ -244,7 +198,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } function bindCheckboxInput(context, on) { - var elems = context.querySelectorAll('.checkboxList-verticalwrap'); for (var i = 0, length = elems.length; i < length; i++) { if (on) { @@ -256,11 +209,8 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } FilterMenu.prototype.show = function (options) { - return new Promise(function (resolve, reject) { - require(['text!./filtermenu.template.html'], function (template) { - var dialogOptions = { removeOnClose: true, scrollY: false @@ -303,7 +253,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', bindCheckboxInput(dlg, true); dlg.querySelector('.btnCancel').addEventListener('click', function () { - dialogHelper.close(dlg); }); @@ -314,17 +263,10 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', var submitted; dlg.querySelector('form').addEventListener('change', function () { - submitted = true; - //if (options.onChange) { - // saveValues(dlg, options.settings, options.settingsKey); - // options.onChange(); - //} - }, true); dialogHelper.open(dlg).then(function () { - bindCheckboxInput(dlg, false); if (layoutManager.tv) { @@ -332,7 +274,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } if (submitted) { - //if (!options.onChange) { saveValues(dlg, options.settings, options.settingsKey); resolve(); diff --git a/src/components/focusManager.js b/src/components/focusManager.js index f2022cc445..9c495bf952 100644 --- a/src/components/focusManager.js +++ b/src/components/focusManager.js @@ -7,14 +7,12 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function popScope(elem) { - if (scopes.length) { scopes.length -= 1; } } function autoFocus(view, defaultToFirst, findAutoFocusElement) { - var element; if (findAutoFocusElement !== false) { element = view.querySelector('*[autofocus]'); @@ -37,7 +35,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function focus(element) { - try { element.focus({ preventScroll: scrollManager.isEnabled() @@ -50,16 +47,13 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { var focusableTagNames = ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON', 'A']; var focusableContainerTagNames = ['BODY', 'DIALOG']; var focusableQuery = focusableTagNames.map(function (t) { - if (t === 'INPUT') { t += ':not([type="range"]):not([type="file"])'; } return t + ':not([tabindex="-1"]):not(:disabled)'; - }).join(',') + ',.focusable'; function isFocusable(elem) { - if (focusableTagNames.indexOf(elem.tagName) !== -1) { return true; } @@ -83,7 +77,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function focusableParent(elem) { - var originalElement = elem; while (!isFocusable(elem)) { @@ -101,7 +94,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { // Determines if a focusable element can be focused at a given point in time function isCurrentlyFocusableInternal(elem) { - // http://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom if (elem.offsetParent === null) { return false; @@ -112,7 +104,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { // Determines if a focusable element can be focused at a given point in time function isCurrentlyFocusable(elem) { - if (elem.disabled) { return false; } @@ -143,7 +134,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { var focusableElements = []; for (var i = 0, length = elems.length; i < length; i++) { - var elem = elems[i]; if (excludeClass && elem.classList.contains(excludeClass)) { @@ -163,7 +153,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function isFocusContainer(elem, direction) { - if (focusableContainerTagNames.indexOf(elem.tagName) !== -1) { return true; } @@ -217,7 +206,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function getOffset(elem) { - var box; // Support: BlackBerry 5, iOS 3 (original iPhone) @@ -234,7 +222,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } if (box.right === null) { - // Create a new object because some browsers will throw an error when trying to set data onto the Rect object var newBox = { top: box.top, @@ -253,7 +240,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function nav(activeElement, direction, container, focusableElements) { - activeElement = activeElement || document.activeElement; if (activeElement) { @@ -272,14 +258,10 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { var rect = getOffset(activeElement); // Get elements and work out x/y points - var cache = []; var point1x = parseFloat(rect.left) || 0; var point1y = parseFloat(rect.top) || 0; var point2x = parseFloat(point1x + rect.width - 1) || point1x; var point2y = parseFloat(point1y + rect.height - 1) || point1y; - // Shortcuts to help with compression - var min = Math.min; - var max = Math.max; var sourceMidX = rect.left + (rect.width / 2); var sourceMidY = rect.top + (rect.height / 2); @@ -301,10 +283,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { continue; } - //if (!isCurrentlyFocusableInternal(curr)) { - // continue; - //} - var elementRect = getOffset(curr); // not currently visible @@ -313,7 +291,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } switch (direction) { - case 0: // left if (elementRect.left >= rect.left) { @@ -369,7 +346,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { var distY; switch (direction) { - case 0: // left distX = Math.abs(point1x - Math.min(point1x, x2)); @@ -403,7 +379,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } if (nearestElement) { - // See if there's a focusable container, and if so, send the focus command to that if (activeElement) { var nearestElementFocusableParent = dom.parentWithClass(nearestElement, 'focusable'); @@ -418,12 +393,10 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function intersectsInternal(a1, a2, b1, b2) { - return (b1 >= a1 && b1 <= a2) || (b2 >= a1 && b2 <= a2); } function intersects(a1, a2, b1, b2) { - return intersectsInternal(a1, a2, b1, b2) || intersectsInternal(b1, b2, a1, a2); } @@ -434,11 +407,9 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function focusFirst(container, focusableSelector) { - var elems = container.querySelectorAll(focusableSelector); for (var i = 0, length = elems.length; i < length; i++) { - var elem = elems[i]; if (isCurrentlyFocusableInternal(elem)) { @@ -449,11 +420,9 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function focusLast(container, focusableSelector) { - var elems = [].slice.call(container.querySelectorAll(focusableSelector), 0).reverse(); for (var i = 0, length = elems.length; i < length; i++) { - var elem = elems[i]; if (isCurrentlyFocusableInternal(elem)) { @@ -464,7 +433,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { } function moveFocus(sourceElement, container, focusableSelector, offset) { - var elems = container.querySelectorAll(focusableSelector); var list = []; var i; @@ -472,7 +440,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { var elem; for (i = 0, length = elems.length; i < length; i++) { - elem = elems[i]; if (isCurrentlyFocusableInternal(elem)) { @@ -483,7 +450,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { var currentIndex = -1; for (i = 0, length = list.length; i < length; i++) { - elem = list[i]; if (sourceElement === elem || elem.contains(sourceElement)) { diff --git a/src/components/guide/guide-settings.js b/src/components/guide/guide-settings.js index 77a3637251..c3ba49f283 100644 --- a/src/components/guide/guide-settings.js +++ b/src/components/guide/guide-settings.js @@ -2,12 +2,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio 'use strict'; function saveCategories(context, options) { - var categories = []; var chkCategorys = context.querySelectorAll('.chkCategory'); for (var i = 0, length = chkCategorys.length; i < length; i++) { - var type = chkCategorys[i].getAttribute('data-type'); if (chkCategorys[i].checked) { @@ -25,12 +23,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio } function loadCategories(context, options) { - var selectedCategories = options.categories || []; var chkCategorys = context.querySelectorAll('.chkCategory'); for (var i = 0, length = chkCategorys.length; i < length; i++) { - var type = chkCategorys[i].getAttribute('data-type'); chkCategorys[i].checked = !selectedCategories.length || selectedCategories.indexOf(type) !== -1; @@ -38,13 +34,11 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio } function save(context) { - var i; var length; var chkIndicators = context.querySelectorAll('.chkIndicator'); for (i = 0, length = chkIndicators.length; i < length; i++) { - var type = chkIndicators[i].getAttribute('data-type'); userSettings.set('guide-indicator-' + type, chkIndicators[i].checked); } @@ -62,13 +56,11 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio } function load(context) { - var i; var length; var chkIndicators = context.querySelectorAll('.chkIndicator'); for (i = 0, length = chkIndicators.length; i < length; i++) { - var type = chkIndicators[i].getAttribute('data-type'); if (chkIndicators[i].getAttribute('data-default') === 'true') { @@ -90,13 +82,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio } function showEditor(options) { - return new Promise(function (resolve, reject) { - var settingsChanged = false; require(['text!./guide-settings.template.html'], function (template) { - var dialogOptions = { removeOnClose: true, scrollY: false @@ -119,12 +108,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio dlg.innerHTML = html; dlg.addEventListener('change', function () { - settingsChanged = true; }); dlg.addEventListener('close', function () { - if (layoutManager.tv) { scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); } diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index bb4a36497c..bd3ad89aaa 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -2,7 +2,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', 'use strict'; function showViewSettings(instance) { - require(['guide-settings-dialog'], function (guideSettingsDialog) { guideSettingsDialog.show(instance.categoryOptions).then(function () { instance.refresh(); @@ -11,7 +10,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function updateProgramCellOnScroll(cell, scrollPct) { - var left = cell.posLeft; if (!left) { left = parseFloat(cell.style.left.replace('%', '')); @@ -43,11 +41,9 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', if (guideProgramName) { if (pctOfWidth > 0 && pctOfWidth <= 100) { - //guideProgramName.style.marginLeft = pctOfWidth + '%'; guideProgramName.style.transform = 'translateX(' + pctOfWidth + '%)'; caret.classList.remove('hide'); } else { - //guideProgramName.style.marginLeft = '0'; guideProgramName.style.transform = 'none'; caret.classList.add('hide'); } @@ -56,7 +52,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var isUpdatingProgramCellScroll = false; function updateProgramCellsOnScroll(programGrid, programCells) { - if (isUpdatingProgramCellScroll) { return; } @@ -64,13 +59,11 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', isUpdatingProgramCellScroll = true; requestAnimationFrame(function () { - var scrollLeft = programGrid.scrollLeft; var scrollPct = scrollLeft ? (scrollLeft / programGrid.scrollWidth) * 100 : 0; for (var i = 0, length = programCells.length; i < length; i++) { - updateProgramCellOnScroll(programCells[i], scrollPct); } @@ -79,14 +72,12 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function onProgramGridClick(e) { - if (!layoutManager.tv) { return; } var programCell = dom.parentWithClass(e.target, 'programCell'); if (programCell) { - var startDate = programCell.getAttribute('data-startdate'); var endDate = programCell.getAttribute('data-enddate'); startDate = datetime.parseISO8601Date(startDate, { toLocal: true }).getTime(); @@ -94,7 +85,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var now = new Date().getTime(); if (now >= startDate && now < endDate) { - var channelId = programCell.getAttribute('data-channelid'); var serverId = programCell.getAttribute('data-serverid'); @@ -110,7 +100,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function Guide(options) { - var self = this; var items = {}; @@ -121,7 +110,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var cellCurationMinutes = 30; var cellDurationMs = cellCurationMinutes * 60 * 1000; var msPerDay = 86400000; - var totalRendererdMs = msPerDay; var currentDate; var currentStartIndex = 0; @@ -132,7 +120,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var programGrid; self.refresh = function () { - currentDate = null; reloadPage(options.element); restartAutoRefresh(); @@ -151,7 +138,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', }; self.destroy = function () { - stopAutoRefresh(); events.off(serverNotifications, 'TimerCreated', onTimerCreated); @@ -165,7 +151,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', }; function restartAutoRefresh() { - stopAutoRefresh(); var intervalMs = 60000 * 15; // (minutes) @@ -183,15 +168,11 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function normalizeDateToTimeslot(date) { - var minutesOffset = date.getMinutes() - cellCurationMinutes; if (minutesOffset >= 0) { - date.setHours(date.getHours(), cellCurationMinutes, 0, 0); - } else { - date.setHours(date.getHours(), 0, 0, 0); } @@ -207,7 +188,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function reloadGuide(context, newStartDate, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) { - var apiClient = connectionManager.getApiClient(options.serverId); var channelQuery = { @@ -290,12 +270,10 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', }; apiClient.getLiveTvChannels(channelQuery).then(function (channelsResult) { - var btnPreviousPage = context.querySelector('.btnPreviousPage'); var btnNextPage = context.querySelector('.btnNextPage'); if (channelsResult.TotalRecordCount > channelLimit) { - context.querySelector('.guideOptions').classList.remove('hide'); btnPreviousPage.classList.remove('hide'); @@ -312,7 +290,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } else { btnNextPage.disabled = true; } - } else { context.querySelector('.guideOptions').classList.add('hide'); } @@ -343,22 +320,17 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } apiClient.getLiveTvPrograms(programQuery).then(function (programsResult) { - renderGuide(context, date, channelsResult.Items, programsResult.Items, renderOptions, apiClient, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender); hideLoading(); - }); }); } function getDisplayTime(date) { - if ((typeof date).toString().toLowerCase() === 'string') { try { - date = datetime.parseISO8601Date(date, { toLocal: true }); - } catch (err) { return date; } @@ -368,7 +340,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function getTimeslotHeadersHtml(startDate, endDateTime) { - var html = ''; // clone @@ -377,7 +348,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', html += '
'; while (startDate.getTime() < endDateTime) { - html += '
'; html += getDisplayTime(startDate); @@ -411,23 +381,19 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function getTimerIndicator(item) { - var status; if (item.Type === 'SeriesTimer') { return ''; } else if (item.TimerId || item.SeriesTimerId) { - status = item.Status || 'Cancelled'; } else if (item.Type === 'Timer') { - status = item.Status; } else { return ''; } if (item.SeriesTimerId) { - if (status !== 'Cancelled') { return ''; } @@ -439,7 +405,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function getChannelProgramsHtml(context, date, channel, programs, options, listInfo) { - var html = ''; var startMs = date.getTime(); @@ -463,11 +428,9 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var now = new Date().getTime(); for (var i = listInfo.startIndex, length = programs.length; i < length; i++) { - var program = programs[i]; if (program.ChannelId !== channel.Id) { - if (programsFound) { break; } @@ -577,7 +540,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', html += '
'; if (program.IsHD && options.showHdIcon) { - //html += ''; if (layoutManager.tv) { html += '
HD
'; } else { @@ -599,11 +561,9 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } function renderChannelHeaders(context, channels, apiClient) { - var html = ''; for (var i = 0, length = channels.length; i < length; i++) { - var channel = channels[i]; var hasChannelImage = channel.ImageTags.Primary; @@ -615,18 +575,15 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var title = []; if (channel.ChannelNumber) { - title.push(channel.ChannelNumber); } if (channel.Name) { - title.push(channel.Name); } html += ''; - html += '
'; - html += '
'; - html += user.UserName; - html += '
'; - html += '
'; - html += '
'; - return html + '
'; - } - - function renderPendingGuests(page, users) { - if (users.length) { - page.querySelector('.sectionPendingGuests').classList.remove('hide'); - } else { - page.querySelector('.sectionPendingGuests').classList.add('hide'); - } - - page.querySelector('.pending').innerHTML = users.map(getPendingUserHtml).join(''); - } - - // TODO cvium: maybe reuse for invitation system - function cancelAuthorization(page, id) { - loading.show(); - ApiClient.ajax({ - type: 'DELETE', - url: ApiClient.getUrl('Connect/Pending', { - Id: id - }) - }).then(function () { - loadData(page); - }); - } - function loadData(page) { loading.show(); ApiClient.getUsers().then(function (users) { renderUsers(page, users); loading.hide(); }); - // TODO cvium - renderPendingGuests(page, []); - // ApiClient.getJSON(ApiClient.getUrl("Connect/Pending")).then(function (pending) { - // - // }); - } - - function showInvitePopup(page) { - import('components/guestinviter/guestinviter').then(({default: guestinviter}) => { - guestinviter.show().then(function () { - loadData(page); - }); - }); } pageIdOn('pageinit', 'userProfilesPage', function () { @@ -265,14 +175,8 @@ import 'flexStyles'; showUserMenu(btnUserMenu); } }); - page.querySelector('.pending').addEventListener('click', function (e__r) { - const btnUserMenu = dom.parentWithClass(e__r.target, 'btnUserMenu'); - - if (btnUserMenu) { - showPendingUserMenu(btnUserMenu); - } - }); }); + pageIdOn('pagebeforeshow', 'userProfilesPage', function () { loadData(this); }); diff --git a/src/controllers/favorites.js b/src/controllers/favorites.js index b4c7936239..51c4301a71 100644 --- a/src/controllers/favorites.js +++ b/src/controllers/favorites.js @@ -170,8 +170,7 @@ define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'ap function getItemsHtmlFn(section) { return function (items) { - var supportsImageAnalysis = appHost.supports('imageanalysis'); - var cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.autoCardLayout && section.showTitle; + var cardLayout = appHost.preferVisualCards && section.autoCardLayout && section.showTitle; cardLayout = false; var serverId = this.apiClient.serverId(); var leadingButtons = layoutManager.tv ? [{ diff --git a/src/controllers/itemDetails/index.js b/src/controllers/itemDetails/index.js index 011bc4ac92..29aa8ad1e1 100644 --- a/src/controllers/itemDetails/index.js +++ b/src/controllers/itemDetails/index.js @@ -1652,7 +1652,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti html += '

'; html += '' + type.name + ''; html += '

'; - html += ''; html += ''; html += '
'; var shape = 'MusicAlbum' == type.type ? getSquareShape(false) : getPortraitShape(false); @@ -1674,14 +1673,6 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti var collectionItems = page.querySelector('.collectionItems'); collectionItems.insertAdjacentHTML('beforeend', html); imageLoader.lazyChildren(collectionItems); - collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () { - require(['alert'], function (alert) { - alert.default({ - text: globalize.translate('AddItemToCollectionHelp'), - html: globalize.translate('AddItemToCollectionHelp') + '

' + globalize.translate('ButtonLearnMore') + '' - }); - }); - }); } function renderMusicVideos(page, item, user) { diff --git a/src/controllers/livetv/livetvrecordings.js b/src/controllers/livetv/livetvrecordings.js index d5cfe66672..d832ca1339 100644 --- a/src/controllers/livetv/livetvrecordings.js +++ b/src/controllers/livetv/livetvrecordings.js @@ -24,7 +24,6 @@ define(['layoutManager', 'loading', 'cardBuilder', 'apphost', 'imageLoader', 'sc recordingItems.classList.add('vertical-wrap'); } - appHost.supports('imageanalysis'); recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({ items: recordings, shape: scrollX ? 'autooverflow' : 'auto', diff --git a/src/controllers/livetv/livetvschedule.js b/src/controllers/livetv/livetvschedule.js index a6f509c6f1..2f451e50fb 100644 --- a/src/controllers/livetv/livetvschedule.js +++ b/src/controllers/livetv/livetvschedule.js @@ -30,17 +30,14 @@ define(['layoutManager', 'cardBuilder', 'apphost', 'imageLoader', 'loading', 'sc recordingItems.classList.add('vertical-wrap'); } - var supportsImageAnalysis = appHost.supports('imageanalysis'); - var cardLayout = appHost.preferVisualCards || supportsImageAnalysis; - cardLayout = false; recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({ items: recordings, shape: enableScrollX() ? 'autooverflow' : 'auto', showTitle: true, showParentTitle: true, coverImage: true, - cardLayout: cardLayout, - centerText: !cardLayout, + cardLayout: false, + centerText: true, allowBottomPadding: !enableScrollX(), preferThumb: 'auto' }, cardOptions || {})); diff --git a/src/controllers/livetv/livetvseriestimers.js b/src/controllers/livetv/livetvseriestimers.js index 27daca1983..c5d0da60d7 100644 --- a/src/controllers/livetv/livetvseriestimers.js +++ b/src/controllers/livetv/livetvseriestimers.js @@ -3,7 +3,6 @@ define(['datetime', 'cardBuilder', 'imageLoader', 'apphost', 'loading', 'paper-i function renderTimers(context, timers) { var html = ''; - appHost.supports('imageanalysis'); html += cardBuilder.getCardsHtml({ items: timers, shape: 'auto', diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js index ab410c1bd4..43f73bfa76 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -75,8 +75,6 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader ParentId: params.topParentId }; ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) { - var supportsImageAnalysis = appHost.supports('imageanalysis'); - if (viewStyle == 'Thumb') { cardBuilder.buildCards(result.Items, { itemsContainer: elem, diff --git a/src/controllers/movies/moviesrecommended.js b/src/controllers/movies/moviesrecommended.js index d948c1cef7..4ffe7888cf 100644 --- a/src/controllers/movies/moviesrecommended.js +++ b/src/controllers/movies/moviesrecommended.js @@ -346,8 +346,6 @@ define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu' function loadTab(page, index) { currentTabIndex = index; getTabController(page, index, function (controller) { - initialTabIndex = null; - if (renderedTabs.indexOf(index) == -1) { renderedTabs.push(index); controller.renderTab(); @@ -370,10 +368,8 @@ define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu' } } - var isViewRestored; var self = this; var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)); - var initialTabIndex = currentTabIndex; var suggestionsTabIndex = 1; self.initTab = function () { @@ -389,7 +385,8 @@ define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu' var tabControllers = []; var renderedTabs = []; view.addEventListener('viewshow', function (e) { - if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute('data-title')) { + initTabs(); + if (!view.getAttribute('data-title')) { var parentId = params.topParentId; if (parentId) { diff --git a/src/controllers/music/musicrecommended.js b/src/controllers/music/musicrecommended.js index 3f025799f6..0eecef0bfb 100644 --- a/src/controllers/music/musicrecommended.js +++ b/src/controllers/music/musicrecommended.js @@ -41,8 +41,7 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' }; ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) { var elem = page.querySelector('#recentlyAddedSongs'); - var supportsImageAnalysis = appHost.supports('imageanalysis'); - supportsImageAnalysis = false; + elem.innerHTML = cardBuilder.getCardsHtml({ items: items, showUnplayedIndicator: false, @@ -51,10 +50,10 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' showTitle: true, showParentTitle: true, lazy: true, - centerText: !supportsImageAnalysis, - overlayPlayButton: !supportsImageAnalysis, + centerText: true, + overlayPlayButton: true, allowBottomPadding: !enableScrollX(), - cardLayout: supportsImageAnalysis, + cardLayout: false, coverImage: true }); imageLoader.lazyChildren(elem); @@ -90,8 +89,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' } var itemsContainer = elem.querySelector('.itemsContainer'); - var supportsImageAnalysis = appHost.supports('imageanalysis'); - supportsImageAnalysis = false; itemsContainer.innerHTML = cardBuilder.getCardsHtml({ items: result.Items, showUnplayedIndicator: false, @@ -100,10 +97,10 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' showParentTitle: true, action: 'instantmix', lazy: true, - centerText: !supportsImageAnalysis, - overlayMoreButton: !supportsImageAnalysis, + centerText: true, + overlayMoreButton: true, allowBottomPadding: !enableScrollX(), - cardLayout: supportsImageAnalysis, + cardLayout: false, coverImage: true }); imageLoader.lazyChildren(itemsContainer); @@ -134,8 +131,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' } var itemsContainer = elem.querySelector('.itemsContainer'); - var supportsImageAnalysis = appHost.supports('imageanalysis'); - supportsImageAnalysis = false; itemsContainer.innerHTML = cardBuilder.getCardsHtml({ items: result.Items, showUnplayedIndicator: false, @@ -144,10 +139,10 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' showParentTitle: true, action: 'instantmix', lazy: true, - centerText: !supportsImageAnalysis, - overlayMoreButton: !supportsImageAnalysis, + centerText: true, + overlayMoreButton: true, allowBottomPadding: !enableScrollX(), - cardLayout: supportsImageAnalysis, + cardLayout: false, coverImage: true }); imageLoader.lazyChildren(itemsContainer); @@ -339,8 +334,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' function loadTab(page, index) { currentTabIndex = index; getTabController(page, index, function (controller) { - initialTabIndex = null; - if (renderedTabs.indexOf(index) == -1) { renderedTabs.push(index); controller.renderTab(); @@ -356,10 +349,8 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' } } - var isViewRestored; var self = this; var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)); - var initialTabIndex = currentTabIndex; self.initTab = function () { var tabContent = view.querySelector(".pageTabContent[data-index='0']"); @@ -377,7 +368,6 @@ define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', ' var tabControllers = []; var renderedTabs = []; view.addEventListener('viewshow', function (e) { - isViewRestored = e.detail.isRestored; initTabs(); if (!view.getAttribute('data-title')) { var parentId = params.topParentId; diff --git a/src/nowplaying.html b/src/controllers/playback/queue/index.html similarity index 100% rename from src/nowplaying.html rename to src/controllers/playback/queue/index.html diff --git a/src/controllers/playback/nowplaying.js b/src/controllers/playback/queue/index.js similarity index 100% rename from src/controllers/playback/nowplaying.js rename to src/controllers/playback/queue/index.js diff --git a/src/videoosd.html b/src/controllers/playback/video/index.html similarity index 100% rename from src/videoosd.html rename to src/controllers/playback/video/index.html diff --git a/src/controllers/playback/videoosd.js b/src/controllers/playback/video/index.js similarity index 99% rename from src/controllers/playback/videoosd.js rename to src/controllers/playback/video/index.js index e821c2393e..d2bddfc136 100644 --- a/src/controllers/playback/videoosd.js +++ b/src/controllers/playback/video/index.js @@ -963,7 +963,6 @@ import 'css!assets/css/videoosd'; const player = currentPlayer; if (player) { - // show subtitle offset feature only if player and media support it const showSubOffset = playbackManager.supportSubtitleOffset(player) && playbackManager.canHandleOffsetOnCurrentSubtitle(player); diff --git a/src/controllers/searchpage.js b/src/controllers/searchpage.js index 8ce3e8afe8..ffb7fbac0b 100644 --- a/src/controllers/searchpage.js +++ b/src/controllers/searchpage.js @@ -1,4 +1,3 @@ -import focusManager from 'focusManager'; import SearchFields from 'searchFields'; import SearchResults from 'searchResults'; import events from 'events'; diff --git a/src/addserver.html b/src/controllers/session/addServer/index.html similarity index 100% rename from src/addserver.html rename to src/controllers/session/addServer/index.html diff --git a/src/controllers/auth/addserver.js b/src/controllers/session/addServer/index.js similarity index 98% rename from src/controllers/auth/addserver.js rename to src/controllers/session/addServer/index.js index 1129283246..7d3ba7f471 100644 --- a/src/controllers/auth/addserver.js +++ b/src/controllers/session/addServer/index.js @@ -1,6 +1,5 @@ import appSettings from 'appSettings'; import loading from 'loading'; -import browser from 'browser'; import globalize from 'globalize'; import 'emby-button'; diff --git a/src/forgotpassword.html b/src/controllers/session/forgotPassword/index.html similarity index 94% rename from src/forgotpassword.html rename to src/controllers/session/forgotPassword/index.html index d4ed0d4170..80631564f8 100644 --- a/src/forgotpassword.html +++ b/src/controllers/session/forgotPassword/index.html @@ -1,5 +1,5 @@
-
+

${HeaderForgotPassword}

diff --git a/src/controllers/auth/forgotpassword.js b/src/controllers/session/forgotPassword/index.js similarity index 100% rename from src/controllers/auth/forgotpassword.js rename to src/controllers/session/forgotPassword/index.js diff --git a/src/login.html b/src/controllers/session/login/index.html similarity index 92% rename from src/login.html rename to src/controllers/session/login/index.html index fd52b4bf58..458ac7df3b 100644 --- a/src/login.html +++ b/src/controllers/session/login/index.html @@ -1,6 +1,6 @@ -
-
- +
+
+

${HeaderPleaseSignIn}

diff --git a/src/controllers/auth/login.js b/src/controllers/session/login/index.js similarity index 100% rename from src/controllers/auth/login.js rename to src/controllers/session/login/index.js diff --git a/src/forgotpasswordpin.html b/src/controllers/session/resetPassword/index.html similarity index 93% rename from src/forgotpasswordpin.html rename to src/controllers/session/resetPassword/index.html index 3b1ba0d37b..ef915be788 100644 --- a/src/forgotpasswordpin.html +++ b/src/controllers/session/resetPassword/index.html @@ -1,5 +1,5 @@
-
+

${HeaderPasswordReset}

diff --git a/src/controllers/auth/forgotpasswordpin.js b/src/controllers/session/resetPassword/index.js similarity index 100% rename from src/controllers/auth/forgotpasswordpin.js rename to src/controllers/session/resetPassword/index.js diff --git a/src/controllers/session/selectServer/index.html b/src/controllers/session/selectServer/index.html new file mode 100644 index 0000000000..0a14e7fa03 --- /dev/null +++ b/src/controllers/session/selectServer/index.html @@ -0,0 +1,17 @@ +
+
+
+
+

${HeaderSelectServer}

+
+
+
+
+
+ +
+
diff --git a/src/controllers/auth/selectserver.js b/src/controllers/session/selectServer/index.js similarity index 97% rename from src/controllers/auth/selectserver.js rename to src/controllers/session/selectServer/index.js index 3e36b74859..b7d7b9d221 100644 --- a/src/controllers/auth/selectserver.js +++ b/src/controllers/session/selectServer/index.js @@ -3,7 +3,6 @@ import appRouter from 'appRouter'; import layoutManager from 'layoutManager'; import libraryMenu from 'libraryMenu'; import appSettings from 'appSettings'; -import appHost from 'apphost'; import focusManager from 'focusManager'; import connectionManager from 'connectionManager'; import globalize from 'globalize'; @@ -95,11 +94,6 @@ import 'emby-button'; } } - function showGeneralError() { - loading.hide(); - alertText(globalize.translate('DefaultErrorMessage')); - } - function alertText(text) { alertTextWithOptions({ text: text diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js index d686a62197..87d3a2e240 100644 --- a/src/controllers/shows/tvgenres.js +++ b/src/controllers/shows/tvgenres.js @@ -3,10 +3,8 @@ import loading from 'loading'; import libraryBrowser from 'libraryBrowser'; import cardBuilder from 'cardBuilder'; import lazyLoader from 'lazyLoader'; -import appHost from 'apphost'; import globalize from 'globalize'; import appRouter from 'appRouter'; -import dom from 'dom'; import 'emby-button'; /* eslint-disable indent */ @@ -85,8 +83,6 @@ import 'emby-button'; ParentId: params.topParentId }; ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) { - const supportsImageAnalysis = appHost.supports('imageanalysis'); - if (viewStyle == 'Thumb') { cardBuilder.buildCards(result.Items, { itemsContainer: elem, diff --git a/src/controllers/shows/tvlatest.js b/src/controllers/shows/tvlatest.js index c08f3d5a15..2f768f352a 100644 --- a/src/controllers/shows/tvlatest.js +++ b/src/controllers/shows/tvlatest.js @@ -1,7 +1,6 @@ import loading from 'loading'; import groupedcards from 'components/groupedcards'; import cardBuilder from 'cardBuilder'; -import appHost from 'apphost'; import imageLoader from 'imageLoader'; /* eslint-disable indent */ @@ -24,7 +23,6 @@ import imageLoader from 'imageLoader'; function loadLatest(context, params, promise) { promise.then(function (items) { let html = ''; - appHost.supports('imageanalysis'); html += cardBuilder.getCardsHtml({ items: items, shape: 'backdrop', diff --git a/src/controllers/shows/tvrecommended.js b/src/controllers/shows/tvrecommended.js index 7edd2ab501..4aab69e978 100644 --- a/src/controllers/shows/tvrecommended.js +++ b/src/controllers/shows/tvrecommended.js @@ -269,8 +269,6 @@ import 'emby-button'; function loadTab(page, index) { currentTabIndex = index; getTabController(page, index, function (controller) { - initialTabIndex = null; - if (renderedTabs.indexOf(index) == -1) { renderedTabs.push(index); controller.renderTab(); @@ -301,10 +299,8 @@ import 'emby-button'; } } - let isViewRestored; const self = this; let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)); - let initialTabIndex = currentTabIndex; self.initTab = function () { const tabContent = self.tabContent; @@ -319,7 +315,6 @@ import 'emby-button'; let renderedTabs = []; setScrollClasses(view.querySelector('#resumableItems'), enableScrollX()); view.addEventListener('viewshow', function (e) { - isViewRestored = e.detail.isRestored; initTabs(); if (!view.getAttribute('data-title')) { const parentId = params.topParentId; diff --git a/src/controllers/shows/tvshows.js b/src/controllers/shows/tvshows.js index cde5ae5058..1ee70c8f88 100644 --- a/src/controllers/shows/tvshows.js +++ b/src/controllers/shows/tvshows.js @@ -1,4 +1,3 @@ -import layoutManager from 'layoutManager'; import loading from 'loading'; import events from 'events'; import libraryBrowser from 'libraryBrowser'; diff --git a/src/controllers/shows/tvstudios.js b/src/controllers/shows/tvstudios.js index ba7fdfaf78..4be717fb7f 100644 --- a/src/controllers/shows/tvstudios.js +++ b/src/controllers/shows/tvstudios.js @@ -1,7 +1,6 @@ import loading from 'loading'; import libraryBrowser from 'libraryBrowser'; import cardBuilder from 'cardBuilder'; -import appHost from 'apphost'; /* eslint-disable indent */ diff --git a/src/controllers/shows/tvupcoming.js b/src/controllers/shows/tvupcoming.js index a2016279b8..f9df3df343 100644 --- a/src/controllers/shows/tvupcoming.js +++ b/src/controllers/shows/tvupcoming.js @@ -1,9 +1,7 @@ import layoutManager from 'layoutManager'; import loading from 'loading'; import datetime from 'datetime'; -import libraryBrowser from 'libraryBrowser'; import cardBuilder from 'cardBuilder'; -import appHost from 'apphost'; import imageLoader from 'imageLoader'; import globalize from 'globalize'; import 'scrollStyles'; @@ -106,8 +104,6 @@ import 'emby-itemscontainer'; html += '
'; } - let supportsImageAnalysis = appHost.supports('imageanalysis'); - supportsImageAnalysis = false; html += cardBuilder.getCardsHtml({ items: group.items, showLocationTypeIndicator: false, @@ -116,11 +112,11 @@ import 'emby-itemscontainer'; preferThumb: true, lazy: true, showDetailsMenu: true, - centerText: !supportsImageAnalysis, + centerText: true, showParentTitle: true, overlayText: false, allowBottomPadding: allowBottomPadding, - cardLayout: supportsImageAnalysis, + cardLayout: false, overlayMoreButton: true, missingIndicator: false }); diff --git a/src/mypreferencesdisplay.html b/src/controllers/user/display/index.html similarity index 100% rename from src/mypreferencesdisplay.html rename to src/controllers/user/display/index.html diff --git a/src/controllers/user/display.js b/src/controllers/user/display/index.js similarity index 100% rename from src/controllers/user/display.js rename to src/controllers/user/display/index.js diff --git a/src/mypreferenceshome.html b/src/controllers/user/home/index.html similarity index 100% rename from src/mypreferenceshome.html rename to src/controllers/user/home/index.html diff --git a/src/controllers/user/home.js b/src/controllers/user/home/index.js similarity index 95% rename from src/controllers/user/home.js rename to src/controllers/user/home/index.js index e7058fd3ac..f811aa52b9 100644 --- a/src/controllers/user/home.js +++ b/src/controllers/user/home/index.js @@ -1,7 +1,4 @@ import HomescreenSettings from 'homescreenSettings'; -import dom from 'dom'; -import globalize from 'globalize'; -import loading from 'loading'; import * as userSettings from 'userSettings'; import autoFocuser from 'autoFocuser'; import 'listViewStyle'; diff --git a/src/mypreferencesmenu.html b/src/controllers/user/menu/index.html similarity index 100% rename from src/mypreferencesmenu.html rename to src/controllers/user/menu/index.html diff --git a/src/controllers/user/menu.js b/src/controllers/user/menu/index.js similarity index 96% rename from src/controllers/user/menu.js rename to src/controllers/user/menu/index.js index ef4b3b21c8..f44a193a52 100644 --- a/src/controllers/user/menu.js +++ b/src/controllers/user/menu/index.js @@ -1,6 +1,4 @@ import appHost from 'apphost'; -import connectionManager from 'connectionManager'; -import layoutManager from 'layoutManager'; import 'listViewStyle'; import 'emby-button'; diff --git a/src/mypreferencesplayback.html b/src/controllers/user/playback/index.html similarity index 100% rename from src/mypreferencesplayback.html rename to src/controllers/user/playback/index.html diff --git a/src/controllers/user/playback.js b/src/controllers/user/playback/index.js similarity index 95% rename from src/controllers/user/playback.js rename to src/controllers/user/playback/index.js index 5bcf055cd3..16c50a1980 100644 --- a/src/controllers/user/playback.js +++ b/src/controllers/user/playback/index.js @@ -1,7 +1,4 @@ import PlaybackSettings from 'playbackSettings'; -import dom from 'dom'; -import globalize from 'globalize'; -import loading from 'loading'; import * as userSettings from 'userSettings'; import autoFocuser from 'autoFocuser'; import 'listViewStyle'; diff --git a/src/myprofile.html b/src/controllers/user/profile/index.html similarity index 100% rename from src/myprofile.html rename to src/controllers/user/profile/index.html diff --git a/src/controllers/user/profile.js b/src/controllers/user/profile/index.js similarity index 100% rename from src/controllers/user/profile.js rename to src/controllers/user/profile/index.js diff --git a/src/mypreferencessubtitles.html b/src/controllers/user/subtitles/index.html similarity index 100% rename from src/mypreferencessubtitles.html rename to src/controllers/user/subtitles/index.html diff --git a/src/controllers/user/subtitles.js b/src/controllers/user/subtitles/index.js similarity index 100% rename from src/controllers/user/subtitles.js rename to src/controllers/user/subtitles/index.js diff --git a/src/wizardfinish.html b/src/controllers/wizard/finish/index.html similarity index 100% rename from src/wizardfinish.html rename to src/controllers/wizard/finish/index.html diff --git a/src/controllers/wizard/finish.js b/src/controllers/wizard/finish/index.js similarity index 100% rename from src/controllers/wizard/finish.js rename to src/controllers/wizard/finish/index.js diff --git a/src/wizardremoteaccess.html b/src/controllers/wizard/remote/index.html similarity index 100% rename from src/wizardremoteaccess.html rename to src/controllers/wizard/remote/index.html diff --git a/src/controllers/wizard/remoteaccess.js b/src/controllers/wizard/remote/index.js similarity index 100% rename from src/controllers/wizard/remoteaccess.js rename to src/controllers/wizard/remote/index.js diff --git a/src/wizardsettings.html b/src/controllers/wizard/settings/index.html similarity index 100% rename from src/wizardsettings.html rename to src/controllers/wizard/settings/index.html diff --git a/src/controllers/wizard/settings.js b/src/controllers/wizard/settings/index.js similarity index 100% rename from src/controllers/wizard/settings.js rename to src/controllers/wizard/settings/index.js diff --git a/src/wizardstart.html b/src/controllers/wizard/start/index.html similarity index 100% rename from src/wizardstart.html rename to src/controllers/wizard/start/index.html diff --git a/src/controllers/wizard/start.js b/src/controllers/wizard/start/index.js similarity index 100% rename from src/controllers/wizard/start.js rename to src/controllers/wizard/start/index.js diff --git a/src/wizarduser.html b/src/controllers/wizard/user/index.html similarity index 100% rename from src/wizarduser.html rename to src/controllers/wizard/user/index.html diff --git a/src/controllers/wizard/user.js b/src/controllers/wizard/user/index.js similarity index 100% rename from src/controllers/wizard/user.js rename to src/controllers/wizard/user/index.js diff --git a/src/dlnaprofile.html b/src/dlnaprofile.html index e960d97a0f..01636e6019 100644 --- a/src/dlnaprofile.html +++ b/src/dlnaprofile.html @@ -5,7 +5,6 @@

${HeaderProfileInformation}

- ${Help}
diff --git a/src/dlnaprofiles.html b/src/dlnaprofiles.html index b47b2fd6bf..615bb59ee8 100644 --- a/src/dlnaprofiles.html +++ b/src/dlnaprofiles.html @@ -11,7 +11,6 @@ - ${Help}

${CustomDlnaProfilesHelp}

diff --git a/src/elements/emby-collapse/emby-collapse.js b/src/elements/emby-collapse/emby-collapse.js index f980f19af0..c87e73d48f 100644 --- a/src/elements/emby-collapse/emby-collapse.js +++ b/src/elements/emby-collapse/emby-collapse.js @@ -7,55 +7,54 @@ import 'emby-button'; const EmbyButtonPrototype = Object.create(HTMLDivElement.prototype); function slideDownToShow(button, elem) { - - elem.classList.remove('hide'); - elem.classList.add('expanded'); - elem.style.height = 'auto'; - const height = elem.offsetHeight + 'px'; - elem.style.height = '0'; - - // trigger reflow - const newHeight = elem.offsetHeight; - elem.style.height = height; - - setTimeout(function () { - if (elem.classList.contains('expanded')) { - elem.classList.remove('hide'); - } else { - elem.classList.add('hide'); - } + requestAnimationFrame(() => { + elem.classList.remove('hide'); + elem.classList.add('expanded'); elem.style.height = 'auto'; - }, 300); + const height = elem.offsetHeight + 'px'; + elem.style.height = '0'; + // trigger reflow + // TODO: Find a better way to do this + const newHeight = elem.offsetHeight; /* eslint-disable-line no-unused-vars */ + elem.style.height = height; - const icon = button.querySelector('.material-icons'); - //icon.innerHTML = 'expand_less'; - icon.classList.add('emby-collapse-expandIconExpanded'); + setTimeout(function () { + if (elem.classList.contains('expanded')) { + elem.classList.remove('hide'); + } else { + elem.classList.add('hide'); + } + elem.style.height = 'auto'; + }, 300); + + const icon = button.querySelector('.material-icons'); + icon.classList.add('emby-collapse-expandIconExpanded'); + }); } function slideUpToHide(button, elem) { + requestAnimationFrame(() => { + elem.style.height = elem.offsetHeight + 'px'; + // trigger reflow + // TODO: Find a better way to do this + const newHeight = elem.offsetHeight; /* eslint-disable-line no-unused-vars */ + elem.classList.remove('expanded'); + elem.style.height = '0'; - elem.style.height = elem.offsetHeight + 'px'; - // trigger reflow - const newHeight = elem.offsetHeight; + setTimeout(function () { + if (elem.classList.contains('expanded')) { + elem.classList.remove('hide'); + } else { + elem.classList.add('hide'); + } + }, 300); - elem.classList.remove('expanded'); - elem.style.height = '0'; - - setTimeout(function () { - if (elem.classList.contains('expanded')) { - elem.classList.remove('hide'); - } else { - elem.classList.add('hide'); - } - }, 300); - - const icon = button.querySelector('.material-icons'); - //icon.innerHTML = 'expand_more'; - icon.classList.remove('emby-collapse-expandIconExpanded'); + const icon = button.querySelector('.material-icons'); + icon.classList.remove('emby-collapse-expandIconExpanded'); + }); } function onButtonClick(e) { - const button = this; const collapseContent = button.parentNode.querySelector('.collapseContent'); @@ -69,7 +68,6 @@ import 'emby-button'; } EmbyButtonPrototype.attachedCallback = function () { - if (this.classList.contains('emby-collapse')) { return; } diff --git a/src/elements/emby-input/emby-input.js b/src/elements/emby-input/emby-input.js index d27cc71564..3a71e29a6f 100644 --- a/src/elements/emby-input/emby-input.js +++ b/src/elements/emby-input/emby-input.js @@ -11,7 +11,6 @@ import 'webcomponents'; let supportsFloatingLabel = false; if (Object.getOwnPropertyDescriptor && Object.defineProperty) { - const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); // descriptor returning null in webos @@ -94,16 +93,13 @@ import 'webcomponents'; } } } - }; function onChange() { - const label = this.labelElement; if (this.value) { label.classList.remove('inputLabel-float'); } else { - const instanceSupportsFloat = supportsFloatingLabel && this.type !== 'date' && this.type !== 'time'; if (instanceSupportsFloat) { diff --git a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js index b1f8c4f4cf..67eacf3db9 100644 --- a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js +++ b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js @@ -7,14 +7,12 @@ import 'webcomponents'; /* eslint-disable indent */ function addNotificationEvent(instance, name, handler) { - const localHandler = handler.bind(instance); events.on(serverNotifications, name, localHandler); instance[name] = localHandler; } function removeNotificationEvent(instance, name) { - const handler = instance[name]; if (handler) { events.off(serverNotifications, name, handler); @@ -23,7 +21,6 @@ import 'webcomponents'; } function onRefreshProgress(e, apiClient, info) { - const indicator = this; if (!indicator.itemId) { @@ -31,7 +28,6 @@ import 'webcomponents'; } if (info.ItemId === indicator.itemId) { - const progress = parseFloat(info.Progress); if (progress && progress < 100) { @@ -40,14 +36,13 @@ import 'webcomponents'; this.classList.add('hide'); } - this.setProgress(progress); + this.setAttribute('data-progress', progress); } } let EmbyItemRefreshIndicatorPrototype = Object.create(EmbyProgressRing); EmbyItemRefreshIndicatorPrototype.createdCallback = function () { - // base method if (EmbyProgressRing.createdCallback) { EmbyProgressRing.createdCallback.call(this); @@ -57,7 +52,6 @@ import 'webcomponents'; }; EmbyItemRefreshIndicatorPrototype.attachedCallback = function () { - // base method if (EmbyProgressRing.attachedCallback) { EmbyProgressRing.attachedCallback.call(this); @@ -65,7 +59,6 @@ import 'webcomponents'; }; EmbyItemRefreshIndicatorPrototype.detachedCallback = function () { - // base method if (EmbyProgressRing.detachedCallback) { EmbyProgressRing.detachedCallback.call(this); diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index 1d4a67717a..691552c074 100644 --- a/src/elements/emby-itemscontainer/emby-itemscontainer.js +++ b/src/elements/emby-itemscontainer/emby-itemscontainer.js @@ -18,7 +18,6 @@ import 'webcomponents'; function onClick(e) { const itemsContainer = this; - const target = e.target; let multiSelect = itemsContainer.multiSelect; if (multiSelect) { @@ -148,7 +147,6 @@ import 'webcomponents'; }; function onUserDataChanged(e, apiClient, userData) { - const itemsContainer = this; import('cardBuilder').then(({default: cardBuilder}) => { @@ -175,7 +173,6 @@ import 'webcomponents'; } function onTimerCreated(e, apiClient, data) { - const itemsContainer = this; if (getEventsToMonitor(itemsContainer).indexOf('timers') !== -1) { @@ -361,7 +358,6 @@ import 'webcomponents'; let refreshIntervalEndTime = this.refreshIntervalEndTime; if (refreshIntervalEndTime) { - const remainingMs = refreshIntervalEndTime - new Date().getTime(); if (remainingMs > 0 && !this.needsRefresh) { resetRefreshInterval(this, remainingMs); diff --git a/src/elements/emby-playstatebutton/emby-playstatebutton.js b/src/elements/emby-playstatebutton/emby-playstatebutton.js index e1b34318b8..7b5c344095 100644 --- a/src/elements/emby-playstatebutton/emby-playstatebutton.js +++ b/src/elements/emby-playstatebutton/emby-playstatebutton.js @@ -21,7 +21,6 @@ import EmbyButtonPrototype from 'emby-button'; } function onClick(e) { - const button = this; const id = button.getAttribute('data-id'); const serverId = button.getAttribute('data-serverid'); @@ -70,7 +69,6 @@ import EmbyButtonPrototype from 'emby-button'; } function setTitle(button, itemType) { - if (itemType !== 'AudioBook' && itemType !== 'AudioPodcast') { button.title = globalize.translate('Watched'); } else { @@ -84,13 +82,11 @@ import EmbyButtonPrototype from 'emby-button'; } function clearEvents(button) { - button.removeEventListener('click', onClick); removeNotificationEvent(button, 'UserDataChanged'); } function bindEvents(button) { - clearEvents(button); button.addEventListener('click', onClick); @@ -100,7 +96,6 @@ import EmbyButtonPrototype from 'emby-button'; const EmbyPlaystateButtonPrototype = Object.create(EmbyButtonPrototype); EmbyPlaystateButtonPrototype.createdCallback = function () { - // base method if (EmbyButtonPrototype.createdCallback) { EmbyButtonPrototype.createdCallback.call(this); @@ -108,7 +103,6 @@ import EmbyButtonPrototype from 'emby-button'; }; EmbyPlaystateButtonPrototype.attachedCallback = function () { - // base method if (EmbyButtonPrototype.attachedCallback) { EmbyButtonPrototype.attachedCallback.call(this); @@ -117,7 +111,6 @@ import EmbyButtonPrototype from 'emby-button'; const itemId = this.getAttribute('data-id'); const serverId = this.getAttribute('data-serverid'); if (itemId && serverId) { - setState(this, this.getAttribute('data-played') === 'true', false); bindEvents(this); setTitle(this, this.getAttribute('data-type')); @@ -125,7 +118,6 @@ import EmbyButtonPrototype from 'emby-button'; }; EmbyPlaystateButtonPrototype.detachedCallback = function () { - // base method if (EmbyButtonPrototype.detachedCallback) { EmbyButtonPrototype.detachedCallback.call(this); @@ -136,9 +128,7 @@ import EmbyButtonPrototype from 'emby-button'; }; EmbyPlaystateButtonPrototype.setItem = function (item) { - if (item) { - this.setAttribute('data-id', item.Id); this.setAttribute('data-serverid', item.ServerId); @@ -147,9 +137,7 @@ import EmbyButtonPrototype from 'emby-button'; bindEvents(this); setTitle(this, item.Type); - } else { - this.removeAttribute('data-id'); this.removeAttribute('data-serverid'); this.removeAttribute('data-played'); diff --git a/src/elements/emby-progressring/emby-progressring.js b/src/elements/emby-progressring/emby-progressring.js index 062f64d78b..10db8b9a27 100644 --- a/src/elements/emby-progressring/emby-progressring.js +++ b/src/elements/emby-progressring/emby-progressring.js @@ -6,37 +6,34 @@ import 'webcomponents'; let EmbyProgressRing = Object.create(HTMLDivElement.prototype); EmbyProgressRing.createdCallback = function () { - this.classList.add('progressring'); const instance = this; import('text!./emby-progressring.template.html').then(({default: template}) => { instance.innerHTML = template; - //if (window.MutationObserver) { - // // create an observer instance - // var observer = new MutationObserver(function (mutations) { - // mutations.forEach(function (mutation) { + if (window.MutationObserver) { + // create an observer instance + var observer = new MutationObserver(function (mutations) { + mutations.forEach(function (mutation) { + instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0')); + }); + }); - // instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0')); - // }); - // }); + // configuration of the observer: + var config = { attributes: true, childList: false, characterData: false }; - // // configuration of the observer: - // var config = { attributes: true, childList: false, characterData: false }; + // pass in the target node, as well as the observer options + observer.observe(instance, config); - // // pass in the target node, as well as the observer options - // observer.observe(instance, config); - - // instance.observer = observer; - //} + instance.observer = observer; + } instance.setProgress(parseFloat(instance.getAttribute('data-progress') || '0')); }); }; EmbyProgressRing.setProgress = function (progress) { - progress = Math.floor(progress); let angle; @@ -50,7 +47,6 @@ import 'webcomponents'; this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)'; this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)'; } else if (progress >= 25 && progress < 50) { - angle = -90 + ((progress - 25) / 100) * 360; this.querySelector('.animate-0-25-b').style.transform = 'none'; @@ -83,7 +79,6 @@ import 'webcomponents'; }; EmbyProgressRing.detachedCallback = function () { - let observer = this.observer; if (observer) { diff --git a/src/elements/emby-radio/emby-radio.js b/src/elements/emby-radio/emby-radio.js index c8437d77e3..b31d436444 100644 --- a/src/elements/emby-radio/emby-radio.js +++ b/src/elements/emby-radio/emby-radio.js @@ -7,7 +7,6 @@ import 'webcomponents'; let EmbyRadioPrototype = Object.create(HTMLInputElement.prototype); function onKeyDown(e) { - // Don't submit form on enter // Real (non-emulator) Tizen does nothing on Space if (e.keyCode === 13 || e.keyCode === 32) { @@ -37,7 +36,6 @@ import 'webcomponents'; this.classList.add('mdl-radio__button'); let labelElement = this.parentNode; - //labelElement.classList.add('"mdl-radio mdl-js-radio mdl-js-ripple-effect'); labelElement.classList.add('mdl-radio'); labelElement.classList.add('mdl-js-radio'); labelElement.classList.add('mdl-js-ripple-effect'); diff --git a/src/elements/emby-ratingbutton/emby-ratingbutton.js b/src/elements/emby-ratingbutton/emby-ratingbutton.js index b455495a2e..06a88e6ea1 100644 --- a/src/elements/emby-ratingbutton/emby-ratingbutton.js +++ b/src/elements/emby-ratingbutton/emby-ratingbutton.js @@ -7,14 +7,12 @@ import EmbyButtonPrototype from 'emby-button'; /* eslint-disable indent */ function addNotificationEvent(instance, name, handler) { - const localHandler = handler.bind(instance); events.on(serverNotifications, name, localHandler); instance[name] = localHandler; } function removeNotificationEvent(instance, name) { - const handler = instance[name]; if (handler) { events.off(serverNotifications, name, handler); @@ -23,12 +21,10 @@ import EmbyButtonPrototype from 'emby-button'; } function showPicker(button, apiClient, itemId, likes, isFavorite) { - return apiClient.updateFavoriteStatus(apiClient.getCurrentUserId(), itemId, !isFavorite); } function onClick(e) { - const button = this; const id = button.getAttribute('data-id'); const serverId = button.getAttribute('data-serverid'); @@ -45,58 +41,44 @@ import EmbyButtonPrototype from 'emby-button'; } showPicker(button, apiClient, id, likes, isFavorite).then(function (userData) { - setState(button, userData.Likes, userData.IsFavorite); }); } function onUserDataChanged(e, apiClient, userData) { - const button = this; if (userData.ItemId === button.getAttribute('data-id')) { - setState(button, userData.Likes, userData.IsFavorite); } } function setState(button, likes, isFavorite, updateAttribute) { - const icon = button.querySelector('.material-icons'); if (isFavorite) { - if (icon) { icon.classList.add('favorite'); icon.classList.add('ratingbutton-icon-withrating'); } button.classList.add('ratingbutton-withrating'); - } else if (likes) { - if (icon) { icon.classList.add('favorite'); icon.classList.remove('ratingbutton-icon-withrating'); - //icon.innerHTML = 'thumb_up'; } button.classList.remove('ratingbutton-withrating'); - } else if (likes === false) { - if (icon) { icon.classList.add('favorite'); icon.classList.remove('ratingbutton-icon-withrating'); - //icon.innerHTML = 'thumb_down'; } button.classList.remove('ratingbutton-withrating'); - } else { - if (icon) { icon.classList.add('favorite'); icon.classList.remove('ratingbutton-icon-withrating'); - //icon.innerHTML = 'thumbs_up_down'; } button.classList.remove('ratingbutton-withrating'); } @@ -118,13 +100,11 @@ import EmbyButtonPrototype from 'emby-button'; } function clearEvents(button) { - button.removeEventListener('click', onClick); removeNotificationEvent(button, 'UserDataChanged'); } function bindEvents(button) { - clearEvents(button); button.addEventListener('click', onClick); @@ -134,7 +114,6 @@ import EmbyButtonPrototype from 'emby-button'; const EmbyRatingButtonPrototype = Object.create(EmbyButtonPrototype); EmbyRatingButtonPrototype.createdCallback = function () { - // base method if (EmbyButtonPrototype.createdCallback) { EmbyButtonPrototype.createdCallback.call(this); @@ -142,7 +121,6 @@ import EmbyButtonPrototype from 'emby-button'; }; EmbyRatingButtonPrototype.attachedCallback = function () { - // base method if (EmbyButtonPrototype.attachedCallback) { EmbyButtonPrototype.attachedCallback.call(this); @@ -151,7 +129,6 @@ import EmbyButtonPrototype from 'emby-button'; const itemId = this.getAttribute('data-id'); const serverId = this.getAttribute('data-serverid'); if (itemId && serverId) { - let likes = this.getAttribute('data-likes'); const isFavorite = this.getAttribute('data-isfavorite') === 'true'; if (likes === 'true') { @@ -170,7 +147,6 @@ import EmbyButtonPrototype from 'emby-button'; }; EmbyRatingButtonPrototype.detachedCallback = function () { - // base method if (EmbyButtonPrototype.detachedCallback) { EmbyButtonPrototype.detachedCallback.call(this); @@ -180,18 +156,14 @@ import EmbyButtonPrototype from 'emby-button'; }; EmbyRatingButtonPrototype.setItem = function (item) { - if (item) { - this.setAttribute('data-id', item.Id); this.setAttribute('data-serverid', item.ServerId); const userData = item.UserData || {}; setState(this, userData.Likes, userData.IsFavorite); bindEvents(this); - } else { - this.removeAttribute('data-id'); this.removeAttribute('data-serverid'); this.removeAttribute('data-likes'); diff --git a/src/elements/emby-scrollbuttons/emby-scrollbuttons.js b/src/elements/emby-scrollbuttons/emby-scrollbuttons.js index 239fbcfcda..fcff587392 100644 --- a/src/elements/emby-scrollbuttons/emby-scrollbuttons.js +++ b/src/elements/emby-scrollbuttons/emby-scrollbuttons.js @@ -36,6 +36,7 @@ const EmbyScrollButtonsPrototype = Object.create(HTMLDivElement.prototype); } function updateScrollButtons(scrollButtons, scrollSize, scrollPos, scrollWidth) { + // TODO: Check if hack is really needed // hack alert add twenty for rounding errors if (scrollWidth <= scrollSize + 20) { scrollButtons.scrollButtonsLeft.classList.add('hide'); @@ -122,7 +123,6 @@ const EmbyScrollButtonsPrototype = Object.create(HTMLDivElement.prototype); const direction = this.getAttribute('data-direction'); const scrollSize = getScrollSize(scroller); const scrollPos = getScrollPosition(scroller); - const scrollWidth = getScrollWidth(scroller); let newPos; if (direction === 'left') { diff --git a/src/elements/emby-select/emby-select.js b/src/elements/emby-select/emby-select.js index d45e7ef7a7..0629a74e52 100644 --- a/src/elements/emby-select/emby-select.js +++ b/src/elements/emby-select/emby-select.js @@ -9,7 +9,6 @@ import 'webcomponents'; const EmbySelectPrototype = Object.create(HTMLSelectElement.prototype); function enableNativeMenu() { - if (browser.edgeUwp || browser.xboxOne) { return true; } @@ -38,12 +37,10 @@ import 'webcomponents'; } function setValue(select, value) { - select.value = value; } function showActionSheet(select) { - const labelElem = getLabel(select); const title = labelElem ? (labelElem.textContent || labelElem.innerText) : null; @@ -112,7 +109,6 @@ import 'webcomponents'; let inputId = 0; EmbySelectPrototype.createdCallback = function () { - if (!this.id) { this.id = 'embyselect' + inputId; inputId++; @@ -132,7 +128,6 @@ import 'webcomponents'; }; EmbySelectPrototype.attachedCallback = function () { - if (this.classList.contains('emby-select')) { return; } @@ -151,7 +146,6 @@ import 'webcomponents'; }; EmbySelectPrototype.setLabel = function (text) { - const label = this.parentNode.querySelector('label'); label.innerHTML = text; diff --git a/src/elements/emby-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index e872f6c78b..2439331144 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -12,10 +12,7 @@ import 'emby-input'; let supportsValueSetOverride = false; - let enableWidthWithTransform; - if (Object.getOwnPropertyDescriptor && Object.defineProperty) { - const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); // descriptor returning null in webos if (descriptor && descriptor.configurable) { @@ -85,7 +82,6 @@ import 'emby-input'; * @param {boolean} [isValueSet] update by 'valueset' event or by timer */ function updateValues(isValueSet) { - // Do not update values by 'valueset' in case of soft-implemented dragging if (!!isValueSet && (!!this.keyboardDragging || !!this.touched)) { return; @@ -98,24 +94,18 @@ import 'emby-input'; // Keep only one per slider frame request cancelAnimationFrame(range.updateValuesFrame); range.updateValuesFrame = requestAnimationFrame(function () { - let backgroundLower = range.backgroundLower; if (backgroundLower) { let fraction = (value - range.min) / (range.max - range.min); - if (enableWidthWithTransform) { - backgroundLower.style.transform = 'scaleX(' + (fraction) + ')'; - } else { - fraction *= 100; - backgroundLower.style.width = fraction + '%'; - } + fraction *= 100; + backgroundLower.style.width = fraction + '%'; } }); } function updateBubble(range, value, bubble, bubbleText) { - requestAnimationFrame(function () { const bubbleTrackRect = range.sliderBubbleTrack.getBoundingClientRect(); const bubbleRect = bubble.getBoundingClientRect(); @@ -141,15 +131,10 @@ import 'emby-input'; } EmbySliderPrototype.attachedCallback = function () { - if (this.getAttribute('data-embyslider') === 'true') { return; } - if (enableWidthWithTransform == null) { - //enableWidthWithTransform = browser.supportsCssAnimation(); - } - this.setAttribute('data-embyslider', 'true'); this.classList.add('mdl-slider'); @@ -177,11 +162,7 @@ import 'emby-input'; // the more of these, the more ranges we can display htmlToInsert += '
'; - if (enableWidthWithTransform) { - htmlToInsert += '
'; - } else { - htmlToInsert += '
'; - } + htmlToInsert += '
'; htmlToInsert += '
'; htmlToInsert += '
'; @@ -225,14 +206,12 @@ import 'emby-input'; sliderBubble.classList.add('hide'); hasHideClass = true; - }, { passive: true }); /* eslint-disable-next-line compat/compat */ dom.addEventListener(this, (window.PointerEvent ? 'pointermove' : 'mousemove'), function (e) { - if (!this.dragging) { const bubbleValue = mapClientToFraction(this, e.clientX) * 100; @@ -243,7 +222,6 @@ import 'emby-input'; hasHideClass = false; } } - }, { passive: true }); @@ -422,7 +400,6 @@ import 'emby-input'; }; function setRange(elem, startPercent, endPercent) { - const style = elem.style; style.left = Math.max(startPercent, 0) + '%'; @@ -431,13 +408,11 @@ import 'emby-input'; } function mapRangesFromRuntimeToPercent(ranges, runtime) { - if (!runtime) { return []; } return ranges.map(function (r) { - return { start: (r.start / runtime) * 100, end: (r.end / runtime) * 100 @@ -446,7 +421,6 @@ import 'emby-input'; } EmbySliderPrototype.setBufferedRanges = function (ranges, runtime, position) { - const elem = this.backgroundUpper; if (!elem) { return; @@ -459,7 +433,6 @@ import 'emby-input'; } for (const range in ranges) { - if (position != null) { if (position >= range.end) { continue; @@ -474,7 +447,6 @@ import 'emby-input'; }; EmbySliderPrototype.setIsClear = function (isClear) { - const backgroundLower = this.backgroundLower; if (backgroundLower) { if (isClear) { @@ -494,7 +466,6 @@ import 'emby-input'; } EmbySliderPrototype.detachedCallback = function () { - const interval = this.interval; if (interval) { clearInterval(interval); diff --git a/src/elements/emby-tabs/emby-tabs.js b/src/elements/emby-tabs/emby-tabs.js index f3cd9d38cc..320a14e2cb 100644 --- a/src/elements/emby-tabs/emby-tabs.js +++ b/src/elements/emby-tabs/emby-tabs.js @@ -13,12 +13,10 @@ import 'scrollStyles'; const activeButtonClass = buttonClass + '-active'; function setActiveTabButton(tabs, newButton, oldButton, animate) { - newButton.classList.add(activeButtonClass); } function getTabPanel(tabs, index) { - return null; } @@ -29,15 +27,7 @@ import 'scrollStyles'; } } - function addActivePanelClass(tabs, index) { - let tabPanel = getTabPanel(tabs, index); - if (tabPanel) { - tabPanel.classList.add('is-active'); - } - } - function fadeInRight(elem) { - const pct = browser.mobile ? '4%' : '0.5%'; const keyframes = [ @@ -52,7 +42,6 @@ import 'scrollStyles'; } function triggerBeforeTabChange(tabs, index, previousIndex) { - tabs.dispatchEvent(new CustomEvent('beforetabchange', { detail: { selectedTabIndex: index, @@ -76,14 +65,12 @@ import 'scrollStyles'; } function onClick(e) { - const tabs = this; const current = tabs.querySelector('.' + activeButtonClass); const tabButton = dom.parentWithClass(e.target, buttonClass); if (tabButton && tabButton !== current) { - if (current) { current.classList.remove(activeButtonClass); } @@ -98,7 +85,6 @@ import 'scrollStyles'; // If toCenter is called syncronously within the click event, it sometimes ends up canceling it setTimeout(function () { - tabs.selectedTabIndex = index; tabs.dispatchEvent(new CustomEvent('tabchange', { @@ -112,12 +98,10 @@ import 'scrollStyles'; if (tabs.scroller) { tabs.scroller.toCenter(tabButton, false); } - } } function initScroller(tabs) { - if (tabs.scroller) { return; } @@ -153,7 +137,6 @@ import 'scrollStyles'; } EmbyTabs.createdCallback = function () { - if (this.classList.contains('emby-tabs')) { return; } @@ -166,7 +149,6 @@ import 'scrollStyles'; }; EmbyTabs.focus = function () { - const selected = this.querySelector('.' + activeButtonClass); if (selected) { @@ -177,21 +159,18 @@ import 'scrollStyles'; }; EmbyTabs.refresh = function () { - if (this.scroller) { this.scroller.reload(); } }; EmbyTabs.attachedCallback = function () { - initScroller(this); const current = this.querySelector('.' + activeButtonClass); const currentIndex = current ? parseInt(current.getAttribute('data-index')) : parseInt(this.getAttribute('data-index') || '0'); if (currentIndex !== -1) { - this.selectedTabIndex = currentIndex; const tabButtons = this.querySelectorAll('.' + buttonClass); @@ -210,7 +189,6 @@ import 'scrollStyles'; }; EmbyTabs.detachedCallback = function () { - if (this.scroller) { this.scroller.destroy(); this.scroller = null; @@ -222,16 +200,13 @@ import 'scrollStyles'; }; function getSelectedTabButton(elem) { - return elem.querySelector('.' + activeButtonClass); } EmbyTabs.selectedIndex = function (selected, triggerEvent) { - const tabs = this; if (selected == null) { - return tabs.selectedTabIndex || 0; } @@ -242,7 +217,6 @@ import 'scrollStyles'; const tabButtons = tabs.querySelectorAll('.' + buttonClass); if (current === selected || triggerEvent === false) { - triggerBeforeTabChange(tabs, selected, current); tabs.dispatchEvent(new CustomEvent('tabchange', { @@ -257,23 +231,18 @@ import 'scrollStyles'; if (current !== selected && currentTabButton) { currentTabButton.classList.remove(activeButtonClass); } - } else { - onClick.call(tabs, { target: tabButtons[selected] }); - //tabButtons[selected].click(); } }; function getSibling(elem, method) { - let sibling = elem[method]; while (sibling) { if (sibling.classList.contains(buttonClass)) { - if (!sibling.classList.contains('hide')) { return sibling; } @@ -286,7 +255,6 @@ import 'scrollStyles'; } EmbyTabs.selectNext = function () { - const current = getSelectedTabButton(this); const sibling = getSibling(current, 'nextSibling'); @@ -299,7 +267,6 @@ import 'scrollStyles'; }; EmbyTabs.selectPrevious = function () { - const current = getSelectedTabButton(this); const sibling = getSibling(current, 'previousSibling'); @@ -312,14 +279,12 @@ import 'scrollStyles'; }; EmbyTabs.triggerBeforeTabChange = function (selected) { - const tabs = this; triggerBeforeTabChange(tabs, tabs.selectedIndex()); }; EmbyTabs.triggerTabChange = function (selected) { - const tabs = this; tabs.dispatchEvent(new CustomEvent('tabchange', { @@ -330,8 +295,6 @@ import 'scrollStyles'; }; EmbyTabs.setTabEnabled = function (index, enabled) { - - const tabs = this; const btn = this.querySelector('.emby-tab-button[data-index="' + index + '"]'); if (enabled) { diff --git a/src/elements/emby-textarea/emby-textarea.js b/src/elements/emby-textarea/emby-textarea.js index d98cc8c07e..c14724346a 100644 --- a/src/elements/emby-textarea/emby-textarea.js +++ b/src/elements/emby-textarea/emby-textarea.js @@ -47,7 +47,6 @@ import 'emby-input'; return; } let newHeight = 0; - let hasGrown = false; if ((textarea.scrollHeight - offset) > self.maxAllowedHeight) { textarea.style.overflowY = 'scroll'; @@ -56,7 +55,6 @@ import 'emby-input'; textarea.style.overflowY = 'hidden'; textarea.style.height = 'auto'; newHeight = textarea.scrollHeight/* - offset*/; - hasGrown = true; } $('.customCssContainer').css('height', newHeight + 'px'); textarea.style.height = newHeight + 'px'; @@ -75,7 +73,6 @@ import 'emby-input'; let elementId = 0; if (Object.getOwnPropertyDescriptor && Object.defineProperty) { - const descriptor = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, 'value'); // descriptor returning null in webos @@ -95,7 +92,6 @@ import 'emby-input'; } EmbyTextAreaPrototype.createdCallback = function () { - if (!this.id) { this.id = 'embytextarea' + elementId; elementId++; @@ -103,7 +99,6 @@ import 'emby-input'; }; EmbyTextAreaPrototype.attachedCallback = function () { - if (this.classList.contains('emby-textarea')) { return; } diff --git a/src/elements/emby-toggle/emby-toggle.js b/src/elements/emby-toggle/emby-toggle.js index 8e82160806..5e78b38dd3 100644 --- a/src/elements/emby-toggle/emby-toggle.js +++ b/src/elements/emby-toggle/emby-toggle.js @@ -6,7 +6,6 @@ import 'webcomponents'; const EmbyTogglePrototype = Object.create(HTMLInputElement.prototype); function onKeyDown(e) { - // Don't submit form on enter if (e.keyCode === 13) { e.preventDefault(); @@ -22,7 +21,6 @@ import 'webcomponents'; } EmbyTogglePrototype.attachedCallback = function () { - if (this.getAttribute('data-embytoggle') === 'true') { return; } diff --git a/src/legacy/focusPreventScroll.js b/src/legacy/focusPreventScroll.js index 93f53dca29..97d6b0b120 100644 --- a/src/legacy/focusPreventScroll.js +++ b/src/legacy/focusPreventScroll.js @@ -1,3 +1,4 @@ +// TODO: Move to external library (https://github.com/calvellido/focus-options-polyfill) // Polyfill to add support for preventScroll by focus function if (HTMLElement.prototype.nativeFocus === undefined) { diff --git a/src/libraries/scroller.js b/src/libraries/scroller.js index 8c67127eb3..645a8ea85c 100644 --- a/src/libraries/scroller.js +++ b/src/libraries/scroller.js @@ -872,13 +872,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc if (item === undefined) { this.slideTo(this._pos[location], immediate); } else { - - //if (!transform) { - - // item.scrollIntoView(); - // return; - //} - var itemPos = this.getPos(item); if (itemPos) { diff --git a/src/plugins/backdropScreensaver/plugin.js b/src/plugins/backdropScreensaver/plugin.js index 88bfa1f4b7..61b5b808a5 100644 --- a/src/plugins/backdropScreensaver/plugin.js +++ b/src/plugins/backdropScreensaver/plugin.js @@ -23,9 +23,7 @@ class BackdropScreensaver { const apiClient = connectionManager.currentApiClient(); apiClient.getItems(apiClient.getCurrentUserId(), query).then((result) => { - if (result.Items.length) { - import('slideshow').then(({default: Slideshow}) => { const newSlideShow = new Slideshow({ showTitle: true, diff --git a/src/plugins/chromecastPlayer/chromecastHelpers.js b/src/plugins/chromecastPlayer/chromecastHelpers.js index ca2d27c977..3fbff5507b 100644 --- a/src/plugins/chromecastPlayer/chromecastHelpers.js +++ b/src/plugins/chromecastPlayer/chromecastHelpers.js @@ -11,7 +11,6 @@ define(['events'], function (events) { // This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. // http://creativecommons.org/licenses/by-sa/4.0/ (function () { - // Original URL regex from the Android android.text.util.Linkify function, found here: // http://stackoverflow.com/a/19696443 // @@ -152,14 +151,12 @@ define(['events'], function (events) { var cache = {}; function isValidIpAddress(address) { - var links = LinkParser.parse(address); return links.length == 1; } function isLocalIpAddress(address) { - address = address.toLowerCase(); if (address.indexOf('127.0.0.1') !== -1) { @@ -173,7 +170,6 @@ define(['events'], function (events) { } function getServerAddress(apiClient) { - var serverAddress = apiClient.serverAddress(); if (isValidIpAddress(serverAddress) && !isLocalIpAddress(serverAddress)) { @@ -215,7 +211,6 @@ define(['events'], function (events) { } function getCachedValue(key) { - var obj = cache[key]; if (obj && (new Date().getTime() - obj.time) < 180000) { diff --git a/src/plugins/chromecastPlayer/plugin.js b/src/plugins/chromecastPlayer/plugin.js index 3d4f293cc8..d3fc8d0ef8 100644 --- a/src/plugins/chromecastPlayer/plugin.js +++ b/src/plugins/chromecastPlayer/plugin.js @@ -8,7 +8,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' var PlayerName = 'Google Cast'; function sendConnectionResult(isOk) { - var resolve = currentResolve; var reject = currentReject; @@ -60,7 +59,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' var messageNamespace = 'urn:x-cast:com.connectsdk'; var CastPlayer = function () { - /* device variables */ // @type {DEVICE_STATE} A state for device this.deviceState = DEVICE_STATE.IDLE; @@ -325,7 +323,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; CastPlayer.prototype.sendMessage = function (message) { - var player = this; var receiverName = null; @@ -391,7 +388,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' * @param {Object} mediaSession A new media object. */ CastPlayer.prototype.onMediaDiscovered = function (how, mediaSession) { - console.debug('chromecast new media session ID:' + mediaSession.mediaSessionId + ' (' + how + ')'); this.currentMediaSession = mediaSession; @@ -453,9 +449,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; function normalizeImages(state) { - if (state && state.NowPlayingItem) { - var item = state.NowPlayingItem; if (!item.ImageTags || !item.ImageTags.Primary) { @@ -475,7 +469,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' } function getItemsForPlayback(apiClient, query) { - var userId = apiClient.getCurrentUserId(); if (query.Ids && query.Ids.split(',').length === 1) { @@ -486,7 +479,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; }); } else { - query.Limit = query.Limit || 100; query.ExcludeLocationTypes = 'Virtual'; query.EnableTotalRecordCount = false; @@ -496,9 +488,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' } function bindEventForRelay(instance, eventName) { - events.on(instance._castPlayer, eventName, function (e, data) { - console.debug('cc: ' + eventName); var state = instance.getPlayerStateInternal(data); @@ -507,7 +497,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' } function initializeChromecast() { - var instance = this; instance._castPlayer = new CastPlayer(); @@ -519,7 +508,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' })); events.on(instance._castPlayer, 'connect', function (e) { - if (currentResolve) { sendConnectionResult(true); } else { @@ -532,7 +520,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }); events.on(instance._castPlayer, 'playbackstart', function (e, data) { - console.debug('cc: playbackstart'); instance._castPlayer.initializeCastPlayer(); @@ -542,7 +529,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }); events.on(instance._castPlayer, 'playbackstop', function (e, data) { - console.debug('cc: playbackstop'); var state = instance.getPlayerStateInternal(data); @@ -560,7 +546,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }); events.on(instance._castPlayer, 'playbackprogress', function (e, data) { - console.debug('cc: positionchange'); var state = instance.getPlayerStateInternal(data); @@ -575,7 +560,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' bindEventForRelay(instance, 'shufflequeuemodechange'); events.on(instance._castPlayer, 'playstatechange', function (e, data) { - console.debug('cc: playstatechange'); var state = instance.getPlayerStateInternal(data); @@ -584,7 +568,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' } function ChromecastPlayer() { - // playbackManager needs this this.name = PlayerName; this.type = 'mediaplayer'; @@ -624,7 +607,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' // This is a privately used method ChromecastPlayer.prototype.getCurrentTargetInfo = function () { - var appName = null; var castPlayer = this._castPlayer; @@ -661,7 +643,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.getPlayerStateInternal = function (data) { - var triggerStateChange = false; if (data && !this.lastPlayerData) { triggerStateChange = true; @@ -682,13 +663,11 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.playWithCommand = function (options, command) { - if (!options.items) { var apiClient = connectionManager.getApiClient(options.serverId); var instance = this; return apiClient.getItem(apiClient.getCurrentUserId(), options.ids[0]).then(function (item) { - options.items = [item]; return instance.playWithCommand(options, command); }); @@ -705,7 +684,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.seek = function (position) { - position = parseInt(position); position = position / 10000000; @@ -737,7 +715,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.setMaxStreamingBitrate = function (options) { - this._castPlayer.sendMessage({ options: options, command: 'SetMaxStreamingBitrate' @@ -773,11 +750,9 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' vol = Math.max(vol, 0); this._castPlayer.session.setReceiverVolumeLevel(vol); - }; ChromecastPlayer.prototype.endSession = function () { - var instance = this; this.stop().then(function () { @@ -799,7 +774,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.setVolume = function (vol) { - vol = Math.min(vol, 100); vol = Math.max(vol, 0); vol = vol / 100; @@ -836,7 +810,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.displayContent = function (options) { - this._castPlayer.sendMessage({ options: options, command: 'DisplayContent' @@ -844,7 +817,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.setMute = function (isMuted) { - var castPlayer = this._castPlayer; if (isMuted) { @@ -873,7 +845,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.playTrailers = function (item) { - this._castPlayer.sendMessage({ options: { ItemId: item.Id, @@ -902,7 +873,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.toggleMute = function () { - this._castPlayer.sendMessage({ options: {}, command: 'ToggleMute' @@ -946,7 +916,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.getVolume = function () { - var state = this.lastPlayerData || {}; state = state.PlayState || {}; @@ -971,7 +940,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.currentTime = function (val) { - if (val != null) { return this.seek(val); } @@ -1008,45 +976,36 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.shuffle = function (item) { - var apiClient = connectionManager.getApiClient(item.ServerId); var userId = apiClient.getCurrentUserId(); var instance = this; apiClient.getItem(userId, item.Id).then(function (item) { - instance.playWithCommand({ items: [item] }, 'Shuffle'); - }); - }; ChromecastPlayer.prototype.instantMix = function (item) { - var apiClient = connectionManager.getApiClient(item.ServerId); var userId = apiClient.getCurrentUserId(); var instance = this; apiClient.getItem(userId, item.Id).then(function (item) { - instance.playWithCommand({ items: [item] }, 'InstantMix'); - }); - }; ChromecastPlayer.prototype.canPlayMediaType = function (mediaType) { - mediaType = (mediaType || '').toLowerCase(); return mediaType === 'audio' || mediaType === 'video'; }; @@ -1064,13 +1023,9 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.play = function (options) { - if (options.items) { - return this.playWithCommand(options, 'PlayNow'); - } else { - if (!options.serverId) { throw new Error('serverId required!'); } @@ -1083,10 +1038,8 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' Ids: options.ids.join(',') }).then(function (result) { - options.items = result.Items; return instance.playWithCommand(options, 'PlayNow'); - }); } }; @@ -1119,7 +1072,6 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' }; ChromecastPlayer.prototype.getPlayerState = function () { - return this.getPlayerStateInternal() || {}; }; diff --git a/src/plugins/experimentalWarnings/plugin.js b/src/plugins/experimentalWarnings/plugin.js index 632e38208c..c39612d45b 100644 --- a/src/plugins/experimentalWarnings/plugin.js +++ b/src/plugins/experimentalWarnings/plugin.js @@ -1,14 +1,7 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function (connectionManager, globalize, userSettings, appHost) { 'use strict'; - function getRequirePromise(deps) { - - return new Promise(function (resolve, reject) { - - require(deps, resolve); - }); - } - + // TODO: Replace with date-fns // https://stackoverflow.com/questions/6117814/get-week-of-year-in-javascript-like-in-php function getWeek(date) { var d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate())); @@ -19,13 +12,13 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } function showMessage(text, userSettingsKey, appHostFeature) { - if (appHost.supports(appHostFeature)) { return Promise.resolve(); } var now = new Date(); + // TODO: Use date-fns userSettingsKey += now.getFullYear() + '-w' + getWeek(now); if (userSettings.get(userSettingsKey, false) === '1') { @@ -33,11 +26,9 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } return new Promise(function (resolve, reject) { - userSettings.set(userSettingsKey, '1', false); require(['alert'], function (alert) { - return alert(text).then(resolve, resolve); }); }); @@ -56,14 +47,12 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( } function ExpirementalPlaybackWarnings() { - this.name = 'Experimental playback warnings'; this.type = 'preplayintercept'; this.id = 'expirementalplaybackwarnings'; } ExpirementalPlaybackWarnings.prototype.intercept = function (options) { - var item = options.item; if (!item) { return Promise.resolve(); diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 8265987e28..16fce8c9d1 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -68,7 +68,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp // issue head request to get content type return new Promise(function (resolve, reject) { - require(['fetchHelper'], function (fetchHelper) { fetchHelper.ajax({ url: url, @@ -96,7 +95,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp self.priority = 1; self.play = function (options) { - self._started = false; self._timeUpdated = false; self._currentTime = null; @@ -106,7 +104,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp }; function setCurrentSrc(elem, options) { - elem.removeEventListener('error', onError); unBindEvents(elem); @@ -131,17 +128,13 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } return enableHlsPlayer(val, options.item, options.mediaSource, 'Audio').then(function () { - return new Promise(function (resolve, reject) { - requireHlsPlayer(function () { var hls = new Hls({ manifestLoadingTimeOut: 20000, xhrSetup: function(xhr, url) { xhr.withCredentials = true; } - //appendErrorMaxRetry: 6, - //debug: true }); hls.loadSource(val); hls.attachMedia(elem); @@ -153,16 +146,13 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp self._currentSrc = val; }); }); - }, function () { - elem.autoplay = true; // Safari will not send cookies without this elem.crossOrigin = 'use-credentials'; return htmlMediaHelper.applySrc(elem, val, options).then(function () { - self._currentSrc = val; return htmlMediaHelper.playWithPromise(elem, onError); @@ -191,16 +181,13 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } self.stop = function (destroyPlayer) { - cancelFadeTimeout(); var elem = self._mediaElement; var src = self._currentSrc; if (elem && src) { - if (!destroyPlayer || !supportsFade()) { - elem.pause(); htmlMediaHelper.onEndedInternal(self, elem, onError); @@ -214,7 +201,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp var originalVolume = elem.volume; return fade(self, elem, elem.volume).then(function () { - elem.pause(); elem.volume = originalVolume; @@ -233,7 +219,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp }; function createMediaElement() { - var elem = self._mediaElement; if (elem) { @@ -258,12 +243,10 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } function onEnded() { - htmlMediaHelper.onEndedInternal(self, this, onError); } function onTimeUpdate() { - // Get the player position + the transcoding offset var time = this.currentTime; @@ -275,7 +258,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } function onVolumeChange() { - if (!self._isFadingOut) { htmlMediaHelper.saveVolume(this.volume); events.trigger(self, 'volumechange'); @@ -283,7 +265,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } function onPlaying(e) { - if (!self._started) { self._started = true; this.removeAttribute('controls'); @@ -294,7 +275,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } function onPlay(e) { - events.trigger(self, 'unpause'); } @@ -307,7 +287,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp } function onError() { - var errorCode = this.error ? (this.error.code || 0) : 0; var errorMessage = this.error ? (this.error.message || '') : ''; console.error('media element error: ' + errorCode.toString() + ' ' + errorMessage); @@ -351,12 +330,10 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp }; HtmlAudioPlayer.prototype.canPlayMediaType = function (mediaType) { - return (mediaType || '').toLowerCase() === 'audio'; }; HtmlAudioPlayer.prototype.getDeviceProfile = function (item) { - if (appHost.getDeviceProfile) { return appHost.getDeviceProfile(item); } @@ -366,7 +343,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp // Save this for when playback stops, because querying the time at that point might return 0 HtmlAudioPlayer.prototype.currentTime = function (val) { - var mediaElement = this._mediaElement; if (mediaElement) { if (val != null) { @@ -384,7 +360,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp }; HtmlAudioPlayer.prototype.duration = function (val) { - var mediaElement = this._mediaElement; if (mediaElement) { var duration = mediaElement.duration; @@ -399,10 +374,8 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp HtmlAudioPlayer.prototype.seekable = function () { var mediaElement = this._mediaElement; if (mediaElement) { - var seekable = mediaElement.seekable; if (seekable && seekable.length) { - var start = seekable.start(0); var end = seekable.end(0); @@ -423,7 +396,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp HtmlAudioPlayer.prototype.getBufferedRanges = function () { var mediaElement = this._mediaElement; if (mediaElement) { - return htmlMediaHelper.getBufferedRanges(this, mediaElement); } @@ -453,7 +425,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp }; HtmlAudioPlayer.prototype.paused = function () { - var mediaElement = this._mediaElement; if (mediaElement) { return mediaElement.paused; @@ -487,7 +458,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp HtmlAudioPlayer.prototype.getVolume = function () { var mediaElement = this._mediaElement; if (mediaElement) { - return Math.min(Math.round(mediaElement.volume * 100), 100); } }; @@ -501,7 +471,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp }; HtmlAudioPlayer.prototype.setMute = function (mute) { - var mediaElement = this._mediaElement; if (mediaElement) { mediaElement.muted = mute; diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index 8e403e6021..c9c27858e8 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -37,7 +37,6 @@ let mediaManager; function tryRemoveElement(elem) { const parentNode = elem.parentNode; if (parentNode) { - // Seeing crashes in edge webview try { parentNode.removeChild(elem); @@ -48,7 +47,6 @@ function tryRemoveElement(elem) { } function enableNativeTrackSupport(currentSrc, track) { - if (track) { if (track.DeliveryMethod === 'Embed') { return true; @@ -61,13 +59,6 @@ function tryRemoveElement(elem) { } } - // subs getting blocked due to CORS - if (browser.chromecast) { - if ((currentSrc || '').toLowerCase().includes('.m3u8')) { - return false; - } - } - if (browser.ps4) { return false; } @@ -141,7 +132,6 @@ function tryRemoveElement(elem) { } function getTextTrackUrl(track, item, format) { - if (itemHelper.isLocalItem(item) && track.Path) { return track.Path; } @@ -156,7 +146,6 @@ function tryRemoveElement(elem) { function getDefaultProfile() { return import('browserdeviceprofile').then(({default: profileBuilder}) => { - return profileBuilder({}); }); } @@ -365,7 +354,6 @@ function tryRemoveElement(elem) { loading.hide(); }); - } else { return Promise.resolve(); } @@ -425,8 +413,6 @@ function tryRemoveElement(elem) { xhrSetup(xhr) { xhr.withCredentials = true; } - //appendErrorMaxRetry: 6, - //debug: true }); hls.loadSource(url); hls.attachMedia(elem); @@ -780,9 +766,7 @@ function tryRemoveElement(elem) { const profiles = deviceProfile.DirectPlayProfiles || []; return profiles.filter(function (p) { - if (p.Type === 'Video') { - if (!p.AudioCodec) { return true; } @@ -791,7 +775,6 @@ function tryRemoveElement(elem) { } return false; - }).length > 0; } @@ -1428,7 +1411,6 @@ function tryRemoveElement(elem) { if (selectedTrackEvent && selectedTrackEvent.Text) { subtitleTextElement.innerHTML = normalizeTrackEventText(selectedTrackEvent.Text, true); subtitleTextElement.classList.remove('hide'); - } else { subtitleTextElement.classList.add('hide'); } @@ -1453,7 +1435,6 @@ function tryRemoveElement(elem) { if (streamIndex !== -1) { this.setCueAppearance(); } - } else { // null these out to disable the player's native display (handled below) streamIndex = -1; @@ -1482,10 +1463,6 @@ function tryRemoveElement(elem) { let html = ''; let cssClass = 'htmlvideoplayer'; - if (!browser.chromecast) { - cssClass += ' htmlvideoplayer-moveupsubtitles'; - } - // Can't autoplay in these browsers so we need to use the full controls, at least until playback starts if (!appHost.supports('htmlvideoautoplay')) { html += '