1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Disallow block padding

This commit is contained in:
MrTimscampi 2020-07-27 08:06:46 +02:00
parent 454b81a037
commit 5e1b6acffe
126 changed files with 2 additions and 2127 deletions

View file

@ -28,7 +28,7 @@ module.exports = {
], ],
rules: { rules: {
'block-spacing': ['error'], 'block-spacing': ['error'],
'brace-style': ['error'], 'brace-style': ['error', "1tbs", { "allowSingleLine": true }],
'comma-dangle': ['error', 'never'], 'comma-dangle': ['error', 'never'],
'comma-spacing': ['error'], 'comma-spacing': ['error'],
'eol-last': ['error'], 'eol-last': ['error'],
@ -42,6 +42,7 @@ module.exports = {
'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }], 'no-unused-expressions': ['error', { 'allowShortCircuit': true, 'allowTernary': true, 'allowTaggedTemplates': true }],
"no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }], "no-unused-vars": ["error", { "vars": "all", "args": "none", "ignoreRestSiblings": true }],
'one-var': ['error', 'never'], 'one-var': ['error', 'never'],
'padded-blocks': ['error', 'never'],
'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }], 'quotes': ['error', 'single', { 'avoidEscape': true, 'allowTemplateLiterals': false }],
'semi': ['error'], 'semi': ['error'],
'space-before-blocks': ['error'], 'space-before-blocks': ['error'],

View file

@ -9,7 +9,6 @@ import 'scrollStyles';
import 'listViewStyle'; import 'listViewStyle';
function getOffsets(elems) { function getOffsets(elems) {
let results = []; let results = [];
if (!document) { if (!document) {
@ -31,7 +30,6 @@ function getOffsets(elems) {
} }
function getPosition(options, dlg) { function getPosition(options, dlg) {
const windowSize = dom.getWindowSize(); const windowSize = dom.getWindowSize();
const windowHeight = windowSize.innerHeight; const windowHeight = windowSize.innerHeight;
const windowWidth = windowSize.innerWidth; const windowWidth = windowSize.innerWidth;
@ -80,7 +78,6 @@ function centerFocus(elem, horiz, on) {
} }
export function show(options) { export function show(options) {
// items // items
// positionTo // positionTo
// showCancel // showCancel
@ -98,7 +95,6 @@ export function show(options) {
isFullscreen = true; isFullscreen = true;
dialogOptions.autoFocus = true; dialogOptions.autoFocus = true;
} else { } else {
dialogOptions.modal = false; dialogOptions.modal = false;
dialogOptions.entryAnimation = options.entryAnimation; dialogOptions.entryAnimation = options.entryAnimation;
dialogOptions.exitAnimation = options.exitAnimation; dialogOptions.exitAnimation = options.exitAnimation;
@ -136,7 +132,6 @@ export function show(options) {
let icons = []; let icons = [];
let itemIcon; let itemIcon;
for (const item of options.items) { for (const item of options.items) {
itemIcon = item.icon || (item.selected ? 'check' : null); itemIcon = item.icon || (item.selected ? 'check' : null);
if (itemIcon) { if (itemIcon) {
@ -161,7 +156,6 @@ export function show(options) {
} }
if (options.title) { if (options.title) {
html += '<h1 class="actionSheetTitle">' + options.title + '</h1>'; html += '<h1 class="actionSheetTitle">' + options.title + '</h1>';
} }
if (options.text) { if (options.text) {
@ -197,7 +191,6 @@ export function show(options) {
const item = options.items[i]; const item = options.items[i];
if (item.divider) { if (item.divider) {
html += '<div class="actionsheetDivider"></div>'; html += '<div class="actionsheetDivider"></div>';
continue; continue;
} }
@ -265,26 +258,20 @@ export function show(options) {
} }
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
let isResolved; let isResolved;
dlg.addEventListener('click', function (e) { dlg.addEventListener('click', function (e) {
const actionSheetMenuItem = dom.parentWithClass(e.target, 'actionSheetMenuItem'); const actionSheetMenuItem = dom.parentWithClass(e.target, 'actionSheetMenuItem');
if (actionSheetMenuItem) { if (actionSheetMenuItem) {
selectedId = actionSheetMenuItem.getAttribute('data-id'); selectedId = actionSheetMenuItem.getAttribute('data-id');
if (options.resolveOnClick) { if (options.resolveOnClick) {
if (options.resolveOnClick.indexOf) { if (options.resolveOnClick.indexOf) {
if (options.resolveOnClick.indexOf(selectedId) !== -1) { if (options.resolveOnClick.indexOf(selectedId) !== -1) {
resolve(selectedId); resolve(selectedId);
isResolved = true; isResolved = true;
} }
} else { } else {
resolve(selectedId); resolve(selectedId);
isResolved = true; isResolved = true;
@ -293,11 +280,9 @@ export function show(options) {
dialogHelper.close(dlg); dialogHelper.close(dlg);
} }
}); });
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.actionSheetScroller'), false, false); centerFocus(dlg.querySelector('.actionSheetScroller'), false, false);
} }

View file

@ -10,7 +10,6 @@ import globalize from 'globalize';
} }
export default function (text, title) { export default function (text, title) {
let options; let options;
if (typeof text === 'string') { if (typeof text === 'string') {
options = { options = {

View file

@ -26,7 +26,6 @@ import 'material-icons';
} }
function getAlphaPickerButtonClassName(vertical) { function getAlphaPickerButtonClassName(vertical) {
let alphaPickerButtonClassName = 'alphaPickerButton'; let alphaPickerButtonClassName = 'alphaPickerButton';
if (layoutManager.tv) { if (layoutManager.tv) {
@ -45,14 +44,12 @@ import 'material-icons';
} }
function mapLetters(letters, vertical) { function mapLetters(letters, vertical) {
return letters.map(l => { return letters.map(l => {
return getLetterButton(l, vertical); return getLetterButton(l, vertical);
}); });
} }
function render(element, options) { function render(element, options) {
element.classList.add('alphaPicker'); element.classList.add('alphaPicker');
if (layoutManager.tv) { if (layoutManager.tv) {
@ -137,7 +134,6 @@ import 'material-icons';
} }
function onAlphaPickerInKeyboardModeClick(e) { function onAlphaPickerInKeyboardModeClick(e) {
const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton'); const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton');
if (alphaPickerButton) { if (alphaPickerButton) {
@ -153,7 +149,6 @@ import 'material-icons';
} }
function onAlphaPickerClick(e) { function onAlphaPickerClick(e) {
const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton'); const alphaPickerButton = dom.parentWithClass(e.target, 'alphaPickerButton');
if (alphaPickerButton) { if (alphaPickerButton) {
@ -167,7 +162,6 @@ import 'material-icons';
} }
function onAlphaPickerFocusIn(e) { function onAlphaPickerFocusIn(e) {
if (alphaFocusTimeout) { if (alphaFocusTimeout) {
clearTimeout(alphaFocusTimeout); clearTimeout(alphaFocusTimeout);
alphaFocusTimeout = null; alphaFocusTimeout = null;
@ -182,13 +176,11 @@ import 'material-icons';
} }
function onItemsFocusIn(e) { function onItemsFocusIn(e) {
const item = dom.parentWithClass(e.target, itemClass); const item = dom.parentWithClass(e.target, itemClass);
if (item) { if (item) {
const prefix = item.getAttribute('data-prefix'); const prefix = item.getAttribute('data-prefix');
if (prefix && prefix.length) { if (prefix && prefix.length) {
itemFocusValue = prefix[0]; itemFocusValue = prefix[0];
if (itemFocusTimeout) { if (itemFocusTimeout) {
clearTimeout(itemFocusTimeout); clearTimeout(itemFocusTimeout);
@ -199,9 +191,7 @@ import 'material-icons';
} }
this.enabled = function (enabled) { this.enabled = function (enabled) {
if (enabled) { if (enabled) {
if (itemsContainer) { if (itemsContainer) {
itemsContainer.addEventListener('focus', onItemsFocusIn, true); itemsContainer.addEventListener('focus', onItemsFocusIn, true);
} }
@ -215,9 +205,7 @@ import 'material-icons';
} else { } else {
element.addEventListener('click', onAlphaPickerClick.bind(this)); element.addEventListener('click', onAlphaPickerClick.bind(this));
} }
} else { } else {
if (itemsContainer) { if (itemsContainer) {
itemsContainer.removeEventListener('focus', onItemsFocusIn, true); itemsContainer.removeEventListener('focus', onItemsFocusIn, true);
} }
@ -235,14 +223,12 @@ import 'material-icons';
} }
value(value, applyValue) { value(value, applyValue) {
const element = this.options.element; const element = this.options.element;
let btn; let btn;
let selected; let selected;
if (value !== undefined) { if (value !== undefined) {
if (value != null) { if (value != null) {
value = value.toUpperCase(); value = value.toUpperCase();
this._currentValue = value; this._currentValue = value;
@ -295,33 +281,27 @@ import 'material-icons';
} }
visible(visible) { visible(visible) {
const element = this.options.element; const element = this.options.element;
element.style.visibility = visible ? 'visible' : 'hidden'; element.style.visibility = visible ? 'visible' : 'hidden';
} }
values() { values() {
const element = this.options.element; const element = this.options.element;
const elems = element.querySelectorAll('.alphaPickerButton'); const elems = element.querySelectorAll('.alphaPickerButton');
const values = []; const values = [];
for (let i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
values.push(elems[i].getAttribute('data-value')); values.push(elems[i].getAttribute('data-value'));
} }
return values; return values;
} }
focus() { focus() {
const element = this.options.element; const element = this.options.element;
focusManager.autoFocus(element, true); focusManager.autoFocus(element, true);
} }
destroy() { destroy() {
const element = this.options.element; const element = this.options.element;
this.enabled(false); this.enabled(false);
element.classList.remove('focuscontainer-x'); element.classList.remove('focuscontainer-x');

View file

@ -161,7 +161,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
route: route, route: route,
path: ctx.path path: ctx.path
}; };
}).catch(function (result) { }).catch(function (result) {
if (!result || !result.cancelled) { if (!result || !result.cancelled) {
onNewViewNeeded(); onNewViewNeeded();
@ -192,12 +191,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
} }
function onRequestFail(e, data) { function onRequestFail(e, data) {
var apiClient = this; var apiClient = this;
if (data.status === 403) { if (data.status === 403) {
if (data.errorCode === 'ParentalControl') { if (data.errorCode === 'ParentalControl') {
var isCurrentAllowed = currentRouteInfo ? (currentRouteInfo.route.anonymous || currentRouteInfo.route.startup) : true; var isCurrentAllowed = currentRouteInfo ? (currentRouteInfo.route.anonymous || currentRouteInfo.route.startup) : true;
// Bounce to the login screen, but not if a password entry fails, obviously // Bounce to the login screen, but not if a password entry fails, obviously
@ -205,7 +202,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
showForcedLogoutMessage(globalize.translate('AccessRestrictedTryAgainLater')); showForcedLogoutMessage(globalize.translate('AccessRestrictedTryAgainLater'));
appRouter.showLocalLogin(apiClient.serverId()); appRouter.showLocalLogin(apiClient.serverId());
} }
} }
} }
} }
@ -232,7 +228,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
if (navigator.connection) { if (navigator.connection) {
var max = navigator.connection.downlinkMax; var max = navigator.connection.downlinkMax;
if (max && max > 0 && max < Number.POSITIVE_INFINITY) { if (max && max > 0 && max < Number.POSITIVE_INFINITY) {
max /= 8; max /= 8;
max *= 1000000; max *= 1000000;
max *= 0.7; max *= 0.7;
@ -250,7 +245,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
} }
function onApiClientCreated(e, newApiClient) { function onApiClientCreated(e, newApiClient) {
newApiClient.normalizeImageOptions = normalizeImageOptions; newApiClient.normalizeImageOptions = normalizeImageOptions;
if (browser.iOS) { if (browser.iOS) {
@ -264,12 +258,10 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
} }
function initApiClient(apiClient) { function initApiClient(apiClient) {
onApiClientCreated({}, apiClient); onApiClientCreated({}, apiClient);
} }
function initApiClients() { function initApiClients() {
connectionManager.getApiClients().forEach(initApiClient); connectionManager.getApiClients().forEach(initApiClient);
events.on(connectionManager, 'apiclientcreated', onApiClientCreated); events.on(connectionManager, 'apiclientcreated', onApiClientCreated);
@ -285,7 +277,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
var firstConnectionResult; var firstConnectionResult;
function start(options) { function start(options) {
loading.show(); loading.show();
initApiClients(); initApiClients();
@ -297,7 +288,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
enableAutoLogin: appSettings.enableAutoLogin() enableAutoLogin: appSettings.enableAutoLogin()
}).then(function (result) { }).then(function (result) {
firstConnectionResult = result; firstConnectionResult = result;
options = options || {}; options = options || {};
@ -316,14 +306,11 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
} }
function authenticate(ctx, route, callback) { function authenticate(ctx, route, callback) {
var firstResult = firstConnectionResult; var firstResult = firstConnectionResult;
if (firstResult) { if (firstResult) {
firstConnectionResult = null; firstConnectionResult = null;
if (firstResult.State !== 'SignedIn' && !route.anonymous) { if (firstResult.State !== 'SignedIn' && !route.anonymous) {
handleConnectionResult(firstResult); handleConnectionResult(firstResult);
return; return;
} }
@ -352,7 +339,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
} }
if (apiClient && apiClient.isLoggedIn()) { if (apiClient && apiClient.isLoggedIn()) {
console.debug('appRouter - user is authenticated'); console.debug('appRouter - user is authenticated');
if (route.isDefaultRoute) { if (route.isDefaultRoute) {
@ -360,11 +346,8 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
loadUserSkinWithOptions(ctx); loadUserSkinWithOptions(ctx);
return; return;
} else if (route.roles) { } else if (route.roles) {
validateRoles(apiClient, route.roles).then(function () { validateRoles(apiClient, route.roles).then(function () {
callback(); callback();
}, beginConnectionWizard); }, beginConnectionWizard);
return; return;
} }
@ -406,7 +389,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
var isDummyBackToHome; var isDummyBackToHome;
function loadContent(ctx, route, html, request) { function loadContent(ctx, route, html, request) {
html = globalize.translateHtml(html, route.dictionary); html = globalize.translateHtml(html, route.dictionary);
request.view = html; request.view = html;
@ -466,7 +448,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
} }
function getWindowLocationSearch(win) { function getWindowLocationSearch(win) {
var currentPath = currentRouteInfo ? (currentRouteInfo.path || '') : ''; var currentPath = currentRouteInfo ? (currentRouteInfo.path || '') : '';
var index = currentPath.indexOf('?'); var index = currentPath.indexOf('?');
@ -617,7 +598,6 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
function pushState(state, title, url) { function pushState(state, title, url) {
state.navigate = false; state.navigate = false;
history.pushState(state, title, url); history.pushState(state, title, url);
} }
function setBaseRoute() { function setBaseRoute() {

View file

@ -291,12 +291,10 @@ import 'programStyles';
const primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items); const primaryImageAspectRatio = imageLoader.getPrimaryImageAspectRatio(items);
if (['auto', 'autohome', 'autooverflow', 'autoVertical'].includes(options.shape)) { if (['auto', 'autohome', 'autooverflow', 'autoVertical'].includes(options.shape)) {
const requestedShape = options.shape; const requestedShape = options.shape;
options.shape = null; options.shape = null;
if (primaryImageAspectRatio) { if (primaryImageAspectRatio) {
if (primaryImageAspectRatio >= 3) { if (primaryImageAspectRatio >= 3) {
options.shape = 'banner'; options.shape = 'banner';
options.coverImage = true; options.coverImage = true;
@ -394,7 +392,6 @@ import 'programStyles';
} }
if (newIndexValue !== currentIndexValue) { if (newIndexValue !== currentIndexValue) {
if (hasOpenRow) { if (hasOpenRow) {
html += '</div>'; html += '</div>';
hasOpenRow = false; hasOpenRow = false;
@ -402,7 +399,6 @@ import 'programStyles';
} }
if (hasOpenSection) { if (hasOpenSection) {
html += '</div>'; html += '</div>';
if (isVertical) { if (isVertical) {
@ -426,7 +422,6 @@ import 'programStyles';
} }
if (options.rows && itemsInRow === 0) { if (options.rows && itemsInRow === 0) {
if (hasOpenRow) { if (hasOpenRow) {
html += '</div>'; html += '</div>';
hasOpenRow = false; hasOpenRow = false;
@ -686,7 +681,6 @@ import 'programStyles';
let valid = 0; let valid = 0;
for (let i = 0; i < lines.length; i++) { for (let i = 0; i < lines.length; i++) {
let currentCssClass = cssClass; let currentCssClass = cssClass;
let text = lines[i]; let text = lines[i];
@ -713,7 +707,6 @@ import 'programStyles';
} }
if (forceLines) { if (forceLines) {
let linesLength = maxLines || Math.min(lines.length, maxLines || lines.length); let linesLength = maxLines || Math.min(lines.length, maxLines || lines.length);
while (valid < linesLength) { while (valid < linesLength) {
@ -745,7 +738,6 @@ import 'programStyles';
let airTimeText = ''; let airTimeText = '';
if (item.StartDate) { if (item.StartDate) {
try { try {
let date = datetime.parseISO8601Date(item.StartDate); let date = datetime.parseISO8601Date(item.StartDate);
@ -792,7 +784,6 @@ import 'programStyles';
const showOtherText = isOuterFooter ? !overlayText : overlayText; const showOtherText = isOuterFooter ? !overlayText : overlayText;
if (isOuterFooter && options.cardLayout && layoutManager.mobile) { if (isOuterFooter && options.cardLayout && layoutManager.mobile) {
if (options.cardFooterAside !== 'none') { if (options.cardFooterAside !== 'none') {
html += '<button is="paper-icon-button-light" class="itemAction btnCardOptions cardText-secondary" data-action="menu"><span class="material-icons more_vert"></span></button>'; html += '<button is="paper-icon-button-light" class="itemAction btnCardOptions cardText-secondary" data-action="menu"><span class="material-icons more_vert"></span></button>';
} }
@ -807,9 +798,7 @@ import 'programStyles';
if (showOtherText) { if (showOtherText) {
if ((options.showParentTitle || options.showParentTitleOrTitle) && !parentTitleUnderneath) { if ((options.showParentTitle || options.showParentTitleOrTitle) && !parentTitleUnderneath) {
if (isOuterFooter && item.Type === 'Episode' && item.SeriesName) { if (isOuterFooter && item.Type === 'Episode' && item.SeriesName) {
if (item.SeriesId) { if (item.SeriesId) {
lines.push(getTextActionButton({ lines.push(getTextActionButton({
Id: item.SeriesId, Id: item.SeriesId,
@ -822,15 +811,12 @@ import 'programStyles';
lines.push(item.SeriesName); lines.push(item.SeriesName);
} }
} else { } else {
if (isUsingLiveTvNaming(item)) { if (isUsingLiveTvNaming(item)) {
lines.push(item.Name); lines.push(item.Name);
if (!item.EpisodeTitle) { if (!item.EpisodeTitle) {
titleAdded = true; titleAdded = true;
} }
} else { } else {
const parentTitle = item.SeriesName || item.Series || item.Album || item.AlbumArtist || ''; const parentTitle = item.SeriesName || item.Series || item.Album || item.AlbumArtist || '';
@ -848,7 +834,6 @@ import 'programStyles';
} }
if (showMediaTitle) { if (showMediaTitle) {
const name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, { const name = options.showTitle === 'auto' && !item.IsFolder && item.MediaType === 'Photo' ? '' : itemHelper.getDisplayName(item, {
includeParentInfo: options.includeParentInfoInTitle includeParentInfo: options.includeParentInfoInTitle
}); });
@ -865,7 +850,6 @@ import 'programStyles';
if (showOtherText) { if (showOtherText) {
if (options.showParentTitle && parentTitleUnderneath) { if (options.showParentTitle && parentTitleUnderneath) {
if (isOuterFooter && item.AlbumArtists && item.AlbumArtists.length) { if (isOuterFooter && item.AlbumArtists && item.AlbumArtists.length) {
item.AlbumArtists[0].Type = 'MusicArtist'; item.AlbumArtists[0].Type = 'MusicArtist';
item.AlbumArtists[0].IsFolder = true; item.AlbumArtists[0].IsFolder = true;
@ -899,7 +883,6 @@ import 'programStyles';
} }
if (options.showPremiereDate) { if (options.showPremiereDate) {
if (item.PremiereDate) { if (item.PremiereDate) {
try { try {
lines.push(datetime.toLocaleDateString( lines.push(datetime.toLocaleDateString(
@ -908,7 +891,6 @@ import 'programStyles';
)); ));
} catch (err) { } catch (err) {
lines.push(''); lines.push('');
} }
} else { } else {
lines.push(''); lines.push('');
@ -916,14 +898,10 @@ import 'programStyles';
} }
if (options.showYear || options.showSeriesYear) { if (options.showYear || options.showSeriesYear) {
if (item.Type === 'Series') { if (item.Type === 'Series') {
if (item.Status === 'Continuing') { if (item.Status === 'Continuing') {
lines.push(globalize.translate('SeriesYearToPresent', item.ProductionYear || '')); lines.push(globalize.translate('SeriesYearToPresent', item.ProductionYear || ''));
} else { } else {
if (item.EndDate && item.ProductionYear) { if (item.EndDate && item.ProductionYear) {
const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear();
lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear))); lines.push(item.ProductionYear + ((endYear === item.ProductionYear) ? '' : (' - ' + endYear)));
@ -937,9 +915,7 @@ import 'programStyles';
} }
if (options.showRuntime) { if (options.showRuntime) {
if (item.RunTimeTicks) { if (item.RunTimeTicks) {
lines.push(datetime.getDisplayRunningTime(item.RunTimeTicks)); lines.push(datetime.getDisplayRunningTime(item.RunTimeTicks));
} else { } else {
lines.push(''); lines.push('');
@ -947,14 +923,11 @@ import 'programStyles';
} }
if (options.showAirTime) { if (options.showAirTime) {
lines.push(getAirTimeText(item, options.showAirDateTime, options.showAirEndTime) || ''); lines.push(getAirTimeText(item, options.showAirDateTime, options.showAirEndTime) || '');
} }
if (options.showChannelName) { if (options.showChannelName) {
if (item.ChannelId) { if (item.ChannelId) {
lines.push(getTextActionButton({ lines.push(getTextActionButton({
Id: item.ChannelId, Id: item.ChannelId,
@ -971,7 +944,6 @@ import 'programStyles';
} }
if (options.showCurrentProgram && item.Type === 'TvChannel') { if (options.showCurrentProgram && item.Type === 'TvChannel') {
if (item.CurrentProgram) { if (item.CurrentProgram) {
lines.push(item.CurrentProgram.Name); lines.push(item.CurrentProgram.Name);
} else { } else {
@ -980,7 +952,6 @@ import 'programStyles';
} }
if (options.showCurrentProgramTime && item.Type === 'TvChannel') { if (options.showCurrentProgramTime && item.Type === 'TvChannel') {
if (item.CurrentProgram) { if (item.CurrentProgram) {
lines.push(getAirTimeText(item.CurrentProgram, false, true) || ''); lines.push(getAirTimeText(item.CurrentProgram, false, true) || '');
} else { } else {
@ -990,7 +961,6 @@ import 'programStyles';
if (options.showSeriesTimerTime) { if (options.showSeriesTimerTime) {
if (item.RecordAnyTime) { if (item.RecordAnyTime) {
lines.push(globalize.translate('Anytime')); lines.push(globalize.translate('Anytime'));
} else { } else {
lines.push(datetime.getDisplayTime(item.StartDate)); lines.push(datetime.getDisplayTime(item.StartDate));
@ -1025,7 +995,6 @@ import 'programStyles';
} }
if (html) { if (html) {
if (!isOuterFooter || logoUrl || options.cardLayout) { if (!isOuterFooter || logoUrl || options.cardLayout) {
html = '<div class="' + footerClass + '">' + html; html = '<div class="' + footerClass + '">' + html;
@ -1071,27 +1040,21 @@ import 'programStyles';
let childText; let childText;
if (item.Type === 'Playlist') { if (item.Type === 'Playlist') {
childText = ''; childText = '';
if (item.RunTimeTicks) { if (item.RunTimeTicks) {
let minutes = item.RunTimeTicks / 600000000; let minutes = item.RunTimeTicks / 600000000;
minutes = minutes || 1; minutes = minutes || 1;
childText += globalize.translate('ValueMinutes', Math.round(minutes)); childText += globalize.translate('ValueMinutes', Math.round(minutes));
} else { } else {
childText += globalize.translate('ValueMinutes', 0); childText += globalize.translate('ValueMinutes', 0);
} }
counts.push(childText); counts.push(childText);
} else if (item.Type === 'Genre' || item.Type === 'Studio') { } else if (item.Type === 'Genre' || item.Type === 'Studio') {
if (item.MovieCount) { if (item.MovieCount) {
childText = item.MovieCount === 1 ? childText = item.MovieCount === 1 ?
globalize.translate('ValueOneMovie') : globalize.translate('ValueOneMovie') :
globalize.translate('ValueMovieCount', item.MovieCount); globalize.translate('ValueMovieCount', item.MovieCount);
@ -1100,7 +1063,6 @@ import 'programStyles';
} }
if (item.SeriesCount) { if (item.SeriesCount) {
childText = item.SeriesCount === 1 ? childText = item.SeriesCount === 1 ?
globalize.translate('ValueOneSeries') : globalize.translate('ValueOneSeries') :
globalize.translate('ValueSeriesCount', item.SeriesCount); globalize.translate('ValueSeriesCount', item.SeriesCount);
@ -1108,18 +1070,14 @@ import 'programStyles';
counts.push(childText); counts.push(childText);
} }
if (item.EpisodeCount) { if (item.EpisodeCount) {
childText = item.EpisodeCount === 1 ? childText = item.EpisodeCount === 1 ?
globalize.translate('ValueOneEpisode') : globalize.translate('ValueOneEpisode') :
globalize.translate('ValueEpisodeCount', item.EpisodeCount); globalize.translate('ValueEpisodeCount', item.EpisodeCount);
counts.push(childText); counts.push(childText);
} }
} else if (item.Type === 'MusicGenre' || options.context === 'MusicArtist') { } else if (item.Type === 'MusicGenre' || options.context === 'MusicArtist') {
if (item.AlbumCount) { if (item.AlbumCount) {
childText = item.AlbumCount === 1 ? childText = item.AlbumCount === 1 ?
globalize.translate('ValueOneAlbum') : globalize.translate('ValueOneAlbum') :
globalize.translate('ValueAlbumCount', item.AlbumCount); globalize.translate('ValueAlbumCount', item.AlbumCount);
@ -1127,7 +1085,6 @@ import 'programStyles';
counts.push(childText); counts.push(childText);
} }
if (item.SongCount) { if (item.SongCount) {
childText = item.SongCount === 1 ? childText = item.SongCount === 1 ?
globalize.translate('ValueOneSong') : globalize.translate('ValueOneSong') :
globalize.translate('ValueSongCount', item.SongCount); globalize.translate('ValueSongCount', item.SongCount);
@ -1135,16 +1092,13 @@ import 'programStyles';
counts.push(childText); counts.push(childText);
} }
if (item.MusicVideoCount) { if (item.MusicVideoCount) {
childText = item.MusicVideoCount === 1 ? childText = item.MusicVideoCount === 1 ?
globalize.translate('ValueOneMusicVideo') : globalize.translate('ValueOneMusicVideo') :
globalize.translate('ValueMusicVideoCount', item.MusicVideoCount); globalize.translate('ValueMusicVideoCount', item.MusicVideoCount);
counts.push(childText); counts.push(childText);
} }
} else if (item.Type === 'Series') { } else if (item.Type === 'Series') {
childText = item.RecursiveItemCount === 1 ? childText = item.RecursiveItemCount === 1 ?
globalize.translate('ValueOneEpisode') : globalize.translate('ValueOneEpisode') :
globalize.translate('ValueEpisodeCount', item.RecursiveItemCount); globalize.translate('ValueEpisodeCount', item.RecursiveItemCount);
@ -1198,13 +1152,11 @@ import 'programStyles';
let shape = options.shape; let shape = options.shape;
if (shape === 'mixed') { if (shape === 'mixed') {
shape = null; shape = null;
const primaryImageAspectRatio = item.PrimaryImageAspectRatio; const primaryImageAspectRatio = item.PrimaryImageAspectRatio;
if (primaryImageAspectRatio) { if (primaryImageAspectRatio) {
if (primaryImageAspectRatio >= 1.33) { if (primaryImageAspectRatio >= 1.33) {
shape = 'mixedBackdrop'; shape = 'mixedBackdrop';
} else if (primaryImageAspectRatio > 0.71) { } else if (primaryImageAspectRatio > 0.71) {
@ -1296,7 +1248,6 @@ import 'programStyles';
} }
if (overlayText) { if (overlayText) {
logoUrl = null; logoUrl = null;
footerCssClass = progressHtml ? 'innerCardFooter fullInnerCardFooter' : 'innerCardFooter'; footerCssClass = progressHtml ? 'innerCardFooter fullInnerCardFooter' : 'innerCardFooter';
@ -1405,7 +1356,6 @@ import 'programStyles';
indicatorsHtml += indicators.getTypeIndicator(item); indicatorsHtml += indicators.getTypeIndicator(item);
if (options.showGroupCount) { if (options.showGroupCount) {
indicatorsHtml += indicators.getChildCountIndicatorHtml(item, { indicatorsHtml += indicators.getChildCountIndicatorHtml(item, {
minCount: 1 minCount: 1
}); });
@ -1505,7 +1455,6 @@ import 'programStyles';
} }
if (itemHelper.canRate(item)) { if (itemHelper.canRate(item)) {
const likes = userData.Likes == null ? '' : userData.Likes; const likes = userData.Likes == null ? '' : userData.Likes;
/* eslint-disable-next-line no-unused-expressions */ /* eslint-disable-next-line no-unused-expressions */
@ -1586,7 +1535,6 @@ import 'programStyles';
const html = buildCardsHtmlInternal(items, options); const html = buildCardsHtmlInternal(items, options);
if (html) { if (html) {
if (options.itemsContainer.cardBuilderHtml !== html) { if (options.itemsContainer.cardBuilderHtml !== html) {
options.itemsContainer.innerHTML = html; options.itemsContainer.innerHTML = html;
@ -1599,7 +1547,6 @@ import 'programStyles';
imageLoader.lazyChildren(options.itemsContainer); imageLoader.lazyChildren(options.itemsContainer);
} else { } else {
options.itemsContainer.innerHTML = html; options.itemsContainer.innerHTML = html;
options.itemsContainer.cardBuilderHtml = null; options.itemsContainer.cardBuilderHtml = null;
} }
@ -1623,7 +1570,6 @@ import 'programStyles';
indicatorsElem = card.querySelector('.cardIndicators'); indicatorsElem = card.querySelector('.cardIndicators');
if (!indicatorsElem) { if (!indicatorsElem) {
const cardImageContainer = card.querySelector('.cardImageContainer'); const cardImageContainer = card.querySelector('.cardImageContainer');
indicatorsElem = document.createElement('div'); indicatorsElem = document.createElement('div');
indicatorsElem.classList.add('cardIndicators'); indicatorsElem.classList.add('cardIndicators');
@ -1647,11 +1593,9 @@ import 'programStyles';
let itemProgressBar = null; let itemProgressBar = null;
if (userData.Played) { if (userData.Played) {
playedIndicator = card.querySelector('.playedIndicator'); playedIndicator = card.querySelector('.playedIndicator');
if (!playedIndicator) { if (!playedIndicator) {
playedIndicator = document.createElement('div'); playedIndicator = document.createElement('div');
playedIndicator.classList.add('playedIndicator'); playedIndicator.classList.add('playedIndicator');
playedIndicator.classList.add('indicator'); playedIndicator.classList.add('indicator');
@ -1660,10 +1604,8 @@ import 'programStyles';
} }
playedIndicator.innerHTML = '<span class="material-icons indicatorIcon check"></span>'; playedIndicator.innerHTML = '<span class="material-icons indicatorIcon check"></span>';
} else { } else {
playedIndicator = card.querySelector('.playedIndicator'); playedIndicator = card.querySelector('.playedIndicator');
if (playedIndicator) { if (playedIndicator) {
playedIndicator.parentNode.removeChild(playedIndicator); playedIndicator.parentNode.removeChild(playedIndicator);
} }
} }
@ -1671,7 +1613,6 @@ import 'programStyles';
countIndicator = card.querySelector('.countIndicator'); countIndicator = card.querySelector('.countIndicator');
if (!countIndicator) { if (!countIndicator) {
countIndicator = document.createElement('div'); countIndicator = document.createElement('div');
countIndicator.classList.add('countIndicator'); countIndicator.classList.add('countIndicator');
indicatorsElem = ensureIndicators(card, indicatorsElem); indicatorsElem = ensureIndicators(card, indicatorsElem);
@ -1679,10 +1620,8 @@ import 'programStyles';
} }
countIndicator.innerHTML = userData.UnplayedItemCount; countIndicator.innerHTML = userData.UnplayedItemCount;
} else if (enableCountIndicator) { } else if (enableCountIndicator) {
countIndicator = card.querySelector('.countIndicator'); countIndicator = card.querySelector('.countIndicator');
if (countIndicator) { if (countIndicator) {
countIndicator.parentNode.removeChild(countIndicator); countIndicator.parentNode.removeChild(countIndicator);
} }
} }
@ -1694,7 +1633,6 @@ import 'programStyles';
}); });
if (progressHtml) { if (progressHtml) {
itemProgressBar = card.querySelector('.itemProgressBar'); itemProgressBar = card.querySelector('.itemProgressBar');
if (!itemProgressBar) { if (!itemProgressBar) {
@ -1713,7 +1651,6 @@ import 'programStyles';
itemProgressBar.innerHTML = progressHtml; itemProgressBar.innerHTML = progressHtml;
} else { } else {
itemProgressBar = card.querySelector('.itemProgressBar'); itemProgressBar = card.querySelector('.itemProgressBar');
if (itemProgressBar) { if (itemProgressBar) {
itemProgressBar.parentNode.removeChild(itemProgressBar); itemProgressBar.parentNode.removeChild(itemProgressBar);

View file

@ -14,7 +14,6 @@ import browser from 'browser';
const enableFocusTransform = !browser.slow && !browser.edge; const enableFocusTransform = !browser.slow && !browser.edge;
function buildChapterCardsHtml(item, chapters, options) { function buildChapterCardsHtml(item, chapters, options) {
// TODO move card creation code to Card component // TODO move card creation code to Card component
let className = 'card itemAction chapterCard'; let className = 'card itemAction chapterCard';
@ -35,7 +34,6 @@ import browser from 'browser';
let shape = (options.backdropShape || 'backdrop'); let shape = (options.backdropShape || 'backdrop');
if (videoStream.Width && videoStream.Height) { if (videoStream.Width && videoStream.Height) {
if ((videoStream.Width / videoStream.Height) <= 1.2) { if ((videoStream.Width / videoStream.Height) <= 1.2) {
shape = (options.squareShape || 'square'); shape = (options.squareShape || 'square');
} }
@ -53,7 +51,6 @@ import browser from 'browser';
const apiClient = connectionManager.getApiClient(item.ServerId); const apiClient = connectionManager.getApiClient(item.ServerId);
for (let i = 0, length = chapters.length; i < length; i++) { for (let i = 0, length = chapters.length; i < length; i++) {
if (options.rows && itemsInRow === 0) { if (options.rows && itemsInRow === 0) {
html += '<div class="cardColumn">'; html += '<div class="cardColumn">';
} }
@ -73,9 +70,7 @@ import browser from 'browser';
} }
function getImgUrl({Id}, {ImageTag}, index, maxWidth, apiClient) { function getImgUrl({Id}, {ImageTag}, index, maxWidth, apiClient) {
if (ImageTag) { if (ImageTag) {
return apiClient.getScaledImageUrl(Id, { return apiClient.getScaledImageUrl(Id, {
maxWidth: maxWidth * 2, maxWidth: maxWidth * 2,
@ -89,7 +84,6 @@ import browser from 'browser';
} }
function buildChapterCard(item, apiClient, chapter, index, {width, coverImage}, className, shape) { function buildChapterCard(item, apiClient, chapter, index, {width, coverImage}, className, shape) {
const imgUrl = getImgUrl(item, chapter, index, width || 400, apiClient); const imgUrl = getImgUrl(item, chapter, index, width || 400, apiClient);
let cardImageContainerClass = 'cardContent cardContent-shadow cardImageContainer chapterCardImageContainer'; let cardImageContainerClass = 'cardContent cardContent-shadow cardImageContainer chapterCardImageContainer';
@ -116,7 +110,6 @@ import browser from 'browser';
} }
export function buildChapterCards(item, chapters, options) { export function buildChapterCards(item, chapters, options) {
if (options.parentContainer) { if (options.parentContainer) {
// Abort if the container has been disposed // Abort if the container has been disposed
if (!document.body.contains(options.parentContainer)) { if (!document.body.contains(options.parentContainer)) {

View file

@ -8,7 +8,6 @@
import cardBuilder from 'cardBuilder'; import cardBuilder from 'cardBuilder';
export function buildPeopleCards(items, options) { export function buildPeopleCards(items, options) {
options = Object.assign(options || {}, { options = Object.assign(options || {}, {
cardLayout: false, cardLayout: false,
centerText: true, centerText: true,

View file

@ -38,7 +38,6 @@ import 'flexStyles';
} }
function createCollection(apiClient, dlg) { function createCollection(apiClient, dlg) {
const url = apiClient.getUrl('Collections', { const url = apiClient.getUrl('Collections', {
Name: dlg.querySelector('#txtNewCollectionName').value, Name: dlg.querySelector('#txtNewCollectionName').value,
@ -52,7 +51,6 @@ import 'flexStyles';
dataType: 'json' dataType: 'json'
}).then(result => { }).then(result => {
loading.hide(); loading.hide();
const id = result.Id; const id = result.Id;
@ -60,17 +58,14 @@ import 'flexStyles';
dlg.submitted = true; dlg.submitted = true;
dialogHelper.close(dlg); dialogHelper.close(dlg);
redirectToCollection(apiClient, id); redirectToCollection(apiClient, id);
}); });
} }
function redirectToCollection(apiClient, id) { function redirectToCollection(apiClient, id) {
appRouter.showItem(id, apiClient.serverId()); appRouter.showItem(id, apiClient.serverId());
} }
function addToCollection(apiClient, dlg, id) { function addToCollection(apiClient, dlg, id) {
const url = apiClient.getUrl(`Collections/${id}/Items`, { const url = apiClient.getUrl(`Collections/${id}/Items`, {
Ids: dlg.querySelector('.fldSelectedItemIds').value || '' Ids: dlg.querySelector('.fldSelectedItemIds').value || ''
@ -81,7 +76,6 @@ import 'flexStyles';
url: url url: url
}).then(() => { }).then(() => {
loading.hide(); loading.hide();
dlg.submitted = true; dlg.submitted = true;
@ -98,7 +92,6 @@ import 'flexStyles';
} }
function populateCollections(panel) { function populateCollections(panel) {
loading.show(); loading.show();
const select = panel.querySelector('#selectCollectionToAddTo'); const select = panel.querySelector('#selectCollectionToAddTo');
@ -115,13 +108,11 @@ import 'flexStyles';
const apiClient = connectionManager.getApiClient(currentServerId); const apiClient = connectionManager.getApiClient(currentServerId);
apiClient.getItems(apiClient.getCurrentUserId(), options).then(result => { apiClient.getItems(apiClient.getCurrentUserId(), options).then(result => {
let html = ''; let html = '';
html += `<option value="">${globalize.translate('OptionNew')}</option>`; html += `<option value="">${globalize.translate('OptionNew')}</option>`;
html += result.Items.map(i => { html += result.Items.map(i => {
return `<option value="${i.Id}">${i.Name}</option>`; return `<option value="${i.Id}">${i.Name}</option>`;
}); });
@ -134,7 +125,6 @@ import 'flexStyles';
} }
function getEditorHtml() { function getEditorHtml() {
let html = ''; let html = '';
html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">'; html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">';
@ -182,7 +172,6 @@ import 'flexStyles';
} }
function initEditor(content, items) { function initEditor(content, items) {
content.querySelector('#selectCollectionToAddTo').addEventListener('change', function () { content.querySelector('#selectCollectionToAddTo').addEventListener('change', function () {
if (this.value) { if (this.value) {
content.querySelector('.newCollectionInfo').classList.add('hide'); content.querySelector('.newCollectionInfo').classList.add('hide');
@ -219,7 +208,6 @@ import 'flexStyles';
export class showEditor { export class showEditor {
constructor(options) { constructor(options) {
const items = options.items || {}; const items = options.items || {};
currentServerId = options.serverId; currentServerId = options.serverId;
@ -256,7 +244,6 @@ import 'flexStyles';
initEditor(dlg, items); initEditor(dlg, items);
dlg.querySelector('.btnCancel').addEventListener('click', () => { dlg.querySelector('.btnCancel').addEventListener('click', () => {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
@ -265,7 +252,6 @@ import 'flexStyles';
} }
return dialogHelper.open(dlg).then(() => { return dialogHelper.open(dlg).then(() => {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false); centerFocus(dlg.querySelector('.formDialogContent'), false, false);
} }

View file

@ -4,7 +4,6 @@ import globalize from 'globalize';
/* eslint-disable indent */ /* eslint-disable indent */
export default (() => { export default (() => {
function replaceAll(str, find, replace) { function replaceAll(str, find, replace) {
return str.split(find).join(replace); return str.split(find).join(replace);
} }

View file

@ -13,7 +13,6 @@ import 'flexStyles';
/* eslint-disable indent */ /* eslint-disable indent */
function showDialog(options, template) { function showDialog(options, template) {
const dialogOptions = { const dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -64,7 +63,6 @@ import 'flexStyles';
let hasDescriptions = false; let hasDescriptions = false;
for (i = 0, length = options.buttons.length; i < length; i++) { for (i = 0, length = options.buttons.length; i < length; i++) {
const item = options.buttons[i]; const item = options.buttons[i];
const autoFocus = i === 0 ? ' autofocus' : ''; const autoFocus = i === 0 ? ' autofocus' : '';
@ -107,7 +105,6 @@ import 'flexStyles';
} }
return dialogHelper.open(dlg).then(() => { return dialogHelper.open(dlg).then(() => {
if (enableTvLayout) { if (enableTvLayout) {
scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false);
} }
@ -121,7 +118,6 @@ import 'flexStyles';
} }
export async function show(text, title) { export async function show(text, title) {
let options; let options;
if (typeof text === 'string') { if (typeof text === 'string') {
options = { options = {

View file

@ -12,7 +12,6 @@ import 'scrollStyles';
let globalOnOpenCallback; let globalOnOpenCallback;
function enableAnimation() { function enableAnimation() {
// too slow // too slow
if (browser.tv) { if (browser.tv) {
return false; return false;
@ -22,7 +21,6 @@ import 'scrollStyles';
} }
function removeCenterFocus(dlg) { function removeCenterFocus(dlg) {
if (layoutManager.tv) { if (layoutManager.tv) {
if (dlg.classList.contains('scrollX')) { if (dlg.classList.contains('scrollX')) {
centerFocus(dlg, true, false); centerFocus(dlg, true, false);
@ -35,7 +33,6 @@ import 'scrollStyles';
function tryRemoveElement(elem) { function tryRemoveElement(elem) {
const parentNode = elem.parentNode; const parentNode = elem.parentNode;
if (parentNode) { if (parentNode) {
// Seeing crashes in edge webview // Seeing crashes in edge webview
try { try {
parentNode.removeChild(elem); parentNode.removeChild(elem);
@ -46,14 +43,12 @@ import 'scrollStyles';
} }
function DialogHashHandler(dlg, hash, resolve) { function DialogHashHandler(dlg, hash, resolve) {
const self = this; const self = this;
self.originalUrl = window.location.href; self.originalUrl = window.location.href;
const activeElement = document.activeElement; const activeElement = document.activeElement;
let removeScrollLockOnClose = false; let removeScrollLockOnClose = false;
function onHashChange(e) { function onHashChange(e) {
const isBack = self.originalUrl === window.location.href; const isBack = self.originalUrl === window.location.href;
if (isBack || !isOpened(dlg)) { if (isBack || !isOpened(dlg)) {
@ -67,7 +62,6 @@ import 'scrollStyles';
} }
function onBackCommand(e) { function onBackCommand(e) {
if (e.detail.command === 'back') { if (e.detail.command === 'back') {
self.closedByBack = true; self.closedByBack = true;
e.preventDefault(); e.preventDefault();
@ -77,7 +71,6 @@ import 'scrollStyles';
} }
function onDialogClosed() { function onDialogClosed() {
if (!isHistoryEnabled(dlg)) { if (!isHistoryEnabled(dlg)) {
inputManager.off(dlg, onBackCommand); inputManager.off(dlg, onBackCommand);
} }
@ -158,7 +151,6 @@ import 'scrollStyles';
} }
function addBackdropOverlay(dlg) { function addBackdropOverlay(dlg) {
const backdrop = document.createElement('div'); const backdrop = document.createElement('div');
backdrop.classList.add('dialogBackdrop'); backdrop.classList.add('dialogBackdrop');
@ -193,7 +185,6 @@ import 'scrollStyles';
} }
export function open(dlg) { export function open(dlg) {
if (globalOnOpenCallback) { if (globalOnOpenCallback) {
globalOnOpenCallback(dlg); globalOnOpenCallback(dlg);
} }
@ -210,19 +201,16 @@ import 'scrollStyles';
document.body.appendChild(dialogContainer); document.body.appendChild(dialogContainer);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
new DialogHashHandler(dlg, `dlg${new Date().getTime()}`, resolve); new DialogHashHandler(dlg, `dlg${new Date().getTime()}`, resolve);
}); });
} }
function isOpened(dlg) { function isOpened(dlg) {
//return dlg.opened; //return dlg.opened;
return !dlg.classList.contains('hide'); return !dlg.classList.contains('hide');
} }
export function close(dlg) { export function close(dlg) {
if (isOpened(dlg)) { if (isOpened(dlg)) {
if (isHistoryEnabled(dlg)) { if (isHistoryEnabled(dlg)) {
history.back(); history.back();
@ -233,9 +221,7 @@ import 'scrollStyles';
} }
function closeDialog(dlg) { function closeDialog(dlg) {
if (!dlg.classList.contains('hide')) { if (!dlg.classList.contains('hide')) {
dlg.dispatchEvent(new CustomEvent('closing', { dlg.dispatchEvent(new CustomEvent('closing', {
bubbles: false, bubbles: false,
cancelable: false cancelable: false
@ -256,7 +242,6 @@ import 'scrollStyles';
} }
function animateDialogOpen(dlg) { function animateDialogOpen(dlg) {
const onAnimationFinish = () => { const onAnimationFinish = () => {
focusManager.pushScope(dlg); focusManager.pushScope(dlg);
@ -271,7 +256,6 @@ import 'scrollStyles';
}; };
if (enableAnimation()) { if (enableAnimation()) {
const onFinish = () => { const onFinish = () => {
dom.removeEventListener(dlg, dom.whichAnimationEvent(), onFinish, { dom.removeEventListener(dlg, dom.whichAnimationEvent(), onFinish, {
once: true once: true
@ -288,13 +272,10 @@ import 'scrollStyles';
} }
function animateDialogClose(dlg, onAnimationFinish) { function animateDialogClose(dlg, onAnimationFinish) {
if (enableAnimation()) { if (enableAnimation()) {
let animated = true; let animated = true;
switch (dlg.animationConfig.exit.name) { switch (dlg.animationConfig.exit.name) {
case 'fadeout': case 'fadeout':
dlg.style.animation = `fadeout ${dlg.animationConfig.exit.timing.duration}ms ease-out normal both`; dlg.style.animation = `fadeout ${dlg.animationConfig.exit.timing.duration}ms ease-out normal both`;
break; break;
@ -329,7 +310,6 @@ import 'scrollStyles';
const supportsOverscrollBehavior = 'overscroll-behavior-y' in document.body.style; const supportsOverscrollBehavior = 'overscroll-behavior-y' in document.body.style;
function shouldLockDocumentScroll(options) { function shouldLockDocumentScroll(options) {
if (supportsOverscrollBehavior && (options.size || !browser.touch)) { if (supportsOverscrollBehavior && (options.size || !browser.touch)) {
return false; return false;
} }
@ -350,7 +330,6 @@ import 'scrollStyles';
} }
function removeBackdrop(dlg) { function removeBackdrop(dlg) {
const backdrop = dlg.backdrop; const backdrop = dlg.backdrop;
if (!backdrop) { if (!backdrop) {
@ -364,7 +343,6 @@ import 'scrollStyles';
}; };
if (enableAnimation()) { if (enableAnimation()) {
backdrop.classList.remove('dialogBackdropOpened'); backdrop.classList.remove('dialogBackdropOpened');
// this is not firing animatonend // this is not firing animatonend
@ -383,7 +361,6 @@ import 'scrollStyles';
} }
export function createDialog(options) { export function createDialog(options) {
options = options || {}; options = options || {};
// If there's no native dialog support, use a plain div // If there's no native dialog support, use a plain div
@ -473,9 +450,7 @@ import 'scrollStyles';
} }
if (enableAnimation()) { if (enableAnimation()) {
switch (dlg.animationConfig.entry.name) { switch (dlg.animationConfig.entry.name) {
case 'fadein': case 'fadein':
dlg.style.animation = `fadein ${entryAnimationDuration}ms ease-out normal`; dlg.style.animation = `fadein ${entryAnimationDuration}ms ease-out normal`;
break; break;

View file

@ -55,7 +55,6 @@ import 'emby-button';
} }
function loadSoundEffects(context, userSettings) { function loadSoundEffects(context, userSettings) {
const selectSoundEffects = context.querySelector('.selectSoundEffects'); const selectSoundEffects = context.querySelector('.selectSoundEffects');
const options = pluginManager.ofType('soundeffects').map(plugin => { const options = pluginManager.ofType('soundeffects').map(plugin => {
return { return {
@ -81,7 +80,6 @@ import 'emby-button';
} }
function loadSkins(context, userSettings) { function loadSkins(context, userSettings) {
const selectSkin = context.querySelector('.selectSkin'); const selectSkin = context.querySelector('.selectSkin');
const options = pluginManager.ofType('skin').map(plugin => { const options = pluginManager.ofType('skin').map(plugin => {
@ -108,7 +106,6 @@ import 'emby-button';
} }
function showOrHideMissingEpisodesField(context) { function showOrHideMissingEpisodesField(context) {
if (browser.tizen || browser.web0s) { if (browser.tizen || browser.web0s) {
context.querySelector('.fldDisplayMissingEpisodes').classList.add('hide'); context.querySelector('.fldDisplayMissingEpisodes').classList.add('hide');
return; return;
@ -118,7 +115,6 @@ import 'emby-button';
} }
function loadForm(context, user, userSettings) { function loadForm(context, user, userSettings) {
if (user.Policy.IsAdministrator) { if (user.Policy.IsAdministrator) {
context.querySelector('.selectDashboardThemeContainer').classList.remove('hide'); context.querySelector('.selectDashboardThemeContainer').classList.remove('hide');
} else { } else {
@ -213,7 +209,6 @@ import 'emby-button';
} }
function saveUser(context, user, userSettingsInstance, apiClient) { function saveUser(context, user, userSettingsInstance, apiClient) {
appSettings.runAtStartup(context.querySelector('.chkRunAtStartup').checked); appSettings.runAtStartup(context.querySelector('.chkRunAtStartup').checked);
user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked; user.Configuration.DisplayMissingEpisodes = context.querySelector('.chkDisplayMissingEpisodes').checked;

View file

@ -1,6 +1,5 @@
/* eslint-disable indent */ /* eslint-disable indent */
export function getFetchPromise(request) { export function getFetchPromise(request) {
const headers = request.headers || {}; const headers = request.headers || {};
if (request.dataType === 'json') { if (request.dataType === 'json') {
@ -16,7 +15,6 @@
let contentType = request.contentType; let contentType = request.contentType;
if (request.data) { if (request.data) {
if (typeof request.data === 'string') { if (typeof request.data === 'string') {
fetchRequest.body = request.data; fetchRequest.body = request.data;
} else { } else {
@ -27,7 +25,6 @@
} }
if (contentType) { if (contentType) {
headers['Content-Type'] = contentType; headers['Content-Type'] = contentType;
} }
@ -48,11 +45,9 @@
} }
function fetchWithTimeout(url, options, timeoutMs) { function fetchWithTimeout(url, options, timeoutMs) {
console.debug(`fetchWithTimeout: timeoutMs: ${timeoutMs}, url: ${url}`); console.debug(`fetchWithTimeout: timeoutMs: ${timeoutMs}, url: ${url}`);
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
const timeout = setTimeout(reject, timeoutMs); const timeout = setTimeout(reject, timeoutMs);
options = options || {}; options = options || {};
@ -65,7 +60,6 @@
resolve(response); resolve(response);
}, function (error) { }, function (error) {
clearTimeout(timeout); clearTimeout(timeout);
console.debug(`fetchWithTimeout: timed out connecting to url: ${url}`); console.debug(`fetchWithTimeout: timed out connecting to url: ${url}`);

View file

@ -2,19 +2,15 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
'use strict'; 'use strict';
function onSubmit(e) { function onSubmit(e) {
e.preventDefault(); e.preventDefault();
return false; return false;
} }
function renderOptions(context, selector, cssClass, items, isCheckedFn) { function renderOptions(context, selector, cssClass, items, isCheckedFn) {
var elem = context.querySelector(selector); var elem = context.querySelector(selector);
if (items.length) { if (items.length) {
elem.classList.remove('hide'); elem.classList.remove('hide');
} else { } else {
elem.classList.add('hide'); elem.classList.add('hide');
} }
@ -22,7 +18,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
var html = ''; var html = '';
html += items.map(function (filter) { html += items.map(function (filter) {
var itemHtml = ''; var itemHtml = '';
var checkedHtml = isCheckedFn(filter) ? ' checked' : ''; var checkedHtml = isCheckedFn(filter) ? ' checked' : '';
@ -32,7 +27,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
itemHtml += '</label>'; itemHtml += '</label>';
return itemHtml; return itemHtml;
}).join(''); }).join('');
elem.querySelector('.filterOptions').innerHTML = html; elem.querySelector('.filterOptions').innerHTML = html;
@ -47,7 +41,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
function loadDynamicFilters(context, options) { function loadDynamicFilters(context, options) {
var apiClient = connectionManager.getApiClient(options.serverId); var apiClient = connectionManager.getApiClient(options.serverId);
var filterMenuOptions = Object.assign(options.filterMenuOptions, { var filterMenuOptions = Object.assign(options.filterMenuOptions, {
@ -63,7 +56,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
function initEditor(context, settings) { function initEditor(context, settings) {
context.querySelector('form').addEventListener('submit', onSubmit); context.querySelector('form').addEventListener('submit', onSubmit);
var elems = context.querySelectorAll('.simpleFilter'); var elems = context.querySelectorAll('.simpleFilter');
@ -71,7 +63,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
var length; var length;
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
if (elems[i].tagName === 'INPUT') { if (elems[i].tagName === 'INPUT') {
elems[i].checked = settings[elems[i].getAttribute('data-settingname')] || false; elems[i].checked = settings[elems[i].getAttribute('data-settingname')] || false;
} else { } else {
@ -83,7 +74,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
elems = context.querySelectorAll('.chkVideoTypeFilter'); elems = context.querySelectorAll('.chkVideoTypeFilter');
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
elems[i].checked = videoTypes.indexOf(elems[i].getAttribute('data-filter')) !== -1; elems[i].checked = videoTypes.indexOf(elems[i].getAttribute('data-filter')) !== -1;
} }
@ -91,7 +81,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
elems = context.querySelectorAll('.chkSeriesStatus'); elems = context.querySelectorAll('.chkSeriesStatus');
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
elems[i].checked = seriesStatuses.indexOf(elems[i].getAttribute('data-filter')) !== -1; elems[i].checked = seriesStatuses.indexOf(elems[i].getAttribute('data-filter')) !== -1;
} }
@ -109,12 +98,10 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
function saveValues(context, settings, settingsKey) { function saveValues(context, settings, settingsKey) {
var elems = context.querySelectorAll('.simpleFilter'); var elems = context.querySelectorAll('.simpleFilter');
var i; var i;
var length; var length;
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
if (elems[i].tagName === 'INPUT') { if (elems[i].tagName === 'INPUT') {
setBasicFilter(context, settingsKey + '-filter-' + elems[i].getAttribute('data-settingname'), elems[i]); setBasicFilter(context, settingsKey + '-filter-' + elems[i].getAttribute('data-settingname'), elems[i]);
} else { } else {
@ -127,7 +114,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
elems = context.querySelectorAll('.chkVideoTypeFilter'); elems = context.querySelectorAll('.chkVideoTypeFilter');
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
if (elems[i].checked) { if (elems[i].checked) {
videoTypes.push(elems[i].getAttribute('data-filter')); videoTypes.push(elems[i].getAttribute('data-filter'));
} }
@ -139,7 +125,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
elems = context.querySelectorAll('.chkSeriesStatus'); elems = context.querySelectorAll('.chkSeriesStatus');
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
if (elems[i].checked) { if (elems[i].checked) {
seriesStatuses.push(elems[i].getAttribute('data-filter')); seriesStatuses.push(elems[i].getAttribute('data-filter'));
} }
@ -150,7 +135,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
elems = context.querySelectorAll('.chkGenreFilter'); elems = context.querySelectorAll('.chkGenreFilter');
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
if (elems[i].checked) { if (elems[i].checked) {
genres.push(elems[i].getAttribute('data-filter')); genres.push(elems[i].getAttribute('data-filter'));
} }
@ -159,7 +143,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
function setBasicFilter(context, key, elem) { function setBasicFilter(context, key, elem) {
var value = elem.checked; var value = elem.checked;
value = value ? value : null; value = value ? value : null;
userSettings.setFilter(key, value); userSettings.setFilter(key, value);
@ -173,7 +156,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
function moveCheckboxFocus(elem, offset) { function moveCheckboxFocus(elem, offset) {
var parent = dom.parentWithClass(elem, 'checkboxList-verticalwrap'); var parent = dom.parentWithClass(elem, 'checkboxList-verticalwrap');
var elems = focusManager.getFocusableElements(parent); var elems = focusManager.getFocusableElements(parent);
@ -198,7 +180,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
function onInputCommand(e) { function onInputCommand(e) {
switch (e.detail.command) { switch (e.detail.command) {
case 'left': case 'left':
moveCheckboxFocus(e.target, -1); moveCheckboxFocus(e.target, -1);
e.preventDefault(); e.preventDefault();
@ -217,7 +198,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
function bindCheckboxInput(context, on) { function bindCheckboxInput(context, on) {
var elems = context.querySelectorAll('.checkboxList-verticalwrap'); var elems = context.querySelectorAll('.checkboxList-verticalwrap');
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
if (on) { if (on) {
@ -229,11 +209,8 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
FilterMenu.prototype.show = function (options) { FilterMenu.prototype.show = function (options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['text!./filtermenu.template.html'], function (template) { require(['text!./filtermenu.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -276,7 +253,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
bindCheckboxInput(dlg, true); bindCheckboxInput(dlg, true);
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
@ -291,7 +267,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
}, true); }, true);
dialogHelper.open(dlg).then(function () { dialogHelper.open(dlg).then(function () {
bindCheckboxInput(dlg, false); bindCheckboxInput(dlg, false);
if (layoutManager.tv) { if (layoutManager.tv) {
@ -299,7 +274,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'apphost',
} }
if (submitted) { if (submitted) {
//if (!options.onChange) { //if (!options.onChange) {
saveValues(dlg, options.settings, options.settingsKey); saveValues(dlg, options.settings, options.settingsKey);
resolve(); resolve();

View file

@ -7,14 +7,12 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function popScope(elem) { function popScope(elem) {
if (scopes.length) { if (scopes.length) {
scopes.length -= 1; scopes.length -= 1;
} }
} }
function autoFocus(view, defaultToFirst, findAutoFocusElement) { function autoFocus(view, defaultToFirst, findAutoFocusElement) {
var element; var element;
if (findAutoFocusElement !== false) { if (findAutoFocusElement !== false) {
element = view.querySelector('*[autofocus]'); element = view.querySelector('*[autofocus]');
@ -37,7 +35,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function focus(element) { function focus(element) {
try { try {
element.focus({ element.focus({
preventScroll: scrollManager.isEnabled() preventScroll: scrollManager.isEnabled()
@ -50,16 +47,13 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
var focusableTagNames = ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON', 'A']; var focusableTagNames = ['INPUT', 'TEXTAREA', 'SELECT', 'BUTTON', 'A'];
var focusableContainerTagNames = ['BODY', 'DIALOG']; var focusableContainerTagNames = ['BODY', 'DIALOG'];
var focusableQuery = focusableTagNames.map(function (t) { var focusableQuery = focusableTagNames.map(function (t) {
if (t === 'INPUT') { if (t === 'INPUT') {
t += ':not([type="range"]):not([type="file"])'; t += ':not([type="range"]):not([type="file"])';
} }
return t + ':not([tabindex="-1"]):not(:disabled)'; return t + ':not([tabindex="-1"]):not(:disabled)';
}).join(',') + ',.focusable'; }).join(',') + ',.focusable';
function isFocusable(elem) { function isFocusable(elem) {
if (focusableTagNames.indexOf(elem.tagName) !== -1) { if (focusableTagNames.indexOf(elem.tagName) !== -1) {
return true; return true;
} }
@ -83,7 +77,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function focusableParent(elem) { function focusableParent(elem) {
var originalElement = elem; var originalElement = elem;
while (!isFocusable(elem)) { while (!isFocusable(elem)) {
@ -101,7 +94,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
// Determines if a focusable element can be focused at a given point in time // Determines if a focusable element can be focused at a given point in time
function isCurrentlyFocusableInternal(elem) { function isCurrentlyFocusableInternal(elem) {
// http://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom // http://stackoverflow.com/questions/19669786/check-if-element-is-visible-in-dom
if (elem.offsetParent === null) { if (elem.offsetParent === null) {
return false; return false;
@ -112,7 +104,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
// Determines if a focusable element can be focused at a given point in time // Determines if a focusable element can be focused at a given point in time
function isCurrentlyFocusable(elem) { function isCurrentlyFocusable(elem) {
if (elem.disabled) { if (elem.disabled) {
return false; return false;
} }
@ -143,7 +134,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
var focusableElements = []; var focusableElements = [];
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
var elem = elems[i]; var elem = elems[i];
if (excludeClass && elem.classList.contains(excludeClass)) { if (excludeClass && elem.classList.contains(excludeClass)) {
@ -163,7 +153,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function isFocusContainer(elem, direction) { function isFocusContainer(elem, direction) {
if (focusableContainerTagNames.indexOf(elem.tagName) !== -1) { if (focusableContainerTagNames.indexOf(elem.tagName) !== -1) {
return true; return true;
} }
@ -217,7 +206,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function getOffset(elem) { function getOffset(elem) {
var box; var box;
// Support: BlackBerry 5, iOS 3 (original iPhone) // Support: BlackBerry 5, iOS 3 (original iPhone)
@ -234,7 +222,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
if (box.right === null) { if (box.right === null) {
// Create a new object because some browsers will throw an error when trying to set data onto the Rect object // Create a new object because some browsers will throw an error when trying to set data onto the Rect object
var newBox = { var newBox = {
top: box.top, top: box.top,
@ -253,7 +240,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function nav(activeElement, direction, container, focusableElements) { function nav(activeElement, direction, container, focusableElements) {
activeElement = activeElement || document.activeElement; activeElement = activeElement || document.activeElement;
if (activeElement) { if (activeElement) {
@ -305,7 +291,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
switch (direction) { switch (direction) {
case 0: case 0:
// left // left
if (elementRect.left >= rect.left) { if (elementRect.left >= rect.left) {
@ -361,7 +346,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
var distY; var distY;
switch (direction) { switch (direction) {
case 0: case 0:
// left // left
distX = Math.abs(point1x - Math.min(point1x, x2)); distX = Math.abs(point1x - Math.min(point1x, x2));
@ -395,7 +379,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
if (nearestElement) { if (nearestElement) {
// See if there's a focusable container, and if so, send the focus command to that // See if there's a focusable container, and if so, send the focus command to that
if (activeElement) { if (activeElement) {
var nearestElementFocusableParent = dom.parentWithClass(nearestElement, 'focusable'); var nearestElementFocusableParent = dom.parentWithClass(nearestElement, 'focusable');
@ -410,12 +393,10 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function intersectsInternal(a1, a2, b1, b2) { function intersectsInternal(a1, a2, b1, b2) {
return (b1 >= a1 && b1 <= a2) || (b2 >= a1 && b2 <= a2); return (b1 >= a1 && b1 <= a2) || (b2 >= a1 && b2 <= a2);
} }
function intersects(a1, a2, b1, b2) { function intersects(a1, a2, b1, b2) {
return intersectsInternal(a1, a2, b1, b2) || intersectsInternal(b1, b2, a1, a2); return intersectsInternal(a1, a2, b1, b2) || intersectsInternal(b1, b2, a1, a2);
} }
@ -426,11 +407,9 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function focusFirst(container, focusableSelector) { function focusFirst(container, focusableSelector) {
var elems = container.querySelectorAll(focusableSelector); var elems = container.querySelectorAll(focusableSelector);
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
var elem = elems[i]; var elem = elems[i];
if (isCurrentlyFocusableInternal(elem)) { if (isCurrentlyFocusableInternal(elem)) {
@ -441,11 +420,9 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function focusLast(container, focusableSelector) { function focusLast(container, focusableSelector) {
var elems = [].slice.call(container.querySelectorAll(focusableSelector), 0).reverse(); var elems = [].slice.call(container.querySelectorAll(focusableSelector), 0).reverse();
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
var elem = elems[i]; var elem = elems[i];
if (isCurrentlyFocusableInternal(elem)) { if (isCurrentlyFocusableInternal(elem)) {
@ -456,7 +433,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
} }
function moveFocus(sourceElement, container, focusableSelector, offset) { function moveFocus(sourceElement, container, focusableSelector, offset) {
var elems = container.querySelectorAll(focusableSelector); var elems = container.querySelectorAll(focusableSelector);
var list = []; var list = [];
var i; var i;
@ -464,7 +440,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
var elem; var elem;
for (i = 0, length = elems.length; i < length; i++) { for (i = 0, length = elems.length; i < length; i++) {
elem = elems[i]; elem = elems[i];
if (isCurrentlyFocusableInternal(elem)) { if (isCurrentlyFocusableInternal(elem)) {
@ -475,7 +450,6 @@ define(['dom', 'scrollManager'], function (dom, scrollManager) {
var currentIndex = -1; var currentIndex = -1;
for (i = 0, length = list.length; i < length; i++) { for (i = 0, length = list.length; i < length; i++) {
elem = list[i]; elem = list[i];
if (sourceElement === elem || elem.contains(sourceElement)) { if (sourceElement === elem || elem.contains(sourceElement)) {

View file

@ -2,12 +2,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio
'use strict'; 'use strict';
function saveCategories(context, options) { function saveCategories(context, options) {
var categories = []; var categories = [];
var chkCategorys = context.querySelectorAll('.chkCategory'); var chkCategorys = context.querySelectorAll('.chkCategory');
for (var i = 0, length = chkCategorys.length; i < length; i++) { for (var i = 0, length = chkCategorys.length; i < length; i++) {
var type = chkCategorys[i].getAttribute('data-type'); var type = chkCategorys[i].getAttribute('data-type');
if (chkCategorys[i].checked) { if (chkCategorys[i].checked) {
@ -25,12 +23,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio
} }
function loadCategories(context, options) { function loadCategories(context, options) {
var selectedCategories = options.categories || []; var selectedCategories = options.categories || [];
var chkCategorys = context.querySelectorAll('.chkCategory'); var chkCategorys = context.querySelectorAll('.chkCategory');
for (var i = 0, length = chkCategorys.length; i < length; i++) { for (var i = 0, length = chkCategorys.length; i < length; i++) {
var type = chkCategorys[i].getAttribute('data-type'); var type = chkCategorys[i].getAttribute('data-type');
chkCategorys[i].checked = !selectedCategories.length || selectedCategories.indexOf(type) !== -1; chkCategorys[i].checked = !selectedCategories.length || selectedCategories.indexOf(type) !== -1;
@ -38,13 +34,11 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio
} }
function save(context) { function save(context) {
var i; var i;
var length; var length;
var chkIndicators = context.querySelectorAll('.chkIndicator'); var chkIndicators = context.querySelectorAll('.chkIndicator');
for (i = 0, length = chkIndicators.length; i < length; i++) { for (i = 0, length = chkIndicators.length; i < length; i++) {
var type = chkIndicators[i].getAttribute('data-type'); var type = chkIndicators[i].getAttribute('data-type');
userSettings.set('guide-indicator-' + type, chkIndicators[i].checked); userSettings.set('guide-indicator-' + type, chkIndicators[i].checked);
} }
@ -62,13 +56,11 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio
} }
function load(context) { function load(context) {
var i; var i;
var length; var length;
var chkIndicators = context.querySelectorAll('.chkIndicator'); var chkIndicators = context.querySelectorAll('.chkIndicator');
for (i = 0, length = chkIndicators.length; i < length; i++) { for (i = 0, length = chkIndicators.length; i < length; i++) {
var type = chkIndicators[i].getAttribute('data-type'); var type = chkIndicators[i].getAttribute('data-type');
if (chkIndicators[i].getAttribute('data-default') === 'true') { if (chkIndicators[i].getAttribute('data-default') === 'true') {
@ -90,13 +82,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio
} }
function showEditor(options) { function showEditor(options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
var settingsChanged = false; var settingsChanged = false;
require(['text!./guide-settings.template.html'], function (template) { require(['text!./guide-settings.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -119,12 +108,10 @@ define(['dialogHelper', 'globalize', 'userSettings', 'layoutManager', 'connectio
dlg.innerHTML = html; dlg.innerHTML = html;
dlg.addEventListener('change', function () { dlg.addEventListener('change', function () {
settingsChanged = true; settingsChanged = true;
}); });
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (layoutManager.tv) { if (layoutManager.tv) {
scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false);
} }

View file

@ -2,7 +2,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
'use strict'; 'use strict';
function showViewSettings(instance) { function showViewSettings(instance) {
require(['guide-settings-dialog'], function (guideSettingsDialog) { require(['guide-settings-dialog'], function (guideSettingsDialog) {
guideSettingsDialog.show(instance.categoryOptions).then(function () { guideSettingsDialog.show(instance.categoryOptions).then(function () {
instance.refresh(); instance.refresh();
@ -11,7 +10,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function updateProgramCellOnScroll(cell, scrollPct) { function updateProgramCellOnScroll(cell, scrollPct) {
var left = cell.posLeft; var left = cell.posLeft;
if (!left) { if (!left) {
left = parseFloat(cell.style.left.replace('%', '')); left = parseFloat(cell.style.left.replace('%', ''));
@ -54,7 +52,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var isUpdatingProgramCellScroll = false; var isUpdatingProgramCellScroll = false;
function updateProgramCellsOnScroll(programGrid, programCells) { function updateProgramCellsOnScroll(programGrid, programCells) {
if (isUpdatingProgramCellScroll) { if (isUpdatingProgramCellScroll) {
return; return;
} }
@ -62,13 +59,11 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
isUpdatingProgramCellScroll = true; isUpdatingProgramCellScroll = true;
requestAnimationFrame(function () { requestAnimationFrame(function () {
var scrollLeft = programGrid.scrollLeft; var scrollLeft = programGrid.scrollLeft;
var scrollPct = scrollLeft ? (scrollLeft / programGrid.scrollWidth) * 100 : 0; var scrollPct = scrollLeft ? (scrollLeft / programGrid.scrollWidth) * 100 : 0;
for (var i = 0, length = programCells.length; i < length; i++) { for (var i = 0, length = programCells.length; i < length; i++) {
updateProgramCellOnScroll(programCells[i], scrollPct); updateProgramCellOnScroll(programCells[i], scrollPct);
} }
@ -77,14 +72,12 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function onProgramGridClick(e) { function onProgramGridClick(e) {
if (!layoutManager.tv) { if (!layoutManager.tv) {
return; return;
} }
var programCell = dom.parentWithClass(e.target, 'programCell'); var programCell = dom.parentWithClass(e.target, 'programCell');
if (programCell) { if (programCell) {
var startDate = programCell.getAttribute('data-startdate'); var startDate = programCell.getAttribute('data-startdate');
var endDate = programCell.getAttribute('data-enddate'); var endDate = programCell.getAttribute('data-enddate');
startDate = datetime.parseISO8601Date(startDate, { toLocal: true }).getTime(); startDate = datetime.parseISO8601Date(startDate, { toLocal: true }).getTime();
@ -92,7 +85,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var now = new Date().getTime(); var now = new Date().getTime();
if (now >= startDate && now < endDate) { if (now >= startDate && now < endDate) {
var channelId = programCell.getAttribute('data-channelid'); var channelId = programCell.getAttribute('data-channelid');
var serverId = programCell.getAttribute('data-serverid'); var serverId = programCell.getAttribute('data-serverid');
@ -108,7 +100,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function Guide(options) { function Guide(options) {
var self = this; var self = this;
var items = {}; var items = {};
@ -129,7 +120,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var programGrid; var programGrid;
self.refresh = function () { self.refresh = function () {
currentDate = null; currentDate = null;
reloadPage(options.element); reloadPage(options.element);
restartAutoRefresh(); restartAutoRefresh();
@ -148,7 +138,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
}; };
self.destroy = function () { self.destroy = function () {
stopAutoRefresh(); stopAutoRefresh();
events.off(serverNotifications, 'TimerCreated', onTimerCreated); events.off(serverNotifications, 'TimerCreated', onTimerCreated);
@ -162,7 +151,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
}; };
function restartAutoRefresh() { function restartAutoRefresh() {
stopAutoRefresh(); stopAutoRefresh();
var intervalMs = 60000 * 15; // (minutes) var intervalMs = 60000 * 15; // (minutes)
@ -180,15 +168,11 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function normalizeDateToTimeslot(date) { function normalizeDateToTimeslot(date) {
var minutesOffset = date.getMinutes() - cellCurationMinutes; var minutesOffset = date.getMinutes() - cellCurationMinutes;
if (minutesOffset >= 0) { if (minutesOffset >= 0) {
date.setHours(date.getHours(), cellCurationMinutes, 0, 0); date.setHours(date.getHours(), cellCurationMinutes, 0, 0);
} else { } else {
date.setHours(date.getHours(), 0, 0, 0); date.setHours(date.getHours(), 0, 0, 0);
} }
@ -204,7 +188,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function reloadGuide(context, newStartDate, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) { function reloadGuide(context, newStartDate, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) {
var apiClient = connectionManager.getApiClient(options.serverId); var apiClient = connectionManager.getApiClient(options.serverId);
var channelQuery = { var channelQuery = {
@ -287,12 +270,10 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
}; };
apiClient.getLiveTvChannels(channelQuery).then(function (channelsResult) { apiClient.getLiveTvChannels(channelQuery).then(function (channelsResult) {
var btnPreviousPage = context.querySelector('.btnPreviousPage'); var btnPreviousPage = context.querySelector('.btnPreviousPage');
var btnNextPage = context.querySelector('.btnNextPage'); var btnNextPage = context.querySelector('.btnNextPage');
if (channelsResult.TotalRecordCount > channelLimit) { if (channelsResult.TotalRecordCount > channelLimit) {
context.querySelector('.guideOptions').classList.remove('hide'); context.querySelector('.guideOptions').classList.remove('hide');
btnPreviousPage.classList.remove('hide'); btnPreviousPage.classList.remove('hide');
@ -309,7 +290,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} else { } else {
btnNextPage.disabled = true; btnNextPage.disabled = true;
} }
} else { } else {
context.querySelector('.guideOptions').classList.add('hide'); context.querySelector('.guideOptions').classList.add('hide');
} }
@ -340,22 +320,17 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
apiClient.getLiveTvPrograms(programQuery).then(function (programsResult) { apiClient.getLiveTvPrograms(programQuery).then(function (programsResult) {
renderGuide(context, date, channelsResult.Items, programsResult.Items, renderOptions, apiClient, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender); renderGuide(context, date, channelsResult.Items, programsResult.Items, renderOptions, apiClient, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender);
hideLoading(); hideLoading();
}); });
}); });
} }
function getDisplayTime(date) { function getDisplayTime(date) {
if ((typeof date).toString().toLowerCase() === 'string') { if ((typeof date).toString().toLowerCase() === 'string') {
try { try {
date = datetime.parseISO8601Date(date, { toLocal: true }); date = datetime.parseISO8601Date(date, { toLocal: true });
} catch (err) { } catch (err) {
return date; return date;
} }
@ -365,7 +340,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function getTimeslotHeadersHtml(startDate, endDateTime) { function getTimeslotHeadersHtml(startDate, endDateTime) {
var html = ''; var html = '';
// clone // clone
@ -374,7 +348,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
html += '<div class="timeslotHeadersInner">'; html += '<div class="timeslotHeadersInner">';
while (startDate.getTime() < endDateTime) { while (startDate.getTime() < endDateTime) {
html += '<div class="timeslotHeader">'; html += '<div class="timeslotHeader">';
html += getDisplayTime(startDate); html += getDisplayTime(startDate);
@ -408,23 +381,19 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function getTimerIndicator(item) { function getTimerIndicator(item) {
var status; var status;
if (item.Type === 'SeriesTimer') { if (item.Type === 'SeriesTimer') {
return '<span class="material-icons programIcon seriesTimerIcon fiber_smart_record"></span>'; return '<span class="material-icons programIcon seriesTimerIcon fiber_smart_record"></span>';
} else if (item.TimerId || item.SeriesTimerId) { } else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled'; status = item.Status || 'Cancelled';
} else if (item.Type === 'Timer') { } else if (item.Type === 'Timer') {
status = item.Status; status = item.Status;
} else { } else {
return ''; return '';
} }
if (item.SeriesTimerId) { if (item.SeriesTimerId) {
if (status !== 'Cancelled') { if (status !== 'Cancelled') {
return '<span class="material-icons programIcon seriesTimerIcon fiber_smart_record"></span>'; return '<span class="material-icons programIcon seriesTimerIcon fiber_smart_record"></span>';
} }
@ -436,7 +405,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function getChannelProgramsHtml(context, date, channel, programs, options, listInfo) { function getChannelProgramsHtml(context, date, channel, programs, options, listInfo) {
var html = ''; var html = '';
var startMs = date.getTime(); var startMs = date.getTime();
@ -460,11 +428,9 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var now = new Date().getTime(); var now = new Date().getTime();
for (var i = listInfo.startIndex, length = programs.length; i < length; i++) { for (var i = listInfo.startIndex, length = programs.length; i < length; i++) {
var program = programs[i]; var program = programs[i];
if (program.ChannelId !== channel.Id) { if (program.ChannelId !== channel.Id) {
if (programsFound) { if (programsFound) {
break; break;
} }
@ -595,11 +561,9 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function renderChannelHeaders(context, channels, apiClient) { function renderChannelHeaders(context, channels, apiClient) {
var html = ''; var html = '';
for (var i = 0, length = channels.length; i < length; i++) { for (var i = 0, length = channels.length; i < length; i++) {
var channel = channels[i]; var channel = channels[i];
var hasChannelImage = channel.ImageTags.Primary; var hasChannelImage = channel.ImageTags.Primary;
@ -611,18 +575,15 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var title = []; var title = [];
if (channel.ChannelNumber) { if (channel.ChannelNumber) {
title.push(channel.ChannelNumber); title.push(channel.ChannelNumber);
} }
if (channel.Name) { if (channel.Name) {
title.push(channel.Name); title.push(channel.Name);
} }
html += '<button title="' + title.join(' ') + '" type="button" class="' + cssClass + '"' + ' data-action="link" data-isfolder="' + channel.IsFolder + '" data-id="' + channel.Id + '" data-serverid="' + channel.ServerId + '" data-type="' + channel.Type + '">'; html += '<button title="' + title.join(' ') + '" type="button" class="' + cssClass + '"' + ' data-action="link" data-isfolder="' + channel.IsFolder + '" data-id="' + channel.Id + '" data-serverid="' + channel.ServerId + '" data-type="' + channel.Type + '">';
if (hasChannelImage) { if (hasChannelImage) {
var url = apiClient.getScaledImageUrl(channel.Id, { var url = apiClient.getScaledImageUrl(channel.Id, {
maxHeight: 220, maxHeight: 220,
tag: channel.ImageTags.Primary, tag: channel.ImageTags.Primary,
@ -633,7 +594,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
if (channel.ChannelNumber) { if (channel.ChannelNumber) {
html += '<h3 class="guideChannelNumber">' + channel.ChannelNumber + '</h3>'; html += '<h3 class="guideChannelNumber">' + channel.ChannelNumber + '</h3>';
} }
@ -650,7 +610,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function renderPrograms(context, date, channels, programs, options) { function renderPrograms(context, date, channels, programs, options) {
var listInfo = { var listInfo = {
startIndex: 0 startIndex: 0
}; };
@ -658,7 +617,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var html = []; var html = [];
for (var i = 0, length = channels.length; i < length; i++) { for (var i = 0, length = channels.length; i < length; i++) {
html.push(getChannelProgramsHtml(context, date, channels[i], programs, options, listInfo)); html.push(getChannelProgramsHtml(context, date, channels[i], programs, options, listInfo));
} }
@ -670,7 +628,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function getProgramSortOrder(program, channels) { function getProgramSortOrder(program, channels) {
var channelId = program.ChannelId; var channelId = program.ChannelId;
var channelIndex = -1; var channelIndex = -1;
@ -687,7 +644,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function renderGuide(context, date, channels, programs, renderOptions, apiClient, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) { function renderGuide(context, date, channels, programs, renderOptions, apiClient, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) {
programs.sort(function (a, b) { programs.sort(function (a, b) {
return getProgramSortOrder(a, channels) - getProgramSortOrder(b, channels); return getProgramSortOrder(a, channels) - getProgramSortOrder(b, channels);
}); });
@ -717,7 +673,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function scrollProgramGridToTimeMs(context, scrollToTimeMs, startTimeOfDayMs) { function scrollProgramGridToTimeMs(context, scrollToTimeMs, startTimeOfDayMs) {
scrollToTimeMs -= startTimeOfDayMs; scrollToTimeMs -= startTimeOfDayMs;
var pct = scrollToTimeMs / msPerDay; var pct = scrollToTimeMs / msPerDay;
@ -730,7 +685,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function focusProgram(context, itemId, channelRowId, focusToTimeMs, startTimeOfDayMs) { function focusProgram(context, itemId, channelRowId, focusToTimeMs, startTimeOfDayMs) {
var focusElem; var focusElem;
if (itemId) { if (itemId) {
focusElem = context.querySelector('[data-id="' + itemId + '"]'); focusElem = context.querySelector('[data-id="' + itemId + '"]');
@ -739,7 +693,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
if (focusElem) { if (focusElem) {
focusManager.focus(focusElem); focusManager.focus(focusElem);
} else { } else {
var autoFocusParent; var autoFocusParent;
if (channelRowId) { if (channelRowId) {
@ -757,7 +710,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var programCell = autoFocusParent.querySelector('.programCell'); var programCell = autoFocusParent.querySelector('.programCell');
while (programCell) { while (programCell) {
var left = (programCell.style.left || '').replace('%', ''); var left = (programCell.style.left || '').replace('%', '');
left = left ? parseFloat(left) : 0; left = left ? parseFloat(left) : 0;
var width = (programCell.style.width || '').replace('%', ''); var width = (programCell.style.width || '').replace('%', '');
@ -778,7 +730,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function nativeScrollTo(container, pos, horizontal) { function nativeScrollTo(container, pos, horizontal) {
if (container.scrollTo) { if (container.scrollTo) {
if (horizontal) { if (horizontal) {
container.scrollTo(pos, 0); container.scrollTo(pos, 0);
@ -798,7 +749,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var lastHeaderScroll = 0; var lastHeaderScroll = 0;
var scrollXPct = 0; var scrollXPct = 0;
function onProgramGridScroll(context, elem, timeslotHeaders) { function onProgramGridScroll(context, elem, timeslotHeaders) {
if ((new Date().getTime() - lastHeaderScroll) >= 1000) { if ((new Date().getTime() - lastHeaderScroll) >= 1000) {
lastGridScroll = new Date().getTime(); lastGridScroll = new Date().getTime();
@ -811,7 +761,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function onTimeslotHeadersScroll(context, elem) { function onTimeslotHeadersScroll(context, elem) {
if ((new Date().getTime() - lastGridScroll) >= 1000) { if ((new Date().getTime() - lastGridScroll) >= 1000) {
lastHeaderScroll = new Date().getTime(); lastHeaderScroll = new Date().getTime();
nativeScrollTo(programGrid, elem.scrollLeft, true); nativeScrollTo(programGrid, elem.scrollLeft, true);
@ -819,7 +768,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function changeDate(page, date, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) { function changeDate(page, date, scrollToTimeMs, focusToTimeMs, startTimeOfDayMs, focusProgramOnRender) {
var newStartDate = normalizeDateToTimeslot(date); var newStartDate = normalizeDateToTimeslot(date);
currentDate = newStartDate; currentDate = newStartDate;
@ -827,7 +775,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function getDateTabText(date, isActive, tabIndex) { function getDateTabText(date, isActive, tabIndex) {
var cssClass = isActive ? 'emby-tab-button guide-date-tab-button emby-tab-button-active' : 'emby-tab-button guide-date-tab-button'; var cssClass = isActive ? 'emby-tab-button guide-date-tab-button emby-tab-button-active' : 'emby-tab-button guide-date-tab-button';
var html = '<button is="emby-button" class="' + cssClass + '" data-index="' + tabIndex + '" data-date="' + date.getTime() + '">'; var html = '<button is="emby-button" class="' + cssClass + '" data-index="' + tabIndex + '" data-date="' + date.getTime() + '">';
@ -842,7 +789,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function setDateRange(page, guideInfo) { function setDateRange(page, guideInfo) {
var today = new Date(); var today = new Date();
var nowHours = today.getHours(); var nowHours = today.getHours();
today.setHours(nowHours, 0, 0, 0); today.setHours(nowHours, 0, 0, 0);
@ -875,7 +821,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
startTimeOfDayMs += start.getMinutes() * 60 * 1000; startTimeOfDayMs += start.getMinutes() * 60 * 1000;
while (start <= end) { while (start <= end) {
var isActive = date.getDate() === start.getDate() && date.getMonth() === start.getMonth() && date.getFullYear() === start.getFullYear(); var isActive = date.getDate() === start.getDate() && date.getMonth() === start.getMonth() && date.getFullYear() === start.getFullYear();
dateTabsHtml += getDateTabText(start, isActive, tabIndex); dateTabsHtml += getDateTabText(start, isActive, tabIndex);
@ -902,19 +847,16 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function reloadPage(page) { function reloadPage(page) {
showLoading(); showLoading();
var apiClient = connectionManager.getApiClient(options.serverId); var apiClient = connectionManager.getApiClient(options.serverId);
apiClient.getLiveTvGuideInfo().then(function (guideInfo) { apiClient.getLiveTvGuideInfo().then(function (guideInfo) {
setDateRange(page, guideInfo); setDateRange(page, guideInfo);
}); });
} }
function getChannelProgramsFocusableElements(container) { function getChannelProgramsFocusableElements(container) {
var elements = container.querySelectorAll('.programCell'); var elements = container.querySelectorAll('.programCell');
var list = []; var list = [];
@ -922,7 +864,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var currentScrollXPct = scrollXPct + 1; var currentScrollXPct = scrollXPct + 1;
for (var i = 0, length = elements.length; i < length; i++) { for (var i = 0, length = elements.length; i < length; i++) {
var elem = elements[i]; var elem = elements[i];
var left = (elem.style.left || '').replace('%', ''); var left = (elem.style.left || '').replace('%', '');
@ -939,7 +880,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function onInputCommand(e) { function onInputCommand(e) {
var target = e.target; var target = e.target;
var programCell = dom.parentWithClass(target, 'programCell'); var programCell = dom.parentWithClass(target, 'programCell');
var container; var container;
@ -948,7 +888,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
var newRow; var newRow;
switch (e.detail.command) { switch (e.detail.command) {
case 'up': case 'up':
if (programCell) { if (programCell) {
container = programGrid; container = programGrid;
@ -1030,7 +969,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function onScrollerFocus(e) { function onScrollerFocus(e) {
var target = e.target; var target = e.target;
var programCell = dom.parentWithClass(target, 'programCell'); var programCell = dom.parentWithClass(target, 'programCell');
@ -1049,22 +987,16 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
if (lastFocusDirection === 'left') { if (lastFocusDirection === 'left') {
if (programCell) { if (programCell) {
scrollHelper.toStart(programGrid, programCell, true, true); scrollHelper.toStart(programGrid, programCell, true, true);
} }
} else if (lastFocusDirection === 'right') { } else if (lastFocusDirection === 'right') {
if (programCell) { if (programCell) {
scrollHelper.toCenter(programGrid, programCell, true, true); scrollHelper.toCenter(programGrid, programCell, true, true);
} }
} else if (lastFocusDirection === 'up' || lastFocusDirection === 'down') { } else if (lastFocusDirection === 'up' || lastFocusDirection === 'down') {
var verticalScroller = dom.parentWithClass(target, 'guideVerticalScroller'); var verticalScroller = dom.parentWithClass(target, 'guideVerticalScroller');
if (verticalScroller) { if (verticalScroller) {
var focusedElement = programCell || dom.parentWithTag(target, 'BUTTON'); var focusedElement = programCell || dom.parentWithTag(target, 'BUTTON');
verticalScroller.toCenter(focusedElement, true); verticalScroller.toCenter(focusedElement, true);
} }
@ -1072,7 +1004,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function setScrollEvents(view, enabled) { function setScrollEvents(view, enabled) {
if (layoutManager.tv) { if (layoutManager.tv) {
var guideVerticalScroller = view.querySelector('.guideVerticalScroller'); var guideVerticalScroller = view.querySelector('.guideVerticalScroller');
@ -1085,7 +1016,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
function onTimerCreated(e, apiClient, data) { function onTimerCreated(e, apiClient, data) {
var programId = data.ProgramId; var programId = data.ProgramId;
// This could be null, not supported by all tv providers // This could be null, not supported by all tv providers
var newTimerId = data.Id; var newTimerId = data.Id;
@ -1138,7 +1068,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
require(['text!./tvguide.template.html'], function (template) { require(['text!./tvguide.template.html'], function (template) {
var context = options.element; var context = options.element;
context.classList.add('tvguide'); context.classList.add('tvguide');
@ -1195,12 +1124,10 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
}); });
context.querySelector('.guideDateTabs').addEventListener('tabchange', function (e) { context.querySelector('.guideDateTabs').addEventListener('tabchange', function (e) {
var allTabButtons = e.target.querySelectorAll('.guide-date-tab-button'); var allTabButtons = e.target.querySelectorAll('.guide-date-tab-button');
var tabButton = allTabButtons[parseInt(e.detail.selectedTabIndex)]; var tabButton = allTabButtons[parseInt(e.detail.selectedTabIndex)];
if (tabButton) { if (tabButton) {
var previousButton = e.detail.previousIndex == null ? null : allTabButtons[parseInt(e.detail.previousIndex)]; var previousButton = e.detail.previousIndex == null ? null : allTabButtons[parseInt(e.detail.previousIndex)];
var date = new Date(); var date = new Date();
@ -1215,7 +1142,6 @@ define(['require', 'inputManager', 'browser', 'globalize', 'connectionManager',
} }
if (previousButton) { if (previousButton) {
var previousDate = new Date(); var previousDate = new Date();
previousDate.setTime(parseInt(previousButton.getAttribute('data-date'))); previousDate.setTime(parseInt(previousButton.getAttribute('data-date')));

View file

@ -15,12 +15,10 @@ import 'emby-checkbox';
const numConfigurableSections = 7; const numConfigurableSections = 7;
function renderViews(page, user, result) { function renderViews(page, user, result) {
let folderHtml = ''; let folderHtml = '';
folderHtml += '<div class="checkboxList">'; folderHtml += '<div class="checkboxList">';
folderHtml += result.map(i => { folderHtml += result.map(i => {
let currentHtml = ''; let currentHtml = '';
const id = `chkGroupFolder${i.Id}`; const id = `chkGroupFolder${i.Id}`;
@ -35,7 +33,6 @@ import 'emby-checkbox';
currentHtml += '</label>'; currentHtml += '</label>';
return currentHtml; return currentHtml;
}).join(''); }).join('');
folderHtml += '</div>'; folderHtml += '</div>';
@ -44,7 +41,6 @@ import 'emby-checkbox';
} }
function getLandingScreenOptions(type) { function getLandingScreenOptions(type) {
const list = []; const list = [];
if (type === 'movies') { if (type === 'movies') {
@ -133,9 +129,7 @@ import 'emby-checkbox';
} }
function getLandingScreenOptionsHtml(type, userValue) { function getLandingScreenOptionsHtml(type, userValue) {
return getLandingScreenOptions(type).map(o => { return getLandingScreenOptions(type).map(o => {
const selected = userValue === o.value || (o.isDefault && !userValue); const selected = userValue === o.value || (o.isDefault && !userValue);
const selectedHtml = selected ? ' selected' : ''; const selectedHtml = selected ? ' selected' : '';
const optionValue = o.isDefault ? '' : o.value; const optionValue = o.isDefault ? '' : o.value;
@ -145,11 +139,9 @@ import 'emby-checkbox';
} }
function renderViewOrder(context, user, result) { function renderViewOrder(context, user, result) {
let html = ''; let html = '';
html += result.Items.map((view) => { html += result.Items.map((view) => {
let currentHtml = ''; let currentHtml = '';
currentHtml += `<div class="listItem viewItem" data-viewid="${view.Id}">`; currentHtml += `<div class="listItem viewItem" data-viewid="${view.Id}">`;
@ -170,16 +162,13 @@ import 'emby-checkbox';
currentHtml += '</div>'; currentHtml += '</div>';
return currentHtml; return currentHtml;
}).join(''); }).join('');
context.querySelector('.viewOrderList').innerHTML = html; context.querySelector('.viewOrderList').innerHTML = html;
} }
function updateHomeSectionValues(context, userSettings) { function updateHomeSectionValues(context, userSettings) {
for (let i = 1; i <= 7; i++) { for (let i = 1; i <= 7; i++) {
const select = context.querySelector(`#selectHomeSection${i}`); const select = context.querySelector(`#selectHomeSection${i}`);
const defaultValue = homeSections.getDefaultSection(i - 1); const defaultValue = homeSections.getDefaultSection(i - 1);
@ -200,7 +189,6 @@ import 'emby-checkbox';
} }
function getPerLibrarySettingsHtml(item, user, userSettings, apiClient) { function getPerLibrarySettingsHtml(item, user, userSettings, apiClient) {
let html = ''; let html = '';
let isChecked; let isChecked;
@ -217,7 +205,6 @@ import 'emby-checkbox';
const excludeFromLatest = ['playlists', 'livetv', 'boxsets', 'channels']; const excludeFromLatest = ['playlists', 'livetv', 'boxsets', 'channels'];
if (!excludeFromLatest.includes(item.CollectionType || '')) { if (!excludeFromLatest.includes(item.CollectionType || '')) {
isChecked = !user.Configuration.LatestItemsExcludes.includes(item.Id); isChecked = !user.Configuration.LatestItemsExcludes.includes(item.Id);
html += '<label class="fldIncludeInLatest">'; html += '<label class="fldIncludeInLatest">';
html += `<input type="checkbox" is="emby-checkbox" class="chkIncludeInLatest" data-folderid="${item.Id}"${isChecked ? ' checked="checked"' : ''}/>`; html += `<input type="checkbox" is="emby-checkbox" class="chkIncludeInLatest" data-folderid="${item.Id}"${isChecked ? ' checked="checked"' : ''}/>`;
@ -226,12 +213,10 @@ import 'emby-checkbox';
} }
if (html) { if (html) {
html = `<div class="checkboxListContainer">${html}</div>`; html = `<div class="checkboxListContainer">${html}</div>`;
} }
if (item.CollectionType === 'movies' || item.CollectionType === 'tvshows' || item.CollectionType === 'music' || item.CollectionType === 'livetv') { if (item.CollectionType === 'movies' || item.CollectionType === 'tvshows' || item.CollectionType === 'music' || item.CollectionType === 'livetv') {
const idForLanding = item.CollectionType === 'livetv' ? item.CollectionType : item.Id; const idForLanding = item.CollectionType === 'livetv' ? item.CollectionType : item.Id;
html += '<div class="selectContainer">'; html += '<div class="selectContainer">';
html += `<select is="emby-select" class="selectLanding" data-folderid="${idForLanding}" label="${globalize.translate('LabelDefaultScreen')}">`; html += `<select is="emby-select" class="selectLanding" data-folderid="${idForLanding}" label="${globalize.translate('LabelDefaultScreen')}">`;
@ -245,7 +230,6 @@ import 'emby-checkbox';
} }
if (html) { if (html) {
let prefix = ''; let prefix = '';
prefix += '<div class="verticalSection">'; prefix += '<div class="verticalSection">';
@ -261,12 +245,10 @@ import 'emby-checkbox';
} }
function renderPerLibrarySettings(context, user, userViews, userSettings, apiClient) { function renderPerLibrarySettings(context, user, userViews, userSettings, apiClient) {
const elem = context.querySelector('.perLibrarySettings'); const elem = context.querySelector('.perLibrarySettings');
let html = ''; let html = '';
for (let i = 0, length = userViews.length; i < length; i++) { for (let i = 0, length = userViews.length; i < length; i++) {
html += getPerLibrarySettingsHtml(userViews[i], user, userSettings, apiClient); html += getPerLibrarySettingsHtml(userViews[i], user, userSettings, apiClient);
} }
@ -274,7 +256,6 @@ import 'emby-checkbox';
} }
function loadForm(context, user, userSettings, apiClient) { function loadForm(context, user, userSettings, apiClient) {
context.querySelector('.chkHidePlayedFromLatest').checked = user.Configuration.HidePlayedInLatest || false; context.querySelector('.chkHidePlayedFromLatest').checked = user.Configuration.HidePlayedInLatest || false;
updateHomeSectionValues(context, userSettings); updateHomeSectionValues(context, userSettings);
@ -283,7 +264,6 @@ import 'emby-checkbox';
const promise2 = apiClient.getJSON(apiClient.getUrl(`Users/${user.Id}/GroupingOptions`)); const promise2 = apiClient.getJSON(apiClient.getUrl(`Users/${user.Id}/GroupingOptions`));
Promise.all([promise1, promise2]).then(responses => { Promise.all([promise1, promise2]).then(responses => {
renderViewOrder(context, user, responses[0]); renderViewOrder(context, user, responses[0]);
renderPerLibrarySettings(context, user, responses[0].Items, userSettings, apiClient); renderPerLibrarySettings(context, user, responses[0].Items, userSettings, apiClient);
@ -295,7 +275,6 @@ import 'emby-checkbox';
} }
function onSectionOrderListClick(e) { function onSectionOrderListClick(e) {
const target = dom.parentWithClass(e.target, 'btnViewItemMove'); const target = dom.parentWithClass(e.target, 'btnViewItemMove');
if (target) { if (target) {
@ -303,7 +282,6 @@ import 'emby-checkbox';
if (viewItem) { if (viewItem) {
if (target.classList.contains('btnViewItemDown')) { if (target.classList.contains('btnViewItemDown')) {
const next = viewItem.nextSibling; const next = viewItem.nextSibling;
if (next) { if (next) {
@ -311,9 +289,7 @@ import 'emby-checkbox';
next.parentNode.insertBefore(viewItem, next.nextSibling); next.parentNode.insertBefore(viewItem, next.nextSibling);
focusManager.focus(e.target); focusManager.focus(e.target);
} }
} else { } else {
const prev = viewItem.previousSibling; const prev = viewItem.previousSibling;
if (prev) { if (prev) {
@ -327,37 +303,30 @@ import 'emby-checkbox';
} }
function getCheckboxItems(selector, context, isChecked) { function getCheckboxItems(selector, context, isChecked) {
const inputs = context.querySelectorAll(selector); const inputs = context.querySelectorAll(selector);
const list = []; const list = [];
for (let i = 0, length = inputs.length; i < length; i++) { for (let i = 0, length = inputs.length; i < length; i++) {
if (inputs[i].checked === isChecked) { if (inputs[i].checked === isChecked) {
list.push(inputs[i]); list.push(inputs[i]);
} }
} }
return list; return list;
} }
function saveUser(context, user, userSettingsInstance, apiClient) { function saveUser(context, user, userSettingsInstance, apiClient) {
user.Configuration.HidePlayedInLatest = context.querySelector('.chkHidePlayedFromLatest').checked; user.Configuration.HidePlayedInLatest = context.querySelector('.chkHidePlayedFromLatest').checked;
user.Configuration.LatestItemsExcludes = getCheckboxItems('.chkIncludeInLatest', context, false).map(i => { user.Configuration.LatestItemsExcludes = getCheckboxItems('.chkIncludeInLatest', context, false).map(i => {
return i.getAttribute('data-folderid'); return i.getAttribute('data-folderid');
}); });
user.Configuration.MyMediaExcludes = getCheckboxItems('.chkIncludeInMyMedia', context, false).map(i => { user.Configuration.MyMediaExcludes = getCheckboxItems('.chkIncludeInMyMedia', context, false).map(i => {
return i.getAttribute('data-folderid'); return i.getAttribute('data-folderid');
}); });
user.Configuration.GroupedFolders = getCheckboxItems('.chkGroupFolder', context, true).map(i => { user.Configuration.GroupedFolders = getCheckboxItems('.chkGroupFolder', context, true).map(i => {
return i.getAttribute('data-folderid'); return i.getAttribute('data-folderid');
}); });
@ -391,13 +360,10 @@ import 'emby-checkbox';
} }
function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) { function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) {
loading.show(); loading.show();
apiClient.getUser(userId).then(user => { apiClient.getUser(userId).then(user => {
saveUser(context, user, userSettings, apiClient).then(() => { saveUser(context, user, userSettings, apiClient).then(() => {
loading.hide(); loading.hide();
if (enableSaveConfirmation) { if (enableSaveConfirmation) {
import('toast').then(({default: toast}) => { import('toast').then(({default: toast}) => {
@ -406,7 +372,6 @@ import 'emby-checkbox';
} }
events.trigger(instance, 'saved'); events.trigger(instance, 'saved');
}, () => { }, () => {
loading.hide(); loading.hide();
}); });
@ -414,14 +379,12 @@ import 'emby-checkbox';
} }
function onSubmit(e) { function onSubmit(e) {
const self = this; const self = this;
const apiClient = connectionManager.getApiClient(self.options.serverId); const apiClient = connectionManager.getApiClient(self.options.serverId);
const userId = self.options.userId; const userId = self.options.userId;
const userSettings = self.options.userSettings; const userSettings = self.options.userSettings;
userSettings.setUserInfo(userId, apiClient).then(() => { userSettings.setUserInfo(userId, apiClient).then(() => {
const enableSaveConfirmation = self.options.enableSaveConfirmation; const enableSaveConfirmation = self.options.enableSaveConfirmation;
save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation); save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation);
}); });
@ -434,7 +397,6 @@ import 'emby-checkbox';
} }
function onChange(e) { function onChange(e) {
const chkIncludeInMyMedia = dom.parentWithClass(e.target, 'chkIncludeInMyMedia'); const chkIncludeInMyMedia = dom.parentWithClass(e.target, 'chkIncludeInMyMedia');
if (!chkIncludeInMyMedia) { if (!chkIncludeInMyMedia) {
return; return;
@ -452,9 +414,7 @@ import 'emby-checkbox';
} }
function embed(options, self) { function embed(options, self) {
return import('text!./homeScreenSettings.template.html').then(({default: template}) => { return import('text!./homeScreenSettings.template.html').then(({default: template}) => {
for (let i = 1; i <= numConfigurableSections; i++) { for (let i = 1; i <= numConfigurableSections; i++) {
template = template.replace(`{section${i}label}`, globalize.translate('LabelHomeScreenSectionValue', i)); template = template.replace(`{section${i}label}`, globalize.translate('LabelHomeScreenSectionValue', i));
} }
@ -486,7 +446,6 @@ import 'emby-checkbox';
} }
loadData(autoFocus) { loadData(autoFocus) {
const self = this; const self = this;
const context = self.options.element; const context = self.options.element;
@ -497,9 +456,7 @@ import 'emby-checkbox';
const userSettings = self.options.userSettings; const userSettings = self.options.userSettings;
apiClient.getUser(userId).then(user => { apiClient.getUser(userId).then(user => {
userSettings.setUserInfo(userId, apiClient).then(() => { userSettings.setUserInfo(userId, apiClient).then(() => {
self.dataLoaded = true; self.dataLoaded = true;
loadForm(context, user, userSettings, apiClient); loadForm(context, user, userSettings, apiClient);
@ -516,7 +473,6 @@ import 'emby-checkbox';
} }
destroy() { destroy() {
this.options = null; this.options = null;
} }
} }

View file

@ -131,7 +131,6 @@ import 'css!./homesections';
} }
function loadSection(page, apiClient, user, userSettings, userViews, allSections, index) { function loadSection(page, apiClient, user, userSettings, userViews, allSections, index) {
const section = allSections[index]; const section = allSections[index];
const userId = user.Id; const userId = user.Id;
@ -627,7 +626,6 @@ import 'css!./homesections';
html += '</h2>'; html += '</h2>';
html += '<span class="material-icons chevron_right"></span>'; html += '<span class="material-icons chevron_right"></span>';
html += '</a>'; html += '</a>';
} else { } else {
html += '<h2 class="sectionTitle sectionTitle-cards">' + globalize.translate('HeaderOnNow') + '</h2>'; html += '<h2 class="sectionTitle sectionTitle-cards">' + globalize.translate('HeaderOnNow') + '</h2>';
} }

View file

@ -34,7 +34,6 @@ import events from 'events';
} }
export function enableHlsJsPlayer(runTimeTicks, mediaType) { export function enableHlsJsPlayer(runTimeTicks, mediaType) {
if (window.MediaSource == null) { if (window.MediaSource == null) {
return false; return false;
} }
@ -50,7 +49,6 @@ import events from 'events';
} }
if (canPlayNativeHls()) { if (canPlayNativeHls()) {
// Having trouble with chrome's native support and transcoded music // Having trouble with chrome's native support and transcoded music
if (browser.android && mediaType === 'Audio') { if (browser.android && mediaType === 'Audio') {
return true; return true;
@ -76,7 +74,6 @@ import events from 'events';
var recoverDecodingErrorDate; var recoverDecodingErrorDate;
var recoverSwapAudioCodecDate; var recoverSwapAudioCodecDate;
export function handleHlsJsMediaError(instance, reject) { export function handleHlsJsMediaError(instance, reject) {
var hlsPlayer = instance._hlsPlayer; var hlsPlayer = instance._hlsPlayer;
if (!hlsPlayer) { if (!hlsPlayer) {
@ -112,7 +109,6 @@ import events from 'events';
} }
export function onErrorInternal(instance, type) { export function onErrorInternal(instance, type) {
// Needed for video // Needed for video
if (instance.destroyCustomTrack) { if (instance.destroyCustomTrack) {
instance.destroyCustomTrack(instance._mediaElement); instance.destroyCustomTrack(instance._mediaElement);
@ -140,11 +136,9 @@ import events from 'events';
} }
export function seekOnPlaybackStart(instance, element, ticks, onMediaReady) { export function seekOnPlaybackStart(instance, element, ticks, onMediaReady) {
var seconds = (ticks || 0) / 10000000; var seconds = (ticks || 0) / 10000000;
if (seconds) { if (seconds) {
// Appending #t=xxx to the query string doesn't seem to work with HLS // Appending #t=xxx to the query string doesn't seem to work with HLS
// For plain video files, not all browsers support it either // For plain video files, not all browsers support it either
@ -177,11 +171,8 @@ import events from 'events';
} }
export function applySrc(elem, src, options) { export function applySrc(elem, src, options) {
if (window.Windows && options.mediaSource && options.mediaSource.IsLocal) { if (window.Windows && options.mediaSource && options.mediaSource.IsLocal) {
return Windows.Storage.StorageFile.getFileFromPathAsync(options.url).then(function (file) { return Windows.Storage.StorageFile.getFileFromPathAsync(options.url).then(function (file) {
var playlist = new Windows.Media.Playback.MediaPlaybackList(); var playlist = new Windows.Media.Playback.MediaPlaybackList();
var source1 = Windows.Media.Core.MediaSource.createFromStorageFile(file); var source1 = Windows.Media.Core.MediaSource.createFromStorageFile(file);
@ -190,9 +181,7 @@ import events from 'events';
elem.src = URL.createObjectURL(playlist, { oneTimeOnly: true }); elem.src = URL.createObjectURL(playlist, { oneTimeOnly: true });
return Promise.resolve(); return Promise.resolve();
}); });
} else { } else {
elem.src = src; elem.src = src;
} }
@ -200,18 +189,15 @@ import events from 'events';
} }
function onSuccessfulPlay(elem, onErrorFn) { function onSuccessfulPlay(elem, onErrorFn) {
elem.addEventListener('error', onErrorFn); elem.addEventListener('error', onErrorFn);
} }
export function playWithPromise(elem, onErrorFn) { export function playWithPromise(elem, onErrorFn) {
try { try {
var promise = elem.play(); var promise = elem.play();
if (promise && promise.then) { if (promise && promise.then) {
// Chrome now returns a promise // Chrome now returns a promise
return promise.catch(function (e) { return promise.catch(function (e) {
var errorName = (e.name || '').toLowerCase(); var errorName = (e.name || '').toLowerCase();
// safari uses aborterror // safari uses aborterror
if (errorName === 'notallowederror' || if (errorName === 'notallowederror' ||
@ -233,7 +219,6 @@ import events from 'events';
} }
export function destroyCastPlayer(instance) { export function destroyCastPlayer(instance) {
var player = instance._castPlayer; var player = instance._castPlayer;
if (player) { if (player) {
try { try {
@ -275,10 +260,8 @@ import events from 'events';
} }
export function bindEventsToHlsPlayer(instance, hls, elem, onErrorFn, resolve, reject) { export function bindEventsToHlsPlayer(instance, hls, elem, onErrorFn, resolve, reject) {
hls.on(Hls.Events.MANIFEST_PARSED, function () { hls.on(Hls.Events.MANIFEST_PARSED, function () {
playWithPromise(elem, onErrorFn).then(resolve, function () { playWithPromise(elem, onErrorFn).then(resolve, function () {
if (reject) { if (reject) {
reject(); reject();
reject = null; reject = null;
@ -287,14 +270,12 @@ import events from 'events';
}); });
hls.on(Hls.Events.ERROR, function (event, data) { hls.on(Hls.Events.ERROR, function (event, data) {
console.error('HLS Error: Type: ' + data.type + ' Details: ' + (data.details || '') + ' Fatal: ' + (data.fatal || false)); console.error('HLS Error: Type: ' + data.type + ' Details: ' + (data.details || '') + ' Fatal: ' + (data.fatal || false));
switch (data.type) { switch (data.type) {
case Hls.ErrorTypes.NETWORK_ERROR: case Hls.ErrorTypes.NETWORK_ERROR:
// try to recover network error // try to recover network error
if (data.response && data.response.code && data.response.code >= 400) { if (data.response && data.response.code && data.response.code >= 400) {
console.debug('hls.js response error code: ' + data.response.code); console.debug('hls.js response error code: ' + data.response.code);
// Trigger failure differently depending on whether this is prior to start of playback, or after // Trigger failure differently depending on whether this is prior to start of playback, or after
@ -308,7 +289,6 @@ import events from 'events';
} }
return; return;
} }
break; break;
@ -321,7 +301,6 @@ import events from 'events';
case Hls.ErrorTypes.NETWORK_ERROR: case Hls.ErrorTypes.NETWORK_ERROR:
if (data.response && data.response.code === 0) { if (data.response && data.response.code === 0) {
// This could be a CORS error related to access control response headers // This could be a CORS error related to access control response headers
console.debug('hls.js response error code: ' + data.response.code); console.debug('hls.js response error code: ' + data.response.code);
@ -367,7 +346,6 @@ import events from 'events';
} }
export function onEndedInternal(instance, elem, onErrorFn) { export function onEndedInternal(instance, elem, onErrorFn) {
elem.removeEventListener('error', onErrorFn); elem.removeEventListener('error', onErrorFn);
elem.src = ''; elem.src = '';
@ -390,7 +368,6 @@ import events from 'events';
} }
export function getBufferedRanges(instance, elem) { export function getBufferedRanges(instance, elem) {
var ranges = []; var ranges = [];
var seekable = elem.buffered || []; var seekable = elem.buffered || [];
@ -403,7 +380,6 @@ import events from 'events';
offset = offset || 0; offset = offset || 0;
for (var i = 0, length = seekable.length; i < length; i++) { for (var i = 0, length = seekable.length; i < length; i++) {
var start = seekable.start(i); var start = seekable.start(i);
var end = seekable.end(i); var end = seekable.end(i);

View file

@ -17,7 +17,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
var selectedProvider; var selectedProvider;
function getBaseRemoteOptions() { function getBaseRemoteOptions() {
var options = {}; var options = {};
options.itemId = currentItemId; options.itemId = currentItemId;
@ -26,7 +25,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
} }
function reloadBrowsableImages(page, apiClient) { function reloadBrowsableImages(page, apiClient) {
loading.show(); loading.show();
var options = getBaseRemoteOptions(); var options = getBaseRemoteOptions();
@ -43,7 +41,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
} }
apiClient.getAvailableRemoteImages(options).then(function (result) { apiClient.getAvailableRemoteImages(options).then(function (result) {
renderRemoteImages(page, apiClient, result, browsableImageType, options.startIndex, options.limit); renderRemoteImages(page, apiClient, result, browsableImageType, options.startIndex, options.limit);
page.querySelector('#selectBrowsableImageType').value = browsableImageType; page.querySelector('#selectBrowsableImageType').value = browsableImageType;
@ -58,17 +55,14 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
loading.hide(); loading.hide();
}); });
} }
function renderRemoteImages(page, apiClient, imagesResult, imageType, startIndex, limit) { function renderRemoteImages(page, apiClient, imagesResult, imageType, startIndex, limit) {
page.querySelector('.availableImagesPaging').innerHTML = getPagingHtml(startIndex, limit, imagesResult.TotalRecordCount); page.querySelector('.availableImagesPaging').innerHTML = getPagingHtml(startIndex, limit, imagesResult.TotalRecordCount);
var html = ''; var html = '';
for (var i = 0, length = imagesResult.Images.length; i < length; i++) { for (var i = 0, length = imagesResult.Images.length; i < length; i++) {
html += getRemoteImageHtml(imagesResult.Images[i], imageType, apiClient); html += getRemoteImageHtml(imagesResult.Images[i], imageType, apiClient);
} }
@ -92,11 +86,9 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
reloadBrowsableImages(page, apiClient); reloadBrowsableImages(page, apiClient);
}); });
} }
} }
function getPagingHtml(startIndex, limit, totalRecordCount) { function getPagingHtml(startIndex, limit, totalRecordCount) {
var html = ''; var html = '';
var recordsEnd = Math.min(startIndex + limit, totalRecordCount); var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
@ -136,7 +128,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
loading.show(); loading.show();
apiClient.downloadRemoteImage(options).then(function () { apiClient.downloadRemoteImage(options).then(function () {
hasChanges = true; hasChanges = true;
var dlg = dom.parentWithClass(page, 'dialog'); var dlg = dom.parentWithClass(page, 'dialog');
dialogHelper.close(dlg); dialogHelper.close(dlg);
@ -166,7 +157,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
} else if (imageType === 'Disc') { } else if (imageType === 'Disc') {
shape = 'square'; shape = 'square';
} else { } else {
if (currentItemType === 'Episode') { if (currentItemType === 'Episode') {
shape = 'backdrop'; shape = 'backdrop';
} else if (currentItemType === 'MusicAlbum' || currentItemType === 'MusicArtist') { } else if (currentItemType === 'MusicAlbum' || currentItemType === 'MusicArtist') {
@ -217,19 +207,16 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
html += '<div class="cardText cardTextCentered">' + image.ProviderName + '</div>'; html += '<div class="cardText cardTextCentered">' + image.ProviderName + '</div>';
if (image.Width || image.Height || image.Language) { if (image.Width || image.Height || image.Language) {
html += '<div class="cardText cardText-secondary cardTextCentered">'; html += '<div class="cardText cardText-secondary cardTextCentered">';
if (image.Width && image.Height) { if (image.Width && image.Height) {
html += image.Width + ' x ' + image.Height; html += image.Width + ' x ' + image.Height;
if (image.Language) { if (image.Language) {
html += ' • ' + image.Language; html += ' • ' + image.Language;
} }
} else { } else {
if (image.Language) { if (image.Language) {
html += image.Language; html += image.Language;
} }
} }
@ -238,13 +225,11 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
} }
if (image.CommunityRating != null) { if (image.CommunityRating != null) {
html += '<div class="cardText cardText-secondary cardTextCentered">'; html += '<div class="cardText cardText-secondary cardTextCentered">';
if (image.RatingType === 'Likes') { if (image.RatingType === 'Likes') {
html += image.CommunityRating + (image.CommunityRating === 1 ? ' like' : ' likes'); html += image.CommunityRating + (image.CommunityRating === 1 ? ' like' : ' likes');
} else { } else {
if (image.CommunityRating) { if (image.CommunityRating) {
html += image.CommunityRating.toFixed(1); html += image.CommunityRating.toFixed(1);
@ -286,7 +271,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}); });
page.querySelector('#selectImageProvider').addEventListener('change', function () { page.querySelector('#selectImageProvider').addEventListener('change', function () {
browsableImageStartIndex = 0; browsableImageStartIndex = 0;
selectedProvider = this.value; selectedProvider = this.value;
@ -294,14 +278,12 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
}); });
page.querySelector('#chkAllLanguages').addEventListener('change', function () { page.querySelector('#chkAllLanguages').addEventListener('change', function () {
browsableImageStartIndex = 0; browsableImageStartIndex = 0;
reloadBrowsableImages(page, apiClient); reloadBrowsableImages(page, apiClient);
}); });
page.addEventListener('click', function (e) { page.addEventListener('click', function (e) {
var btnDownloadRemoteImage = dom.parentWithClass(e.target, 'btnDownloadRemoteImage'); var btnDownloadRemoteImage = dom.parentWithClass(e.target, 'btnDownloadRemoteImage');
if (btnDownloadRemoteImage) { if (btnDownloadRemoteImage) {
var card = dom.parentWithClass(btnDownloadRemoteImage, 'card'); var card = dom.parentWithClass(btnDownloadRemoteImage, 'card');
@ -320,7 +302,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
loading.show(); loading.show();
require(['text!./imageDownloader.template.html'], function (template) { require(['text!./imageDownloader.template.html'], function (template) {
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
currentItemId = itemId; currentItemId = itemId;
@ -353,7 +334,6 @@ define(['dom', 'loading', 'apphost', 'dialogHelper', 'connectionManager', 'image
initEditor(editorContent, apiClient); initEditor(editorContent, apiClient);
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });

View file

@ -23,7 +23,6 @@ import 'css!./style';
let hasChanges = false; let hasChanges = false;
function onFileReaderError(evt) { function onFileReaderError(evt) {
loading.hide(); loading.hide();
switch (evt.target.error.code) { switch (evt.target.error.code) {
@ -43,7 +42,6 @@ import 'css!./style';
} }
function setFiles(page, files) { function setFiles(page, files) {
const file = files[0]; const file = files[0];
if (!file || !file.type.match('image.*')) { if (!file || !file.type.match('image.*')) {
@ -69,7 +67,6 @@ import 'css!./style';
// Closure to capture the file information. // Closure to capture the file information.
reader.onload = (theFile => { reader.onload = (theFile => {
return e => { return e => {
// Render thumbnail. // Render thumbnail.
const html = ['<img style="max-width:100%;max-height:100%;" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join(''); const html = ['<img style="max-width:100%;max-height:100%;" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join('');
@ -84,7 +81,6 @@ import 'css!./style';
} }
function onSubmit(e) { function onSubmit(e) {
const file = currentFile; const file = currentFile;
if (!file) { if (!file) {
@ -113,7 +109,6 @@ import 'css!./style';
} }
connectionManager.getApiClient(currentServerId).uploadItemImage(currentItemId, imageType, file).then(() => { connectionManager.getApiClient(currentServerId).uploadItemImage(currentItemId, imageType, file).then(() => {
dlg.querySelector('#uploadImage').value = ''; dlg.querySelector('#uploadImage').value = '';
loading.hide(); loading.hide();
@ -126,7 +121,6 @@ import 'css!./style';
} }
function initEditor(page) { function initEditor(page) {
page.querySelector('form').addEventListener('submit', onSubmit); page.querySelector('form').addEventListener('submit', onSubmit);
page.querySelector('#uploadImage').addEventListener('change', function () { page.querySelector('#uploadImage').addEventListener('change', function () {
@ -139,11 +133,9 @@ import 'css!./style';
} }
function showEditor(options, resolve) { function showEditor(options, resolve) {
options = options || {}; options = options || {};
return import('text!./imageUploader.template.html').then(({default: template}) => { return import('text!./imageUploader.template.html').then(({default: template}) => {
currentItemId = options.itemId; currentItemId = options.itemId;
currentServerId = options.serverId; currentServerId = options.serverId;
@ -169,7 +161,6 @@ import 'css!./style';
// Has to be assigned a z-index after the call to .open() // Has to be assigned a z-index after the call to .open()
dlg.addEventListener('close', () => { dlg.addEventListener('close', () => {
if (layoutManager.tv) { if (layoutManager.tv) {
scrollHelper.centerFocus.off(dlg, false); scrollHelper.centerFocus.off(dlg, false);
} }
@ -185,16 +176,13 @@ import 'css!./style';
dlg.querySelector('#selectImageType').value = options.imageType || 'Primary'; dlg.querySelector('#selectImageType').value = options.imageType || 'Primary';
dlg.querySelector('.btnCancel').addEventListener('click', () => { dlg.querySelector('.btnCancel').addEventListener('click', () => {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
}); });
} }
export function show(options) { export function show(options) {
return new Promise(resolve => { return new Promise(resolve => {
hasChanges = false; hasChanges = false;
showEditor(options, resolve); showEditor(options, resolve);

View file

@ -7,7 +7,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
var hasChanges = false; var hasChanges = false;
function getBaseRemoteOptions() { function getBaseRemoteOptions() {
var options = {}; var options = {};
options.itemId = currentItem.Id; options.itemId = currentItem.Id;
@ -16,7 +15,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function reload(page, item, focusContext) { function reload(page, item, focusContext) {
loading.show(); loading.show();
var apiClient; var apiClient;
@ -25,7 +23,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
apiClient = connectionManager.getApiClient(item.ServerId); apiClient = connectionManager.getApiClient(item.ServerId);
reloadItem(page, item, apiClient, focusContext); reloadItem(page, item, apiClient, focusContext);
} else { } else {
apiClient = connectionManager.getApiClient(currentItem.ServerId); apiClient = connectionManager.getApiClient(currentItem.ServerId);
apiClient.getItem(apiClient.getCurrentUserId(), currentItem.Id).then(function (item) { apiClient.getItem(apiClient.getCurrentUserId(), currentItem.Id).then(function (item) {
reloadItem(page, item, apiClient, focusContext); reloadItem(page, item, apiClient, focusContext);
@ -34,7 +31,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function addListeners(container, className, eventName, fn) { function addListeners(container, className, eventName, fn) {
container.addEventListener(eventName, function (e) { container.addEventListener(eventName, function (e) {
var elem = dom.parentWithClass(e.target, className); var elem = dom.parentWithClass(e.target, className);
if (elem) { if (elem) {
@ -44,14 +40,11 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function reloadItem(page, item, apiClient, focusContext) { function reloadItem(page, item, apiClient, focusContext) {
currentItem = item; currentItem = item;
apiClient.getRemoteImageProviders(getBaseRemoteOptions()).then(function (providers) { apiClient.getRemoteImageProviders(getBaseRemoteOptions()).then(function (providers) {
var btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages'); var btnBrowseAllImages = page.querySelectorAll('.btnBrowseAllImages');
for (var i = 0, length = btnBrowseAllImages.length; i < length; i++) { for (var i = 0, length = btnBrowseAllImages.length; i < length; i++) {
if (providers.length) { if (providers.length) {
btnBrowseAllImages[i].classList.remove('hide'); btnBrowseAllImages[i].classList.remove('hide');
} else { } else {
@ -60,7 +53,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
apiClient.getItemImageInfos(currentItem.Id).then(function (imageInfos) { apiClient.getItemImageInfos(currentItem.Id).then(function (imageInfos) {
renderStandardImages(page, apiClient, item, imageInfos, providers); renderStandardImages(page, apiClient, item, imageInfos, providers);
renderBackdrops(page, apiClient, item, imageInfos, providers); renderBackdrops(page, apiClient, item, imageInfos, providers);
renderScreenshots(page, apiClient, item, imageInfos, providers); renderScreenshots(page, apiClient, item, imageInfos, providers);
@ -74,7 +66,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function getImageUrl(item, apiClient, type, index, options) { function getImageUrl(item, apiClient, type, index, options) {
options = options || {}; options = options || {};
options.type = type; options.type = type;
options.index = index; options.index = index;
@ -94,7 +85,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function getCardHtml(image, index, numImages, apiClient, imageProviders, imageSize, tagName, enableFooterButtons) { function getCardHtml(image, index, numImages, apiClient, imageProviders, imageSize, tagName, enableFooterButtons) {
// TODO move card creation code to Card component // TODO move card creation code to Card component
var html = ''; var html = '';
@ -153,7 +143,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
html += '<div class="cardText cardTextCentered">'; html += '<div class="cardText cardTextCentered">';
if (image.ImageType === 'Backdrop' || image.ImageType === 'Screenshot') { if (image.ImageType === 'Backdrop' || image.ImageType === 'Screenshot') {
if (index > 0) { if (index > 0) {
html += '<button type="button" is="paper-icon-button-light" class="btnMoveImage autoSize" data-imagetype="' + image.ImageType + '" data-index="' + image.ImageIndex + '" data-newindex="' + (image.ImageIndex - 1) + '" title="' + globalize.translate('MoveLeft') + '"><span class="material-icons chevron_left"></span></button>'; html += '<button type="button" is="paper-icon-button-light" class="btnMoveImage autoSize" data-imagetype="' + image.ImageType + '" data-index="' + image.ImageIndex + '" data-newindex="' + (image.ImageIndex - 1) + '" title="' + globalize.translate('MoveLeft') + '"><span class="material-icons chevron_left"></span></button>';
} else { } else {
@ -183,13 +172,10 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function deleteImage(context, itemId, type, index, apiClient, enableConfirmation) { function deleteImage(context, itemId, type, index, apiClient, enableConfirmation) {
var afterConfirm = function () { var afterConfirm = function () {
apiClient.deleteItemImage(itemId, type, index).then(function () { apiClient.deleteItemImage(itemId, type, index).then(function () {
hasChanges = true; hasChanges = true;
reload(context); reload(context);
}); });
}; };
@ -199,7 +185,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
require(['confirm'], function (confirm) { require(['confirm'], function (confirm) {
confirm.default({ confirm.default({
text: globalize.translate('ConfirmDeleteImage'), text: globalize.translate('ConfirmDeleteImage'),
@ -211,13 +196,10 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function moveImage(context, apiClient, itemId, type, index, newIndex, focusContext) { function moveImage(context, apiClient, itemId, type, index, newIndex, focusContext) {
apiClient.updateItemImageIndex(itemId, type, index, newIndex).then(function () { apiClient.updateItemImageIndex(itemId, type, index, newIndex).then(function () {
hasChanges = true; hasChanges = true;
reload(context, null, focusContext); reload(context, null, focusContext);
}, function () { }, function () {
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert(globalize.translate('DefaultErrorMessage')); alert(globalize.translate('DefaultErrorMessage'));
}); });
@ -225,7 +207,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function renderImages(page, item, apiClient, images, imageProviders, elem) { function renderImages(page, item, apiClient, images, imageProviders, elem) {
var html = ''; var html = '';
var imageSize = 300; var imageSize = 300;
@ -238,7 +219,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
var enableFooterButtons = !layoutManager.tv; var enableFooterButtons = !layoutManager.tv;
for (var i = 0, length = images.length; i < length; i++) { for (var i = 0, length = images.length; i < length; i++) {
var image = images[i]; var image = images[i];
html += getCardHtml(image, i, length, apiClient, imageProviders, imageSize, tagName, enableFooterButtons); html += getCardHtml(image, i, length, apiClient, imageProviders, imageSize, tagName, enableFooterButtons);
@ -249,7 +229,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function renderStandardImages(page, apiClient, item, imageInfos, imageProviders) { function renderStandardImages(page, apiClient, item, imageInfos, imageProviders) {
var images = imageInfos.filter(function (i) { var images = imageInfos.filter(function (i) {
return i.ImageType !== 'Screenshot' && i.ImageType !== 'Backdrop' && i.ImageType !== 'Chapter'; return i.ImageType !== 'Screenshot' && i.ImageType !== 'Backdrop' && i.ImageType !== 'Chapter';
}); });
@ -258,10 +237,8 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function renderBackdrops(page, apiClient, item, imageInfos, imageProviders) { function renderBackdrops(page, apiClient, item, imageInfos, imageProviders) {
var images = imageInfos.filter(function (i) { var images = imageInfos.filter(function (i) {
return i.ImageType === 'Backdrop'; return i.ImageType === 'Backdrop';
}).sort(function (a, b) { }).sort(function (a, b) {
return a.ImageIndex - b.ImageIndex; return a.ImageIndex - b.ImageIndex;
}); });
@ -275,10 +252,8 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function renderScreenshots(page, apiClient, item, imageInfos, imageProviders) { function renderScreenshots(page, apiClient, item, imageInfos, imageProviders) {
var images = imageInfos.filter(function (i) { var images = imageInfos.filter(function (i) {
return i.ImageType === 'Screenshot'; return i.ImageType === 'Screenshot';
}).sort(function (a, b) { }).sort(function (a, b) {
return a.ImageIndex - b.ImageIndex; return a.ImageIndex - b.ImageIndex;
}); });
@ -292,20 +267,15 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function showImageDownloader(page, imageType) { function showImageDownloader(page, imageType) {
require(['imageDownloader'], function (ImageDownloader) { require(['imageDownloader'], function (ImageDownloader) {
ImageDownloader.show(currentItem.Id, currentItem.ServerId, currentItem.Type, imageType).then(function () { ImageDownloader.show(currentItem.Id, currentItem.ServerId, currentItem.Type, imageType).then(function () {
hasChanges = true; hasChanges = true;
reload(page); reload(page);
}); });
}); });
} }
function showActionSheet(context, imageCard) { function showActionSheet(context, imageCard) {
var itemId = imageCard.getAttribute('data-id'); var itemId = imageCard.getAttribute('data-id');
var serverId = imageCard.getAttribute('data-serverid'); var serverId = imageCard.getAttribute('data-serverid');
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
@ -316,7 +286,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
var numImages = parseInt(imageCard.getAttribute('data-numimages')); var numImages = parseInt(imageCard.getAttribute('data-numimages'));
require(['actionsheet'], function (actionSheet) { require(['actionsheet'], function (actionSheet) {
var commands = []; var commands = [];
commands.push({ commands.push({
@ -353,9 +322,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
positionTo: imageCard positionTo: imageCard
}).then(function (id) { }).then(function (id) {
switch (id) { switch (id) {
case 'delete': case 'delete':
deleteImage(context, itemId, type, index, apiClient, false); deleteImage(context, itemId, type, index, apiClient, false);
break; break;
@ -371,13 +338,11 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
default: default:
break; break;
} }
}); });
}); });
} }
function initEditor(context, options) { function initEditor(context, options) {
var uploadButtons = context.querySelectorAll('.btnOpenUploadMenu'); var uploadButtons = context.querySelectorAll('.btnOpenUploadMenu');
var isFileInputSupported = appHost.supports('fileinput'); var isFileInputSupported = appHost.supports('fileinput');
for (var i = 0, length = uploadButtons.length; i < length; i++) { for (var i = 0, length = uploadButtons.length; i < length; i++) {
@ -392,7 +357,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
var imageType = this.getAttribute('data-imagetype'); var imageType = this.getAttribute('data-imagetype');
require(['imageUploader'], function (imageUploader) { require(['imageUploader'], function (imageUploader) {
imageUploader.show({ imageUploader.show({
theme: options.theme, theme: options.theme,
@ -401,7 +365,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
serverId: currentItem.ServerId serverId: currentItem.ServerId
}).then(function (hasChanged) { }).then(function (hasChanged) {
if (hasChanged) { if (hasChanged) {
hasChanges = true; hasChanges = true;
reload(context); reload(context);
@ -440,7 +403,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
} }
function showEditor(options, resolve, reject) { function showEditor(options, resolve, reject) {
var itemId = options.itemId; var itemId = options.itemId;
var serverId = options.serverId; var serverId = options.serverId;
@ -449,7 +411,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
require(['text!./imageeditor.template.html'], function (template) { require(['text!./imageeditor.template.html'], function (template) {
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) { apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true removeOnClose: true
}; };
@ -474,7 +435,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
// Has to be assigned a z-index after the call to .open() // Has to be assigned a z-index after the call to .open()
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (layoutManager.tv) { if (layoutManager.tv) {
scrollHelper.centerFocus.off(dlg, false); scrollHelper.centerFocus.off(dlg, false);
} }
@ -493,7 +453,6 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
reload(dlg, item); reload(dlg, item);
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
}); });
@ -502,9 +461,7 @@ define(['dialogHelper', 'connectionManager', 'loading', 'dom', 'layoutManager',
return { return {
show: function (options) { show: function (options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
hasChanges = false; hasChanges = false;
showEditor(options, resolve, reject); showEditor(options, resolve, reject);

View file

@ -133,11 +133,9 @@ import 'css!./style';
} }
export function getPrimaryImageAspectRatio(items) { export function getPrimaryImageAspectRatio(items) {
var values = []; var values = [];
for (var i = 0, length = items.length; i < length; i++) { for (var i = 0, length = items.length; i < length; i++) {
var ratio = items[i].PrimaryImageAspectRatio || 0; var ratio = items[i].PrimaryImageAspectRatio || 0;
if (!ratio) { if (!ratio) {
@ -193,7 +191,6 @@ import 'css!./style';
} }
export function fillImages(elems) { export function fillImages(elems) {
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
var elem = elems[0]; var elem = elems[0];
fillImage(elem); fillImage(elem);

View file

@ -142,7 +142,6 @@ import actionsheet from 'actionsheet';
} }
if (item.CanDelete && options.deleteItem !== false) { if (item.CanDelete && options.deleteItem !== false) {
if (item.Type === 'Playlist' || item.Type === 'BoxSet') { if (item.Type === 'Playlist' || item.Type === 'BoxSet') {
commands.push({ commands.push({
name: globalize.translate('Delete'), name: globalize.translate('Delete'),

View file

@ -2,7 +2,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
'use strict'; 'use strict';
function getDisplayName(item, options = {}) { function getDisplayName(item, options = {}) {
if (!item) { if (!item) {
throw new Error('null item passed into getDisplayName'); throw new Error('null item passed into getDisplayName');
} }
@ -22,7 +21,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
if (item.Type === 'Episode' && item.ParentIndexNumber === 0) { if (item.Type === 'Episode' && item.ParentIndexNumber === 0) {
name = globalize.translate('ValueSpecialEpisodeName', name); name = globalize.translate('ValueSpecialEpisodeName', name);
} else if ((item.Type === 'Episode' || item.Type === 'Program') && item.IndexNumber != null && item.ParentIndexNumber != null && options.includeIndexNumber !== false) { } else if ((item.Type === 'Episode' || item.Type === 'Program') && item.IndexNumber != null && item.ParentIndexNumber != null && options.includeIndexNumber !== false) {
var displayIndexNumber = item.IndexNumber; var displayIndexNumber = item.IndexNumber;
var number = displayIndexNumber; var number = displayIndexNumber;
@ -35,7 +33,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
} }
if (item.IndexNumberEnd) { if (item.IndexNumberEnd) {
displayIndexNumber = item.IndexNumberEnd; displayIndexNumber = item.IndexNumberEnd;
number += '-' + displayIndexNumber; number += '-' + displayIndexNumber;
} }
@ -49,7 +46,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
} }
function supportsAddingToCollection(item) { function supportsAddingToCollection(item) {
var invalidTypes = ['Genre', 'MusicGenre', 'Studio', 'UserView', 'CollectionFolder', 'Audio', 'Program', 'Timer', 'SeriesTimer']; var invalidTypes = ['Genre', 'MusicGenre', 'Studio', 'UserView', 'CollectionFolder', 'Audio', 'Program', 'Timer', 'SeriesTimer'];
if (item.Type === 'Recording') { if (item.Type === 'Recording') {
@ -62,7 +58,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
} }
function supportsAddingToPlaylist(item) { function supportsAddingToPlaylist(item) {
if (item.Type === 'Program') { if (item.Type === 'Program') {
return false; return false;
} }
@ -96,7 +91,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
} }
function canEdit(user, item) { function canEdit(user, item) {
var itemType = item.Type; var itemType = item.Type;
if (itemType === 'UserRootFolder' || itemType === 'UserView') { if (itemType === 'UserRootFolder' || itemType === 'UserView') {
@ -129,7 +123,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
} }
function isLocalItem(item) { function isLocalItem(item) {
if (item && item.Id && item.Id.indexOf('local') === 0) { if (item && item.Id && item.Id.indexOf('local') === 0) {
return true; return true;
} }
@ -144,7 +137,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
isLocalItem: isLocalItem, isLocalItem: isLocalItem,
canIdentify: function (user, item) { canIdentify: function (user, item) {
var itemType = item.Type; var itemType = item.Type;
if (itemType === 'Movie' || if (itemType === 'Movie' ||
@ -156,9 +148,7 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
itemType === 'MusicAlbum' || itemType === 'MusicAlbum' ||
itemType === 'MusicArtist' || itemType === 'MusicArtist' ||
itemType === 'MusicVideo') { itemType === 'MusicVideo') {
if (user.Policy.IsAdministrator) { if (user.Policy.IsAdministrator) {
if (!isLocalItem(item)) { if (!isLocalItem(item)) {
return true; return true;
} }
@ -171,7 +161,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
canEdit: canEdit, canEdit: canEdit,
canEditImages: function (user, item) { canEditImages: function (user, item) {
var itemType = item.Type; var itemType = item.Type;
if (item.MediaType === 'Photo') { if (item.MediaType === 'Photo') {
@ -180,7 +169,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
if (itemType === 'UserView') { if (itemType === 'UserView') {
if (user.Policy.IsAdministrator) { if (user.Policy.IsAdministrator) {
return true; return true;
} }
@ -197,7 +185,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
canSync: function (user, item) { canSync: function (user, item) {
if (user && !user.Policy.EnableContentDownloading) { if (user && !user.Policy.EnableContentDownloading) {
return false; return false;
} }
@ -210,7 +197,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
canShare: function (item, user) { canShare: function (item, user) {
if (item.Type === 'Program') { if (item.Type === 'Program') {
return false; return false;
} }
@ -239,7 +225,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
canMarkPlayed: function (item) { canMarkPlayed: function (item) {
if (item.Type === 'Program') { if (item.Type === 'Program') {
return false; return false;
} }
@ -269,7 +254,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
canRate: function (item) { canRate: function (item) {
if (item.Type === 'Program' if (item.Type === 'Program'
|| item.Type === 'Timer' || item.Type === 'Timer'
|| item.Type === 'SeriesTimer' || item.Type === 'SeriesTimer'
@ -284,7 +268,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
canConvert: function (item, user) { canConvert: function (item, user) {
if (!user.Policy.EnableMediaConversion) { if (!user.Policy.EnableMediaConversion) {
return false; return false;
} }
@ -320,16 +303,13 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
canRefreshMetadata: function (item, user) { canRefreshMetadata: function (item, user) {
if (user.Policy.IsAdministrator) { if (user.Policy.IsAdministrator) {
var collectionType = item.CollectionType; var collectionType = item.CollectionType;
if (collectionType === 'livetv') { if (collectionType === 'livetv') {
return false; return false;
} }
if (item.Type !== 'Timer' && item.Type !== 'SeriesTimer' && item.Type !== 'Program' && item.Type !== 'TvChannel' && !(item.Type === 'Recording' && item.Status !== 'Completed')) { if (item.Type !== 'Timer' && item.Type !== 'SeriesTimer' && item.Type !== 'Program' && item.Type !== 'TvChannel' && !(item.Type === 'Recording' && item.Status !== 'Completed')) {
if (!isLocalItem(item)) { if (!isLocalItem(item)) {
return true; return true;
} }
@ -340,7 +320,6 @@ define(['apphost', 'globalize'], function (appHost, globalize) {
}, },
supportsMediaSourceSelection: function (item) { supportsMediaSourceSelection: function (item) {
if (item.MediaType !== 'Video') { if (item.MediaType !== 'Video') {
return false; return false;
} }

View file

@ -35,7 +35,6 @@ import 'cardStyle';
} }
function searchForIdentificationResults(page) { function searchForIdentificationResults(page) {
let lookupInfo = { let lookupInfo = {
ProviderIds: {} ProviderIds: {}
}; };
@ -45,11 +44,9 @@ import 'cardStyle';
const identifyField = page.querySelectorAll('.identifyField'); const identifyField = page.querySelectorAll('.identifyField');
let value; let value;
for (i = 0, length = identifyField.length; i < length; i++) { for (i = 0, length = identifyField.length; i < length; i++) {
value = identifyField[i].value; value = identifyField[i].value;
if (value) { if (value) {
if (identifyField[i].type === 'number') { if (identifyField[i].type === 'number') {
value = parseInt(value); value = parseInt(value);
} }
@ -62,7 +59,6 @@ import 'cardStyle';
const txtLookupId = page.querySelectorAll('.txtLookupId'); const txtLookupId = page.querySelectorAll('.txtLookupId');
for (i = 0, length = txtLookupId.length; i < length; i++) { for (i = 0, length = txtLookupId.length; i < length; i++) {
value = txtLookupId[i].value; value = txtLookupId[i].value;
if (value) { if (value) {
@ -100,14 +96,12 @@ import 'cardStyle';
dataType: 'json' dataType: 'json'
}).then(results => { }).then(results => {
loading.hide(); loading.hide();
showIdentificationSearchResults(page, results); showIdentificationSearchResults(page, results);
}); });
} }
function showIdentificationSearchResults(page, results) { function showIdentificationSearchResults(page, results) {
const identificationSearchResults = page.querySelector('.identificationSearchResults'); const identificationSearchResults = page.querySelector('.identificationSearchResults');
page.querySelector('.popupIdentifyForm').classList.add('hide'); page.querySelector('.popupIdentifyForm').classList.add('hide');
@ -119,7 +113,6 @@ import 'cardStyle';
let i; let i;
let length; let length;
for (i = 0, length = results.length; i < length; i++) { for (i = 0, length = results.length; i < length; i++) {
const result = results[i]; const result = results[i];
html += getSearchResultHtml(result, i); html += getSearchResultHtml(result, i);
} }
@ -133,17 +126,14 @@ import 'cardStyle';
const currentResult = results[index]; const currentResult = results[index];
if (currentItem != null) { if (currentItem != null) {
showIdentifyOptions(page, currentResult); showIdentifyOptions(page, currentResult);
} else { } else {
finishFindNewDialog(page, currentResult); finishFindNewDialog(page, currentResult);
} }
} }
const searchImages = elem.querySelectorAll('.card'); const searchImages = elem.querySelectorAll('.card');
for (i = 0, length = searchImages.length; i < length; i++) { for (i = 0, length = searchImages.length; i < length; i++) {
searchImages[i].addEventListener('click', onSearchImageClick); searchImages[i].addEventListener('click', onSearchImageClick);
} }
@ -161,7 +151,6 @@ import 'cardStyle';
} }
function showIdentifyOptions(page, identifyResult) { function showIdentifyOptions(page, identifyResult) {
const identifyOptionsForm = page.querySelector('.identifyOptionsForm'); const identifyOptionsForm = page.querySelector('.identifyOptionsForm');
page.querySelector('.popupIdentifyForm').classList.add('hide'); page.querySelector('.popupIdentifyForm').classList.add('hide');
@ -193,7 +182,6 @@ import 'cardStyle';
} }
function getSearchResultHtml(result, index) { function getSearchResultHtml(result, index) {
// TODO move card creation code to Card component // TODO move card creation code to Card component
let html = ''; let html = '';
@ -234,7 +222,6 @@ import 'cardStyle';
html += `<div class="cardImageContainer coveredImage" style="background-image:url('${displayUrl}');"></div>`; html += `<div class="cardImageContainer coveredImage" style="background-image:url('${displayUrl}');"></div>`;
} else { } else {
html += `<div class="cardImageContainer coveredImage defaultCardBackground defaultCardBackground1"><div class="cardText cardCenteredText">${result.Name}</div></div>`; html += `<div class="cardImageContainer coveredImage defaultCardBackground defaultCardBackground1"><div class="cardText cardCenteredText">${result.Name}</div></div>`;
} }
html += '</div>'; html += '</div>';
@ -257,7 +244,6 @@ import 'cardStyle';
} }
for (let i = 0; i < numLines; i++) { for (let i = 0; i < numLines; i++) {
if (i === 0) { if (i === 0) {
html += '<div class="cardText cardText-first cardTextCentered">'; html += '<div class="cardText cardText-first cardTextCentered">';
} else { } else {
@ -279,7 +265,6 @@ import 'cardStyle';
} }
function submitIdentficationResult(page) { function submitIdentficationResult(page) {
loading.show(); loading.show();
const options = { const options = {
@ -295,14 +280,11 @@ import 'cardStyle';
contentType: 'application/json' contentType: 'application/json'
}).then(() => { }).then(() => {
hasChanges = true; hasChanges = true;
loading.hide(); loading.hide();
dialogHelper.close(page); dialogHelper.close(page);
}, () => { }, () => {
loading.hide(); loading.hide();
dialogHelper.close(page); dialogHelper.close(page);
@ -310,15 +292,12 @@ import 'cardStyle';
} }
function showIdentificationForm(page, item) { function showIdentificationForm(page, item) {
const apiClient = getApiClient(); const apiClient = getApiClient();
apiClient.getJSON(apiClient.getUrl(`Items/${item.Id}/ExternalIdInfos`)).then(idList => { apiClient.getJSON(apiClient.getUrl(`Items/${item.Id}/ExternalIdInfos`)).then(idList => {
let html = ''; let html = '';
for (let i = 0, length = idList.length; i < length; i++) { for (let i = 0, length = idList.length; i < length; i++) {
const idInfo = idList[i]; const idInfo = idList[i];
const id = `txtLookup${idInfo.Key}`; const id = `txtLookup${idInfo.Key}`;
@ -340,11 +319,9 @@ import 'cardStyle';
page.querySelector('#txtLookupName').value = ''; page.querySelector('#txtLookupName').value = '';
if (item.Type === 'Person' || item.Type === 'BoxSet') { if (item.Type === 'Person' || item.Type === 'BoxSet') {
page.querySelector('.fldLookupYear').classList.add('hide'); page.querySelector('.fldLookupYear').classList.add('hide');
page.querySelector('#txtLookupYear').value = ''; page.querySelector('#txtLookupYear').value = '';
} else { } else {
page.querySelector('.fldLookupYear').classList.remove('hide'); page.querySelector('.fldLookupYear').classList.remove('hide');
page.querySelector('#txtLookupYear').value = ''; page.querySelector('#txtLookupYear').value = '';
} }
@ -356,15 +333,12 @@ import 'cardStyle';
} }
function showEditor(itemId) { function showEditor(itemId) {
loading.show(); loading.show();
return import('text!./itemidentifier.template.html').then(({default: template}) => { return import('text!./itemidentifier.template.html').then(({default: template}) => {
const apiClient = getApiClient(); const apiClient = getApiClient();
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(item => { apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(item => {
currentItem = item; currentItem = item;
currentItemType = currentItem.Type; currentItemType = currentItem.Type;
@ -406,21 +380,18 @@ import 'cardStyle';
dialogHelper.open(dlg); dialogHelper.open(dlg);
dlg.querySelector('.popupIdentifyForm').addEventListener('submit', e => { dlg.querySelector('.popupIdentifyForm').addEventListener('submit', e => {
e.preventDefault(); e.preventDefault();
searchForIdentificationResults(dlg); searchForIdentificationResults(dlg);
return false; return false;
}); });
dlg.querySelector('.identifyOptionsForm').addEventListener('submit', e => { dlg.querySelector('.identifyOptionsForm').addEventListener('submit', e => {
e.preventDefault(); e.preventDefault();
submitIdentficationResult(dlg); submitIdentficationResult(dlg);
return false; return false;
}); });
dlg.querySelector('.btnCancel').addEventListener('click', () => { dlg.querySelector('.btnCancel').addEventListener('click', () => {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
@ -433,7 +404,6 @@ import 'cardStyle';
} }
function onDialogClosed() { function onDialogClosed() {
loading.hide(); loading.hide();
if (hasChanges) { if (hasChanges) {
currentResolve(); currentResolve();
@ -444,12 +414,10 @@ import 'cardStyle';
// TODO investigate where this was used // TODO investigate where this was used
function showEditorFindNew(itemName, itemYear, itemType, resolveFunc) { function showEditorFindNew(itemName, itemYear, itemType, resolveFunc) {
currentItem = null; currentItem = null;
currentItemType = itemType; currentItemType = itemType;
return import('text!./itemidentifier.template.html').then(({default: template}) => { return import('text!./itemidentifier.template.html').then(({default: template}) => {
const dialogOptions = { const dialogOptions = {
size: 'small', size: 'small',
removeOnClose: true, removeOnClose: true,
@ -477,19 +445,16 @@ import 'cardStyle';
dialogHelper.open(dlg); dialogHelper.open(dlg);
dlg.querySelector('.btnCancel').addEventListener('click', () => { dlg.querySelector('.btnCancel').addEventListener('click', () => {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
dlg.querySelector('.popupIdentifyForm').addEventListener('submit', e => { dlg.querySelector('.popupIdentifyForm').addEventListener('submit', e => {
e.preventDefault(); e.preventDefault();
searchForIdentificationResults(dlg); searchForIdentificationResults(dlg);
return false; return false;
}); });
dlg.addEventListener('close', () => { dlg.addEventListener('close', () => {
loading.hide(); loading.hide();
const foundItem = hasChanges ? currentSearchResult : null; const foundItem = hasChanges ? currentSearchResult : null;
@ -503,16 +468,12 @@ import 'cardStyle';
} }
function showIdentificationFormFindNew(dlg, itemName, itemYear, itemType) { function showIdentificationFormFindNew(dlg, itemName, itemYear, itemType) {
dlg.querySelector('#txtLookupName').value = itemName; dlg.querySelector('#txtLookupName').value = itemName;
if (itemType === 'Person' || itemType === 'BoxSet') { if (itemType === 'Person' || itemType === 'BoxSet') {
dlg.querySelector('.fldLookupYear').classList.add('hide'); dlg.querySelector('.fldLookupYear').classList.add('hide');
dlg.querySelector('#txtLookupYear').value = ''; dlg.querySelector('#txtLookupYear').value = '';
} else { } else {
dlg.querySelector('.fldLookupYear').classList.remove('hide'); dlg.querySelector('.fldLookupYear').classList.remove('hide');
dlg.querySelector('#txtLookupYear').value = itemYear; dlg.querySelector('#txtLookupYear').value = itemYear;
} }
@ -521,9 +482,7 @@ import 'cardStyle';
} }
export function show(itemId, serverId) { export function show(itemId, serverId) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
currentResolve = resolve; currentResolve = resolve;
currentReject = reject; currentReject = reject;
currentServerId = serverId; currentServerId = serverId;
@ -534,9 +493,7 @@ import 'cardStyle';
} }
export function showFindNew(itemName, itemYear, itemType, serverId) { export function showFindNew(itemName, itemYear, itemType, serverId) {
return new Promise((resolve) => { return new Promise((resolve) => {
currentServerId = serverId; currentServerId = serverId;
hasChanges = false; hasChanges = false;

View file

@ -2,23 +2,19 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
'use strict'; 'use strict';
function onUserDataChanged(e, apiClient, userData) { function onUserDataChanged(e, apiClient, userData) {
var instance = this; var instance = this;
var eventsToMonitor = getEventsToMonitor(instance); var eventsToMonitor = getEventsToMonitor(instance);
// TODO: Check user data change reason? // TODO: Check user data change reason?
if (eventsToMonitor.indexOf('markfavorite') !== -1) { if (eventsToMonitor.indexOf('markfavorite') !== -1) {
instance.notifyRefreshNeeded(); instance.notifyRefreshNeeded();
} else if (eventsToMonitor.indexOf('markplayed') !== -1) { } else if (eventsToMonitor.indexOf('markplayed') !== -1) {
instance.notifyRefreshNeeded(); instance.notifyRefreshNeeded();
} }
} }
function getEventsToMonitor(instance) { function getEventsToMonitor(instance) {
var options = instance.options; var options = instance.options;
var monitor = options ? options.monitorEvents : null; var monitor = options ? options.monitorEvents : null;
if (monitor) { if (monitor) {
@ -29,21 +25,17 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function onTimerCreated(e, apiClient, data) { function onTimerCreated(e, apiClient, data) {
var instance = this; var instance = this;
if (getEventsToMonitor(instance).indexOf('timers') !== -1) { if (getEventsToMonitor(instance).indexOf('timers') !== -1) {
instance.notifyRefreshNeeded(); instance.notifyRefreshNeeded();
return; return;
} }
} }
function onSeriesTimerCreated(e, apiClient, data) { function onSeriesTimerCreated(e, apiClient, data) {
var instance = this; var instance = this;
if (getEventsToMonitor(instance).indexOf('seriestimers') !== -1) { if (getEventsToMonitor(instance).indexOf('seriestimers') !== -1) {
instance.notifyRefreshNeeded(); instance.notifyRefreshNeeded();
return; return;
} }
@ -53,28 +45,23 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
var instance = this; var instance = this;
if (getEventsToMonitor(instance).indexOf('timers') !== -1) { if (getEventsToMonitor(instance).indexOf('timers') !== -1) {
instance.notifyRefreshNeeded(); instance.notifyRefreshNeeded();
return; return;
} }
} }
function onSeriesTimerCancelled(e, apiClient, data) { function onSeriesTimerCancelled(e, apiClient, data) {
var instance = this; var instance = this;
if (getEventsToMonitor(instance).indexOf('seriestimers') !== -1) { if (getEventsToMonitor(instance).indexOf('seriestimers') !== -1) {
instance.notifyRefreshNeeded(); instance.notifyRefreshNeeded();
return; return;
} }
} }
function onLibraryChanged(e, apiClient, data) { function onLibraryChanged(e, apiClient, data) {
var instance = this; var instance = this;
var eventsToMonitor = getEventsToMonitor(instance); var eventsToMonitor = getEventsToMonitor(instance);
if (eventsToMonitor.indexOf('seriestimers') !== -1 || eventsToMonitor.indexOf('timers') !== -1) { if (eventsToMonitor.indexOf('seriestimers') !== -1 || eventsToMonitor.indexOf('timers') !== -1) {
// yes this is an assumption // yes this is an assumption
return; return;
} }
@ -101,23 +88,18 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function onPlaybackStopped(e, stopInfo) { function onPlaybackStopped(e, stopInfo) {
var instance = this; var instance = this;
var state = stopInfo.state; var state = stopInfo.state;
var eventsToMonitor = getEventsToMonitor(instance); var eventsToMonitor = getEventsToMonitor(instance);
if (state.NowPlayingItem && state.NowPlayingItem.MediaType === 'Video') { if (state.NowPlayingItem && state.NowPlayingItem.MediaType === 'Video') {
if (eventsToMonitor.indexOf('videoplayback') !== -1) { if (eventsToMonitor.indexOf('videoplayback') !== -1) {
instance.notifyRefreshNeeded(true); instance.notifyRefreshNeeded(true);
return; return;
} }
} else if (state.NowPlayingItem && state.NowPlayingItem.MediaType === 'Audio') { } else if (state.NowPlayingItem && state.NowPlayingItem.MediaType === 'Audio') {
if (eventsToMonitor.indexOf('audioplayback') !== -1) { if (eventsToMonitor.indexOf('audioplayback') !== -1) {
instance.notifyRefreshNeeded(true); instance.notifyRefreshNeeded(true);
return; return;
} }
@ -125,7 +107,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function addNotificationEvent(instance, name, handler, owner) { function addNotificationEvent(instance, name, handler, owner) {
var localHandler = handler.bind(instance); var localHandler = handler.bind(instance);
owner = owner || serverNotifications; owner = owner || serverNotifications;
events.on(owner, name, localHandler); events.on(owner, name, localHandler);
@ -133,7 +114,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function removeNotificationEvent(instance, name, owner) { function removeNotificationEvent(instance, name, owner) {
var handler = instance['event_' + name]; var handler = instance['event_' + name];
if (handler) { if (handler) {
owner = owner || serverNotifications; owner = owner || serverNotifications;
@ -143,7 +123,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function ItemsRefresher(options) { function ItemsRefresher(options) {
this.options = options || {}; this.options = options || {};
addNotificationEvent(this, 'UserDataChanged', onUserDataChanged); addNotificationEvent(this, 'UserDataChanged', onUserDataChanged);
@ -156,24 +135,19 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
ItemsRefresher.prototype.pause = function () { ItemsRefresher.prototype.pause = function () {
clearRefreshInterval(this, true); clearRefreshInterval(this, true);
this.paused = true; this.paused = true;
}; };
ItemsRefresher.prototype.resume = function (options) { ItemsRefresher.prototype.resume = function (options) {
this.paused = false; this.paused = false;
var refreshIntervalEndTime = this.refreshIntervalEndTime; var refreshIntervalEndTime = this.refreshIntervalEndTime;
if (refreshIntervalEndTime) { if (refreshIntervalEndTime) {
var remainingMs = refreshIntervalEndTime - new Date().getTime(); var remainingMs = refreshIntervalEndTime - new Date().getTime();
if (remainingMs > 0 && !this.needsRefresh) { if (remainingMs > 0 && !this.needsRefresh) {
resetRefreshInterval(this, remainingMs); resetRefreshInterval(this, remainingMs);
} else { } else {
this.needsRefresh = true; this.needsRefresh = true;
this.refreshIntervalEndTime = null; this.refreshIntervalEndTime = null;
@ -188,7 +162,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
}; };
ItemsRefresher.prototype.refreshItems = function () { ItemsRefresher.prototype.refreshItems = function () {
if (!this.fetchData) { if (!this.fetchData) {
return Promise.resolve(); return Promise.resolve();
} }
@ -204,7 +177,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
}; };
ItemsRefresher.prototype.notifyRefreshNeeded = function (isInForeground) { ItemsRefresher.prototype.notifyRefreshNeeded = function (isInForeground) {
if (this.paused) { if (this.paused) {
this.needsRefresh = true; this.needsRefresh = true;
return; return;
@ -223,9 +195,7 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
}; };
function clearRefreshInterval(instance, isPausing) { function clearRefreshInterval(instance, isPausing) {
if (instance.refreshInterval) { if (instance.refreshInterval) {
clearInterval(instance.refreshInterval); clearInterval(instance.refreshInterval);
instance.refreshInterval = null; instance.refreshInterval = null;
@ -236,7 +206,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function resetRefreshInterval(instance, intervalMs) { function resetRefreshInterval(instance, intervalMs) {
clearRefreshInterval(instance); clearRefreshInterval(instance);
if (!intervalMs) { if (!intervalMs) {
@ -253,7 +222,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
function onDataFetched(result) { function onDataFetched(result) {
resetRefreshInterval(this); resetRefreshInterval(this);
if (this.afterRefresh) { if (this.afterRefresh) {
@ -262,7 +230,6 @@ define(['playbackManager', 'serverNotifications', 'events'], function (playbackM
} }
ItemsRefresher.prototype.destroy = function () { ItemsRefresher.prototype.destroy = function () {
clearRefreshInterval(this); clearRefreshInterval(this);
removeNotificationEvent(this, 'UserDataChanged'); removeNotificationEvent(this, 'UserDataChanged');

View file

@ -16,7 +16,6 @@ define(['browser', 'appSettings', 'events'], function (browser, appSettings, eve
} }
LayoutManager.prototype.setLayout = function (layout, save) { LayoutManager.prototype.setLayout = function (layout, save) {
if (!layout || layout === 'auto') { if (!layout || layout === 'auto') {
this.autoLayout(); this.autoLayout();
@ -41,7 +40,6 @@ define(['browser', 'appSettings', 'events'], function (browser, appSettings, eve
}; };
LayoutManager.prototype.autoLayout = function () { LayoutManager.prototype.autoLayout = function () {
// Take a guess at initial layout. The consuming app can override // Take a guess at initial layout. The consuming app can override
if (browser.mobile) { if (browser.mobile) {
this.setLayout('mobile', false); this.setLayout('mobile', false);

View file

@ -18,9 +18,7 @@ import 'emby-ratingbutton';
import 'emby-playstatebutton'; import 'emby-playstatebutton';
function getIndex(item, options) { function getIndex(item, options) {
if (options.index === 'disc') { if (options.index === 'disc') {
return item.ParentIndexNumber == null ? '' : globalize.translate('ValueDiscNumber', item.ParentIndexNumber); return item.ParentIndexNumber == null ? '' : globalize.translate('ValueDiscNumber', item.ParentIndexNumber);
} }
@ -29,7 +27,6 @@ import 'emby-playstatebutton';
let name; let name;
if (sortBy.indexOf('sortname') === 0) { if (sortBy.indexOf('sortname') === 0) {
if (item.Type === 'Episode') { if (item.Type === 'Episode') {
return ''; return '';
} }
@ -45,11 +42,9 @@ import 'emby-playstatebutton';
return name.toUpperCase(); return name.toUpperCase();
} }
if (sortBy.indexOf('officialrating') === 0) { if (sortBy.indexOf('officialrating') === 0) {
return item.OfficialRating || globalize.translate('Unrated'); return item.OfficialRating || globalize.translate('Unrated');
} }
if (sortBy.indexOf('communityrating') === 0) { if (sortBy.indexOf('communityrating') === 0) {
if (item.CommunityRating == null) { if (item.CommunityRating == null) {
return globalize.translate('Unrated'); return globalize.translate('Unrated');
} }
@ -57,7 +52,6 @@ import 'emby-playstatebutton';
return Math.floor(item.CommunityRating); return Math.floor(item.CommunityRating);
} }
if (sortBy.indexOf('criticrating') === 0) { if (sortBy.indexOf('criticrating') === 0) {
if (item.CriticRating == null) { if (item.CriticRating == null) {
return globalize.translate('Unrated'); return globalize.translate('Unrated');
} }
@ -65,7 +59,6 @@ import 'emby-playstatebutton';
return Math.floor(item.CriticRating); return Math.floor(item.CriticRating);
} }
if (sortBy.indexOf('albumartist') === 0) { if (sortBy.indexOf('albumartist') === 0) {
// SortName // SortName
if (!item.AlbumArtist) { if (!item.AlbumArtist) {
return ''; return '';
@ -84,7 +77,6 @@ import 'emby-playstatebutton';
} }
function getImageUrl(item, width) { function getImageUrl(item, width) {
const apiClient = connectionManager.getApiClient(item.ServerId); const apiClient = connectionManager.getApiClient(item.ServerId);
let itemId; let itemId;
@ -114,7 +106,6 @@ import 'emby-playstatebutton';
} }
function getChannelImageUrl(item, width) { function getChannelImageUrl(item, width) {
const apiClient = connectionManager.getApiClient(item.ServerId); const apiClient = connectionManager.getApiClient(item.ServerId);
const options = { const options = {
maxWidth: width * 2, maxWidth: width * 2,
@ -161,11 +152,9 @@ import 'emby-playstatebutton';
} }
function getRightButtonsHtml(options) { function getRightButtonsHtml(options) {
let html = ''; let html = '';
for (let i = 0, length = options.rightButtons.length; i < length; i++) { for (let i = 0, length = options.rightButtons.length; i < length; i++) {
const button = options.rightButtons[i]; const button = options.rightButtons[i];
html += `<button is="paper-icon-button-light" class="listItemButton itemAction" data-action="custom" data-customaction="${button.id}" title="${button.title}"><span class="material-icons ${button.icon}"></span></button>`; html += `<button is="paper-icon-button-light" class="listItemButton itemAction" data-action="custom" data-customaction="${button.id}" title="${button.title}"><span class="material-icons ${button.icon}"></span></button>`;
@ -179,7 +168,6 @@ import 'emby-playstatebutton';
} }
export function getListViewHtml(options) { export function getListViewHtml(options) {
const items = options.items; const items = options.items;
let groupTitle = ''; let groupTitle = '';
@ -198,17 +186,14 @@ import 'emby-playstatebutton';
const containerAlbumArtistIds = (options.containerAlbumArtists || []).map(getId); const containerAlbumArtistIds = (options.containerAlbumArtists || []).map(getId);
for (let i = 0, length = items.length; i < length; i++) { for (let i = 0, length = items.length; i < length; i++) {
const item = items[i]; const item = items[i];
let html = ''; let html = '';
if (options.showIndex) { if (options.showIndex) {
const itemGroupTitle = getIndex(item, options); const itemGroupTitle = getIndex(item, options);
if (itemGroupTitle !== groupTitle) { if (itemGroupTitle !== groupTitle) {
if (html) { if (html) {
html += '</div>'; html += '</div>';
} }
@ -258,14 +243,12 @@ import 'emby-playstatebutton';
const channelIdData = item.ChannelId ? (` data-channelid="${item.ChannelId}"`) : ''; const channelIdData = item.ChannelId ? (` data-channelid="${item.ChannelId}"`) : '';
if (enableContentWrapper) { if (enableContentWrapper) {
cssClass += ' listItem-withContentWrapper'; cssClass += ' listItem-withContentWrapper';
} }
html += `<${outerTagName} class="${cssClass}"${playlistItemId} data-action="${action}" data-isfolder="${item.IsFolder}" data-id="${item.Id}" data-serverid="${item.ServerId}" data-type="${item.Type}"${mediaTypeData}${collectionTypeData}${channelIdData}${positionTicksData}${collectionIdData}${playlistIdData}>`; html += `<${outerTagName} class="${cssClass}"${playlistItemId} data-action="${action}" data-isfolder="${item.IsFolder}" data-id="${item.Id}" data-serverid="${item.ServerId}" data-type="${item.Type}"${mediaTypeData}${collectionTypeData}${channelIdData}${positionTicksData}${collectionIdData}${playlistIdData}>`;
if (enableContentWrapper) { if (enableContentWrapper) {
html += '<div class="listItem-content">'; html += '<div class="listItem-content">';
} }
@ -317,7 +300,6 @@ import 'emby-playstatebutton';
} }
if (options.showIndexNumberLeft) { if (options.showIndexNumberLeft) {
html += '<div class="listItem-indexnumberleft">'; html += '<div class="listItem-indexnumberleft">';
html += (item.IndexNumber || '&nbsp;'); html += (item.IndexNumber || '&nbsp;');
html += '</div>'; html += '</div>';
@ -365,9 +347,7 @@ import 'emby-playstatebutton';
} }
if (options.showParentTitle && options.parentTitleWithTitle) { if (options.showParentTitle && options.parentTitleWithTitle) {
if (displayName) { if (displayName) {
if (parentTitle) { if (parentTitle) {
parentTitle += ' - '; parentTitle += ' - ';
} }
@ -385,18 +365,15 @@ import 'emby-playstatebutton';
if (item.IsFolder) { if (item.IsFolder) {
if (options.artist !== false) { if (options.artist !== false) {
if (item.AlbumArtist && item.Type === 'MusicAlbum') { if (item.AlbumArtist && item.Type === 'MusicAlbum') {
textlines.push(item.AlbumArtist); textlines.push(item.AlbumArtist);
} }
} }
} else { } else {
let showArtist = options.artist === true; let showArtist = options.artist === true;
const artistItems = item.ArtistItems; const artistItems = item.ArtistItems;
if (!showArtist && options.artist !== false) { if (!showArtist && options.artist !== false) {
if (!artistItems || !artistItems.length) { if (!artistItems || !artistItems.length) {
showArtist = true; showArtist = true;
} else if (artistItems.length > 1 || !containerAlbumArtistIds.includes(artistItems[0].Id)) { } else if (artistItems.length > 1 || !containerAlbumArtistIds.includes(artistItems[0].Id)) {
@ -405,7 +382,6 @@ import 'emby-playstatebutton';
} }
if (showArtist) { if (showArtist) {
if (artistItems && item.Type !== 'MusicAlbum') { if (artistItems && item.Type !== 'MusicAlbum') {
textlines.push(artistItems.map(a => { textlines.push(artistItems.map(a => {
return a.Name; return a.Name;
@ -415,7 +391,6 @@ import 'emby-playstatebutton';
} }
if (item.Type === 'TvChannel') { if (item.Type === 'TvChannel') {
if (item.CurrentProgram) { if (item.CurrentProgram) {
textlines.push(itemHelper.getDisplayName(item.CurrentProgram)); textlines.push(itemHelper.getDisplayName(item.CurrentProgram));
} }
@ -436,7 +411,6 @@ import 'emby-playstatebutton';
if (options.mediaInfo !== false) { if (options.mediaInfo !== false) {
if (!enableSideMediaInfo) { if (!enableSideMediaInfo) {
const mediaInfoClass = 'secondary listItemMediaInfo listItemBodyText'; const mediaInfoClass = 'secondary listItemMediaInfo listItemBodyText';
html += `<div class="${mediaInfoClass}">`; html += `<div class="${mediaInfoClass}">`;
@ -481,7 +455,6 @@ import 'emby-playstatebutton';
html += '<div class="listViewUserDataButtons">'; html += '<div class="listViewUserDataButtons">';
if (!clickEntireItem) { if (!clickEntireItem) {
if (options.addToListButton) { if (options.addToListButton) {
html += '<button is="paper-icon-button-light" class="listItemButton itemAction" data-action="addtoplaylist"><span class="material-icons playlist_add"></span></button>'; html += '<button is="paper-icon-button-light" class="listItemButton itemAction" data-action="addtoplaylist"><span class="material-icons playlist_add"></span></button>';
} }
@ -495,7 +468,6 @@ import 'emby-playstatebutton';
} }
if (options.enableUserDataButtons !== false) { if (options.enableUserDataButtons !== false) {
const userData = item.UserData || {}; const userData = item.UserData || {};
const likes = userData.Likes == null ? '' : userData.Likes; const likes = userData.Likes == null ? '' : userData.Likes;

View file

@ -14,7 +14,6 @@ define(['css!./loading'], function () {
var elem = loadingElem; var elem = loadingElem;
if (!elem) { if (!elem) {
elem = document.createElement('div'); elem = document.createElement('div');
loadingElem = elem; loadingElem = elem;
@ -56,7 +55,6 @@ define(['css!./loading'], function () {
var elem = loadingElem; var elem = loadingElem;
if (elem) { if (elem) {
elem.classList.remove('mdlSpinnerActive'); elem.classList.remove('mdlSpinnerActive');
elem.classList.remove('mdl-spinner__layer-1-active'); elem.classList.remove('mdl-spinner__layer-1-active');

View file

@ -23,9 +23,7 @@ import 'emby-button';
} }
function allowSwipe(target) { function allowSwipe(target) {
function allowSwipeOn(elem) { function allowSwipeOn(elem) {
if (dom.parentWithTag(elem, 'input')) { if (dom.parentWithTag(elem, 'input')) {
return false; return false;
} }
@ -50,7 +48,6 @@ import 'emby-button';
} }
function configureSwipeTabs(view, tabsElem, getTabContainersFn) { function configureSwipeTabs(view, tabsElem, getTabContainersFn) {
if (!browser.touch) { if (!browser.touch) {
return; return;
} }
@ -69,7 +66,6 @@ import 'emby-button';
}; };
import('touchHelper').then(({default: TouchHelper}) => { import('touchHelper').then(({default: TouchHelper}) => {
const touchHelper = new TouchHelper(view.parentNode.parentNode); const touchHelper = new TouchHelper(view.parentNode.parentNode);
events.on(touchHelper, 'swipeleft', onSwipeLeft); events.on(touchHelper, 'swipeleft', onSwipeLeft);
@ -84,7 +80,6 @@ import 'emby-button';
export function setTabs(view, selectedIndex, getTabsFn, getTabContainersFn, onBeforeTabChange, onTabChange, setSelectedIndex) { export function setTabs(view, selectedIndex, getTabsFn, getTabContainersFn, onBeforeTabChange, onTabChange, setSelectedIndex) {
if (!view) { if (!view) {
if (tabOwnerView) { if (tabOwnerView) {
if (!headerTabsContainer) { if (!headerTabsContainer) {
headerTabsContainer = queryScope.querySelector('.headerTabs'); headerTabsContainer = queryScope.querySelector('.headerTabs');
} }
@ -113,12 +108,10 @@ import 'emby-button';
} }
if (tabOwnerView !== view) { if (tabOwnerView !== view) {
let index = 0; let index = 0;
const indexAttribute = selectedIndex == null ? '' : (' data-index="' + selectedIndex + '"'); const indexAttribute = selectedIndex == null ? '' : (' data-index="' + selectedIndex + '"');
const tabsHtml = '<div is="emby-tabs"' + indexAttribute + ' class="tabs-viewmenubar"><div class="emby-tabs-slider" style="white-space:nowrap;">' + getTabsFn().map(function (t) { const tabsHtml = '<div is="emby-tabs"' + indexAttribute + ' class="tabs-viewmenubar"><div class="emby-tabs-slider" style="white-space:nowrap;">' + getTabsFn().map(function (t) {
let tabClass = 'emby-tab-button'; let tabClass = 'emby-tab-button';
if (t.enabled === false) { if (t.enabled === false) {
@ -139,7 +132,6 @@ import 'emby-button';
index++; index++;
return tabHtml; return tabHtml;
}).join('') + '</div></div>'; }).join('') + '</div></div>';
tabsContainerElem.innerHTML = tabsHtml; tabsContainerElem.innerHTML = tabsHtml;
@ -153,10 +145,8 @@ import 'emby-button';
configureSwipeTabs(view, tabsElem, getTabContainersFn); configureSwipeTabs(view, tabsElem, getTabContainersFn);
tabsElem.addEventListener('beforetabchange', function (e) { tabsElem.addEventListener('beforetabchange', function (e) {
const tabContainers = getTabContainersFn(); const tabContainers = getTabContainersFn();
if (e.detail.previousIndex != null) { if (e.detail.previousIndex != null) {
const previousPanel = tabContainers[e.detail.previousIndex]; const previousPanel = tabContainers[e.detail.previousIndex];
if (previousPanel) { if (previousPanel) {
previousPanel.classList.remove('is-active'); previousPanel.classList.remove('is-active');
@ -181,7 +171,6 @@ import 'emby-button';
if (tabsElem.selectedIndex) { if (tabsElem.selectedIndex) {
tabsElem.selectedIndex(selectedIndex); tabsElem.selectedIndex(selectedIndex);
} else { } else {
tabsElem.readySelectedIndex = selectedIndex; tabsElem.readySelectedIndex = selectedIndex;
tabsElem.addEventListener('ready', onViewTabsReady); tabsElem.addEventListener('ready', onViewTabsReady);
} }
@ -209,7 +198,6 @@ import 'emby-button';
} }
export function selectedTabIndex(index) { export function selectedTabIndex(index) {
const tabsContainerElem = headerTabsContainer; const tabsContainerElem = headerTabsContainer;
if (!tabsElem) { if (!tabsElem) {

View file

@ -11,23 +11,19 @@ import 'emby-button';
/* eslint-disable indent */ /* eslint-disable indent */
function getTimerIndicator(item) { function getTimerIndicator(item) {
let status; let status;
if (item.Type === 'SeriesTimer') { if (item.Type === 'SeriesTimer') {
return '<span class="material-icons mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon fiber_smart_record"></span>'; return '<span class="material-icons mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon fiber_smart_record"></span>';
} else if (item.TimerId || item.SeriesTimerId) { } else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled'; status = item.Status || 'Cancelled';
} else if (item.Type === 'Timer') { } else if (item.Type === 'Timer') {
status = item.Status; status = item.Status;
} else { } else {
return ''; return '';
} }
if (item.SeriesTimerId) { if (item.SeriesTimerId) {
if (status !== 'Cancelled') { if (status !== 'Cancelled') {
return '<span class="material-icons mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon fiber_smart_record"></span>'; return '<span class="material-icons mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon fiber_smart_record"></span>';
} }
@ -46,9 +42,7 @@ import 'emby-button';
let date; let date;
if (item.StartDate && options.programTime !== false) { if (item.StartDate && options.programTime !== false) {
try { try {
text = ''; text = '';
date = datetime.parseISO8601Date(item.StartDate); date = datetime.parseISO8601Date(item.StartDate);
@ -75,7 +69,6 @@ import 'emby-button';
} }
if (item.ChannelName) { if (item.ChannelName) {
if (options.interactive && item.ChannelId) { if (options.interactive && item.ChannelId) {
miscInfo.push({ miscInfo.push({
html: `<a is="emby-linkbutton" class="button-flat mediaInfoItem" href="${appRouter.getRouteUrl({ html: `<a is="emby-linkbutton" class="button-flat mediaInfoItem" href="${appRouter.getRouteUrl({
@ -121,11 +114,9 @@ import 'emby-button';
const showFolderRuntime = item.Type === 'MusicAlbum' || item.MediaType === 'MusicArtist' || item.MediaType === 'Playlist' || item.MediaType === 'MusicGenre'; const showFolderRuntime = item.Type === 'MusicAlbum' || item.MediaType === 'MusicArtist' || item.MediaType === 'Playlist' || item.MediaType === 'MusicGenre';
if (showFolderRuntime) { if (showFolderRuntime) {
count = item.SongCount || item.ChildCount; count = item.SongCount || item.ChildCount;
if (count) { if (count) {
miscInfo.push(globalize.translate('TrackCount', count)); miscInfo.push(globalize.translate('TrackCount', count));
} }
@ -133,19 +124,15 @@ import 'emby-button';
miscInfo.push(datetime.getDisplayRunningTime(item.RunTimeTicks)); miscInfo.push(datetime.getDisplayRunningTime(item.RunTimeTicks));
} }
} else if (item.Type === 'PhotoAlbum' || item.Type === 'BoxSet') { } else if (item.Type === 'PhotoAlbum' || item.Type === 'BoxSet') {
count = item.ChildCount; count = item.ChildCount;
if (count) { if (count) {
miscInfo.push(globalize.translate('ItemCount', count)); miscInfo.push(globalize.translate('ItemCount', count));
} }
} }
if ((item.Type === 'Episode' || item.MediaType === 'Photo') && options.originalAirDate !== false) { if ((item.Type === 'Episode' || item.MediaType === 'Photo') && options.originalAirDate !== false) {
if (item.PremiereDate) { if (item.PremiereDate) {
try { try {
date = datetime.parseISO8601Date(item.PremiereDate); date = datetime.parseISO8601Date(item.PremiereDate);
@ -159,7 +146,6 @@ import 'emby-button';
if (item.Type === 'SeriesTimer') { if (item.Type === 'SeriesTimer') {
if (item.RecordAnyTime) { if (item.RecordAnyTime) {
miscInfo.push(globalize.translate('Anytime')); miscInfo.push(globalize.translate('Anytime'));
} else { } else {
miscInfo.push(datetime.getDisplayTime(item.StartDate)); miscInfo.push(datetime.getDisplayTime(item.StartDate));
@ -173,7 +159,6 @@ import 'emby-button';
} }
if (item.StartDate && item.Type !== 'Program' && item.Type !== 'SeriesTimer') { if (item.StartDate && item.Type !== 'Program' && item.Type !== 'SeriesTimer') {
try { try {
date = datetime.parseISO8601Date(item.StartDate); date = datetime.parseISO8601Date(item.StartDate);
@ -190,24 +175,18 @@ import 'emby-button';
} }
if (options.year !== false && item.ProductionYear && item.Type === 'Series') { if (options.year !== false && item.ProductionYear && item.Type === 'Series') {
if (item.Status === 'Continuing') { if (item.Status === 'Continuing') {
miscInfo.push(globalize.translate('SeriesYearToPresent', item.ProductionYear)); miscInfo.push(globalize.translate('SeriesYearToPresent', item.ProductionYear));
} else if (item.ProductionYear) { } else if (item.ProductionYear) {
text = item.ProductionYear; text = item.ProductionYear;
if (item.EndDate) { if (item.EndDate) {
try { try {
const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear(); const endYear = datetime.parseISO8601Date(item.EndDate).getFullYear();
if (endYear !== item.ProductionYear) { if (endYear !== item.ProductionYear) {
text += `-${datetime.parseISO8601Date(item.EndDate).getFullYear()}`; text += `-${datetime.parseISO8601Date(item.EndDate).getFullYear()}`;
} }
} catch (e) { } catch (e) {
console.error('error parsing date:', item.EndDate); console.error('error parsing date:', item.EndDate);
} }
@ -218,7 +197,6 @@ import 'emby-button';
} }
if (item.Type === 'Program') { if (item.Type === 'Program') {
if (options.programIndicator !== false) { if (options.programIndicator !== false) {
if (item.IsLive) { if (item.IsLive) {
miscInfo.push({ miscInfo.push({
@ -240,7 +218,6 @@ import 'emby-button';
} }
if ((item.IsSeries || item.EpisodeTitle) && options.episodeTitle !== false) { if ((item.IsSeries || item.EpisodeTitle) && options.episodeTitle !== false) {
text = itemHelper.getDisplayName(item, { text = itemHelper.getDisplayName(item, {
includeIndexNumber: options.episodeTitleIndexNumber includeIndexNumber: options.episodeTitleIndexNumber
}); });
@ -251,7 +228,6 @@ import 'emby-button';
} else if (item.IsMovie && item.ProductionYear && options.originalAirDate !== false) { } else if (item.IsMovie && item.ProductionYear && options.originalAirDate !== false) {
miscInfo.push(item.ProductionYear); miscInfo.push(item.ProductionYear);
} else if (item.PremiereDate && options.originalAirDate !== false) { } else if (item.PremiereDate && options.originalAirDate !== false) {
try { try {
date = datetime.parseISO8601Date(item.PremiereDate); date = datetime.parseISO8601Date(item.PremiereDate);
text = globalize.translate('OriginalAirDateValue', datetime.toLocaleDateString(date)); text = globalize.translate('OriginalAirDateValue', datetime.toLocaleDateString(date));
@ -266,12 +242,9 @@ import 'emby-button';
if (options.year !== false) { if (options.year !== false) {
if (item.Type !== 'Series' && item.Type !== 'Episode' && item.Type !== 'Person' && item.MediaType !== 'Photo' && item.Type !== 'Program' && item.Type !== 'Season') { if (item.Type !== 'Series' && item.Type !== 'Episode' && item.Type !== 'Person' && item.MediaType !== 'Photo' && item.Type !== 'Program' && item.Type !== 'Season') {
if (item.ProductionYear) { if (item.ProductionYear) {
miscInfo.push(item.ProductionYear); miscInfo.push(item.ProductionYear);
} else if (item.PremiereDate) { } else if (item.PremiereDate) {
try { try {
text = datetime.parseISO8601Date(item.PremiereDate).getFullYear(); text = datetime.parseISO8601Date(item.PremiereDate).getFullYear();
miscInfo.push(text); miscInfo.push(text);
@ -283,11 +256,8 @@ import 'emby-button';
} }
if (item.RunTimeTicks && item.Type !== 'Series' && item.Type !== 'Program' && item.Type !== 'Book' && !showFolderRuntime && options.runtime !== false) { if (item.RunTimeTicks && item.Type !== 'Series' && item.Type !== 'Program' && item.Type !== 'Book' && !showFolderRuntime && options.runtime !== false) {
if (item.Type === 'Audio') { if (item.Type === 'Audio') {
miscInfo.push(datetime.getDisplayRunningTime(item.RunTimeTicks)); miscInfo.push(datetime.getDisplayRunningTime(item.RunTimeTicks));
} else { } else {
minutes = item.RunTimeTicks / 600000000; minutes = item.RunTimeTicks / 600000000;
@ -327,7 +297,6 @@ import 'emby-button';
} }
if (item.CriticRating && options.criticRating !== false) { if (item.CriticRating && options.criticRating !== false) {
if (item.CriticRating >= 60) { if (item.CriticRating >= 60) {
html += `<div class="mediaInfoItem mediaInfoCriticRating mediaInfoCriticRatingFresh">${item.CriticRating}</div>`; html += `<div class="mediaInfoItem mediaInfoCriticRating mediaInfoCriticRatingFresh">${item.CriticRating}</div>`;
} else { } else {
@ -336,7 +305,6 @@ import 'emby-button';
} }
if (options.endsAt !== false) { if (options.endsAt !== false) {
const endsAt = getEndsAt(item); const endsAt = getEndsAt(item);
if (endsAt) { if (endsAt) {
html += getMediaInfoItem(endsAt, 'endsAt'); html += getMediaInfoItem(endsAt, 'endsAt');
@ -349,9 +317,7 @@ import 'emby-button';
} }
export function getEndsAt(item) { export function getEndsAt(item) {
if (item.MediaType === 'Video' && item.RunTimeTicks) { if (item.MediaType === 'Video' && item.RunTimeTicks) {
if (!item.StartDate) { if (!item.StartDate) {
let endDate = new Date().getTime() + (item.RunTimeTicks / 10000); let endDate = new Date().getTime() + (item.RunTimeTicks / 10000);
endDate = new Date(endDate); endDate = new Date(endDate);
@ -365,7 +331,6 @@ import 'emby-button';
} }
export function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) { export function getEndsAtFromPosition(runtimeTicks, positionTicks, includeText) {
let endDate = new Date().getTime() + ((runtimeTicks - (positionTicks || 0)) / 10000); let endDate = new Date().getTime() + ((runtimeTicks - (positionTicks || 0)) / 10000);
endDate = new Date(endDate); endDate = new Date(endDate);
@ -378,12 +343,10 @@ import 'emby-button';
} }
function getMediaInfoItem(m, cssClass) { function getMediaInfoItem(m, cssClass) {
cssClass = cssClass ? (`${cssClass} mediaInfoItem`) : 'mediaInfoItem'; cssClass = cssClass ? (`${cssClass} mediaInfoItem`) : 'mediaInfoItem';
let mediaInfoText = m; let mediaInfoText = m;
if (typeof (m) !== 'string' && typeof (m) !== 'number') { if (typeof (m) !== 'string' && typeof (m) !== 'number') {
if (m.html) { if (m.html) {
return m.html; return m.html;
} }
@ -408,17 +371,13 @@ import 'emby-button';
} }
function dynamicEndTime(elem, item) { function dynamicEndTime(elem, item) {
const interval = setInterval(() => { const interval = setInterval(() => {
if (!document.body.contains(elem)) { if (!document.body.contains(elem)) {
clearInterval(interval); clearInterval(interval);
return; return;
} }
elem.innerHTML = getEndsAt(item); elem.innerHTML = getEndsAt(item);
}, 60000); }, 60000);
} }
@ -437,7 +396,6 @@ import 'emby-button';
} }
function afterFill(elem, item, options) { function afterFill(elem, item, options) {
if (options.endsAt !== false) { if (options.endsAt !== false) {
const endsAtElem = elem.querySelector('.endsAt'); const endsAtElem = elem.querySelector('.endsAt');
if (endsAtElem) { if (endsAtElem) {
@ -452,7 +410,6 @@ import 'emby-button';
} }
function onChannelLinkClick(e) { function onChannelLinkClick(e) {
const channelId = this.getAttribute('data-id'); const channelId = this.getAttribute('data-id');
const serverId = this.getAttribute('data-serverid'); const serverId = this.getAttribute('data-serverid');
@ -463,7 +420,6 @@ import 'emby-button';
} }
export function getPrimaryMediaInfoHtml(item, options) { export function getPrimaryMediaInfoHtml(item, options) {
options = options || {}; options = options || {};
if (options.interactive == null) { if (options.interactive == null) {
options.interactive = false; options.interactive = false;
@ -473,7 +429,6 @@ import 'emby-button';
} }
export function getSecondaryMediaInfoHtml(item, options) { export function getSecondaryMediaInfoHtml(item, options) {
options = options || {}; options = options || {};
if (options.interactive == null) { if (options.interactive == null) {
options.interactive = false; options.interactive = false;
@ -486,12 +441,10 @@ import 'emby-button';
} }
export function getResolutionText(i) { export function getResolutionText(i) {
const width = i.Width; const width = i.Width;
const height = i.Height; const height = i.Height;
if (width && height) { if (width && height) {
if (width >= 3800 || height >= 2000) { if (width >= 3800 || height >= 2000) {
return '4K'; return '4K';
} }
@ -514,19 +467,16 @@ import 'emby-button';
return '720p'; return '720p';
} }
if (width >= 700 || height >= 400) { if (width >= 700 || height >= 400) {
if (i.IsInterlaced) { if (i.IsInterlaced) {
return '480i'; return '480i';
} }
return '480p'; return '480p';
} }
} }
return null; return null;
} }
function getAudioStreamForDisplay(item) { function getAudioStreamForDisplay(item) {
if (!item.MediaSources) { if (!item.MediaSources) {
return null; return null;
} }
@ -542,7 +492,6 @@ import 'emby-button';
} }
export function getMediaInfoStats(item, options) { export function getMediaInfoStats(item, options) {
options = options || {}; options = options || {};
const list = []; const list = [];
@ -587,19 +536,12 @@ import 'emby-button';
let channelText; let channelText;
if (channels === 8) { if (channels === 8) {
channelText = '7.1'; channelText = '7.1';
} else if (channels === 7) { } else if (channels === 7) {
channelText = '6.1'; channelText = '6.1';
} else if (channels === 6) { } else if (channels === 6) {
channelText = '5.1'; channelText = '5.1';
} else if (channels === 2) { } else if (channels === 2) {
channelText = '2.0'; channelText = '2.0';
} }
@ -625,7 +567,6 @@ import 'emby-button';
} }
if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) { if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) {
const dateCreated = datetime.parseISO8601Date(item.DateCreated); const dateCreated = datetime.parseISO8601Date(item.DateCreated);
list.push({ list.push({

View file

@ -30,16 +30,13 @@ import 'flexStyles';
} }
function closeDialog(isSubmitted) { function closeDialog(isSubmitted) {
if (isDialog()) { if (isDialog()) {
dialogHelper.close(currentContext); dialogHelper.close(currentContext);
} }
} }
function submitUpdatedItem(form, item) { function submitUpdatedItem(form, item) {
function afterContentTypeUpdated() { function afterContentTypeUpdated() {
require(['toast'], function (toast) { require(['toast'], function (toast) {
toast(globalize.translate('MessageItemSaved')); toast(globalize.translate('MessageItemSaved'));
}); });
@ -51,11 +48,9 @@ import 'flexStyles';
const apiClient = getApiClient(); const apiClient = getApiClient();
apiClient.updateItem(item).then(function () { apiClient.updateItem(item).then(function () {
const newContentType = form.querySelector('#selectContentType').value || ''; const newContentType = form.querySelector('#selectContentType').value || '';
if ((metadataEditorInfo.ContentType || '') !== newContentType) { if ((metadataEditorInfo.ContentType || '') !== newContentType) {
apiClient.ajax({ apiClient.ajax({
url: apiClient.getUrl('Items/' + item.Id + '/ContentType', { url: apiClient.getUrl('Items/' + item.Id + '/ContentType', {
@ -67,11 +62,9 @@ import 'flexStyles';
}).then(function () { }).then(function () {
afterContentTypeUpdated(); afterContentTypeUpdated();
}); });
} else { } else {
afterContentTypeUpdated(); afterContentTypeUpdated();
} }
}); });
} }
@ -83,13 +76,9 @@ import 'flexStyles';
} }
function getAlbumArtists(form) { function getAlbumArtists(form) {
return form.querySelector('#txtAlbumArtist').value.trim().split(';').filter(function (s) { return form.querySelector('#txtAlbumArtist').value.trim().split(';').filter(function (s) {
return s.length > 0; return s.length > 0;
}).map(function (a) { }).map(function (a) {
return { return {
Name: a Name: a
}; };
@ -97,13 +86,9 @@ import 'flexStyles';
} }
function getArtists(form) { function getArtists(form) {
return form.querySelector('#txtArtist').value.trim().split(';').filter(function (s) { return form.querySelector('#txtArtist').value.trim().split(';').filter(function (s) {
return s.length > 0; return s.length > 0;
}).map(function (a) { }).map(function (a) {
return { return {
Name: a Name: a
}; };
@ -111,7 +96,6 @@ import 'flexStyles';
} }
function getDateValue(form, element, property) { function getDateValue(form, element, property) {
let val = form.querySelector(element).value; let val = form.querySelector(element).value;
if (!val) { if (!val) {
@ -119,14 +103,12 @@ import 'flexStyles';
} }
if (currentItem[property]) { if (currentItem[property]) {
const date = datetime.parseISO8601Date(currentItem[property], true); const date = datetime.parseISO8601Date(currentItem[property], true);
const parts = date.toISOString().split('T'); const parts = date.toISOString().split('T');
// If the date is the same, preserve the time // If the date is the same, preserve the time
if (parts[0].indexOf(val) === 0) { if (parts[0].indexOf(val) === 0) {
const iso = parts[1]; const iso = parts[1];
val += 'T' + iso; val += 'T' + iso;
@ -137,7 +119,6 @@ import 'flexStyles';
} }
function onSubmit(e) { function onSubmit(e) {
loading.show(); loading.show();
const form = this; const form = this;
@ -198,14 +179,12 @@ import 'flexStyles';
item.PreferredMetadataCountryCode = form.querySelector('#selectCountry').value; item.PreferredMetadataCountryCode = form.querySelector('#selectCountry').value;
if (currentItem.Type === 'Person') { if (currentItem.Type === 'Person') {
const placeOfBirth = form.querySelector('#txtPlaceOfBirth').value; const placeOfBirth = form.querySelector('#txtPlaceOfBirth').value;
item.ProductionLocations = placeOfBirth ? [placeOfBirth] : []; item.ProductionLocations = placeOfBirth ? [placeOfBirth] : [];
} }
if (currentItem.Type === 'Series') { if (currentItem.Type === 'Series') {
// 600000000 // 600000000
const seriesRuntime = form.querySelector('#txtSeriesRuntime').value; const seriesRuntime = form.querySelector('#txtSeriesRuntime').value;
item.RunTimeTicks = seriesRuntime ? (seriesRuntime * 600000000) : null; item.RunTimeTicks = seriesRuntime ? (seriesRuntime * 600000000) : null;
@ -248,11 +227,8 @@ import 'flexStyles';
} }
function editPerson(context, person, index) { function editPerson(context, person, index) {
require(['personEditor'], function (personEditor) { require(['personEditor'], function (personEditor) {
personEditor.show(person).then(function (updatedPerson) { personEditor.show(person).then(function (updatedPerson) {
const isNew = index === -1; const isNew = index === -1;
if (isNew) { if (isNew) {
@ -302,7 +278,6 @@ import 'flexStyles';
} }
function onEditorClick(e) { function onEditorClick(e) {
const btnRemoveFromEditorList = dom.parentWithClass(e.target, 'btnRemoveFromEditorList'); const btnRemoveFromEditorList = dom.parentWithClass(e.target, 'btnRemoveFromEditorList');
if (btnRemoveFromEditorList) { if (btnRemoveFromEditorList) {
removeElementFromList(btnRemoveFromEditorList); removeElementFromList(btnRemoveFromEditorList);
@ -375,12 +350,10 @@ import 'flexStyles';
form.addEventListener('submit', onSubmit); form.addEventListener('submit', onSubmit);
context.querySelector('#btnAddPerson').addEventListener('click', function (event, data) { context.querySelector('#btnAddPerson').addEventListener('click', function (event, data) {
editPerson(context, {}, -1); editPerson(context, {}, -1);
}); });
context.querySelector('#peopleList').addEventListener('click', function (e) { context.querySelector('#peopleList').addEventListener('click', function (e) {
let index; let index;
const btnDeletePerson = dom.parentWithClass(e.target, 'btnDeletePerson'); const btnDeletePerson = dom.parentWithClass(e.target, 'btnDeletePerson');
if (btnDeletePerson) { if (btnDeletePerson) {
@ -398,7 +371,6 @@ import 'flexStyles';
} }
function getItem(itemId, serverId) { function getItem(itemId, serverId) {
const apiClient = connectionManager.getApiClient(serverId); const apiClient = connectionManager.getApiClient(serverId);
if (itemId) { if (itemId) {
@ -409,7 +381,6 @@ import 'flexStyles';
} }
function getEditorConfig(itemId, serverId) { function getEditorConfig(itemId, serverId) {
const apiClient = connectionManager.getApiClient(serverId); const apiClient = connectionManager.getApiClient(serverId);
if (itemId) { if (itemId) {
@ -420,13 +391,11 @@ import 'flexStyles';
} }
function populateCountries(select, allCountries) { function populateCountries(select, allCountries) {
let html = ''; let html = '';
html += "<option value=''></option>"; html += "<option value=''></option>";
for (let i = 0, length = allCountries.length; i < length; i++) { for (let i = 0, length = allCountries.length; i < length; i++) {
const culture = allCountries[i]; const culture = allCountries[i];
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>'; html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>';
@ -436,13 +405,11 @@ import 'flexStyles';
} }
function populateLanguages(select, languages) { function populateLanguages(select, languages) {
let html = ''; let html = '';
html += "<option value=''></option>"; html += "<option value=''></option>";
for (let i = 0, length = languages.length; i < length; i++) { for (let i = 0, length = languages.length; i < length; i++) {
const culture = languages[i]; const culture = languages[i];
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>'; html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>';
@ -452,7 +419,6 @@ import 'flexStyles';
} }
function renderContentTypeOptions(context, metadataInfo) { function renderContentTypeOptions(context, metadataInfo) {
if (!metadataInfo.ContentTypeOptions.length) { if (!metadataInfo.ContentTypeOptions.length) {
hideElement('#fldContentType', context); hideElement('#fldContentType', context);
} else { } else {
@ -460,9 +426,7 @@ import 'flexStyles';
} }
const html = metadataInfo.ContentTypeOptions.map(function (i) { const html = metadataInfo.ContentTypeOptions.map(function (i) {
return '<option value="' + i.Value + '">' + i.Name + '</option>'; return '<option value="' + i.Value + '">' + i.Name + '</option>';
}).join(''); }).join('');
const selectEl = context.querySelector('#selectContentType'); const selectEl = context.querySelector('#selectContentType');
@ -471,13 +435,11 @@ import 'flexStyles';
} }
function loadExternalIds(context, item, externalIds) { function loadExternalIds(context, item, externalIds) {
let html = ''; let html = '';
const providerIds = item.ProviderIds || {}; const providerIds = item.ProviderIds || {};
for (let i = 0, length = externalIds.length; i < length; i++) { for (let i = 0, length = externalIds.length; i < length; i++) {
const idInfo = externalIds[i]; const idInfo = externalIds[i];
const id = 'txt1' + idInfo.Key; const id = 'txt1' + idInfo.Key;
@ -523,7 +485,6 @@ import 'flexStyles';
function hideElement(selector, context, multiple) { function hideElement(selector, context, multiple) {
context = context || document; context = context || document;
if (typeof selector === 'string') { if (typeof selector === 'string') {
const elements = multiple ? context.querySelectorAll(selector) : [context.querySelector(selector)]; const elements = multiple ? context.querySelectorAll(selector) : [context.querySelector(selector)];
Array.prototype.forEach.call(elements, function (el) { Array.prototype.forEach.call(elements, function (el) {
@ -542,7 +503,6 @@ import 'flexStyles';
function showElement(selector, context, multiple) { function showElement(selector, context, multiple) {
context = context || document; context = context || document;
if (typeof selector === 'string') { if (typeof selector === 'string') {
const elements = multiple ? context.querySelectorAll(selector) : [context.querySelector(selector)]; const elements = multiple ? context.querySelectorAll(selector) : [context.querySelector(selector)];
Array.prototype.forEach.call(elements, function (el) { Array.prototype.forEach.call(elements, function (el) {
@ -744,7 +704,6 @@ import 'flexStyles';
} }
function fillItemInfo(context, item, parentalRatingOptions) { function fillItemInfo(context, item, parentalRatingOptions) {
let select = context.querySelector('#selectOfficialRating'); let select = context.querySelector('#selectOfficialRating');
populateRatings(parentalRatingOptions, select, item.OfficialRating); populateRatings(parentalRatingOptions, select, item.OfficialRating);
@ -866,7 +825,6 @@ import 'flexStyles';
context.querySelector('#selectCountry').value = item.PreferredMetadataCountryCode || ''; context.querySelector('#selectCountry').value = item.PreferredMetadataCountryCode || '';
if (item.RunTimeTicks) { if (item.RunTimeTicks) {
const minutes = item.RunTimeTicks / 600000000; const minutes = item.RunTimeTicks / 600000000;
context.querySelector('#txtSeriesRuntime').value = Math.round(minutes); context.querySelector('#txtSeriesRuntime').value = Math.round(minutes);
@ -876,7 +834,6 @@ import 'flexStyles';
} }
function populateRatings(allParentalRatings, select, currentValue) { function populateRatings(allParentalRatings, select, currentValue) {
let html = ''; let html = '';
html += "<option value=''></option>"; html += "<option value=''></option>";
@ -887,7 +844,6 @@ import 'flexStyles';
let currentValueFound = false; let currentValueFound = false;
for (let i = 0, length = allParentalRatings.length; i < length; i++) { for (let i = 0, length = allParentalRatings.length; i < length; i++) {
rating = allParentalRatings[i]; rating = allParentalRatings[i];
ratings.push({ Name: rating.Name, Value: rating.Name }); ratings.push({ Name: rating.Name, Value: rating.Name });
@ -902,7 +858,6 @@ import 'flexStyles';
} }
for (let i = 0, length = ratings.length; i < length; i++) { for (let i = 0, length = ratings.length; i < length; i++) {
rating = ratings[i]; rating = ratings[i];
html += "<option value='" + rating.Value + "'>" + rating.Name + '</option>'; html += "<option value='" + rating.Value + "'>" + rating.Name + '</option>';
@ -921,7 +876,6 @@ import 'flexStyles';
} }
function populateListView(list, items, sortCallback) { function populateListView(list, items, sortCallback) {
items = items || []; items = items || [];
if (typeof (sortCallback) === 'undefined') { if (typeof (sortCallback) === 'undefined') {
items.sort(function (a, b) { items.sort(function (a, b) {
@ -953,14 +907,12 @@ import 'flexStyles';
} }
function populatePeople(context, people) { function populatePeople(context, people) {
let lastType = ''; let lastType = '';
let html = ''; let html = '';
const elem = context.querySelector('#peopleList'); const elem = context.querySelector('#peopleList');
for (let i = 0, length = people.length; i < length; i++) { for (let i = 0, length = people.length; i < length; i++) {
const person = people[i]; const person = people[i];
html += '<div class="listItem">'; html += '<div class="listItem">';
@ -990,10 +942,8 @@ import 'flexStyles';
} }
function getLockedFieldsHtml(fields, currentFields) { function getLockedFieldsHtml(fields, currentFields) {
let html = ''; let html = '';
for (let i = 0; i < fields.length; i++) { for (let i = 0; i < fields.length; i++) {
const field = fields[i]; const field = fields[i];
const name = field.name; const name = field.name;
const value = field.value || field.name; const value = field.value || field.name;
@ -1040,11 +990,9 @@ import 'flexStyles';
} }
function reload(context, itemId, serverId) { function reload(context, itemId, serverId) {
loading.show(); loading.show();
Promise.all([getItem(itemId, serverId), getEditorConfig(itemId, serverId)]).then(function (responses) { Promise.all([getItem(itemId, serverId), getEditorConfig(itemId, serverId)]).then(function (responses) {
const item = responses[0]; const item = responses[0];
metadataEditorInfo = responses[1]; metadataEditorInfo = responses[1];
@ -1136,7 +1084,6 @@ import 'flexStyles';
embed: function (elem, itemId, serverId) { embed: function (elem, itemId, serverId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
loading.show(); loading.show();
import('text!./metadataEditor.template.html').then(({default: template}) => { import('text!./metadataEditor.template.html').then(({default: template}) => {

View file

@ -17,9 +17,7 @@ import 'css!./../formdialog';
function show(person) { function show(person) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
import('text!./personEditor.template.html').then(({default: template}) => { import('text!./personEditor.template.html').then(({default: template}) => {
const dialogOptions = { const dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -53,7 +51,6 @@ import 'css!./../formdialog';
dialogHelper.open(dlg); dialogHelper.open(dlg);
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false); centerFocus(dlg.querySelector('.formDialogContent'), false, false);
} }
@ -66,7 +63,6 @@ import 'css!./../formdialog';
}); });
dlg.querySelector('.selectPersonType').addEventListener('change', function (e) { dlg.querySelector('.selectPersonType').addEventListener('change', function (e) {
if (this.value === 'Actor') { if (this.value === 'Actor') {
dlg.querySelector('.fldRole').classList.remove('hide'); dlg.querySelector('.fldRole').classList.remove('hide');
} else { } else {
@ -75,12 +71,10 @@ import 'css!./../formdialog';
}); });
dlg.querySelector('.btnCancel').addEventListener('click', function (e) { dlg.querySelector('.btnCancel').addEventListener('click', function (e) {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
dlg.querySelector('form').addEventListener('submit', function (e) { dlg.querySelector('form').addEventListener('submit', function (e) {
submitted = true; submitted = true;
person.Name = dlg.querySelector('.txtPersonName', dlg).value; person.Name = dlg.querySelector('.txtPersonName', dlg).value;

View file

@ -13,10 +13,8 @@ import 'css!./multiSelect';
let currentSelectionCommandsPanel; let currentSelectionCommandsPanel;
function hideSelections() { function hideSelections() {
const selectionCommandsPanel = currentSelectionCommandsPanel; const selectionCommandsPanel = currentSelectionCommandsPanel;
if (selectionCommandsPanel) { if (selectionCommandsPanel) {
selectionCommandsPanel.parentNode.removeChild(selectionCommandsPanel); selectionCommandsPanel.parentNode.removeChild(selectionCommandsPanel);
currentSelectionCommandsPanel = null; currentSelectionCommandsPanel = null;
@ -24,7 +22,6 @@ import 'css!./multiSelect';
selectedElements = []; selectedElements = [];
const elems = document.querySelectorAll('.itemSelectionPanel'); const elems = document.querySelectorAll('.itemSelectionPanel');
for (let i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
const parent = elems[i].parentNode; const parent = elems[i].parentNode;
parent.removeChild(elems[i]); parent.removeChild(elems[i]);
parent.classList.remove('withMultiSelect'); parent.classList.remove('withMultiSelect');
@ -33,13 +30,11 @@ import 'css!./multiSelect';
} }
function onItemSelectionPanelClick(e, itemSelectionPanel) { function onItemSelectionPanelClick(e, itemSelectionPanel) {
// toggle the checkbox, if it wasn't clicked on // toggle the checkbox, if it wasn't clicked on
if (!dom.parentWithClass(e.target, 'chkItemSelect')) { if (!dom.parentWithClass(e.target, 'chkItemSelect')) {
const chkItemSelect = itemSelectionPanel.querySelector('.chkItemSelect'); const chkItemSelect = itemSelectionPanel.querySelector('.chkItemSelect');
if (chkItemSelect) { if (chkItemSelect) {
if (chkItemSelect.classList.contains('checkedInitial')) { if (chkItemSelect.classList.contains('checkedInitial')) {
chkItemSelect.classList.remove('checkedInitial'); chkItemSelect.classList.remove('checkedInitial');
} else { } else {
@ -56,11 +51,9 @@ import 'css!./multiSelect';
} }
function updateItemSelection(chkItemSelect, selected) { function updateItemSelection(chkItemSelect, selected) {
const id = dom.parentWithAttribute(chkItemSelect, 'data-id').getAttribute('data-id'); const id = dom.parentWithAttribute(chkItemSelect, 'data-id').getAttribute('data-id');
if (selected) { if (selected) {
const current = selectedItems.filter(i => { const current = selectedItems.filter(i => {
return i === id; return i === id;
}); });
@ -69,7 +62,6 @@ import 'css!./multiSelect';
selectedItems.push(id); selectedItems.push(id);
selectedElements.push(chkItemSelect); selectedElements.push(chkItemSelect);
} }
} else { } else {
selectedItems = selectedItems.filter(i => { selectedItems = selectedItems.filter(i => {
return i !== id; return i !== id;
@ -94,11 +86,9 @@ import 'css!./multiSelect';
} }
function showSelection(item, isChecked) { function showSelection(item, isChecked) {
let itemSelectionPanel = item.querySelector('.itemSelectionPanel'); let itemSelectionPanel = item.querySelector('.itemSelectionPanel');
if (!itemSelectionPanel) { if (!itemSelectionPanel) {
itemSelectionPanel = document.createElement('div'); itemSelectionPanel = document.createElement('div');
itemSelectionPanel.classList.add('itemSelectionPanel'); itemSelectionPanel.classList.add('itemSelectionPanel');
@ -120,11 +110,9 @@ import 'css!./multiSelect';
} }
function showSelectionCommands() { function showSelectionCommands() {
let selectionCommandsPanel = currentSelectionCommandsPanel; let selectionCommandsPanel = currentSelectionCommandsPanel;
if (!selectionCommandsPanel) { if (!selectionCommandsPanel) {
selectionCommandsPanel = document.createElement('div'); selectionCommandsPanel = document.createElement('div');
selectionCommandsPanel.classList.add('selectionCommandsPanel'); selectionCommandsPanel.classList.add('selectionCommandsPanel');
@ -150,9 +138,7 @@ import 'css!./multiSelect';
} }
function alertText(options) { function alertText(options) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
import('alert').then(({default: alert}) => { import('alert').then(({default: alert}) => {
alert(options).then(resolve, resolve); alert(options).then(resolve, resolve);
}); });
@ -160,9 +146,7 @@ import 'css!./multiSelect';
} }
function deleteItems(apiClient, itemIds) { function deleteItems(apiClient, itemIds) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let msg = globalize.translate('ConfirmDeleteItem'); let msg = globalize.translate('ConfirmDeleteItem');
let title = globalize.translate('HeaderDeleteItem'); let title = globalize.translate('HeaderDeleteItem');
@ -172,28 +156,23 @@ import 'css!./multiSelect';
} }
import('confirm').then(({default: confirm}) => { import('confirm').then(({default: confirm}) => {
confirm(msg, title).then(() => { confirm(msg, title).then(() => {
const promises = itemIds.map(itemId => { const promises = itemIds.map(itemId => {
apiClient.deleteItem(itemId); apiClient.deleteItem(itemId);
}); });
Promise.all(promises).then(resolve, () => { Promise.all(promises).then(resolve, () => {
alertText(globalize.translate('ErrorDeletingItem')).then(reject, reject); alertText(globalize.translate('ErrorDeletingItem')).then(reject, reject);
}); });
}, reject); }, reject);
}); });
}); });
} }
function showMenuForSelectedItems(e) { function showMenuForSelectedItems(e) {
const apiClient = connectionManager.currentApiClient(); const apiClient = connectionManager.currentApiClient();
apiClient.getCurrentUser().then(user => { apiClient.getCurrentUser().then(user => {
const menuItems = []; const menuItems = [];
menuItems.push({ menuItems.push({
@ -317,17 +296,14 @@ import 'css!./multiSelect';
} }
} }
}); });
}); });
}); });
} }
function dispatchNeedsRefresh() { function dispatchNeedsRefresh() {
const elems = []; const elems = [];
[].forEach.call(selectedElements, i => { [].forEach.call(selectedElements, i => {
const container = dom.parentWithAttribute(i, 'is', 'emby-itemscontainer'); const container = dom.parentWithAttribute(i, 'is', 'emby-itemscontainer');
if (container && !elems.includes(container)) { if (container && !elems.includes(container)) {
@ -341,9 +317,7 @@ import 'css!./multiSelect';
} }
function combineVersions(apiClient, selection) { function combineVersions(apiClient, selection) {
if (selection.length < 2) { if (selection.length < 2) {
import('alert').then(({default: alert}) => { import('alert').then(({default: alert}) => {
alert({ alert({
@ -361,7 +335,6 @@ import 'css!./multiSelect';
url: apiClient.getUrl('Videos/MergeVersions', { Ids: selection.join(',') }) url: apiClient.getUrl('Videos/MergeVersions', { Ids: selection.join(',') })
}).then(() => { }).then(() => {
loading.hide(); loading.hide();
hideSelections(); hideSelections();
dispatchNeedsRefresh(); dispatchNeedsRefresh();
@ -369,7 +342,6 @@ import 'css!./multiSelect';
} }
function showSelections(initialCard) { function showSelections(initialCard) {
import('emby-checkbox').then(() => { import('emby-checkbox').then(() => {
const cards = document.querySelectorAll('.card'); const cards = document.querySelectorAll('.card');
for (let i = 0, length = cards.length; i < length; i++) { for (let i = 0, length = cards.length; i < length; i++) {
@ -382,11 +354,9 @@ import 'css!./multiSelect';
} }
function onContainerClick(e) { function onContainerClick(e) {
const target = e.target; const target = e.target;
if (selectedItems.length) { if (selectedItems.length) {
const card = dom.parentWithClass(target, 'card'); const card = dom.parentWithClass(target, 'card');
if (card) { if (card) {
const itemSelectionPanel = card.querySelector('.itemSelectionPanel'); const itemSelectionPanel = card.querySelector('.itemSelectionPanel');
@ -404,17 +374,14 @@ import 'css!./multiSelect';
document.addEventListener('viewbeforehide', hideSelections); document.addEventListener('viewbeforehide', hideSelections);
export default function (options) { export default function (options) {
const self = this; const self = this;
const container = options.container; const container = options.container;
function onTapHold(e) { function onTapHold(e) {
const card = dom.parentWithClass(e.target, 'card'); const card = dom.parentWithClass(e.target, 'card');
if (card) { if (card) {
showSelections(card); showSelections(card);
} }
@ -427,7 +394,6 @@ import 'css!./multiSelect';
} }
function getTouches(e) { function getTouches(e) {
return e.changedTouches || e.targetTouches || e.touches; return e.changedTouches || e.targetTouches || e.touches;
} }
@ -436,7 +402,6 @@ import 'css!./multiSelect';
let touchStartX; let touchStartX;
let touchStartY; let touchStartY;
function onTouchStart(e) { function onTouchStart(e) {
const touch = getTouches(e)[0]; const touch = getTouches(e)[0];
touchTarget = null; touchTarget = null;
touchStartX = 0; touchStartX = 0;
@ -451,7 +416,6 @@ import 'css!./multiSelect';
const card = dom.parentWithClass(element, 'card'); const card = dom.parentWithClass(element, 'card');
if (card) { if (card) {
if (touchStartTimeout) { if (touchStartTimeout) {
clearTimeout(touchStartTimeout); clearTimeout(touchStartTimeout);
touchStartTimeout = null; touchStartTimeout = null;
@ -465,7 +429,6 @@ import 'css!./multiSelect';
} }
function onTouchMove(e) { function onTouchMove(e) {
if (touchTarget) { if (touchTarget) {
const touch = getTouches(e)[0]; const touch = getTouches(e)[0];
let deltaX; let deltaX;
@ -487,12 +450,10 @@ import 'css!./multiSelect';
} }
function onTouchEnd(e) { function onTouchEnd(e) {
onMouseOut(e); onMouseOut(e);
} }
function onMouseDown(e) { function onMouseDown(e) {
if (touchStartTimeout) { if (touchStartTimeout) {
clearTimeout(touchStartTimeout); clearTimeout(touchStartTimeout);
touchStartTimeout = null; touchStartTimeout = null;
@ -503,7 +464,6 @@ import 'css!./multiSelect';
} }
function onMouseOut(e) { function onMouseOut(e) {
if (touchStartTimeout) { if (touchStartTimeout) {
clearTimeout(touchStartTimeout); clearTimeout(touchStartTimeout);
touchStartTimeout = null; touchStartTimeout = null;
@ -512,7 +472,6 @@ import 'css!./multiSelect';
} }
function onTouchStartTimerFired() { function onTouchStartTimerFired() {
if (!touchTarget) { if (!touchTarget) {
return; return;
} }
@ -521,13 +480,11 @@ import 'css!./multiSelect';
touchTarget = null; touchTarget = null;
if (card) { if (card) {
showSelections(card); showSelections(card);
} }
} }
function initTapHold(element) { function initTapHold(element) {
// mobile safari doesn't allow contextmenu override // mobile safari doesn't allow contextmenu override
if (browser.touch && !browser.safari) { if (browser.touch && !browser.safari) {
element.addEventListener('contextmenu', onTapHold); element.addEventListener('contextmenu', onTapHold);
@ -565,7 +522,6 @@ import 'css!./multiSelect';
self.onContainerClick = onContainerClick; self.onContainerClick = onContainerClick;
self.destroy = () => { self.destroy = () => {
container.removeEventListener('click', onContainerClick); container.removeEventListener('click', onContainerClick);
container.removeEventListener('contextmenu', onTapHold); container.removeEventListener('contextmenu', onTapHold);

View file

@ -44,7 +44,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
} }
function showNonPersistentNotification(title, options, timeoutMs) { function showNonPersistentNotification(title, options, timeoutMs) {
try { try {
var notif = new Notification(title, options); /* eslint-disable-line compat/compat */ var notif = new Notification(title, options); /* eslint-disable-line compat/compat */
@ -66,7 +65,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
} }
function showNotification(options, timeoutMs, apiClient) { function showNotification(options, timeoutMs, apiClient) {
var title = options.title; var title = options.title;
options.data = options.data || {}; options.data = options.data || {};
@ -85,7 +83,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
} }
function showNewItemNotification(item, apiClient) { function showNewItemNotification(item, apiClient) {
if (playbackManager.isPlayingLocally(['Video'])) { if (playbackManager.isPlayingLocally(['Video'])) {
return; return;
} }
@ -107,7 +104,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
var imageTags = item.ImageTags || {}; var imageTags = item.ImageTags || {};
if (imageTags.Primary) { if (imageTags.Primary) {
notification.icon = apiClient.getScaledImageUrl(item.Id, { notification.icon = apiClient.getScaledImageUrl(item.Id, {
width: 80, width: 80,
tag: imageTags.Primary, tag: imageTags.Primary,
@ -119,7 +115,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
} }
function onLibraryChanged(data, apiClient) { function onLibraryChanged(data, apiClient) {
var newItems = data.ItemsAdded; var newItems = data.ItemsAdded;
if (!newItems.length) { if (!newItems.length) {
@ -143,11 +138,9 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
EnableTotalRecordCount: false EnableTotalRecordCount: false
}).then(function (result) { }).then(function (result) {
var items = result.Items; var items = result.Items;
for (var i = 0, length = items.length ; i < length; i++) { for (var i = 0, length = items.length ; i < length; i++) {
showNewItemNotification(items[i], apiClient); showNewItemNotification(items[i], apiClient);
} }
}); });
@ -159,9 +152,7 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
} }
function showPackageInstallNotification(apiClient, installation, status) { function showPackageInstallNotification(apiClient, installation, status) {
apiClient.getCurrentUser().then(function (user) { apiClient.getCurrentUser().then(function (user) {
if (!user.Policy.IsAdministrator) { if (!user.Policy.IsAdministrator) {
return; return;
} }
@ -195,7 +186,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
} }
if (status === 'progress') { if (status === 'progress') {
var percentComplete = Math.round(installation.PercentComplete || 0); var percentComplete = Math.round(installation.PercentComplete || 0);
notification.body = percentComplete + '% complete.'; notification.body = percentComplete + '% complete.';
@ -246,7 +236,6 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
}); });
events.on(serverNotifications, 'RestartRequired', function (e, apiClient) { events.on(serverNotifications, 'RestartRequired', function (e, apiClient) {
var serverId = apiClient.serverInfo().Id; var serverId = apiClient.serverInfo().Id;
var notification = { var notification = {
tag: 'restart' + serverId, tag: 'restart' + serverId,

View file

@ -37,7 +37,6 @@ import 'emby-ratingbutton';
let isVisibilityAllowed = true; let isVisibilityAllowed = true;
function getNowPlayingBarHtml() { function getNowPlayingBarHtml() {
let html = ''; let html = '';
html += '<div class="nowPlayingBar hide nowPlayingBar-hidden">'; html += '<div class="nowPlayingBar hide nowPlayingBar-hidden">';
@ -97,12 +96,10 @@ import 'emby-ratingbutton';
} }
function onSlideDownComplete() { function onSlideDownComplete() {
this.classList.add('hide'); this.classList.add('hide');
} }
function slideDown(elem) { function slideDown(elem) {
// trigger reflow // trigger reflow
void elem.offsetWidth; void elem.offsetWidth;
@ -114,7 +111,6 @@ import 'emby-ratingbutton';
} }
function slideUp(elem) { function slideUp(elem) {
dom.removeEventListener(elem, dom.whichTransitionEvent(), onSlideDownComplete, { dom.removeEventListener(elem, dom.whichTransitionEvent(), onSlideDownComplete, {
once: true once: true
}); });
@ -132,7 +128,6 @@ import 'emby-ratingbutton';
} }
function bindEvents(elem) { function bindEvents(elem) {
currentTimeElement = elem.querySelector('.nowPlayingBarCurrentTime'); currentTimeElement = elem.querySelector('.nowPlayingBarCurrentTime');
nowPlayingImageElement = elem.querySelector('.nowPlayingImage'); nowPlayingImageElement = elem.querySelector('.nowPlayingImage');
nowPlayingTextElement = elem.querySelector('.nowPlayingBarText'); nowPlayingTextElement = elem.querySelector('.nowPlayingBarText');
@ -145,15 +140,12 @@ import 'emby-ratingbutton';
volumeSliderContainer = elem.querySelector('.nowPlayingBarVolumeSliderContainer'); volumeSliderContainer = elem.querySelector('.nowPlayingBarVolumeSliderContainer');
muteButton.addEventListener('click', function () { muteButton.addEventListener('click', function () {
if (currentPlayer) { if (currentPlayer) {
playbackManager.toggleMute(currentPlayer); playbackManager.toggleMute(currentPlayer);
} }
}); });
elem.querySelector('.stopButton').addEventListener('click', function () { elem.querySelector('.stopButton').addEventListener('click', function () {
if (currentPlayer) { if (currentPlayer) {
playbackManager.stop(currentPlayer); playbackManager.stop(currentPlayer);
} }
@ -164,7 +156,6 @@ import 'emby-ratingbutton';
}); });
elem.querySelector('.nextTrackButton').addEventListener('click', function () { elem.querySelector('.nextTrackButton').addEventListener('click', function () {
if (currentPlayer) { if (currentPlayer) {
playbackManager.nextTrack(currentPlayer); playbackManager.nextTrack(currentPlayer);
} }
@ -224,18 +215,14 @@ import 'emby-ratingbutton';
}); });
positionSlider.addEventListener('change', function () { positionSlider.addEventListener('change', function () {
if (currentPlayer) { if (currentPlayer) {
const newPercent = parseFloat(this.value); const newPercent = parseFloat(this.value);
playbackManager.seekPercent(newPercent, currentPlayer); playbackManager.seekPercent(newPercent, currentPlayer);
} }
}); });
positionSlider.getBubbleText = function (value) { positionSlider.getBubbleText = function (value) {
const state = lastPlayerState; const state = lastPlayerState;
if (!state || !state.NowPlayingItem || !currentRuntimeTicks) { if (!state || !state.NowPlayingItem || !currentRuntimeTicks) {
@ -250,7 +237,6 @@ import 'emby-ratingbutton';
}; };
elem.addEventListener('click', function (e) { elem.addEventListener('click', function (e) {
if (!dom.parentWithTag(e.target, ['BUTTON', 'INPUT'])) { if (!dom.parentWithTag(e.target, ['BUTTON', 'INPUT'])) {
showRemoteControl(); showRemoteControl();
} }
@ -258,7 +244,6 @@ import 'emby-ratingbutton';
} }
function showRemoteControl() { function showRemoteControl() {
import('appRouter').then(({default: appRouter}) => { import('appRouter').then(({default: appRouter}) => {
appRouter.showNowPlaying(); appRouter.showNowPlaying();
}); });
@ -266,7 +251,6 @@ import 'emby-ratingbutton';
let nowPlayingBarElement; let nowPlayingBarElement;
function getNowPlayingBar() { function getNowPlayingBar() {
if (nowPlayingBarElement) { if (nowPlayingBarElement) {
return Promise.resolve(nowPlayingBarElement); return Promise.resolve(nowPlayingBarElement);
} }
@ -327,7 +311,6 @@ import 'emby-ratingbutton';
} }
function updatePlayerStateInternal(event, state, player) { function updatePlayerStateInternal(event, state, player) {
showNowPlayingBar(); showNowPlayingBar();
lastPlayerState = state; lastPlayerState = state;
@ -415,7 +398,6 @@ import 'emby-ratingbutton';
} }
function updatePlayerVolumeState(isMuted, volumeLevel) { function updatePlayerVolumeState(isMuted, volumeLevel) {
const supportedCommands = currentPlayerSupportedCommands; const supportedCommands = currentPlayerSupportedCommands;
let showMuteButton = true; let showMuteButton = true;
@ -446,7 +428,6 @@ import 'emby-ratingbutton';
// See bindEvents for why this is necessary // See bindEvents for why this is necessary
if (volumeSlider) { if (volumeSlider) {
volumeSliderContainer.classList.toggle('hide', !showVolumeSlider); volumeSliderContainer.classList.toggle('hide', !showVolumeSlider);
if (!volumeSlider.dragging) { if (!volumeSlider.dragging) {
@ -456,7 +437,6 @@ import 'emby-ratingbutton';
} }
function seriesImageUrl(item, options) { function seriesImageUrl(item, options) {
if (!item) { if (!item) {
throw new Error('item cannot be null!'); throw new Error('item cannot be null!');
} }
@ -469,9 +449,7 @@ import 'emby-ratingbutton';
options.type = options.type || 'Primary'; options.type = options.type || 'Primary';
if (options.type === 'Primary') { if (options.type === 'Primary') {
if (item.SeriesPrimaryImageTag) { if (item.SeriesPrimaryImageTag) {
options.tag = item.SeriesPrimaryImageTag; options.tag = item.SeriesPrimaryImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
@ -479,15 +457,12 @@ import 'emby-ratingbutton';
} }
if (options.type === 'Thumb') { if (options.type === 'Thumb') {
if (item.SeriesThumbImageTag) { if (item.SeriesThumbImageTag) {
options.tag = item.SeriesThumbImageTag; options.tag = item.SeriesThumbImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
} }
if (item.ParentThumbImageTag) { if (item.ParentThumbImageTag) {
options.tag = item.ParentThumbImageTag; options.tag = item.ParentThumbImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId, options);
@ -498,7 +473,6 @@ import 'emby-ratingbutton';
} }
function imageUrl(item, options) { function imageUrl(item, options) {
if (!item) { if (!item) {
throw new Error('item cannot be null!'); throw new Error('item cannot be null!');
} }
@ -507,13 +481,11 @@ import 'emby-ratingbutton';
options.type = options.type || 'Primary'; options.type = options.type || 'Primary';
if (item.ImageTags && item.ImageTags[options.type]) { if (item.ImageTags && item.ImageTags[options.type]) {
options.tag = item.ImageTags[options.type]; options.tag = item.ImageTags[options.type];
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId || item.Id, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId || item.Id, options);
} }
if (item.AlbumId && item.AlbumPrimaryImageTag) { if (item.AlbumId && item.AlbumPrimaryImageTag) {
options.tag = item.AlbumPrimaryImageTag; options.tag = item.AlbumPrimaryImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId, options);
} }
@ -523,7 +495,6 @@ import 'emby-ratingbutton';
let currentImgUrl; let currentImgUrl;
function updateNowPlayingInfo(state) { function updateNowPlayingInfo(state) {
const nowPlayingItem = state.NowPlayingItem; const nowPlayingItem = state.NowPlayingItem;
const textLines = nowPlayingItem ? nowPlayingHelper.getNowPlayingNames(nowPlayingItem) : []; const textLines = nowPlayingItem ? nowPlayingHelper.getNowPlayingNames(nowPlayingItem) : [];
@ -577,7 +548,6 @@ import 'emby-ratingbutton';
if (nowPlayingItem.Id) { if (nowPlayingItem.Id) {
if (isRefreshing) { if (isRefreshing) {
const apiClient = connectionManager.getApiClient(nowPlayingItem.ServerId); const apiClient = connectionManager.getApiClient(nowPlayingItem.ServerId);
apiClient.getItem(apiClient.getCurrentUserId(), nowPlayingItem.Id).then(function (item) { apiClient.getItem(apiClient.getCurrentUserId(), nowPlayingItem.Id).then(function (item) {
const userData = item.UserData || {}; const userData = item.UserData || {};
@ -655,7 +625,6 @@ import 'emby-ratingbutton';
} }
function hideNowPlayingBar() { function hideNowPlayingBar() {
isEnabled = false; isEnabled = false;
// Use a timeout to prevent the bar from hiding and showing quickly // Use a timeout to prevent the bar from hiding and showing quickly
@ -664,13 +633,11 @@ import 'emby-ratingbutton';
// Don't call getNowPlayingBar here because we don't want to end up creating it just to hide it // Don't call getNowPlayingBar here because we don't want to end up creating it just to hide it
const elem = document.getElementsByClassName('nowPlayingBar')[0]; const elem = document.getElementsByClassName('nowPlayingBar')[0];
if (elem) { if (elem) {
slideDown(elem); slideDown(elem);
} }
} }
function onPlaybackStopped(e, state) { function onPlaybackStopped(e, state) {
console.debug('nowplaying event: ' + e.type); console.debug('nowplaying event: ' + e.type);
const player = this; const player = this;
@ -686,7 +653,6 @@ import 'emby-ratingbutton';
} }
function onPlayPauseStateChanged(e) { function onPlayPauseStateChanged(e) {
if (!isEnabled) { if (!isEnabled) {
return; return;
} }
@ -696,7 +662,6 @@ import 'emby-ratingbutton';
} }
function onStateChanged(event, state) { function onStateChanged(event, state) {
console.debug('nowplaying event: ' + event.type); console.debug('nowplaying event: ' + event.type);
const player = this; const player = this;
@ -723,7 +688,6 @@ import 'emby-ratingbutton';
} }
function onTimeUpdate(e) { function onTimeUpdate(e) {
if (!isEnabled) { if (!isEnabled) {
return; return;
} }
@ -731,7 +695,6 @@ import 'emby-ratingbutton';
// Try to avoid hammering the document with changes // Try to avoid hammering the document with changes
const now = new Date().getTime(); const now = new Date().getTime();
if ((now - lastUpdateTime) < 700) { if ((now - lastUpdateTime) < 700) {
return; return;
} }
lastUpdateTime = now; lastUpdateTime = now;
@ -742,7 +705,6 @@ import 'emby-ratingbutton';
} }
function releaseCurrentPlayer() { function releaseCurrentPlayer() {
const player = currentPlayer; const player = currentPlayer;
if (player) { if (player) {
@ -762,7 +724,6 @@ import 'emby-ratingbutton';
} }
function onVolumeChanged(e) { function onVolumeChanged(e) {
if (!isEnabled) { if (!isEnabled) {
return; return;
} }
@ -773,14 +734,12 @@ import 'emby-ratingbutton';
} }
function refreshFromPlayer(player) { function refreshFromPlayer(player) {
const state = playbackManager.getPlayerState(player); const state = playbackManager.getPlayerState(player);
onStateChanged.call(player, { type: 'init' }, state); onStateChanged.call(player, { type: 'init' }, state);
} }
function bindToPlayer(player) { function bindToPlayer(player) {
if (player === currentPlayer) { if (player === currentPlayer) {
return; return;
} }
@ -813,16 +772,12 @@ import 'emby-ratingbutton';
bindToPlayer(playbackManager.getCurrentPlayer()); bindToPlayer(playbackManager.getCurrentPlayer());
document.addEventListener('viewbeforeshow', function (e) { document.addEventListener('viewbeforeshow', function (e) {
if (!e.detail.options.enableMediaControl) { if (!e.detail.options.enableMediaControl) {
if (isVisibilityAllowed) { if (isVisibilityAllowed) {
isVisibilityAllowed = false; isVisibilityAllowed = false;
hideNowPlayingBar(); hideNowPlayingBar();
} }
} else if (!isVisibilityAllowed) { } else if (!isVisibilityAllowed) {
isVisibilityAllowed = true; isVisibilityAllowed = true;
if (currentPlayer) { if (currentPlayer) {
refreshFromPlayer(currentPlayer); refreshFromPlayer(currentPlayer);

View file

@ -4,9 +4,7 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
var settingsKey = 'installedpackages1'; var settingsKey = 'installedpackages1';
function addPackage(packageManager, pkg) { function addPackage(packageManager, pkg) {
packageManager.packagesList = packageManager.packagesList.filter(function (p) { packageManager.packagesList = packageManager.packagesList.filter(function (p) {
return p.name !== pkg.name; return p.name !== pkg.name;
}); });
@ -14,7 +12,6 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
} }
function removeUrl(url) { function removeUrl(url) {
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]'); var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
manifestUrls = manifestUrls.filter(function (i) { manifestUrls = manifestUrls.filter(function (i) {
@ -25,9 +22,7 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
} }
function loadPackage(packageManager, url, throwError) { function loadPackage(packageManager, url, throwError) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
var originalUrl = url; var originalUrl = url;
url += url.indexOf('?') === -1 ? '?' : '&'; url += url.indexOf('?') === -1 ? '?' : '&';
@ -36,7 +31,6 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
xhr.open('GET', url, true); xhr.open('GET', url, true);
var onError = function () { var onError = function () {
if (throwError === true) { if (throwError === true) {
reject(); reject();
} else { } else {
@ -47,7 +41,6 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
xhr.onload = function (e) { xhr.onload = function (e) {
if (this.status < 400) { if (this.status < 400) {
var pkg = JSON.parse(this.response); var pkg = JSON.parse(this.response);
pkg.url = originalUrl; pkg.url = originalUrl;
@ -61,7 +54,6 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
return pluginManager.loadPlugin(packageManager.mapPath(pkg, pluginUrl)); return pluginManager.loadPlugin(packageManager.mapPath(pkg, pluginUrl));
}); });
Promise.all(promises).then(resolve, resolve); Promise.all(promises).then(resolve, resolve);
} else { } else {
onError(); onError();
} }
@ -74,7 +66,6 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
} }
function PackageManager() { function PackageManager() {
this.packagesList = []; this.packagesList = [];
} }
@ -83,9 +74,7 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
var instance = this; var instance = this;
return Promise.all(manifestUrls.map(function (u) { return Promise.all(manifestUrls.map(function (u) {
return loadPackage(instance, u); return loadPackage(instance, u);
})).then(function () { })).then(function () {
return Promise.resolve(); return Promise.resolve();
}, function () { }, function () {
@ -98,9 +87,7 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
}; };
PackageManager.prototype.install = function (url) { PackageManager.prototype.install = function (url) {
return loadPackage(this, url, true).then(function (pkg) { return loadPackage(this, url, true).then(function (pkg) {
var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]'); var manifestUrls = JSON.parse(appSettings.get(settingsKey) || '[]');
if (manifestUrls.indexOf(url) === -1) { if (manifestUrls.indexOf(url) === -1) {
@ -113,16 +100,12 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
}; };
PackageManager.prototype.uninstall = function (name) { PackageManager.prototype.uninstall = function (name) {
var pkg = this.packagesList.filter(function (p) { var pkg = this.packagesList.filter(function (p) {
return p.name === name; return p.name === name;
})[0]; })[0];
if (pkg) { if (pkg) {
this.packagesList = this.packagesList.filter(function (p) { this.packagesList = this.packagesList.filter(function (p) {
return p.name !== name; return p.name !== name;
}); });
@ -133,7 +116,6 @@ define(['appSettings', 'pluginManager'], function (appSettings, pluginManager) {
}; };
PackageManager.prototype.mapPath = function (pkg, pluginUrl) { PackageManager.prototype.mapPath = function (pkg, pluginUrl) {
var urlLower = pluginUrl.toLowerCase(); var urlLower = pluginUrl.toLowerCase();
if (urlLower.indexOf('http:') === 0 || urlLower.indexOf('https:') === 0 || urlLower.indexOf('file:') === 0) { if (urlLower.indexOf('http:') === 0 || urlLower.indexOf('https:') === 0 || urlLower.indexOf('file:') === 0) {
return pluginUrl; return pluginUrl;

View file

@ -23,10 +23,8 @@ function getOsdElementHtml() {
} }
function ensureOsdElement() { function ensureOsdElement() {
var elem = osdElement; var elem = osdElement;
if (!elem) { if (!elem) {
enableAnimation = browser.supportsCssAnimation(); enableAnimation = browser.supportsCssAnimation();
elem = document.createElement('div'); elem = document.createElement('div');
@ -50,7 +48,6 @@ function onHideComplete() {
var hideTimeout; var hideTimeout;
function showOsd() { function showOsd() {
clearHideTimeout(); clearHideTimeout();
var elem = osdElement; var elem = osdElement;
@ -79,12 +76,10 @@ function clearHideTimeout() {
} }
function hideOsd() { function hideOsd() {
clearHideTimeout(); clearHideTimeout();
var elem = osdElement; var elem = osdElement;
if (elem) { if (elem) {
if (enableAnimation) { if (enableAnimation) {
// trigger reflow // trigger reflow
void elem.offsetWidth; void elem.offsetWidth;
@ -108,7 +103,6 @@ function setIcon(iconElement, icon) {
} }
function updateElementsFromPlayer(brightness) { function updateElementsFromPlayer(brightness) {
if (iconElement) { if (iconElement) {
if (brightness >= 80) { if (brightness >= 80) {
setIcon(iconElement, 'brightness_high'); setIcon(iconElement, 'brightness_high');
@ -124,7 +118,6 @@ function updateElementsFromPlayer(brightness) {
} }
function releaseCurrentPlayer() { function releaseCurrentPlayer() {
var player = currentPlayer; var player = currentPlayer;
if (player) { if (player) {
@ -135,7 +128,6 @@ function releaseCurrentPlayer() {
} }
function onBrightnessChanged(e) { function onBrightnessChanged(e) {
var player = this; var player = this;
ensureOsdElement(); ensureOsdElement();
@ -146,7 +138,6 @@ function onBrightnessChanged(e) {
} }
function bindToPlayer(player) { function bindToPlayer(player) {
if (player === currentPlayer) { if (player === currentPlayer) {
return; return;
} }

View file

@ -1,5 +1,4 @@
export function getNowPlayingNames(nowPlayingItem, includeNonNameInfo) { export function getNowPlayingNames(nowPlayingItem, includeNonNameInfo) {
var topItem = nowPlayingItem; var topItem = nowPlayingItem;
var bottomItem = null; var bottomItem = null;
var topText = nowPlayingItem.Name; var topText = nowPlayingItem.Name;
@ -25,7 +24,6 @@ export function getNowPlayingNames(nowPlayingItem, includeNonNameInfo) {
var bottomText = ''; var bottomText = '';
if (nowPlayingItem.ArtistItems && nowPlayingItem.ArtistItems.length) { if (nowPlayingItem.ArtistItems && nowPlayingItem.ArtistItems.length) {
bottomItem = { bottomItem = {
Id: nowPlayingItem.ArtistItems[0].Id, Id: nowPlayingItem.ArtistItems[0].Id,
Name: nowPlayingItem.ArtistItems[0].Name, Name: nowPlayingItem.ArtistItems[0].Name,
@ -36,9 +34,7 @@ export function getNowPlayingNames(nowPlayingItem, includeNonNameInfo) {
bottomText = nowPlayingItem.ArtistItems.map(function (a) { bottomText = nowPlayingItem.ArtistItems.map(function (a) {
return a.Name; return a.Name;
}).join(', '); }).join(', ');
} else if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) { } else if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) {
bottomText = nowPlayingItem.Artists.join(', '); bottomText = nowPlayingItem.Artists.join(', ');
} else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) { } else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) {
bottomText = topText; bottomText = topText;

File diff suppressed because it is too large Load diff

View file

@ -14,7 +14,6 @@ function onOrientationChangeError(err) {
} }
events.on(playbackManager, 'playbackstart', function (e, player, state) { events.on(playbackManager, 'playbackstart', function (e, player, state) {
var isLocalVideo = player.isLocalPlayer && !player.isExternalPlayer && playbackManager.isPlayingVideo(player); var isLocalVideo = player.isLocalPlayer && !player.isExternalPlayer && playbackManager.isPlayingVideo(player);
if (isLocalVideo && layoutManager.mobile) { if (isLocalVideo && layoutManager.mobile) {
@ -22,7 +21,6 @@ events.on(playbackManager, 'playbackstart', function (e, player, state) {
var lockOrientation = screen.lockOrientation || screen.mozLockOrientation || screen.msLockOrientation || (screen.orientation && screen.orientation.lock); var lockOrientation = screen.lockOrientation || screen.mozLockOrientation || screen.msLockOrientation || (screen.orientation && screen.orientation.lock);
if (lockOrientation) { if (lockOrientation) {
try { try {
var promise = lockOrientation('landscape'); var promise = lockOrientation('landscape');
if (promise.then) { if (promise.then) {
@ -39,9 +37,7 @@ events.on(playbackManager, 'playbackstart', function (e, player, state) {
}); });
events.on(playbackManager, 'playbackstop', function (e, playbackStopInfo) { events.on(playbackManager, 'playbackstop', function (e, playbackStopInfo) {
if (orientationLocked && !playbackStopInfo.nextMediaType) { if (orientationLocked && !playbackStopInfo.nextMediaType) {
/* eslint-disable-next-line compat/compat */ /* eslint-disable-next-line compat/compat */
var unlockOrientation = screen.unlockOrientation || screen.mozUnlockOrientation || screen.msUnlockOrientation || (screen.orientation && screen.orientation.unlock); var unlockOrientation = screen.unlockOrientation || screen.mozUnlockOrientation || screen.msUnlockOrientation || (screen.orientation && screen.orientation.unlock);

View file

@ -8,7 +8,6 @@ import globalize from 'globalize';
import appHost from 'apphost'; import appHost from 'apphost';
function mirrorItem(info, player) { function mirrorItem(info, player) {
var item = info.item; var item = info.item;
playbackManager.displayContent({ playbackManager.displayContent({
@ -21,9 +20,7 @@ function mirrorItem(info, player) {
} }
function mirrorIfEnabled(info) { function mirrorIfEnabled(info) {
if (info && playbackManager.enableDisplayMirroring()) { if (info && playbackManager.enableDisplayMirroring()) {
var getPlayerInfo = playbackManager.getPlayerInfo(); var getPlayerInfo = playbackManager.getPlayerInfo();
if (getPlayerInfo) { if (getPlayerInfo) {
@ -39,9 +36,7 @@ function emptyCallback() {
} }
function getTargetSecondaryText(target) { function getTargetSecondaryText(target) {
if (target.user) { if (target.user) {
return target.user.Name; return target.user.Name;
} }
@ -49,7 +44,6 @@ function getTargetSecondaryText(target) {
} }
function getIcon(target) { function getIcon(target) {
var deviceType = target.deviceType; var deviceType = target.deviceType;
if (!deviceType && target.isLocalPlayer) { if (!deviceType && target.isLocalPlayer) {
@ -67,7 +61,6 @@ function getIcon(target) {
} }
switch (deviceType) { switch (deviceType) {
case 'smartphone': case 'smartphone':
return 'smartphone'; return 'smartphone';
case 'tablet': case 'tablet':
@ -84,7 +77,6 @@ function getIcon(target) {
} }
export function show(button) { export function show(button) {
var currentPlayerInfo = playbackManager.getPlayerInfo(); var currentPlayerInfo = playbackManager.getPlayerInfo();
if (currentPlayerInfo) { if (currentPlayerInfo) {
@ -99,9 +91,7 @@ export function show(button) {
loading.show(); loading.show();
playbackManager.getTargets().then(function (targets) { playbackManager.getTargets().then(function (targets) {
var menuItems = targets.map(function (t) { var menuItems = targets.map(function (t) {
var name = t.name; var name = t.name;
if (t.appName && t.appName !== t.name) { if (t.appName && t.appName !== t.name) {
@ -115,11 +105,9 @@ export function show(button) {
secondaryText: getTargetSecondaryText(t), secondaryText: getTargetSecondaryText(t),
icon: getIcon(t) icon: getIcon(t)
}; };
}); });
import('actionsheet').then(({default: actionsheet}) => { import('actionsheet').then(({default: actionsheet}) => {
loading.hide(); loading.hide();
var menuOptions = { var menuOptions = {
@ -138,7 +126,6 @@ export function show(button) {
} }
actionsheet.show(menuOptions).then(function (id) { actionsheet.show(menuOptions).then(function (id) {
var target = targets.filter(function (t) { var target = targets.filter(function (t) {
return t.id === id; return t.id === id;
})[0]; })[0];
@ -146,7 +133,6 @@ export function show(button) {
playbackManager.trySetActivePlayer(target.playerName, target); playbackManager.trySetActivePlayer(target.playerName, target);
mirrorIfEnabled(); mirrorIfEnabled();
}, emptyCallback); }, emptyCallback);
}); });
}); });
@ -164,11 +150,8 @@ function showActivePlayerMenu(playerInfo) {
} }
function disconnectFromPlayer(currentDeviceName) { function disconnectFromPlayer(currentDeviceName) {
if (playbackManager.getSupportedCommands().indexOf('EndSession') !== -1) { if (playbackManager.getSupportedCommands().indexOf('EndSession') !== -1) {
import('dialog').then(({default: dialog}) => { import('dialog').then(({default: dialog}) => {
var menuItems = []; var menuItems = [];
menuItems.push({ menuItems.push({
@ -186,7 +169,6 @@ function disconnectFromPlayer(currentDeviceName) {
}).then(function (id) { }).then(function (id) {
switch (id) { switch (id) {
case 'yes': case 'yes':
playbackManager.getCurrentPlayer().endSession(); playbackManager.getCurrentPlayer().endSession();
playbackManager.setDefaultPlayerActive(); playbackManager.setDefaultPlayerActive();
@ -198,17 +180,13 @@ function disconnectFromPlayer(currentDeviceName) {
break; break;
} }
}); });
}); });
} else { } else {
playbackManager.setDefaultPlayerActive(); playbackManager.setDefaultPlayerActive();
} }
} }
function showActivePlayerMenuInternal(dialogHelper, playerInfo) { function showActivePlayerMenuInternal(dialogHelper, playerInfo) {
var html = ''; var html = '';
var dialogOptions = { var dialogOptions = {
@ -234,7 +212,6 @@ function showActivePlayerMenuInternal(dialogHelper, playerInfo) {
html += '<div>'; html += '<div>';
if (playerInfo.supportedCommands.indexOf('DisplayContent') !== -1) { if (playerInfo.supportedCommands.indexOf('DisplayContent') !== -1) {
html += '<label class="checkboxContainer">'; html += '<label class="checkboxContainer">';
var checkedHtml = playbackManager.enableDisplayMirroring() ? ' checked' : ''; var checkedHtml = playbackManager.enableDisplayMirroring() ? ' checked' : '';
html += '<input type="checkbox" is="emby-checkbox" class="chkMirror"' + checkedHtml + '/>'; html += '<input type="checkbox" is="emby-checkbox" class="chkMirror"' + checkedHtml + '/>';
@ -293,7 +270,6 @@ function onMirrorChange() {
} }
document.addEventListener('viewshow', function (e) { document.addEventListener('viewshow', function (e) {
var state = e.detail.state || {}; var state = e.detail.state || {};
var item = state.item; var item = state.item;

View file

@ -5,7 +5,6 @@ import globalize from 'globalize';
import qualityoptions from 'qualityoptions'; import qualityoptions from 'qualityoptions';
function showQualityMenu(player, btn) { function showQualityMenu(player, btn) {
var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) { var videoStream = playbackManager.currentMediaSource(player).MediaStreams.filter(function (stream) {
return stream.Type === 'Video'; return stream.Type === 'Video';
})[0]; })[0];

View file

@ -1,5 +1,4 @@
export function getDisplayPlayMethod(session) { export function getDisplayPlayMethod(session) {
if (!session.NowPlayingItem) { if (!session.NowPlayingItem) {
return null; return null;
} }

View file

@ -3,16 +3,13 @@ define([], function () {
var currentId = 0; var currentId = 0;
function addUniquePlaylistItemId(item) { function addUniquePlaylistItemId(item) {
if (!item.PlaylistItemId) { if (!item.PlaylistItemId) {
item.PlaylistItemId = 'playlistItem' + currentId; item.PlaylistItemId = 'playlistItem' + currentId;
currentId++; currentId++;
} }
} }
function findPlaylistIndex(playlistItemId, list) { function findPlaylistIndex(playlistItemId, list) {
for (var i = 0, length = list.length; i < length; i++) { for (var i = 0, length = list.length; i < length; i++) {
if (list[i].PlaylistItemId === playlistItemId) { if (list[i].PlaylistItemId === playlistItemId) {
return i; return i;
@ -23,7 +20,6 @@ define([], function () {
} }
function PlayQueueManager() { function PlayQueueManager() {
this._sortedPlaylist = []; this._sortedPlaylist = [];
this._playlist = []; this._playlist = [];
this._repeatMode = 'RepeatNone'; this._repeatMode = 'RepeatNone';
@ -35,11 +31,9 @@ define([], function () {
}; };
PlayQueueManager.prototype.setPlaylist = function (items) { PlayQueueManager.prototype.setPlaylist = function (items) {
items = items.slice(0); items = items.slice(0);
for (var i = 0, length = items.length; i < length; i++) { for (var i = 0, length = items.length; i < length; i++) {
addUniquePlaylistItemId(items[i]); addUniquePlaylistItemId(items[i]);
} }
@ -49,9 +43,7 @@ define([], function () {
}; };
PlayQueueManager.prototype.queue = function (items) { PlayQueueManager.prototype.queue = function (items) {
for (var i = 0, length = items.length; i < length; i++) { for (var i = 0, length = items.length; i < length; i++) {
addUniquePlaylistItemId(items[i]); addUniquePlaylistItemId(items[i]);
this._playlist.push(items[i]); this._playlist.push(items[i]);
@ -105,7 +97,6 @@ define([], function () {
var length; var length;
for (i = 0, length = items.length; i < length; i++) { for (i = 0, length = items.length; i < length; i++) {
addUniquePlaylistItemId(items[i]); addUniquePlaylistItemId(items[i]);
} }
@ -121,12 +112,10 @@ define([], function () {
}; };
PlayQueueManager.prototype.getCurrentPlaylistIndex = function () { PlayQueueManager.prototype.getCurrentPlaylistIndex = function () {
return findPlaylistIndex(this.getCurrentPlaylistItemId(), this._playlist); return findPlaylistIndex(this.getCurrentPlaylistItemId(), this._playlist);
}; };
PlayQueueManager.prototype.getCurrentItem = function () { PlayQueueManager.prototype.getCurrentItem = function () {
var index = findPlaylistIndex(this.getCurrentPlaylistItemId(), this._playlist); var index = findPlaylistIndex(this.getCurrentPlaylistItemId(), this._playlist);
return index === -1 ? null : this._playlist[index]; return index === -1 ? null : this._playlist[index];
@ -137,12 +126,10 @@ define([], function () {
}; };
PlayQueueManager.prototype.setPlaylistState = function (playlistItemId, playlistIndex) { PlayQueueManager.prototype.setPlaylistState = function (playlistItemId, playlistIndex) {
this._currentPlaylistItemId = playlistItemId; this._currentPlaylistItemId = playlistItemId;
}; };
PlayQueueManager.prototype.setPlaylistIndex = function (playlistIndex) { PlayQueueManager.prototype.setPlaylistIndex = function (playlistIndex) {
if (playlistIndex < 0) { if (playlistIndex < 0) {
this.setPlaylistState(null); this.setPlaylistState(null);
} else { } else {
@ -151,7 +138,6 @@ define([], function () {
}; };
PlayQueueManager.prototype.removeFromPlaylist = function (playlistItemIds) { PlayQueueManager.prototype.removeFromPlaylist = function (playlistItemIds) {
if (this._playlist.length <= playlistItemIds.length) { if (this._playlist.length <= playlistItemIds.length) {
return { return {
result: 'empty' result: 'empty'
@ -180,7 +166,6 @@ define([], function () {
} }
PlayQueueManager.prototype.movePlaylistItem = function (playlistItemId, newIndex) { PlayQueueManager.prototype.movePlaylistItem = function (playlistItemId, newIndex) {
var playlist = this.getPlaylist(); var playlist = this.getPlaylist();
var oldIndex; var oldIndex;
@ -213,7 +198,6 @@ define([], function () {
}; };
PlayQueueManager.prototype.reset = function () { PlayQueueManager.prototype.reset = function () {
this._sortedPlaylist = []; this._sortedPlaylist = [];
this._playlist = []; this._playlist = [];
this._currentPlaylistItemId = null; this._currentPlaylistItemId = null;
@ -265,13 +249,11 @@ define([], function () {
}; };
PlayQueueManager.prototype.getNextItemInfo = function () { PlayQueueManager.prototype.getNextItemInfo = function () {
var newIndex; var newIndex;
var playlist = this.getPlaylist(); var playlist = this.getPlaylist();
var playlistLength = playlist.length; var playlistLength = playlist.length;
switch (this.getRepeatMode()) { switch (this.getRepeatMode()) {
case 'RepeatOne': case 'RepeatOne':
newIndex = this.getCurrentPlaylistIndex(); newIndex = this.getCurrentPlaylistIndex();
break; break;

View file

@ -23,10 +23,8 @@ function getOsdElementHtml() {
} }
function ensureOsdElement() { function ensureOsdElement() {
var elem = osdElement; var elem = osdElement;
if (!elem) { if (!elem) {
enableAnimation = browser.supportsCssAnimation(); enableAnimation = browser.supportsCssAnimation();
elem = document.createElement('div'); elem = document.createElement('div');
@ -50,7 +48,6 @@ function onHideComplete() {
var hideTimeout; var hideTimeout;
function showOsd() { function showOsd() {
clearHideTimeout(); clearHideTimeout();
var elem = osdElement; var elem = osdElement;
@ -79,12 +76,10 @@ function clearHideTimeout() {
} }
function hideOsd() { function hideOsd() {
clearHideTimeout(); clearHideTimeout();
var elem = osdElement; var elem = osdElement;
if (elem) { if (elem) {
if (enableAnimation) { if (enableAnimation) {
// trigger reflow // trigger reflow
void elem.offsetWidth; void elem.offsetWidth;
@ -103,7 +98,6 @@ function hideOsd() {
} }
function updatePlayerVolumeState(isMuted, volume) { function updatePlayerVolumeState(isMuted, volume) {
if (iconElement) { if (iconElement) {
iconElement.classList.remove('volume_off', 'volume_up'); iconElement.classList.remove('volume_off', 'volume_up');
iconElement.classList.add(isMuted ? 'volume_off' : 'volume_up'); iconElement.classList.add(isMuted ? 'volume_off' : 'volume_up');
@ -114,7 +108,6 @@ function updatePlayerVolumeState(isMuted, volume) {
} }
function releaseCurrentPlayer() { function releaseCurrentPlayer() {
var player = currentPlayer; var player = currentPlayer;
if (player) { if (player) {
@ -125,7 +118,6 @@ function releaseCurrentPlayer() {
} }
function onVolumeChanged(e) { function onVolumeChanged(e) {
var player = this; var player = this;
ensureOsdElement(); ensureOsdElement();
@ -136,7 +128,6 @@ function onVolumeChanged(e) {
} }
function bindToPlayer(player) { function bindToPlayer(player) {
if (player === currentPlayer) { if (player === currentPlayer) {
return; return;
} }

View file

@ -13,7 +13,6 @@ import 'emby-checkbox';
/* eslint-disable indent */ /* eslint-disable indent */
function fillSkipLengths(select) { function fillSkipLengths(select) {
const options = [5, 10, 15, 20, 25, 30]; const options = [5, 10, 15, 20, 25, 30];
select.innerHTML = options.map(option => { select.innerHTML = options.map(option => {
@ -27,13 +26,11 @@ import 'emby-checkbox';
} }
function populateLanguages(select, languages) { function populateLanguages(select, languages) {
let html = ''; let html = '';
html += `<option value=''>${globalize.translate('AnyLanguage')}</option>`; html += `<option value=''>${globalize.translate('AnyLanguage')}</option>`;
for (let i = 0, length = languages.length; i < length; i++) { for (let i = 0, length = languages.length; i < length; i++) {
const culture = languages[i]; const culture = languages[i];
html += `<option value='${culture.ThreeLetterISOLanguageName}'>${culture.DisplayName}</option>`; html += `<option value='${culture.ThreeLetterISOLanguageName}'>${culture.DisplayName}</option>`;
@ -43,7 +40,6 @@ import 'emby-checkbox';
} }
function setMaxBitrateIntoField(select, isInNetwork, mediatype) { function setMaxBitrateIntoField(select, isInNetwork, mediatype) {
const options = mediatype === 'Audio' ? qualityoptions.getAudioQualityOptions({ const options = mediatype === 'Audio' ? qualityoptions.getAudioQualityOptions({
currentMaxBitrate: appSettings.maxStreamingBitrate(isInNetwork, mediatype), currentMaxBitrate: appSettings.maxStreamingBitrate(isInNetwork, mediatype),
@ -59,7 +55,6 @@ import 'emby-checkbox';
}); });
select.innerHTML = options.map(i => { select.innerHTML = options.map(i => {
// render empty string instead of 0 for the auto option // render empty string instead of 0 for the auto option
return `<option value="${i.bitrate || ''}">${i.name}</option>`; return `<option value="${i.bitrate || ''}">${i.name}</option>`;
}).join(''); }).join('');
@ -72,7 +67,6 @@ import 'emby-checkbox';
} }
function fillChromecastQuality(select) { function fillChromecastQuality(select) {
const options = qualityoptions.getVideoQualityOptions({ const options = qualityoptions.getVideoQualityOptions({
currentMaxBitrate: appSettings.maxChromecastBitrate(), currentMaxBitrate: appSettings.maxChromecastBitrate(),
@ -81,7 +75,6 @@ import 'emby-checkbox';
}); });
select.innerHTML = options.map(i => { select.innerHTML = options.map(i => {
// render empty string instead of 0 for the auto option // render empty string instead of 0 for the auto option
return `<option value="${i.bitrate || ''}">${i.name}</option>`; return `<option value="${i.bitrate || ''}">${i.name}</option>`;
}).join(''); }).join('');
@ -90,7 +83,6 @@ import 'emby-checkbox';
} }
function setMaxBitrateFromField(select, isInNetwork, mediatype) { function setMaxBitrateFromField(select, isInNetwork, mediatype) {
if (select.value) { if (select.value) {
appSettings.maxStreamingBitrate(isInNetwork, mediatype, select.value); appSettings.maxStreamingBitrate(isInNetwork, mediatype, select.value);
appSettings.enableAutomaticBitrateDetection(isInNetwork, mediatype, false); appSettings.enableAutomaticBitrateDetection(isInNetwork, mediatype, false);
@ -100,7 +92,6 @@ import 'emby-checkbox';
} }
function showHideQualityFields(context, user, apiClient) { function showHideQualityFields(context, user, apiClient) {
if (user.Policy.EnableVideoPlaybackTranscoding) { if (user.Policy.EnableVideoPlaybackTranscoding) {
context.querySelector('.videoQualitySection').classList.remove('hide'); context.querySelector('.videoQualitySection').classList.remove('hide');
} else { } else {
@ -108,7 +99,6 @@ import 'emby-checkbox';
} }
if (appHost.supports('multiserver')) { if (appHost.supports('multiserver')) {
context.querySelector('.fldVideoInNetworkQuality').classList.remove('hide'); context.querySelector('.fldVideoInNetworkQuality').classList.remove('hide');
context.querySelector('.fldVideoInternetQuality').classList.remove('hide'); context.querySelector('.fldVideoInternetQuality').classList.remove('hide');
@ -122,15 +112,12 @@ import 'emby-checkbox';
} }
apiClient.getEndpointInfo().then(endpointInfo => { apiClient.getEndpointInfo().then(endpointInfo => {
if (endpointInfo.IsInNetwork) { if (endpointInfo.IsInNetwork) {
context.querySelector('.fldVideoInNetworkQuality').classList.remove('hide'); context.querySelector('.fldVideoInNetworkQuality').classList.remove('hide');
context.querySelector('.fldVideoInternetQuality').classList.add('hide'); context.querySelector('.fldVideoInternetQuality').classList.add('hide');
context.querySelector('.musicQualitySection').classList.add('hide'); context.querySelector('.musicQualitySection').classList.add('hide');
} else { } else {
context.querySelector('.fldVideoInNetworkQuality').classList.add('hide'); context.querySelector('.fldVideoInNetworkQuality').classList.add('hide');
context.querySelector('.fldVideoInternetQuality').classList.remove('hide'); context.querySelector('.fldVideoInternetQuality').classList.remove('hide');
@ -145,7 +132,6 @@ import 'emby-checkbox';
} }
function showOrHideEpisodesField(context) { function showOrHideEpisodesField(context) {
if (browser.tizen || browser.web0s) { if (browser.tizen || browser.web0s) {
context.querySelector('.fldEpisodeAutoPlay').classList.add('hide'); context.querySelector('.fldEpisodeAutoPlay').classList.add('hide');
return; return;
@ -155,14 +141,12 @@ import 'emby-checkbox';
} }
function loadForm(context, user, userSettings, apiClient) { function loadForm(context, user, userSettings, apiClient) {
const loggedInUserId = apiClient.getCurrentUserId(); const loggedInUserId = apiClient.getCurrentUserId();
const userId = user.Id; const userId = user.Id;
showHideQualityFields(context, user, apiClient); showHideQualityFields(context, user, apiClient);
apiClient.getCultures().then(allCultures => { apiClient.getCultures().then(allCultures => {
populateLanguages(context.querySelector('#selectAudioLanguage'), allCultures); populateLanguages(context.querySelector('#selectAudioLanguage'), allCultures);
context.querySelector('#selectAudioLanguage', context).value = user.Configuration.AudioLanguagePreference || ''; context.querySelector('#selectAudioLanguage', context).value = user.Configuration.AudioLanguagePreference || '';
@ -171,7 +155,6 @@ import 'emby-checkbox';
// hide cinema mode options if disabled at server level // hide cinema mode options if disabled at server level
apiClient.getNamedConfiguration('cinemamode').then(cinemaConfig => { apiClient.getNamedConfiguration('cinemamode').then(cinemaConfig => {
if (cinemaConfig.EnableIntrosForMovies || cinemaConfig.EnableIntrosForEpisodes) { if (cinemaConfig.EnableIntrosForMovies || cinemaConfig.EnableIntrosForEpisodes) {
context.querySelector('.cinemaModeOptions').classList.remove('hide'); context.querySelector('.cinemaModeOptions').classList.remove('hide');
} else { } else {
@ -232,7 +215,6 @@ import 'emby-checkbox';
} }
function saveUser(context, user, userSettingsInstance, apiClient) { function saveUser(context, user, userSettingsInstance, apiClient) {
appSettings.enableSystemExternalPlayers(context.querySelector('.chkExternalVideoPlayer').checked); appSettings.enableSystemExternalPlayers(context.querySelector('.chkExternalVideoPlayer').checked);
appSettings.maxChromecastBitrate(context.querySelector('.selectChromecastVideoQuality').value); appSettings.maxChromecastBitrate(context.querySelector('.selectChromecastVideoQuality').value);
@ -256,13 +238,10 @@ import 'emby-checkbox';
} }
function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) { function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) {
loading.show(); loading.show();
apiClient.getUser(userId).then(user => { apiClient.getUser(userId).then(user => {
saveUser(context, user, userSettings, apiClient).then(() => { saveUser(context, user, userSettings, apiClient).then(() => {
loading.hide(); loading.hide();
if (enableSaveConfirmation) { if (enableSaveConfirmation) {
import('toast').then(({default: toast}) => { import('toast').then(({default: toast}) => {
@ -271,7 +250,6 @@ import 'emby-checkbox';
} }
events.trigger(instance, 'saved'); events.trigger(instance, 'saved');
}, () => { }, () => {
loading.hide(); loading.hide();
}); });
@ -279,14 +257,12 @@ import 'emby-checkbox';
} }
function onSubmit(e) { function onSubmit(e) {
const self = this; const self = this;
const apiClient = connectionManager.getApiClient(self.options.serverId); const apiClient = connectionManager.getApiClient(self.options.serverId);
const userId = self.options.userId; const userId = self.options.userId;
const userSettings = self.options.userSettings; const userSettings = self.options.userSettings;
userSettings.setUserInfo(userId, apiClient).then(() => { userSettings.setUserInfo(userId, apiClient).then(() => {
const enableSaveConfirmation = self.options.enableSaveConfirmation; const enableSaveConfirmation = self.options.enableSaveConfirmation;
save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation); save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation);
}); });
@ -299,9 +275,7 @@ import 'emby-checkbox';
} }
function embed(options, self) { function embed(options, self) {
return import('text!./playbackSettings.template.html').then(({default: template}) => { return import('text!./playbackSettings.template.html').then(({default: template}) => {
options.element.innerHTML = globalize.translateHtml(template, 'core'); options.element.innerHTML = globalize.translateHtml(template, 'core');
options.element.querySelector('form').addEventListener('submit', onSubmit.bind(self)); options.element.querySelector('form').addEventListener('submit', onSubmit.bind(self));
@ -325,7 +299,6 @@ import 'emby-checkbox';
} }
loadData() { loadData() {
const self = this; const self = this;
const context = self.options.element; const context = self.options.element;
@ -336,9 +309,7 @@ import 'emby-checkbox';
const userSettings = self.options.userSettings; const userSettings = self.options.userSettings;
apiClient.getUser(userId).then(user => { apiClient.getUser(userId).then(user => {
userSettings.setUserInfo(userId, apiClient).then(() => { userSettings.setUserInfo(userId, apiClient).then(() => {
self.dataLoaded = true; self.dataLoaded = true;
loadForm(context, user, userSettings, apiClient); loadForm(context, user, userSettings, apiClient);
@ -351,7 +322,6 @@ import 'emby-checkbox';
} }
destroy() { destroy() {
this.options = null; this.options = null;
} }
} }

View file

@ -11,7 +11,6 @@ import 'css!./playerstats';
/* eslint-disable indent */ /* eslint-disable indent */
function init(instance) { function init(instance) {
const parent = document.createElement('div'); const parent = document.createElement('div');
parent.classList.add('playerStats'); parent.classList.add('playerStats');
@ -50,9 +49,7 @@ import 'css!./playerstats';
} }
function renderStats(elem, categories) { function renderStats(elem, categories) {
elem.querySelector('.playerStats-stats').innerHTML = categories.map(function (category) { elem.querySelector('.playerStats-stats').innerHTML = categories.map(function (category) {
let categoryHtml = ''; let categoryHtml = '';
const stats = category.stats; const stats = category.stats;
@ -72,7 +69,6 @@ import 'css!./playerstats';
} }
for (let i = 0, length = stats.length; i < length; i++) { for (let i = 0, length = stats.length; i < length; i++) {
categoryHtml += '<div class="playerStats-stat">'; categoryHtml += '<div class="playerStats-stat">';
const stat = stats[i]; const stat = stats[i];
@ -89,12 +85,10 @@ import 'css!./playerstats';
} }
return categoryHtml; return categoryHtml;
}).join(''); }).join('');
} }
function getSession(instance, player) { function getSession(instance, player) {
const now = new Date().getTime(); const now = new Date().getTime();
if ((now - (instance.lastSessionTime || 0)) < 10000) { if ((now - (instance.lastSessionTime || 0)) < 10000) {
@ -106,19 +100,16 @@ import 'css!./playerstats';
return apiClient.getSessions({ return apiClient.getSessions({
deviceId: apiClient.deviceId() deviceId: apiClient.deviceId()
}).then(function (sessions) { }).then(function (sessions) {
instance.lastSession = sessions[0] || {}; instance.lastSession = sessions[0] || {};
instance.lastSessionTime = new Date().getTime(); instance.lastSessionTime = new Date().getTime();
return Promise.resolve(instance.lastSession); return Promise.resolve(instance.lastSession);
}, function () { }, function () {
return Promise.resolve({}); return Promise.resolve({});
}); });
} }
function translateReason(reason) { function translateReason(reason) {
return globalize.translate('' + reason); return globalize.translate('' + reason);
} }
@ -160,28 +151,24 @@ import 'css!./playerstats';
if (displayPlayMethod === 'Transcode') { if (displayPlayMethod === 'Transcode') {
if (totalBitrate) { if (totalBitrate) {
sessionStats.push({ sessionStats.push({
label: globalize.translate('LabelBitrate'), label: globalize.translate('LabelBitrate'),
value: getDisplayBitrate(totalBitrate) value: getDisplayBitrate(totalBitrate)
}); });
} }
if (session.TranscodingInfo.CompletionPercentage) { if (session.TranscodingInfo.CompletionPercentage) {
sessionStats.push({ sessionStats.push({
label: globalize.translate('LabelTranscodingProgress'), label: globalize.translate('LabelTranscodingProgress'),
value: session.TranscodingInfo.CompletionPercentage.toFixed(1) + '%' value: session.TranscodingInfo.CompletionPercentage.toFixed(1) + '%'
}); });
} }
if (session.TranscodingInfo.Framerate) { if (session.TranscodingInfo.Framerate) {
sessionStats.push({ sessionStats.push({
label: globalize.translate('LabelTranscodingFramerate'), label: globalize.translate('LabelTranscodingFramerate'),
value: session.TranscodingInfo.Framerate + ' fps' value: session.TranscodingInfo.Framerate + ' fps'
}); });
} }
if (session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) { if (session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
sessionStats.push({ sessionStats.push({
label: globalize.translate('LabelReasonForTranscoding'), label: globalize.translate('LabelReasonForTranscoding'),
value: session.TranscodingInfo.TranscodeReasons.map(translateReason).join('<br/>') value: session.TranscodingInfo.TranscodeReasons.map(translateReason).join('<br/>')
@ -193,7 +180,6 @@ import 'css!./playerstats';
} }
function getDisplayBitrate(bitrate) { function getDisplayBitrate(bitrate) {
if (bitrate > 1000000) { if (bitrate > 1000000) {
return (bitrate / 1000000).toFixed(1) + ' Mbps'; return (bitrate / 1000000).toFixed(1) + ' Mbps';
} else { } else {
@ -212,7 +198,6 @@ import 'css!./playerstats';
} }
function getMediaSourceStats(session, player, displayPlayMethod) { function getMediaSourceStats(session, player, displayPlayMethod) {
const sessionStats = []; const sessionStats = [];
const mediaSource = playbackManager.currentMediaSource(player) || {}; const mediaSource = playbackManager.currentMediaSource(player) || {};
@ -234,7 +219,6 @@ import 'css!./playerstats';
} }
if (totalBitrate) { if (totalBitrate) {
sessionStats.push({ sessionStats.push({
label: globalize.translate('LabelBitrate'), label: globalize.translate('LabelBitrate'),
value: getDisplayBitrate(totalBitrate) value: getDisplayBitrate(totalBitrate)
@ -243,18 +227,14 @@ import 'css!./playerstats';
const mediaStreams = mediaSource.MediaStreams || []; const mediaStreams = mediaSource.MediaStreams || [];
const videoStream = mediaStreams.filter(function (s) { const videoStream = mediaStreams.filter(function (s) {
return s.Type === 'Video'; return s.Type === 'Video';
})[0] || {}; })[0] || {};
const videoCodec = videoStream.Codec; const videoCodec = videoStream.Codec;
const audioStreamIndex = playbackManager.getAudioStreamIndex(player); const audioStreamIndex = playbackManager.getAudioStreamIndex(player);
const audioStream = playbackManager.audioTracks(player).filter(function (s) { const audioStream = playbackManager.audioTracks(player).filter(function (s) {
return s.Type === 'Audio' && s.Index === audioStreamIndex; return s.Type === 'Audio' && s.Index === audioStreamIndex;
})[0] || {}; })[0] || {};
const audioCodec = audioStream.Codec; const audioCodec = audioStream.Codec;
@ -355,12 +335,10 @@ import 'css!./playerstats';
} }
function getStats(instance, player) { function getStats(instance, player) {
const statsPromise = player.getStats ? player.getStats() : Promise.resolve({}); const statsPromise = player.getStats ? player.getStats() : Promise.resolve({});
const sessionPromise = getSession(instance, player); const sessionPromise = getSession(instance, player);
return Promise.all([statsPromise, sessionPromise]).then(function (responses) { return Promise.all([statsPromise, sessionPromise]).then(function (responses) {
const playerStatsResult = responses[0]; const playerStatsResult = responses[0];
const playerStats = playerStatsResult.categories || []; const playerStats = playerStatsResult.categories || [];
const session = responses[1]; const session = responses[1];
@ -387,7 +365,6 @@ import 'css!./playerstats';
categories.push(baseCategory); categories.push(baseCategory);
for (let i = 0, length = playerStats.length; i < length; i++) { for (let i = 0, length = playerStats.length; i < length; i++) {
const category = playerStats[i]; const category = playerStats[i];
if (category.type === 'audio') { if (category.type === 'audio') {
category.name = 'Audio Info'; category.name = 'Audio Info';
@ -398,7 +375,6 @@ import 'css!./playerstats';
} }
if (session.TranscodingInfo) { if (session.TranscodingInfo) {
categories.push({ categories.push({
stats: getTranscodingStats(session, player, displayPlayMethod), stats: getTranscodingStats(session, player, displayPlayMethod),
name: displayPlayMethod === 'Transcode' ? 'Transcoding Info' : 'Direct Stream Info' name: displayPlayMethod === 'Transcode' ? 'Transcoding Info' : 'Direct Stream Info'
@ -423,7 +399,6 @@ import 'css!./playerstats';
} }
function renderPlayerStats(instance, player) { function renderPlayerStats(instance, player) {
const now = new Date().getTime(); const now = new Date().getTime();
if ((now - (instance.lastRender || 0)) < 700) { if ((now - (instance.lastRender || 0)) < 700) {
@ -433,7 +408,6 @@ import 'css!./playerstats';
instance.lastRender = now; instance.lastRender = now;
getStats(instance, player).then(function (stats) { getStats(instance, player).then(function (stats) {
const elem = instance.element; const elem = instance.element;
if (!elem) { if (!elem) {
return; return;
@ -444,7 +418,6 @@ import 'css!./playerstats';
} }
function bindEvents(instance, player) { function bindEvents(instance, player) {
const localOnTimeUpdate = function () { const localOnTimeUpdate = function () {
renderPlayerStats(instance, player); renderPlayerStats(instance, player);
}; };
@ -454,7 +427,6 @@ import 'css!./playerstats';
} }
function unbindEvents(instance, player) { function unbindEvents(instance, player) {
const localOnTimeUpdate = instance.onTimeUpdate; const localOnTimeUpdate = instance.onTimeUpdate;
if (localOnTimeUpdate) { if (localOnTimeUpdate) {
@ -464,7 +436,6 @@ import 'css!./playerstats';
class PlayerStats { class PlayerStats {
constructor(options) { constructor(options) {
this.options = options; this.options = options;
init(this); init(this);
@ -473,7 +444,6 @@ class PlayerStats {
} }
enabled(enabled) { enabled(enabled) {
if (enabled == null) { if (enabled == null) {
return this._enabled; return this._enabled;
} }
@ -499,11 +469,9 @@ class PlayerStats {
} }
destroy() { destroy() {
const options = this.options; const options = this.options;
if (options) { if (options) {
this.options = null; this.options = null;
unbindEvents(this, options.player); unbindEvents(this, options.player);
} }

View file

@ -4,7 +4,6 @@ import playbackManager from 'playbackManager';
import globalize from 'globalize'; import globalize from 'globalize';
export function show(options) { export function show(options) {
var item = options.item; var item = options.item;
var resumePositionTicks = item.UserData ? item.UserData.PlaybackPositionTicks : null; var resumePositionTicks = item.UserData ? item.UserData.PlaybackPositionTicks : null;
@ -38,7 +37,6 @@ export function show(options) {
}).then(function (id) { }).then(function (id) {
switch (id) { switch (id) {
case 'play': case 'play':
playbackManager.play({ playbackManager.play({
ids: [playableItemId], ids: [playableItemId],

View file

@ -13,7 +13,6 @@ define(['events', 'globalize'], function (events, globalize) {
} }
function definePluginRoute(pluginManager, route, plugin) { function definePluginRoute(pluginManager, route, plugin) {
route.contentPath = pluginManager.mapPath(plugin, route.path); route.contentPath = pluginManager.mapPath(plugin, route.path);
route.path = pluginManager.mapRoute(plugin, route); route.path = pluginManager.mapRoute(plugin, route);
@ -21,12 +20,10 @@ define(['events', 'globalize'], function (events, globalize) {
} }
function PluginManager() { function PluginManager() {
this.pluginsList = []; this.pluginsList = [];
} }
PluginManager.prototype.loadPlugin = function(pluginSpec) { PluginManager.prototype.loadPlugin = function(pluginSpec) {
var instance = this; var instance = this;
function registerPlugin(plugin) { function registerPlugin(plugin) {
@ -39,7 +36,6 @@ define(['events', 'globalize'], function (events, globalize) {
} }
if (plugin.type === 'skin') { if (plugin.type === 'skin') {
// translations won't be loaded for skins until needed // translations won't be loaded for skins until needed
return Promise.resolve(plugin); return Promise.resolve(plugin);
} else { } else {
@ -104,13 +100,11 @@ define(['events', 'globalize'], function (events, globalize) {
// name // name
// type (skin, screensaver, etc) // type (skin, screensaver, etc)
PluginManager.prototype.register = function (obj) { PluginManager.prototype.register = function (obj) {
this.pluginsList.push(obj); this.pluginsList.push(obj);
events.trigger(this, 'registered', [obj]); events.trigger(this, 'registered', [obj]);
}; };
PluginManager.prototype.ofType = function (type) { PluginManager.prototype.ofType = function (type) {
return this.pluginsList.filter(function (o) { return this.pluginsList.filter(function (o) {
return o.type === type; return o.type === type;
}); });
@ -121,7 +115,6 @@ define(['events', 'globalize'], function (events, globalize) {
}; };
PluginManager.prototype.mapRoute = function (plugin, route) { PluginManager.prototype.mapRoute = function (plugin, route) {
if (typeof plugin === 'string') { if (typeof plugin === 'string') {
plugin = this.pluginsList.filter(function (p) { plugin = this.pluginsList.filter(function (p) {
return (p.id || p.packageName) === plugin; return (p.id || p.packageName) === plugin;
@ -138,7 +131,6 @@ define(['events', 'globalize'], function (events, globalize) {
}; };
PluginManager.prototype.mapPath = function (plugin, path, addCacheParam) { PluginManager.prototype.mapPath = function (plugin, path, addCacheParam) {
if (typeof plugin === 'string') { if (typeof plugin === 'string') {
plugin = this.pluginsList.filter(function (p) { plugin = this.pluginsList.filter(function (p) {
return (p.id || p.packageName) === plugin; return (p.id || p.packageName) === plugin;

View file

@ -12,7 +12,6 @@ import 'formDialogStyle';
/* eslint-disable indent */ /* eslint-disable indent */
export default (() => { export default (() => {
function replaceAll(str, find, replace) { function replaceAll(str, find, replace) {
return str.split(find).join(replace); return str.split(find).join(replace);
} }
@ -68,7 +67,6 @@ export default (() => {
let submitValue; let submitValue;
dlg.querySelector('form').addEventListener('submit', e => { dlg.querySelector('form').addEventListener('submit', e => {
submitValue = dlg.querySelector('#txtInput').value; submitValue = dlg.querySelector('#txtInput').value;
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();

View file

@ -2,7 +2,6 @@ define(['globalize'], function (globalize) {
'use strict'; 'use strict';
function getVideoQualityOptions(options) { function getVideoQualityOptions(options) {
var maxStreamingBitrate = options.currentMaxBitrate; var maxStreamingBitrate = options.currentMaxBitrate;
var videoWidth = options.videoWidth; var videoWidth = options.videoWidth;
var videoHeight = options.videoHeight; var videoHeight = options.videoHeight;
@ -25,7 +24,6 @@ define(['globalize'], function (globalize) {
// Some 1080- videos are reported as 1912? // Some 1080- videos are reported as 1912?
if (maxAllowedWidth >= 1900) { if (maxAllowedWidth >= 1900) {
qualityOptions.push({ name: '1080p - 60 Mbps', maxHeight: 1080, bitrate: 60000000 }); qualityOptions.push({ name: '1080p - 60 Mbps', maxHeight: 1080, bitrate: 60000000 });
qualityOptions.push({ name: '1080p - 50 Mbps', maxHeight: 1080, bitrate: 50000000 }); qualityOptions.push({ name: '1080p - 50 Mbps', maxHeight: 1080, bitrate: 50000000 });
qualityOptions.push({ name: '1080p - 40 Mbps', maxHeight: 1080, bitrate: 40000000 }); qualityOptions.push({ name: '1080p - 40 Mbps', maxHeight: 1080, bitrate: 40000000 });
@ -38,13 +36,11 @@ define(['globalize'], function (globalize) {
qualityOptions.push({ name: '1080p - 6 Mbps', maxHeight: 1080, bitrate: 6000001 }); qualityOptions.push({ name: '1080p - 6 Mbps', maxHeight: 1080, bitrate: 6000001 });
qualityOptions.push({ name: '1080p - 5 Mbps', maxHeight: 1080, bitrate: 5000001 }); qualityOptions.push({ name: '1080p - 5 Mbps', maxHeight: 1080, bitrate: 5000001 });
qualityOptions.push({ name: '1080p - 4 Mbps', maxHeight: 1080, bitrate: 4000002 }); qualityOptions.push({ name: '1080p - 4 Mbps', maxHeight: 1080, bitrate: 4000002 });
} else if (maxAllowedWidth >= 1260) { } else if (maxAllowedWidth >= 1260) {
qualityOptions.push({ name: '720p - 10 Mbps', maxHeight: 720, bitrate: 10000000 }); qualityOptions.push({ name: '720p - 10 Mbps', maxHeight: 720, bitrate: 10000000 });
qualityOptions.push({ name: '720p - 8 Mbps', maxHeight: 720, bitrate: 8000000 }); qualityOptions.push({ name: '720p - 8 Mbps', maxHeight: 720, bitrate: 8000000 });
qualityOptions.push({ name: '720p - 6 Mbps', maxHeight: 720, bitrate: 6000000 }); qualityOptions.push({ name: '720p - 6 Mbps', maxHeight: 720, bitrate: 6000000 });
qualityOptions.push({ name: '720p - 5 Mbps', maxHeight: 720, bitrate: 5000000 }); qualityOptions.push({ name: '720p - 5 Mbps', maxHeight: 720, bitrate: 5000000 });
} else if (maxAllowedWidth >= 620) { } else if (maxAllowedWidth >= 620) {
qualityOptions.push({ name: '480p - 4 Mbps', maxHeight: 480, bitrate: 4000001 }); qualityOptions.push({ name: '480p - 4 Mbps', maxHeight: 480, bitrate: 4000001 });
qualityOptions.push({ name: '480p - 3 Mbps', maxHeight: 480, bitrate: 3000001 }); qualityOptions.push({ name: '480p - 3 Mbps', maxHeight: 480, bitrate: 3000001 });
@ -83,7 +79,6 @@ define(['globalize'], function (globalize) {
if (maxStreamingBitrate) { if (maxStreamingBitrate) {
var selectedIndex = -1; var selectedIndex = -1;
for (var i = 0, length = qualityOptions.length; i < length; i++) { for (var i = 0, length = qualityOptions.length; i < length; i++) {
var option = qualityOptions[i]; var option = qualityOptions[i];
if (selectedIndex === -1 && option.bitrate <= maxStreamingBitrate) { if (selectedIndex === -1 && option.bitrate <= maxStreamingBitrate) {
@ -92,7 +87,6 @@ define(['globalize'], function (globalize) {
} }
if (selectedIndex === -1) { if (selectedIndex === -1) {
selectedIndex = qualityOptions.length - 1; selectedIndex = qualityOptions.length - 1;
} }
@ -109,7 +103,6 @@ define(['globalize'], function (globalize) {
} }
function getAudioQualityOptions(options) { function getAudioQualityOptions(options) {
var maxStreamingBitrate = options.currentMaxBitrate; var maxStreamingBitrate = options.currentMaxBitrate;
var qualityOptions = []; var qualityOptions = [];
@ -137,7 +130,6 @@ define(['globalize'], function (globalize) {
if (maxStreamingBitrate) { if (maxStreamingBitrate) {
var selectedIndex = -1; var selectedIndex = -1;
for (var i = 0, length = qualityOptions.length; i < length; i++) { for (var i = 0, length = qualityOptions.length; i < length; i++) {
var option = qualityOptions[i]; var option = qualityOptions[i];
if (selectedIndex === -1 && option.bitrate <= maxStreamingBitrate) { if (selectedIndex === -1 && option.bitrate <= maxStreamingBitrate) {
@ -146,7 +138,6 @@ define(['globalize'], function (globalize) {
} }
if (selectedIndex === -1) { if (selectedIndex === -1) {
selectedIndex = qualityOptions.length - 1; selectedIndex = qualityOptions.length - 1;
} }

View file

@ -2,11 +2,9 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
'use strict'; 'use strict';
function onRecordingButtonClick(e) { function onRecordingButtonClick(e) {
var item = this.item; var item = this.item;
if (item) { if (item) {
var serverId = item.ServerId; var serverId = item.ServerId;
var programId = item.Id; var programId = item.Id;
var timerId = item.TimerId; var timerId = item.TimerId;
@ -50,23 +48,19 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
} }
function getIndicatorIcon(item) { function getIndicatorIcon(item) {
var status; var status;
if (item.Type === 'SeriesTimer') { if (item.Type === 'SeriesTimer') {
return 'fiber_smart_record'; return 'fiber_smart_record';
} else if (item.TimerId || item.SeriesTimerId) { } else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled'; status = item.Status || 'Cancelled';
} else if (item.Type === 'Timer') { } else if (item.Type === 'Timer') {
status = item.Status; status = item.Status;
} else { } else {
return 'fiber_manual_record'; return 'fiber_manual_record';
} }
if (item.SeriesTimerId) { if (item.SeriesTimerId) {
if (status !== 'Cancelled') { if (status !== 'Cancelled') {
return 'fiber_smart_record'; return 'fiber_smart_record';
} }
@ -76,7 +70,6 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
} }
RecordingButton.prototype.refresh = function (serverId, itemId) { RecordingButton.prototype.refresh = function (serverId, itemId) {
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
var self = this; var self = this;
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) { apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) {
@ -85,7 +78,6 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
}; };
RecordingButton.prototype.refreshItem = function (item) { RecordingButton.prototype.refreshItem = function (item) {
var options = this.options; var options = this.options;
var button = options.button; var button = options.button;
this.item = item; this.item = item;
@ -99,7 +91,6 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
}; };
RecordingButton.prototype.destroy = function () { RecordingButton.prototype.destroy = function () {
var options = this.options; var options = this.options;
if (options) { if (options) {

View file

@ -6,27 +6,22 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
var currentRecordingFields; var currentRecordingFields;
function closeDialog() { function closeDialog() {
dialogHelper.close(currentDialog); dialogHelper.close(currentDialog);
} }
function init(context) { function init(context) {
context.querySelector('.btnPlay').addEventListener('click', function () { context.querySelector('.btnPlay').addEventListener('click', function () {
closeAction = 'play'; closeAction = 'play';
closeDialog(); closeDialog();
}); });
context.querySelector('.btnCancel').addEventListener('click', function () { context.querySelector('.btnCancel').addEventListener('click', function () {
closeAction = null; closeAction = null;
closeDialog(); closeDialog();
}); });
} }
function getImageUrl(item, apiClient, imageHeight) { function getImageUrl(item, apiClient, imageHeight) {
var imageTags = item.ImageTags || {}; var imageTags = item.ImageTags || {};
if (item.PrimaryImageTag) { if (item.PrimaryImageTag) {
@ -34,14 +29,12 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
if (imageTags.Primary) { if (imageTags.Primary) {
return apiClient.getScaledImageUrl(item.Id, { return apiClient.getScaledImageUrl(item.Id, {
type: 'Primary', type: 'Primary',
maxHeight: imageHeight, maxHeight: imageHeight,
tag: item.ImageTags.Primary tag: item.ImageTags.Primary
}); });
} else if (imageTags.Thumb) { } else if (imageTags.Thumb) {
return apiClient.getScaledImageUrl(item.Id, { return apiClient.getScaledImageUrl(item.Id, {
type: 'Thumb', type: 'Thumb',
maxHeight: imageHeight, maxHeight: imageHeight,
@ -53,7 +46,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function renderRecording(context, defaultTimer, program, apiClient, refreshRecordingStateOnly) { function renderRecording(context, defaultTimer, program, apiClient, refreshRecordingStateOnly) {
if (!refreshRecordingStateOnly) { if (!refreshRecordingStateOnly) {
var imgUrl = getImageUrl(program, apiClient, 200); var imgUrl = getImageUrl(program, apiClient, 200);
var imageContainer = context.querySelector('.recordingDialog-imageContainer'); var imageContainer = context.querySelector('.recordingDialog-imageContainer');
@ -91,7 +83,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function reload(context, programId, serverId, refreshRecordingStateOnly) { function reload(context, programId, serverId, refreshRecordingStateOnly) {
loading.show(); loading.show();
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
@ -100,7 +91,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
var promise2 = apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()); var promise2 = apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId());
Promise.all([promise1, promise2]).then(function (responses) { Promise.all([promise1, promise2]).then(function (responses) {
var defaults = responses[0]; var defaults = responses[0];
var program = responses[1]; var program = responses[1];
@ -109,15 +99,11 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function executeCloseAction(action, programId, serverId) { function executeCloseAction(action, programId, serverId) {
if (action === 'play') { if (action === 'play') {
require(['playbackManager'], function (playbackManager) { require(['playbackManager'], function (playbackManager) {
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) { apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId()).then(function (item) {
playbackManager.play({ playbackManager.play({
ids: [item.ChannelId], ids: [item.ChannelId],
serverId: serverId serverId: serverId
@ -129,15 +115,12 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function showEditor(itemId, serverId) { function showEditor(itemId, serverId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
closeAction = null; closeAction = null;
loading.show(); loading.show();
require(['text!./recordingcreator.template.html'], function (template) { require(['text!./recordingcreator.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -167,7 +150,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
events.off(currentRecordingFields, 'recordingchanged', onRecordingChanged); events.off(currentRecordingFields, 'recordingchanged', onRecordingChanged);
executeCloseAction(closeAction, itemId, serverId); executeCloseAction(closeAction, itemId, serverId);

View file

@ -8,11 +8,8 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
var currentResolve; var currentResolve;
function deleteTimer(apiClient, timerId) { function deleteTimer(apiClient, timerId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['recordingHelper'], function (recordingHelper) { require(['recordingHelper'], function (recordingHelper) {
recordingHelper.cancelTimerWithConfirmation(timerId, apiClient.serverId()).then(resolve, reject); recordingHelper.cancelTimerWithConfirmation(timerId, apiClient.serverId()).then(resolve, reject);
}); });
}); });
@ -26,14 +23,12 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function closeDialog(isDeleted) { function closeDialog(isDeleted) {
recordingDeleted = isDeleted; recordingDeleted = isDeleted;
dialogHelper.close(currentDialog); dialogHelper.close(currentDialog);
} }
function onSubmit(e) { function onSubmit(e) {
var form = this; var form = this;
var apiClient = connectionManager.getApiClient(currentServerId); var apiClient = connectionManager.getApiClient(currentServerId);
@ -51,14 +46,11 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function init(context) { function init(context) {
context.querySelector('.btnCancel').addEventListener('click', function () { context.querySelector('.btnCancel').addEventListener('click', function () {
closeDialog(false); closeDialog(false);
}); });
context.querySelector('.btnCancelRecording').addEventListener('click', function () { context.querySelector('.btnCancelRecording').addEventListener('click', function () {
var apiClient = connectionManager.getApiClient(currentServerId); var apiClient = connectionManager.getApiClient(currentServerId);
deleteTimer(apiClient, currentItemId).then(function () { deleteTimer(apiClient, currentItemId).then(function () {
closeDialog(true); closeDialog(true);
@ -69,22 +61,18 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function reload(context, id) { function reload(context, id) {
loading.show(); loading.show();
currentItemId = id; currentItemId = id;
var apiClient = connectionManager.getApiClient(currentServerId); var apiClient = connectionManager.getApiClient(currentServerId);
apiClient.getLiveTvTimer(id).then(function (result) { apiClient.getLiveTvTimer(id).then(function (result) {
renderTimer(context, result, apiClient); renderTimer(context, result, apiClient);
loading.hide(); loading.hide();
}); });
} }
function showEditor(itemId, serverId, options) { function showEditor(itemId, serverId, options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
recordingDeleted = false; recordingDeleted = false;
currentServerId = serverId; currentServerId = serverId;
loading.show(); loading.show();
@ -124,14 +112,12 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
currentDialog = dlg; currentDialog = dlg;
dlg.addEventListener('closing', function () { dlg.addEventListener('closing', function () {
if (!recordingDeleted) { if (!recordingDeleted) {
dlg.querySelector('.btnSubmit').click(); dlg.querySelector('.btnSubmit').click();
} }
}); });
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (recordingDeleted) { if (recordingDeleted) {
resolve({ resolve({
updated: true, updated: true,

View file

@ -34,7 +34,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa
} }
function fetchData(instance) { function fetchData(instance) {
var options = instance.options; var options = instance.options;
var apiClient = connectionManager.getApiClient(options.serverId); var apiClient = connectionManager.getApiClient(options.serverId);
@ -121,7 +120,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa
} }
function onManageSeriesRecordingClick(e) { function onManageSeriesRecordingClick(e) {
var options = this.options; var options = this.options;
if (!this.SeriesTimerId) { if (!this.SeriesTimerId) {
@ -131,7 +129,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa
var self = this; var self = this;
require(['seriesRecordingEditor'], function (seriesRecordingEditor) { require(['seriesRecordingEditor'], function (seriesRecordingEditor) {
seriesRecordingEditor.show(self.SeriesTimerId, options.serverId, { seriesRecordingEditor.show(self.SeriesTimerId, options.serverId, {
enableCancel: false enableCancel: false
@ -143,7 +140,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa
} }
function onRecordChange(e) { function onRecordChange(e) {
this.changed = true; this.changed = true;
var self = this; var self = this;
@ -183,7 +179,6 @@ define(['globalize', 'connectionManager', 'serverNotifications', 'require', 'loa
} }
function onRecordSeriesChange(e) { function onRecordSeriesChange(e) {
this.changed = true; this.changed = true;
var self = this; var self = this;

View file

@ -2,17 +2,13 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
'use strict'; 'use strict';
function changeRecordingToSeries(apiClient, timerId, programId, confirmTimerCancellation) { function changeRecordingToSeries(apiClient, timerId, programId, confirmTimerCancellation) {
loading.show(); loading.show();
return apiClient.getItem(apiClient.getCurrentUserId(), programId).then(function (item) { return apiClient.getItem(apiClient.getCurrentUserId(), programId).then(function (item) {
if (item.IsSeries) { if (item.IsSeries) {
// create series // create series
return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (timerDefaults) { return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (timerDefaults) {
return apiClient.createLiveTvSeriesTimer(timerDefaults).then(function () { return apiClient.createLiveTvSeriesTimer(timerDefaults).then(function () {
loading.hide(); loading.hide();
sendToast(globalize.translate('SeriesRecordingScheduled')); sendToast(globalize.translate('SeriesRecordingScheduled'));
}); });
@ -29,11 +25,8 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
} }
function cancelTimerWithConfirmation(timerId, serverId) { function cancelTimerWithConfirmation(timerId, serverId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['confirm'], function (confirm) { require(['confirm'], function (confirm) {
confirm.default({ confirm.default({
text: globalize.translate('MessageConfirmRecordingCancellation'), text: globalize.translate('MessageConfirmRecordingCancellation'),
@ -42,23 +35,18 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
cancelText: globalize.translate('HeaderKeepRecording') cancelText: globalize.translate('HeaderKeepRecording')
}).then(function () { }).then(function () {
loading.show(); loading.show();
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
cancelTimer(apiClient, timerId, true).then(resolve, reject); cancelTimer(apiClient, timerId, true).then(resolve, reject);
}, reject); }, reject);
}); });
}); });
} }
function cancelSeriesTimerWithConfirmation(timerId, serverId) { function cancelSeriesTimerWithConfirmation(timerId, serverId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['confirm'], function (confirm) { require(['confirm'], function (confirm) {
confirm.default({ confirm.default({
text: globalize.translate('MessageConfirmRecordingCancellation'), text: globalize.translate('MessageConfirmRecordingCancellation'),
@ -67,12 +55,10 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
cancelText: globalize.translate('HeaderKeepSeries') cancelText: globalize.translate('HeaderKeepSeries')
}).then(function () { }).then(function () {
loading.show(); loading.show();
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
apiClient.cancelLiveTvSeriesTimer(timerId).then(function () { apiClient.cancelLiveTvSeriesTimer(timerId).then(function () {
require(['toast'], function (toast) { require(['toast'], function (toast) {
toast(globalize.translate('SeriesCancelled')); toast(globalize.translate('SeriesCancelled'));
}); });
@ -80,7 +66,6 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
loading.hide(); loading.hide();
resolve(); resolve();
}, reject); }, reject);
}, reject); }, reject);
}); });
}); });
@ -89,7 +74,6 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
function cancelTimer(apiClient, timerId, hideLoading) { function cancelTimer(apiClient, timerId, hideLoading) {
loading.show(); loading.show();
return apiClient.cancelLiveTvTimer(timerId).then(function () { return apiClient.cancelLiveTvTimer(timerId).then(function () {
if (hideLoading !== false) { if (hideLoading !== false) {
loading.hide(); loading.hide();
sendToast(globalize.translate('RecordingCancelled')); sendToast(globalize.translate('RecordingCancelled'));
@ -98,16 +82,13 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
} }
function createRecording(apiClient, programId, isSeries) { function createRecording(apiClient, programId, isSeries) {
loading.show(); loading.show();
return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (item) { return apiClient.getNewLiveTvTimerDefaults({ programId: programId }).then(function (item) {
var promise = isSeries ? var promise = isSeries ?
apiClient.createLiveTvSeriesTimer(item) : apiClient.createLiveTvSeriesTimer(item) :
apiClient.createLiveTvTimer(item); apiClient.createLiveTvTimer(item);
return promise.then(function () { return promise.then(function () {
loading.hide(); loading.hide();
sendToast(globalize.translate('RecordingScheduled')); sendToast(globalize.translate('RecordingScheduled'));
}); });
@ -122,9 +103,7 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
function showMultiCancellationPrompt(serverId, programId, timerId, timerStatus, seriesTimerId) { function showMultiCancellationPrompt(serverId, programId, timerId, timerStatus, seriesTimerId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['dialog'], function (dialog) { require(['dialog'], function (dialog) {
var items = []; var items = [];
items.push({ items.push({
@ -159,7 +138,6 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
buttons: items buttons: items
}).then(function (result) { }).then(function (result) {
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
if (result === 'canceltimer') { if (result === 'canceltimer') {
@ -167,11 +145,9 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
cancelTimer(apiClient, timerId, true).then(resolve, reject); cancelTimer(apiClient, timerId, true).then(resolve, reject);
} else if (result === 'cancelseriestimer') { } else if (result === 'cancelseriestimer') {
loading.show(); loading.show();
apiClient.cancelLiveTvSeriesTimer(seriesTimerId).then(function () { apiClient.cancelLiveTvSeriesTimer(seriesTimerId).then(function () {
require(['toast'], function (toast) { require(['toast'], function (toast) {
toast(globalize.translate('SeriesCancelled')); toast(globalize.translate('SeriesCancelled'));
}); });
@ -182,7 +158,6 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
} else { } else {
resolve(); resolve();
} }
}, reject); }, reject);
}); });
}); });

View file

@ -8,18 +8,14 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
var currentServerId; var currentServerId;
function deleteTimer(apiClient, timerId) { function deleteTimer(apiClient, timerId) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['recordingHelper'], function (recordingHelper) { require(['recordingHelper'], function (recordingHelper) {
recordingHelper.cancelSeriesTimerWithConfirmation(timerId, apiClient.serverId()).then(resolve, reject); recordingHelper.cancelSeriesTimerWithConfirmation(timerId, apiClient.serverId()).then(resolve, reject);
}); });
}); });
} }
function renderTimer(context, item, apiClient) { function renderTimer(context, item, apiClient) {
context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60; context.querySelector('#txtPrePaddingMinutes').value = item.PrePaddingSeconds / 60;
context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60; context.querySelector('#txtPostPaddingMinutes').value = item.PostPaddingSeconds / 60;
@ -42,7 +38,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function closeDialog(isDeleted) { function closeDialog(isDeleted) {
recordingUpdated = true; recordingUpdated = true;
recordingDeleted = isDeleted; recordingDeleted = isDeleted;
@ -50,13 +45,11 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function onSubmit(e) { function onSubmit(e) {
var form = this; var form = this;
var apiClient = connectionManager.getApiClient(currentServerId); var apiClient = connectionManager.getApiClient(currentServerId);
apiClient.getLiveTvSeriesTimer(currentItemId).then(function (item) { apiClient.getLiveTvSeriesTimer(currentItemId).then(function (item) {
item.PrePaddingSeconds = form.querySelector('#txtPrePaddingMinutes').value * 60; item.PrePaddingSeconds = form.querySelector('#txtPrePaddingMinutes').value * 60;
item.PostPaddingSeconds = form.querySelector('#txtPostPaddingMinutes').value * 60; item.PostPaddingSeconds = form.querySelector('#txtPostPaddingMinutes').value * 60;
item.RecordAnyChannel = form.querySelector('.selectChannels').value === 'all'; item.RecordAnyChannel = form.querySelector('.selectChannels').value === 'all';
@ -75,16 +68,13 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function init(context) { function init(context) {
fillKeepUpTo(context); fillKeepUpTo(context);
context.querySelector('.btnCancel').addEventListener('click', function () { context.querySelector('.btnCancel').addEventListener('click', function () {
closeDialog(false); closeDialog(false);
}); });
context.querySelector('.btnCancelRecording').addEventListener('click', function () { context.querySelector('.btnCancelRecording').addEventListener('click', function () {
var apiClient = connectionManager.getApiClient(currentServerId); var apiClient = connectionManager.getApiClient(currentServerId);
deleteTimer(apiClient, currentItemId).then(function () { deleteTimer(apiClient, currentItemId).then(function () {
closeDialog(true); closeDialog(true);
@ -95,7 +85,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function reload(context, id) { function reload(context, id) {
var apiClient = connectionManager.getApiClient(currentServerId); var apiClient = connectionManager.getApiClient(currentServerId);
loading.show(); loading.show();
@ -103,12 +92,10 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
currentItemId = id; currentItemId = id;
apiClient.getLiveTvSeriesTimer(id).then(function (result) { apiClient.getLiveTvSeriesTimer(id).then(function (result) {
renderTimer(context, result, apiClient); renderTimer(context, result, apiClient);
loading.hide(); loading.hide();
}); });
} else if (id) { } else if (id) {
currentItemId = id.Id; currentItemId = id.Id;
renderTimer(context, id, apiClient); renderTimer(context, id, apiClient);
@ -117,11 +104,9 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function fillKeepUpTo(context) { function fillKeepUpTo(context) {
var html = ''; var html = '';
for (var i = 0; i <= 50; i++) { for (var i = 0; i <= 50; i++) {
var text; var text;
if (i === 0) { if (i === 0) {
@ -143,7 +128,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function embed(itemId, serverId, options) { function embed(itemId, serverId, options) {
recordingUpdated = false; recordingUpdated = false;
recordingDeleted = false; recordingDeleted = false;
currentServerId = serverId; currentServerId = serverId;
@ -151,7 +135,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
options = options || {}; options = options || {};
require(['text!./seriesrecordingeditor.template.html'], function (template) { require(['text!./seriesrecordingeditor.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -186,9 +169,7 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
} }
function showEditor(itemId, serverId, options) { function showEditor(itemId, serverId, options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
recordingUpdated = false; recordingUpdated = false;
recordingDeleted = false; recordingDeleted = false;
currentServerId = serverId; currentServerId = serverId;
@ -196,7 +177,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
options = options || {}; options = options || {};
require(['text!./seriesrecordingeditor.template.html'], function (template) { require(['text!./seriesrecordingeditor.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -230,14 +210,12 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
currentDialog = dlg; currentDialog = dlg;
dlg.addEventListener('closing', function () { dlg.addEventListener('closing', function () {
if (!recordingDeleted) { if (!recordingDeleted) {
this.querySelector('.btnSubmit').click(); this.querySelector('.btnSubmit').click();
} }
}); });
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (recordingUpdated) { if (recordingUpdated) {
resolve({ resolve({
updated: true, updated: true,

View file

@ -2,7 +2,6 @@ define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionM
'use strict'; 'use strict';
function getEditorHtml() { function getEditorHtml() {
var html = ''; var html = '';
html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">'; html += '<div class="formDialogContent smoothScrollY" style="padding-top:2em;">';
@ -48,7 +47,6 @@ define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionM
} }
function onSubmit(e) { function onSubmit(e) {
loading.show(); loading.show();
var instance = this; var instance = this;
@ -90,7 +88,6 @@ define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionM
} }
RefreshDialog.prototype.show = function () { RefreshDialog.prototype.show = function () {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -124,7 +121,6 @@ define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionM
dlg.querySelector('form').addEventListener('submit', onSubmit.bind(this)); dlg.querySelector('form').addEventListener('submit', onSubmit.bind(this));
dlg.querySelector('#selectMetadataRefreshMode').addEventListener('change', function () { dlg.querySelector('#selectMetadataRefreshMode').addEventListener('change', function () {
if (this.value === 'scan') { if (this.value === 'scan') {
dlg.querySelector('.fldReplaceExistingImages').classList.add('hide'); dlg.querySelector('.fldReplaceExistingImages').classList.add('hide');
} else { } else {
@ -139,7 +135,6 @@ define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionM
dlg.querySelector('#selectMetadataRefreshMode').dispatchEvent(new CustomEvent('change')); dlg.querySelector('#selectMetadataRefreshMode').dispatchEvent(new CustomEvent('change'));
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
@ -148,7 +143,6 @@ define(['dom', 'shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionM
} }
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false); centerFocus(dlg.querySelector('.formDialogContent'), false, false);
} }

View file

@ -418,7 +418,6 @@ define(['browser', 'datetime', 'backdrop', 'libraryBrowser', 'listView', 'imageL
var nowPlayingVolumeSliderContainer = context.querySelector('.nowPlayingVolumeSliderContainer'); var nowPlayingVolumeSliderContainer = context.querySelector('.nowPlayingVolumeSliderContainer');
if (nowPlayingVolumeSlider) { if (nowPlayingVolumeSlider) {
nowPlayingVolumeSliderContainer.classList.toggle('hide', !showVolumeSlider); nowPlayingVolumeSliderContainer.classList.toggle('hide', !showVolumeSlider);
if (!nowPlayingVolumeSlider.dragging) { if (!nowPlayingVolumeSlider.dragging) {

View file

@ -18,7 +18,6 @@ define(function () {
} }
function removeFromLoadHistory(url) { function removeFromLoadHistory(url) {
url = url.toLowerCase(); url = url.toLowerCase();
importedCss = importedCss.filter(function (c) { importedCss = importedCss.filter(function (c) {
@ -27,7 +26,6 @@ define(function () {
} }
requireCss.load = function (cssId, req, load, config) { requireCss.load = function (cssId, req, load, config) {
// Somehow if the url starts with /css, require will get all screwed up since this extension is also called css // Somehow if the url starts with /css, require will get all screwed up since this extension is also called css
var srch = 'components/require/requirecss'; var srch = 'components/require/requirecss';
var index = cssId.indexOf(srch); var index = cssId.indexOf(srch);
@ -65,7 +63,6 @@ define(function () {
window.requireCss = { window.requireCss = {
removeStylesheet: function (stylesheet) { removeStylesheet: function (stylesheet) {
stylesheet.parentNode.removeChild(stylesheet); stylesheet.parentNode.removeChild(stylesheet);
removeFromLoadHistory(stylesheet.href); removeFromLoadHistory(stylesheet.href);
} }

View file

@ -7,7 +7,6 @@ define(function () {
return { return {
load: function (url, req, load, config) { load: function (url, req, load, config) {
if (url.indexOf('://') === -1) { if (url.indexOf('://') === -1) {
url = config.baseUrl + url; url = config.baseUrl + url;
} }

View file

@ -376,7 +376,6 @@ import layoutManager from 'layoutManager';
* @param {number} scrollY - Vertical coordinate. * @param {number} scrollY - Vertical coordinate.
*/ */
function animateScroll(xScroller, scrollX, yScroller, scrollY) { function animateScroll(xScroller, scrollX, yScroller, scrollY) {
const ox = xScroller.scrollLeft; const ox = xScroller.scrollLeft;
const oy = yScroller.scrollTop; const oy = yScroller.scrollTop;
const dx = scrollX - ox; const dx = scrollX - ox;
@ -389,7 +388,6 @@ import layoutManager from 'layoutManager';
let start; let start;
function scrollAnim(currentTimestamp) { function scrollAnim(currentTimestamp) {
start = start || currentTimestamp; start = start || currentTimestamp;
let k = Math.min(1, (currentTimestamp - start) / ScrollTime); let k = Math.min(1, (currentTimestamp - start) / ScrollTime);
@ -423,7 +421,6 @@ import layoutManager from 'layoutManager';
* @param {boolean} smooth - Smooth scrolling. * @param {boolean} smooth - Smooth scrolling.
*/ */
function doScroll(xScroller, scrollX, yScroller, scrollY, smooth) { function doScroll(xScroller, scrollX, yScroller, scrollY, smooth) {
resetScrollTimer(); resetScrollTimer();
if (smooth && useAnimatedScroll()) { if (smooth && useAnimatedScroll()) {
@ -437,7 +434,6 @@ import layoutManager from 'layoutManager';
* Returns true if smooth scroll must be used. * Returns true if smooth scroll must be used.
*/ */
function useSmoothScroll() { function useSmoothScroll() {
if (browser.tizen) { if (browser.tizen) {
return true; return true;
} }
@ -469,7 +465,6 @@ import layoutManager from 'layoutManager';
* @param {boolean} [smooth=false] - Smooth scrolling. * @param {boolean} [smooth=false] - Smooth scrolling.
*/ */
export function scrollTo(scrollX, scrollY, smooth) { export function scrollTo(scrollX, scrollY, smooth) {
smooth = !!smooth; smooth = !!smooth;
// Scroller is document itself by default // Scroller is document itself by default
@ -491,7 +486,6 @@ import layoutManager from 'layoutManager';
* @param {boolean} [smooth=false] - Smooth scrolling. * @param {boolean} [smooth=false] - Smooth scrolling.
*/ */
export function scrollToElement(element, smooth) { export function scrollToElement(element, smooth) {
smooth = !!smooth; smooth = !!smooth;
let scrollCenterX = true; let scrollCenterX = true;

View file

@ -11,7 +11,6 @@ import 'css!./searchfields';
/* eslint-disable indent */ /* eslint-disable indent */
function onSearchTimeout() { function onSearchTimeout() {
const instance = this; const instance = this;
let value = instance.nextSearchValue; let value = instance.nextSearchValue;
@ -20,7 +19,6 @@ import 'css!./searchfields';
} }
function triggerSearch(instance, value) { function triggerSearch(instance, value) {
if (instance.searchTimeout) { if (instance.searchTimeout) {
clearTimeout(instance.searchTimeout); clearTimeout(instance.searchTimeout);
} }
@ -30,17 +28,14 @@ import 'css!./searchfields';
} }
function onAlphaValueClicked(e) { function onAlphaValueClicked(e) {
const value = e.detail.value; const value = e.detail.value;
const searchFieldsInstance = this; const searchFieldsInstance = this;
const txtSearch = searchFieldsInstance.options.element.querySelector('.searchfields-txtSearch'); const txtSearch = searchFieldsInstance.options.element.querySelector('.searchfields-txtSearch');
if (value === 'backspace') { if (value === 'backspace') {
const val = txtSearch.value; const val = txtSearch.value;
txtSearch.value = val.length ? val.substring(0, val.length - 1) : ''; txtSearch.value = val.length ? val.substring(0, val.length - 1) : '';
} else { } else {
txtSearch.value += value; txtSearch.value += value;
} }
@ -51,7 +46,6 @@ import 'css!./searchfields';
} }
function initAlphaPicker(alphaPickerElement, instance) { function initAlphaPicker(alphaPickerElement, instance) {
instance.alphaPicker = new AlphaPicker({ instance.alphaPicker = new AlphaPicker({
element: alphaPickerElement, element: alphaPickerElement,
mode: 'keyboard' mode: 'keyboard'
@ -61,16 +55,13 @@ import 'css!./searchfields';
} }
function onSearchInput(e) { function onSearchInput(e) {
const value = e.target.value; const value = e.target.value;
const searchFieldsInstance = this; const searchFieldsInstance = this;
triggerSearch(searchFieldsInstance, value); triggerSearch(searchFieldsInstance, value);
} }
function embed(elem, instance, options) { function embed(elem, instance, options) {
import('text!./searchfields.template.html').then(({default: template}) => { import('text!./searchfields.template.html').then(({default: template}) => {
let html = globalize.translateHtml(template, 'core'); let html = globalize.translateHtml(template, 'core');
if (browser.tizen || browser.orsay) { if (browser.tizen || browser.orsay) {
@ -98,16 +89,13 @@ import 'css!./searchfields';
class SearchFields { class SearchFields {
constructor(options) { constructor(options) {
this.options = options; this.options = options;
embed(options.element, this, options); embed(options.element, this, options);
} }
focus() { focus() {
this.options.element.querySelector('.searchfields-txtSearch').focus(); this.options.element.querySelector('.searchfields-txtSearch').focus();
} }
destroy() { destroy() {
const options = this.options; const options = this.options;
if (options) { if (options) {
options.element.classList.remove('searchFields'); options.element.classList.remove('searchFields');

View file

@ -10,7 +10,6 @@ import 'emby-button';
/* eslint-disable indent */ /* eslint-disable indent */
function loadSuggestions(instance, context, apiClient) { function loadSuggestions(instance, context, apiClient) {
const options = { const options = {
SortBy: 'IsFavoriteOrLiked,Random', SortBy: 'IsFavoriteOrLiked,Random',
@ -24,20 +23,17 @@ import 'emby-button';
}; };
apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) { apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) {
if (instance.mode !== 'suggestions') { if (instance.mode !== 'suggestions') {
result.Items = []; result.Items = [];
} }
const html = result.Items.map(function (i) { const html = result.Items.map(function (i) {
const href = appRouter.getRouteUrl(i); const href = appRouter.getRouteUrl(i);
let itemHtml = '<div><a is="emby-linkbutton" class="button-link" style="display:inline-block;padding:.5em 1em;" href="' + href + '">'; let itemHtml = '<div><a is="emby-linkbutton" class="button-link" style="display:inline-block;padding:.5em 1em;" href="' + href + '">';
itemHtml += i.Name; itemHtml += i.Name;
itemHtml += '</a></div>'; itemHtml += '</a></div>';
return itemHtml; return itemHtml;
}).join(''); }).join('');
const searchSuggestions = context.querySelector('.searchSuggestions'); const searchSuggestions = context.querySelector('.searchSuggestions');
@ -50,7 +46,6 @@ import 'emby-button';
} }
function getSearchHints(instance, apiClient, query) { function getSearchHints(instance, apiClient, query) {
if (!query.searchTerm) { if (!query.searchTerm) {
return Promise.resolve({ return Promise.resolve({
SearchHints: [] SearchHints: []
@ -129,7 +124,6 @@ import 'emby-button';
// Convert the search hint query to a regular item query // Convert the search hint query to a regular item query
if (apiClient.isMinServerVersion('3.4.1.31')) { if (apiClient.isMinServerVersion('3.4.1.31')) {
query.Fields = 'PrimaryImageAspectRatio,CanDelete,BasicSyncInfo,MediaSourceCount'; query.Fields = 'PrimaryImageAspectRatio,CanDelete,BasicSyncInfo,MediaSourceCount';
query.Recursive = true; query.Recursive = true;
query.EnableTotalRecordCount = false; query.EnableTotalRecordCount = false;
@ -140,7 +134,6 @@ import 'emby-button';
if (!query.IncludeMedia) { if (!query.IncludeMedia) {
if (query.IncludePeople) { if (query.IncludePeople) {
methodName = 'getPeople'; methodName = 'getPeople';
} else if (query.IncludeArtists) { } else if (query.IncludeArtists) {
methodName = 'getArtists'; methodName = 'getArtists';
} }
@ -155,7 +148,6 @@ import 'emby-button';
} }
function search(instance, apiClient, context, value) { function search(instance, apiClient, context, value) {
if (value || layoutManager.tv) { if (value || layoutManager.tv) {
instance.mode = 'search'; instance.mode = 'search';
context.querySelector('.searchSuggestions').classList.add('hide'); context.querySelector('.searchSuggestions').classList.add('hide');
@ -165,7 +157,6 @@ import 'emby-button';
} }
if (instance.options.collectionType === 'livetv') { if (instance.options.collectionType === 'livetv') {
searchType(instance, apiClient, { searchType(instance, apiClient, {
searchTerm: value, searchTerm: value,
IncludePeople: false, IncludePeople: false,
@ -194,7 +185,6 @@ import 'emby-button';
showChannelName: true showChannelName: true
}); });
} else { } else {
searchType(instance, apiClient, { searchType(instance, apiClient, {
searchTerm: value, searchTerm: value,
IncludePeople: false, IncludePeople: false,
@ -231,7 +221,6 @@ import 'emby-button';
}); });
if (instance.options.collectionType === 'livetv') { if (instance.options.collectionType === 'livetv') {
searchType(instance, apiClient, { searchType(instance, apiClient, {
searchTerm: value, searchTerm: value,
IncludePeople: false, IncludePeople: false,
@ -260,9 +249,7 @@ import 'emby-button';
showAirDateTime: true, showAirDateTime: true,
showChannelName: true showChannelName: true
}); });
} else { } else {
searchType(instance, apiClient, { searchType(instance, apiClient, {
searchTerm: value, searchTerm: value,
IncludePeople: false, IncludePeople: false,
@ -560,18 +547,15 @@ import 'emby-button';
} }
function searchType(instance, apiClient, query, context, section, cardOptions) { function searchType(instance, apiClient, query, context, section, cardOptions) {
query.Limit = enableScrollX() ? 24 : 16; query.Limit = enableScrollX() ? 24 : 16;
query.ParentId = instance.options.parentId; query.ParentId = instance.options.parentId;
getSearchHints(instance, apiClient, query).then(function (result) { getSearchHints(instance, apiClient, query).then(function (result) {
populateResults(result, context, section, cardOptions); populateResults(result, context, section, cardOptions);
}); });
} }
function populateResults(result, context, section, cardOptions) { function populateResults(result, context, section, cardOptions) {
section = context.querySelector(section); section = context.querySelector(section);
const items = result.Items || result.SearchHints; const items = result.Items || result.SearchHints;
@ -601,9 +585,7 @@ import 'emby-button';
} }
function embed(elem, instance, options) { function embed(elem, instance, options) {
import('text!./searchresults.template.html').then(({default: template}) => { import('text!./searchresults.template.html').then(({default: template}) => {
if (!enableScrollX()) { if (!enableScrollX()) {
template = replaceAll(template, 'data-horizontal="true"', 'data-horizontal="false"'); template = replaceAll(template, 'data-horizontal="true"', 'data-horizontal="false"');
template = replaceAll(template, 'itemsContainer scrollSlider', 'itemsContainer scrollSlider vertical-wrap'); template = replaceAll(template, 'itemsContainer scrollSlider', 'itemsContainer scrollSlider vertical-wrap');
@ -620,24 +602,20 @@ import 'emby-button';
class SearchResults { class SearchResults {
constructor(options) { constructor(options) {
this.options = options; this.options = options;
embed(options.element, this, options); embed(options.element, this, options);
} }
search(value) { search(value) {
const apiClient = connectionManager.getApiClient(this.options.serverId); const apiClient = connectionManager.getApiClient(this.options.serverId);
search(this, apiClient, this.options.element, value); search(this, apiClient, this.options.element, value);
} }
destroy() { destroy() {
const options = this.options; const options = this.options;
if (options) { if (options) {
options.element.classList.remove('searchFields'); options.element.classList.remove('searchFields');
} }
this.options = null; this.options = null;
} }
} }

View file

@ -14,7 +14,6 @@ import dom from 'dom';
import recordingHelper from 'recordingHelper'; import recordingHelper from 'recordingHelper';
function playAllFromHere(card, serverId, queue) { function playAllFromHere(card, serverId, queue) {
const parent = card.parentNode; const parent = card.parentNode;
const className = card.classList.length ? (`.${card.classList[0]}`) : ''; const className = card.classList.length ? (`.${card.classList[0]}`) : '';
const cards = parent.querySelectorAll(`${className}[data-id]`); const cards = parent.querySelectorAll(`${className}[data-id]`);
@ -36,17 +35,14 @@ import recordingHelper from 'recordingHelper';
const itemsContainer = dom.parentWithClass(card, 'itemsContainer'); const itemsContainer = dom.parentWithClass(card, 'itemsContainer');
if (itemsContainer && itemsContainer.fetchData) { if (itemsContainer && itemsContainer.fetchData) {
const queryOptions = queue ? { StartIndex: startIndex } : {}; const queryOptions = queue ? { StartIndex: startIndex } : {};
return itemsContainer.fetchData(queryOptions).then(result => { return itemsContainer.fetchData(queryOptions).then(result => {
if (queue) { if (queue) {
return playbackManager.queue({ return playbackManager.queue({
items: result.Items items: result.Items
}); });
} else { } else {
return playbackManager.play({ return playbackManager.play({
items: result.Items, items: result.Items,
startIndex: startIndex startIndex: startIndex
@ -65,7 +61,6 @@ import recordingHelper from 'recordingHelper';
serverId: serverId serverId: serverId
}); });
} else { } else {
return playbackManager.play({ return playbackManager.play({
ids: ids, ids: ids,
serverId: serverId, serverId: serverId,
@ -75,15 +70,12 @@ import recordingHelper from 'recordingHelper';
} }
function showProgramDialog(item) { function showProgramDialog(item) {
import('recordingCreator').then(({default:recordingCreator}) => { import('recordingCreator').then(({default:recordingCreator}) => {
recordingCreator.show(item.Id, item.ServerId); recordingCreator.show(item.Id, item.ServerId);
}); });
} }
function getItem(button) { function getItem(button) {
button = dom.parentWithAttribute(button, 'data-id'); button = dom.parentWithAttribute(button, 'data-id');
const serverId = button.getAttribute('data-serverid'); const serverId = button.getAttribute('data-serverid');
const id = button.getAttribute('data-id'); const id = button.getAttribute('data-id');
@ -101,7 +93,6 @@ import recordingHelper from 'recordingHelper';
} }
function notifyRefreshNeeded(childElement, itemsContainer) { function notifyRefreshNeeded(childElement, itemsContainer) {
itemsContainer = itemsContainer || dom.parentWithAttribute(childElement, 'is', 'emby-itemscontainer'); itemsContainer = itemsContainer || dom.parentWithAttribute(childElement, 'is', 'emby-itemscontainer');
if (itemsContainer) { if (itemsContainer) {
@ -110,9 +101,7 @@ import recordingHelper from 'recordingHelper';
} }
function showContextMenu(card, options) { function showContextMenu(card, options) {
getItem(card).then(item => { getItem(card).then(item => {
const playlistId = card.getAttribute('data-playlistid'); const playlistId = card.getAttribute('data-playlistid');
const collectionId = card.getAttribute('data-collectionid'); const collectionId = card.getAttribute('data-collectionid');
@ -122,7 +111,6 @@ import recordingHelper from 'recordingHelper';
} }
import('itemContextMenu').then(({default: itemContextMenu}) => { import('itemContextMenu').then(({default: itemContextMenu}) => {
connectionManager.getApiClient(item.ServerId).getCurrentUser().then(user => { connectionManager.getApiClient(item.ServerId).getCurrentUser().then(user => {
itemContextMenu.show(Object.assign({ itemContextMenu.show(Object.assign({
item: item, item: item,
@ -135,7 +123,6 @@ import recordingHelper from 'recordingHelper';
user: user user: user
}, options || {})).then(result => { }, options || {})).then(result => {
if (result.command === 'playallfromhere' || result.command === 'queueallfromhere') { if (result.command === 'playallfromhere' || result.command === 'queueallfromhere') {
executeAction(card, options.positionTo, result.command); executeAction(card, options.positionTo, result.command);
} else if (result.updated || result.deleted) { } else if (result.updated || result.deleted) {
@ -148,7 +135,6 @@ import recordingHelper from 'recordingHelper';
} }
function getItemInfoFromCard(card) { function getItemInfoFromCard(card) {
return { return {
Type: card.getAttribute('data-type'), Type: card.getAttribute('data-type'),
Id: card.getAttribute('data-id'), Id: card.getAttribute('data-id'),
@ -166,11 +152,9 @@ import recordingHelper from 'recordingHelper';
} }
function showPlayMenu(card, target) { function showPlayMenu(card, target) {
const item = getItemInfoFromCard(card); const item = getItemInfoFromCard(card);
import('playMenu').then(({default: playMenu}) => { import('playMenu').then(({default: playMenu}) => {
playMenu.show({ playMenu.show({
item: item, item: item,
@ -186,7 +170,6 @@ import recordingHelper from 'recordingHelper';
} }
function executeAction(card, target, action) { function executeAction(card, target, action) {
target = target || card; target = target || card;
let id = card.getAttribute('data-id'); let id = card.getAttribute('data-id');
@ -208,13 +191,11 @@ import recordingHelper from 'recordingHelper';
} }
if (action === 'link') { if (action === 'link') {
appRouter.showItem(item, { appRouter.showItem(item, {
context: card.getAttribute('data-context'), context: card.getAttribute('data-context'),
parentId: card.getAttribute('data-parentid') parentId: card.getAttribute('data-parentid')
}); });
} else if (action === 'programdialog') { } else if (action === 'programdialog') {
showProgramDialog(item); showProgramDialog(item);
} else if (action === 'instantmix') { } else if (action === 'instantmix') {
playbackManager.instantMix({ playbackManager.instantMix({
@ -222,7 +203,6 @@ import recordingHelper from 'recordingHelper';
ServerId: serverId ServerId: serverId
}); });
} else if (action === 'play' || action === 'resume') { } else if (action === 'play' || action === 'resume') {
const startPositionTicks = parseInt(card.getAttribute('data-positionticks') || '0'); const startPositionTicks = parseInt(card.getAttribute('data-positionticks') || '0');
playbackManager.play({ playbackManager.play({
@ -231,7 +211,6 @@ import recordingHelper from 'recordingHelper';
serverId: serverId serverId: serverId
}); });
} else if (action === 'queue') { } else if (action === 'queue') {
if (playbackManager.isPlaying()) { if (playbackManager.isPlaying()) {
playbackManager.queue({ playbackManager.queue({
ids: [playableItemId], ids: [playableItemId],
@ -253,7 +232,6 @@ import recordingHelper from 'recordingHelper';
} else if (action === 'record') { } else if (action === 'record') {
onRecordCommand(serverId, id, type, card.getAttribute('data-timerid'), card.getAttribute('data-seriestimerid')); onRecordCommand(serverId, id, type, card.getAttribute('data-timerid'), card.getAttribute('data-seriestimerid'));
} else if (action === 'menu') { } else if (action === 'menu') {
const options = target.getAttribute('data-playoptions') === 'false' ? const options = target.getAttribute('data-playoptions') === 'false' ?
{ {
shuffle: false, shuffle: false,
@ -279,7 +257,6 @@ import recordingHelper from 'recordingHelper';
} else if (action === 'addtoplaylist') { } else if (action === 'addtoplaylist') {
getItem(target).then(addToPlaylist); getItem(target).then(addToPlaylist);
} else if (action === 'custom') { } else if (action === 'custom') {
const customAction = target.getAttribute('data-customaction'); const customAction = target.getAttribute('data-customaction');
card.dispatchEvent(new CustomEvent(`action-${customAction}`, { card.dispatchEvent(new CustomEvent(`action-${customAction}`, {
@ -294,7 +271,6 @@ import recordingHelper from 'recordingHelper';
function addToPlaylist(item) { function addToPlaylist(item) {
import('playlistEditor').then(({default: playlistEditor}) => { import('playlistEditor').then(({default: playlistEditor}) => {
new playlistEditor().show({ new playlistEditor().show({
items: [item.Id], items: [item.Id],
serverId: item.ServerId serverId: item.ServerId
@ -304,7 +280,6 @@ import recordingHelper from 'recordingHelper';
} }
function playTrailer(item) { function playTrailer(item) {
const apiClient = connectionManager.getApiClient(item.ServerId); const apiClient = connectionManager.getApiClient(item.ServerId);
apiClient.getLocalTrailers(apiClient.getCurrentUserId(), item.Id).then(trailers => { apiClient.getLocalTrailers(apiClient.getCurrentUserId(), item.Id).then(trailers => {
@ -313,28 +288,23 @@ import recordingHelper from 'recordingHelper';
} }
function editItem(item, serverId) { function editItem(item, serverId) {
const apiClient = connectionManager.getApiClient(serverId); const apiClient = connectionManager.getApiClient(serverId);
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const serverId = apiClient.serverInfo().Id; const serverId = apiClient.serverInfo().Id;
if (item.Type === 'Timer') { if (item.Type === 'Timer') {
if (item.ProgramId) { if (item.ProgramId) {
import('recordingCreator').then(({default: recordingCreator}) => { import('recordingCreator').then(({default: recordingCreator}) => {
recordingCreator.show(item.ProgramId, serverId).then(resolve, reject); recordingCreator.show(item.ProgramId, serverId).then(resolve, reject);
}); });
} else { } else {
import('recordingEditor').then(({default: recordingEditor}) => { import('recordingEditor').then(({default: recordingEditor}) => {
recordingEditor.show(item.Id, serverId).then(resolve, reject); recordingEditor.show(item.Id, serverId).then(resolve, reject);
}); });
} }
} else { } else {
import('metadataEditor').then(({default: metadataEditor}) => { import('metadataEditor').then(({default: metadataEditor}) => {
metadataEditor.show(item.Id, serverId).then(resolve, reject); metadataEditor.show(item.Id, serverId).then(resolve, reject);
}); });
} }
@ -342,20 +312,16 @@ import recordingHelper from 'recordingHelper';
} }
function onRecordCommand(serverId, id, type, timerId, seriesTimerId) { function onRecordCommand(serverId, id, type, timerId, seriesTimerId) {
if (type === 'Program' || timerId || seriesTimerId) { if (type === 'Program' || timerId || seriesTimerId) {
const programId = type === 'Program' ? id : null; const programId = type === 'Program' ? id : null;
recordingHelper.toggleRecording(serverId, programId, timerId, seriesTimerId); recordingHelper.toggleRecording(serverId, programId, timerId, seriesTimerId);
} }
} }
export function onClick(e) { export function onClick(e) {
const card = dom.parentWithClass(e.target, 'itemAction'); const card = dom.parentWithClass(e.target, 'itemAction');
if (card) { if (card) {
let actionElement = card; let actionElement = card;
let action = actionElement.getAttribute('data-action'); let action = actionElement.getAttribute('data-action');
@ -377,11 +343,9 @@ import recordingHelper from 'recordingHelper';
} }
function onCommand(e) { function onCommand(e) {
const cmd = e.detail.command; const cmd = e.detail.command;
if (cmd === 'play' || cmd === 'resume' || cmd === 'record' || cmd === 'menu' || cmd === 'info') { if (cmd === 'play' || cmd === 'resume' || cmd === 'record' || cmd === 'menu' || cmd === 'info') {
const target = e.target; const target = e.target;
const card = dom.parentWithClass(target, 'itemAction') || dom.parentWithAttribute(target, 'data-id'); const card = dom.parentWithClass(target, 'itemAction') || dom.parentWithAttribute(target, 'data-id');
@ -394,7 +358,6 @@ import recordingHelper from 'recordingHelper';
} }
export function on(context, options) { export function on(context, options) {
options = options || {}; options = options || {};
if (options.click !== false) { if (options.click !== false) {
@ -417,7 +380,6 @@ import recordingHelper from 'recordingHelper';
} }
export function getShortcutAttributesHtml(item, serverId) { export function getShortcutAttributesHtml(item, serverId) {
let html = `data-id="${item.Id}" data-serverid="${serverId || item.ServerId}" data-type="${item.Type}" data-mediatype="${item.MediaType}" data-channelid="${item.ChannelId}" data-isfolder="${item.IsFolder}"`; let html = `data-id="${item.Id}" data-serverid="${serverId || item.ServerId}" data-type="${item.Type}" data-mediatype="${item.MediaType}" data-channelid="${item.ChannelId}" data-isfolder="${item.IsFolder}"`;
const collectionType = item.CollectionType; const collectionType = item.CollectionType;

View file

@ -38,7 +38,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
if (options.type === 'Primary') { if (options.type === 'Primary') {
if (item.AlbumId && item.AlbumPrimaryImageTag) { if (item.AlbumId && item.AlbumPrimaryImageTag) {
options.tag = item.AlbumPrimaryImageTag; options.tag = item.AlbumPrimaryImageTag;
return apiClient.getScaledImageUrl(item.AlbumId, options); return apiClient.getScaledImageUrl(item.AlbumId, options);
} }
@ -64,7 +63,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
} }
if (item.BackdropImageTags && item.BackdropImageTags.length) { if (item.BackdropImageTags && item.BackdropImageTags.length) {
options.tag = item.BackdropImageTags[0]; options.tag = item.BackdropImageTags[0];
return apiClient.getScaledImageUrl(item.Id, options); return apiClient.getScaledImageUrl(item.Id, options);
} }
@ -184,7 +182,6 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f
html += '</div>'; html += '</div>';
} }
} else { } else {
html += '<div class="slideshowImage"></div><h1 class="slideshowImageText"></h1>'; html += '<div class="slideshowImage"></div><h1 class="slideshowImageText"></h1>';
} }

View file

@ -2,13 +2,11 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
'use strict'; 'use strict';
function onSubmit(e) { function onSubmit(e) {
e.preventDefault(); e.preventDefault();
return false; return false;
} }
function initEditor(context, settings) { function initEditor(context, settings) {
context.querySelector('form').addEventListener('submit', onSubmit); context.querySelector('form').addEventListener('submit', onSubmit);
context.querySelector('.selectSortOrder').value = settings.sortOrder; context.querySelector('.selectSortOrder').value = settings.sortOrder;
@ -26,14 +24,11 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
var selectSortBy = context.querySelector('.selectSortBy'); var selectSortBy = context.querySelector('.selectSortBy');
selectSortBy.innerHTML = options.map(function (o) { selectSortBy.innerHTML = options.map(function (o) {
return '<option value="' + o.value + '">' + o.name + '</option>'; return '<option value="' + o.value + '">' + o.name + '</option>';
}).join(''); }).join('');
} }
function saveValues(context, settings, settingsKey) { function saveValues(context, settings, settingsKey) {
userSettings.setFilter(settingsKey + '-sortorder', context.querySelector('.selectSortOrder').value); userSettings.setFilter(settingsKey + '-sortorder', context.querySelector('.selectSortOrder').value);
userSettings.setFilter(settingsKey + '-sortby', context.querySelector('.selectSortBy').value); userSettings.setFilter(settingsKey + '-sortby', context.querySelector('.selectSortBy').value);
} }
@ -43,11 +38,8 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
} }
SortMenu.prototype.show = function (options) { SortMenu.prototype.show = function (options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['text!./sortmenu.template.html'], function (template) { require(['text!./sortmenu.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -79,7 +71,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
initEditor(dlg, options.settings); initEditor(dlg, options.settings);
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
@ -94,7 +85,6 @@ define(['require', 'dom', 'focusManager', 'dialogHelper', 'loading', 'layoutMana
}, true); }, true);
dialogHelper.open(dlg).then(function () { dialogHelper.open(dlg).then(function () {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false); centerFocus(dlg.querySelector('.formDialogContent'), false, false);
} }

View file

@ -5,7 +5,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
var hasChanges; var hasChanges;
function downloadRemoteSubtitles(context, id) { function downloadRemoteSubtitles(context, id) {
var url = 'Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + id; var url = 'Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + id;
var apiClient = connectionManager.getApiClient(currentItem.ServerId); var apiClient = connectionManager.getApiClient(currentItem.ServerId);
@ -15,7 +14,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
url: apiClient.getUrl(url) url: apiClient.getUrl(url)
}).then(function () { }).then(function () {
hasChanges = true; hasChanges = true;
require(['toast'], function (toast) { require(['toast'], function (toast) {
@ -27,11 +25,9 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function deleteLocalSubtitle(context, index) { function deleteLocalSubtitle(context, index) {
var msg = globalize.translate('MessageAreYouSureDeleteSubtitles'); var msg = globalize.translate('MessageAreYouSureDeleteSubtitles');
require(['confirm'], function (confirm) { require(['confirm'], function (confirm) {
confirm.default({ confirm.default({
title: globalize.translate('ConfirmDeletion'), title: globalize.translate('ConfirmDeletion'),
@ -40,7 +36,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
primary: 'delete' primary: 'delete'
}).then(function () { }).then(function () {
loading.show(); loading.show();
var itemId = currentItem.Id; var itemId = currentItem.Id;
@ -54,34 +49,28 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
url: apiClient.getUrl(url) url: apiClient.getUrl(url)
}).then(function () { }).then(function () {
hasChanges = true; hasChanges = true;
reload(context, apiClient, itemId); reload(context, apiClient, itemId);
}); });
}); });
}); });
} }
function fillSubtitleList(context, item) { function fillSubtitleList(context, item) {
var streams = item.MediaStreams || []; var streams = item.MediaStreams || [];
var subs = streams.filter(function (s) { var subs = streams.filter(function (s) {
return s.Type === 'Subtitle'; return s.Type === 'Subtitle';
}); });
var html = ''; var html = '';
if (subs.length) { if (subs.length) {
html += '<h2>' + globalize.translate('MySubtitles') + '</h2>'; html += '<h2>' + globalize.translate('MySubtitles') + '</h2>';
html += '<div>'; html += '<div>';
html += subs.map(function (s) { html += subs.map(function (s) {
var itemHtml = ''; var itemHtml = '';
var tagName = layoutManager.tv ? 'button' : 'div'; var tagName = layoutManager.tv ? 'button' : 'div';
@ -119,7 +108,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
itemHtml += '</' + tagName + '>'; itemHtml += '</' + tagName + '>';
return itemHtml; return itemHtml;
}).join(''); }).join('');
html += '</div>'; html += '</div>';
@ -136,11 +124,9 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function fillLanguages(context, apiClient, languages) { function fillLanguages(context, apiClient, languages) {
var selectLanguage = context.querySelector('#selectLanguage'); var selectLanguage = context.querySelector('#selectLanguage');
selectLanguage.innerHTML = languages.map(function (l) { selectLanguage.innerHTML = languages.map(function (l) {
return '<option value="' + l.ThreeLetterISOLanguageName + '">' + l.DisplayName + '</option>'; return '<option value="' + l.ThreeLetterISOLanguageName + '">' + l.DisplayName + '</option>';
}); });
@ -148,9 +134,7 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
if (lastLanguage) { if (lastLanguage) {
selectLanguage.value = lastLanguage; selectLanguage.value = lastLanguage;
} else { } else {
apiClient.getCurrentUser().then(function (user) { apiClient.getCurrentUser().then(function (user) {
var lang = user.Configuration.SubtitleLanguagePreference; var lang = user.Configuration.SubtitleLanguagePreference;
if (lang) { if (lang) {
@ -161,12 +145,10 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function renderSearchResults(context, results) { function renderSearchResults(context, results) {
var lastProvider = ''; var lastProvider = '';
var html = ''; var html = '';
if (!results.length) { if (!results.length) {
context.querySelector('.noSearchResults').classList.remove('hide'); context.querySelector('.noSearchResults').classList.remove('hide');
context.querySelector('.subtitleResults').innerHTML = ''; context.querySelector('.subtitleResults').innerHTML = '';
loading.hide(); loading.hide();
@ -176,13 +158,11 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
context.querySelector('.noSearchResults').classList.add('hide'); context.querySelector('.noSearchResults').classList.add('hide');
for (var i = 0, length = results.length; i < length; i++) { for (var i = 0, length = results.length; i < length; i++) {
var result = results[i]; var result = results[i];
var provider = result.ProviderName; var provider = result.ProviderName;
if (provider !== lastProvider) { if (provider !== lastProvider) {
if (i > 0) { if (i > 0) {
html += '</div>'; html += '</div>';
} }
@ -245,7 +225,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function searchForSubtitles(context, language) { function searchForSubtitles(context, language) {
userSettings.set('subtitleeditor-language', language); userSettings.set('subtitleeditor-language', language);
loading.show(); loading.show();
@ -254,17 +233,14 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
var url = apiClient.getUrl('Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + language); var url = apiClient.getUrl('Items/' + currentItem.Id + '/RemoteSearch/Subtitles/' + language);
apiClient.getJSON(url).then(function (results) { apiClient.getJSON(url).then(function (results) {
renderSearchResults(context, results); renderSearchResults(context, results);
}); });
} }
function reload(context, apiClient, itemId) { function reload(context, apiClient, itemId) {
context.querySelector('.noSearchResults').classList.add('hide'); context.querySelector('.noSearchResults').classList.add('hide');
function onGetItem(item) { function onGetItem(item) {
currentItem = item; currentItem = item;
fillSubtitleList(context, item); fillSubtitleList(context, item);
@ -304,7 +280,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function onSubtitleListClick(e) { function onSubtitleListClick(e) {
var btnDelete = dom.parentWithClass(e.target, 'btnDelete'); var btnDelete = dom.parentWithClass(e.target, 'btnDelete');
if (btnDelete) { if (btnDelete) {
var index = btnDelete.getAttribute('data-index'); var index = btnDelete.getAttribute('data-index');
@ -333,7 +308,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function showDownloadOptions(button, context, subtitleId) { function showDownloadOptions(button, context, subtitleId) {
var items = []; var items = [];
items.push({ items.push({
@ -342,15 +316,12 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
}); });
require(['actionsheet'], function (actionsheet) { require(['actionsheet'], function (actionsheet) {
actionsheet.show({ actionsheet.show({
items: items, items: items,
positionTo: button positionTo: button
}).then(function (id) { }).then(function (id) {
switch (id) { switch (id) {
case 'download': case 'download':
downloadRemoteSubtitles(context, subtitleId); downloadRemoteSubtitles(context, subtitleId);
break; break;
@ -358,7 +329,6 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
break; break;
} }
}); });
}); });
} }
@ -370,12 +340,10 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function showEditorInternal(itemId, serverId, template) { function showEditorInternal(itemId, serverId, template) {
hasChanges = false; hasChanges = false;
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
return apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) { return apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function (item) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -413,19 +381,15 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
dlg.querySelector('.subtitleResults').addEventListener('click', onSubtitleResultsClick); dlg.querySelector('.subtitleResults').addEventListener('click', onSubtitleResultsClick);
apiClient.getCultures().then(function (languages) { apiClient.getCultures().then(function (languages) {
fillLanguages(editorContent, apiClient, languages); fillLanguages(editorContent, apiClient, languages);
}); });
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
dlg.addEventListener('close', function () { dlg.addEventListener('close', function () {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false); centerFocus(dlg.querySelector('.formDialogContent'), false, false);
} }
@ -445,17 +409,13 @@ define(['dialogHelper', 'require', 'layoutManager', 'globalize', 'userSettings',
} }
function showEditor(itemId, serverId) { function showEditor(itemId, serverId) {
loading.show(); loading.show();
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['text!./subtitleeditor.template.html'], function (template) { require(['text!./subtitleeditor.template.html'], function (template) {
showEditorInternal(itemId, serverId, template).then(resolve, reject); showEditorInternal(itemId, serverId, template).then(resolve, reject);
}); });
}); });
} }
return { return {

View file

@ -4,12 +4,10 @@
*/ */
function getTextStyles(settings, isCue) { function getTextStyles(settings, isCue) {
let list = []; let list = [];
if (isCue) { if (isCue) {
switch (settings.textSize || '') { switch (settings.textSize || '') {
case 'smaller': case 'smaller':
list.push({ name: 'font-size', value: '.5em' }); list.push({ name: 'font-size', value: '.5em' });
break; break;
@ -31,7 +29,6 @@ function getTextStyles(settings, isCue) {
} }
} else { } else {
switch (settings.textSize || '') { switch (settings.textSize || '') {
case 'smaller': case 'smaller':
list.push({ name: 'font-size', value: '.8em' }); list.push({ name: 'font-size', value: '.8em' });
break; break;
@ -55,7 +52,6 @@ function getTextStyles(settings, isCue) {
} }
switch (settings.dropShadow || '') { switch (settings.dropShadow || '') {
case 'raised': case 'raised':
list.push({ name: 'text-shadow', value: '-1px -1px white, 0px -1px white, -1px 0px white, 1px 1px black, 0px 1px black, 1px 0px black' }); list.push({ name: 'text-shadow', value: '-1px -1px white, 0px -1px white, -1px 0px white, 1px 1px black, 0px 1px black, 1px 0px black' });
break; break;
@ -85,7 +81,6 @@ function getTextStyles(settings, isCue) {
} }
switch (settings.font || '') { switch (settings.font || '') {
case 'typewriter': case 'typewriter':
list.push({ name: 'font-family', value: '"Courier New",monospace' }); list.push({ name: 'font-family', value: '"Courier New",monospace' });
list.push({ name: 'font-variant', value: 'none' }); list.push({ name: 'font-variant', value: 'none' });
@ -120,7 +115,6 @@ function getTextStyles(settings, isCue) {
} }
export function getStyles(settings, isCue) { export function getStyles(settings, isCue) {
return { return {
text: getTextStyles(settings, isCue), text: getTextStyles(settings, isCue),
window: [] window: []
@ -128,9 +122,7 @@ export function getStyles(settings, isCue) {
} }
function applyStyleList(styles, elem) { function applyStyleList(styles, elem) {
for (let i = 0, length = styles.length; i < length; i++) { for (let i = 0, length = styles.length; i < length; i++) {
let style = styles[i]; let style = styles[i];
elem.style[style.name] = style.value; elem.style[style.name] = style.value;
@ -138,7 +130,6 @@ function applyStyleList(styles, elem) {
} }
export function applyStyles(elements, appearanceSettings) { export function applyStyles(elements, appearanceSettings) {
let styles = getStyles(appearanceSettings); let styles = getStyles(appearanceSettings);
if (elements.text) { if (elements.text) {

View file

@ -32,9 +32,7 @@ function getSubtitleAppearanceObject(context) {
} }
function loadForm(context, user, userSettings, appearanceSettings, apiClient) { function loadForm(context, user, userSettings, appearanceSettings, apiClient) {
apiClient.getCultures().then(function (allCultures) { apiClient.getCultures().then(function (allCultures) {
if (appHost.supports('subtitleburnsettings') && user.Policy.EnableVideoPlaybackTranscoding) { if (appHost.supports('subtitleburnsettings') && user.Policy.EnableVideoPlaybackTranscoding) {
context.querySelector('.fldBurnIn').classList.remove('hide'); context.querySelector('.fldBurnIn').classList.remove('hide');
} }
@ -65,7 +63,6 @@ function loadForm(context, user, userSettings, appearanceSettings, apiClient) {
} }
function saveUser(context, user, userSettingsInstance, appearanceKey, apiClient) { function saveUser(context, user, userSettingsInstance, appearanceKey, apiClient) {
let appearanceSettings = userSettingsInstance.getSubtitleAppearanceSettings(appearanceKey); let appearanceSettings = userSettingsInstance.getSubtitleAppearanceSettings(appearanceKey);
appearanceSettings = Object.assign(appearanceSettings, getSubtitleAppearanceObject(context)); appearanceSettings = Object.assign(appearanceSettings, getSubtitleAppearanceObject(context));
@ -78,15 +75,12 @@ function saveUser(context, user, userSettingsInstance, appearanceKey, apiClient)
} }
function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) { function save(instance, context, userId, userSettings, apiClient, enableSaveConfirmation) {
loading.show(); loading.show();
appSettings.set('subtitleburnin', context.querySelector('#selectSubtitleBurnIn').value); appSettings.set('subtitleburnin', context.querySelector('#selectSubtitleBurnIn').value);
apiClient.getUser(userId).then(function (user) { apiClient.getUser(userId).then(function (user) {
saveUser(context, user, userSettings, instance.appearanceKey, apiClient).then(function () { saveUser(context, user, userSettings, instance.appearanceKey, apiClient).then(function () {
loading.hide(); loading.hide();
if (enableSaveConfirmation) { if (enableSaveConfirmation) {
import('toast').then(({default: toast}) => { import('toast').then(({default: toast}) => {
@ -95,7 +89,6 @@ function save(instance, context, userId, userSettings, apiClient, enableSaveConf
} }
events.trigger(instance, 'saved'); events.trigger(instance, 'saved');
}, function () { }, function () {
loading.hide(); loading.hide();
}); });
@ -103,7 +96,6 @@ function save(instance, context, userId, userSettings, apiClient, enableSaveConf
} }
function onSubtitleModeChange(e) { function onSubtitleModeChange(e) {
let view = dom.parentWithClass(e.target, 'subtitlesettings'); let view = dom.parentWithClass(e.target, 'subtitlesettings');
let subtitlesHelp = view.querySelectorAll('.subtitlesHelp'); let subtitlesHelp = view.querySelectorAll('.subtitlesHelp');
@ -114,7 +106,6 @@ function onSubtitleModeChange(e) {
} }
function onAppearanceFieldChange(e) { function onAppearanceFieldChange(e) {
let view = dom.parentWithClass(e.target, 'subtitlesettings'); let view = dom.parentWithClass(e.target, 'subtitlesettings');
let appearanceSettings = getSubtitleAppearanceObject(view); let appearanceSettings = getSubtitleAppearanceObject(view);
@ -128,9 +119,7 @@ function onAppearanceFieldChange(e) {
} }
function embed(options, self) { function embed(options, self) {
import('text!./subtitlesettings.template.html').then(({default: template}) => { import('text!./subtitlesettings.template.html').then(({default: template}) => {
options.element.classList.add('subtitlesettings'); options.element.classList.add('subtitlesettings');
options.element.innerHTML = globalize.translateHtml(template, 'core'); options.element.innerHTML = globalize.translateHtml(template, 'core');
@ -160,9 +149,7 @@ function embed(options, self) {
} }
export class SubtitleSettings { export class SubtitleSettings {
constructor(options) { constructor(options) {
this.options = options; this.options = options;
embed(options, this); embed(options, this);
@ -204,7 +191,6 @@ export class SubtitleSettings {
let userSettings = self.options.userSettings; let userSettings = self.options.userSettings;
userSettings.setUserInfo(userId, apiClient).then(function () { userSettings.setUserInfo(userId, apiClient).then(function () {
let enableSaveConfirmation = self.options.enableSaveConfirmation; let enableSaveConfirmation = self.options.enableSaveConfirmation;
save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation); save(self, self.options.element, userId, userSettings, apiClient, enableSaveConfirmation);
}); });

View file

@ -8,7 +8,6 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html',
var subtitleSyncContainer; var subtitleSyncContainer;
function init(instance) { function init(instance) {
var parent = document.createElement('div'); var parent = document.createElement('div');
document.body.appendChild(parent); document.body.appendChild(parent);
parent.innerHTML = template; parent.innerHTML = template;
@ -141,7 +140,6 @@ define(['playbackManager', 'layoutManager', 'text!./subtitlesync.template.html',
}; };
SubtitleSync.prototype.toggle = function(action) { SubtitleSync.prototype.toggle = function(action) {
if (player && playbackManager.supportSubtitleOffset(player)) { if (player && playbackManager.supportSubtitleOffset(player)) {
/* eslint-disable no-fallthrough */ /* eslint-disable no-fallthrough */
switch (action) { switch (action) {

View file

@ -3,7 +3,6 @@
* @returns {HTMLMediaElement} The audio element. * @returns {HTMLMediaElement} The audio element.
*/ */
function createTestMediaElement () { function createTestMediaElement () {
const elem = document.createElement('audio'); const elem = document.createElement('audio');
elem.classList.add('testMediaPlayerAudio'); elem.classList.add('testMediaPlayerAudio');
elem.classList.add('hide'); elem.classList.add('hide');

View file

@ -554,7 +554,6 @@ class SyncPlayManager {
this.syncTimeout = setTimeout(() => { this.syncTimeout = setTimeout(() => {
this.syncEnabled = true; this.syncEnabled = true;
}, SyncMethodThreshold / 2); }, SyncMethodThreshold / 2);
}, playTimeout); }, playTimeout);
console.debug('Scheduled play in', playTimeout / 1000.0, 'seconds.'); console.debug('Scheduled play in', playTimeout / 1000.0, 'seconds.');

View file

@ -140,7 +140,6 @@ class TimeSyncManager {
}).finally(() => { }).finally(() => {
this.requestPing(); this.requestPing();
}); });
}, this.pollingInterval); }, this.pollingInterval);
} }
} }

View file

@ -2,7 +2,6 @@ define(['backdrop', 'mainTabsManager', 'layoutManager', 'emby-tabs'], function (
'use strict'; 'use strict';
function onViewDestroy(e) { function onViewDestroy(e) {
var tabControllers = this.tabControllers; var tabControllers = this.tabControllers;
if (tabControllers) { if (tabControllers) {
@ -26,7 +25,6 @@ define(['backdrop', 'mainTabsManager', 'layoutManager', 'emby-tabs'], function (
} }
function TabbedView(view, params) { function TabbedView(view, params) {
this.tabControllers = []; this.tabControllers = [];
this.view = view; this.view = view;
this.params = params; this.params = params;
@ -37,15 +35,12 @@ define(['backdrop', 'mainTabsManager', 'layoutManager', 'emby-tabs'], function (
this.initialTabIndex = currentTabIndex; this.initialTabIndex = currentTabIndex;
function validateTabLoad(index) { function validateTabLoad(index) {
return self.validateTabLoad ? self.validateTabLoad(index) : Promise.resolve(); return self.validateTabLoad ? self.validateTabLoad(index) : Promise.resolve();
} }
function loadTab(index, previousIndex) { function loadTab(index, previousIndex) {
validateTabLoad(index).then(function () { validateTabLoad(index).then(function () {
self.getTabController(index).then(function (controller) { self.getTabController(index).then(function (controller) {
var refresh = !controller.refreshed; var refresh = !controller.refreshed;
controller.onResume({ controller.onResume({
@ -80,12 +75,10 @@ define(['backdrop', 'mainTabsManager', 'layoutManager', 'emby-tabs'], function (
view.addEventListener('viewbeforehide', this.onPause.bind(this)); view.addEventListener('viewbeforehide', this.onPause.bind(this));
view.addEventListener('viewbeforeshow', function (e) { view.addEventListener('viewbeforeshow', function (e) {
mainTabsManager.setTabs(view, currentTabIndex, self.getTabs, getTabContainers, onBeforeTabChange, onTabChange, false); mainTabsManager.setTabs(view, currentTabIndex, self.getTabs, getTabContainers, onBeforeTabChange, onTabChange, false);
}); });
view.addEventListener('viewshow', function (e) { view.addEventListener('viewshow', function (e) {
self.onResume(e.detail); self.onResume(e.detail);
}); });
@ -93,7 +86,6 @@ define(['backdrop', 'mainTabsManager', 'layoutManager', 'emby-tabs'], function (
} }
TabbedView.prototype.onResume = function (options) { TabbedView.prototype.onResume = function (options) {
this.setTitle(); this.setTitle();
backdrop.clearBackdrop(); backdrop.clearBackdrop();
@ -107,7 +99,6 @@ define(['backdrop', 'mainTabsManager', 'layoutManager', 'emby-tabs'], function (
}; };
TabbedView.prototype.onPause = function () { TabbedView.prototype.onPause = function () {
var currentTabController = this.currentTabController; var currentTabController = this.currentTabController;
if (currentTabController && currentTabController.onPause) { if (currentTabController && currentTabController.onPause) {

View file

@ -5,13 +5,11 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
var currentThemeIds = []; var currentThemeIds = [];
function playThemeMedia(items, ownerId) { function playThemeMedia(items, ownerId) {
var currentThemeItems = items.filter(function (i) { var currentThemeItems = items.filter(function (i) {
return enabled(i.MediaType); return enabled(i.MediaType);
}); });
if (currentThemeItems.length) { if (currentThemeItems.length) {
// Stop if a theme song from another ownerId // Stop if a theme song from another ownerId
// Leave it alone if anything else (e.g user playing a movie) // Leave it alone if anything else (e.g user playing a movie)
if (!currentOwnerId && playbackManager.isPlaying()) { if (!currentOwnerId && playbackManager.isPlaying()) {
@ -29,7 +27,6 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
}).then(function () { }).then(function () {
currentOwnerId = ownerId; currentOwnerId = ownerId;
}); });
} else { } else {
stopIfPlaying(); stopIfPlaying();
} }
@ -44,7 +41,6 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
} }
function enabled(mediaType) { function enabled(mediaType) {
if (mediaType === 'Video') { if (mediaType === 'Video') {
return userSettings.enableThemeVideos(); return userSettings.enableThemeVideos();
} }
@ -55,7 +51,6 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
var excludeTypes = ['CollectionFolder', 'UserView', 'Program', 'SeriesTimer', 'Person', 'TvChannel', 'Channel']; var excludeTypes = ['CollectionFolder', 'UserView', 'Program', 'SeriesTimer', 'Person', 'TvChannel', 'Channel'];
function loadThemeMedia(item) { function loadThemeMedia(item) {
if (item.CollectionType) { if (item.CollectionType) {
stopIfPlaying(); stopIfPlaying();
return; return;
@ -68,11 +63,9 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
var apiClient = connectionManager.getApiClient(item.ServerId); var apiClient = connectionManager.getApiClient(item.ServerId);
apiClient.getThemeMedia(apiClient.getCurrentUserId(), item.Id, true).then(function (themeMediaResult) { apiClient.getThemeMedia(apiClient.getCurrentUserId(), item.Id, true).then(function (themeMediaResult) {
var ownerId = themeMediaResult.ThemeVideosResult.Items.length ? themeMediaResult.ThemeVideosResult.OwnerId : themeMediaResult.ThemeSongsResult.OwnerId; var ownerId = themeMediaResult.ThemeVideosResult.Items.length ? themeMediaResult.ThemeVideosResult.OwnerId : themeMediaResult.ThemeSongsResult.OwnerId;
if (ownerId !== currentOwnerId) { if (ownerId !== currentOwnerId) {
var items = themeMediaResult.ThemeVideosResult.Items.length ? themeMediaResult.ThemeVideosResult.Items : themeMediaResult.ThemeSongsResult.Items; var items = themeMediaResult.ThemeVideosResult.Items.length ? themeMediaResult.ThemeVideosResult.Items : themeMediaResult.ThemeSongsResult.Items;
playThemeMedia(items, ownerId); playThemeMedia(items, ownerId);
@ -81,7 +74,6 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
} }
document.addEventListener('viewshow', function (e) { document.addEventListener('viewshow', function (e) {
var state = e.detail.state || {}; var state = e.detail.state || {};
var item = state.item; var item = state.item;
@ -97,7 +89,6 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
} else { } else {
playThemeMedia([], null); playThemeMedia([], null);
} }
}, true); }, true);
Events.on(playbackManager, 'playbackstart', function (e, player) { Events.on(playbackManager, 'playbackstart', function (e, player) {
@ -107,5 +98,4 @@ define(['playbackManager', 'userSettings', 'connectionManager'], function (playb
currentOwnerId = null; currentOwnerId = null;
} }
}); });
}); });

View file

@ -2,24 +2,19 @@ define(['css!./toast'], function () {
'use strict'; 'use strict';
function remove(elem) { function remove(elem) {
setTimeout(function () { setTimeout(function () {
elem.parentNode.removeChild(elem); elem.parentNode.removeChild(elem);
}, 300); }, 300);
} }
function animateRemove(elem) { function animateRemove(elem) {
setTimeout(function () { setTimeout(function () {
elem.classList.remove('toastVisible'); elem.classList.remove('toastVisible');
remove(elem); remove(elem);
}, 3300); }, 3300);
} }
return function (options) { return function (options) {
if (typeof options === 'string') { if (typeof options === 'string') {
options = { options = {
text: options text: options
@ -36,7 +31,6 @@ define(['css!./toast'], function () {
elem.classList.add('toastVisible'); elem.classList.add('toastVisible');
animateRemove(elem); animateRemove(elem);
}, 300); }, 300);
}; };
}); });

View file

@ -4,7 +4,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
var transitionEndEventName = dom.whichTransitionEvent(); var transitionEndEventName = dom.whichTransitionEvent();
function seriesImageUrl(item, options) { function seriesImageUrl(item, options) {
if (item.Type !== 'Episode') { if (item.Type !== 'Episode') {
return null; return null;
} }
@ -13,9 +12,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
options.type = options.type || 'Primary'; options.type = options.type || 'Primary';
if (options.type === 'Primary') { if (options.type === 'Primary') {
if (item.SeriesPrimaryImageTag) { if (item.SeriesPrimaryImageTag) {
options.tag = item.SeriesPrimaryImageTag; options.tag = item.SeriesPrimaryImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
@ -23,15 +20,12 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
if (options.type === 'Thumb') { if (options.type === 'Thumb') {
if (item.SeriesThumbImageTag) { if (item.SeriesThumbImageTag) {
options.tag = item.SeriesThumbImageTag; options.tag = item.SeriesThumbImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.SeriesId, options);
} }
if (item.ParentThumbImageTag) { if (item.ParentThumbImageTag) {
options.tag = item.ParentThumbImageTag; options.tag = item.ParentThumbImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.ParentThumbItemId, options);
@ -42,19 +36,16 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function imageUrl(item, options) { function imageUrl(item, options) {
options = options || {}; options = options || {};
options.type = options.type || 'Primary'; options.type = options.type || 'Primary';
if (item.ImageTags && item.ImageTags[options.type]) { if (item.ImageTags && item.ImageTags[options.type]) {
options.tag = item.ImageTags[options.type]; options.tag = item.ImageTags[options.type];
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId || item.Id, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.PrimaryImageItemId || item.Id, options);
} }
if (options.type === 'Primary') { if (options.type === 'Primary') {
if (item.AlbumId && item.AlbumPrimaryImageTag) { if (item.AlbumId && item.AlbumPrimaryImageTag) {
options.tag = item.AlbumPrimaryImageTag; options.tag = item.AlbumPrimaryImageTag;
return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId, options); return connectionManager.getApiClient(item.ServerId).getScaledImageUrl(item.AlbumId, options);
} }
@ -64,9 +55,7 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function setPoster(osdPoster, item, secondaryItem) { function setPoster(osdPoster, item, secondaryItem) {
if (item) { if (item) {
var imgUrl = seriesImageUrl(item, { type: 'Primary' }) || var imgUrl = seriesImageUrl(item, { type: 'Primary' }) ||
seriesImageUrl(item, { type: 'Thumb' }) || seriesImageUrl(item, { type: 'Thumb' }) ||
imageUrl(item, { type: 'Primary' }); imageUrl(item, { type: 'Primary' });
@ -87,7 +76,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function getHtml() { function getHtml() {
var html = ''; var html = '';
html += '<div class="upNextDialog-poster">'; html += '<div class="upNextDialog-poster">';
@ -124,7 +112,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function setNextVideoText() { function setNextVideoText() {
var instance = this; var instance = this;
var elem = instance.options.parent; var elem = instance.options.parent;
@ -143,7 +130,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function fillItem(item) { function fillItem(item) {
var instance = this; var instance = this;
var elem = instance.options.parent; var elem = instance.options.parent;
@ -175,11 +161,9 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function onStartNowClick() { function onStartNowClick() {
var options = this.options; var options = this.options;
if (options) { if (options) {
var player = options.player; var player = options.player;
this.hide(); this.hide();
@ -189,7 +173,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function init(instance, options) { function init(instance, options) {
options.parent.innerHTML = getHtml(); options.parent.innerHTML = getHtml();
options.parent.classList.add('hide'); options.parent.classList.add('hide');
@ -203,7 +186,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function clearHideAnimationEventListeners(instance, elem) { function clearHideAnimationEventListeners(instance, elem) {
var fn = instance._onHideAnimationComplete; var fn = instance._onHideAnimationComplete;
if (fn) { if (fn) {
@ -214,7 +196,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function onHideAnimationComplete(e) { function onHideAnimationComplete(e) {
var instance = this; var instance = this;
var elem = e.target; var elem = e.target;
@ -225,7 +206,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function hideComingUpNext() { function hideComingUpNext() {
var instance = this; var instance = this;
clearCountdownTextTimeout(this); clearCountdownTextTimeout(this);
@ -259,10 +239,8 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function getTimeRemainingMs(instance) { function getTimeRemainingMs(instance) {
var options = instance.options; var options = instance.options;
if (options) { if (options) {
var runtimeTicks = playbackManager.duration(options.player); var runtimeTicks = playbackManager.duration(options.player);
if (runtimeTicks) { if (runtimeTicks) {
@ -276,7 +254,6 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function startComingUpNextHideTimer(instance) { function startComingUpNextHideTimer(instance) {
var timeRemainingMs = getTimeRemainingMs(instance); var timeRemainingMs = getTimeRemainingMs(instance);
if (timeRemainingMs <= 0) { if (timeRemainingMs <= 0) {
@ -290,14 +267,12 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
} }
function UpNextDialog(options) { function UpNextDialog(options) {
this.options = options; this.options = options;
init(this, options); init(this, options);
} }
UpNextDialog.prototype.show = function () { UpNextDialog.prototype.show = function () {
var elem = this.options.parent; var elem = this.options.parent;
clearHideAnimationEventListeners(this, elem); clearHideAnimationEventListeners(this, elem);
@ -319,12 +294,10 @@ define(['dom', 'playbackManager', 'connectionManager', 'events', 'mediaInfo', 'l
}; };
UpNextDialog.prototype.hide = function () { UpNextDialog.prototype.hide = function () {
hideComingUpNext.call(this); hideComingUpNext.call(this);
}; };
UpNextDialog.prototype.destroy = function () { UpNextDialog.prototype.destroy = function () {
hideComingUpNext.call(this); hideComingUpNext.call(this);
this.options = null; this.options = null;

View file

@ -9,7 +9,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
}; };
function getUserDataButtonHtml(method, itemId, serverId, buttonCssClass, iconCssClass, icon, tooltip, style) { function getUserDataButtonHtml(method, itemId, serverId, buttonCssClass, iconCssClass, icon, tooltip, style) {
if (style === 'fab-mini') { if (style === 'fab-mini') {
style = 'fab'; style = 'fab';
buttonCssClass = buttonCssClass ? (buttonCssClass + ' mini') : 'mini'; buttonCssClass = buttonCssClass ? (buttonCssClass + ' mini') : 'mini';
@ -34,7 +33,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function onContainerClick(e) { function onContainerClick(e) {
var btnUserData = dom.parentWithClass(e.target, 'btnUserData'); var btnUserData = dom.parentWithClass(e.target, 'btnUserData');
if (!btnUserData) { if (!btnUserData) {
@ -46,7 +44,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function fill(options) { function fill(options) {
var html = getIconsHtml(options); var html = getIconsHtml(options);
if (options.fillMode === 'insertAdjacent') { if (options.fillMode === 'insertAdjacent') {
@ -65,7 +62,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function destroy(options) { function destroy(options) {
options.element.innerHTML = ''; options.element.innerHTML = '';
dom.removeEventListener(options.element, 'click', onContainerClick, { dom.removeEventListener(options.element, 'click', onContainerClick, {
@ -74,7 +70,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function getIconsHtml(options) { function getIconsHtml(options) {
var item = options.item; var item = options.item;
var includePlayed = options.includePlayed; var includePlayed = options.includePlayed;
var cssClass = options.cssClass; var cssClass = options.cssClass;
@ -114,7 +109,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
var tooltipFavorite = globalize.translate('Favorite'); var tooltipFavorite = globalize.translate('Favorite');
if (userData.IsFavorite) { if (userData.IsFavorite) {
html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData btnUserDataOn', iconCssClass, 'favorite', tooltipFavorite, style); html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData btnUserDataOn', iconCssClass, 'favorite', tooltipFavorite, style);
} else { } else {
html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData', iconCssClass, 'favorite', tooltipFavorite, style); html += getUserDataButtonHtml('markFavorite', itemId, serverId, btnCssClass + ' btnUserData', iconCssClass, 'favorite', tooltipFavorite, style);
@ -124,7 +118,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function markFavorite(link) { function markFavorite(link) {
var id = link.getAttribute('data-itemid'); var id = link.getAttribute('data-itemid');
var serverId = link.getAttribute('data-serverid'); var serverId = link.getAttribute('data-serverid');
@ -140,18 +133,14 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function markLike(link) { function markLike(link) {
var id = link.getAttribute('data-itemid'); var id = link.getAttribute('data-itemid');
var serverId = link.getAttribute('data-serverid'); var serverId = link.getAttribute('data-serverid');
if (!link.classList.contains('btnUserDataOn')) { if (!link.classList.contains('btnUserDataOn')) {
likes(id, serverId, true); likes(id, serverId, true);
link.classList.add('btnUserDataOn'); link.classList.add('btnUserDataOn');
} else { } else {
clearLike(id, serverId); clearLike(id, serverId);
link.classList.remove('btnUserDataOn'); link.classList.remove('btnUserDataOn');
@ -161,18 +150,14 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function markDislike(link) { function markDislike(link) {
var id = link.getAttribute('data-itemid'); var id = link.getAttribute('data-itemid');
var serverId = link.getAttribute('data-serverid'); var serverId = link.getAttribute('data-serverid');
if (!link.classList.contains('btnUserDataOn')) { if (!link.classList.contains('btnUserDataOn')) {
likes(id, serverId, false); likes(id, serverId, false);
link.classList.add('btnUserDataOn'); link.classList.add('btnUserDataOn');
} else { } else {
clearLike(id, serverId); clearLike(id, serverId);
link.classList.remove('btnUserDataOn'); link.classList.remove('btnUserDataOn');
@ -182,18 +167,14 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function markPlayed(link) { function markPlayed(link) {
var id = link.getAttribute('data-itemid'); var id = link.getAttribute('data-itemid');
var serverId = link.getAttribute('data-serverid'); var serverId = link.getAttribute('data-serverid');
if (!link.classList.contains('btnUserDataOn')) { if (!link.classList.contains('btnUserDataOn')) {
played(id, serverId, true); played(id, serverId, true);
link.classList.add('btnUserDataOn'); link.classList.add('btnUserDataOn');
} else { } else {
played(id, serverId, false); played(id, serverId, false);
link.classList.remove('btnUserDataOn'); link.classList.remove('btnUserDataOn');
@ -220,7 +201,6 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
} }
function clearLike(id, serverId) { function clearLike(id, serverId) {
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
return apiClient.clearUserItemRating(apiClient.getCurrentUserId(), id); return apiClient.clearUserItemRating(apiClient.getCurrentUserId(), id);
@ -231,5 +211,4 @@ define(['connectionManager', 'globalize', 'dom', 'itemHelper', 'paper-icon-butto
destroy: destroy, destroy: destroy,
getIconsHtml: getIconsHtml getIconsHtml: getIconsHtml
}; };
}); });

View file

@ -5,10 +5,8 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
var dispatchPageEvents; var dispatchPageEvents;
viewContainer.setOnBeforeChange(function (newView, isRestored, options) { viewContainer.setOnBeforeChange(function (newView, isRestored, options) {
var lastView = currentView; var lastView = currentView;
if (lastView) { if (lastView) {
var beforeHideResult = dispatchViewEvent(lastView, null, 'viewbeforehide', true); var beforeHideResult = dispatchViewEvent(lastView, null, 'viewbeforehide', true);
if (!beforeHideResult) { if (!beforeHideResult) {
@ -36,7 +34,6 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
}); });
function onViewChange(view, options, isRestore) { function onViewChange(view, options, isRestore) {
var lastView = currentView; var lastView = currentView;
if (lastView) { if (lastView) {
dispatchViewEvent(lastView, null, 'viewhide'); dispatchViewEvent(lastView, null, 'viewhide');
@ -76,7 +73,6 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
} }
function dispatchViewEvent(view, eventInfo, eventName, isCancellable) { function dispatchViewEvent(view, eventInfo, eventName, isCancellable) {
if (!eventInfo) { if (!eventInfo) {
eventInfo = { eventInfo = {
detail: { detail: {
@ -101,7 +97,6 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
} }
function getViewEventDetail(view, options, isRestore) { function getViewEventDetail(view, options, isRestore) {
var url = options.url; var url = options.url;
var index = url.indexOf('?'); var index = url.indexOf('?');
var params = index === -1 ? {} : queryString.parse(url.substring(index + 1)); var params = index === -1 ? {} : queryString.parse(url.substring(index + 1));
@ -133,7 +128,6 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
} }
ViewManager.prototype.loadView = function (options) { ViewManager.prototype.loadView = function (options) {
var lastView = currentView; var lastView = currentView;
// Record the element that has focus // Record the element that has focus
@ -146,13 +140,11 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
} }
viewContainer.loadView(options).then(function (view) { viewContainer.loadView(options).then(function (view) {
onViewChange(view, options); onViewChange(view, options);
}); });
}; };
ViewManager.prototype.tryRestoreView = function (options, onViewChanging) { ViewManager.prototype.tryRestoreView = function (options, onViewChanging) {
if (options.cancel) { if (options.cancel) {
return Promise.reject({ cancelled: true }); return Promise.reject({ cancelled: true });
} }
@ -163,10 +155,8 @@ define(['viewContainer', 'focusManager', 'queryString', 'layoutManager'], functi
} }
return viewContainer.tryRestoreView(options).then(function (view) { return viewContainer.tryRestoreView(options).then(function (view) {
onViewChanging(); onViewChanging();
onViewChange(view, options, true); onViewChange(view, options, true);
}); });
}; };

View file

@ -2,19 +2,16 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne
'use strict'; 'use strict';
function onSubmit(e) { function onSubmit(e) {
e.preventDefault(); e.preventDefault();
return false; return false;
} }
function initEditor(context, settings) { function initEditor(context, settings) {
context.querySelector('form').addEventListener('submit', onSubmit); context.querySelector('form').addEventListener('submit', onSubmit);
var elems = context.querySelectorAll('.viewSetting-checkboxContainer'); var elems = context.querySelectorAll('.viewSetting-checkboxContainer');
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
elems[i].querySelector('input').checked = settings[elems[i].getAttribute('data-settingname')] || false; elems[i].querySelector('input').checked = settings[elems[i].getAttribute('data-settingname')] || false;
} }
@ -22,7 +19,6 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne
} }
function saveValues(context, settings, settingsKey) { function saveValues(context, settings, settingsKey) {
var elems = context.querySelectorAll('.viewSetting-checkboxContainer'); var elems = context.querySelectorAll('.viewSetting-checkboxContainer');
for (var i = 0, length = elems.length; i < length; i++) { for (var i = 0, length = elems.length; i < length; i++) {
userSettings.set(settingsKey + '-' + elems[i].getAttribute('data-settingname'), elems[i].querySelector('input').checked); userSettings.set(settingsKey + '-' + elems[i].getAttribute('data-settingname'), elems[i].querySelector('input').checked);
@ -39,7 +35,6 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne
} }
function showIfAllowed(context, selector, visible) { function showIfAllowed(context, selector, visible) {
var elem = context.querySelector(selector); var elem = context.querySelector(selector);
if (visible && !elem.classList.contains('hiddenFromViewSettings')) { if (visible && !elem.classList.contains('hiddenFromViewSettings')) {
@ -54,11 +49,8 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne
} }
ViewSettings.prototype.show = function (options) { ViewSettings.prototype.show = function (options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['text!./viewSettings.template.html'], function (template) { require(['text!./viewSettings.template.html'], function (template) {
var dialogOptions = { var dialogOptions = {
removeOnClose: true, removeOnClose: true,
scrollY: false scrollY: false
@ -100,13 +92,11 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne
initEditor(dlg, options.settings); initEditor(dlg, options.settings);
dlg.querySelector('.selectImageType').addEventListener('change', function () { dlg.querySelector('.selectImageType').addEventListener('change', function () {
showIfAllowed(dlg, '.chkTitleContainer', this.value !== 'list'); showIfAllowed(dlg, '.chkTitleContainer', this.value !== 'list');
showIfAllowed(dlg, '.chkYearContainer', this.value !== 'list'); showIfAllowed(dlg, '.chkYearContainer', this.value !== 'list');
}); });
dlg.querySelector('.btnCancel').addEventListener('click', function () { dlg.querySelector('.btnCancel').addEventListener('click', function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
@ -119,13 +109,10 @@ define(['require', 'dialogHelper', 'loading', 'apphost', 'layoutManager', 'conne
dlg.querySelector('.selectImageType').dispatchEvent(new CustomEvent('change', {})); dlg.querySelector('.selectImageType').dispatchEvent(new CustomEvent('change', {}));
dlg.querySelector('form').addEventListener('change', function () { dlg.querySelector('form').addEventListener('change', function () {
submitted = true; submitted = true;
}, true); }, true);
dialogHelper.open(dlg).then(function () { dialogHelper.open(dlg).then(function () {
if (layoutManager.tv) { if (layoutManager.tv) {
centerFocus(dlg.querySelector('.formDialogContent'), false, false); centerFocus(dlg.querySelector('.formDialogContent'), false, false);
} }

View file

@ -257,7 +257,6 @@ import 'listViewStyle';
let currentType; let currentType;
for (const [index, profile] of profiles.entries()) { for (const [index, profile] of profiles.entries()) {
if (profile.Type !== currentType) { if (profile.Type !== currentType) {
html += '<li data-role="list-divider">' + profile.Type + '</li>'; html += '<li data-role="list-divider">' + profile.Type + '</li>';
currentType = profile.Type; currentType = profile.Type;

View file

@ -393,7 +393,6 @@ import 'emby-itemrefreshindicator';
}); });
}); });
pageIdOn('pagebeforehide', 'mediaLibraryPage', function () { pageIdOn('pagebeforehide', 'mediaLibraryPage', function () {
const page = this; const page = this;
taskButton({ taskButton({
mode: 'off', mode: 'off',

View file

@ -10,7 +10,6 @@ import 'emby-select';
/* eslint-disable indent */ /* eslint-disable indent */
function fillTimeOfDay(select) { function fillTimeOfDay(select) {
const options = []; const options = [];
for (let i = 0; i < 86400000; i += 900000) { for (let i = 0; i < 86400000; i += 900000) {
@ -99,7 +98,6 @@ import 'emby-select';
} }
if (trigger.Type == 'IntervalTrigger') { if (trigger.Type == 'IntervalTrigger') {
const hours = trigger.IntervalTicks / 36e9; const hours = trigger.IntervalTicks / 36e9;
if (hours == 0.25) { if (hours == 0.25) {

View file

@ -228,7 +228,6 @@ import 'paper-icon-button-light';
} }
function showBlockedTagPopup(page) { function showBlockedTagPopup(page) {
import('prompt').then(({default: prompt}) => { import('prompt').then(({default: prompt}) => {
prompt({ prompt({
label: globalize.translate('LabelTag') label: globalize.translate('LabelTag')

View file

@ -75,7 +75,6 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
ParentId: params.topParentId ParentId: params.topParentId
}; };
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) { ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
if (viewStyle == 'Thumb') { if (viewStyle == 'Thumb') {
cardBuilder.buildCards(result.Items, { cardBuilder.buildCards(result.Items, {
itemsContainer: elem, itemsContainer: elem,

View file

@ -963,7 +963,6 @@ import 'css!assets/css/videoosd';
const player = currentPlayer; const player = currentPlayer;
if (player) { if (player) {
// show subtitle offset feature only if player and media support it // show subtitle offset feature only if player and media support it
const showSubOffset = playbackManager.supportSubtitleOffset(player) && const showSubOffset = playbackManager.supportSubtitleOffset(player) &&
playbackManager.canHandleOffsetOnCurrentSubtitle(player); playbackManager.canHandleOffsetOnCurrentSubtitle(player);

View file

@ -55,7 +55,6 @@ import 'emby-button';
} }
function onButtonClick(e) { function onButtonClick(e) {
const button = this; const button = this;
const collapseContent = button.parentNode.querySelector('.collapseContent'); const collapseContent = button.parentNode.querySelector('.collapseContent');
@ -69,7 +68,6 @@ import 'emby-button';
} }
EmbyButtonPrototype.attachedCallback = function () { EmbyButtonPrototype.attachedCallback = function () {
if (this.classList.contains('emby-collapse')) { if (this.classList.contains('emby-collapse')) {
return; return;
} }

View file

@ -11,7 +11,6 @@ import 'webcomponents';
let supportsFloatingLabel = false; let supportsFloatingLabel = false;
if (Object.getOwnPropertyDescriptor && Object.defineProperty) { if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
// descriptor returning null in webos // descriptor returning null in webos
@ -94,16 +93,13 @@ import 'webcomponents';
} }
} }
} }
}; };
function onChange() { function onChange() {
const label = this.labelElement; const label = this.labelElement;
if (this.value) { if (this.value) {
label.classList.remove('inputLabel-float'); label.classList.remove('inputLabel-float');
} else { } else {
const instanceSupportsFloat = supportsFloatingLabel && this.type !== 'date' && this.type !== 'time'; const instanceSupportsFloat = supportsFloatingLabel && this.type !== 'date' && this.type !== 'time';
if (instanceSupportsFloat) { if (instanceSupportsFloat) {

View file

@ -7,14 +7,12 @@ import 'webcomponents';
/* eslint-disable indent */ /* eslint-disable indent */
function addNotificationEvent(instance, name, handler) { function addNotificationEvent(instance, name, handler) {
const localHandler = handler.bind(instance); const localHandler = handler.bind(instance);
events.on(serverNotifications, name, localHandler); events.on(serverNotifications, name, localHandler);
instance[name] = localHandler; instance[name] = localHandler;
} }
function removeNotificationEvent(instance, name) { function removeNotificationEvent(instance, name) {
const handler = instance[name]; const handler = instance[name];
if (handler) { if (handler) {
events.off(serverNotifications, name, handler); events.off(serverNotifications, name, handler);
@ -23,7 +21,6 @@ import 'webcomponents';
} }
function onRefreshProgress(e, apiClient, info) { function onRefreshProgress(e, apiClient, info) {
const indicator = this; const indicator = this;
if (!indicator.itemId) { if (!indicator.itemId) {
@ -31,7 +28,6 @@ import 'webcomponents';
} }
if (info.ItemId === indicator.itemId) { if (info.ItemId === indicator.itemId) {
const progress = parseFloat(info.Progress); const progress = parseFloat(info.Progress);
if (progress && progress < 100) { if (progress && progress < 100) {
@ -47,7 +43,6 @@ import 'webcomponents';
let EmbyItemRefreshIndicatorPrototype = Object.create(EmbyProgressRing); let EmbyItemRefreshIndicatorPrototype = Object.create(EmbyProgressRing);
EmbyItemRefreshIndicatorPrototype.createdCallback = function () { EmbyItemRefreshIndicatorPrototype.createdCallback = function () {
// base method // base method
if (EmbyProgressRing.createdCallback) { if (EmbyProgressRing.createdCallback) {
EmbyProgressRing.createdCallback.call(this); EmbyProgressRing.createdCallback.call(this);
@ -57,7 +52,6 @@ import 'webcomponents';
}; };
EmbyItemRefreshIndicatorPrototype.attachedCallback = function () { EmbyItemRefreshIndicatorPrototype.attachedCallback = function () {
// base method // base method
if (EmbyProgressRing.attachedCallback) { if (EmbyProgressRing.attachedCallback) {
EmbyProgressRing.attachedCallback.call(this); EmbyProgressRing.attachedCallback.call(this);
@ -65,7 +59,6 @@ import 'webcomponents';
}; };
EmbyItemRefreshIndicatorPrototype.detachedCallback = function () { EmbyItemRefreshIndicatorPrototype.detachedCallback = function () {
// base method // base method
if (EmbyProgressRing.detachedCallback) { if (EmbyProgressRing.detachedCallback) {
EmbyProgressRing.detachedCallback.call(this); EmbyProgressRing.detachedCallback.call(this);

View file

@ -147,7 +147,6 @@ import 'webcomponents';
}; };
function onUserDataChanged(e, apiClient, userData) { function onUserDataChanged(e, apiClient, userData) {
const itemsContainer = this; const itemsContainer = this;
import('cardBuilder').then(({default: cardBuilder}) => { import('cardBuilder').then(({default: cardBuilder}) => {
@ -174,7 +173,6 @@ import 'webcomponents';
} }
function onTimerCreated(e, apiClient, data) { function onTimerCreated(e, apiClient, data) {
const itemsContainer = this; const itemsContainer = this;
if (getEventsToMonitor(itemsContainer).indexOf('timers') !== -1) { if (getEventsToMonitor(itemsContainer).indexOf('timers') !== -1) {
@ -360,7 +358,6 @@ import 'webcomponents';
let refreshIntervalEndTime = this.refreshIntervalEndTime; let refreshIntervalEndTime = this.refreshIntervalEndTime;
if (refreshIntervalEndTime) { if (refreshIntervalEndTime) {
const remainingMs = refreshIntervalEndTime - new Date().getTime(); const remainingMs = refreshIntervalEndTime - new Date().getTime();
if (remainingMs > 0 && !this.needsRefresh) { if (remainingMs > 0 && !this.needsRefresh) {
resetRefreshInterval(this, remainingMs); resetRefreshInterval(this, remainingMs);

View file

@ -21,7 +21,6 @@ import EmbyButtonPrototype from 'emby-button';
} }
function onClick(e) { function onClick(e) {
const button = this; const button = this;
const id = button.getAttribute('data-id'); const id = button.getAttribute('data-id');
const serverId = button.getAttribute('data-serverid'); const serverId = button.getAttribute('data-serverid');
@ -70,7 +69,6 @@ import EmbyButtonPrototype from 'emby-button';
} }
function setTitle(button, itemType) { function setTitle(button, itemType) {
if (itemType !== 'AudioBook' && itemType !== 'AudioPodcast') { if (itemType !== 'AudioBook' && itemType !== 'AudioPodcast') {
button.title = globalize.translate('Watched'); button.title = globalize.translate('Watched');
} else { } else {
@ -84,13 +82,11 @@ import EmbyButtonPrototype from 'emby-button';
} }
function clearEvents(button) { function clearEvents(button) {
button.removeEventListener('click', onClick); button.removeEventListener('click', onClick);
removeNotificationEvent(button, 'UserDataChanged'); removeNotificationEvent(button, 'UserDataChanged');
} }
function bindEvents(button) { function bindEvents(button) {
clearEvents(button); clearEvents(button);
button.addEventListener('click', onClick); button.addEventListener('click', onClick);
@ -100,7 +96,6 @@ import EmbyButtonPrototype from 'emby-button';
const EmbyPlaystateButtonPrototype = Object.create(EmbyButtonPrototype); const EmbyPlaystateButtonPrototype = Object.create(EmbyButtonPrototype);
EmbyPlaystateButtonPrototype.createdCallback = function () { EmbyPlaystateButtonPrototype.createdCallback = function () {
// base method // base method
if (EmbyButtonPrototype.createdCallback) { if (EmbyButtonPrototype.createdCallback) {
EmbyButtonPrototype.createdCallback.call(this); EmbyButtonPrototype.createdCallback.call(this);
@ -108,7 +103,6 @@ import EmbyButtonPrototype from 'emby-button';
}; };
EmbyPlaystateButtonPrototype.attachedCallback = function () { EmbyPlaystateButtonPrototype.attachedCallback = function () {
// base method // base method
if (EmbyButtonPrototype.attachedCallback) { if (EmbyButtonPrototype.attachedCallback) {
EmbyButtonPrototype.attachedCallback.call(this); EmbyButtonPrototype.attachedCallback.call(this);
@ -117,7 +111,6 @@ import EmbyButtonPrototype from 'emby-button';
const itemId = this.getAttribute('data-id'); const itemId = this.getAttribute('data-id');
const serverId = this.getAttribute('data-serverid'); const serverId = this.getAttribute('data-serverid');
if (itemId && serverId) { if (itemId && serverId) {
setState(this, this.getAttribute('data-played') === 'true', false); setState(this, this.getAttribute('data-played') === 'true', false);
bindEvents(this); bindEvents(this);
setTitle(this, this.getAttribute('data-type')); setTitle(this, this.getAttribute('data-type'));
@ -125,7 +118,6 @@ import EmbyButtonPrototype from 'emby-button';
}; };
EmbyPlaystateButtonPrototype.detachedCallback = function () { EmbyPlaystateButtonPrototype.detachedCallback = function () {
// base method // base method
if (EmbyButtonPrototype.detachedCallback) { if (EmbyButtonPrototype.detachedCallback) {
EmbyButtonPrototype.detachedCallback.call(this); EmbyButtonPrototype.detachedCallback.call(this);
@ -136,9 +128,7 @@ import EmbyButtonPrototype from 'emby-button';
}; };
EmbyPlaystateButtonPrototype.setItem = function (item) { EmbyPlaystateButtonPrototype.setItem = function (item) {
if (item) { if (item) {
this.setAttribute('data-id', item.Id); this.setAttribute('data-id', item.Id);
this.setAttribute('data-serverid', item.ServerId); this.setAttribute('data-serverid', item.ServerId);
@ -147,9 +137,7 @@ import EmbyButtonPrototype from 'emby-button';
bindEvents(this); bindEvents(this);
setTitle(this, item.Type); setTitle(this, item.Type);
} else { } else {
this.removeAttribute('data-id'); this.removeAttribute('data-id');
this.removeAttribute('data-serverid'); this.removeAttribute('data-serverid');
this.removeAttribute('data-played'); this.removeAttribute('data-played');

View file

@ -6,7 +6,6 @@ import 'webcomponents';
let EmbyProgressRing = Object.create(HTMLDivElement.prototype); let EmbyProgressRing = Object.create(HTMLDivElement.prototype);
EmbyProgressRing.createdCallback = function () { EmbyProgressRing.createdCallback = function () {
this.classList.add('progressring'); this.classList.add('progressring');
const instance = this; const instance = this;
@ -35,7 +34,6 @@ import 'webcomponents';
}; };
EmbyProgressRing.setProgress = function (progress) { EmbyProgressRing.setProgress = function (progress) {
progress = Math.floor(progress); progress = Math.floor(progress);
let angle; let angle;
@ -49,7 +47,6 @@ import 'webcomponents';
this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)'; this.querySelector('.animate-50-75-b').style.transform = 'rotate(-90deg)';
this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)'; this.querySelector('.animate-75-100-b').style.transform = 'rotate(-90deg)';
} else if (progress >= 25 && progress < 50) { } else if (progress >= 25 && progress < 50) {
angle = -90 + ((progress - 25) / 100) * 360; angle = -90 + ((progress - 25) / 100) * 360;
this.querySelector('.animate-0-25-b').style.transform = 'none'; this.querySelector('.animate-0-25-b').style.transform = 'none';
@ -82,7 +79,6 @@ import 'webcomponents';
}; };
EmbyProgressRing.detachedCallback = function () { EmbyProgressRing.detachedCallback = function () {
let observer = this.observer; let observer = this.observer;
if (observer) { if (observer) {

View file

@ -7,7 +7,6 @@ import 'webcomponents';
let EmbyRadioPrototype = Object.create(HTMLInputElement.prototype); let EmbyRadioPrototype = Object.create(HTMLInputElement.prototype);
function onKeyDown(e) { function onKeyDown(e) {
// Don't submit form on enter // Don't submit form on enter
// Real (non-emulator) Tizen does nothing on Space // Real (non-emulator) Tizen does nothing on Space
if (e.keyCode === 13 || e.keyCode === 32) { if (e.keyCode === 13 || e.keyCode === 32) {

View file

@ -7,14 +7,12 @@ import EmbyButtonPrototype from 'emby-button';
/* eslint-disable indent */ /* eslint-disable indent */
function addNotificationEvent(instance, name, handler) { function addNotificationEvent(instance, name, handler) {
const localHandler = handler.bind(instance); const localHandler = handler.bind(instance);
events.on(serverNotifications, name, localHandler); events.on(serverNotifications, name, localHandler);
instance[name] = localHandler; instance[name] = localHandler;
} }
function removeNotificationEvent(instance, name) { function removeNotificationEvent(instance, name) {
const handler = instance[name]; const handler = instance[name];
if (handler) { if (handler) {
events.off(serverNotifications, name, handler); events.off(serverNotifications, name, handler);
@ -23,12 +21,10 @@ import EmbyButtonPrototype from 'emby-button';
} }
function showPicker(button, apiClient, itemId, likes, isFavorite) { function showPicker(button, apiClient, itemId, likes, isFavorite) {
return apiClient.updateFavoriteStatus(apiClient.getCurrentUserId(), itemId, !isFavorite); return apiClient.updateFavoriteStatus(apiClient.getCurrentUserId(), itemId, !isFavorite);
} }
function onClick(e) { function onClick(e) {
const button = this; const button = this;
const id = button.getAttribute('data-id'); const id = button.getAttribute('data-id');
const serverId = button.getAttribute('data-serverid'); const serverId = button.getAttribute('data-serverid');
@ -45,52 +41,41 @@ import EmbyButtonPrototype from 'emby-button';
} }
showPicker(button, apiClient, id, likes, isFavorite).then(function (userData) { showPicker(button, apiClient, id, likes, isFavorite).then(function (userData) {
setState(button, userData.Likes, userData.IsFavorite); setState(button, userData.Likes, userData.IsFavorite);
}); });
} }
function onUserDataChanged(e, apiClient, userData) { function onUserDataChanged(e, apiClient, userData) {
const button = this; const button = this;
if (userData.ItemId === button.getAttribute('data-id')) { if (userData.ItemId === button.getAttribute('data-id')) {
setState(button, userData.Likes, userData.IsFavorite); setState(button, userData.Likes, userData.IsFavorite);
} }
} }
function setState(button, likes, isFavorite, updateAttribute) { function setState(button, likes, isFavorite, updateAttribute) {
const icon = button.querySelector('.material-icons'); const icon = button.querySelector('.material-icons');
if (isFavorite) { if (isFavorite) {
if (icon) { if (icon) {
icon.classList.add('favorite'); icon.classList.add('favorite');
icon.classList.add('ratingbutton-icon-withrating'); icon.classList.add('ratingbutton-icon-withrating');
} }
button.classList.add('ratingbutton-withrating'); button.classList.add('ratingbutton-withrating');
} else if (likes) { } else if (likes) {
if (icon) { if (icon) {
icon.classList.add('favorite'); icon.classList.add('favorite');
icon.classList.remove('ratingbutton-icon-withrating'); icon.classList.remove('ratingbutton-icon-withrating');
} }
button.classList.remove('ratingbutton-withrating'); button.classList.remove('ratingbutton-withrating');
} else if (likes === false) { } else if (likes === false) {
if (icon) { if (icon) {
icon.classList.add('favorite'); icon.classList.add('favorite');
icon.classList.remove('ratingbutton-icon-withrating'); icon.classList.remove('ratingbutton-icon-withrating');
} }
button.classList.remove('ratingbutton-withrating'); button.classList.remove('ratingbutton-withrating');
} else { } else {
if (icon) { if (icon) {
icon.classList.add('favorite'); icon.classList.add('favorite');
icon.classList.remove('ratingbutton-icon-withrating'); icon.classList.remove('ratingbutton-icon-withrating');
@ -115,13 +100,11 @@ import EmbyButtonPrototype from 'emby-button';
} }
function clearEvents(button) { function clearEvents(button) {
button.removeEventListener('click', onClick); button.removeEventListener('click', onClick);
removeNotificationEvent(button, 'UserDataChanged'); removeNotificationEvent(button, 'UserDataChanged');
} }
function bindEvents(button) { function bindEvents(button) {
clearEvents(button); clearEvents(button);
button.addEventListener('click', onClick); button.addEventListener('click', onClick);
@ -131,7 +114,6 @@ import EmbyButtonPrototype from 'emby-button';
const EmbyRatingButtonPrototype = Object.create(EmbyButtonPrototype); const EmbyRatingButtonPrototype = Object.create(EmbyButtonPrototype);
EmbyRatingButtonPrototype.createdCallback = function () { EmbyRatingButtonPrototype.createdCallback = function () {
// base method // base method
if (EmbyButtonPrototype.createdCallback) { if (EmbyButtonPrototype.createdCallback) {
EmbyButtonPrototype.createdCallback.call(this); EmbyButtonPrototype.createdCallback.call(this);
@ -139,7 +121,6 @@ import EmbyButtonPrototype from 'emby-button';
}; };
EmbyRatingButtonPrototype.attachedCallback = function () { EmbyRatingButtonPrototype.attachedCallback = function () {
// base method // base method
if (EmbyButtonPrototype.attachedCallback) { if (EmbyButtonPrototype.attachedCallback) {
EmbyButtonPrototype.attachedCallback.call(this); EmbyButtonPrototype.attachedCallback.call(this);
@ -148,7 +129,6 @@ import EmbyButtonPrototype from 'emby-button';
const itemId = this.getAttribute('data-id'); const itemId = this.getAttribute('data-id');
const serverId = this.getAttribute('data-serverid'); const serverId = this.getAttribute('data-serverid');
if (itemId && serverId) { if (itemId && serverId) {
let likes = this.getAttribute('data-likes'); let likes = this.getAttribute('data-likes');
const isFavorite = this.getAttribute('data-isfavorite') === 'true'; const isFavorite = this.getAttribute('data-isfavorite') === 'true';
if (likes === 'true') { if (likes === 'true') {
@ -167,7 +147,6 @@ import EmbyButtonPrototype from 'emby-button';
}; };
EmbyRatingButtonPrototype.detachedCallback = function () { EmbyRatingButtonPrototype.detachedCallback = function () {
// base method // base method
if (EmbyButtonPrototype.detachedCallback) { if (EmbyButtonPrototype.detachedCallback) {
EmbyButtonPrototype.detachedCallback.call(this); EmbyButtonPrototype.detachedCallback.call(this);
@ -177,18 +156,14 @@ import EmbyButtonPrototype from 'emby-button';
}; };
EmbyRatingButtonPrototype.setItem = function (item) { EmbyRatingButtonPrototype.setItem = function (item) {
if (item) { if (item) {
this.setAttribute('data-id', item.Id); this.setAttribute('data-id', item.Id);
this.setAttribute('data-serverid', item.ServerId); this.setAttribute('data-serverid', item.ServerId);
const userData = item.UserData || {}; const userData = item.UserData || {};
setState(this, userData.Likes, userData.IsFavorite); setState(this, userData.Likes, userData.IsFavorite);
bindEvents(this); bindEvents(this);
} else { } else {
this.removeAttribute('data-id'); this.removeAttribute('data-id');
this.removeAttribute('data-serverid'); this.removeAttribute('data-serverid');
this.removeAttribute('data-likes'); this.removeAttribute('data-likes');

View file

@ -9,7 +9,6 @@ import 'webcomponents';
const EmbySelectPrototype = Object.create(HTMLSelectElement.prototype); const EmbySelectPrototype = Object.create(HTMLSelectElement.prototype);
function enableNativeMenu() { function enableNativeMenu() {
if (browser.edgeUwp || browser.xboxOne) { if (browser.edgeUwp || browser.xboxOne) {
return true; return true;
} }
@ -38,12 +37,10 @@ import 'webcomponents';
} }
function setValue(select, value) { function setValue(select, value) {
select.value = value; select.value = value;
} }
function showActionSheet(select) { function showActionSheet(select) {
const labelElem = getLabel(select); const labelElem = getLabel(select);
const title = labelElem ? (labelElem.textContent || labelElem.innerText) : null; const title = labelElem ? (labelElem.textContent || labelElem.innerText) : null;
@ -112,7 +109,6 @@ import 'webcomponents';
let inputId = 0; let inputId = 0;
EmbySelectPrototype.createdCallback = function () { EmbySelectPrototype.createdCallback = function () {
if (!this.id) { if (!this.id) {
this.id = 'embyselect' + inputId; this.id = 'embyselect' + inputId;
inputId++; inputId++;
@ -132,7 +128,6 @@ import 'webcomponents';
}; };
EmbySelectPrototype.attachedCallback = function () { EmbySelectPrototype.attachedCallback = function () {
if (this.classList.contains('emby-select')) { if (this.classList.contains('emby-select')) {
return; return;
} }
@ -151,7 +146,6 @@ import 'webcomponents';
}; };
EmbySelectPrototype.setLabel = function (text) { EmbySelectPrototype.setLabel = function (text) {
const label = this.parentNode.querySelector('label'); const label = this.parentNode.querySelector('label');
label.innerHTML = text; label.innerHTML = text;

Some files were not shown because too many files have changed in this diff Show more