diff --git a/.eslintrc.js b/.eslintrc.js index baf6d0e084..d9080d1ac4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -39,6 +39,8 @@ 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'], 'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], 'semi': ['error'], @@ -98,9 +100,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 881415c1db..da8c87aedd 100644 --- a/package.json +++ b/package.json @@ -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", 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..3f772250e1 100644 --- a/src/components/actionSheet/actionSheet.js +++ b/src/components/actionSheet/actionSheet.js @@ -255,8 +255,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; 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/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 7af7ed4a95..a86c585759 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -153,15 +153,10 @@ 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 @@ -309,33 +304,13 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro 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; } @@ -535,9 +510,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; } 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..4c64c5e06b 100644 --- a/src/components/cardbuilder/cardBuilder.js +++ b/src/components/cardbuilder/cardBuilder.js @@ -1163,6 +1163,7 @@ import 'programStyles'; function importRefreshIndicator() { if (!refreshIndicatorLoaded) { refreshIndicatorLoaded = true; + /* eslint-disable-next-line no-unused-expressions */ import('emby-itemrefreshindicator'); } } @@ -1498,6 +1499,7 @@ import 'programStyles'; const userData = item.UserData || {}; if (itemHelper.canMarkPlayed(item)) { + /* eslint-disable-next-line no-unused-expressions */ import('emby-playstatebutton'); html += ''; } @@ -1506,6 +1508,7 @@ import 'programStyles'; const likes = userData.Likes == null ? '' : userData.Likes; + /* eslint-disable-next-line no-unused-expressions */ import('emby-ratingbutton'); html += ''; } diff --git a/src/components/collectionEditor/collectionEditor.js b/src/components/collectionEditor/collectionEditor.js index 18cc0d311f..70e2083cd3 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'; @@ -248,10 +247,6 @@ import 'flexStyles'; html += title; html += ''; - if (appHost.supports('externallinks')) { - html += `${globalize.translate('Help')}`; - } - html += ''; html += getEditorHtml(); diff --git a/src/components/dialog/dialog.js b/src/components/dialog/dialog.js index 937e96d297..2250dac7da 100644 --- a/src/components/dialog/dialog.js +++ b/src/components/dialog/dialog.js @@ -45,10 +45,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 { 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/filtermenu/filtermenu.js b/src/components/filtermenu/filtermenu.js index 936e2b0407..a757e3ee19 100644 --- a/src/components/filtermenu/filtermenu.js +++ b/src/components/filtermenu/filtermenu.js @@ -39,34 +39,11 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', } 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) { @@ -81,11 +58,7 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost', }); apiClient.getFilters(filterMenuOptions).then(function (result) { - renderDynamicFilters(context, result, options); - }, function () { - - // older server }); } @@ -314,13 +287,7 @@ 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 () { diff --git a/src/components/focusManager.js b/src/components/focusManager.js index f2022cc445..a5dcad38ca 100644 --- a/src/components/focusManager.js +++ b/src/components/focusManager.js @@ -272,14 +272,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 +297,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) { continue; } - //if (!isCurrentlyFocusableInternal(curr)) { - // continue; - //} - var elementRect = getOffset(curr); // not currently visible diff --git a/src/components/guide/guide.js b/src/components/guide/guide.js index bb4a36497c..9fd78fdf49 100644 --- a/src/components/guide/guide.js +++ b/src/components/guide/guide.js @@ -43,11 +43,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'); } @@ -121,7 +119,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; @@ -577,7 +574,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', html += '
'; if (program.IsHD && options.showHdIcon) { - //html += ''; if (layoutManager.tv) { html += '
HD
'; } else { @@ -866,6 +862,7 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var dateTabsHtml = ''; var tabIndex = 0; + // TODO: Use date-fns var date = new Date(); if (currentDate) { @@ -873,7 +870,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', } date.setHours(nowHours, 0, 0, 0); - //start.setHours(0, 0, 0, 0); var startTimeOfDayMs = (start.getHours() * 60 * 60 * 1000); startTimeOfDayMs += start.getMinutes() * 60 * 1000; @@ -951,8 +947,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', var focusableElements; var newRow; - var scrollX = false; - switch (e.detail.command) { case 'up': @@ -1018,7 +1012,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', focusManager.moveLeft(target, { container: container }); - scrollX = true; break; case 'right': container = programCell ? dom.parentWithClass(programCell, 'channelPrograms') : null; @@ -1027,7 +1020,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager', focusManager.moveRight(target, { container: container }); - scrollX = true; break; default: return; diff --git a/src/components/homeScreenSettings/homeScreenSettings.js b/src/components/homeScreenSettings/homeScreenSettings.js index 6d6c26fce4..0ac6f7041d 100644 --- a/src/components/homeScreenSettings/homeScreenSettings.js +++ b/src/components/homeScreenSettings/homeScreenSettings.js @@ -148,9 +148,7 @@ import 'emby-checkbox'; let html = ''; - let index = 0; - - html += result.Items.map(view => { + html += result.Items.map((view) => { let currentHtml = ''; @@ -171,7 +169,6 @@ import 'emby-checkbox'; currentHtml += ''; - index++; return currentHtml; }).join(''); @@ -305,8 +302,6 @@ import 'emby-checkbox'; const viewItem = dom.parentWithClass(target, 'viewItem'); if (viewItem) { - const ul = dom.parentWithClass(viewItem, 'paperList'); - if (target.classList.contains('btnViewItemDown')) { const next = viewItem.nextSibling; diff --git a/src/components/homesections/homesections.js b/src/components/homesections/homesections.js index 010b6b1a78..333b87433e 100644 --- a/src/components/homesections/homesections.js +++ b/src/components/homesections/homesections.js @@ -1,13 +1,9 @@ import connectionManager from 'connectionManager'; import cardBuilder from 'cardBuilder'; -import appSettings from 'appSettings'; import dom from 'dom'; -import appHost from 'apphost'; import layoutManager from 'layoutManager'; import imageLoader from 'imageLoader'; import globalize from 'globalize'; -import itemShortcuts from 'itemShortcuts'; -import itemHelper from 'itemHelper'; import appRouter from 'appRouter'; import imageHelper from 'scripts/imagehelper'; import 'paper-icon-button-light'; @@ -215,14 +211,6 @@ import 'css!./homesections'; imageLoader.lazyChildren(elem); } - /** - * Returns a random integer between min (inclusive) and max (inclusive) - * Using Math.round() will give you a non-uniform distribution! - */ - function getRandomInt(min, max) { - return Math.floor(Math.random() * (max - min + 1)) + min; - } - function getFetchLatestItemsFn(serverId, parentId, collectionType) { return function () { const apiClient = connectionManager.getApiClient(serverId); @@ -347,14 +335,6 @@ import 'css!./homesections'; } } - function getRequirePromise(deps) { - return new Promise(function (resolve, reject) { - import(deps).then(() => { - return resolve; - }); - }); - } - export function loadLibraryTiles(elem, apiClient, user, userSettings, shape, userViews, allSections) { let html = ''; if (userViews.length) { @@ -549,7 +529,6 @@ import 'css!./homesections'; } function getOnNowItemsHtml(items) { - const cardLayout = false; return cardBuilder.getCardsHtml({ items: items, preferThumb: 'auto', @@ -576,7 +555,6 @@ import 'css!./homesections'; return Promise.resolve(); } - const userId = user.Id; return apiClient.getLiveTvRecommendedPrograms({ userId: apiClient.getCurrentUserId(), IsAiring: true, @@ -766,7 +744,6 @@ import 'css!./homesections'; function getLatestRecordingItemsHtml(activeRecordingsOnly) { return function (items) { - const cardLayout = false; return cardBuilder.getCardsHtml({ items: items, shape: enableScrollX() ? 'autooverflow' : 'auto', diff --git a/src/components/htmlMediaHelper.js b/src/components/htmlMediaHelper.js index 062c80efa6..35f14f0d5a 100644 --- a/src/components/htmlMediaHelper.js +++ b/src/components/htmlMediaHelper.js @@ -33,32 +33,6 @@ import events from 'events'; return false; } - export function enableHlsShakaPlayer(item, mediaSource, mediaType) { - /* eslint-disable-next-line compat/compat */ - if (!!window.MediaSource && !!MediaSource.isTypeSupported) { - - if (canPlayNativeHls()) { - - if (browser.edge && mediaType === 'Video') { - return true; - } - - // simple playback should use the native support - if (mediaSource.RunTimeTicks) { - //if (!browser.edge) { - //return false; - //} - } - - //return false; - } - - return true; - } - - return false; - } - export function enableHlsJsPlayer(runTimeTicks, mediaType) { if (window.MediaSource == null) { @@ -170,7 +144,6 @@ import events from 'events'; var seconds = (ticks || 0) / 10000000; if (seconds) { - var src = (instance.currentSrc() || '').toLowerCase(); // Appending #t=xxx to the query string doesn't seem to work with HLS // For plain video files, not all browsers support it either @@ -273,19 +246,6 @@ import events from 'events'; } } - export function destroyShakaPlayer(instance) { - var player = instance._shakaPlayer; - if (player) { - try { - player.destroy(); - } catch (err) { - console.error(err); - } - - instance._shakaPlayer = null; - } - } - export function destroyHlsPlayer(instance) { var player = instance._hlsPlayer; if (player) { @@ -416,7 +376,6 @@ import events from 'events'; destroyHlsPlayer(instance); destroyFlvPlayer(instance); - destroyShakaPlayer(instance); destroyCastPlayer(instance); var stopInfo = { diff --git a/src/components/imageDownloader/imageDownloader.js b/src/components/imageDownloader/imageDownloader.js index fbe98c532f..6d5b370bb0 100644 --- a/src/components/imageDownloader/imageDownloader.js +++ b/src/components/imageDownloader/imageDownloader.js @@ -270,7 +270,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image // end footer html += ''; - //html += ''; html += ''; diff --git a/src/components/itemContextMenu.js b/src/components/itemContextMenu.js index 7c89f7aeae..f1a4afcb1a 100644 --- a/src/components/itemContextMenu.js +++ b/src/components/itemContextMenu.js @@ -4,8 +4,6 @@ import connectionManager from 'connectionManager'; import itemHelper from 'itemHelper'; import appRouter from 'appRouter'; import playbackManager from 'playbackManager'; -import loading from 'loading'; -import appSettings from 'appSettings'; import browser from 'browser'; import actionsheet from 'actionsheet'; diff --git a/src/components/listview/listview.js b/src/components/listview/listview.js index 922b6abc20..5193e6d1fb 100644 --- a/src/components/listview/listview.js +++ b/src/components/listview/listview.js @@ -270,8 +270,6 @@ import 'emby-playstatebutton'; } if (!clickEntireItem && options.dragHandle) { - //html += ''; - // Firefox and Edge are not allowing the button to be draggable html += ''; } diff --git a/src/components/maintabsmanager.js b/src/components/maintabsmanager.js index 0d31c2958a..8251f3ce72 100644 --- a/src/components/maintabsmanager.js +++ b/src/components/maintabsmanager.js @@ -8,29 +8,10 @@ import 'emby-button'; let tabOwnerView; const queryScope = document.querySelector('.skinHeader'); - let footerTabsContainer; let headerTabsContainer; let tabsElem; - function enableTabsInFooter() { - return false; - } - - function getTabsContainerElem() { - } - - function ensureElements(enableInFooter) { - - if (enableInFooter) { - if (!footerTabsContainer) { - footerTabsContainer = document.createElement('div'); - footerTabsContainer.classList.add('footerTabs'); - footerTabsContainer.classList.add('sectionTabs'); - footerTabsContainer.classList.add('hide'); - //appFooter.add(footerTabsContainer); - } - } - + function ensureElements() { if (!headerTabsContainer) { headerTabsContainer = queryScope.querySelector('.headerTabs'); } @@ -75,7 +56,6 @@ import 'emby-button'; } // implement without hammer - const pageCount = getTabContainersFn().length; const onSwipeLeft = function (e, target) { if (allowSwipe(target) && view.contains(target)) { tabsElem.selectNext(); @@ -102,9 +82,6 @@ import 'emby-button'; } export function setTabs(view, selectedIndex, getTabsFn, getTabContainersFn, onBeforeTabChange, onTabChange, setSelectedIndex) { - - const enableInFooter = enableTabsInFooter(); - if (!view) { if (tabOwnerView) { @@ -112,18 +89,13 @@ import 'emby-button'; headerTabsContainer = queryScope.querySelector('.headerTabs'); } - ensureElements(enableInFooter); + ensureElements(); document.body.classList.remove('withSectionTabs'); headerTabsContainer.innerHTML = ''; headerTabsContainer.classList.add('hide'); - if (footerTabsContainer) { - footerTabsContainer.innerHTML = ''; - footerTabsContainer.classList.add('hide'); - } - tabOwnerView = null; } return { @@ -132,9 +104,9 @@ import 'emby-button'; }; } - ensureElements(enableInFooter); + ensureElements(); - const tabsContainerElem = enableInFooter ? footerTabsContainer : headerTabsContainer; + const tabsContainerElem = headerTabsContainer; if (!tabOwnerView) { tabsContainerElem.classList.remove('hide'); @@ -193,12 +165,6 @@ import 'emby-button'; const newPanel = tabContainers[e.detail.selectedTabIndex]; - //if (e.detail.previousIndex != null && e.detail.previousIndex != e.detail.selectedTabIndex) { - // if (newPanel.animate && (animateTabs || []).indexOf(e.detail.selectedTabIndex) != -1) { - // fadeInRight(newPanel); - // } - //} - if (newPanel) { newPanel.classList.add('is-active'); } @@ -221,10 +187,6 @@ import 'emby-button'; } } - //if (enableSwipe !== false) { - // libraryBrowser.configureSwipeTabs(ownerpage, tabs); - //} - return { tabsContainer: tabsContainerElem, tabs: tabsContainerElem.querySelector('[is="emby-tabs"]'), diff --git a/src/components/mediainfo/mediainfo.js b/src/components/mediainfo/mediainfo.js index 71acc5bbce..b55b58e63c 100644 --- a/src/components/mediainfo/mediainfo.js +++ b/src/components/mediainfo/mediainfo.js @@ -568,10 +568,6 @@ import 'emby-button'; }); } - //if (mediaSource.Container) { - // html += '
' + mediaSource.Container + '
'; - //} - const resolutionText = getResolutionText(videoStream); if (resolutionText) { list.push({ diff --git a/src/components/metadataEditor/metadataEditor.js b/src/components/metadataEditor/metadataEditor.js index 9bf2da2003..ac01b8c552 100644 --- a/src/components/metadataEditor/metadataEditor.js +++ b/src/components/metadataEditor/metadataEditor.js @@ -1,4 +1,3 @@ -import itemHelper from 'itemHelper'; import dom from 'dom'; import layoutManager from 'layoutManager'; import dialogHelper from 'dialogHelper'; diff --git a/src/components/metadataEditor/personEditor.js b/src/components/metadataEditor/personEditor.js index 2349f40e7b..18fb317920 100644 --- a/src/components/metadataEditor/personEditor.js +++ b/src/components/metadataEditor/personEditor.js @@ -1,7 +1,6 @@ import dialogHelper from 'dialogHelper'; import layoutManager from 'layoutManager'; import globalize from 'globalize'; -import require from 'require'; import 'paper-icon-button-light'; import 'emby-input'; import 'emby-select'; diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index 87696909af..9c408339b5 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -580,10 +580,6 @@ import 'css!./multiSelect'; dom.removeEventListener(element, 'touchend', onTouchEnd, { passive: true }); - // this fires in safari due to magnifying class - //dom.removeEventListener(element, "touchcancel", onTouchEnd, { - // passive: true - //}); dom.removeEventListener(element, 'mousedown', onMouseDown, { passive: true }); diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index c8480e4f15..556d380625 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -101,11 +101,7 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir body: body, vibrate: true, tag: 'newItem' + item.Id, - data: { - //options: { - // url: LibraryBrowser.getHref(item) - //} - } + data: {} }; var imageTags = item.ImageTags || {}; diff --git a/src/components/nowPlayingBar/nowPlayingBar.js b/src/components/nowPlayingBar/nowPlayingBar.js index ed46131292..6b69d066f2 100644 --- a/src/components/nowPlayingBar/nowPlayingBar.js +++ b/src/components/nowPlayingBar/nowPlayingBar.js @@ -1,6 +1,4 @@ -import require from 'require'; import datetime from 'datetime'; -import itemHelper from 'itemHelper'; import events from 'events'; import browser from 'browser'; import imageLoader from 'imageLoader'; diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index fe3ff11250..8bedcb973e 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -777,7 +777,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla var players = []; var currentTargetInfo; - var lastLocalPlayer; var currentPairingId = null; this._playNextAfterEnded = true; @@ -1031,10 +1030,6 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla console.debug('Active player: ' + JSON.stringify(targetInfo)); } - if (player && player.isLocalPlayer) { - lastLocalPlayer = player; - } - if (previousPlayer) { self.endPlayerUpdates(previousPlayer); } @@ -4076,8 +4071,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla this.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index), player); break; case 'SetMaxStreamingBitrate': - // todo - //this.setMaxStreamingBitrate(parseInt(cmd.Arguments.Bitrate), player); + this.setMaxStreamingBitrate(parseInt(cmd.Arguments.Bitrate), player); break; case 'ToggleFullscreen': this.toggleFullscreen(player); diff --git a/src/components/playback/playerSelectionMenu.js b/src/components/playback/playerSelectionMenu.js index 298ae0b07e..aa0bba533c 100644 --- a/src/components/playback/playerSelectionMenu.js +++ b/src/components/playback/playerSelectionMenu.js @@ -182,7 +182,6 @@ function disconnectFromPlayer(currentDeviceName) { dialog({ buttons: menuItems, - //positionTo: positionTo, text: globalize.translate('ConfirmEndPlayerSession', currentDeviceName) }).then(function (id) { diff --git a/src/components/playback/playersettingsmenu.js b/src/components/playback/playersettingsmenu.js index 33d252c52a..88147af6cd 100644 --- a/src/components/playback/playersettingsmenu.js +++ b/src/components/playback/playersettingsmenu.js @@ -88,8 +88,6 @@ function showRepeatModeMenu(player, btn) { function getQualitySecondaryText(player) { var state = playbackManager.getPlayerState(player); - var isAutoEnabled = playbackManager.enableAutomaticBitrateDetection(player); - var currentMaxBitrate = playbackManager.getMaxStreamingBitrate(player); var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) { return stream.Type === 'Video'; @@ -106,20 +104,6 @@ function getQualitySecondaryText(player) { enableAuto: true }); - var menuItems = options.map(function (o) { - var opt = { - name: o.name, - id: o.bitrate, - asideText: o.secondaryText - }; - - if (o.selected) { - opt.selected = true; - } - - return opt; - }); - var selectedOption = options.filter(function (o) { return o.selected; }); @@ -168,7 +152,6 @@ function showAspectRatioMenu(player, btn) { function showWithUser(options, player, user) { var supportedCommands = playbackManager.getSupportedCommands(player); - var mediaType = options.mediaType; var menuItems = []; if (supportedCommands.indexOf('SetAspectRatio') !== -1) { diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js index fce37c1507..b68018769c 100644 --- a/src/components/playerstats/playerstats.js +++ b/src/components/playerstats/playerstats.js @@ -5,7 +5,6 @@ import connectionManager from 'connectionManager'; import syncPlayManager from 'syncPlayManager'; import playMethodHelper from 'playMethodHelper'; import layoutManager from 'layoutManager'; -import serverNotifications from 'serverNotifications'; import 'paper-icon-button-light'; import 'css!./playerstats'; @@ -132,7 +131,6 @@ import 'css!./playerstats'; let audioChannels; if (session.TranscodingInfo) { - videoCodec = session.TranscodingInfo.VideoCodec; audioCodec = session.TranscodingInfo.AudioCodec; totalBitrate = session.TranscodingInfo.Bitrate; @@ -140,7 +138,6 @@ import 'css!./playerstats'; } if (videoCodec) { - sessionStats.push({ label: globalize.translate('LabelVideoCodec'), value: session.TranscodingInfo.IsVideoDirect ? (videoCodec.toUpperCase() + ' (direct)') : videoCodec.toUpperCase() @@ -148,20 +145,18 @@ import 'css!./playerstats'; } if (audioCodec) { - sessionStats.push({ label: globalize.translate('LabelAudioCodec'), value: session.TranscodingInfo.IsAudioDirect ? (audioCodec.toUpperCase() + ' (direct)') : audioCodec.toUpperCase() }); } - //if (audioChannels) { - - // sessionStats.push({ - // label: 'Audio channels:', - // value: audioChannels - // }); - //} + if (audioChannels) { + sessionStats.push({ + label: globalize.translate('LabelAudioChannels'), + value: audioChannels + }); + } if (displayPlayMethod === 'Transcode') { if (totalBitrate) { diff --git a/src/components/qualityOptions.js b/src/components/qualityOptions.js index 221e13d4ef..c831bbe9b4 100644 --- a/src/components/qualityOptions.js +++ b/src/components/qualityOptions.js @@ -14,7 +14,6 @@ define(['globalize'], function (globalize) { } var maxAllowedWidth = videoWidth || 4096; - //var maxAllowedHeight = videoHeight || 2304; var qualityOptions = []; diff --git a/src/components/recordingcreator/recordingeditor.js b/src/components/recordingcreator/recordingeditor.js index c3f40fcddb..02e8a61b90 100644 --- a/src/components/recordingcreator/recordingeditor.js +++ b/src/components/recordingcreator/recordingeditor.js @@ -19,9 +19,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c } function renderTimer(context, item, apiClient) { - - var program = item.ProgramInfo || {}; - context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60; context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60; diff --git a/src/components/recordingcreator/seriesrecordingeditor.js b/src/components/recordingcreator/seriesrecordingeditor.js index a101ce53ec..df786df48c 100644 --- a/src/components/recordingcreator/seriesrecordingeditor.js +++ b/src/components/recordingcreator/seriesrecordingeditor.js @@ -20,8 +20,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c function renderTimer(context, item, apiClient) { - var program = item.ProgramInfo || {}; - context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60; context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60; diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js index 874137155c..2a025b497d 100644 --- a/src/components/remotecontrol/remotecontrol.js +++ b/src/components/remotecontrol/remotecontrol.js @@ -222,7 +222,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL } function setImageUrl(context, state, url) { - currentImgUrl = url; var item = state.NowPlayingItem; var imgContainer = context.querySelector('.nowPlayingPageImageContainer'); @@ -257,7 +256,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL } } - var currentImgUrl; return function () { function toggleRepeat() { switch (playbackManager.getRepeatMode()) { @@ -909,7 +907,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL } function onShow(context, tab) { - currentImgUrl = null; bindToPlayer(context, playbackManager.getCurrentPlayer()); } diff --git a/src/components/sanitizeFilename.js b/src/components/sanitizeFilename.js index de7b1a0782..ffea2a0a6c 100644 --- a/src/components/sanitizeFilename.js +++ b/src/components/sanitizeFilename.js @@ -1,3 +1,4 @@ +// TODO: Check if needed and move to external dependency // From https://github.com/parshap/node-sanitize-filename const illegalRe = /[\/\?<>\\:\*\|":]/g; diff --git a/src/components/search/searchresults.js b/src/components/search/searchresults.js index e16b6a1cd4..87fbad3a10 100644 --- a/src/components/search/searchresults.js +++ b/src/components/search/searchresults.js @@ -1,7 +1,5 @@ import layoutManager from 'layoutManager'; import globalize from 'globalize'; -import require from 'require'; -import events from 'events'; import connectionManager from 'connectionManager'; import cardBuilder from 'cardBuilder'; import appRouter from 'appRouter'; diff --git a/src/components/slideshow/slideshow.js b/src/components/slideshow/slideshow.js index f7026a007e..b32c781482 100644 --- a/src/components/slideshow/slideshow.js +++ b/src/components/slideshow/slideshow.js @@ -130,11 +130,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f var hideTimeout; /** Last coordinates of the mouse pointer. */ var lastMouseMoveData; - /** Visibility status of the OSD. */ - var _osdOpen = false; - - // Use autoplay on Chromecast since it is non-interactive. - if (browser.chromecast) options.interactive = false; /** * Creates the HTML markup for the dialog and the OSD. @@ -363,8 +358,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f function getSwiperSlideHtmlFromItem(item) { return getSwiperSlideHtmlFromSlide({ originalImage: getImgUrl(item, currentOptions.user), - //title: item.Name, - //description: item.Overview Id: item.Id, ServerId: item.ServerId }); @@ -545,7 +538,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f return; } - _osdOpen = true; element.classList.remove('hide'); var onFinish = function () { @@ -578,7 +570,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f var onFinish = function () { element.classList.add('hide'); - _osdOpen = false; }; if (!element.animate) { diff --git a/src/components/sortmenu/sortmenu.js b/src/components/sortmenu/sortmenu.js index dbf7ef1a7f..82e47a2cb9 100644 --- a/src/components/sortmenu/sortmenu.js +++ b/src/components/sortmenu/sortmenu.js @@ -90,13 +90,7 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana 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 () { @@ -106,11 +100,8 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana } if (submitted) { - - //if (!options.onChange) { saveValues(dlg, options.settings, options.settingsKey); resolve(); - //} return; } diff --git a/src/components/subtitleeditor/subtitleeditor.js b/src/components/subtitleeditor/subtitleeditor.js index 9c0992c53c..89b46fed2d 100644 --- a/src/components/subtitleeditor/subtitleeditor.js +++ b/src/components/subtitleeditor/subtitleeditor.js @@ -4,43 +4,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', var currentItem; var hasChanges; - function showLocalSubtitles(context, index) { - - loading.show(); - - var subtitleContent = context.querySelector('.subtitleContent'); - subtitleContent.innerHTML = ''; - - var apiClient = connectionManager.getApiClient(currentItem.ServerId); - var url = 'Videos/' + currentItem.Id + '/Subtitles/' + index; - - apiClient.ajax({ - - type: 'GET', - url: url - - }).then(function (result) { - - subtitleContent.innerHTML = result; - - loading.hide(); - }); - } - - function showRemoteSubtitles(context, id) { - - loading.show(); - - var url = 'Providers/Subtitles/Subtitles/' + id; - - ApiClient.get(ApiClient.getUrl(url)).then(function (result) { - - // show result - - loading.hide(); - }); - } - function downloadRemoteSubtitles(context, id) { var url = 'Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + id; @@ -170,14 +133,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', elem.classList.add('hide'); } elem.innerHTML = html; - - //('.btnViewSubtitles', elem).on('click', function () { - - // var index = this.getAttribute('data-index'); - - // showLocalSubtitles(context, index); - - //}); } function fillLanguages(context, apiClient, languages) { @@ -250,8 +205,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', html += '
'; - //html += ''; - html += '
' + (result.Name) + '
'; html += '
'; @@ -272,8 +225,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', html += '
' + globalize.translate('PerfectMatch') + '
'; } - //html += '
'; - html += '
'; if (!layoutManager.tv) { @@ -290,12 +241,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', var elem = context.querySelector('.subtitleResults'); elem.innerHTML = html; - //('.btnViewSubtitle', elem).on('click', function () { - - // var id = this.getAttribute('data-subid'); - // showRemoteSubtitles(context, id); - //}); - loading.hide(); } @@ -369,11 +314,10 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings', } function onSubtitleResultsClick(e) { - - var btnOptions = dom.parentWithClass(e.target, 'btnOptions'); var subtitleId; var context; + var btnOptions = dom.parentWithClass(e.target, 'btnOptions'); if (btnOptions) { subtitleId = btnOptions.getAttribute('data-subid'); context = dom.parentWithClass(btnOptions, 'subtitleEditorDialog'); diff --git a/src/components/subtitlesettings/subtitlesettings.js b/src/components/subtitlesettings/subtitlesettings.js index d2ae852bd5..4bb4a364ef 100644 --- a/src/components/subtitlesettings/subtitlesettings.js +++ b/src/components/subtitlesettings/subtitlesettings.js @@ -1,4 +1,3 @@ -import require from 'require'; import globalize from 'globalize'; import appHost from 'apphost'; import appSettings from 'appSettings'; diff --git a/src/components/tabbedview/itemstab.js b/src/components/tabbedview/itemstab.js deleted file mode 100644 index d40faef5dc..0000000000 --- a/src/components/tabbedview/itemstab.js +++ /dev/null @@ -1,589 +0,0 @@ -define(['playbackManager', 'userSettings', 'alphaPicker', 'alphaNumericShortcuts', 'connectionManager', 'focusManager', 'loading', 'globalize'], function (playbackManager, userSettings, AlphaPicker, AlphaNumericShortcuts, connectionManager, focusManager, loading, globalize) { - 'use strict'; - - function trySelectValue(instance, scroller, view, value) { - - var card; - - // If it's the symbol just pick the first card - if (value === '#') { - - card = view.querySelector('.card'); - - if (card) { - scroller.toStart(card, false); - return; - } - } - - card = view.querySelector('.card[data-prefix^=\'' + value + '\']'); - - if (card) { - scroller.toStart(card, false); - return; - } - - // go to the previous letter - var values = instance.alphaPicker.values(); - var index = values.indexOf(value); - - if (index < values.length - 2) { - trySelectValue(instance, scroller, view, values[index + 1]); - } else { - var all = view.querySelectorAll('.card'); - card = all.length ? all[all.length - 1] : null; - - if (card) { - scroller.toStart(card, false); - } - } - } - - function onAlphaValueChanged() { - - var value = this.alphaPicker.value(); - var scroller = this.scroller; - - trySelectValue(this, scroller, this.itemsContainer, value); - } - - function initAlphaPicker(instance, view) { - - instance.itemsContainer = view.querySelector('.itemsContainer'); - - instance.alphaPicker = new AlphaPicker.default({ - element: instance.alphaPickerElement, - itemsContainer: instance.itemsContainer, - itemClass: 'card' - }); - - instance.alphaPicker.on('alphavaluechanged', onAlphaValueChanged.bind(instance)); - } - - function showFilterMenu() { - - var instance = this; - - require(['filterMenu'], function (FilterMenu) { - - new FilterMenu().show({ - - settingsKey: instance.getSettingsKey(), - settings: instance.getFilters(), - visibleSettings: instance.getVisibleFilters(), - onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer), - parentId: instance.params.parentId, - itemTypes: instance.getItemTypes ? instance.getItemTypes() : [], - serverId: instance.apiClient.serverId(), - filterMenuOptions: instance.getFilterMenuOptions() - - }).then(function () { - - instance.itemsContainer.refreshItems(); - }); - }); - } - - function updateAlphaPickerState(instance) { - - if (!instance.alphaPicker) { - return; - } - - var alphaPicker = instance.alphaPickerElement; - if (!alphaPicker) { - return; - } - var values = instance.getSortValues(); - - if (values.sortBy === 'SortName' && values.sortOrder === 'Ascending') { - alphaPicker.classList.remove('hide'); - } else { - alphaPicker.classList.add('hide'); - } - } - - function showSortMenu() { - var instance = this; - require(['sortMenu'], function (SortMenu) { - new SortMenu().show({ - settingsKey: instance.getSettingsKey(), - settings: instance.getSortValues(), - onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer), - serverId: instance.params.serverId, - sortOptions: instance.getSortMenuOptions() - }).then(function () { - updateSortText(instance); - updateAlphaPickerState(instance); - instance.itemsContainer.refreshItems(); - }); - }); - } - - function showViewSettingsMenu() { - - var instance = this; - - require(['viewSettings'], function (ViewSettings) { - - new ViewSettings().show({ - - settingsKey: instance.getSettingsKey(), - settings: instance.getViewSettings(), - visibleSettings: instance.getVisibleViewSettings() - - }).then(function () { - - updateItemsContainerForViewType(instance); - instance.itemsContainer.refreshItems(); - }); - }); - } - - function updateItemsContainerForViewType(instance) { - - var settings = instance.getViewSettings(); - - if (settings.imageType === 'list') { - - instance.itemsContainer.classList.remove('vertical-wrap'); - instance.itemsContainer.classList.add('vertical-list'); - - } else { - instance.itemsContainer.classList.add('vertical-wrap'); - instance.itemsContainer.classList.remove('vertical-list'); - } - } - - function updateSortText(instance) { - - var btnSortText = instance.btnSortText; - if (!btnSortText) { - return; - } - - var options = instance.getSortMenuOptions(); - var values = instance.getSortValues(); - - var sortBy = values.sortBy; - - for (var i = 0, length = options.length; i < length; i++) { - - if (sortBy === options[i].value) { - - btnSortText.innerHTML = globalize.translate('SortByValue', options[i].name); - break; - } - } - - var btnSortIcon = instance.btnSortIcon; - if (!btnSortIcon) { - return; - } - - btnSortIcon.classList.remove('arrow_downward', 'arrow_upward'); - btnSortIcon.classList.add(values.sortOrder === 'Descending' ? 'arrow_downward' : 'arrow_upward'); - } - - function bindAll(elems, eventName, fn) { - for (var i = 0, length = elems.length; i < length; i++) { - - elems[i].addEventListener(eventName, fn); - } - } - - function play() { - - this.fetchData().then(function (result) { - playbackManager.play({ - items: result.Items || result - }); - }); - } - - function shuffle() { - - this.fetchData().then(function (result) { - playbackManager.play({ - items: result.Items || result - }); - }); - } - - function hideOrShowAll(elems, hide) { - - for (var i = 0, length = elems.length; i < length; i++) { - - if (hide) { - elems[i].classList.add('hide'); - } else { - elems[i].classList.remove('hide'); - } - } - } - - function ItemsTab(view, params) { - this.view = view; - this.params = params; - - if (params.serverId) { - this.apiClient = connectionManager.getApiClient(params.serverId); - } - - this.itemsContainer = view.querySelector('.itemsContainer'); - this.scroller = view.querySelector('.scrollFrameY'); - - this.itemsContainer.fetchData = this.fetchData.bind(this); - this.itemsContainer.getItemsHtml = this.getItemsHtml.bind(this); - - if (params.parentId) { - this.itemsContainer.setAttribute('data-parentid', params.parentId); - } - - var i; - var length; - - var btnViewSettings = view.querySelectorAll('.btnViewSettings'); - for (i = 0, length = btnViewSettings.length; i < length; i++) { - - btnViewSettings[i].addEventListener('click', showViewSettingsMenu.bind(this)); - } - - var filterButtons = view.querySelectorAll('.btnFilter'); - this.filterButtons = filterButtons; - var hasVisibleFilters = this.getVisibleFilters().length; - for (i = 0, length = filterButtons.length; i < length; i++) { - - var btnFilter = filterButtons[i]; - btnFilter.addEventListener('click', showFilterMenu.bind(this)); - - if (hasVisibleFilters) { - btnFilter.classList.remove('hide'); - } else { - btnFilter.classList.add('hide'); - } - } - - var sortButtons = view.querySelectorAll('.btnSort'); - this.sortButtons = sortButtons; - for (i = 0, length = sortButtons.length; i < length; i++) { - - var sortButton = sortButtons[i]; - sortButton.addEventListener('click', showSortMenu.bind(this)); - - if (params.type !== 'nextup') { - sortButton.classList.remove('hide'); - } - } - this.btnSortText = view.querySelector('.btnSortText'); - this.btnSortIcon = view.querySelector('.btnSortIcon'); - - this.alphaPickerElement = view.querySelector('.alphaPicker'); - - hideOrShowAll(view.querySelectorAll('.btnShuffle'), true); - - bindAll(view.querySelectorAll('.btnPlay'), 'click', play.bind(this)); - bindAll(view.querySelectorAll('.btnShuffle'), 'click', shuffle.bind(this)); - } - - function getSettingValue(key, defaultValue) { - } - - ItemsTab.prototype.getViewSettings = function () { - - var basekey = this.getSettingsKey(); - - return { - showTitle: userSettings.get(basekey + '-showTitle') !== 'false', - showYear: userSettings.get(basekey + '-showYear') !== 'false', - imageType: userSettings.get(basekey + '-imageType') || this.getDefaultImageType() - }; - }; - - ItemsTab.prototype.getDefaultImageType = function () { - - return 'primary'; - }; - - ItemsTab.prototype.getSettingsKey = function () { - - return this.params.parentId + '-1'; - }; - - ItemsTab.prototype.onResume = function (options) { - - if (options && options.refresh) { - updateSortText(this); - updateItemsContainerForViewType(this); - loading.show(); - } - - var view = this.view; - - var scroller = this.scroller; - if (scroller && scroller.resume) { - scroller.resume(); - } - - if (this.enableAlphaPicker && !this.alphaPicker) { - initAlphaPicker(this, view); - updateAlphaPickerState(this); - } - - if (this.enableAlphaNumericShortcuts !== false) { - this.alphaNumericShortcuts = new AlphaNumericShortcuts.default({ - itemsContainer: this.itemsContainer - }); - } - - var instance = this; - var autoFocus = options.autoFocus; - - this.itemsContainer.resume(options).then(function (result) { - - loading.hide(); - - if (autoFocus) { - focusManager.autoFocus(instance.itemsContainer); - } - }); - }; - - ItemsTab.prototype.getVisibleViewSettings = function () { - - return [ - 'showTitle', - 'showYear', - 'imageType' - ]; - }; - - ItemsTab.prototype.getFilters = function () { - - var basekey = this.getSettingsKey(); - - return { - IsPlayed: userSettings.getFilter(basekey + '-filter-IsPlayed') === 'true', - IsUnplayed: userSettings.getFilter(basekey + '-filter-IsUnplayed') === 'true', - IsFavorite: userSettings.getFilter(basekey + '-filter-IsFavorite') === 'true', - IsResumable: userSettings.getFilter(basekey + '-filter-IsResumable') === 'true', - Is4K: userSettings.getFilter(basekey + '-filter-Is4K') === 'true', - IsHD: userSettings.getFilter(basekey + '-filter-IsHD') === 'true', - IsSD: userSettings.getFilter(basekey + '-filter-IsSD') === 'true', - Is3D: userSettings.getFilter(basekey + '-filter-Is3D') === 'true', - VideoTypes: userSettings.getFilter(basekey + '-filter-VideoTypes'), - SeriesStatus: userSettings.getFilter(basekey + '-filter-SeriesStatus'), - HasSubtitles: userSettings.getFilter(basekey + '-filter-HasSubtitles'), - HasTrailer: userSettings.getFilter(basekey + '-filter-HasTrailer'), - HasSpecialFeature: userSettings.getFilter(basekey + '-filter-HasSpecialFeature'), - HasThemeSong: userSettings.getFilter(basekey + '-filter-HasThemeSong'), - HasThemeVideo: userSettings.getFilter(basekey + '-filter-HasThemeVideo'), - GenreIds: userSettings.getFilter(basekey + '-filter-GenreIds') - }; - }; - - ItemsTab.prototype.getSortValues = function () { - - var basekey = this.getSettingsKey(); - - return { - sortBy: userSettings.getFilter(basekey + '-sortby') || this.getSortMenuOptions()[0].value, - sortOrder: userSettings.getFilter(basekey + '-sortorder') === 'Descending' ? 'Descending' : 'Ascending' - }; - }; - - ItemsTab.prototype.getVisibleFilters = function () { - - return [ - 'IsUnplayed', - 'IsPlayed', - 'IsFavorite', - 'IsResumable', - 'VideoType', - 'HasSubtitles', - 'HasTrailer', - 'HasSpecialFeature', - 'HasThemeSong', - 'HasThemeVideo' - ]; - }; - - ItemsTab.prototype.getDefaultSortBy = function () { - - return 'SortName'; - }; - - ItemsTab.prototype.getSortMenuOptions = function () { - - var sortBy = []; - - var option = this.getNameSortOption(); - if (option) { - sortBy.push(option); - } - - option = this.getCommunityRatingSortOption(); - if (option) { - sortBy.push(option); - } - - option = this.getCriticRatingSortOption(); - - if (option) { - sortBy.push(option); - } - - sortBy.push({ - name: globalize.translate('DateAdded'), - value: 'DateCreated,SortName' - }); - - option = this.getDatePlayedSortOption(); - if (option) { - sortBy.push(option); - } - - sortBy.push({ - name: globalize.translate('ParentalRating'), - value: 'OfficialRating,SortName' - }); - - option = this.getPlayCountSortOption(); - if (option) { - sortBy.push(option); - } - - sortBy.push({ - name: globalize.translate('ReleaseDate'), - value: 'PremiereDate,ProductionYear,SortName' - }); - - sortBy.push({ - name: globalize.translate('Runtime'), - value: 'Runtime,SortName' - }); - - return sortBy; - }; - - ItemsTab.prototype.getNameSortOption = function () { - - return { - name: globalize.translate('Name'), - value: 'SortName' - }; - }; - - ItemsTab.prototype.getPlayCountSortOption = function () { - - return { - name: globalize.translate('PlayCount'), - value: 'PlayCount,SortName' - }; - }; - - ItemsTab.prototype.getDatePlayedSortOption = function () { - - return { - name: globalize.translate('DatePlayed'), - value: 'DatePlayed,SortName' - }; - }; - - ItemsTab.prototype.getCriticRatingSortOption = function () { - - return { - name: globalize.translate('CriticRating'), - value: 'CriticRating,SortName' - }; - }; - - ItemsTab.prototype.getCommunityRatingSortOption = function () { - - return { - name: globalize.translate('CommunityRating'), - value: 'CommunityRating,SortName' - }; - }; - - ItemsTab.prototype.getFilterMenuOptions = function () { - - var params = this.params; - - return { - - }; - }; - - ItemsTab.prototype.getItemTypes = function () { - - return []; - }; - - ItemsTab.prototype.setFilterStatus = function (hasFilters) { - - this.hasFilters = hasFilters; - - var filterButtons = this.filterButtons; - if (!filterButtons.length) { - return; - } - - for (var i = 0, length = filterButtons.length; i < length; i++) { - - var btnFilter = filterButtons[i]; - - var bubble = btnFilter.querySelector('.filterButtonBubble'); - if (!bubble) { - - if (!hasFilters) { - continue; - } - - btnFilter.insertAdjacentHTML('afterbegin', '
!
'); - btnFilter.classList.add('btnFilterWithBubble'); - bubble = btnFilter.querySelector('.filterButtonBubble'); - } - - if (hasFilters) { - bubble.classList.remove('hide'); - } else { - bubble.classList.add('hide'); - } - } - }; - - ItemsTab.prototype.onPause = function () { - var scroller = this.scroller; - if (scroller && scroller.pause) { - scroller.pause(); - } - - var alphaNumericShortcuts = this.alphaNumericShortcuts; - if (alphaNumericShortcuts) { - alphaNumericShortcuts.default.destroy(); - this.alphaNumericShortcuts = null; - } - }; - - ItemsTab.prototype.destroy = function () { - this.view = null; - this.itemsContainer = null; - this.params = null; - this.apiClient = null; - this.scroller = null; - this.filterButtons = null; - - if (this.alphaPicker) { - this.alphaPicker.destroy(); - this.alphaPicker = null; - } - - this.sortButtons = null; - this.btnSortText = null; - this.btnSortIcon = null; - this.alphaPickerElement = null; - }; - - return ItemsTab; -}); diff --git a/src/components/themeMediaPlayer.js b/src/components/themeMediaPlayer.js index 94012ba823..eafe48230c 100644 --- a/src/components/themeMediaPlayer.js +++ b/src/components/themeMediaPlayer.js @@ -100,12 +100,12 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb }, true); - //Events.on(playbackManager, 'playbackstart', function (e, player) { - // var item = playbackManager.currentItem(player); - // // User played something manually - // if (currentThemeIds.indexOf(item.Id) == -1) { - // currentOwnerId = null; - // } - //}); + Events.on(playbackManager, 'playbackstart', function (e, player) { + var item = playbackManager.currentItem(player); + // User played something manually + if (currentThemeIds.indexOf(item.Id) == -1) { + currentOwnerId = null; + } + }); }); diff --git a/src/components/userdatabuttons/userdatabuttons.js b/src/components/userdatabuttons/userdatabuttons.js index 86b9902133..014655835b 100644 --- a/src/components/userdatabuttons/userdatabuttons.js +++ b/src/components/userdatabuttons/userdatabuttons.js @@ -112,22 +112,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto } } - //var tooltipLike = globalize.translate('Like'); - //var tooltipDislike = globalize.translate('Dislike'); - - //if (typeof userData.Likes == "undefined") { - // html += getUserDataButtonHtml('markDislike', itemId, serverId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike); - // html += getUserDataButtonHtml('markLike', itemId, serverId, btnCssClass + ' btnUserData btnLike', 'thumb-up', tooltipLike); - //} - //else if (userData.Likes) { - // html += getUserDataButtonHtml('markDislike', itemId, serverId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike); - // html += getUserDataButtonHtml('markLike', itemId, serverId, btnCssClass + ' btnUserData btnLike btnUserDataOn', 'thumb-up', tooltipLike); - //} - //else { - // html += getUserDataButtonHtml('markDislike', itemId, serverId, btnCssClass + ' btnUserData btnDislike btnUserDataOn', 'thumb-down', tooltipDislike); - // html += getUserDataButtonHtml('markLike', itemId, serverId, btnCssClass + ' btnUserData btnLike', 'thumb-up', tooltipLike); - //} - var tooltipFavorite = globalize.translate('Favorite'); if (userData.IsFavorite) { diff --git a/src/components/viewManager/viewManager.js b/src/components/viewManager/viewManager.js index 8e17264f9f..97aaa7ddd7 100644 --- a/src/components/viewManager/viewManager.js +++ b/src/components/viewManager/viewManager.js @@ -21,11 +21,10 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi if (!newView.initComplete) { newView.initComplete = true; - var controller; if (typeof options.controllerFactory === 'function') { - controller = new options.controllerFactory(newView, eventDetail.detail.params); + new options.controllerFactory(newView, eventDetail.detail.params); } else if (options.controllerFactory && typeof options.controllerFactory.default === 'function') { - controller = new options.controllerFactory.default(newView, eventDetail.detail.params); + new options.controllerFactory.default(newView, eventDetail.detail.params); } if (!options.controllerFactory || dispatchPageEvents) { diff --git a/src/controllers/dashboard/apikeys.js b/src/controllers/dashboard/apikeys.js index 0e122c486d..2b526aa8cc 100644 --- a/src/controllers/dashboard/apikeys.js +++ b/src/controllers/dashboard/apikeys.js @@ -1,6 +1,5 @@ import datetime from 'datetime'; import loading from 'loading'; -import libraryMenu from 'libraryMenu'; import dom from 'dom'; import globalize from 'globalize'; import 'emby-button'; diff --git a/src/controllers/dashboard/devices/device.js b/src/controllers/dashboard/devices/device.js index 7faaee2494..17e28b9bdb 100644 --- a/src/controllers/dashboard/devices/device.js +++ b/src/controllers/dashboard/devices/device.js @@ -1,5 +1,4 @@ import loading from 'loading'; -import libraryMenu from 'libraryMenu'; import dom from 'dom'; import 'emby-input'; import 'emby-button'; diff --git a/src/controllers/dashboard/devices/devices.js b/src/controllers/dashboard/devices/devices.js index 9f05d84713..93ae62c43f 100644 --- a/src/controllers/dashboard/devices/devices.js +++ b/src/controllers/dashboard/devices/devices.js @@ -1,6 +1,5 @@ import loading from 'loading'; import dom from 'dom'; -import libraryMenu from 'libraryMenu'; import globalize from 'globalize'; import imageHelper from 'scripts/imagehelper'; import * as datefns from 'date-fns'; diff --git a/src/controllers/dashboard/mediaLibrary.js b/src/controllers/dashboard/mediaLibrary.js index b958e69d22..e49efb0992 100644 --- a/src/controllers/dashboard/mediaLibrary.js +++ b/src/controllers/dashboard/mediaLibrary.js @@ -1,11 +1,9 @@ import $ from 'jQuery'; -import appHost from 'apphost'; import taskButton from 'scripts/taskbutton'; import loading from 'loading'; import libraryMenu from 'libraryMenu'; import globalize from 'globalize'; import dom from 'dom'; -import indicators from 'indicators'; import imageHelper from 'scripts/imagehelper'; import 'cardStyle'; import 'emby-itemrefreshindicator'; diff --git a/src/controllers/dashboard/metadataImages.js b/src/controllers/dashboard/metadataImages.js index cbfe05419c..02e01736ea 100644 --- a/src/controllers/dashboard/metadataImages.js +++ b/src/controllers/dashboard/metadataImages.js @@ -1,5 +1,4 @@ import $ from 'jQuery'; -import dom from 'dom'; import loading from 'loading'; import libraryMenu from 'libraryMenu'; import globalize from 'globalize'; diff --git a/src/controllers/dashboard/networking.js b/src/controllers/dashboard/networking.js index 367ab8335c..5cae08d2fa 100644 --- a/src/controllers/dashboard/networking.js +++ b/src/controllers/dashboard/networking.js @@ -1,5 +1,4 @@ import loading from 'loading'; -import libraryMenu from 'libraryMenu'; import globalize from 'globalize'; import 'emby-checkbox'; import 'emby-select'; diff --git a/src/controllers/dashboard/plugins/available/index.js b/src/controllers/dashboard/plugins/available/index.js index 37df8801b5..1f202d6ff6 100644 --- a/src/controllers/dashboard/plugins/available/index.js +++ b/src/controllers/dashboard/plugins/available/index.js @@ -34,7 +34,6 @@ define(['loading', 'libraryMenu', 'globalize', 'cardStyle', 'emby-button', 'emby var availablePlugins = options.availablePlugins; var installedPlugins = options.installedPlugins; - var categories = []; availablePlugins.forEach(function (plugin, index, array) { plugin.category = plugin.category || 'General'; plugin.categoryDisplayName = getHeaderText(plugin.category); diff --git a/src/controllers/dashboard/users/userprofilespage.js b/src/controllers/dashboard/users/userprofilespage.js index dbdec4f752..824baef4cf 100644 --- a/src/controllers/dashboard/users/userprofilespage.js +++ b/src/controllers/dashboard/users/userprofilespage.js @@ -155,102 +155,12 @@ import 'flexStyles'; page.querySelector('.localUsers').innerHTML = getUserSectionHtml(users, true); } - function showPendingUserMenu(elem) { - const menuItems = []; - menuItems.push({ - name: globalize.translate('ButtonCancel'), - id: 'delete', - icon: 'delete' - }); - - import('actionsheet').then(({default: actionsheet}) => { - const card = dom.parentWithClass(elem, 'card'); - const page = dom.parentWithClass(card, 'page'); - const id = card.getAttribute('data-id'); - actionsheet.show({ - items: menuItems, - positionTo: card, - callback: function (menuItemId) { - switch (menuItemId) { - case 'delete': - cancelAuthorization(page, id); - } - } - }); - }); - } - - function getPendingUserHtml(user) { - let html = ''; - html += "
"; - html += '
'; - html += ''; - html += '
'; - html += '
'; - 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..8c86ccf379 100644 --- a/src/controllers/movies/moviegenres.js +++ b/src/controllers/movies/moviegenres.js @@ -75,7 +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, { 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/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/controllers/session/addServer/index.js b/src/controllers/session/addServer/index.js index 1129283246..7d3ba7f471 100644 --- a/src/controllers/session/addServer/index.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/controllers/session/selectServer/index.js b/src/controllers/session/selectServer/index.js index 3e36b74859..b7d7b9d221 100644 --- a/src/controllers/session/selectServer/index.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/controllers/user/home/index.js b/src/controllers/user/home/index.js index e7058fd3ac..f811aa52b9 100644 --- a/src/controllers/user/home/index.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/controllers/user/menu/index.js b/src/controllers/user/menu/index.js index ef4b3b21c8..f44a193a52 100644 --- a/src/controllers/user/menu/index.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/controllers/user/playback/index.js b/src/controllers/user/playback/index.js index 5bcf055cd3..16c50a1980 100644 --- a/src/controllers/user/playback/index.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/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..382b0aa5c8 100644 --- a/src/elements/emby-collapse/emby-collapse.js +++ b/src/elements/emby-collapse/emby-collapse.js @@ -7,51 +7,51 @@ 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) { diff --git a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js index b1f8c4f4cf..ea9a343e8c 100644 --- a/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js +++ b/src/elements/emby-itemrefreshindicator/emby-itemrefreshindicator.js @@ -40,7 +40,7 @@ import 'webcomponents'; this.classList.add('hide'); } - this.setProgress(progress); + this.setAttribute('data-progress', progress); } } diff --git a/src/elements/emby-itemscontainer/emby-itemscontainer.js b/src/elements/emby-itemscontainer/emby-itemscontainer.js index 1d4a67717a..608449f30f 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) { diff --git a/src/elements/emby-progressring/emby-progressring.js b/src/elements/emby-progressring/emby-progressring.js index 062f64d78b..838816579c 100644 --- a/src/elements/emby-progressring/emby-progressring.js +++ b/src/elements/emby-progressring/emby-progressring.js @@ -13,23 +13,22 @@ import 'webcomponents'; 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')); }); diff --git a/src/elements/emby-radio/emby-radio.js b/src/elements/emby-radio/emby-radio.js index c8437d77e3..7d53eb6ad4 100644 --- a/src/elements/emby-radio/emby-radio.js +++ b/src/elements/emby-radio/emby-radio.js @@ -37,7 +37,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..42cd69775a 100644 --- a/src/elements/emby-ratingbutton/emby-ratingbutton.js +++ b/src/elements/emby-ratingbutton/emby-ratingbutton.js @@ -78,7 +78,6 @@ import EmbyButtonPrototype from 'emby-button'; if (icon) { icon.classList.add('favorite'); icon.classList.remove('ratingbutton-icon-withrating'); - //icon.innerHTML = 'thumb_up'; } button.classList.remove('ratingbutton-withrating'); @@ -87,7 +86,6 @@ import EmbyButtonPrototype from 'emby-button'; if (icon) { icon.classList.add('favorite'); icon.classList.remove('ratingbutton-icon-withrating'); - //icon.innerHTML = 'thumb_down'; } button.classList.remove('ratingbutton-withrating'); @@ -96,7 +94,6 @@ import EmbyButtonPrototype from 'emby-button'; if (icon) { icon.classList.add('favorite'); icon.classList.remove('ratingbutton-icon-withrating'); - //icon.innerHTML = 'thumbs_up_down'; } button.classList.remove('ratingbutton-withrating'); } 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-slider/emby-slider.js b/src/elements/emby-slider/emby-slider.js index e872f6c78b..f634faf1e9 100644 --- a/src/elements/emby-slider/emby-slider.js +++ b/src/elements/emby-slider/emby-slider.js @@ -12,8 +12,6 @@ import 'emby-input'; let supportsValueSetOverride = false; - let enableWidthWithTransform; - if (Object.getOwnPropertyDescriptor && Object.defineProperty) { const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); @@ -104,12 +102,8 @@ import 'emby-input'; 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 + '%'; } }); } @@ -146,10 +140,6 @@ import 'emby-input'; return; } - if (enableWidthWithTransform == null) { - //enableWidthWithTransform = browser.supportsCssAnimation(); - } - this.setAttribute('data-embyslider', 'true'); this.classList.add('mdl-slider'); @@ -177,11 +167,7 @@ import 'emby-input'; // the more of these, the more ranges we can display htmlToInsert += '
'; - if (enableWidthWithTransform) { - htmlToInsert += '
'; - } else { - htmlToInsert += '
'; - } + htmlToInsert += '
'; htmlToInsert += '
'; htmlToInsert += '
'; diff --git a/src/elements/emby-tabs/emby-tabs.js b/src/elements/emby-tabs/emby-tabs.js index f3cd9d38cc..ad96290498 100644 --- a/src/elements/emby-tabs/emby-tabs.js +++ b/src/elements/emby-tabs/emby-tabs.js @@ -29,13 +29,6 @@ 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%'; @@ -263,7 +256,6 @@ import 'scrollStyles'; onClick.call(tabs, { target: tabButtons[selected] }); - //tabButtons[selected].click(); } }; @@ -330,8 +322,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..28147c2750 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'; 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/experimentalWarnings/plugin.js b/src/plugins/experimentalWarnings/plugin.js index 632e38208c..cab4fcfada 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())); @@ -26,6 +19,7 @@ define(['connectionManager', 'globalize', 'userSettings', 'apphost'], function ( var now = new Date(); + // TODO: Use date-fns userSettingsKey += now.getFullYear() + '-w' + getWeek(now); if (userSettings.get(userSettingsKey, false) === '1') { diff --git a/src/plugins/htmlAudioPlayer/plugin.js b/src/plugins/htmlAudioPlayer/plugin.js index 8265987e28..a4821fa35f 100644 --- a/src/plugins/htmlAudioPlayer/plugin.js +++ b/src/plugins/htmlAudioPlayer/plugin.js @@ -140,8 +140,6 @@ define(['events', 'browser', 'require', 'apphost', 'appSettings', 'htmlMediaHelp xhrSetup: function(xhr, url) { xhr.withCredentials = true; } - //appendErrorMaxRetry: 6, - //debug: true }); hls.loadSource(val); hls.attachMedia(elem); diff --git a/src/plugins/htmlVideoPlayer/plugin.js b/src/plugins/htmlVideoPlayer/plugin.js index cc312bb956..b1856afbd4 100644 --- a/src/plugins/htmlVideoPlayer/plugin.js +++ b/src/plugins/htmlVideoPlayer/plugin.js @@ -1,8 +1,6 @@ + define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackManager', 'appRouter', 'appSettings', 'connectionManager', 'htmlMediaHelper', 'itemHelper', 'screenfull', 'globalize'], function (browser, require, events, appHost, loading, dom, playbackManager, appRouter, appSettings, connectionManager, htmlMediaHelper, itemHelper, screenfull, globalize) { 'use strict'; - /* globals cast */ - - var mediaManager; function tryRemoveElement(elem) { var parentNode = elem.parentNode; @@ -17,25 +15,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa } } - var _supportsTextTracks; - function supportsTextTracks() { - - if (_supportsTextTracks == null) { - _supportsTextTracks = document.createElement('video').textTracks != null; - } - - // For now, until ready - return _supportsTextTracks; - } - - function supportsCanvas() { - return !!document.createElement('canvas').getContext; - } - - function supportsWebWorkers() { - return !!window.Worker; - } - function enableNativeTrackSupport(currentSrc, track) { if (track) { @@ -50,13 +29,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa } } - // subs getting blocked due to CORS - if (browser.chromecast) { - if ((currentSrc || '').toLowerCase().indexOf('.m3u8') !== -1) { - return false; - } - } - if (browser.ps4) { return false; } @@ -129,11 +101,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa return useHtml ? result.replace(/\n/gi, '
') : result; } - function setTracks(elem, tracks, item, mediaSource) { - - elem.innerHTML = getTracksHtml(tracks, item, mediaSource); - } - function getTextTrackUrl(track, item, format) { if (itemHelper.isLocalItem(item) && track.Path) { @@ -148,22 +115,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa return url; } - function getTracksHtml(tracks, item, mediaSource) { - return tracks.map(function (t) { - - if (t.DeliveryMethod !== 'External') { - return ''; - } - - var defaultAttribute = mediaSource.DefaultSubtitleStreamIndex === t.Index ? ' default' : ''; - - var language = t.Language || 'und'; - var label = t.Language || 'und'; - return ''; - - }).join(''); - } - function getDefaultProfile() { return new Promise(function (resolve, reject) { @@ -191,12 +142,9 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa var videoDialog; - var winJsPlaybackItem; - var subtitleTrackIndexToSetOnPlaying; var audioTrackIndexToSetOnPlaying; - var lastCustomTrackMs = 0; var currentClock; var currentSubtitlesOctopus; var currentAssRenderer; @@ -334,8 +282,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa xhrSetup: function(xhr, xhr_url) { xhr.withCredentials = true; } - //appendErrorMaxRetry: 6, - //debug: true }); hls.loadSource(url); hls.attachMedia(elem); @@ -350,155 +296,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa }); } - function onShakaError(event) { - - var error = event.detail; - console.error('Error code', error.code, 'object', error); - } - - function setSrcWithShakaPlayer(instance, elem, options, url) { - - return new Promise(function (resolve, reject) { - - require(['shaka'], function () { - /* globals shaka */ - - var player = new shaka.Player(elem); - - //player.configure({ - // abr: { - // enabled: false - // }, - // streaming: { - - // failureCallback: function () { - // alert(2); - // } - // } - //}); - - //shaka.log.setLevel(6); - - // Listen for error events. - player.addEventListener('error', onShakaError); - - // Try to load a manifest. - // This is an asynchronous process. - player.load(url).then(function () { - - // This runs if the asynchronous load is successful. - resolve(); - - }, reject); - - self._shakaPlayer = player; - - // This is needed in setCurrentTrackElement - self._currentSrc = url; - }); - }); - } - - function setCurrentSrcChromecast(instance, elem, options, url) { - - elem.autoplay = true; - - var lrd = new cast.receiver.MediaManager.LoadRequestData(); - lrd.currentTime = (options.playerStartPositionTicks || 0) / 10000000; - lrd.autoplay = true; - lrd.media = new cast.receiver.media.MediaInformation(); - - lrd.media.contentId = url; - lrd.media.contentType = options.mimeType; - lrd.media.streamType = cast.receiver.media.StreamType.OTHER; - lrd.media.customData = options; - - console.debug('loading media url into media manager'); - - try { - mediaManager.load(lrd); - // This is needed in setCurrentTrackElement - self._currentSrc = url; - - return Promise.resolve(); - } catch (err) { - - console.debug('media manager error: ' + err); - return Promise.reject(); - } - } - - // Adapted from : https://github.com/googlecast/CastReferencePlayer/blob/master/player.js - function onMediaManagerLoadMedia(event) { - - if (self._castPlayer) { - self._castPlayer.unload(); // Must unload before starting again. - } - self._castPlayer = null; - - var data = event.data; - - var media = event.data.media || {}; - var url = media.contentId; - var contentType = media.contentType.toLowerCase(); - var options = media.customData; - - var protocol; - var ext = 'm3u8'; - - var mediaElement = self._mediaElement; - - var host = new cast.player.api.Host({ - 'url': url, - 'mediaElement': mediaElement - }); - - if (ext === 'm3u8' || - contentType === 'application/x-mpegurl' || - contentType === 'application/vnd.apple.mpegurl') { - protocol = cast.player.api.CreateHlsStreamingProtocol(host); - } else if (ext === 'mpd' || - contentType === 'application/dash+xml') { - protocol = cast.player.api.CreateDashStreamingProtocol(host); - } else if (url.indexOf('.ism') > -1 || - contentType === 'application/vnd.ms-sstr+xml') { - protocol = cast.player.api.CreateSmoothStreamingProtocol(host); - } - - console.debug('loading playback url: ' + url); - console.debug('content type: ' + contentType); - - host.onError = function (errorCode) { - console.error('fatal Error - ' + errorCode); - }; - - mediaElement.autoplay = false; - - self._castPlayer = new cast.player.api.Player(host); - - self._castPlayer.load(protocol, data.currentTime || 0); - - self._castPlayer.playWhenHaveEnoughData(); - } - - function initMediaManager() { - - mediaManager.defaultOnLoad = mediaManager.onLoad.bind(mediaManager); - mediaManager.onLoad = onMediaManagerLoadMedia.bind(self); - - //mediaManager.defaultOnPlay = mediaManager.onPlay.bind(mediaManager); - //mediaManager.onPlay = function (event) { - // // TODO ??? - // mediaManager.defaultOnPlay(event); - //}; - - mediaManager.defaultOnStop = mediaManager.onStop.bind(mediaManager); - mediaManager.onStop = function (event) { - playbackManager.stop(); - mediaManager.defaultOnStop(event); - }; - } - function setCurrentSrc(elem, options) { elem.removeEventListener('error', onError); @@ -516,8 +313,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa htmlMediaHelper.destroyFlvPlayer(self); htmlMediaHelper.destroyCastPlayer(self); - var tracks = getMediaStreamTextTracks(options.mediaSource); - subtitleTrackIndexToSetOnPlaying = options.mediaSource.DefaultSubtitleStreamIndex == null ? -1 : options.mediaSource.DefaultSubtitleStreamIndex; if (subtitleTrackIndexToSetOnPlaying != null && subtitleTrackIndexToSetOnPlaying >= 0) { var initialSubtitleStream = options.mediaSource.MediaStreams[subtitleTrackIndexToSetOnPlaying]; @@ -535,16 +330,7 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa elem.crossOrigin = crossOrigin; } - /*if (htmlMediaHelper.enableHlsShakaPlayer(options.item, options.mediaSource, 'Video') && val.indexOf('.m3u8') !== -1) { - - setTracks(elem, tracks, options.item, options.mediaSource); - - return setSrcWithShakaPlayer(self, elem, options, val); - - } else*/ if (browser.chromecast && val.indexOf('.m3u8') !== -1 && options.mediaSource.RunTimeTicks) { - - return setCurrentSrcChromecast(self, elem, options, val); - } else if (htmlMediaHelper.enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && val.indexOf('.m3u8') !== -1) { + if (htmlMediaHelper.enableHlsJsPlayer(options.mediaSource.RunTimeTicks, 'Video') && val.indexOf('.m3u8') !== -1) { return setSrcWithHlsJs(self, elem, options, val); } else if (options.playMethod !== 'Transcode' && options.mediaSource.Container === 'flv') { @@ -1062,7 +848,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa destroyCustomTrack(videoElement); customTrackIndex = track.Index; renderTracksEvents(videoElement, track, item); - lastCustomTrackMs = 0; } function renderSsaAss(videoElement, track, item) { @@ -1320,10 +1105,6 @@ define(['browser', 'require', 'events', 'apphost', 'loading', 'dom', 'playbackMa var html = ''; var 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 += '