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

Merge branch 'es6' into migrate-to-ES6-32

This commit is contained in:
Cameron 2020-07-21 14:48:16 +01:00 committed by GitHub
commit 1ad24542ba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
40 changed files with 941 additions and 673 deletions

View file

@ -92,6 +92,8 @@
"test": [ "test": [
"src/components/accessSchedule/accessSchedule.js", "src/components/accessSchedule/accessSchedule.js",
"src/components/actionSheet/actionSheet.js", "src/components/actionSheet/actionSheet.js",
"src/components/activitylog.js",
"src/components/alert.js",
"src/components/alphaPicker/alphaPicker.js", "src/components/alphaPicker/alphaPicker.js",
"src/components/appFooter/appFooter.js", "src/components/appFooter/appFooter.js",
"src/components/autoFocuser.js", "src/components/autoFocuser.js",
@ -120,6 +122,7 @@
"src/components/maintabsmanager.js", "src/components/maintabsmanager.js",
"src/components/mediaLibraryCreator/mediaLibraryCreator.js", "src/components/mediaLibraryCreator/mediaLibraryCreator.js",
"src/components/mediaLibraryEditor/mediaLibraryEditor.js", "src/components/mediaLibraryEditor/mediaLibraryEditor.js",
"src/components/nowPlayingBar/nowPlayingBar.js",
"src/components/listview/listview.js", "src/components/listview/listview.js",
"src/components/playback/brightnessosd.js", "src/components/playback/brightnessosd.js",
"src/components/playback/mediasession.js", "src/components/playback/mediasession.js",
@ -138,6 +141,8 @@
"src/components/playmenu.js", "src/components/playmenu.js",
"src/components/sanatizefilename.js", "src/components/sanatizefilename.js",
"src/components/scrollManager.js", "src/components/scrollManager.js",
"src/components/search/searchfields.js",
"src/components/search/searchresults.js",
"src/components/settingshelper.js", "src/components/settingshelper.js",
"src/components/subtitlesettings/subtitlesettings.js", "src/components/subtitlesettings/subtitlesettings.js",
"src/components/subtitlesettings/subtitleappearancehelper.js", "src/components/subtitlesettings/subtitleappearancehelper.js",
@ -146,11 +151,22 @@
"src/components/syncPlay/playbackPermissionManager.js", "src/components/syncPlay/playbackPermissionManager.js",
"src/components/syncPlay/syncPlayManager.js", "src/components/syncPlay/syncPlayManager.js",
"src/components/syncPlay/timeSyncManager.js", "src/components/syncPlay/timeSyncManager.js",
"src/controllers/auth/addserver.js",
"src/controllers/auth/forgotpassword.js",
"src/controllers/auth/forgotpasswordpin.js",
"src/controllers/auth/login.js",
"src/controllers/auth/selectserver.js",
"src/controllers/dashboard/apikeys.js", "src/controllers/dashboard/apikeys.js",
"src/controllers/dashboard/dashboard.js", "src/controllers/dashboard/dashboard.js",
"src/controllers/dashboard/encodingsettings.js", "src/controllers/dashboard/encodingsettings.js",
"src/controllers/dashboard/logs.js", "src/controllers/dashboard/logs.js",
"src/controllers/user/subtitles.js", "src/controllers/user/subtitles.js",
"src/controllers/dashboard/general.js",
"src/controllers/dashboard/librarydisplay.js",
"src/controllers/dashboard/metadataImages.js",
"src/controllers/dashboard/metadatanfo.js",
"src/controllers/dashboard/plugins/repositories.js",
"src/controllers/dashboard/streaming.js",
"src/controllers/dashboard/mediaLibrary.js", "src/controllers/dashboard/mediaLibrary.js",
"src/controllers/dashboard/networking.js", "src/controllers/dashboard/networking.js",
"src/controllers/dashboard/playback.js", "src/controllers/dashboard/playback.js",
@ -160,6 +176,16 @@
"src/controllers/wizard/settings.js", "src/controllers/wizard/settings.js",
"src/controllers/wizard/start.js", "src/controllers/wizard/start.js",
"src/controllers/wizard/user.js", "src/controllers/wizard/user.js",
"src/controllers/shows/episodes.js",
"src/controllers/shows/tvgenres.js",
"src/controllers/shows/tvlatest.js",
"src/controllers/shows/tvrecommended.js",
"src/controllers/shows/tvshows.js",
"src/controllers/shows/tvstudios.js",
"src/controllers/shows/tvupcoming.js",
"src/controllers/searchpage.js",
"src/controllers/dashboard/scheduledtasks/scheduledtask.js",
"src/controllers/dashboard/scheduledtasks/scheduledtasks.js",
"src/controllers/dashboard/dlna/profile.js", "src/controllers/dashboard/dlna/profile.js",
"src/controllers/dashboard/dlna/profiles.js", "src/controllers/dashboard/dlna/profiles.js",
"src/controllers/dashboard/dlna/settings.js", "src/controllers/dashboard/dlna/settings.js",
@ -186,9 +212,14 @@
"src/elements/emby-tabs/emby-tabs.js", "src/elements/emby-tabs/emby-tabs.js",
"src/elements/emby-textarea/emby-textarea.js", "src/elements/emby-textarea/emby-textarea.js",
"src/elements/emby-toggle/emby-toggle.js", "src/elements/emby-toggle/emby-toggle.js",
"src/elements/emby-button/emby-button.js",
"src/elements/emby-button/paper-icon-button-light.js",
"src/elements/emby-collapse/emby-collapse.js",
"src/elements/emby-input/emby-input.js",
"src/plugins/bookPlayer/plugin.js", "src/plugins/bookPlayer/plugin.js",
"src/plugins/bookPlayer/tableOfContents.js", "src/plugins/bookPlayer/tableOfContents.js",
"src/plugins/photoPlayer/plugin.js", "src/plugins/photoPlayer/plugin.js",
"src/scripts/datetime.js",
"src/scripts/deleteHelper.js", "src/scripts/deleteHelper.js",
"src/scripts/dfnshelper.js", "src/scripts/dfnshelper.js",
"src/scripts/dom.js", "src/scripts/dom.js",

View file

@ -1,11 +1,21 @@
define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', 'serverNotifications', 'connectionManager', 'emby-button', 'listViewStyle'], function (events, globalize, dom, datefns, dfnshelper, userSettings, serverNotifications, connectionManager) { import events from 'events';
'use strict'; import globalize from 'globalize';
import dom from 'dom';
import * as datefns from 'date-fns';
import dfnshelper from 'dfnshelper';
import userSettings from 'userSettings';
import serverNotifications from 'serverNotifications';
import connectionManager from 'connectionManager';
import 'emby-button';
import 'listViewStyle';
/* eslint-disable indent */
function getEntryHtml(entry, apiClient) { function getEntryHtml(entry, apiClient) {
var html = ''; let html = '';
html += '<div class="listItem listItem-border">'; html += '<div class="listItem listItem-border">';
var color = '#00a4dc'; let color = '#00a4dc';
var icon = 'notifications'; let icon = 'notifications';
if ('Error' == entry.Severity || 'Fatal' == entry.Severity || 'Warn' == entry.Severity) { if ('Error' == entry.Severity || 'Fatal' == entry.Severity || 'Warn' == entry.Severity) {
color = '#cc0000'; color = '#cc0000';
@ -56,8 +66,8 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings',
} }
limit = limit || parseInt(elem.getAttribute('data-activitylimit') || '7'); limit = limit || parseInt(elem.getAttribute('data-activitylimit') || '7');
var minDate = new Date(); const minDate = new Date();
var hasUserId = 'false' !== elem.getAttribute('data-useractivity'); const hasUserId = 'false' !== elem.getAttribute('data-useractivity');
if (hasUserId) { if (hasUserId) {
minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back
@ -74,7 +84,7 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings',
elem.setAttribute('data-activitystartindex', startIndex); elem.setAttribute('data-activitystartindex', startIndex);
elem.setAttribute('data-activitylimit', limit); elem.setAttribute('data-activitylimit', limit);
if (!startIndex) { if (!startIndex) {
var activityContainer = dom.parentWithClass(elem, 'activityContainer'); const activityContainer = dom.parentWithClass(elem, 'activityContainer');
if (activityContainer) { if (activityContainer) {
if (result.Items.length) { if (result.Items.length) {
@ -91,7 +101,7 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings',
} }
function onActivityLogUpdate(e, apiClient, data) { function onActivityLogUpdate(e, apiClient, data) {
var options = this.options; const options = this.options;
if (options && options.serverId === apiClient.serverId()) { if (options && options.serverId === apiClient.serverId()) {
reloadData(this, options.element, apiClient); reloadData(this, options.element, apiClient);
@ -99,14 +109,14 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings',
} }
function onListClick(e) { function onListClick(e) {
var btnEntryInfo = dom.parentWithClass(e.target, 'btnEntryInfo'); const btnEntryInfo = dom.parentWithClass(e.target, 'btnEntryInfo');
if (btnEntryInfo) { if (btnEntryInfo) {
var id = btnEntryInfo.getAttribute('data-id'); const id = btnEntryInfo.getAttribute('data-id');
var items = this.items; const items = this.items;
if (items) { if (items) {
var item = items.filter(function (i) { const item = items.filter(function (i) {
return i.Id.toString() === id; return i.Id.toString() === id;
})[0]; })[0];
@ -118,35 +128,35 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings',
} }
function showItemOverview(item) { function showItemOverview(item) {
require(['alert'], function (alert) { import('alert').then(({default: alert}) => {
alert({ alert({
text: item.Overview text: item.Overview
}); });
}); });
} }
function ActivityLog(options) { class ActivityLog {
constructor(options) {
this.options = options; this.options = options;
var element = options.element; const element = options.element;
element.classList.add('activityLogListWidget'); element.classList.add('activityLogListWidget');
element.addEventListener('click', onListClick.bind(this)); element.addEventListener('click', onListClick.bind(this));
var apiClient = connectionManager.getApiClient(options.serverId); const apiClient = connectionManager.getApiClient(options.serverId);
reloadData(this, element, apiClient); reloadData(this, element, apiClient);
var onUpdate = onActivityLogUpdate.bind(this); const onUpdate = onActivityLogUpdate.bind(this);
this.updateFn = onUpdate; this.updateFn = onUpdate;
events.on(serverNotifications, 'ActivityLogEntry', onUpdate); events.on(serverNotifications, 'ActivityLogEntry', onUpdate);
apiClient.sendMessage('ActivityLogEntryStart', '0,1500'); apiClient.sendMessage('ActivityLogEntryStart', '0,1500');
} }
destroy() {
ActivityLog.prototype.destroy = function () { const options = this.options;
var options = this.options;
if (options) { if (options) {
options.element.classList.remove('activityLogListWidget'); options.element.classList.remove('activityLogListWidget');
connectionManager.getApiClient(options.serverId).sendMessage('ActivityLogEntryStop', '0,1500'); connectionManager.getApiClient(options.serverId).sendMessage('ActivityLogEntryStop', '0,1500');
} }
var onUpdate = this.updateFn; const onUpdate = this.updateFn;
if (onUpdate) { if (onUpdate) {
events.off(serverNotifications, 'ActivityLogEntry', onUpdate); events.off(serverNotifications, 'ActivityLogEntry', onUpdate);
@ -154,7 +164,9 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings',
this.items = null; this.items = null;
this.options = null; this.options = null;
}; }
}
return ActivityLog; export default ActivityLog;
});
/* eslint-enable indent */

View file

@ -1,14 +1,17 @@
define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize) { import browser from 'browser';
'use strict'; import dialog from 'dialog';
import globalize from 'globalize';
/* eslint-disable indent */
function replaceAll(originalString, strReplace, strWith) { function replaceAll(originalString, strReplace, strWith) {
var reg = new RegExp(strReplace, 'ig'); const reg = new RegExp(strReplace, 'ig');
return originalString.replace(reg, strWith); return originalString.replace(reg, strWith);
} }
return function (text, title) { export default function (text, title) {
var options; let options;
if (typeof text === 'string') { if (typeof text === 'string') {
options = { options = {
title: title, title: title,
@ -21,7 +24,7 @@ define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize)
if (browser.tv && window.alert) { if (browser.tv && window.alert) {
alert(replaceAll(options.text || '', '<br/>', '\n')); alert(replaceAll(options.text || '', '<br/>', '\n'));
} else { } else {
var items = []; const items = [];
items.push({ items.push({
name: globalize.translate('ButtonGotIt'), name: globalize.translate('ButtonGotIt'),
@ -41,5 +44,6 @@ define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize)
} }
return Promise.resolve(); return Promise.resolve();
}; }
});
/* eslint-enable indent */

View file

@ -53,7 +53,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro
break; break;
case 'ServerUpdateNeeded': case 'ServerUpdateNeeded':
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert({ alert.default({
text: globalize.translate('ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin'), text: globalize.translate('ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin'),
html: globalize.translate('ServerUpdateNeeded', '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>') html: globalize.translate('ServerUpdateNeeded', '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
}).then(function () { }).then(function () {

View file

@ -346,6 +346,7 @@ import 'css!./multiSelect';
import('alert').then(({default: alert}) => { import('alert').then(({default: alert}) => {
alert({ alert({
text: globalize.translate('PleaseSelectTwoItems') text: globalize.translate('PleaseSelectTwoItems')
}); });
}); });

View file

@ -1,31 +1,46 @@
define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader', 'layoutManager', 'playbackManager', 'nowPlayingHelper', 'apphost', 'dom', 'connectionManager', 'itemContextMenu', 'paper-icon-button-light', 'emby-ratingbutton'], function (require, datetime, itemHelper, events, browser, imageLoader, layoutManager, playbackManager, nowPlayingHelper, appHost, dom, connectionManager, itemContextMenu) { import require from 'require';
'use strict'; import datetime from 'datetime';
import itemHelper from 'itemHelper';
import events from 'events';
import browser from 'browser';
import imageLoader from 'imageLoader';
import layoutManager from 'layoutManager';
import playbackManager from 'playbackManager';
import nowPlayingHelper from 'nowPlayingHelper';
import appHost from 'apphost';
import dom from 'dom';
import connectionManager from 'connectionManager';
import itemContextMenu from 'itemContextMenu';
import 'paper-icon-button-light';
import 'emby-ratingbutton';
var currentPlayer; /* eslint-disable indent */
var currentPlayerSupportedCommands = [];
var currentTimeElement; let currentPlayer;
var nowPlayingImageElement; let currentPlayerSupportedCommands = [];
var nowPlayingTextElement;
var nowPlayingUserData;
var muteButton;
var volumeSlider;
var volumeSliderContainer;
var playPauseButtons;
var positionSlider;
var toggleRepeatButton;
var toggleRepeatButtonIcon;
var lastUpdateTime = 0; let currentTimeElement;
var lastPlayerState = {}; let nowPlayingImageElement;
var isEnabled; let nowPlayingTextElement;
var currentRuntimeTicks = 0; let nowPlayingUserData;
let muteButton;
let volumeSlider;
let volumeSliderContainer;
let playPauseButtons;
let positionSlider;
let toggleRepeatButton;
let toggleRepeatButtonIcon;
var isVisibilityAllowed = true; let lastUpdateTime = 0;
let lastPlayerState = {};
let isEnabled;
let currentRuntimeTicks = 0;
let isVisibilityAllowed = true;
function getNowPlayingBarHtml() { function getNowPlayingBarHtml() {
var html = ''; let html = '';
html += '<div class="nowPlayingBar hide nowPlayingBar-hidden">'; html += '<div class="nowPlayingBar hide nowPlayingBar-hidden">';
@ -198,7 +213,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
if (currentPlayer) { if (currentPlayer) {
var newPercent = parseFloat(this.value); const newPercent = parseFloat(this.value);
playbackManager.seekPercent(newPercent, currentPlayer); playbackManager.seekPercent(newPercent, currentPlayer);
} }
@ -207,13 +222,13 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
positionSlider.getBubbleText = function (value) { positionSlider.getBubbleText = function (value) {
var state = lastPlayerState; const state = lastPlayerState;
if (!state || !state.NowPlayingItem || !currentRuntimeTicks) { if (!state || !state.NowPlayingItem || !currentRuntimeTicks) {
return '--:--'; return '--:--';
} }
var ticks = currentRuntimeTicks; let ticks = currentRuntimeTicks;
ticks /= 100; ticks /= 100;
ticks *= value; ticks *= value;
@ -230,12 +245,12 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
function showRemoteControl() { function showRemoteControl() {
require(['appRouter'], function (appRouter) { import('appRouter').then(({default: appRouter}) => {
appRouter.showNowPlaying(); appRouter.showNowPlaying();
}); });
} }
var nowPlayingBarElement; let nowPlayingBarElement;
function getNowPlayingBar() { function getNowPlayingBar() {
if (nowPlayingBarElement) { if (nowPlayingBarElement) {
@ -243,10 +258,15 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
} }
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
Promise.all([
require(['appFooter-shared', 'itemShortcuts', 'css!./nowPlayingBar.css', 'emby-slider'], function (appfooter, itemShortcuts) { import('appFooter-shared'),
import('itemShortcuts'),
var parentContainer = appfooter.element; import('css!./nowPlayingBar.css'),
import('emby-slider')
])
.then(([appfooter, itemShortcuts]) => {
console.log(appfooter);
const parentContainer = appfooter.element;
nowPlayingBarElement = parentContainer.querySelector('.nowPlayingBar'); nowPlayingBarElement = parentContainer.querySelector('.nowPlayingBar');
if (nowPlayingBarElement) { if (nowPlayingBarElement) {
@ -294,13 +314,13 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
lastPlayerState = state; lastPlayerState = state;
var playerInfo = playbackManager.getPlayerInfo(); const playerInfo = playbackManager.getPlayerInfo();
var playState = state.PlayState || {}; const playState = state.PlayState || {};
updatePlayPauseState(playState.IsPaused); updatePlayPauseState(playState.IsPaused);
var supportedCommands = playerInfo.supportedCommands; const supportedCommands = playerInfo.supportedCommands;
currentPlayerSupportedCommands = supportedCommands; currentPlayerSupportedCommands = supportedCommands;
if (supportedCommands.indexOf('SetRepeatMode') === -1) { if (supportedCommands.indexOf('SetRepeatMode') === -1) {
@ -317,11 +337,11 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
positionSlider.disabled = !playState.CanSeek; positionSlider.disabled = !playState.CanSeek;
// determines if both forward and backward buffer progress will be visible // determines if both forward and backward buffer progress will be visible
var isProgressClear = state.MediaSource && state.MediaSource.RunTimeTicks == null; const isProgressClear = state.MediaSource && state.MediaSource.RunTimeTicks == null;
positionSlider.setIsClear(isProgressClear); positionSlider.setIsClear(isProgressClear);
} }
var nowPlayingItem = state.NowPlayingItem || {}; const nowPlayingItem = state.NowPlayingItem || {};
updateTimeDisplay(playState.PositionTicks, nowPlayingItem.RunTimeTicks, playbackManager.getBufferedRanges(player)); updateTimeDisplay(playState.PositionTicks, nowPlayingItem.RunTimeTicks, playbackManager.getBufferedRanges(player));
updateNowPlayingInfo(state); updateNowPlayingInfo(state);
@ -348,7 +368,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
if (positionSlider && !positionSlider.dragging) { if (positionSlider && !positionSlider.dragging) {
if (runtimeTicks) { if (runtimeTicks) {
var pct = positionTicks / runtimeTicks; let pct = positionTicks / runtimeTicks;
pct *= 100; pct *= 100;
positionSlider.value = pct; positionSlider.value = pct;
@ -365,7 +385,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
if (currentTimeElement) { if (currentTimeElement) {
var timeText = positionTicks == null ? '--:--' : datetime.getDisplayRunningTime(positionTicks); let timeText = positionTicks == null ? '--:--' : datetime.getDisplayRunningTime(positionTicks);
if (runtimeTicks) { if (runtimeTicks) {
timeText += ' / ' + datetime.getDisplayRunningTime(runtimeTicks); timeText += ' / ' + datetime.getDisplayRunningTime(runtimeTicks);
@ -377,10 +397,10 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
function updatePlayerVolumeState(isMuted, volumeLevel) { function updatePlayerVolumeState(isMuted, volumeLevel) {
var supportedCommands = currentPlayerSupportedCommands; const supportedCommands = currentPlayerSupportedCommands;
var showMuteButton = true; let showMuteButton = true;
var showVolumeSlider = true; let showVolumeSlider = true;
if (supportedCommands.indexOf('ToggleMute') === -1) { if (supportedCommands.indexOf('ToggleMute') === -1) {
showMuteButton = false; showMuteButton = false;
@ -495,37 +515,37 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
return null; return null;
} }
var currentImgUrl; let currentImgUrl;
function updateNowPlayingInfo(state) { function updateNowPlayingInfo(state) {
var nowPlayingItem = state.NowPlayingItem; const nowPlayingItem = state.NowPlayingItem;
var textLines = nowPlayingItem ? nowPlayingHelper.getNowPlayingNames(nowPlayingItem) : []; const textLines = nowPlayingItem ? nowPlayingHelper.getNowPlayingNames(nowPlayingItem) : [];
if (textLines.length > 1) { if (textLines.length > 1) {
textLines[1].secondary = true; textLines[1].secondary = true;
} }
nowPlayingTextElement.innerHTML = textLines.map(function (nowPlayingName) { nowPlayingTextElement.innerHTML = textLines.map(function (nowPlayingName) {
var cssClass = nowPlayingName.secondary ? ' class="nowPlayingBarSecondaryText"' : ''; const cssClass = nowPlayingName.secondary ? ' class="nowPlayingBarSecondaryText"' : '';
if (nowPlayingName.item) { if (nowPlayingName.item) {
var nowPlayingText = getTextActionButton(nowPlayingName.item, nowPlayingName.text); const nowPlayingText = getTextActionButton(nowPlayingName.item, nowPlayingName.text);
return `<div ${cssClass}>${nowPlayingText}</div>`; return `<div ${cssClass}>${nowPlayingText}</div>`;
} }
let nowPlayingText = '';
return `<div ${cssClass}>${nowPlayingText}</div>`; return `<div ${cssClass}>${nowPlayingText}</div>`;
}).join(''); }).join('');
var imgHeight = 70; const imgHeight = 70;
var url = nowPlayingItem ? (seriesImageUrl(nowPlayingItem, { const url = nowPlayingItem ? (seriesImageUrl(nowPlayingItem, {
height: imgHeight height: imgHeight
}) || imageUrl(nowPlayingItem, { }) || imageUrl(nowPlayingItem, {
height: imgHeight height: imgHeight
})) : null; })) : null;
var isRefreshing = false; let isRefreshing = false;
if (url !== currentImgUrl) { if (url !== currentImgUrl) {
currentImgUrl = url; currentImgUrl = url;
@ -541,12 +561,12 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
if (nowPlayingItem.Id) { if (nowPlayingItem.Id) {
if (isRefreshing) { if (isRefreshing) {
var 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) {
var userData = item.UserData || {}; const userData = item.UserData || {};
var likes = userData.Likes == null ? '' : userData.Likes; const likes = userData.Likes == null ? '' : userData.Likes;
var contextButton = document.querySelector('.btnToggleContextMenu'); const contextButton = document.querySelector('.btnToggleContextMenu');
var options = { const options = {
play: false, play: false,
queue: false, queue: false,
positionTo: contextButton positionTo: contextButton
@ -570,7 +590,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
function onPlaybackStart(e, state) { function onPlaybackStart(e, state) {
console.debug('nowplaying event: ' + e.type); console.debug('nowplaying event: ' + e.type);
var player = this; const player = this;
onStateChanged.call(player, e, state); onStateChanged.call(player, e, state);
} }
@ -581,7 +601,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
return; return;
} }
var player = this; const player = this;
updateRepeatModeDisplay(playbackManager.getRepeatMode(player)); updateRepeatModeDisplay(playbackManager.getRepeatMode(player));
} }
@ -604,7 +624,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
// in the event of a stop->play command // in the event of a stop->play command
// 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
var elem = document.getElementsByClassName('nowPlayingBar')[0]; const elem = document.getElementsByClassName('nowPlayingBar')[0];
if (elem) { if (elem) {
slideDown(elem); slideDown(elem);
@ -614,7 +634,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
function onPlaybackStopped(e, state) { function onPlaybackStopped(e, state) {
console.debug('nowplaying event: ' + e.type); console.debug('nowplaying event: ' + e.type);
var player = this; const player = this;
if (player.isLocalPlayer) { if (player.isLocalPlayer) {
if (state.NextMediaType !== 'Audio') { if (state.NextMediaType !== 'Audio') {
@ -633,14 +653,14 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
return; return;
} }
var player = this; const player = this;
updatePlayPauseState(player.paused()); updatePlayPauseState(player.paused());
} }
function onStateChanged(event, state) { function onStateChanged(event, state) {
console.debug('nowplaying event: ' + event.type); console.debug('nowplaying event: ' + event.type);
var player = this; const player = this;
if (!state.NowPlayingItem || layoutManager.tv) { if (!state.NowPlayingItem || layoutManager.tv) {
hideNowPlayingBar(); hideNowPlayingBar();
@ -671,21 +691,21 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
} }
// Try to avoid hammering the document with changes // Try to avoid hammering the document with changes
var now = new Date().getTime(); const now = new Date().getTime();
if ((now - lastUpdateTime) < 700) { if ((now - lastUpdateTime) < 700) {
return; return;
} }
lastUpdateTime = now; lastUpdateTime = now;
var player = this; const player = this;
currentRuntimeTicks = playbackManager.duration(player); currentRuntimeTicks = playbackManager.duration(player);
updateTimeDisplay(playbackManager.currentTime(player), currentRuntimeTicks, playbackManager.getBufferedRanges(player)); updateTimeDisplay(playbackManager.currentTime(player), currentRuntimeTicks, playbackManager.getBufferedRanges(player));
} }
function releaseCurrentPlayer() { function releaseCurrentPlayer() {
var player = currentPlayer; const player = currentPlayer;
if (player) { if (player) {
events.off(player, 'playbackstart', onPlaybackStart); events.off(player, 'playbackstart', onPlaybackStart);
@ -708,14 +728,14 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
return; return;
} }
var player = this; const player = this;
updatePlayerVolumeState(player.isMuted(), player.getVolume()); updatePlayerVolumeState(player.isMuted(), player.getVolume());
} }
function refreshFromPlayer(player) { function refreshFromPlayer(player) {
var state = playbackManager.getPlayerState(player); const state = playbackManager.getPlayerState(player);
onStateChanged.call(player, { type: 'init' }, state); onStateChanged.call(player, { type: 'init' }, state);
} }
@ -771,4 +791,5 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
} }
} }
}); });
});
/* eslint-enable indent */

View file

@ -709,7 +709,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
function showPlaybackInfoErrorMessage(instance, errorCode, playNextTrack) { function showPlaybackInfoErrorMessage(instance, errorCode, playNextTrack) {
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert({ alert.default({
text: globalize.translate('PlaybackError' + errorCode), text: globalize.translate('PlaybackError' + errorCode),
title: globalize.translate('HeaderPlaybackError') title: globalize.translate('HeaderPlaybackError')
}).then(function () { }).then(function () {

View file

@ -1,10 +1,20 @@
define(['layoutManager', 'globalize', 'require', 'events', 'browser', 'alphaPicker', 'emby-input', 'flexStyles', 'material-icons', 'css!./searchfields'], function (layoutManager, globalize, require, events, browser, AlphaPicker) { import layoutManager from 'layoutManager';
'use strict'; import globalize from 'globalize';
import require from 'require';
import events from 'events';
import browser from 'browser';
import AlphaPicker from 'alphaPicker';
import 'emby-input';
import 'flexStyles';
import 'material-icons';
import 'css!./searchfields';
/* eslint-disable indent */
function onSearchTimeout() { function onSearchTimeout() {
var instance = this; const instance = this;
var value = instance.nextSearchValue; let value = instance.nextSearchValue;
value = (value || '').trim(); value = (value || '').trim();
events.trigger(instance, 'search', [value]); events.trigger(instance, 'search', [value]);
@ -22,14 +32,14 @@ define(['layoutManager', 'globalize', 'require', 'events', 'browser', 'alphaPick
function onAlphaValueClicked(e) { function onAlphaValueClicked(e) {
var value = e.detail.value; const value = e.detail.value;
var searchFieldsInstance = this; const searchFieldsInstance = this;
var txtSearch = searchFieldsInstance.options.element.querySelector('.searchfields-txtSearch'); const txtSearch = searchFieldsInstance.options.element.querySelector('.searchfields-txtSearch');
if (value === 'backspace') { if (value === 'backspace') {
var 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 {
@ -53,8 +63,8 @@ define(['layoutManager', 'globalize', 'require', 'events', 'browser', 'alphaPick
function onSearchInput(e) { function onSearchInput(e) {
var value = e.target.value; const value = e.target.value;
var searchFieldsInstance = this; const searchFieldsInstance = this;
triggerSearch(searchFieldsInstance, value); triggerSearch(searchFieldsInstance, value);
} }
@ -62,7 +72,7 @@ define(['layoutManager', 'globalize', 'require', 'events', 'browser', 'alphaPick
require(['text!./searchfields.template.html'], function (template) { require(['text!./searchfields.template.html'], function (template) {
var html = globalize.translateDocument(template, 'core'); let html = globalize.translateDocument(template, 'core');
if (browser.tizen || browser.orsay) { if (browser.tizen || browser.orsay) {
html = html.replace('<input ', '<input readonly '); html = html.replace('<input ', '<input readonly ');
@ -72,10 +82,10 @@ define(['layoutManager', 'globalize', 'require', 'events', 'browser', 'alphaPick
elem.classList.add('searchFields'); elem.classList.add('searchFields');
var txtSearch = elem.querySelector('.searchfields-txtSearch'); const txtSearch = elem.querySelector('.searchfields-txtSearch');
if (layoutManager.tv) { if (layoutManager.tv) {
var alphaPickerElement = elem.querySelector('.alphaPicker'); const alphaPickerElement = elem.querySelector('.alphaPicker');
elem.querySelector('.alphaPicker').classList.remove('hide'); elem.querySelector('.alphaPicker').classList.remove('hide');
initAlphaPicker(alphaPickerElement, instance); initAlphaPicker(alphaPickerElement, instance);
@ -87,38 +97,39 @@ define(['layoutManager', 'globalize', 'require', 'events', 'browser', 'alphaPick
}); });
} }
function SearchFields(options) { class SearchFields {
constructor(options) {
this.options = options; this.options = options;
embed(options.element, this, options); embed(options.element, this, options);
} }
focus() {
SearchFields.prototype.focus = function () {
this.options.element.querySelector('.searchfields-txtSearch').focus(); this.options.element.querySelector('.searchfields-txtSearch').focus();
}; }
destroy() {
SearchFields.prototype.destroy = function () { const options = this.options;
var options = this.options;
if (options) { if (options) {
options.element.classList.remove('searchFields'); options.element.classList.remove('searchFields');
} }
this.options = null; this.options = null;
var alphaPicker = this.alphaPicker; const alphaPicker = this.alphaPicker;
if (alphaPicker) { if (alphaPicker) {
alphaPicker.destroy(); alphaPicker.destroy();
} }
this.alphaPicker = null; this.alphaPicker = null;
var searchTimeout = this.searchTimeout; const searchTimeout = this.searchTimeout;
if (searchTimeout) { if (searchTimeout) {
clearTimeout(searchTimeout); clearTimeout(searchTimeout);
} }
this.searchTimeout = null; this.searchTimeout = null;
this.nextSearchValue = null; this.nextSearchValue = null;
}; }
}
return SearchFields; export default SearchFields;
});
/* eslint-enable indent */

View file

@ -1,9 +1,19 @@
define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager', 'cardBuilder', 'appRouter', 'emby-scroller', 'emby-itemscontainer', 'emby-button'], function (layoutManager, globalize, require, events, connectionManager, cardBuilder, appRouter) { import layoutManager from 'layoutManager';
'use strict'; import globalize from 'globalize';
import require from 'require';
import events from 'events';
import connectionManager from 'connectionManager';
import cardBuilder from 'cardBuilder';
import appRouter from 'appRouter';
import 'emby-scroller';
import 'emby-itemscontainer';
import 'emby-button';
/* eslint-disable indent */
function loadSuggestions(instance, context, apiClient) { function loadSuggestions(instance, context, apiClient) {
var options = { const options = {
SortBy: 'IsFavoriteOrLiked,Random', SortBy: 'IsFavoriteOrLiked,Random',
IncludeItemTypes: 'Movie,Series,MusicArtist', IncludeItemTypes: 'Movie,Series,MusicArtist',
@ -21,18 +31,18 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
result.Items = []; result.Items = [];
} }
var html = result.Items.map(function (i) { const html = result.Items.map(function (i) {
var href = appRouter.getRouteUrl(i); const href = appRouter.getRouteUrl(i);
var 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('');
var searchSuggestions = context.querySelector('.searchSuggestions'); const searchSuggestions = context.querySelector('.searchSuggestions');
searchSuggestions.querySelector('.searchSuggestionsList').innerHTML = html; searchSuggestions.querySelector('.searchSuggestionsList').innerHTML = html;
if (result.Items.length) { if (result.Items.length) {
@ -49,9 +59,9 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
}); });
} }
var allowSearch = true; let allowSearch = true;
var queryIncludeItemTypes = query.IncludeItemTypes; const queryIncludeItemTypes = query.IncludeItemTypes;
if (instance.options.collectionType === 'tvshows') { if (instance.options.collectionType === 'tvshows') {
if (query.IncludeArtists) { if (query.IncludeArtists) {
@ -127,7 +137,7 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
query.EnableTotalRecordCount = false; query.EnableTotalRecordCount = false;
query.ImageTypeLimit = 1; query.ImageTypeLimit = 1;
var methodName = 'getItems'; let methodName = 'getItems';
if (!query.IncludeMedia) { if (!query.IncludeMedia) {
if (query.IncludePeople) { if (query.IncludePeople) {
@ -566,9 +576,9 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
section = context.querySelector(section); section = context.querySelector(section);
var items = result.Items || result.SearchHints; const items = result.Items || result.SearchHints;
var itemsContainer = section.querySelector('.itemsContainer'); const itemsContainer = section.querySelector('.itemsContainer');
cardBuilder.buildCards(items, Object.assign({ cardBuilder.buildCards(items, Object.assign({
@ -588,7 +598,7 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
} }
function replaceAll(originalString, strReplace, strWith) { function replaceAll(originalString, strReplace, strWith) {
var reg = new RegExp(strReplace, 'ig'); const reg = new RegExp(strReplace, 'ig');
return originalString.replace(reg, strWith); return originalString.replace(reg, strWith);
} }
@ -601,7 +611,7 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
template = replaceAll(template, 'itemsContainer scrollSlider', 'itemsContainer scrollSlider vertical-wrap'); template = replaceAll(template, 'itemsContainer scrollSlider', 'itemsContainer scrollSlider vertical-wrap');
} }
var html = globalize.translateDocument(template, 'core'); const html = globalize.translateDocument(template, 'core');
elem.innerHTML = html; elem.innerHTML = html;
@ -610,28 +620,29 @@ define(['layoutManager', 'globalize', 'require', 'events', 'connectionManager',
}); });
} }
function SearchResults(options) { class SearchResults {
constructor(options) {
this.options = options; this.options = options;
embed(options.element, this, options); embed(options.element, this, options);
} }
search(value) {
SearchResults.prototype.search = function (value) { const apiClient = connectionManager.getApiClient(this.options.serverId);
var apiClient = connectionManager.getApiClient(this.options.serverId);
search(this, apiClient, this.options.element, value); search(this, apiClient, this.options.element, value);
}; }
destroy() {
SearchResults.prototype.destroy = function () { const options = this.options;
var options = this.options;
if (options) { if (options) {
options.element.classList.remove('searchFields'); options.element.classList.remove('searchFields');
} }
this.options = null; this.options = null;
}; }
}
return SearchResults; export default SearchResults;
});
/* eslint-enable indent */

View file

@ -1,14 +1,20 @@
define(['appSettings', 'loading', 'browser', 'globalize', 'emby-button'], function(appSettings, loading, browser, globalize) { import appSettings from 'appSettings';
'use strict'; import loading from 'loading';
import browser from 'browser';
import globalize from 'globalize';
import 'emby-button';
/* eslint-disable indent */
function handleConnectionResult(page, result) { function handleConnectionResult(page, result) {
loading.hide(); loading.hide();
switch (result.State) { switch (result.State) {
case 'SignedIn': case 'SignedIn': {
var apiClient = result.ApiClient; const apiClient = result.ApiClient;
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient); Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
Dashboard.navigate('home.html'); Dashboard.navigate('home.html');
break; break;
}
case 'ServerSignIn': case 'ServerSignIn':
Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id, false, 'none'); Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id, false, 'none');
break; break;
@ -30,7 +36,7 @@ define(['appSettings', 'loading', 'browser', 'globalize', 'emby-button'], functi
function submitServer(page) { function submitServer(page) {
loading.show(); loading.show();
var host = page.querySelector('#txtServerHost').value; const host = page.querySelector('#txtServerHost').value;
ConnectionManager.connectToAddress(host, { ConnectionManager.connectToAddress(host, {
enableAutoLogin: appSettings.enableAutoLogin() enableAutoLogin: appSettings.enableAutoLogin()
}).then(function(result) { }).then(function(result) {
@ -42,11 +48,11 @@ define(['appSettings', 'loading', 'browser', 'globalize', 'emby-button'], functi
}); });
} }
return function(view, params) { export default function(view, params) {
view.querySelector('.addServerForm').addEventListener('submit', onServerSubmit); view.querySelector('.addServerForm').addEventListener('submit', onServerSubmit);
view.querySelector('.btnCancel').addEventListener('click', goBack); view.querySelector('.btnCancel').addEventListener('click', goBack);
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(view); autoFocuser.autoFocus(view);
}); });
@ -57,9 +63,10 @@ define(['appSettings', 'loading', 'browser', 'globalize', 'emby-button'], functi
} }
function goBack() { function goBack() {
require(['appRouter'], function(appRouter) { import('appRouter').then(({default: appRouter}) => {
appRouter.back(); appRouter.back();
}); });
} }
}; }
});
/* eslint-enable indent */

View file

@ -1,5 +1,6 @@
define(['globalize'], function (globalize) { import globalize from 'globalize';
'use strict';
/* eslint-disable indent */
function processForgotPasswordResult(result) { function processForgotPasswordResult(result) {
if ('ContactAdmin' == result.Action) { if ('ContactAdmin' == result.Action) {
@ -17,7 +18,7 @@ define(['globalize'], function (globalize) {
} }
if ('PinCode' == result.Action) { if ('PinCode' == result.Action) {
var msg = globalize.translate('MessageForgotPasswordFileCreated'); let msg = globalize.translate('MessageForgotPasswordFileCreated');
msg += '<br/>'; msg += '<br/>';
msg += '<br/>'; msg += '<br/>';
msg += 'Enter PIN here to finish Password Reset<br/>'; msg += 'Enter PIN here to finish Password Reset<br/>';
@ -34,7 +35,7 @@ define(['globalize'], function (globalize) {
} }
} }
return function (view, params) { export default function (view, params) {
function onSubmit(e) { function onSubmit(e) {
ApiClient.ajax({ ApiClient.ajax({
type: 'POST', type: 'POST',
@ -49,5 +50,6 @@ define(['globalize'], function (globalize) {
} }
view.querySelector('form').addEventListener('submit', onSubmit); view.querySelector('form').addEventListener('submit', onSubmit);
}; }
});
/* eslint-enable indent */

View file

@ -1,9 +1,10 @@
define(['globalize'], function (globalize) { import globalize from 'globalize';
'use strict';
/* eslint-disable indent */
function processForgotPasswordResult(result) { function processForgotPasswordResult(result) {
if (result.Success) { if (result.Success) {
var msg = globalize.translate('MessagePasswordResetForUsers'); let msg = globalize.translate('MessagePasswordResetForUsers');
msg += '<br/>'; msg += '<br/>';
msg += '<br/>'; msg += '<br/>';
msg += result.UsersReset.join('<br/>'); msg += result.UsersReset.join('<br/>');
@ -22,7 +23,7 @@ define(['globalize'], function (globalize) {
}); });
} }
return function (view, params) { export default function (view, params) {
function onSubmit(e) { function onSubmit(e) {
ApiClient.ajax({ ApiClient.ajax({
type: 'POST', type: 'POST',
@ -37,5 +38,6 @@ define(['globalize'], function (globalize) {
} }
view.querySelector('form').addEventListener('submit', onSubmit); view.querySelector('form').addEventListener('submit', onSubmit);
}; }
});
/* eslint-enable indent */

View file

@ -1,14 +1,24 @@
define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layoutManager', 'browser', 'globalize', 'cardStyle', 'emby-checkbox'], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser, globalize) { import appHost from 'apphost';
'use strict'; import appSettings from 'appSettings';
import dom from 'dom';
import connectionManager from 'connectionManager';
import loading from 'loading';
import layoutManager from 'layoutManager';
import browser from 'browser';
import globalize from 'globalize';
import 'cardStyle';
import 'emby-checkbox';
var enableFocusTransform = !browser.slow && !browser.edge; /* eslint-disable indent */
const enableFocusTransform = !browser.slow && !browser.edge;
function authenticateUserByName(page, apiClient, username, password) { function authenticateUserByName(page, apiClient, username, password) {
loading.show(); loading.show();
apiClient.authenticateUserByName(username, password).then(function (result) { apiClient.authenticateUserByName(username, password).then(function (result) {
var user = result.User; const user = result.User;
var serverId = getParameterByName('serverid'); const serverId = getParameterByName('serverid');
var newUrl; let newUrl;
if (user.Policy.IsAdministrator && !serverId) { if (user.Policy.IsAdministrator && !serverId) {
newUrl = 'dashboard.html'; newUrl = 'dashboard.html';
@ -26,7 +36,7 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
const UnauthorizedOrForbidden = [401, 403]; const UnauthorizedOrForbidden = [401, 403];
if (UnauthorizedOrForbidden.includes(response.status)) { if (UnauthorizedOrForbidden.includes(response.status)) {
require(['toast'], function (toast) { import('toast').then(({default: toast}) => {
const messageKey = response.status === 401 ? 'MessageInvalidUser' : 'MessageUnauthorizedUser'; const messageKey = response.status === 401 ? 'MessageInvalidUser' : 'MessageUnauthorizedUser';
toast(globalize.translate(messageKey)); toast(globalize.translate(messageKey));
}); });
@ -58,23 +68,23 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
} }
} }
var metroColors = ['#6FBD45', '#4BB3DD', '#4164A5', '#E12026', '#800080', '#E1B222', '#008040', '#0094FF', '#FF00C7', '#FF870F', '#7F0037']; const metroColors = ['#6FBD45', '#4BB3DD', '#4164A5', '#E12026', '#800080', '#E1B222', '#008040', '#0094FF', '#FF00C7', '#FF870F', '#7F0037'];
function getRandomMetroColor() { function getRandomMetroColor() {
var index = Math.floor(Math.random() * (metroColors.length - 1)); const index = Math.floor(Math.random() * (metroColors.length - 1));
return metroColors[index]; return metroColors[index];
} }
function getMetroColor(str) { function getMetroColor(str) {
if (str) { if (str) {
var character = String(str.substr(0, 1).charCodeAt()); const character = String(str.substr(0, 1).charCodeAt());
var sum = 0; let sum = 0;
for (var i = 0; i < character.length; i++) { for (let i = 0; i < character.length; i++) {
sum += parseInt(character.charAt(i)); sum += parseInt(character.charAt(i));
} }
var index = String(sum).substr(-1); const index = String(sum).substr(-1);
return metroColors[index]; return metroColors[index];
} }
@ -82,13 +92,13 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
} }
function loadUserList(context, apiClient, users) { function loadUserList(context, apiClient, users) {
var html = ''; let html = '';
for (var i = 0; i < users.length; i++) { for (let i = 0; i < users.length; i++) {
var user = users[i]; const user = users[i];
// TODO move card creation code to Card component // TODO move card creation code to Card component
var cssClass = 'card squareCard scalableCard squareCard-scalable'; let cssClass = 'card squareCard scalableCard squareCard-scalable';
if (layoutManager.tv) { if (layoutManager.tv) {
cssClass += ' show-focus'; cssClass += ' show-focus';
@ -98,13 +108,13 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
} }
} }
var cardBoxCssClass = 'cardBox cardBox-bottompadded'; const cardBoxCssClass = 'cardBox cardBox-bottompadded';
html += '<button type="button" class="' + cssClass + '">'; html += '<button type="button" class="' + cssClass + '">';
html += '<div class="' + cardBoxCssClass + '">'; html += '<div class="' + cardBoxCssClass + '">';
html += '<div class="cardScalable">'; html += '<div class="cardScalable">';
html += '<div class="cardPadder cardPadder-square"></div>'; html += '<div class="cardPadder cardPadder-square"></div>';
html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">'; html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">';
var imgUrl; let imgUrl;
if (user.PrimaryImageTag) { if (user.PrimaryImageTag) {
imgUrl = apiClient.getUserImageUrl(user.Id, { imgUrl = apiClient.getUserImageUrl(user.Id, {
@ -114,7 +124,7 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
}); });
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>"; html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>";
} else { } else {
var background = getMetroColor(user.Id); const background = getMetroColor(user.Id);
imgUrl = 'assets/img/avatar.png'; imgUrl = 'assets/img/avatar.png';
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>'; html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>';
} }
@ -131,9 +141,9 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
context.querySelector('#divUsers').innerHTML = html; context.querySelector('#divUsers').innerHTML = html;
} }
return function (view, params) { export default function (view, params) {
function getApiClient() { function getApiClient() {
var serverId = params.serverid; const serverId = params.serverid;
if (serverId) { if (serverId) {
return connectionManager.getOrCreateApiClient(serverId); return connectionManager.getOrCreateApiClient(serverId);
@ -147,20 +157,20 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
view.querySelector('.manualLoginForm').classList.add('hide'); view.querySelector('.manualLoginForm').classList.add('hide');
view.querySelector('.btnManual').classList.remove('hide'); view.querySelector('.btnManual').classList.remove('hide');
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(view); autoFocuser.autoFocus(view);
}); });
} }
view.querySelector('#divUsers').addEventListener('click', function (e) { view.querySelector('#divUsers').addEventListener('click', function (e) {
var card = dom.parentWithClass(e.target, 'card'); const card = dom.parentWithClass(e.target, 'card');
var cardContent = card ? card.querySelector('.cardContent') : null; const cardContent = card ? card.querySelector('.cardContent') : null;
if (cardContent) { if (cardContent) {
var context = view; const context = view;
var id = cardContent.getAttribute('data-userid'); const id = cardContent.getAttribute('data-userid');
var name = cardContent.getAttribute('data-username'); const name = cardContent.getAttribute('data-username');
var haspw = cardContent.getAttribute('data-haspw'); const haspw = cardContent.getAttribute('data-haspw');
if (id === 'manual') { if (id === 'manual') {
context.querySelector('#txtManualName').value = ''; context.querySelector('#txtManualName').value = '';
@ -176,7 +186,7 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
}); });
view.querySelector('.manualLoginForm').addEventListener('submit', function (e) { view.querySelector('.manualLoginForm').addEventListener('submit', function (e) {
appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked); appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked);
var apiClient = getApiClient(); const apiClient = getApiClient();
authenticateUserByName(view, apiClient, view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value); authenticateUserByName(view, apiClient, view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value);
e.preventDefault(); e.preventDefault();
return false; return false;
@ -199,7 +209,7 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
view.querySelector('.btnSelectServer').classList.add('hide'); view.querySelector('.btnSelectServer').classList.add('hide');
} }
var apiClient = getApiClient(); const apiClient = getApiClient();
apiClient.getPublicUsers().then(function (users) { apiClient.getPublicUsers().then(function (users) {
if (users.length) { if (users.length) {
showVisualForm(); showVisualForm();
@ -215,5 +225,6 @@ define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layout
view.querySelector('.disclaimer').textContent = options.LoginDisclaimer || ''; view.querySelector('.disclaimer').textContent = options.LoginDisclaimer || '';
}); });
}); });
}; }
});
/* eslint-enable indent */

View file

@ -1,10 +1,27 @@
define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focusManager', 'connectionManager', 'globalize', 'actionsheet', 'dom', 'browser', 'material-icons', 'flexStyles', 'emby-scroller', 'emby-itemscontainer', 'cardStyle', 'emby-button'], function (loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom, browser) { import loading from 'loading';
'use strict'; import appRouter from 'appRouter';
import layoutManager from 'layoutManager';
import appSettings from 'appSettings';
import appHost from 'apphost';
import focusManager from 'focusManager';
import connectionManager from 'connectionManager';
import globalize from 'globalize';
import actionSheet from 'actionsheet';
import dom from 'dom';
import browser from 'browser';
import 'material-icons';
import 'flexStyles';
import 'emby-scroller';
import 'emby-itemscontainer';
import 'cardStyle';
import 'emby-button';
var enableFocusTransform = !browser.slow && !browser.edge; /* eslint-disable indent */
const enableFocusTransform = !browser.slow && !browser.edge;
function renderSelectServerItems(view, servers) { function renderSelectServerItems(view, servers) {
var items = servers.map(function (server) { const items = servers.map(function (server) {
return { return {
name: server.Name, name: server.Name,
showIcon: true, showIcon: true,
@ -14,8 +31,8 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
server: server server: server
}; };
}); });
var html = items.map(function (item) { let html = items.map(function (item) {
var cardImageContainer; let cardImageContainer;
if (item.showIcon) { if (item.showIcon) {
cardImageContainer = '<span class="cardImageIcon material-icons ' + item.icon + '"></span>'; cardImageContainer = '<span class="cardImageIcon material-icons ' + item.icon + '"></span>';
@ -25,7 +42,7 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
// TODO move card creation code to Card component // TODO move card creation code to Card component
var cssClass = 'card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable'; let cssClass = 'card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable';
if (layoutManager.tv) { if (layoutManager.tv) {
cssClass += ' show-focus'; cssClass += ' show-focus';
@ -35,10 +52,10 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
} }
} }
var cardBoxCssClass = 'cardBox'; const cardBoxCssClass = 'cardBox';
var innerOpening = '<div class="' + cardBoxCssClass + '">'; const innerOpening = '<div class="' + cardBoxCssClass + '">';
var cardContainer = ''; let cardContainer = '';
cardContainer += '<button raised class="' + cssClass + '" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || '') + '" data-cardtype="' + item.cardType + '">'; cardContainer += '<button raised class="' + cssClass + '" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || '') + '" data-cardtype="' + item.cardType + '">';
cardContainer += innerOpening; cardContainer += innerOpening;
cardContainer += '<div class="cardScalable">'; cardContainer += '<div class="cardScalable">';
@ -55,7 +72,7 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
cardContainer += '</div></div></button>'; cardContainer += '</div></div></button>';
return cardContainer; return cardContainer;
}).join(''); }).join('');
var itemsContainer = view.querySelector('.servers'); const itemsContainer = view.querySelector('.servers');
if (!items.length) { if (!items.length) {
html = '<p>' + globalize.translate('MessageNoServersAvailable') + '</p>'; html = '<p>' + globalize.translate('MessageNoServersAvailable') + '</p>';
@ -89,7 +106,7 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
} }
function alertTextWithOptions(options) { function alertTextWithOptions(options) {
require(['alert'], function (alert) { import('alert').then(({default: alert}) => {
alert(options); alert(options);
}); });
} }
@ -98,14 +115,14 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
alertText(globalize.translate('MessageUnableToConnectToServer')); alertText(globalize.translate('MessageUnableToConnectToServer'));
} }
return function (view, params) { export default function (view, params) {
function connectToServer(server) { function connectToServer(server) {
loading.show(); loading.show();
connectionManager.connectToServer(server, { connectionManager.connectToServer(server, {
enableAutoLogin: appSettings.enableAutoLogin() enableAutoLogin: appSettings.enableAutoLogin()
}).then(function (result) { }).then(function (result) {
loading.hide(); loading.hide();
var apiClient = result.ApiClient; const apiClient = result.ApiClient;
switch (result.State) { switch (result.State) {
case 'SignedIn': case 'SignedIn':
@ -140,7 +157,7 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
} }
function onServerClick(server) { function onServerClick(server) {
var menuItems = []; const menuItems = [];
menuItems.push({ menuItems.push({
name: globalize.translate('Connect'), name: globalize.translate('Connect'),
id: 'connect' id: 'connect'
@ -178,10 +195,10 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
connectionManager.getAvailableServers().then(onServersRetrieved); connectionManager.getAvailableServers().then(onServersRetrieved);
} }
var servers; let servers;
updatePageStyle(view, params); updatePageStyle(view, params);
view.addEventListener('viewshow', function (e) { view.addEventListener('viewshow', function (e) {
var isRestored = e.detail.isRestored; const isRestored = e.detail.isRestored;
appRouter.setTitle(null); appRouter.setTitle(null);
if (!isRestored) { if (!isRestored) {
@ -189,20 +206,21 @@ define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focu
} }
}); });
view.querySelector('.servers').addEventListener('click', function (e) { view.querySelector('.servers').addEventListener('click', function (e) {
var card = dom.parentWithClass(e.target, 'card'); const card = dom.parentWithClass(e.target, 'card');
if (card) { if (card) {
var url = card.getAttribute('data-url'); const url = card.getAttribute('data-url');
if (url) { if (url) {
appRouter.show(url); appRouter.show(url);
} else { } else {
var id = card.getAttribute('data-id'); const id = card.getAttribute('data-id');
onServerClick(servers.filter(function (s) { onServerClick(servers.filter(function (s) {
return s.Id === id; return s.Id === id;
})[0]); })[0]);
} }
} }
}); });
}; }
});
/* eslint-enable indent */

View file

@ -1,5 +1,13 @@
define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emby-input', 'emby-select', 'emby-button'], function ($, loading, globalize) { import $ from 'jQuery';
'use strict'; import loading from 'loading';
import globalize from 'globalize';
import 'emby-checkbox';
import 'emby-textarea';
import 'emby-input';
import 'emby-select';
import 'emby-button';
/* eslint-disable indent */
function loadPage(page, config, languageOptions, systemInfo) { function loadPage(page, config, languageOptions, systemInfo) {
page.querySelector('#txtServerName').value = systemInfo.ServerName; page.querySelector('#txtServerName').value = systemInfo.ServerName;
@ -16,7 +24,7 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
function onSubmit() { function onSubmit() {
loading.show(); loading.show();
var form = this; const form = this;
$(form).parents('.page'); $(form).parents('.page');
ApiClient.getServerConfiguration().then(function (config) { ApiClient.getServerConfiguration().then(function (config) {
config.ServerName = $('#txtServerName', form).val(); config.ServerName = $('#txtServerName', form).val();
@ -24,7 +32,7 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
config.CachePath = form.querySelector('#txtCachePath').value; config.CachePath = form.querySelector('#txtCachePath').value;
config.MetadataPath = $('#txtMetadataPath', form).val(); config.MetadataPath = $('#txtMetadataPath', form).val();
config.MetadataNetworkPath = $('#txtMetadataNetworkPath', form).val(); config.MetadataNetworkPath = $('#txtMetadataNetworkPath', form).val();
var requiresReload = config.UICulture !== currentLanguage; let requiresReload = config.UICulture !== currentLanguage;
ApiClient.updateServerConfiguration(config).then(function() { ApiClient.updateServerConfiguration(config).then(function() {
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) { ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) {
brandingConfig.LoginDisclaimer = form.querySelector('#txtLoginDisclaimer').value; brandingConfig.LoginDisclaimer = form.querySelector('#txtLoginDisclaimer').value;
@ -43,7 +51,7 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
}); });
}); });
}, function () { }, function () {
require(['alert'], function (alert) { import('alert').then(({default: alert}) => {
alert(globalize.translate('DefaultErrorMessage')); alert(globalize.translate('DefaultErrorMessage'));
}); });
@ -53,13 +61,13 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
return false; return false;
} }
var currentBrandingOptions; let currentBrandingOptions;
var currentLanguage; let currentLanguage;
var brandingConfigKey = 'branding'; const brandingConfigKey = 'branding';
return function (view, params) { export default function (view, params) {
$('#btnSelectCachePath', view).on('click.selectDirectory', function () { $('#btnSelectCachePath', view).on('click.selectDirectory', function () {
require(['directorybrowser'], function (directoryBrowser) { import('directorybrowser').then(({default: directoryBrowser}) => {
var picker = new directoryBrowser.default(); const picker = new directoryBrowser();
picker.show({ picker.show({
callback: function (path) { callback: function (path) {
if (path) { if (path) {
@ -75,8 +83,8 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
}); });
}); });
$('#btnSelectMetadataPath', view).on('click.selectDirectory', function () { $('#btnSelectMetadataPath', view).on('click.selectDirectory', function () {
require(['directorybrowser'], function (directoryBrowser) { import('directorybrowser').then(({default: directoryBrowser}) => {
var picker = new directoryBrowser.default(); const picker = new directoryBrowser();
picker.show({ picker.show({
path: $('#txtMetadataPath', view).val(), path: $('#txtMetadataPath', view).val(),
networkSharePath: $('#txtMetadataNetworkPath', view).val(), networkSharePath: $('#txtMetadataNetworkPath', view).val(),
@ -100,9 +108,9 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
}); });
$('.dashboardGeneralForm', view).off('submit', onSubmit).on('submit', onSubmit); $('.dashboardGeneralForm', view).off('submit', onSubmit).on('submit', onSubmit);
view.addEventListener('viewshow', function () { view.addEventListener('viewshow', function () {
var promiseConfig = ApiClient.getServerConfiguration(); const promiseConfig = ApiClient.getServerConfiguration();
var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl('Localization/Options')); const promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl('Localization/Options'));
var promiseSystemInfo = ApiClient.getSystemInfo(); const promiseSystemInfo = ApiClient.getSystemInfo();
Promise.all([promiseConfig, promiseLanguageOptions, promiseSystemInfo]).then(function (responses) { Promise.all([promiseConfig, promiseLanguageOptions, promiseSystemInfo]).then(function (responses) {
loadPage(view, responses[0], responses[1], responses[2]); loadPage(view, responses[0], responses[1], responses[2]);
}); });
@ -112,5 +120,6 @@ define(['jQuery', 'loading', 'globalize', 'emby-checkbox', 'emby-textarea', 'emb
view.querySelector('#txtCustomCss').value = config.CustomCss || ''; view.querySelector('#txtCustomCss').value = config.CustomCss || '';
}); });
}); });
}; }
});
/* eslint-enable indent */

View file

@ -1,5 +1,10 @@
define(['globalize', 'loading', 'libraryMenu', 'emby-checkbox', 'emby-button', 'emby-button'], function(globalize, loading, libraryMenu) { import globalize from 'globalize';
'use strict'; import loading from 'loading';
import libraryMenu from 'libraryMenu';
import 'emby-checkbox';
import 'emby-button';
/* eslint-disable indent */
function getTabs() { function getTabs() {
return [{ return [{
@ -17,7 +22,7 @@ define(['globalize', 'loading', 'libraryMenu', 'emby-checkbox', 'emby-button', '
}]; }];
} }
return function(view, params) { export default function(view, params) {
function loadData() { function loadData() {
ApiClient.getServerConfiguration().then(function(config) { ApiClient.getServerConfiguration().then(function(config) {
view.querySelector('.chkFolderView').checked = config.EnableFolderView; view.querySelector('.chkFolderView').checked = config.EnableFolderView;
@ -33,7 +38,7 @@ define(['globalize', 'loading', 'libraryMenu', 'emby-checkbox', 'emby-button', '
view.querySelector('form').addEventListener('submit', function(e) { view.querySelector('form').addEventListener('submit', function(e) {
loading.show(); loading.show();
var form = this; const form = this;
ApiClient.getServerConfiguration().then(function(config) { ApiClient.getServerConfiguration().then(function(config) {
config.EnableFolderView = form.querySelector('.chkFolderView').checked; config.EnableFolderView = form.querySelector('.chkFolderView').checked;
config.EnableGroupingIntoCollections = form.querySelector('.chkGroupMoviesIntoCollections').checked; config.EnableGroupingIntoCollections = form.querySelector('.chkGroupMoviesIntoCollections').checked;
@ -63,5 +68,6 @@ define(['globalize', 'loading', 'libraryMenu', 'emby-checkbox', 'emby-button', '
} }
}); });
}); });
}; }
});
/* eslint-enable indent */

View file

@ -1,12 +1,18 @@
define(['jQuery', 'dom', 'loading', 'libraryMenu', 'globalize', 'listViewStyle'], function($, dom, loading, libraryMenu, globalize) { import $ from 'jQuery';
'use strict'; import dom from 'dom';
import loading from 'loading';
import libraryMenu from 'libraryMenu';
import globalize from 'globalize';
import 'listViewStyle';
/* eslint-disable indent */
function populateLanguages(select) { function populateLanguages(select) {
return ApiClient.getCultures().then(function(languages) { return ApiClient.getCultures().then(function(languages) {
var html = ''; let html = '';
html += "<option value=''></option>"; html += "<option value=''></option>";
for (var i = 0, length = languages.length; i < length; i++) { for (let i = 0, length = languages.length; i < length; i++) {
var culture = languages[i]; const culture = languages[i];
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>'; html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>';
} }
select.innerHTML = html; select.innerHTML = html;
@ -15,10 +21,10 @@ define(['jQuery', 'dom', 'loading', 'libraryMenu', 'globalize', 'listViewStyle']
function populateCountries(select) { function populateCountries(select) {
return ApiClient.getCountries().then(function(allCountries) { return ApiClient.getCountries().then(function(allCountries) {
var html = ''; let html = '';
html += "<option value=''></option>"; html += "<option value=''></option>";
for (var i = 0, length = allCountries.length; i < length; i++) { for (let i = 0, length = allCountries.length; i < length; i++) {
var culture = allCountries[i]; const culture = allCountries[i];
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>'; html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>';
} }
select.innerHTML = html; select.innerHTML = html;
@ -26,9 +32,9 @@ define(['jQuery', 'dom', 'loading', 'libraryMenu', 'globalize', 'listViewStyle']
} }
function loadPage(page) { function loadPage(page) {
var promises = [ApiClient.getServerConfiguration(), populateLanguages(page.querySelector('#selectLanguage')), populateCountries(page.querySelector('#selectCountry'))]; const promises = [ApiClient.getServerConfiguration(), populateLanguages(page.querySelector('#selectLanguage')), populateCountries(page.querySelector('#selectCountry'))];
Promise.all(promises).then(function(responses) { Promise.all(promises).then(function(responses) {
var config = responses[0]; const config = responses[0];
page.querySelector('#selectLanguage').value = config.PreferredMetadataLanguage || ''; page.querySelector('#selectLanguage').value = config.PreferredMetadataLanguage || '';
page.querySelector('#selectCountry').value = config.MetadataCountryCode || ''; page.querySelector('#selectCountry').value = config.MetadataCountryCode || '';
loading.hide(); loading.hide();
@ -36,7 +42,7 @@ define(['jQuery', 'dom', 'loading', 'libraryMenu', 'globalize', 'listViewStyle']
} }
function onSubmit() { function onSubmit() {
var form = this; const form = this;
return loading.show(), ApiClient.getServerConfiguration().then(function(config) { return loading.show(), ApiClient.getServerConfiguration().then(function(config) {
config.PreferredMetadataLanguage = form.querySelector('#selectLanguage').value; config.PreferredMetadataLanguage = form.querySelector('#selectLanguage').value;
config.MetadataCountryCode = form.querySelector('#selectCountry').value; config.MetadataCountryCode = form.querySelector('#selectCountry').value;
@ -67,4 +73,5 @@ define(['jQuery', 'dom', 'loading', 'libraryMenu', 'globalize', 'listViewStyle']
loading.show(); loading.show();
loadPage(this); loadPage(this);
}); });
});
/* eslint-enable indent */

View file

@ -1,8 +1,12 @@
define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading, libraryMenu, globalize) { import $ from 'jQuery';
'use strict'; import loading from 'loading';
import libraryMenu from 'libraryMenu';
import globalize from 'globalize';
/* eslint-disable indent */
function loadPage(page, config, users) { function loadPage(page, config, users) {
var html = '<option value="" selected="selected">' + globalize.translate('OptionNone') + '</option>'; let html = '<option value="" selected="selected">' + globalize.translate('OptionNone') + '</option>';
html += users.map(function (user) { html += users.map(function (user) {
return '<option value="' + user.Id + '">' + user.Name + '</option>'; return '<option value="' + user.Id + '">' + user.Name + '</option>';
}).join(''); }).join('');
@ -16,7 +20,7 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading,
function onSubmit() { function onSubmit() {
loading.show(); loading.show();
var form = this; const form = this;
ApiClient.getNamedConfiguration(metadataKey).then(function (config) { ApiClient.getNamedConfiguration(metadataKey).then(function (config) {
config.UserId = $('#selectUser', form).val() || null; config.UserId = $('#selectUser', form).val() || null;
config.ReleaseDateFormat = $('#selectReleaseDateFormat', form).val(); config.ReleaseDateFormat = $('#selectReleaseDateFormat', form).val();
@ -32,10 +36,10 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading,
} }
function showConfirmMessage(config) { function showConfirmMessage(config) {
var msg = []; const msg = [];
msg.push(globalize.translate('MetadataSettingChangeHelp')); msg.push(globalize.translate('MetadataSettingChangeHelp'));
require(['alert'], function (alert) { import('alert').then(({default: alert}) => {
alert({ alert({
text: msg.join('<br/><br/>') text: msg.join('<br/><br/>')
}); });
@ -58,17 +62,18 @@ define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading,
}]; }];
} }
var metadataKey = 'xbmcmetadata'; const metadataKey = 'xbmcmetadata';
$(document).on('pageinit', '#metadataNfoPage', function () { $(document).on('pageinit', '#metadataNfoPage', function () {
$('.metadataNfoForm').off('submit', onSubmit).on('submit', onSubmit); $('.metadataNfoForm').off('submit', onSubmit).on('submit', onSubmit);
}).on('pageshow', '#metadataNfoPage', function () { }).on('pageshow', '#metadataNfoPage', function () {
libraryMenu.setTabs('metadata', 3, getTabs); libraryMenu.setTabs('metadata', 3, getTabs);
loading.show(); loading.show();
var page = this; const page = this;
var promise1 = ApiClient.getUsers(); const promise1 = ApiClient.getUsers();
var promise2 = ApiClient.getNamedConfiguration(metadataKey); const promise2 = ApiClient.getNamedConfiguration(metadataKey);
Promise.all([promise1, promise2]).then(function (responses) { Promise.all([promise1, promise2]).then(function (responses) {
loadPage(page, responses[1], responses[0]); loadPage(page, responses[1], responses[0]);
}); });
}); });
});
/* eslint-enable indent */

View file

@ -85,7 +85,7 @@ import 'emby-select';
function showAlertText(options) { function showAlertText(options) {
return new Promise(function (resolve, reject) { return new Promise(function (resolve, reject) {
require(['alert'], function (alert) { import('alert').then(({default: alert}) => {
alert(options).then(resolve, reject); alert(options).then(resolve, reject);
}); });
}); });
@ -140,7 +140,7 @@ import 'emby-select';
} }
}); });
view.querySelector('#btnSelectCertPath').addEventListener('click', function () { view.querySelector('#btnSelectCertPath').addEventListener('click', function () {
require(['directorybrowser'], function (directoryBrowser) { import('directorybrowser').then(({default: directoryBrowser}) => {
const picker = new directoryBrowser(); const picker = new directoryBrowser();
picker.show({ picker.show({
includeFiles: true, includeFiles: true,

View file

@ -1,11 +1,19 @@
define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby-button', 'emby-select'], function ($, loading, datetime, dom, globalize) { import $ from 'jQuery';
'use strict'; import loading from 'loading';
import datetime from 'datetime';
import dom from 'dom';
import globalize from 'globalize';
import 'emby-input';
import 'emby-button';
import 'emby-select';
/* eslint-disable indent */
function fillTimeOfDay(select) { function fillTimeOfDay(select) {
var options = []; const options = [];
for (var i = 0; i < 86400000; i += 900000) { for (let i = 0; i < 86400000; i += 900000) {
options.push({ options.push({
name: ScheduledTaskPage.getDisplayTime(i * 10000), name: ScheduledTaskPage.getDisplayTime(i * 10000),
value: i * 10000 value: i * 10000
@ -18,15 +26,15 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
} }
Array.prototype.remove = function (from, to) { Array.prototype.remove = function (from, to) {
var rest = this.slice((to || from) + 1 || this.length); const rest = this.slice((to || from) + 1 || this.length);
this.length = from < 0 ? this.length + from : from; this.length = from < 0 ? this.length + from : from;
return this.push.apply(this, rest); return this.push.apply(this, rest);
}; };
var ScheduledTaskPage = { const ScheduledTaskPage = {
refreshScheduledTask: function (view) { refreshScheduledTask: function (view) {
loading.show(); loading.show();
var id = getParameterByName('id'); let id = getParameterByName('id');
ApiClient.getScheduledTask(id).then(function (task) { ApiClient.getScheduledTask(id).then(function (task) {
ScheduledTaskPage.loadScheduledTask(view, task); ScheduledTaskPage.loadScheduledTask(view, task);
}); });
@ -42,11 +50,11 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
loading.hide(); loading.hide();
}, },
loadTaskTriggers: function (context, task) { loadTaskTriggers: function (context, task) {
var html = ''; let html = '';
html += '<div class="paperList">'; html += '<div class="paperList">';
for (var i = 0, length = task.Triggers.length; i < length; i++) { for (let i = 0, length = task.Triggers.length; i < length; i++) {
var trigger = task.Triggers[i]; const trigger = task.Triggers[i];
html += '<div class="listItem listItem-border">'; html += '<div class="listItem listItem-border">';
html += '<span class="material-icons listItemIcon schedule"></span>'; html += '<span class="material-icons listItemIcon schedule"></span>';
@ -58,7 +66,7 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
html += "<div class='listItemBodyText'>" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + '</div>'; html += "<div class='listItemBodyText'>" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + '</div>';
if (trigger.MaxRuntimeMs) { if (trigger.MaxRuntimeMs) {
html += '<div class="listItemBodyText secondary">'; html += '<div class="listItemBodyText secondary">';
var hours = trigger.MaxRuntimeTicks / 36e9; const hours = trigger.MaxRuntimeTicks / 36e9;
if (hours == 1) { if (hours == 1) {
html += globalize.translate('ValueTimeLimitSingleHour'); html += globalize.translate('ValueTimeLimitSingleHour');
} else { } else {
@ -92,7 +100,7 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
if (trigger.Type == 'IntervalTrigger') { if (trigger.Type == 'IntervalTrigger') {
var hours = trigger.IntervalTicks / 36e9; const hours = trigger.IntervalTicks / 36e9;
if (hours == 0.25) { if (hours == 0.25) {
return globalize.translate('EveryXMinutes', '15'); return globalize.translate('EveryXMinutes', '15');
@ -117,8 +125,8 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
return trigger.Type; return trigger.Type;
}, },
getDisplayTime: function (ticks) { getDisplayTime: function (ticks) {
var ms = ticks / 1e4; const ms = ticks / 1e4;
var now = new Date(); const now = new Date();
now.setHours(0, 0, 0, 0); now.setHours(0, 0, 0, 0);
now.setTime(now.getTime() + ms); now.setTime(now.getTime() + ms);
return datetime.getDisplayTime(now); return datetime.getDisplayTime(now);
@ -137,7 +145,7 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
}, },
deleteTrigger: function (view, index) { deleteTrigger: function (view, index) {
loading.show(); loading.show();
var id = getParameterByName('id'); let id = getParameterByName('id');
ApiClient.getScheduledTask(id).then(function (task) { ApiClient.getScheduledTask(id).then(function (task) {
task.Triggers.remove(index); task.Triggers.remove(index);
ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () { ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
@ -179,7 +187,7 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
} }
}, },
getTriggerToAdd: function (page) { getTriggerToAdd: function (page) {
var trigger = { const trigger = {
Type: $('#selectTriggerType', page).val() Type: $('#selectTriggerType', page).val()
}; };
@ -194,7 +202,7 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
trigger.IntervalTicks = $('#selectInterval', page).val(); trigger.IntervalTicks = $('#selectInterval', page).val();
} }
var timeLimit = $('#txtTimeLimit', page).val() || '0'; let timeLimit = $('#txtTimeLimit', page).val() || '0';
timeLimit = parseFloat(timeLimit) * 3600000; timeLimit = parseFloat(timeLimit) * 3600000;
trigger.MaxRuntimeMs = timeLimit || null; trigger.MaxRuntimeMs = timeLimit || null;
@ -202,10 +210,10 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
return trigger; return trigger;
} }
}; };
return function (view, params) { export default function (view, params) {
function onSubmit(e) { function onSubmit(e) {
loading.show(); loading.show();
var id = getParameterByName('id'); let id = getParameterByName('id');
ApiClient.getScheduledTask(id).then(function (task) { ApiClient.getScheduledTask(id).then(function (task) {
task.Triggers.push(ScheduledTaskPage.getTriggerToAdd(view)); task.Triggers.push(ScheduledTaskPage.getTriggerToAdd(view));
ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () { ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
@ -226,7 +234,7 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
ScheduledTaskPage.showAddTriggerPopup(view); ScheduledTaskPage.showAddTriggerPopup(view);
}); });
view.addEventListener('click', function (e) { view.addEventListener('click', function (e) {
var btnDeleteTrigger = dom.parentWithClass(e.target, 'btnDeleteTrigger'); const btnDeleteTrigger = dom.parentWithClass(e.target, 'btnDeleteTrigger');
if (btnDeleteTrigger) { if (btnDeleteTrigger) {
ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute('data-index'))); ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute('data-index')));
@ -235,5 +243,6 @@ define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby
view.addEventListener('viewshow', function () { view.addEventListener('viewshow', function () {
ScheduledTaskPage.refreshScheduledTask(view); ScheduledTaskPage.refreshScheduledTask(view);
}); });
}; }
});
/* eslint-enable indent */

View file

@ -1,5 +1,14 @@
define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date-fns', 'dfnshelper', 'listViewStyle', 'emby-button'], function ($, loading, events, globalize, serverNotifications, datefns, dfnshelper) { import $ from 'jQuery';
'use strict'; import loading from 'loading';
import events from 'events';
import globalize from 'globalize';
import serverNotifications from 'serverNotifications';
import * as datefns from 'date-fns';
import dfnshelper from 'dfnshelper';
import 'listViewStyle';
import 'emby-button';
/* eslint-disable indent */
function reloadList(page) { function reloadList(page) {
ApiClient.getScheduledTasks({ ApiClient.getScheduledTasks({
@ -17,10 +26,10 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
return a == b ? 0 : a < b ? -1 : 1; return a == b ? 0 : a < b ? -1 : 1;
}); });
var currentCategory; let currentCategory;
var html = ''; let html = '';
for (var i = 0; i < tasks.length; i++) { for (let i = 0; i < tasks.length; i++) {
var task = tasks[i]; const task = tasks[i];
if (task.Category != currentCategory) { if (task.Category != currentCategory) {
currentCategory = task.Category; currentCategory = task.Category;
if (currentCategory) { if (currentCategory) {
@ -63,11 +72,11 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
} }
function getTaskProgressHtml(task) { function getTaskProgressHtml(task) {
var html = ''; let html = '';
if (task.State === 'Idle') { if (task.State === 'Idle') {
if (task.LastExecutionResult) { if (task.LastExecutionResult) {
var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc); const endtime = Date.parse(task.LastExecutionResult.EndTimeUtc);
var starttime = Date.parse(task.LastExecutionResult.StartTimeUtc); const starttime = Date.parse(task.LastExecutionResult.StartTimeUtc);
html += globalize.translate('LabelScheduledTaskLastRan', datefns.formatDistanceToNow(endtime, dfnshelper.localeWithSuffix), html += globalize.translate('LabelScheduledTaskLastRan', datefns.formatDistanceToNow(endtime, dfnshelper.localeWithSuffix),
datefns.formatDistance(starttime, endtime, { locale: dfnshelper.getLocale() })); datefns.formatDistance(starttime, endtime, { locale: dfnshelper.getLocale() }));
if (task.LastExecutionResult.Status === 'Failed') { if (task.LastExecutionResult.Status === 'Failed') {
@ -79,7 +88,7 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
} }
} }
} else if (task.State === 'Running') { } else if (task.State === 'Running') {
var progress = (task.CurrentProgressPercentage || 0).toFixed(1); const progress = (task.CurrentProgressPercentage || 0).toFixed(1);
html += '<div style="display:flex;align-items:center;">'; html += '<div style="display:flex;align-items:center;">';
html += '<div class="taskProgressOuter" title="' + progress + '%" style="flex-grow:1;">'; html += '<div class="taskProgressOuter" title="' + progress + '%" style="flex-grow:1;">';
html += '<div class="taskProgressInner" style="width:' + progress + '%;">'; html += '<div class="taskProgressInner" style="width:' + progress + '%;">';
@ -94,7 +103,7 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
} }
function setTaskButtonIcon(button, icon) { function setTaskButtonIcon(button, icon) {
var inner = button.querySelector('.material-icons'); let inner = button.querySelector('.material-icons');
inner.classList.remove('stop', 'play_arrow'); inner.classList.remove('stop', 'play_arrow');
inner.classList.add(icon); inner.classList.add(icon);
} }
@ -114,10 +123,10 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
$(elem).parents('.listItem')[0].setAttribute('data-status', state); $(elem).parents('.listItem')[0].setAttribute('data-status', state);
} }
return function(view, params) { export default function(view, params) {
function updateTasks(tasks) { function updateTasks(tasks) {
for (var i = 0; i < tasks.length; i++) { for (let i = 0; i < tasks.length; i++) {
var task = tasks[i]; const task = tasks[i];
view.querySelector('#taskProgress' + task.Id).innerHTML = getTaskProgressHtml(task); view.querySelector('#taskProgress' + task.Id).innerHTML = getTaskProgressHtml(task);
updateTaskButton(view.querySelector('#btnTask' + task.Id), task.State); updateTaskButton(view.querySelector('#btnTask' + task.Id), task.State);
} }
@ -146,12 +155,12 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
pollInterval && clearInterval(pollInterval); pollInterval && clearInterval(pollInterval);
} }
var pollInterval; let pollInterval;
var serverId = ApiClient.serverId(); const serverId = ApiClient.serverId();
$('.divScheduledTasks', view).on('click', '.btnStartTask', function() { $('.divScheduledTasks', view).on('click', '.btnStartTask', function() {
var button = this; const button = this;
var id = button.getAttribute('data-taskid'); let id = button.getAttribute('data-taskid');
ApiClient.startScheduledTask(id).then(function() { ApiClient.startScheduledTask(id).then(function() {
updateTaskButton(button, 'Running'); updateTaskButton(button, 'Running');
reloadList(view); reloadList(view);
@ -159,8 +168,8 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
}); });
$('.divScheduledTasks', view).on('click', '.btnStopTask', function() { $('.divScheduledTasks', view).on('click', '.btnStopTask', function() {
var button = this; const button = this;
var id = button.getAttribute('data-taskid'); let id = button.getAttribute('data-taskid');
ApiClient.stopScheduledTask(id).then(function() { ApiClient.stopScheduledTask(id).then(function() {
updateTaskButton(button, ''); updateTaskButton(button, '');
reloadList(view); reloadList(view);
@ -178,5 +187,6 @@ define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date
reloadList(view); reloadList(view);
events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate); events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
}); });
}; }
});
/* eslint-enable indent */

View file

@ -16,7 +16,7 @@ import globalize from 'globalize';
view.addEventListener('viewshow', function () { view.addEventListener('viewshow', function () {
if (!activityLog) { if (!activityLog) {
activityLog = new ActivityLog({ activityLog = new ActivityLog.default({
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
element: view.querySelector('.activityItems') element: view.querySelector('.activityItems')
}); });

View file

@ -1,5 +1,9 @@
define(['jQuery', 'libraryMenu', 'loading', 'globalize'], function ($, libraryMenu, loading, globalize) { import $ from 'jQuery';
'use strict'; import libraryMenu from 'libraryMenu';
import loading from 'loading';
import globalize from 'globalize';
/* eslint-disable indent */
function loadPage(page, config) { function loadPage(page, config) {
$('#txtRemoteClientBitrateLimit', page).val(config.RemoteClientBitrateLimit / 1e6 || ''); $('#txtRemoteClientBitrateLimit', page).val(config.RemoteClientBitrateLimit / 1e6 || '');
@ -8,7 +12,7 @@ define(['jQuery', 'libraryMenu', 'loading', 'globalize'], function ($, libraryMe
function onSubmit() { function onSubmit() {
loading.show(); loading.show();
var form = this; const form = this;
ApiClient.getServerConfiguration().then(function (config) { ApiClient.getServerConfiguration().then(function (config) {
config.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($('#txtRemoteClientBitrateLimit', form).val() || '0')); config.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($('#txtRemoteClientBitrateLimit', form).val() || '0'));
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult); ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
@ -35,9 +39,10 @@ define(['jQuery', 'libraryMenu', 'loading', 'globalize'], function ($, libraryMe
}).on('pageshow', '#streamingSettingsPage', function () { }).on('pageshow', '#streamingSettingsPage', function () {
loading.show(); loading.show();
libraryMenu.setTabs('playback', 2, getTabs); libraryMenu.setTabs('playback', 2, getTabs);
var page = this; const page = this;
ApiClient.getServerConfiguration().then(function (config) { ApiClient.getServerConfiguration().then(function (config) {
loadPage(page, config); loadPage(page, config);
}); });
}); });
});
/* eslint-enable indent */

View file

@ -1787,7 +1787,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti
imageLoader.lazyChildren(collectionItems); imageLoader.lazyChildren(collectionItems);
collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () { collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () {
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert({ alert.default({
text: globalize.translate('AddItemToCollectionHelp'), text: globalize.translate('AddItemToCollectionHelp'),
html: globalize.translate('AddItemToCollectionHelp') + '<br/><br/><a is="emby-linkbutton" class="button-link" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Collections">' + globalize.translate('ButtonLearnMore') + '</a>' html: globalize.translate('AddItemToCollectionHelp') + '<br/><br/><a is="emby-linkbutton" class="button-link" target="_blank" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Collections">' + globalize.translate('ButtonLearnMore') + '</a>'
}); });

View file

@ -1,36 +1,37 @@
define(['focusManager', 'searchFields', 'searchResults', 'events'], function (focusManager, SearchFields, SearchResults, events) { import focusManager from 'focusManager';
'use strict'; import SearchFields from 'searchFields';
import SearchResults from 'searchResults';
import events from 'events';
return function (view, params) { export default function (view, params) {
function onSearch(e, value) { function onSearch(e, value) {
self.searchResults.search(value); self.searchResults.search(value);
}
const self = this;
view.addEventListener('viewshow', function () {
if (!self.searchFields) {
self.searchFields = new SearchFields({
element: view.querySelector('.searchFields')
});
self.searchResults = new SearchResults({
element: view.querySelector('.searchResults'),
serverId: params.serverId || ApiClient.serverId(),
parentId: params.parentId,
collectionType: params.collectionType
});
events.on(self.searchFields, 'search', onSearch);
}
});
view.addEventListener('viewdestroy', function () {
if (self.searchFields) {
self.searchFields.destroy();
self.searchFields = null;
} }
var self = this; if (self.searchResults) {
view.addEventListener('viewshow', function () { self.searchResults.destroy();
if (!self.searchFields) { self.searchResults = null;
self.searchFields = new SearchFields({ }
element: view.querySelector('.searchFields') });
}); }
self.searchResults = new SearchResults({
element: view.querySelector('.searchResults'),
serverId: params.serverId || ApiClient.serverId(),
parentId: params.parentId,
collectionType: params.collectionType
});
events.on(self.searchFields, 'search', onSearch);
}
});
view.addEventListener('viewdestroy', function () {
if (self.searchFields) {
self.searchFields.destroy();
self.searchFields = null;
}
if (self.searchResults) {
self.searchResults.destroy();
self.searchResults = null;
}
});
};
});

View file

@ -1,10 +1,19 @@
define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) { import loading from 'loading';
'use strict'; import events from 'events';
import libraryBrowser from 'libraryBrowser';
import imageLoader from 'imageLoader';
import listView from 'listView';
import cardBuilder from 'cardBuilder';
import * as userSettings from 'userSettings';
import globalize from 'globalize';
import 'emby-itemscontainer';
return function (view, params, tabContent) { /* eslint-disable indent */
export default function (view, params, tabContent) {
function getPageData(context) { function getPageData(context) {
var key = getSavedQueryKey(context); const key = getSavedQueryKey(context);
var pageData = data[key]; let pageData = data[key];
if (!pageData) { if (!pageData) {
pageData = data[key] = { pageData = data[key] = {
@ -46,8 +55,8 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
} }
function onViewStyleChange() { function onViewStyleChange() {
var viewStyle = self.getCurrentViewStyle(); const viewStyle = self.getCurrentViewStyle();
var itemsContainer = tabContent.querySelector('.itemsContainer'); const itemsContainer = tabContent.querySelector('.itemsContainer');
if ('List' == viewStyle) { if ('List' == viewStyle) {
itemsContainer.classList.add('vertical-list'); itemsContainer.classList.add('vertical-list');
@ -63,7 +72,7 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
function reloadItems(page) { function reloadItems(page) {
loading.show(); loading.show();
isLoading = true; isLoading = true;
var query = getQuery(page); const query = getQuery(page);
ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) { ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() { function onNextPageClick() {
if (isLoading) { if (isLoading) {
@ -88,8 +97,8 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
} }
window.scrollTo(0, 0); window.scrollTo(0, 0);
var html; let html;
var pagingHtml = libraryBrowser.getQueryPagingHtml({ const pagingHtml = libraryBrowser.getQueryPagingHtml({
startIndex: query.StartIndex, startIndex: query.StartIndex,
limit: query.Limit, limit: query.Limit,
totalRecordCount: result.TotalRecordCount, totalRecordCount: result.TotalRecordCount,
@ -99,8 +108,8 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
sortButton: false, sortButton: false,
filterButton: false filterButton: false
}); });
var viewStyle = self.getCurrentViewStyle(); const viewStyle = self.getCurrentViewStyle();
var itemsContainer = tabContent.querySelector('.itemsContainer'); const itemsContainer = tabContent.querySelector('.itemsContainer');
if (viewStyle == 'List') { if (viewStyle == 'List') {
html = listView.getListViewHtml({ html = listView.getListViewHtml({
items: result.Items, items: result.Items,
@ -128,22 +137,20 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
overlayPlayButton: true overlayPlayButton: true
}); });
} }
var i; let elems;
var length;
var elems;
elems = tabContent.querySelectorAll('.paging'); elems = tabContent.querySelectorAll('.paging');
for (i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
elems[i].innerHTML = pagingHtml; elems[i].innerHTML = pagingHtml;
} }
elems = tabContent.querySelectorAll('.btnNextPage'); elems = tabContent.querySelectorAll('.btnNextPage');
for (i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener('click', onNextPageClick); elems[i].addEventListener('click', onNextPageClick);
} }
elems = tabContent.querySelectorAll('.btnPreviousPage'); elems = tabContent.querySelectorAll('.btnPreviousPage');
for (i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener('click', onPreviousPageClick); elems[i].addEventListener('click', onPreviousPageClick);
} }
@ -153,19 +160,19 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
loading.hide(); loading.hide();
isLoading = false; isLoading = false;
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(page); autoFocuser.autoFocus(page);
}); });
}); });
} }
var self = this; const self = this;
var data = {}; const data = {};
var isLoading = false; let isLoading = false;
self.showFilterMenu = function () { self.showFilterMenu = function () {
require(['components/filterdialog/filterdialog'], function ({default: filterDialogFactory}) { import('components/filterdialog/filterdialog').then(({default: filterDialogFactory}) => {
var filterDialog = new filterDialogFactory({ const filterDialog = new filterDialogFactory({
query: getQuery(tabContent), query: getQuery(tabContent),
mode: 'episodes', mode: 'episodes',
serverId: ApiClient.serverId() serverId: ApiClient.serverId()
@ -219,12 +226,12 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
button: e.target button: e.target
}); });
}); });
var btnSelectView = tabContent.querySelector('.btnSelectView'); const btnSelectView = tabContent.querySelector('.btnSelectView');
btnSelectView.addEventListener('click', function (e) { btnSelectView.addEventListener('click', function (e) {
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(',')); libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(','));
}); });
btnSelectView.addEventListener('layoutchange', function (e) { btnSelectView.addEventListener('layoutchange', function (e) {
var viewStyle = e.detail.viewStyle; const viewStyle = e.detail.viewStyle;
getPageData(tabContent).view = viewStyle; getPageData(tabContent).view = viewStyle;
libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
onViewStyleChange(); onViewStyleChange();
@ -240,5 +247,6 @@ define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardB
}; };
self.destroy = function () {}; self.destroy = function () {};
}; }
});
/* eslint-enable indent */

View file

@ -1,10 +1,20 @@
define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader', 'apphost', 'globalize', 'appRouter', 'dom', 'emby-button'], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) { import layoutManager from 'layoutManager';
'use strict'; import loading from 'loading';
import libraryBrowser from 'libraryBrowser';
import cardBuilder from 'cardBuilder';
import lazyLoader from 'lazyLoader';
import appHost from 'apphost';
import globalize from 'globalize';
import appRouter from 'appRouter';
import dom from 'dom';
import 'emby-button';
return function (view, params, tabContent) { /* eslint-disable indent */
export default function (view, params, tabContent) {
function getPageData() { function getPageData() {
var key = getSavedQueryKey(); const key = getSavedQueryKey();
var pageData = data[key]; let pageData = data[key];
if (!pageData) { if (!pageData) {
pageData = data[key] = { pageData = data[key] = {
@ -34,7 +44,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
function getPromise() { function getPromise() {
loading.show(); loading.show();
var query = getQuery(); const query = getQuery();
return ApiClient.getGenres(ApiClient.getCurrentUserId(), query); return ApiClient.getGenres(ApiClient.getCurrentUserId(), query);
} }
@ -51,17 +61,17 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
} }
function fillItemsContainer(entry) { function fillItemsContainer(entry) {
var elem = entry.target; const elem = entry.target;
var id = elem.getAttribute('data-id'); const id = elem.getAttribute('data-id');
var viewStyle = self.getCurrentViewStyle(); const viewStyle = self.getCurrentViewStyle();
var limit = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 5 : 9; let limit = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 5 : 9;
if (enableScrollX()) { if (enableScrollX()) {
limit = 10; limit = 10;
} }
var enableImageTypes = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 'Primary,Backdrop,Thumb' : 'Primary'; const enableImageTypes = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 'Primary,Backdrop,Thumb' : 'Primary';
var query = { const query = {
SortBy: 'SortName', SortBy: 'SortName',
SortOrder: 'Ascending', SortOrder: 'Ascending',
IncludeItemTypes: 'Series', IncludeItemTypes: 'Series',
@ -75,7 +85,7 @@ 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) {
var supportsImageAnalysis = appHost.supports('imageanalysis'); const supportsImageAnalysis = appHost.supports('imageanalysis');
if (viewStyle == 'Thumb') { if (viewStyle == 'Thumb') {
cardBuilder.buildCards(result.Items, { cardBuilder.buildCards(result.Items, {
@ -128,14 +138,14 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
} }
function reloadItems(context, promise) { function reloadItems(context, promise) {
var query = getQuery(); const query = getQuery();
promise.then(function (result) { promise.then(function (result) {
var elem = context.querySelector('#items'); const elem = context.querySelector('#items');
var html = ''; let html = '';
var items = result.Items; const items = result.Items;
for (var i = 0, length = items.length; i < length; i++) { for (let i = 0, length = items.length; i < length; i++) {
var item = items[i]; const item = items[i];
html += '<div class="verticalSection">'; html += '<div class="verticalSection">';
html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">'; html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">';
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl(item, { html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl(item, {
@ -149,7 +159,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
html += '</a>'; html += '</a>';
html += '</div>'; html += '</div>';
if (enableScrollX()) { if (enableScrollX()) {
var scrollXClass = 'scrollX hiddenScrollX'; let scrollXClass = 'scrollX hiddenScrollX';
if (layoutManager.tv) { if (layoutManager.tv) {
scrollXClass += 'smoothScrollX padded-top-focusscale padded-bottom-focusscale'; scrollXClass += 'smoothScrollX padded-top-focusscale padded-bottom-focusscale';
} }
@ -182,8 +192,8 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
self.renderTab(); self.renderTab();
} }
var self = this; const self = this;
var data = {}; const data = {};
self.getViewStyles = function () { self.getViewStyles = function () {
return 'Poster,PosterCard,Thumb,ThumbCard'.split(','); return 'Poster,PosterCard,Thumb,ThumbCard'.split(',');
@ -200,7 +210,7 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
}; };
self.enableViewSelection = true; self.enableViewSelection = true;
var promise; let promise;
self.preRender = function () { self.preRender = function () {
promise = getPromise(); promise = getPromise();
@ -209,5 +219,6 @@ define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader
self.renderTab = function () { self.renderTab = function () {
reloadItems(tabContent, promise); reloadItems(tabContent, promise);
}; };
}; }
});
/* eslint-enable indent */

View file

@ -1,11 +1,16 @@
define(['loading', 'components/groupedcards', 'cardBuilder', 'apphost', 'imageLoader'], function (loading, groupedcards, cardBuilder, appHost, imageLoader) { import loading from 'loading';
'use strict'; import groupedcards from 'components/groupedcards';
import cardBuilder from 'cardBuilder';
import appHost from 'apphost';
import imageLoader from 'imageLoader';
/* eslint-disable indent */
function getLatestPromise(context, params) { function getLatestPromise(context, params) {
loading.show(); loading.show();
var userId = ApiClient.getCurrentUserId(); const userId = ApiClient.getCurrentUserId();
var parentId = params.topParentId; const parentId = params.topParentId;
var options = { const options = {
IncludeItemTypes: 'Episode', IncludeItemTypes: 'Episode',
Limit: 30, Limit: 30,
Fields: 'PrimaryImageAspectRatio,BasicSyncInfo', Fields: 'PrimaryImageAspectRatio,BasicSyncInfo',
@ -18,7 +23,7 @@ define(['loading', 'components/groupedcards', 'cardBuilder', 'apphost', 'imageLo
function loadLatest(context, params, promise) { function loadLatest(context, params, promise) {
promise.then(function (items) { promise.then(function (items) {
var html = ''; let html = '';
appHost.supports('imageanalysis'); appHost.supports('imageanalysis');
html += cardBuilder.getCardsHtml({ html += cardBuilder.getCardsHtml({
items: items, items: items,
@ -36,20 +41,20 @@ define(['loading', 'components/groupedcards', 'cardBuilder', 'apphost', 'imageLo
overlayPlayButton: true, overlayPlayButton: true,
lines: 2 lines: 2
}); });
var elem = context.querySelector('#latestEpisodes'); const elem = context.querySelector('#latestEpisodes');
elem.innerHTML = html; elem.innerHTML = html;
imageLoader.lazyChildren(elem); imageLoader.lazyChildren(elem);
loading.hide(); loading.hide();
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(context); autoFocuser.autoFocus(context);
}); });
}); });
} }
return function (view, params, tabContent) { export default function (view, params, tabContent) {
var self = this; const self = this;
var latestPromise; let latestPromise;
self.preRender = function () { self.preRender = function () {
latestPromise = getLatestPromise(view, params); latestPromise = getLatestPromise(view, params);
@ -59,6 +64,7 @@ define(['loading', 'components/groupedcards', 'cardBuilder', 'apphost', 'imageLo
loadLatest(tabContent, params, latestPromise); loadLatest(tabContent, params, latestPromise);
}; };
tabContent.querySelector('#latestEpisodes').addEventListener('click', groupedcards.onItemsContainerClick); tabContent.querySelector('#latestEpisodes').addEventListener('click', groupedcards);
}; }
});
/* eslint-enable indent */

View file

@ -1,5 +1,19 @@
define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'dom', 'userSettings', 'cardBuilder', 'playbackManager', 'mainTabsManager', 'globalize', 'scrollStyles', 'emby-itemscontainer', 'emby-button'], function (events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager, globalize) { import events from 'events';
'use strict'; import inputManager from 'inputManager';
import libraryMenu from 'libraryMenu';
import layoutManager from 'layoutManager';
import loading from 'loading';
import dom from 'dom';
import * as userSettings from 'userSettings';
import cardBuilder from 'cardBuilder';
import playbackManager from 'playbackManager';
import mainTabsManager from 'mainTabsManager';
import globalize from 'globalize';
import 'scrollStyles';
import 'emby-itemscontainer';
import 'emby-button';
/* eslint-disable indent */
function getTabs() { function getTabs() {
return [{ return [{
@ -59,7 +73,7 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
} }
return function (view, params) { export default function (view, params) {
function reload() { function reload() {
loading.show(); loading.show();
loadResume(); loadResume();
@ -67,7 +81,7 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
function loadNextUp() { function loadNextUp() {
var query = { const query = {
Limit: 24, Limit: 24,
Fields: 'PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo', Fields: 'PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo',
UserId: ApiClient.getCurrentUserId(), UserId: ApiClient.getCurrentUserId(),
@ -83,7 +97,7 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
view.querySelector('.noNextUpItems').classList.remove('hide'); view.querySelector('.noNextUpItems').classList.remove('hide');
} }
var container = view.querySelector('#nextUpItems'); const container = view.querySelector('#nextUpItems');
cardBuilder.buildCards(result.Items, { cardBuilder.buildCards(result.Items, {
itemsContainer: container, itemsContainer: container,
preferThumb: true, preferThumb: true,
@ -98,7 +112,7 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
}); });
loading.hide(); loading.hide();
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(view); autoFocuser.autoFocus(view);
}); });
}); });
@ -113,10 +127,10 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
function loadResume() { function loadResume() {
var parentId = libraryMenu.getTopParentId(); const parentId = libraryMenu.getTopParentId();
var screenWidth = dom.getWindowSize().innerWidth; const screenWidth = dom.getWindowSize().innerWidth;
var limit = screenWidth >= 1600 ? 5 : 6; const limit = screenWidth >= 1600 ? 5 : 6;
var options = { const options = {
SortBy: 'DatePlayed', SortBy: 'DatePlayed',
SortOrder: 'Descending', SortOrder: 'Descending',
IncludeItemTypes: 'Episode', IncludeItemTypes: 'Episode',
@ -137,8 +151,8 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
view.querySelector('#resumableSection').classList.add('hide'); view.querySelector('#resumableSection').classList.add('hide');
} }
var allowBottomPadding = !enableScrollX(); const allowBottomPadding = !enableScrollX();
var container = view.querySelector('#resumableItems'); const container = view.querySelector('#resumableItems');
cardBuilder.buildCards(result.Items, { cardBuilder.buildCards(result.Items, {
itemsContainer: container, itemsContainer: container,
preferThumb: true, preferThumb: true,
@ -160,7 +174,7 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
function onTabChange(e) { function onTabChange(e) {
var newIndex = parseInt(e.detail.selectedTabIndex); const newIndex = parseInt(e.detail.selectedTabIndex);
loadTab(view, newIndex); loadTab(view, newIndex);
} }
@ -173,49 +187,50 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
function getTabController(page, index, callback) { function getTabController(page, index, callback) {
var depends = []; let depends;
switch (index) { switch (index) {
case 0: case 0:
depends.push('controllers/shows/tvshows'); depends = 'controllers/shows/tvshows';
break; break;
case 1: case 1:
depends = 'controllers/shows/tvrecommended';
break; break;
case 2: case 2:
depends.push('controllers/shows/tvlatest'); depends = 'controllers/shows/tvlatest';
break; break;
case 3: case 3:
depends.push('controllers/shows/tvupcoming'); depends = 'controllers/shows/tvupcoming';
break; break;
case 4: case 4:
depends.push('controllers/shows/tvgenres'); depends = 'controllers/shows/tvgenres';
break; break;
case 5: case 5:
depends.push('controllers/shows/tvstudios'); depends = 'controllers/shows/tvstudios';
break; break;
case 6: case 6:
depends.push('controllers/shows/episodes'); depends = 'controllers/shows/episodes';
break; break;
case 7: case 7:
depends.push('scripts/searchtab'); depends = 'scripts/searchtab';
} }
require(depends, function (controllerFactory) { import(depends).then(({default: controllerFactory}) => {
var tabContent; let tabContent;
if (index === 1) { if (index === 1) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
self.tabContent = tabContent; self.tabContent = tabContent;
} }
var controller = tabControllers[index]; let controller = tabControllers[index];
if (!controller) { if (!controller) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"); tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
@ -270,7 +285,7 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
function onWebSocketMessage(e, data) { function onWebSocketMessage(e, data) {
var msg = data; const msg = data;
if (msg.MessageType === 'UserDataChanged' && msg.Data.UserId == ApiClient.getCurrentUserId()) { if (msg.MessageType === 'UserDataChanged' && msg.Data.UserId == ApiClient.getCurrentUserId()) {
renderedTabs = []; renderedTabs = [];
@ -285,13 +300,13 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
} }
var isViewRestored; let isViewRestored;
var self = this; const self = this;
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)); let currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
var initialTabIndex = currentTabIndex; let initialTabIndex = currentTabIndex;
self.initTab = function () { self.initTab = function () {
var tabContent = self.tabContent; const tabContent = self.tabContent;
setScrollClasses(tabContent.querySelector('#resumableItems'), enableScrollX()); setScrollClasses(tabContent.querySelector('#resumableItems'), enableScrollX());
}; };
@ -299,14 +314,14 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
reload(); reload();
}; };
var tabControllers = []; const tabControllers = [];
var renderedTabs = []; let renderedTabs = [];
setScrollClasses(view.querySelector('#resumableItems'), enableScrollX()); setScrollClasses(view.querySelector('#resumableItems'), enableScrollX());
view.addEventListener('viewshow', function (e) { view.addEventListener('viewshow', function (e) {
isViewRestored = e.detail.isRestored; isViewRestored = e.detail.isRestored;
initTabs(); initTabs();
if (!view.getAttribute('data-title')) { if (!view.getAttribute('data-title')) {
var parentId = params.topParentId; const parentId = params.topParentId;
if (parentId) { if (parentId) {
ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) { ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
@ -335,5 +350,6 @@ define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'do
} }
}); });
}); });
}; }
});
/* eslint-enable indent */

View file

@ -1,10 +1,21 @@
define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'alphaPicker', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, AlphaPicker, userSettings, globalize) { import layoutManager from 'layoutManager';
'use strict'; import loading from 'loading';
import events from 'events';
import libraryBrowser from 'libraryBrowser';
import imageLoader from 'imageLoader';
import listView from 'listView';
import cardBuilder from 'cardBuilder';
import AlphaPicker from 'alphaPicker';
import * as userSettings from 'userSettings';
import globalize from 'globalize';
import 'emby-itemscontainer';
return function (view, params, tabContent) { /* eslint-disable indent */
export default function (view, params, tabContent) {
function getPageData(context) { function getPageData(context) {
var key = getSavedQueryKey(context); const key = getSavedQueryKey(context);
var pageData = data[key]; let pageData = data[key];
if (!pageData) { if (!pageData) {
pageData = data[key] = { pageData = data[key] = {
@ -45,8 +56,8 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
} }
function onViewStyleChange() { function onViewStyleChange() {
var viewStyle = self.getCurrentViewStyle(); const viewStyle = self.getCurrentViewStyle();
var itemsContainer = tabContent.querySelector('.itemsContainer'); const itemsContainer = tabContent.querySelector('.itemsContainer');
if ('List' == viewStyle) { if ('List' == viewStyle) {
itemsContainer.classList.add('vertical-list'); itemsContainer.classList.add('vertical-list');
@ -62,7 +73,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
function reloadItems(page) { function reloadItems(page) {
loading.show(); loading.show();
isLoading = true; isLoading = true;
var query = getQuery(page); const query = getQuery(page);
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) { ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() { function onNextPageClick() {
if (isLoading) { if (isLoading) {
@ -88,8 +99,8 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
window.scrollTo(0, 0); window.scrollTo(0, 0);
updateFilterControls(page); updateFilterControls(page);
var html; let html;
var pagingHtml = libraryBrowser.getQueryPagingHtml({ const pagingHtml = libraryBrowser.getQueryPagingHtml({
startIndex: query.StartIndex, startIndex: query.StartIndex,
limit: query.Limit, limit: query.Limit,
totalRecordCount: result.TotalRecordCount, totalRecordCount: result.TotalRecordCount,
@ -99,7 +110,7 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
sortButton: false, sortButton: false,
filterButton: false filterButton: false
}); });
var viewStyle = self.getCurrentViewStyle(); const viewStyle = self.getCurrentViewStyle();
if (viewStyle == 'Thumb') { if (viewStyle == 'Thumb') {
html = cardBuilder.getCardsHtml({ html = cardBuilder.getCardsHtml({
items: result.Items, items: result.Items,
@ -156,49 +167,48 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
showYear: true showYear: true
}); });
} }
var i;
var length;
var elems = tabContent.querySelectorAll('.paging');
for (i = 0, length = elems.length; i < length; i++) { let elems = tabContent.querySelectorAll('.paging');
for (let i = 0, length = elems.length; i < length; i++) {
elems[i].innerHTML = pagingHtml; elems[i].innerHTML = pagingHtml;
} }
elems = tabContent.querySelectorAll('.btnNextPage'); elems = tabContent.querySelectorAll('.btnNextPage');
for (i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener('click', onNextPageClick); elems[i].addEventListener('click', onNextPageClick);
} }
elems = tabContent.querySelectorAll('.btnPreviousPage'); elems = tabContent.querySelectorAll('.btnPreviousPage');
for (i = 0, length = elems.length; i < length; i++) { for (let i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener('click', onPreviousPageClick); elems[i].addEventListener('click', onPreviousPageClick);
} }
var itemsContainer = tabContent.querySelector('.itemsContainer'); const itemsContainer = tabContent.querySelector('.itemsContainer');
itemsContainer.innerHTML = html; itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer); imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query); libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
loading.hide(); loading.hide();
isLoading = false; isLoading = false;
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(page); autoFocuser.autoFocus(page);
}); });
}); });
} }
function updateFilterControls(tabContent) { function updateFilterControls(tabContent) {
var query = getQuery(tabContent); const query = getQuery(tabContent);
self.alphaPicker.value(query.NameStartsWithOrGreater); self.alphaPicker.value(query.NameStartsWithOrGreater);
} }
var self = this; const self = this;
var data = {}; const data = {};
var isLoading = false; let isLoading = false;
self.showFilterMenu = function () { self.showFilterMenu = function () {
require(['components/filterdialog/filterdialog'], function ({default: filterDialogFactory}) { import('components/filterdialog/filterdialog').then(({default: filterDialogFactory}) => {
var filterDialog = new filterDialogFactory({ const filterDialog = new filterDialogFactory({
query: getQuery(tabContent), query: getQuery(tabContent),
mode: 'series', mode: 'series',
serverId: ApiClient.serverId() serverId: ApiClient.serverId()
@ -216,17 +226,17 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
}; };
function initPage(tabContent) { function initPage(tabContent) {
var alphaPickerElement = tabContent.querySelector('.alphaPicker'); const alphaPickerElement = tabContent.querySelector('.alphaPicker');
var itemsContainer = tabContent.querySelector('.itemsContainer'); const itemsContainer = tabContent.querySelector('.itemsContainer');
alphaPickerElement.addEventListener('alphavaluechanged', function (e) { alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
var newValue = e.detail.value; const newValue = e.detail.value;
var query = getQuery(tabContent); const query = getQuery(tabContent);
query.NameStartsWithOrGreater = newValue; query.NameStartsWithOrGreater = newValue;
query.StartIndex = 0; query.StartIndex = 0;
reloadItems(tabContent); reloadItems(tabContent);
}); });
self.alphaPicker = new AlphaPicker.default({ self.alphaPicker = new AlphaPicker({
element: alphaPickerElement, element: alphaPickerElement,
valueChangeEvent: 'click' valueChangeEvent: 'click'
}); });
@ -267,12 +277,12 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
button: e.target button: e.target
}); });
}); });
var btnSelectView = tabContent.querySelector('.btnSelectView'); const btnSelectView = tabContent.querySelector('.btnSelectView');
btnSelectView.addEventListener('click', function (e) { btnSelectView.addEventListener('click', function (e) {
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(',')); libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(','));
}); });
btnSelectView.addEventListener('layoutchange', function (e) { btnSelectView.addEventListener('layoutchange', function (e) {
var viewStyle = e.detail.viewStyle; const viewStyle = e.detail.viewStyle;
getPageData(tabContent).view = viewStyle; getPageData(tabContent).view = viewStyle;
libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle); libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
getQuery(tabContent).StartIndex = 0; getQuery(tabContent).StartIndex = 0;
@ -290,5 +300,6 @@ define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', '
}; };
self.destroy = function () {}; self.destroy = function () {};
}; }
});
/* eslint-enable indent */

View file

@ -1,9 +1,13 @@
define(['loading', 'libraryBrowser', 'cardBuilder', 'apphost'], function (loading, libraryBrowser, cardBuilder, appHost) { import loading from 'loading';
'use strict'; import libraryBrowser from 'libraryBrowser';
import cardBuilder from 'cardBuilder';
import appHost from 'apphost';
/* eslint-disable indent */
function getQuery(params) { function getQuery(params) {
var key = getSavedQueryKey(); const key = getSavedQueryKey();
var pageData = data[key]; let pageData = data[key];
if (!pageData) { if (!pageData) {
pageData = data[key] = { pageData = data[key] = {
@ -27,14 +31,14 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'apphost'], function (loadin
} }
function getPromise(context, params) { function getPromise(context, params) {
var query = getQuery(params); const query = getQuery(params);
loading.show(); loading.show();
return ApiClient.getStudios(ApiClient.getCurrentUserId(), query); return ApiClient.getStudios(ApiClient.getCurrentUserId(), query);
} }
function reloadItems(context, params, promise) { function reloadItems(context, params, promise) {
promise.then(function (result) { promise.then(function (result) {
var elem = context.querySelector('#items'); const elem = context.querySelector('#items');
cardBuilder.buildCards(result.Items, { cardBuilder.buildCards(result.Items, {
itemsContainer: elem, itemsContainer: elem,
shape: 'backdrop', shape: 'backdrop',
@ -47,16 +51,17 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'apphost'], function (loadin
}); });
loading.hide(); loading.hide();
require(['autoFocuser'], function (autoFocuser) { import('autoFocuser').then(({default: autoFocuser}) => {
autoFocuser.autoFocus(context); autoFocuser.autoFocus(context);
}); });
}); });
} }
var data = {}; const data = {};
return function (view, params, tabContent) {
var promise; export default function (view, params, tabContent) {
var self = this; let promise;
const self = this;
self.preRender = function () { self.preRender = function () {
promise = getPromise(view, params); promise = getPromise(view, params);
@ -65,5 +70,6 @@ define(['loading', 'libraryBrowser', 'cardBuilder', 'apphost'], function (loadin
self.renderTab = function () { self.renderTab = function () {
reloadItems(tabContent, params, promise); reloadItems(tabContent, params, promise);
}; };
}; }
});
/* eslint-enable indent */

View file

@ -1,9 +1,19 @@
define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'globalize', 'scrollStyles', 'emby-itemscontainer'], function (layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader, globalize) { import layoutManager from 'layoutManager';
'use strict'; import loading from 'loading';
import datetime from 'datetime';
import libraryBrowser from 'libraryBrowser';
import cardBuilder from 'cardBuilder';
import appHost from 'apphost';
import imageLoader from 'imageLoader';
import globalize from 'globalize';
import 'scrollStyles';
import 'emby-itemscontainer';
/* eslint-disable indent */
function getUpcomingPromise(context, params) { function getUpcomingPromise(context, params) {
loading.show(); loading.show();
var query = { const query = {
Limit: 48, Limit: 48,
Fields: 'AirTime,UserData', Fields: 'AirTime,UserData',
UserId: ApiClient.getCurrentUserId(), UserId: ApiClient.getCurrentUserId(),
@ -17,7 +27,7 @@ define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder',
function loadUpcoming(context, params, promise) { function loadUpcoming(context, params, promise) {
promise.then(function (result) { promise.then(function (result) {
var items = result.Items; const items = result.Items;
if (items.length) { if (items.length) {
context.querySelector('.noItemsMessage').style.display = 'none'; context.querySelector('.noItemsMessage').style.display = 'none';
@ -39,19 +49,17 @@ define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder',
} }
function renderUpcoming(elem, items) { function renderUpcoming(elem, items) {
var i; const groups = [];
var length; let currentGroupName = '';
var groups = []; let currentGroup = [];
var currentGroupName = '';
var currentGroup = [];
for (i = 0, length = items.length; i < length; i++) { for (let i = 0, length = items.length; i < length; i++) {
var item = items[i]; const item = items[i];
var dateText = ''; let dateText = '';
if (item.PremiereDate) { if (item.PremiereDate) {
try { try {
var premiereDate = datetime.parseISO8601Date(item.PremiereDate, true); const premiereDate = datetime.parseISO8601Date(item.PremiereDate, true);
dateText = datetime.isRelativeDay(premiereDate, -1) ? globalize.translate('Yesterday') : datetime.toLocaleDateString(premiereDate, { dateText = datetime.isRelativeDay(premiereDate, -1) ? globalize.translate('Yesterday') : datetime.toLocaleDateString(premiereDate, {
weekday: 'long', weekday: 'long',
month: 'short', month: 'short',
@ -77,17 +85,17 @@ define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder',
} }
} }
var html = ''; let html = '';
for (i = 0, length = groups.length; i < length; i++) { for (let i = 0, length = groups.length; i < length; i++) {
var group = groups[i]; const group = groups[i];
html += '<div class="verticalSection">'; html += '<div class="verticalSection">';
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + '</h2>'; html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + '</h2>';
var allowBottomPadding = true; let allowBottomPadding = true;
if (enableScrollX()) { if (enableScrollX()) {
allowBottomPadding = false; allowBottomPadding = false;
var scrollXClass = 'scrollX hiddenScrollX'; let scrollXClass = 'scrollX hiddenScrollX';
if (layoutManager.tv) { if (layoutManager.tv) {
scrollXClass += ' smoothScrollX'; scrollXClass += ' smoothScrollX';
@ -98,7 +106,7 @@ define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder',
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">'; html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
} }
var supportsImageAnalysis = appHost.supports('imageanalysis'); let supportsImageAnalysis = appHost.supports('imageanalysis');
supportsImageAnalysis = false; supportsImageAnalysis = false;
html += cardBuilder.getCardsHtml({ html += cardBuilder.getCardsHtml({
items: group.items, items: group.items,
@ -124,9 +132,9 @@ define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder',
imageLoader.lazyChildren(elem); imageLoader.lazyChildren(elem);
} }
return function (view, params, tabContent) { export default function (view, params, tabContent) {
var upcomingPromise; let upcomingPromise;
var self = this; const self = this;
self.preRender = function () { self.preRender = function () {
upcomingPromise = getUpcomingPromise(view, params); upcomingPromise = getUpcomingPromise(view, params);
@ -135,5 +143,6 @@ define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder',
self.renderTab = function () { self.renderTab = function () {
loadUpcoming(tabContent, params, upcomingPromise); loadUpcoming(tabContent, params, upcomingPromise);
}; };
}; }
});
/* eslint-enable indent */

View file

@ -1,70 +1,75 @@
define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css!./emby-button', 'registerElement'], function (browser, dom, layoutManager, shell, appRouter, appHost) { import browser from 'browser';
'use strict'; import dom from 'dom';
import layoutManager from 'layoutManager';
import shell from 'shell';
import appRouter from 'appRouter';
import appHost from 'apphost';
import 'css!./emby-button';
import 'registerElement';
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); const EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype);
var EmbyLinkButtonPrototype = Object.create(HTMLAnchorElement.prototype); const EmbyLinkButtonPrototype = Object.create(HTMLAnchorElement.prototype);
function onAnchorClick(e) { function onAnchorClick(e) {
var href = this.getAttribute('href') || ''; const href = this.getAttribute('href') || '';
if (href !== '#') { if (href !== '#') {
if (this.getAttribute('target')) { if (this.getAttribute('target')) {
if (!appHost.supports('targetblank')) { if (!appHost.supports('targetblank')) {
e.preventDefault(); e.preventDefault();
shell.openUrl(href); shell.openUrl(href);
}
} else {
appRouter.handleAnchorClick(e);
} }
} else { } else {
e.preventDefault(); appRouter.handleAnchorClick(e);
} }
} else {
e.preventDefault();
}
}
EmbyButtonPrototype.createdCallback = function () {
if (this.classList.contains('emby-button')) {
return;
} }
EmbyButtonPrototype.createdCallback = function () { this.classList.add('emby-button');
if (this.classList.contains('emby-button')) { // TODO replace all instances of element-showfocus with this method
return; if (layoutManager.tv) {
} // handles all special css for tv layout
// this method utilizes class chaining
this.classList.add('show-focus');
}
};
this.classList.add('emby-button'); EmbyButtonPrototype.attachedCallback = function () {
// TODO replace all instances of element-showfocus with this method if (this.tagName === 'A') {
if (layoutManager.tv) { dom.removeEventListener(this, 'click', onAnchorClick, {});
// handles all special css for tv layout dom.addEventListener(this, 'click', onAnchorClick, {});
// this method utilizes class chaining
this.classList.add('show-focus');
}
};
EmbyButtonPrototype.attachedCallback = function () { if (this.getAttribute('data-autohide') === 'true') {
if (this.tagName === 'A') { if (appHost.supports('externallinks')) {
dom.removeEventListener(this, 'click', onAnchorClick, {}); this.classList.remove('hide');
dom.addEventListener(this, 'click', onAnchorClick, {}); } else {
this.classList.add('hide');
if (this.getAttribute('data-autohide') === 'true') {
if (appHost.supports('externallinks')) {
this.classList.remove('hide');
} else {
this.classList.add('hide');
}
} }
} }
}; }
};
EmbyButtonPrototype.detachedCallback = function () { EmbyButtonPrototype.detachedCallback = function () {
dom.removeEventListener(this, 'click', onAnchorClick, {}); dom.removeEventListener(this, 'click', onAnchorClick, {});
}; };
EmbyLinkButtonPrototype.createdCallback = EmbyButtonPrototype.createdCallback; EmbyLinkButtonPrototype.createdCallback = EmbyButtonPrototype.createdCallback;
EmbyLinkButtonPrototype.attachedCallback = EmbyButtonPrototype.attachedCallback; EmbyLinkButtonPrototype.attachedCallback = EmbyButtonPrototype.attachedCallback;
document.registerElement('emby-button', { document.registerElement('emby-button', {
prototype: EmbyButtonPrototype, prototype: EmbyButtonPrototype,
extends: 'button' extends: 'button'
});
document.registerElement('emby-linkbutton', {
prototype: EmbyLinkButtonPrototype,
extends: 'a'
});
return EmbyButtonPrototype;
}); });
document.registerElement('emby-linkbutton', {
prototype: EmbyLinkButtonPrototype,
extends: 'a'
});
export default EmbyButtonPrototype;

View file

@ -1,18 +1,18 @@
define(['layoutManager', 'css!./emby-button', 'registerElement'], function (layoutManager) { import layoutManager from 'layoutManager';
'use strict'; import 'css!./emby-button';
import 'registerElement';
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype); const EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype);
EmbyButtonPrototype.createdCallback = function () { EmbyButtonPrototype.createdCallback = function () {
this.classList.add('paper-icon-button-light'); this.classList.add('paper-icon-button-light');
if (layoutManager.tv) { if (layoutManager.tv) {
this.classList.add('show-focus'); this.classList.add('show-focus');
} }
}; };
document.registerElement('paper-icon-button-light', { document.registerElement('paper-icon-button-light', {
prototype: EmbyButtonPrototype, prototype: EmbyButtonPrototype,
extends: 'button' extends: 'button'
});
}); });

View file

@ -1,18 +1,22 @@
define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], function (browser) { import browser from 'browser';
'use strict'; import 'css!./emby-collapse';
import 'registerElement';
import 'emby-button';
var EmbyButtonPrototype = Object.create(HTMLDivElement.prototype); /* eslint-disable indent */
const EmbyButtonPrototype = Object.create(HTMLDivElement.prototype);
function slideDownToShow(button, elem) { function slideDownToShow(button, elem) {
elem.classList.remove('hide'); elem.classList.remove('hide');
elem.classList.add('expanded'); elem.classList.add('expanded');
elem.style.height = 'auto'; elem.style.height = 'auto';
var height = elem.offsetHeight + 'px'; const height = elem.offsetHeight + 'px';
elem.style.height = '0'; elem.style.height = '0';
// trigger reflow // trigger reflow
var newHeight = elem.offsetHeight; const newHeight = elem.offsetHeight;
elem.style.height = height; elem.style.height = height;
setTimeout(function () { setTimeout(function () {
@ -24,7 +28,7 @@ define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], fun
elem.style.height = 'auto'; elem.style.height = 'auto';
}, 300); }, 300);
var icon = button.querySelector('.material-icons'); const icon = button.querySelector('.material-icons');
//icon.innerHTML = 'expand_less'; //icon.innerHTML = 'expand_less';
icon.classList.add('emby-collapse-expandIconExpanded'); icon.classList.add('emby-collapse-expandIconExpanded');
} }
@ -33,7 +37,7 @@ define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], fun
elem.style.height = elem.offsetHeight + 'px'; elem.style.height = elem.offsetHeight + 'px';
// trigger reflow // trigger reflow
var newHeight = elem.offsetHeight; const newHeight = elem.offsetHeight;
elem.classList.remove('expanded'); elem.classList.remove('expanded');
elem.style.height = '0'; elem.style.height = '0';
@ -46,15 +50,15 @@ define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], fun
} }
}, 300); }, 300);
var icon = button.querySelector('.material-icons'); const icon = button.querySelector('.material-icons');
//icon.innerHTML = 'expand_more'; //icon.innerHTML = 'expand_more';
icon.classList.remove('emby-collapse-expandIconExpanded'); icon.classList.remove('emby-collapse-expandIconExpanded');
} }
function onButtonClick(e) { function onButtonClick(e) {
var button = this; const button = this;
var collapseContent = button.parentNode.querySelector('.collapseContent'); const collapseContent = button.parentNode.querySelector('.collapseContent');
if (collapseContent.expanded) { if (collapseContent.expanded) {
collapseContent.expanded = false; collapseContent.expanded = false;
@ -73,18 +77,18 @@ define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], fun
this.classList.add('emby-collapse'); this.classList.add('emby-collapse');
var collapseContent = this.querySelector('.collapseContent'); const collapseContent = this.querySelector('.collapseContent');
if (collapseContent) { if (collapseContent) {
collapseContent.classList.add('hide'); collapseContent.classList.add('hide');
} }
var title = this.getAttribute('title'); const title = this.getAttribute('title');
var html = '<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button iconRight"><h3 class="emby-collapsible-title" title="' + title + '">' + title + '</h3><span class="material-icons emby-collapse-expandIcon expand_more"></span></button>'; const html = '<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button iconRight"><h3 class="emby-collapsible-title" title="' + title + '">' + title + '</h3><span class="material-icons emby-collapse-expandIcon expand_more"></span></button>';
this.insertAdjacentHTML('afterbegin', html); this.insertAdjacentHTML('afterbegin', html);
var button = this.querySelector('.emby-collapsible-button'); const button = this.querySelector('.emby-collapsible-button');
button.addEventListener('click', onButtonClick); button.addEventListener('click', onButtonClick);
@ -97,4 +101,5 @@ define(['browser', 'css!./emby-collapse', 'registerElement', 'emby-button'], fun
prototype: EmbyButtonPrototype, prototype: EmbyButtonPrototype,
extends: 'div' extends: 'div'
}); });
});
/* eslint-enable indent */

View file

@ -1,18 +1,23 @@
define(['layoutManager', 'browser', 'dom', 'css!./emby-input', 'registerElement'], function (layoutManager, browser, dom) { import layoutManager from 'layoutManager';
'use strict'; import browser from 'browser';
import dom from 'dom';
import 'css!./emby-input';
import 'registerElement';
var EmbyInputPrototype = Object.create(HTMLInputElement.prototype); /* eslint-disable indent */
var inputId = 0; const EmbyInputPrototype = Object.create(HTMLInputElement.prototype);
var supportsFloatingLabel = false;
let inputId = 0;
let supportsFloatingLabel = false;
if (Object.getOwnPropertyDescriptor && Object.defineProperty) { if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value'); const descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, 'value');
// descriptor returning null in webos // descriptor returning null in webos
if (descriptor && descriptor.configurable) { if (descriptor && descriptor.configurable) {
var baseSetMethod = descriptor.set; const baseSetMethod = descriptor.set;
descriptor.set = function (value) { descriptor.set = function (value) {
baseSetMethod.call(this, value); baseSetMethod.call(this, value);
@ -39,9 +44,9 @@ define(['layoutManager', 'browser', 'dom', 'css!./emby-input', 'registerElement'
this.classList.add('emby-input'); this.classList.add('emby-input');
var parentNode = this.parentNode; const parentNode = this.parentNode;
var document = this.ownerDocument; const document = this.ownerDocument;
var label = document.createElement('label'); const label = document.createElement('label');
label.innerHTML = this.getAttribute('label') || ''; label.innerHTML = this.getAttribute('label') || '';
label.classList.add('inputLabel'); label.classList.add('inputLabel');
label.classList.add('inputLabelUnfocused'); label.classList.add('inputLabelUnfocused');
@ -95,12 +100,12 @@ define(['layoutManager', 'browser', 'dom', 'css!./emby-input', 'registerElement'
function onChange() { function onChange() {
var 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 {
var instanceSupportsFloat = supportsFloatingLabel && this.type !== 'date' && this.type !== 'time'; const instanceSupportsFloat = supportsFloatingLabel && this.type !== 'date' && this.type !== 'time';
if (instanceSupportsFloat) { if (instanceSupportsFloat) {
label.classList.add('inputLabel-float'); label.classList.add('inputLabel-float');
@ -121,4 +126,5 @@ define(['layoutManager', 'browser', 'dom', 'css!./emby-input', 'registerElement'
prototype: EmbyInputPrototype, prototype: EmbyInputPrototype,
extends: 'input' extends: 'input'
}); });
});
/* eslint-enable indent */

View file

@ -150,7 +150,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
function alertText(text, title) { function alertText(text, title) {
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert({ alert.default({
text: text, text: text,
title: title title: title
}); });

View file

@ -1,15 +1,16 @@
define(['globalize'], function (globalize) { import globalize from 'globalize';
'use strict';
function parseISO8601Date(s, toLocal) { /* eslint-disable indent */
export function parseISO8601Date(s, toLocal) {
// parenthese matches: // parenthese matches:
// year month day hours minutes seconds // year month day hours minutes seconds
// dotmilliseconds // dotmilliseconds
// tzstring plusminus hours minutes // tzstring plusminus hours minutes
var re = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|([+-])(\d{2}):(\d{2}))?/; const re = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|([+-])(\d{2}):(\d{2}))?/;
var d = s.match(re); const d = s.match(re);
// "2010-12-07T11:00:00.000-09:00" parses to: // "2010-12-07T11:00:00.000-09:00" parses to:
// ["2010-12-07T11:00:00.000-09:00", "2010", "12", "07", "11", // ["2010-12-07T11:00:00.000-09:00", "2010", "12", "07", "11",
@ -24,8 +25,8 @@ define(['globalize'], function (globalize) {
} }
// parse strings, leading zeros into proper ints // parse strings, leading zeros into proper ints
var a = [1, 2, 3, 4, 5, 6, 10, 11]; const a = [1, 2, 3, 4, 5, 6, 10, 11];
for (var i in a) { for (let i in a) {
d[a[i]] = parseInt(d[a[i]], 10); d[a[i]] = parseInt(d[a[i]], 10);
} }
d[7] = parseFloat(d[7]); d[7] = parseFloat(d[7]);
@ -33,7 +34,7 @@ define(['globalize'], function (globalize) {
// Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]]) // Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]])
// note that month is 0-11, not 1-12 // note that month is 0-11, not 1-12
// see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC // see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC
var ms = Date.UTC(d[1], d[2] - 1, d[3], d[4], d[5], d[6]); let ms = Date.UTC(d[1], d[2] - 1, d[3], d[4], d[5], d[6]);
// if there are milliseconds, add them // if there are milliseconds, add them
if (d[7] > 0) { if (d[7] > 0) {
@ -42,7 +43,7 @@ define(['globalize'], function (globalize) {
// if there's a timezone, calculate it // if there's a timezone, calculate it
if (d[8] !== 'Z' && d[10]) { if (d[8] !== 'Z' && d[10]) {
var offset = d[10] * 60 * 60 * 1000; let offset = d[10] * 60 * 60 * 1000;
if (d[11]) { if (d[11]) {
offset += d[11] * 60 * 1000; offset += d[11] * 60 * 1000;
} }
@ -58,14 +59,14 @@ define(['globalize'], function (globalize) {
return new Date(ms); return new Date(ms);
} }
function getDisplayRunningTime(ticks) { export function getDisplayRunningTime(ticks) {
var ticksPerHour = 36000000000; const ticksPerHour = 36000000000;
var ticksPerMinute = 600000000; const ticksPerMinute = 600000000;
var ticksPerSecond = 10000000; const ticksPerSecond = 10000000;
var parts = []; const parts = [];
var hours = ticks / ticksPerHour; let hours = ticks / ticksPerHour;
hours = Math.floor(hours); hours = Math.floor(hours);
if (hours) { if (hours) {
@ -74,7 +75,7 @@ define(['globalize'], function (globalize) {
ticks -= (hours * ticksPerHour); ticks -= (hours * ticksPerHour);
var minutes = ticks / ticksPerMinute; let minutes = ticks / ticksPerMinute;
minutes = Math.floor(minutes); minutes = Math.floor(minutes);
ticks -= (minutes * ticksPerMinute); ticks -= (minutes * ticksPerMinute);
@ -84,7 +85,7 @@ define(['globalize'], function (globalize) {
} }
parts.push(minutes); parts.push(minutes);
var seconds = ticks / ticksPerSecond; let seconds = ticks / ticksPerSecond;
seconds = Math.floor(seconds); seconds = Math.floor(seconds);
if (seconds < 10) { if (seconds < 10) {
@ -95,7 +96,7 @@ define(['globalize'], function (globalize) {
return parts.join(':'); return parts.join(':');
} }
var toLocaleTimeStringSupportsLocales = function () { const toLocaleTimeStringSupportsLocales = function () {
try { try {
new Date().toLocaleTimeString('i'); new Date().toLocaleTimeString('i');
} catch (e) { } catch (e) {
@ -106,9 +107,9 @@ define(['globalize'], function (globalize) {
function getOptionList(options) { function getOptionList(options) {
var list = []; const list = [];
for (var i in options) { for (const i in options) {
list.push({ list.push({
name: i, name: i,
value: options[i] value: options[i]
@ -118,7 +119,7 @@ define(['globalize'], function (globalize) {
return list; return list;
} }
function toLocaleString(date, options) { export function toLocaleString(date, options) {
if (!date) { if (!date) {
throw new Error('date cannot be null'); throw new Error('date cannot be null');
@ -128,7 +129,7 @@ define(['globalize'], function (globalize) {
if (toLocaleTimeStringSupportsLocales) { if (toLocaleTimeStringSupportsLocales) {
var currentLocale = globalize.getCurrentDateTimeLocale(); const currentLocale = globalize.getCurrentDateTimeLocale();
if (currentLocale) { if (currentLocale) {
return date.toLocaleString(currentLocale, options); return date.toLocaleString(currentLocale, options);
@ -138,7 +139,7 @@ define(['globalize'], function (globalize) {
return date.toLocaleString(); return date.toLocaleString();
} }
function toLocaleDateString(date, options) { export function toLocaleDateString(date, options) {
if (!date) { if (!date) {
throw new Error('date cannot be null'); throw new Error('date cannot be null');
@ -148,7 +149,7 @@ define(['globalize'], function (globalize) {
if (toLocaleTimeStringSupportsLocales) { if (toLocaleTimeStringSupportsLocales) {
var currentLocale = globalize.getCurrentDateTimeLocale(); const currentLocale = globalize.getCurrentDateTimeLocale();
if (currentLocale) { if (currentLocale) {
return date.toLocaleDateString(currentLocale, options); return date.toLocaleDateString(currentLocale, options);
@ -156,9 +157,9 @@ define(['globalize'], function (globalize) {
} }
// This is essentially a hard-coded polyfill // This is essentially a hard-coded polyfill
var optionList = getOptionList(options); const optionList = getOptionList(options);
if (optionList.length === 1 && optionList[0].name === 'weekday') { if (optionList.length === 1 && optionList[0].name === 'weekday') {
var weekday = []; const weekday = [];
weekday[0] = 'Sun'; weekday[0] = 'Sun';
weekday[1] = 'Mon'; weekday[1] = 'Mon';
weekday[2] = 'Tue'; weekday[2] = 'Tue';
@ -172,7 +173,7 @@ define(['globalize'], function (globalize) {
return date.toLocaleDateString(); return date.toLocaleDateString();
} }
function toLocaleTimeString(date, options) { export function toLocaleTimeString(date, options) {
if (!date) { if (!date) {
throw new Error('date cannot be null'); throw new Error('date cannot be null');
@ -182,7 +183,7 @@ define(['globalize'], function (globalize) {
if (toLocaleTimeStringSupportsLocales) { if (toLocaleTimeStringSupportsLocales) {
var currentLocale = globalize.getCurrentDateTimeLocale(); const currentLocale = globalize.getCurrentDateTimeLocale();
if (currentLocale) { if (currentLocale) {
return date.toLocaleTimeString(currentLocale, options); return date.toLocaleTimeString(currentLocale, options);
@ -192,7 +193,7 @@ define(['globalize'], function (globalize) {
return date.toLocaleTimeString(); return date.toLocaleTimeString();
} }
function getDisplayTime(date) { export function getDisplayTime(date) {
if (!date) { if (!date) {
throw new Error('date cannot be null'); throw new Error('date cannot be null');
@ -217,19 +218,19 @@ define(['globalize'], function (globalize) {
}); });
} }
var time = toLocaleTimeString(date); let time = toLocaleTimeString(date);
var timeLower = time.toLowerCase(); const timeLower = time.toLowerCase();
if (timeLower.indexOf('am') !== -1 || timeLower.indexOf('pm') !== -1) { if (timeLower.indexOf('am') !== -1 || timeLower.indexOf('pm') !== -1) {
time = timeLower; time = timeLower;
var hour = date.getHours() % 12; let hour = date.getHours() % 12;
var suffix = date.getHours() > 11 ? 'pm' : 'am'; const suffix = date.getHours() > 11 ? 'pm' : 'am';
if (!hour) { if (!hour) {
hour = 12; hour = 12;
} }
var minutes = date.getMinutes(); let minutes = date.getMinutes();
if (minutes < 10) { if (minutes < 10) {
minutes = '0' + minutes; minutes = '0' + minutes;
@ -239,7 +240,7 @@ define(['globalize'], function (globalize) {
time = hour + minutes + suffix; time = hour + minutes + suffix;
} else { } else {
var timeParts = time.split(':'); const timeParts = time.split(':');
// Trim off seconds // Trim off seconds
if (timeParts.length > 2) { if (timeParts.length > 2) {
@ -253,21 +254,21 @@ define(['globalize'], function (globalize) {
return time; return time;
} }
function isRelativeDay(date, offsetInDays) { export function isRelativeDay(date, offsetInDays) {
if (!date) { if (!date) {
throw new Error('date cannot be null'); throw new Error('date cannot be null');
} }
var yesterday = new Date(); const yesterday = new Date();
var day = yesterday.getDate() + offsetInDays; const day = yesterday.getDate() + offsetInDays;
yesterday.setDate(day); // automatically adjusts month/year appropriately yesterday.setDate(day); // automatically adjusts month/year appropriately
return date.getFullYear() === yesterday.getFullYear() && date.getMonth() === yesterday.getMonth() && date.getDate() === day; return date.getFullYear() === yesterday.getFullYear() && date.getMonth() === yesterday.getMonth() && date.getDate() === day;
} }
return { export default {
parseISO8601Date: parseISO8601Date, parseISO8601Date: parseISO8601Date,
getDisplayRunningTime: getDisplayRunningTime, getDisplayRunningTime: getDisplayRunningTime,
toLocaleDateString: toLocaleDateString, toLocaleDateString: toLocaleDateString,
@ -279,4 +280,5 @@ define(['globalize'], function (globalize) {
return toLocaleTimeStringSupportsLocales; return toLocaleTimeStringSupportsLocales;
} }
}; };
});
/* eslint-enable indent */

View file

@ -15,7 +15,7 @@ define(['connectionManager', 'playbackManager', 'syncPlayManager', 'events', 'in
}); });
} else { } else {
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert({ title: args.Header, text: args.Text }); alert.default({ title: args.Header, text: args.Text });
}); });
} }
} }

View file

@ -187,7 +187,7 @@ var Dashboard = {
} }
require(['alert'], function (alert) { require(['alert'], function (alert) {
alert({ alert.default({
title: options.title || Globalize.translate('HeaderAlert'), title: options.title || Globalize.translate('HeaderAlert'),
text: options.message text: options.message
}).then(options.callback || function () {}); }).then(options.callback || function () {});