diff --git a/.eslintrc.js b/.eslintrc.js
index baf6d0e084..765db89daa 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -28,7 +28,7 @@ module.exports = {
],
rules: {
'block-spacing': ['error'],
- 'brace-style': ['error'],
+ 'brace-style': ['error', "1tbs", { "allowSingleLine": true }],
'comma-dangle': ['error', 'never'],
'comma-spacing': ['error'],
'eol-last': ['error'],
@@ -39,7 +39,10 @@ module.exports = {
'no-multi-spaces': ['error'],
'no-multiple-empty-lines': ['error', { 'max': 1 }],
'no-trailing-spaces': ['error'],
+ 'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
+ "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }],
'one-var': ['error', 'never'],
+ 'padded-blocks': ['error', 'never'],
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
'semi': ['error'],
'space-before-blocks': ['error'],
@@ -98,9 +101,8 @@ module.exports = {
},
rules: {
// TODO: Fix warnings and remove these rules
- 'no-redeclare': ['warn'],
- 'no-unused-vars': ['warn'],
- 'no-useless-escape': ['warn'],
+ 'no-redeclare': ['off'],
+ 'no-useless-escape': ['off'],
// TODO: Remove after ES6 migration is complete
'import/no-unresolved': ['off']
},
diff --git a/package.json b/package.json
index e0a16bc55f..1d5bd016c6 100644
--- a/package.json
+++ b/package.json
@@ -14,9 +14,9 @@
"autoprefixer": "^9.8.5",
"babel-eslint": "^11.0.0-beta.2",
"babel-loader": "^8.0.6",
- "browser-sync": "^2.26.10",
+ "browser-sync": "^2.26.12",
"copy-webpack-plugin": "^5.1.1",
- "css-loader": "^3.6.0",
+ "css-loader": "^4.0.0",
"cssnano": "^4.1.10",
"del": "^5.1.0",
"eslint": "^6.8.0",
@@ -76,7 +76,6 @@
"query-string": "^6.13.1",
"resize-observer-polyfill": "^1.5.1",
"screenfull": "^5.0.2",
- "shaka-player": "^2.5.13",
"sortablejs": "^1.10.2",
"swiper": "^5.4.5",
"webcomponents.js": "^0.7.24",
@@ -158,11 +157,11 @@
"src/components/syncPlay/playbackPermissionManager.js",
"src/components/syncPlay/syncPlayManager.js",
"src/components/syncPlay/timeSyncManager.js",
- "src/controllers/auth/addserver.js",
- "src/controllers/auth/forgotpassword.js",
- "src/controllers/auth/forgotpasswordpin.js",
- "src/controllers/auth/login.js",
- "src/controllers/auth/selectserver.js",
+ "src/controllers/session/addServer/index.js",
+ "src/controllers/session/forgotPassword/index.js",
+ "src/controllers/session/redeemPassword/index.js",
+ "src/controllers/session/login/index.js",
+ "src/controllers/sessopm/selectServer/index.js",
"src/controllers/dashboard/apikeys.js",
"src/controllers/dashboard/dashboard.js",
"src/controllers/dashboard/devices/device.js",
@@ -179,7 +178,7 @@
"src/controllers/dashboard/metadatanfo.js",
"src/controllers/dashboard/networking.js",
"src/controllers/dashboard/playback.js",
- "src/controllers/dashboard/plugins/repositories.js",
+ "src/controllers/dashboard/plugins/repositories/index.js",
"src/controllers/dashboard/scheduledtasks/scheduledtask.js",
"src/controllers/dashboard/scheduledtasks/scheduledtasks.js",
"src/controllers/dashboard/serveractivity.js",
@@ -190,8 +189,8 @@
"src/controllers/dashboard/users/userparentalcontrol.js",
"src/controllers/dashboard/users/userpasswordpage.js",
"src/controllers/dashboard/users/userprofilespage.js",
- "src/controllers/playback/nowplaying.js",
- "src/controllers/playback/videoosd.js",
+ "src/controllers/playback/queue/index.js",
+ "src/controllers/playback/video/index.js",
"src/controllers/searchpage.js",
"src/controllers/shows/episodes.js",
"src/controllers/shows/tvgenres.js",
@@ -200,18 +199,18 @@
"src/controllers/shows/tvshows.js",
"src/controllers/shows/tvstudios.js",
"src/controllers/shows/tvupcoming.js",
- "src/controllers/user/display.js",
- "src/controllers/user/home.js",
- "src/controllers/user/menu.js",
- "src/controllers/user/playback.js",
- "src/controllers/user/profile.js",
- "src/controllers/user/subtitles.js",
- "src/controllers/user/subtitles.js",
- "src/controllers/wizard/finish.js",
- "src/controllers/wizard/remoteaccess.js",
- "src/controllers/wizard/settings.js",
- "src/controllers/wizard/start.js",
- "src/controllers/wizard/user.js",
+ "src/controllers/user/display/index.js",
+ "src/controllers/user/home/index.js",
+ "src/controllers/user/menu/index.js",
+ "src/controllers/user/playback/index.js",
+ "src/controllers/user/profile/index.js",
+ "src/controllers/user/subtitles/index.js",
+ "src/controllers/user/subtitles/index.js",
+ "src/controllers/wizard/finish/index.js",
+ "src/controllers/wizard/remote/index.js",
+ "src/controllers/wizard/settings/index.js",
+ "src/controllers/wizard/start/index.js",
+ "src/controllers/wizard/user/index.js",
"src/elements/emby-button/emby-button.js",
"src/elements/emby-button/paper-icon-button-light.js",
"src/elements/emby-checkbox/emby-checkbox.js",
diff --git a/src/assets/css/site.css b/src/assets/css/site.css
index f6326f4c9e..38e056df89 100644
--- a/src/assets/css/site.css
+++ b/src/assets/css/site.css
@@ -133,3 +133,13 @@ div[data-role=page] {
.w-100 {
width: 100%;
}
+
+.margin-auto-x {
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.margin-auto-y {
+ margin-top: auto;
+ margin-bottom: auto;
+}
diff --git a/src/bundle.js b/src/bundle.js
index dd1ff6548b..ae2a59f0d5 100644
--- a/src/bundle.js
+++ b/src/bundle.js
@@ -78,12 +78,6 @@ _define('webcomponents', function() {
return webcomponents;
});
-// shaka
-var shaka = require('shaka-player');
-_define('shaka', function() {
- return shaka;
-});
-
// libass-wasm
var libassWasm = require('libass-wasm');
_define('JavascriptSubtitlesOctopus', function() {
diff --git a/src/components/actionSheet/actionSheet.js b/src/components/actionSheet/actionSheet.js
index a68d6a6acd..937cd2afe5 100644
--- a/src/components/actionSheet/actionSheet.js
+++ b/src/components/actionSheet/actionSheet.js
@@ -9,7 +9,6 @@ import 'scrollStyles';
import 'listViewStyle';
function getOffsets(elems) {
-
let results = [];
if (!document) {
@@ -31,7 +30,6 @@ function getOffsets(elems) {
}
function getPosition(options, dlg) {
-
const windowSize = dom.getWindowSize();
const windowHeight = windowSize.innerHeight;
const windowWidth = windowSize.innerWidth;
@@ -80,7 +78,6 @@ function centerFocus(elem, horiz, on) {
}
export function show(options) {
-
// items
// positionTo
// showCancel
@@ -98,7 +95,6 @@ export function show(options) {
isFullscreen = true;
dialogOptions.autoFocus = true;
} else {
-
dialogOptions.modal = false;
dialogOptions.entryAnimation = options.entryAnimation;
dialogOptions.exitAnimation = options.exitAnimation;
@@ -136,7 +132,6 @@ export function show(options) {
let icons = [];
let itemIcon;
for (const item of options.items) {
-
itemIcon = item.icon || (item.selected ? 'check' : null);
if (itemIcon) {
@@ -161,7 +156,6 @@ export function show(options) {
}
if (options.title) {
-
html += '
' + options.title + '
';
}
if (options.text) {
@@ -197,7 +191,6 @@ export function show(options) {
const item = options.items[i];
if (item.divider) {
-
html += '';
continue;
}
@@ -255,8 +248,6 @@ export function show(options) {
});
}
- // Seeing an issue in some non-chrome browsers where this is requiring a double click
- //var eventName = browser.firefox ? 'mousedown' : 'click';
let selectedId;
let timeout;
@@ -267,26 +258,20 @@ export function show(options) {
}
return new Promise(function (resolve, reject) {
-
let isResolved;
dlg.addEventListener('click', function (e) {
-
const actionSheetMenuItem = dom.parentWithClass(e.target, 'actionSheetMenuItem');
if (actionSheetMenuItem) {
selectedId = actionSheetMenuItem.getAttribute('data-id');
if (options.resolveOnClick) {
-
if (options.resolveOnClick.indexOf) {
-
if (options.resolveOnClick.indexOf(selectedId) !== -1) {
-
resolve(selectedId);
isResolved = true;
}
-
} else {
resolve(selectedId);
isResolved = true;
@@ -295,11 +280,9 @@ export function show(options) {
dialogHelper.close(dlg);
}
-
});
dlg.addEventListener('close', function () {
-
if (layoutManager.tv) {
centerFocus(dlg.querySelector('.actionSheetScroller'), false, false);
}
diff --git a/src/components/activitylog.js b/src/components/activitylog.js
index 2d5a21756f..9834255003 100644
--- a/src/components/activitylog.js
+++ b/src/components/activitylog.js
@@ -3,7 +3,6 @@ import globalize from 'globalize';
import dom from 'dom';
import * as datefns from 'date-fns';
import dfnshelper from 'dfnshelper';
-import userSettings from 'userSettings';
import serverNotifications from 'serverNotifications';
import connectionManager from 'connectionManager';
import 'emby-button';
@@ -69,6 +68,7 @@ import 'listViewStyle';
const minDate = new Date();
const hasUserId = 'false' !== elem.getAttribute('data-useractivity');
+ // TODO: Use date-fns
if (hasUserId) {
minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back
} else {
diff --git a/src/components/alert.js b/src/components/alert.js
index 5d396e3a62..1420c7f428 100644
--- a/src/components/alert.js
+++ b/src/components/alert.js
@@ -10,7 +10,6 @@ import globalize from 'globalize';
}
export default function (text, title) {
-
let options;
if (typeof text === 'string') {
options = {
diff --git a/src/components/alphaPicker/alphaPicker.js b/src/components/alphaPicker/alphaPicker.js
index 4bc8af56f0..95b5881677 100644
--- a/src/components/alphaPicker/alphaPicker.js
+++ b/src/components/alphaPicker/alphaPicker.js
@@ -26,7 +26,6 @@ import 'material-icons';
}
function getAlphaPickerButtonClassName(vertical) {
-
let alphaPickerButtonClassName = 'alphaPickerButton';
if (layoutManager.tv) {
@@ -45,14 +44,12 @@ import 'material-icons';
}
function mapLetters(letters, vertical) {
-
return letters.map(l => {
return getLetterButton(l, vertical);
});
}
function render(element, options) {
-
element.classList.add('alphaPicker');
if (layoutManager.tv) {
@@ -137,7 +134,6 @@ import 'material-icons';
}
function onAlphaPickerInKeyboardModeClick(e) {
-
const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton');
if (alphaPickerButton) {
@@ -153,7 +149,6 @@ import 'material-icons';
}
function onAlphaPickerClick(e) {
-
const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton');
if (alphaPickerButton) {
@@ -167,7 +162,6 @@ import 'material-icons';
}
function onAlphaPickerFocusIn(e) {
-
if (alphaFocusTimeout) {
clearTimeout(alphaFocusTimeout);
alphaFocusTimeout = null;
@@ -182,13 +176,11 @@ import 'material-icons';
}
function onItemsFocusIn(e) {
-
const item = dom.parentWithClass(e.target, itemClass);
if (item) {
const prefix = item.getAttribute('data-prefix');
if (prefix && prefix.length) {
-
itemFocusValue = prefix[0];
if (itemFocusTimeout) {
clearTimeout(itemFocusTimeout);
@@ -199,9 +191,7 @@ import 'material-icons';
}
this.enabled = function (enabled) {
-
if (enabled) {
-
if (itemsContainer) {
itemsContainer.addEventListener('focus', onItemsFocusIn, true);
}
@@ -215,9 +205,7 @@ import 'material-icons';
} else {
element.addEventListener('click', onAlphaPickerClick.bind(this));
}
-
} else {
-
if (itemsContainer) {
itemsContainer.removeEventListener('focus', onItemsFocusIn, true);
}
@@ -235,14 +223,12 @@ import 'material-icons';
}
value(value, applyValue) {
-
const element = this.options.element;
let btn;
let selected;
if (value !== undefined) {
if (value != null) {
-
value = value.toUpperCase();
this._currentValue = value;
@@ -295,33 +281,27 @@ import 'material-icons';
}
visible(visible) {
-
const element = this.options.element;
element.style.visibility = visible ? 'visible' : 'hidden';
}
values() {
-
const element = this.options.element;
const elems = element.querySelectorAll('.alphaPickerButton');
const values = [];
for (let i = 0, length = elems.length; i < length; i++) {
-
values.push(elems[i].getAttribute('data-value'));
-
}
return values;
}
focus() {
-
const element = this.options.element;
focusManager.autoFocus(element, true);
}
destroy() {
-
const element = this.options.element;
this.enabled(false);
element.classList.remove('focuscontainer-x');
diff --git a/src/components/appFooter/appFooter.js b/src/components/appFooter/appFooter.js
index af50ef7bf9..c60aa1a27c 100644
--- a/src/components/appFooter/appFooter.js
+++ b/src/components/appFooter/appFooter.js
@@ -1,4 +1,3 @@
-import browser from 'browser';
import 'css!./appFooter';
function render(options) {
diff --git a/src/components/appRouter.js b/src/components/appRouter.js
index 8054279c92..138d58e5c0 100644
--- a/src/components/appRouter.js
+++ b/src/components/appRouter.js
@@ -16,7 +16,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
show('/settings/settings.html');
},
showNowPlaying: function () {
- show('/nowplaying.html');
+ show('queue');
}
};
@@ -153,20 +153,14 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
};
if (!isBackNav) {
- // Don't force a new view for home due to the back menu
- //if (route.type !== 'home') {
onNewViewNeeded();
return;
- //}
}
viewManager.tryRestoreView(currentRequest, function () {
-
- // done
currentRouteInfo = {
route: route,
path: ctx.path
};
-
}).catch(function (result) {
if (!result || !result.cancelled) {
onNewViewNeeded();
@@ -197,12 +191,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
}
function onRequestFail(e, data) {
-
var apiClient = this;
if (data.status === 403) {
if (data.errorCode === 'ParentalControl') {
-
var isCurrentAllowed = currentRouteInfo ? (currentRouteInfo.route.anonymous || currentRouteInfo.route.startup) : true;
// Bounce to the login screen, but not if a password entry fails, obviously
@@ -210,7 +202,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
showForcedLogoutMessage(globalize.translate('AccessRestrictedTryAgainLater'));
appRouter.showLocalLogin(apiClient.serverId());
}
-
}
}
}
@@ -237,7 +228,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
if (navigator.connection) {
var max = navigator.connection.downlinkMax;
if (max && max > 0 && max < Number.POSITIVE_INFINITY) {
-
max /= 8;
max *= 1000000;
max *= 0.7;
@@ -255,7 +245,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
}
function onApiClientCreated(e, newApiClient) {
-
newApiClient.normalizeImageOptions = normalizeImageOptions;
if (browser.iOS) {
@@ -269,12 +258,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
}
function initApiClient(apiClient) {
-
onApiClientCreated({}, apiClient);
}
function initApiClients() {
-
connectionManager.getApiClients().forEach(initApiClient);
events.on(connectionManager, 'apiclientcreated', onApiClientCreated);
@@ -290,7 +277,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
var firstConnectionResult;
function start(options) {
-
loading.show();
initApiClients();
@@ -302,53 +288,29 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
enableAutoLogin: appSettings.enableAutoLogin()
}).then(function (result) {
-
firstConnectionResult = result;
options = options || {};
page({
click: options.click !== false,
- hashbang: options.hashbang !== false,
- enableHistory: enableHistory()
+ hashbang: options.hashbang !== false
});
}).catch().then(function() {
loading.hide();
});
}
- function enableHistory() {
-
- //if (browser.edgeUwp) {
- // return false;
- //}
-
- // shows status bar on navigation
- if (browser.xboxOne) {
- return false;
- }
-
- // Does not support history
- if (browser.orsay) {
- return false;
- }
-
- return true;
- }
-
function enableNativeHistory() {
return false;
}
function authenticate(ctx, route, callback) {
-
var firstResult = firstConnectionResult;
if (firstResult) {
-
firstConnectionResult = null;
if (firstResult.State !== 'SignedIn' && !route.anonymous) {
-
handleConnectionResult(firstResult);
return;
}
@@ -377,7 +339,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
}
if (apiClient && apiClient.isLoggedIn()) {
-
console.debug('appRouter - user is authenticated');
if (route.isDefaultRoute) {
@@ -385,11 +346,8 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
loadUserSkinWithOptions(ctx);
return;
} else if (route.roles) {
-
validateRoles(apiClient, route.roles).then(function () {
-
callback();
-
}, beginConnectionWizard);
return;
}
@@ -431,7 +389,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
var isDummyBackToHome;
function loadContent(ctx, route, html, request) {
-
html = globalize.translateHtml(html, route.dictionary);
request.view = html;
@@ -491,7 +448,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
}
function getWindowLocationSearch(win) {
-
var currentPath = currentRouteInfo ? (currentRouteInfo.path || '') : '';
var index = currentPath.indexOf('?');
@@ -535,9 +491,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
if (!document.querySelector('.dialogContainer') && startPages.indexOf(curr.type) !== -1) {
return false;
}
- if (enableHistory()) {
- return history.length > 1;
- }
+
return (page.len || 0) > 0;
}
@@ -644,7 +598,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
function pushState(state, title, url) {
state.navigate = false;
history.pushState(state, title, url);
-
}
function setBaseRoute() {
diff --git a/src/components/apphost.js b/src/components/apphost.js
index f200b9a642..d447c7ea45 100644
--- a/src/components/apphost.js
+++ b/src/components/apphost.js
@@ -257,12 +257,6 @@ define(['appSettings', 'browser', 'events', 'htmlMediaHelper', 'webSettings', 'g
features.push('fullscreenchange');
}
- if (browser.chrome || browser.edge && !browser.slow) {
- if (!browser.noAnimation && !browser.edgeUwp && !browser.xboxOne) {
- features.push('imageanalysis');
- }
- }
-
if (browser.tv || browser.xboxOne || browser.ps4 || browser.mobile) {
features.push('physicalvolumecontrol');
}
diff --git a/src/components/cardbuilder/cardBuilder.js b/src/components/cardbuilder/cardBuilder.js
index a6d0b10662..edb9db28ba 100644
--- a/src/components/cardbuilder/cardBuilder.js
+++ b/src/components/cardbuilder/cardBuilder.js
@@ -291,12 +291,10 @@ import 'programStyles';
const primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items);
if (['auto', 'autohome', 'autooverflow', 'autoVertical'].includes(options.shape)) {
-
const requestedShape = options.shape;
options.shape = null;
if (primaryImageAspectRatio) {
-
if (primaryImageAspectRatio >= 3) {
options.shape = 'banner';
options.coverImage = true;
@@ -394,7 +392,6 @@ import 'programStyles';
}
if (newIndexValue !== currentIndexValue) {
-
if (hasOpenRow) {
html += '';
hasOpenRow = false;
@@ -402,7 +399,6 @@ import 'programStyles';
}
if (hasOpenSection) {
-
html += '';
if (isVertical) {
@@ -426,7 +422,6 @@ import 'programStyles';
}
if (options.rows && itemsInRow === 0) {
-
if (hasOpenRow) {
html += '';
hasOpenRow = false;
@@ -686,7 +681,6 @@ import 'programStyles';
let valid = 0;
for (let i = 0; i < lines.length; i++) {
-
let currentCssClass = cssClass;
let text = lines[i];
@@ -713,7 +707,6 @@ import 'programStyles';
}
if (forceLines) {
-
let linesLength = maxLines || Math.min(lines.length, maxLines || lines.length);
while (valid < linesLength) {
@@ -745,7 +738,6 @@ import 'programStyles';
let airTimeText = '';
if (item.StartDate) {
-
try {
let date = datetime.parseISO8601Date(item.StartDate);
@@ -792,7 +784,6 @@ import 'programStyles';
const showOtherText = isOuterFooter ? !overlayText : overlayText;
if (isOuterFooter && options.cardLayout && layoutManager.mobile) {
-
if (options.cardFooterAside !== 'none') {
html += '';
}
@@ -807,9 +798,7 @@ import 'programStyles';
if (showOtherText) {
if ((options.showParentTitle || options.showParentTitleOrTitle) && !parentTitleUnderneath) {
-
if (isOuterFooter && item.Type === 'Episode' && item.SeriesName) {
-
if (item.SeriesId) {
lines.push(getTextActionButton({
Id: item.SeriesId,
@@ -822,15 +811,12 @@ import 'programStyles';
lines.push(item.SeriesName);
}
} else {
-
if (isUsingLiveTvNaming(item)) {
-
lines.push(item.Name);
if (!item.EpisodeTitle) {
titleAdded = true;
}
-
} else {
const parentTitle = item.SeriesName || item.Series || item.Album || item.AlbumArtist || '';
@@ -848,7 +834,6 @@ import 'programStyles';
}
if (showMediaTitle) {
-
const name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, {
includeParentInfo: options.includeParentInfoInTitle
});
@@ -865,7 +850,6 @@ import 'programStyles';
if (showOtherText) {
if (options.showParentTitle && parentTitleUnderneath) {
-
if (isOuterFooter && item.AlbumArtists && item.AlbumArtists.length) {
item.AlbumArtists[0].Type = 'MusicArtist';
item.AlbumArtists[0].IsFolder = true;
@@ -899,7 +883,6 @@ import 'programStyles';
}
if (options.showPremiereDate) {
-
if (item.PremiereDate) {
try {
lines.push(datetime.toLocaleDateString(
@@ -908,7 +891,6 @@ import 'programStyles';
));
} catch (err) {
lines.push('');
-
}
} else {
lines.push('');
@@ -916,14 +898,10 @@ import 'programStyles';
}
if (options.showYear || options.showSeriesYear) {
-
if (item.Type === 'Series') {
if (item.Status === 'Continuing') {
-
lines.push(globalize.translate('SeriesYearToPresent', item.ProductionYear || ''));
-
} else {
-
if (item.EndDate && item.ProductionYear) {
const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear();
lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear)));
@@ -937,9 +915,7 @@ import 'programStyles';
}
if (options.showRuntime) {
-
if (item.RunTimeTicks) {
-
lines.push(datetime.getDisplayRunningTime(item.RunTimeTicks));
} else {
lines.push('');
@@ -947,14 +923,11 @@ import 'programStyles';
}
if (options.showAirTime) {
-
lines.push(getAirTimeText(item, options.showAirDateTime, options.showAirEndTime) || '');
}
if (options.showChannelName) {
-
if (item.ChannelId) {
-
lines.push(getTextActionButton({
Id: item.ChannelId,
@@ -971,7 +944,6 @@ import 'programStyles';
}
if (options.showCurrentProgram && item.Type === 'TvChannel') {
-
if (item.CurrentProgram) {
lines.push(item.CurrentProgram.Name);
} else {
@@ -980,7 +952,6 @@ import 'programStyles';
}
if (options.showCurrentProgramTime && item.Type === 'TvChannel') {
-
if (item.CurrentProgram) {
lines.push(getAirTimeText(item.CurrentProgram, false, true) || '');
} else {
@@ -990,7 +961,6 @@ import 'programStyles';
if (options.showSeriesTimerTime) {
if (item.RecordAnyTime) {
-
lines.push(globalize.translate('Anytime'));
} else {
lines.push(datetime.getDisplayTime(item.StartDate));
@@ -1025,7 +995,6 @@ import 'programStyles';
}
if (html) {
-
if (!isOuterFooter || logoUrl || options.cardLayout) {
html = '