mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'es6' into migrate-to-ES6-19
This commit is contained in:
commit
a12f1be841
22 changed files with 592 additions and 420 deletions
21
package.json
21
package.json
|
@ -120,6 +120,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 +139,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 +149,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",
|
||||||
|
@ -162,6 +176,9 @@
|
||||||
"src/controllers/shows/tvshows.js",
|
"src/controllers/shows/tvshows.js",
|
||||||
"src/controllers/shows/tvstudios.js",
|
"src/controllers/shows/tvstudios.js",
|
||||||
"src/controllers/shows/tvupcoming.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",
|
||||||
|
@ -188,6 +205,10 @@
|
||||||
"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",
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -1,12 +1,14 @@
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
var self = this;
|
const self = this;
|
||||||
view.addEventListener('viewshow', function () {
|
view.addEventListener('viewshow', function () {
|
||||||
if (!self.searchFields) {
|
if (!self.searchFields) {
|
||||||
self.searchFields = new SearchFields({
|
self.searchFields = new SearchFields({
|
||||||
|
@ -32,5 +34,4 @@ define(['focusManager', 'searchFields', 'searchResults', 'events'], function (fo
|
||||||
self.searchResults = null;
|
self.searchResults = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
});
|
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
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')) {
|
||||||
|
@ -66,5 +72,4 @@ define(['browser', 'dom', 'layoutManager', 'shell', 'appRouter', 'apphost', 'css
|
||||||
extends: 'a'
|
extends: 'a'
|
||||||
});
|
});
|
||||||
|
|
||||||
return EmbyButtonPrototype;
|
export default EmbyButtonPrototype;
|
||||||
});
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
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');
|
||||||
|
@ -15,4 +16,3 @@ define(['layoutManager', 'css!./emby-button', 'registerElement'], function (layo
|
||||||
prototype: EmbyButtonPrototype,
|
prototype: EmbyButtonPrototype,
|
||||||
extends: 'button'
|
extends: 'button'
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue