Force the use of single quotes
This commit is contained in:
@@ -1,52 +1,52 @@
|
||||
define(["appSettings", "loading", "browser", "globalize", "emby-button"], function(appSettings, loading, browser, globalize) {
|
||||
"use strict";
|
||||
define(['appSettings', 'loading', 'browser', 'globalize', 'emby-button'], function(appSettings, loading, browser, globalize) {
|
||||
'use strict';
|
||||
|
||||
function handleConnectionResult(page, result) {
|
||||
loading.hide();
|
||||
switch (result.State) {
|
||||
case "SignedIn":
|
||||
case 'SignedIn':
|
||||
var apiClient = result.ApiClient;
|
||||
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
|
||||
Dashboard.navigate("home.html");
|
||||
Dashboard.navigate('home.html');
|
||||
break;
|
||||
case "ServerSignIn":
|
||||
Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id, false, "none");
|
||||
case 'ServerSignIn':
|
||||
Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id, false, 'none');
|
||||
break;
|
||||
case "ServerSelection":
|
||||
Dashboard.navigate("selectserver.html", false, "none");
|
||||
case 'ServerSelection':
|
||||
Dashboard.navigate('selectserver.html', false, 'none');
|
||||
break;
|
||||
case "ServerUpdateNeeded":
|
||||
case 'ServerUpdateNeeded':
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
||||
message: globalize.translate('ServerUpdateNeeded', '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
||||
});
|
||||
break;
|
||||
case "Unavailable":
|
||||
case 'Unavailable':
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessageUnableToConnectToServer"),
|
||||
title: globalize.translate("HeaderConnectionFailure")
|
||||
message: globalize.translate('MessageUnableToConnectToServer'),
|
||||
title: globalize.translate('HeaderConnectionFailure')
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function submitServer(page) {
|
||||
loading.show();
|
||||
var host = page.querySelector("#txtServerHost").value;
|
||||
var host = page.querySelector('#txtServerHost').value;
|
||||
ConnectionManager.connectToAddress(host, {
|
||||
enableAutoLogin: appSettings.enableAutoLogin()
|
||||
}).then(function(result) {
|
||||
handleConnectionResult(page, result);
|
||||
}, function() {
|
||||
handleConnectionResult(page, {
|
||||
State: "Unavailable"
|
||||
State: 'Unavailable'
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
return function(view, params) {
|
||||
view.querySelector(".addServerForm").addEventListener("submit", onServerSubmit);
|
||||
view.querySelector(".btnCancel").addEventListener("click", goBack);
|
||||
view.querySelector('.addServerForm').addEventListener('submit', onServerSubmit);
|
||||
view.querySelector('.btnCancel').addEventListener('click', goBack);
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(view);
|
||||
});
|
||||
|
||||
@@ -57,7 +57,7 @@ define(["appSettings", "loading", "browser", "globalize", "emby-button"], functi
|
||||
}
|
||||
|
||||
function goBack() {
|
||||
require(["appRouter"], function(appRouter) {
|
||||
require(['appRouter'], function(appRouter) {
|
||||
appRouter.back();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
define(["globalize"], function (globalize) {
|
||||
"use strict";
|
||||
define(['globalize'], function (globalize) {
|
||||
'use strict';
|
||||
|
||||
function processForgotPasswordResult(result) {
|
||||
if ("ContactAdmin" == result.Action) {
|
||||
if ('ContactAdmin' == result.Action) {
|
||||
return void Dashboard.alert({
|
||||
message: globalize.translate("MessageContactAdminToResetPassword"),
|
||||
title: globalize.translate("HeaderForgotPassword")
|
||||
message: globalize.translate('MessageContactAdminToResetPassword'),
|
||||
title: globalize.translate('HeaderForgotPassword')
|
||||
});
|
||||
}
|
||||
|
||||
if ("InNetworkRequired" == result.Action) {
|
||||
if ('InNetworkRequired' == result.Action) {
|
||||
return void Dashboard.alert({
|
||||
message: globalize.translate("MessageForgotPasswordInNetworkRequired"),
|
||||
title: globalize.translate("HeaderForgotPassword")
|
||||
message: globalize.translate('MessageForgotPasswordInNetworkRequired'),
|
||||
title: globalize.translate('HeaderForgotPassword')
|
||||
});
|
||||
}
|
||||
|
||||
if ("PinCode" == result.Action) {
|
||||
var msg = globalize.translate("MessageForgotPasswordFileCreated");
|
||||
msg += "<br/>";
|
||||
msg += "<br/>";
|
||||
msg += "Enter PIN here to finish Password Reset<br/>";
|
||||
msg += "<br/>";
|
||||
if ('PinCode' == result.Action) {
|
||||
var msg = globalize.translate('MessageForgotPasswordFileCreated');
|
||||
msg += '<br/>';
|
||||
msg += '<br/>';
|
||||
msg += 'Enter PIN here to finish Password Reset<br/>';
|
||||
msg += '<br/>';
|
||||
msg += result.PinFile;
|
||||
msg += "<br/>";
|
||||
msg += '<br/>';
|
||||
return void Dashboard.alert({
|
||||
message: msg,
|
||||
title: globalize.translate("HeaderForgotPassword"),
|
||||
title: globalize.translate('HeaderForgotPassword'),
|
||||
callback: function () {
|
||||
Dashboard.navigate("forgotpasswordpin.html");
|
||||
Dashboard.navigate('forgotpasswordpin.html');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -37,17 +37,17 @@ define(["globalize"], function (globalize) {
|
||||
return function (view, params) {
|
||||
function onSubmit(e) {
|
||||
ApiClient.ajax({
|
||||
type: "POST",
|
||||
url: ApiClient.getUrl("Users/ForgotPassword"),
|
||||
dataType: "json",
|
||||
type: 'POST',
|
||||
url: ApiClient.getUrl('Users/ForgotPassword'),
|
||||
dataType: 'json',
|
||||
data: {
|
||||
EnteredUsername: view.querySelector("#txtName").value
|
||||
EnteredUsername: view.querySelector('#txtName').value
|
||||
}
|
||||
}).then(processForgotPasswordResult);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
view.querySelector("form").addEventListener("submit", onSubmit);
|
||||
view.querySelector('form').addEventListener('submit', onSubmit);
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,41 +1,41 @@
|
||||
define(["globalize"], function (globalize) {
|
||||
"use strict";
|
||||
define(['globalize'], function (globalize) {
|
||||
'use strict';
|
||||
|
||||
function processForgotPasswordResult(result) {
|
||||
if (result.Success) {
|
||||
var msg = globalize.translate("MessagePasswordResetForUsers");
|
||||
msg += "<br/>";
|
||||
msg += "<br/>";
|
||||
msg += result.UsersReset.join("<br/>");
|
||||
var msg = globalize.translate('MessagePasswordResetForUsers');
|
||||
msg += '<br/>';
|
||||
msg += '<br/>';
|
||||
msg += result.UsersReset.join('<br/>');
|
||||
return void Dashboard.alert({
|
||||
message: msg,
|
||||
title: globalize.translate("HeaderPasswordReset"),
|
||||
title: globalize.translate('HeaderPasswordReset'),
|
||||
callback: function () {
|
||||
window.location.href = "index.html";
|
||||
window.location.href = 'index.html';
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessageInvalidForgotPasswordPin"),
|
||||
title: globalize.translate("HeaderPasswordReset")
|
||||
message: globalize.translate('MessageInvalidForgotPasswordPin'),
|
||||
title: globalize.translate('HeaderPasswordReset')
|
||||
});
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
function onSubmit(e) {
|
||||
ApiClient.ajax({
|
||||
type: "POST",
|
||||
url: ApiClient.getUrl("Users/ForgotPassword/Pin"),
|
||||
dataType: "json",
|
||||
type: 'POST',
|
||||
url: ApiClient.getUrl('Users/ForgotPassword/Pin'),
|
||||
dataType: 'json',
|
||||
data: {
|
||||
Pin: view.querySelector("#txtPin").value
|
||||
Pin: view.querySelector('#txtPin').value
|
||||
}
|
||||
}).then(processForgotPasswordResult);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
view.querySelector("form").addEventListener("submit", onSubmit);
|
||||
view.querySelector('form').addEventListener('submit', onSubmit);
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "globalize", "cardStyle", "emby-checkbox"], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser, globalize) {
|
||||
"use strict";
|
||||
define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layoutManager', 'browser', 'globalize', 'cardStyle', 'emby-checkbox'], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser, globalize) {
|
||||
'use strict';
|
||||
|
||||
var enableFocusTransform = !browser.slow && !browser.edge;
|
||||
|
||||
@@ -7,58 +7,58 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
|
||||
loading.show();
|
||||
apiClient.authenticateUserByName(username, password).then(function (result) {
|
||||
var user = result.User;
|
||||
var serverId = getParameterByName("serverid");
|
||||
var serverId = getParameterByName('serverid');
|
||||
var newUrl;
|
||||
|
||||
if (user.Policy.IsAdministrator && !serverId) {
|
||||
newUrl = "dashboard.html";
|
||||
newUrl = 'dashboard.html';
|
||||
} else {
|
||||
newUrl = "home.html";
|
||||
newUrl = 'home.html';
|
||||
}
|
||||
|
||||
loading.hide();
|
||||
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
|
||||
Dashboard.navigate(newUrl);
|
||||
}, function (response) {
|
||||
page.querySelector("#txtManualName").value = "";
|
||||
page.querySelector("#txtManualPassword").value = "";
|
||||
page.querySelector('#txtManualName').value = '';
|
||||
page.querySelector('#txtManualPassword').value = '';
|
||||
loading.hide();
|
||||
|
||||
const UnauthorizedOrForbidden = [401, 403];
|
||||
if (UnauthorizedOrForbidden.includes(response.status)) {
|
||||
require(["toast"], function (toast) {
|
||||
const messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser";
|
||||
require(['toast'], function (toast) {
|
||||
const messageKey = response.status === 401 ? 'MessageInvalidUser' : 'MessageUnauthorizedUser';
|
||||
toast(globalize.translate(messageKey));
|
||||
});
|
||||
} else {
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessageUnableToConnectToServer"),
|
||||
title: globalize.translate("HeaderConnectionFailure")
|
||||
message: globalize.translate('MessageUnableToConnectToServer'),
|
||||
title: globalize.translate('HeaderConnectionFailure')
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function showManualForm(context, showCancel, focusPassword) {
|
||||
context.querySelector(".chkRememberLogin").checked = appSettings.enableAutoLogin();
|
||||
context.querySelector(".manualLoginForm").classList.remove("hide");
|
||||
context.querySelector(".visualLoginForm").classList.add("hide");
|
||||
context.querySelector(".btnManual").classList.add("hide");
|
||||
context.querySelector('.chkRememberLogin').checked = appSettings.enableAutoLogin();
|
||||
context.querySelector('.manualLoginForm').classList.remove('hide');
|
||||
context.querySelector('.visualLoginForm').classList.add('hide');
|
||||
context.querySelector('.btnManual').classList.add('hide');
|
||||
|
||||
if (focusPassword) {
|
||||
context.querySelector("#txtManualPassword").focus();
|
||||
context.querySelector('#txtManualPassword').focus();
|
||||
} else {
|
||||
context.querySelector("#txtManualName").focus();
|
||||
context.querySelector('#txtManualName').focus();
|
||||
}
|
||||
|
||||
if (showCancel) {
|
||||
context.querySelector(".btnCancel").classList.remove("hide");
|
||||
context.querySelector('.btnCancel').classList.remove('hide');
|
||||
} else {
|
||||
context.querySelector(".btnCancel").classList.add("hide");
|
||||
context.querySelector('.btnCancel').classList.add('hide');
|
||||
}
|
||||
}
|
||||
|
||||
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
|
||||
var metroColors = ['#6FBD45', '#4BB3DD', '#4164A5', '#E12026', '#800080', '#E1B222', '#008040', '#0094FF', '#FF00C7', '#FF870F', '#7F0037'];
|
||||
|
||||
function getRandomMetroColor() {
|
||||
var index = Math.floor(Math.random() * (metroColors.length - 1));
|
||||
@@ -82,23 +82,23 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
|
||||
}
|
||||
|
||||
function loadUserList(context, apiClient, users) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (var i = 0; i < users.length; i++) {
|
||||
var user = users[i];
|
||||
|
||||
// TODO move card creation code to Card component
|
||||
var cssClass = "card squareCard scalableCard squareCard-scalable";
|
||||
var cssClass = 'card squareCard scalableCard squareCard-scalable';
|
||||
|
||||
if (layoutManager.tv) {
|
||||
cssClass += " show-focus";
|
||||
cssClass += ' show-focus';
|
||||
|
||||
if (enableFocusTransform) {
|
||||
cssClass += " show-animation";
|
||||
cssClass += ' show-animation';
|
||||
}
|
||||
}
|
||||
|
||||
var cardBoxCssClass = "cardBox cardBox-bottompadded";
|
||||
var cardBoxCssClass = 'cardBox cardBox-bottompadded';
|
||||
html += '<button type="button" class="' + cssClass + '">';
|
||||
html += '<div class="' + cardBoxCssClass + '">';
|
||||
html += '<div class="cardScalable">';
|
||||
@@ -110,25 +110,25 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
|
||||
imgUrl = apiClient.getUserImageUrl(user.Id, {
|
||||
width: 300,
|
||||
tag: user.PrimaryImageTag,
|
||||
type: "Primary"
|
||||
type: 'Primary'
|
||||
});
|
||||
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>";
|
||||
} else {
|
||||
var 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>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
||||
html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</button>";
|
||||
html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</button>';
|
||||
}
|
||||
|
||||
context.querySelector("#divUsers").innerHTML = html;
|
||||
context.querySelector('#divUsers').innerHTML = html;
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
@@ -143,60 +143,60 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
|
||||
}
|
||||
|
||||
function showVisualForm() {
|
||||
view.querySelector(".visualLoginForm").classList.remove("hide");
|
||||
view.querySelector(".manualLoginForm").classList.add("hide");
|
||||
view.querySelector(".btnManual").classList.remove("hide");
|
||||
view.querySelector('.visualLoginForm').classList.remove('hide');
|
||||
view.querySelector('.manualLoginForm').classList.add('hide');
|
||||
view.querySelector('.btnManual').classList.remove('hide');
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(view);
|
||||
});
|
||||
}
|
||||
|
||||
view.querySelector("#divUsers").addEventListener("click", function (e) {
|
||||
var card = dom.parentWithClass(e.target, "card");
|
||||
var cardContent = card ? card.querySelector(".cardContent") : null;
|
||||
view.querySelector('#divUsers').addEventListener('click', function (e) {
|
||||
var card = dom.parentWithClass(e.target, 'card');
|
||||
var cardContent = card ? card.querySelector('.cardContent') : null;
|
||||
|
||||
if (cardContent) {
|
||||
var context = view;
|
||||
var id = cardContent.getAttribute("data-userid");
|
||||
var name = cardContent.getAttribute("data-username");
|
||||
var haspw = cardContent.getAttribute("data-haspw");
|
||||
var id = cardContent.getAttribute('data-userid');
|
||||
var name = cardContent.getAttribute('data-username');
|
||||
var haspw = cardContent.getAttribute('data-haspw');
|
||||
|
||||
if (id === 'manual') {
|
||||
context.querySelector("#txtManualName").value = "";
|
||||
context.querySelector('#txtManualName').value = '';
|
||||
showManualForm(context, true);
|
||||
} else if (haspw == 'false') {
|
||||
authenticateUserByName(context, getApiClient(), name, "");
|
||||
authenticateUserByName(context, getApiClient(), name, '');
|
||||
} else {
|
||||
context.querySelector("#txtManualName").value = name;
|
||||
context.querySelector("#txtManualPassword").value = "";
|
||||
context.querySelector('#txtManualName').value = name;
|
||||
context.querySelector('#txtManualPassword').value = '';
|
||||
showManualForm(context, true, true);
|
||||
}
|
||||
}
|
||||
});
|
||||
view.querySelector(".manualLoginForm").addEventListener("submit", function (e) {
|
||||
appSettings.enableAutoLogin(view.querySelector(".chkRememberLogin").checked);
|
||||
view.querySelector('.manualLoginForm').addEventListener('submit', function (e) {
|
||||
appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked);
|
||||
var 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();
|
||||
return false;
|
||||
});
|
||||
view.querySelector(".btnForgotPassword").addEventListener("click", function () {
|
||||
Dashboard.navigate("forgotpassword.html");
|
||||
view.querySelector('.btnForgotPassword').addEventListener('click', function () {
|
||||
Dashboard.navigate('forgotpassword.html');
|
||||
});
|
||||
view.querySelector(".btnCancel").addEventListener("click", showVisualForm);
|
||||
view.querySelector(".btnManual").addEventListener("click", function () {
|
||||
view.querySelector("#txtManualName").value = "";
|
||||
view.querySelector('.btnCancel').addEventListener('click', showVisualForm);
|
||||
view.querySelector('.btnManual').addEventListener('click', function () {
|
||||
view.querySelector('#txtManualName').value = '';
|
||||
showManualForm(view, true);
|
||||
});
|
||||
view.querySelector(".btnSelectServer").addEventListener("click", function () {
|
||||
view.querySelector('.btnSelectServer').addEventListener('click', function () {
|
||||
Dashboard.selectServer();
|
||||
});
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
loading.show();
|
||||
|
||||
if (!appHost.supports('multiserver')) {
|
||||
view.querySelector(".btnSelectServer").classList.add("hide");
|
||||
view.querySelector('.btnSelectServer').classList.add('hide');
|
||||
}
|
||||
|
||||
var apiClient = getApiClient();
|
||||
@@ -205,14 +205,14 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
|
||||
showVisualForm();
|
||||
loadUserList(view, apiClient, users);
|
||||
} else {
|
||||
view.querySelector("#txtManualName").value = "";
|
||||
view.querySelector('#txtManualName').value = '';
|
||||
showManualForm(view, false, false);
|
||||
}
|
||||
}).catch().then(function () {
|
||||
loading.hide();
|
||||
});
|
||||
apiClient.getJSON(apiClient.getUrl("Branding/Configuration")).then(function (options) {
|
||||
view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || "";
|
||||
apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) {
|
||||
view.querySelector('.disclaimer').textContent = options.LoginDisclaimer || '';
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
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) {
|
||||
"use strict";
|
||||
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) {
|
||||
'use strict';
|
||||
|
||||
var enableFocusTransform = !browser.slow && !browser.edge;
|
||||
|
||||
@@ -8,8 +8,8 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
return {
|
||||
name: server.Name,
|
||||
showIcon: true,
|
||||
icon: "cast",
|
||||
cardType: "",
|
||||
icon: 'cast',
|
||||
cardType: '',
|
||||
id: server.Id,
|
||||
server: server
|
||||
};
|
||||
@@ -25,21 +25,21 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
|
||||
// TODO move card creation code to Card component
|
||||
|
||||
var cssClass = "card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable";
|
||||
var cssClass = 'card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable';
|
||||
|
||||
if (layoutManager.tv) {
|
||||
cssClass += " show-focus";
|
||||
cssClass += ' show-focus';
|
||||
|
||||
if (enableFocusTransform) {
|
||||
cssClass += " show-animation";
|
||||
cssClass += ' show-animation';
|
||||
}
|
||||
}
|
||||
|
||||
var cardBoxCssClass = "cardBox";
|
||||
var cardBoxCssClass = 'cardBox';
|
||||
|
||||
var innerOpening = '<div class="' + cardBoxCssClass + '">';
|
||||
var 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 += '<div class="cardScalable">';
|
||||
cardContainer += '<div class="cardPadder cardPadder-square">';
|
||||
@@ -54,11 +54,11 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
cardContainer += '<div class="cardText cardTextCentered">' + item.name + '</div>';
|
||||
cardContainer += '</div></div></button>';
|
||||
return cardContainer;
|
||||
}).join("");
|
||||
var itemsContainer = view.querySelector(".servers");
|
||||
}).join('');
|
||||
var itemsContainer = view.querySelector('.servers');
|
||||
|
||||
if (!items.length) {
|
||||
html = '<p>' + globalize.translate("MessageNoServersAvailable") + "</p>";
|
||||
html = '<p>' + globalize.translate('MessageNoServersAvailable') + '</p>';
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = html;
|
||||
@@ -66,20 +66,20 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
}
|
||||
|
||||
function updatePageStyle(view, params) {
|
||||
if (params.showuser == "1") {
|
||||
view.classList.add("libraryPage");
|
||||
view.classList.remove("standalonePage");
|
||||
view.classList.add("noSecondaryNavPage");
|
||||
if (params.showuser == '1') {
|
||||
view.classList.add('libraryPage');
|
||||
view.classList.remove('standalonePage');
|
||||
view.classList.add('noSecondaryNavPage');
|
||||
} else {
|
||||
view.classList.add("standalonePage");
|
||||
view.classList.remove("libraryPage");
|
||||
view.classList.remove("noSecondaryNavPage");
|
||||
view.classList.add('standalonePage');
|
||||
view.classList.remove('libraryPage');
|
||||
view.classList.remove('noSecondaryNavPage');
|
||||
}
|
||||
}
|
||||
|
||||
function showGeneralError() {
|
||||
loading.hide();
|
||||
alertText(globalize.translate("DefaultErrorMessage"));
|
||||
alertText(globalize.translate('DefaultErrorMessage'));
|
||||
}
|
||||
|
||||
function alertText(text) {
|
||||
@@ -89,13 +89,13 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
}
|
||||
|
||||
function alertTextWithOptions(options) {
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
alert(options);
|
||||
});
|
||||
}
|
||||
|
||||
function showServerConnectionFailure() {
|
||||
alertText(globalize.translate("MessageUnableToConnectToServer"));
|
||||
alertText(globalize.translate('MessageUnableToConnectToServer'));
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
@@ -108,20 +108,20 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
var apiClient = result.ApiClient;
|
||||
|
||||
switch (result.State) {
|
||||
case "SignedIn":
|
||||
case 'SignedIn':
|
||||
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
|
||||
Dashboard.navigate("home.html");
|
||||
Dashboard.navigate('home.html');
|
||||
break;
|
||||
|
||||
case "ServerSignIn":
|
||||
case 'ServerSignIn':
|
||||
Dashboard.onServerChanged(null, null, apiClient);
|
||||
Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id);
|
||||
Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id);
|
||||
break;
|
||||
|
||||
case "ServerUpdateNeeded":
|
||||
case 'ServerUpdateNeeded':
|
||||
alertTextWithOptions({
|
||||
text: globalize.translate("core#ServerUpdateNeeded", "https://github.com/jellyfin/jellyfin"),
|
||||
html: globalize.translate("core#ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
||||
text: globalize.translate('core#ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin'),
|
||||
html: globalize.translate('core#ServerUpdateNeeded', '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
|
||||
});
|
||||
break;
|
||||
|
||||
@@ -142,23 +142,23 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
function onServerClick(server) {
|
||||
var menuItems = [];
|
||||
menuItems.push({
|
||||
name: globalize.translate("Connect"),
|
||||
id: "connect"
|
||||
name: globalize.translate('Connect'),
|
||||
id: 'connect'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("Delete"),
|
||||
id: "delete"
|
||||
name: globalize.translate('Delete'),
|
||||
id: 'delete'
|
||||
});
|
||||
actionSheet.show({
|
||||
items: menuItems,
|
||||
title: server.Name
|
||||
}).then(function (id) {
|
||||
switch (id) {
|
||||
case "connect":
|
||||
case 'connect':
|
||||
connectToServer(server);
|
||||
break;
|
||||
|
||||
case "delete":
|
||||
case 'delete':
|
||||
deleteServer(server);
|
||||
}
|
||||
});
|
||||
@@ -180,7 +180,7 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
|
||||
var servers;
|
||||
updatePageStyle(view, params);
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
var isRestored = e.detail.isRestored;
|
||||
appRouter.setTitle(null);
|
||||
|
||||
@@ -188,16 +188,16 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
|
||||
loadServers();
|
||||
}
|
||||
});
|
||||
view.querySelector(".servers").addEventListener("click", function (e) {
|
||||
var card = dom.parentWithClass(e.target, "card");
|
||||
view.querySelector('.servers').addEventListener('click', function (e) {
|
||||
var card = dom.parentWithClass(e.target, 'card');
|
||||
|
||||
if (card) {
|
||||
var url = card.getAttribute("data-url");
|
||||
var url = card.getAttribute('data-url');
|
||||
|
||||
if (url) {
|
||||
appRouter.show(url);
|
||||
} else {
|
||||
var id = card.getAttribute("data-id");
|
||||
var id = card.getAttribute('data-id');
|
||||
onServerClick(servers.filter(function (s) {
|
||||
return s.Id === id;
|
||||
})[0]);
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
define(["datetime", "loading", "libraryMenu", "dom", "globalize", "emby-button"], function (datetime, loading, libraryMenu, dom, globalize) {
|
||||
"use strict";
|
||||
define(['datetime', 'loading', 'libraryMenu', 'dom', 'globalize', 'emby-button'], function (datetime, loading, libraryMenu, dom, globalize) {
|
||||
'use strict';
|
||||
|
||||
function revoke(page, key) {
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(globalize.translate("MessageConfirmRevokeApiKey"), globalize.translate("HeaderConfirmRevokeApiKey")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(globalize.translate('MessageConfirmRevokeApiKey'), globalize.translate('HeaderConfirmRevokeApiKey')).then(function () {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: ApiClient.getUrl("Auth/Keys/" + key)
|
||||
type: 'DELETE',
|
||||
url: ApiClient.getUrl('Auth/Keys/' + key)
|
||||
}).then(function () {
|
||||
loadData(page);
|
||||
});
|
||||
@@ -17,44 +17,44 @@ define(["datetime", "loading", "libraryMenu", "dom", "globalize", "emby-button"]
|
||||
|
||||
function renderKeys(page, keys) {
|
||||
var rows = keys.map(function (item) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += '<tr class="detailTableBodyRow detailTableBodyRow-shaded">';
|
||||
html += '<td class="detailTableBodyCell">';
|
||||
html += '<button type="button" is="emby-button" data-token="' + item.AccessToken + '" class="raised raised-mini btnRevoke" data-mini="true" title="' + globalize.translate("ButtonRevoke") + '" style="margin:0;">' + globalize.translate("ButtonRevoke") + "</button>";
|
||||
html += "</td>";
|
||||
html += '<button type="button" is="emby-button" data-token="' + item.AccessToken + '" class="raised raised-mini btnRevoke" data-mini="true" title="' + globalize.translate('ButtonRevoke') + '" style="margin:0;">' + globalize.translate('ButtonRevoke') + '</button>';
|
||||
html += '</td>';
|
||||
html += '<td class="detailTableBodyCell" style="vertical-align:middle;">';
|
||||
html += item.AccessToken;
|
||||
html += "</td>";
|
||||
html += '</td>';
|
||||
html += '<td class="detailTableBodyCell" style="vertical-align:middle;">';
|
||||
html += item.AppName || "";
|
||||
html += "</td>";
|
||||
html += item.AppName || '';
|
||||
html += '</td>';
|
||||
html += '<td class="detailTableBodyCell" style="vertical-align:middle;">';
|
||||
var date = datetime.parseISO8601Date(item.DateCreated, true);
|
||||
html += datetime.toLocaleDateString(date) + " " + datetime.getDisplayTime(date);
|
||||
html += "</td>";
|
||||
return html += "</tr>";
|
||||
}).join("");
|
||||
page.querySelector(".resultBody").innerHTML = rows;
|
||||
html += datetime.toLocaleDateString(date) + ' ' + datetime.getDisplayTime(date);
|
||||
html += '</td>';
|
||||
return html += '</tr>';
|
||||
}).join('');
|
||||
page.querySelector('.resultBody').innerHTML = rows;
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function loadData(page) {
|
||||
loading.show();
|
||||
ApiClient.getJSON(ApiClient.getUrl("Auth/Keys")).then(function (result) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Auth/Keys')).then(function (result) {
|
||||
renderKeys(page, result.Items);
|
||||
});
|
||||
}
|
||||
|
||||
function showNewKeyPrompt(page) {
|
||||
require(["prompt"], function (prompt) {
|
||||
require(['prompt'], function (prompt) {
|
||||
prompt({
|
||||
title: globalize.translate("HeaderNewApiKey"),
|
||||
label: globalize.translate("LabelAppName"),
|
||||
description: globalize.translate("LabelAppNameExample")
|
||||
title: globalize.translate('HeaderNewApiKey'),
|
||||
label: globalize.translate('LabelAppName'),
|
||||
description: globalize.translate('LabelAppNameExample')
|
||||
}).then(function (value) {
|
||||
ApiClient.ajax({
|
||||
type: "POST",
|
||||
url: ApiClient.getUrl("Auth/Keys", {
|
||||
type: 'POST',
|
||||
url: ApiClient.getUrl('Auth/Keys', {
|
||||
App: value
|
||||
})
|
||||
}).then(function () {
|
||||
@@ -64,20 +64,20 @@ define(["datetime", "loading", "libraryMenu", "dom", "globalize", "emby-button"]
|
||||
});
|
||||
}
|
||||
|
||||
pageIdOn("pageinit", "apiKeysPage", function () {
|
||||
pageIdOn('pageinit', 'apiKeysPage', function () {
|
||||
var page = this;
|
||||
page.querySelector(".btnNewKey").addEventListener("click", function () {
|
||||
page.querySelector('.btnNewKey').addEventListener('click', function () {
|
||||
showNewKeyPrompt(page);
|
||||
});
|
||||
page.querySelector(".tblApiKeys").addEventListener("click", function (e) {
|
||||
var btnRevoke = dom.parentWithClass(e.target, "btnRevoke");
|
||||
page.querySelector('.tblApiKeys').addEventListener('click', function (e) {
|
||||
var btnRevoke = dom.parentWithClass(e.target, 'btnRevoke');
|
||||
|
||||
if (btnRevoke) {
|
||||
revoke(page, btnRevoke.getAttribute("data-token"));
|
||||
revoke(page, btnRevoke.getAttribute('data-token'));
|
||||
}
|
||||
});
|
||||
});
|
||||
pageIdOn("pagebeforeshow", "apiKeysPage", function () {
|
||||
pageIdOn('pagebeforeshow', 'apiKeysPage', function () {
|
||||
loadData(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globalize", "date-fns", "dfnshelper", "loading", "connectionManager", "playMethodHelper", "cardBuilder", "imageLoader", "components/activitylog", "scripts/imagehelper", "indicators", "listViewStyle", "emby-button", "flexStyles", "emby-button", "emby-itemscontainer"], function (datetime, events, itemHelper, serverNotifications, dom, globalize, datefns, dfnshelper, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper, indicators) {
|
||||
"use strict";
|
||||
define(['datetime', 'events', 'itemHelper', 'serverNotifications', 'dom', 'globalize', 'date-fns', 'dfnshelper', 'loading', 'connectionManager', 'playMethodHelper', 'cardBuilder', 'imageLoader', 'components/activitylog', 'scripts/imagehelper', 'indicators', 'listViewStyle', 'emby-button', 'flexStyles', 'emby-button', 'emby-itemscontainer'], function (datetime, events, itemHelper, serverNotifications, dom, globalize, datefns, dfnshelper, loading, connectionManager, playMethodHelper, cardBuilder, imageLoader, ActivityLog, imageHelper, indicators) {
|
||||
'use strict';
|
||||
|
||||
function showPlaybackInfo(btn, session) {
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
var title;
|
||||
var text = [];
|
||||
var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
|
||||
|
||||
if (displayPlayMethod === "DirectStream") {
|
||||
title = globalize.translate("DirectStreaming");
|
||||
text.push(globalize.translate("DirectStreamHelp1"));
|
||||
text.push("<br/>");
|
||||
text.push(globalize.translate("DirectStreamHelp2"));
|
||||
} else if (displayPlayMethod === "Transcode") {
|
||||
title = globalize.translate("Transcoding");
|
||||
text.push(globalize.translate("MediaIsBeingConverted"));
|
||||
if (displayPlayMethod === 'DirectStream') {
|
||||
title = globalize.translate('DirectStreaming');
|
||||
text.push(globalize.translate('DirectStreamHelp1'));
|
||||
text.push('<br/>');
|
||||
text.push(globalize.translate('DirectStreamHelp2'));
|
||||
} else if (displayPlayMethod === 'Transcode') {
|
||||
title = globalize.translate('Transcoding');
|
||||
text.push(globalize.translate('MediaIsBeingConverted'));
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
|
||||
text.push("<br/>");
|
||||
text.push(globalize.translate("LabelReasonForTranscoding"));
|
||||
text.push('<br/>');
|
||||
text.push(globalize.translate('LabelReasonForTranscoding'));
|
||||
session.TranscodingInfo.TranscodeReasons.forEach(function (transcodeReason) {
|
||||
text.push(globalize.translate(transcodeReason));
|
||||
});
|
||||
@@ -26,18 +26,18 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
alert({
|
||||
text: text.join("<br/>"),
|
||||
text: text.join('<br/>'),
|
||||
title: title
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function showSendMessageForm(btn, session) {
|
||||
require(["prompt"], function (prompt) {
|
||||
require(['prompt'], function (prompt) {
|
||||
prompt({
|
||||
title: globalize.translate("HeaderSendMessage"),
|
||||
label: globalize.translate("LabelMessageText"),
|
||||
confirmText: globalize.translate("ButtonSend")
|
||||
title: globalize.translate('HeaderSendMessage'),
|
||||
label: globalize.translate('LabelMessageText'),
|
||||
confirmText: globalize.translate('ButtonSend')
|
||||
}).then(function (text) {
|
||||
if (text) {
|
||||
connectionManager.getApiClient(session.ServerId).sendMessageCommand(session.Id, {
|
||||
@@ -50,20 +50,20 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
function showOptionsMenu(btn, session) {
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
var menuItems = [];
|
||||
|
||||
if (session.ServerId && session.DeviceId !== connectionManager.deviceId()) {
|
||||
menuItems.push({
|
||||
name: globalize.translate("SendMessage"),
|
||||
id: "sendmessage"
|
||||
name: globalize.translate('SendMessage'),
|
||||
id: 'sendmessage'
|
||||
});
|
||||
}
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length) {
|
||||
menuItems.push({
|
||||
name: globalize.translate("ViewPlaybackInfo"),
|
||||
id: "transcodinginfo"
|
||||
name: globalize.translate('ViewPlaybackInfo'),
|
||||
id: 'transcodinginfo'
|
||||
});
|
||||
}
|
||||
|
||||
@@ -72,11 +72,11 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
positionTo: btn
|
||||
}).then(function (id) {
|
||||
switch (id) {
|
||||
case "sendmessage":
|
||||
case 'sendmessage':
|
||||
showSendMessageForm(btn, session);
|
||||
break;
|
||||
|
||||
case "transcodinginfo":
|
||||
case 'transcodinginfo':
|
||||
showPlaybackInfo(btn, session);
|
||||
}
|
||||
});
|
||||
@@ -84,28 +84,28 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
function onActiveDevicesClick(evt) {
|
||||
var btn = dom.parentWithClass(evt.target, "sessionCardButton");
|
||||
var btn = dom.parentWithClass(evt.target, 'sessionCardButton');
|
||||
|
||||
if (btn) {
|
||||
var card = dom.parentWithClass(btn, "card");
|
||||
var card = dom.parentWithClass(btn, 'card');
|
||||
|
||||
if (card) {
|
||||
var sessionId = card.id;
|
||||
var session = (DashboardPage.sessionsList || []).filter(function (dashboardSession) {
|
||||
return "session" + dashboardSession.Id === sessionId;
|
||||
return 'session' + dashboardSession.Id === sessionId;
|
||||
})[0];
|
||||
|
||||
if (session) {
|
||||
if (btn.classList.contains("btnCardOptions")) {
|
||||
if (btn.classList.contains('btnCardOptions')) {
|
||||
showOptionsMenu(btn, session);
|
||||
} else if (btn.classList.contains("btnSessionInfo")) {
|
||||
} else if (btn.classList.contains('btnSessionInfo')) {
|
||||
showPlaybackInfo(btn, session);
|
||||
} else if (btn.classList.contains("btnSessionSendMessage")) {
|
||||
} else if (btn.classList.contains('btnSessionSendMessage')) {
|
||||
showSendMessageForm(btn, session);
|
||||
} else if (btn.classList.contains("btnSessionStop")) {
|
||||
connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "Stop");
|
||||
} else if (btn.classList.contains("btnSessionPlayPause") && session.PlayState) {
|
||||
connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, "PlayPause");
|
||||
} else if (btn.classList.contains('btnSessionStop')) {
|
||||
connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, 'Stop');
|
||||
} else if (btn.classList.contains('btnSessionPlayPause') && session.PlayState) {
|
||||
connectionManager.getApiClient(session.ServerId).sendPlayStateCommand(session.Id, 'PlayPause');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -135,31 +135,31 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
apiClient.getLiveTvRecordings({
|
||||
UserId: Dashboard.getCurrentUserId(),
|
||||
IsInProgress: true,
|
||||
Fields: "CanDelete,PrimaryImageAspectRatio",
|
||||
Fields: 'CanDelete,PrimaryImageAspectRatio',
|
||||
EnableTotalRecordCount: false,
|
||||
EnableImageTypes: "Primary,Thumb,Backdrop"
|
||||
EnableImageTypes: 'Primary,Thumb,Backdrop'
|
||||
}).then(function (result) {
|
||||
var itemsContainer = view.querySelector(".activeRecordingItems");
|
||||
var itemsContainer = view.querySelector('.activeRecordingItems');
|
||||
|
||||
if (!result.Items.length) {
|
||||
view.querySelector(".activeRecordingsSection").classList.add("hide");
|
||||
return void(itemsContainer.innerHTML = "");
|
||||
view.querySelector('.activeRecordingsSection').classList.add('hide');
|
||||
return void(itemsContainer.innerHTML = '');
|
||||
}
|
||||
|
||||
view.querySelector(".activeRecordingsSection").classList.remove("hide");
|
||||
view.querySelector('.activeRecordingsSection').classList.remove('hide');
|
||||
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "auto",
|
||||
defaultShape: "backdrop",
|
||||
shape: 'auto',
|
||||
defaultShape: 'backdrop',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
coverImage: true,
|
||||
cardLayout: false,
|
||||
centerText: true,
|
||||
preferThumb: "auto",
|
||||
preferThumb: 'auto',
|
||||
overlayText: false,
|
||||
overlayMoreButton: true,
|
||||
action: "none",
|
||||
action: 'none',
|
||||
centerPlayButton: true
|
||||
});
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
@@ -168,28 +168,28 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
|
||||
function reloadSystemInfo(view, apiClient) {
|
||||
apiClient.getSystemInfo().then(function (systemInfo) {
|
||||
view.querySelector("#serverName").innerHTML = globalize.translate("DashboardServerName", systemInfo.ServerName);
|
||||
var localizedVersion = globalize.translate("DashboardVersionNumber", systemInfo.Version);
|
||||
view.querySelector('#serverName').innerHTML = globalize.translate('DashboardServerName', systemInfo.ServerName);
|
||||
var localizedVersion = globalize.translate('DashboardVersionNumber', systemInfo.Version);
|
||||
|
||||
if (systemInfo.SystemUpdateLevel !== "Release") {
|
||||
localizedVersion += " " + systemInfo.SystemUpdateLevel;
|
||||
if (systemInfo.SystemUpdateLevel !== 'Release') {
|
||||
localizedVersion += ' ' + systemInfo.SystemUpdateLevel;
|
||||
}
|
||||
|
||||
view.querySelector("#versionNumber").innerHTML = localizedVersion;
|
||||
view.querySelector("#operatingSystem").innerHTML = globalize.translate("DashboardOperatingSystem", systemInfo.OperatingSystem);
|
||||
view.querySelector("#architecture").innerHTML = globalize.translate("DashboardArchitecture", systemInfo.SystemArchitecture);
|
||||
view.querySelector('#versionNumber').innerHTML = localizedVersion;
|
||||
view.querySelector('#operatingSystem').innerHTML = globalize.translate('DashboardOperatingSystem', systemInfo.OperatingSystem);
|
||||
view.querySelector('#architecture').innerHTML = globalize.translate('DashboardArchitecture', systemInfo.SystemArchitecture);
|
||||
|
||||
if (systemInfo.CanSelfRestart) {
|
||||
view.querySelector("#btnRestartServer").classList.remove("hide");
|
||||
view.querySelector('#btnRestartServer').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector("#btnRestartServer").classList.add("hide");
|
||||
view.querySelector('#btnRestartServer').classList.add('hide');
|
||||
}
|
||||
|
||||
view.querySelector("#cachePath").innerHTML = systemInfo.CachePath;
|
||||
view.querySelector("#logPath").innerHTML = systemInfo.LogPath;
|
||||
view.querySelector("#transcodePath").innerHTML = systemInfo.TranscodingTempPath;
|
||||
view.querySelector("#metadataPath").innerHTML = systemInfo.InternalMetadataPath;
|
||||
view.querySelector("#webPath").innerHTML = systemInfo.WebPath;
|
||||
view.querySelector('#cachePath').innerHTML = systemInfo.CachePath;
|
||||
view.querySelector('#logPath').innerHTML = systemInfo.LogPath;
|
||||
view.querySelector('#transcodePath').innerHTML = systemInfo.TranscodingTempPath;
|
||||
view.querySelector('#metadataPath').innerHTML = systemInfo.InternalMetadataPath;
|
||||
view.querySelector('#webPath').innerHTML = systemInfo.WebPath;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -211,25 +211,25 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
function renderActiveConnections(view, sessions) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
DashboardPage.sessionsList = sessions;
|
||||
var parentElement = view.querySelector(".activeDevices");
|
||||
var cardElem = parentElement.querySelector(".card");
|
||||
var parentElement = view.querySelector('.activeDevices');
|
||||
var cardElem = parentElement.querySelector('.card');
|
||||
|
||||
if (cardElem) {
|
||||
cardElem.classList.add("deadSession");
|
||||
cardElem.classList.add('deadSession');
|
||||
}
|
||||
|
||||
for (var i = 0, length = sessions.length; i < length; i++) {
|
||||
var session = sessions[i];
|
||||
var rowId = "session" + session.Id;
|
||||
var elem = view.querySelector("#" + rowId);
|
||||
var rowId = 'session' + session.Id;
|
||||
var elem = view.querySelector('#' + rowId);
|
||||
|
||||
if (elem) {
|
||||
DashboardPage.updateSession(elem, session);
|
||||
} else {
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
var className = "scalableCard card activeSession backdropCard backdropCard-scalable";
|
||||
var className = 'scalableCard card activeSession backdropCard backdropCard-scalable';
|
||||
html += '<div class="' + className + '" id="' + rowId + '">';
|
||||
html += '<div class="cardBox visualCardBox">';
|
||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||
@@ -253,13 +253,13 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
html += '<div class="sessionAppName" style="display:inline-block;">';
|
||||
html += '<div class="sessionDeviceName">' + session.DeviceName + "</div>";
|
||||
html += '<div class="sessionAppSecondaryText">' + DashboardPage.getAppSecondaryText(session) + "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '<div class="sessionDeviceName">' + session.DeviceName + '</div>';
|
||||
html += '<div class="sessionAppSecondaryText">' + DashboardPage.getAppSecondaryText(session) + '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.Framerate) {
|
||||
html += '<div class="sessionTranscodingFramerate">' + session.TranscodingInfo.Framerate + " fps</div>";
|
||||
html += '<div class="sessionTranscodingFramerate">' + session.TranscodingInfo.Framerate + ' fps</div>';
|
||||
} else {
|
||||
html += '<div class="sessionTranscodingFramerate"></div>';
|
||||
}
|
||||
@@ -268,56 +268,56 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
var nowPlayingName = DashboardPage.getNowPlayingName(session);
|
||||
html += '<div class="sessionNowPlayingInfo" data-imgsrc="' + nowPlayingName.image + '">';
|
||||
html += nowPlayingName.html;
|
||||
html += "</div>";
|
||||
html += '<div class="sessionNowPlayingTime">' + DashboardPage.getSessionNowPlayingTime(session) + "</div>";
|
||||
html += '</div>';
|
||||
html += '<div class="sessionNowPlayingTime">' + DashboardPage.getSessionNowPlayingTime(session) + '</div>';
|
||||
html += '</div>';
|
||||
|
||||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
|
||||
html += indicators.getProgressHtml(percent, {
|
||||
containerClass: "playbackProgress"
|
||||
containerClass: 'playbackProgress'
|
||||
});
|
||||
} else {
|
||||
// need to leave the element in just in case the device starts playback
|
||||
html += indicators.getProgressHtml(0, {
|
||||
containerClass: "playbackProgress hide"
|
||||
containerClass: 'playbackProgress hide'
|
||||
});
|
||||
}
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
||||
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
|
||||
html += indicators.getProgressHtml(percent, {
|
||||
containerClass: "transcodingProgress"
|
||||
containerClass: 'transcodingProgress'
|
||||
});
|
||||
} else {
|
||||
// same issue as playbackProgress element above
|
||||
html += indicators.getProgressHtml(0, {
|
||||
containerClass: "transcodingProgress hide"
|
||||
containerClass: 'transcodingProgress hide'
|
||||
});
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '<div class="sessionCardFooter cardFooter">';
|
||||
html += '<div class="sessionCardButtons flex align-items-center justify-content-center">';
|
||||
|
||||
var btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl ? "" : " hide";
|
||||
var btnCssClass = session.ServerId && session.NowPlayingItem && session.SupportsRemoteControl ? '' : ' hide';
|
||||
const playIcon = session.PlayState.IsPaused ? 'pause' : 'play_arrow';
|
||||
|
||||
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionPlayPause paper-icon-button-light ' + btnCssClass + '"><span class="material-icons ' + playIcon + '"></span></button>';
|
||||
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionStop paper-icon-button-light ' + btnCssClass + '"><span class="material-icons stop"></span></button>';
|
||||
|
||||
btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length ? "" : " hide";
|
||||
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionInfo paper-icon-button-light ' + btnCssClass + '" title="' + globalize.translate("ViewPlaybackInfo") + '"><span class="material-icons info"></span></button>';
|
||||
btnCssClass = session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo.TranscodeReasons.length ? '' : ' hide';
|
||||
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionInfo paper-icon-button-light ' + btnCssClass + '" title="' + globalize.translate('ViewPlaybackInfo') + '"><span class="material-icons info"></span></button>';
|
||||
|
||||
btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId() ? "" : " hide";
|
||||
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionSendMessage paper-icon-button-light ' + btnCssClass + '" title="' + globalize.translate("SendMessage") + '"><span class="material-icons message"></span></button>';
|
||||
html += "</div>";
|
||||
btnCssClass = session.ServerId && -1 !== session.SupportedCommands.indexOf('DisplayMessage') && session.DeviceId !== connectionManager.deviceId() ? '' : ' hide';
|
||||
html += '<button is="paper-icon-button-light" class="sessionCardButton btnSessionSendMessage paper-icon-button-light ' + btnCssClass + '" title="' + globalize.translate('SendMessage') + '"><span class="material-icons message"></span></button>';
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="sessionNowPlayingStreamInfo" style="padding:.5em 0 1em;">';
|
||||
html += DashboardPage.getSessionNowPlayingStreamInfo(session);
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
|
||||
html += '<div class="flex align-items-center justify-content-center">';
|
||||
var userImage = DashboardPage.getUserImage(session);
|
||||
@@ -325,16 +325,16 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
html += '<div class="sessionUserName">';
|
||||
html += DashboardPage.getUsersHtml(session);
|
||||
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
parentElement.insertAdjacentHTML("beforeend", html);
|
||||
var deadSessionElem = parentElement.querySelector(".deadSession");
|
||||
parentElement.insertAdjacentHTML('beforeend', html);
|
||||
var deadSessionElem = parentElement.querySelector('.deadSession');
|
||||
|
||||
if (deadSessionElem) {
|
||||
deadSessionElem.parentNode.removeChild(deadSessionElem);
|
||||
@@ -342,9 +342,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
function renderRunningTasks(view, tasks) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
tasks = tasks.filter(function (task) {
|
||||
if ("Idle" != task.State) {
|
||||
if ('Idle' != task.State) {
|
||||
return !task.IsHidden;
|
||||
}
|
||||
|
||||
@@ -352,59 +352,59 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
});
|
||||
|
||||
if (tasks.length) {
|
||||
view.querySelector(".runningTasksContainer").classList.remove("hide");
|
||||
view.querySelector('.runningTasksContainer').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".runningTasksContainer").classList.add("hide");
|
||||
view.querySelector('.runningTasksContainer').classList.add('hide');
|
||||
}
|
||||
|
||||
for (var i = 0, length = tasks.length; i < length; i++) {
|
||||
var task = tasks[i];
|
||||
html += "<p>";
|
||||
html += task.Name + "<br/>";
|
||||
html += '<p>';
|
||||
html += task.Name + '<br/>';
|
||||
|
||||
if (task.State === "Running") {
|
||||
if (task.State === 'Running') {
|
||||
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
|
||||
html += '<progress max="100" value="' + progress + '" title="' + progress + '%">';
|
||||
html += progress + "%";
|
||||
html += "</progress>";
|
||||
html += "<span style='color:#00a4dc;margin-left:5px;margin-right:5px;'>" + progress + "%</span>";
|
||||
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonStop") + '" onclick="DashboardPage.stopTask(this, \'' + task.Id + '\');" class="autoSize"><span class="material-icons cancel"></span></button>';
|
||||
} else if (task.State === "Cancelling") {
|
||||
html += '<span style="color:#cc0000;">' + globalize.translate("LabelStopping") + "</span>";
|
||||
html += progress + '%';
|
||||
html += '</progress>';
|
||||
html += "<span style='color:#00a4dc;margin-left:5px;margin-right:5px;'>" + progress + '%</span>';
|
||||
html += '<button type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonStop') + '" onclick="DashboardPage.stopTask(this, \'' + task.Id + '\');" class="autoSize"><span class="material-icons cancel"></span></button>';
|
||||
} else if (task.State === 'Cancelling') {
|
||||
html += '<span style="color:#cc0000;">' + globalize.translate('LabelStopping') + '</span>';
|
||||
}
|
||||
|
||||
html += "</p>";
|
||||
html += '</p>';
|
||||
}
|
||||
|
||||
view.querySelector("#divRunningTasks").innerHTML = html;
|
||||
view.querySelector('#divRunningTasks').innerHTML = html;
|
||||
}
|
||||
|
||||
window.DashboardPage = {
|
||||
startInterval: function (apiClient) {
|
||||
apiClient.sendMessage("SessionsStart", "0,1500");
|
||||
apiClient.sendMessage("ScheduledTasksInfoStart", "0,1000");
|
||||
apiClient.sendMessage('SessionsStart', '0,1500');
|
||||
apiClient.sendMessage('ScheduledTasksInfoStart', '0,1000');
|
||||
},
|
||||
stopInterval: function (apiClient) {
|
||||
apiClient.sendMessage("SessionsStop");
|
||||
apiClient.sendMessage("ScheduledTasksInfoStop");
|
||||
apiClient.sendMessage('SessionsStop');
|
||||
apiClient.sendMessage('ScheduledTasksInfoStop');
|
||||
},
|
||||
getSessionNowPlayingStreamInfo: function (session) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
var showTranscodingInfo = false;
|
||||
var displayPlayMethod = playMethodHelper.getDisplayPlayMethod(session);
|
||||
|
||||
if (displayPlayMethod === "DirectStream") {
|
||||
html += globalize.translate("DirectStreaming");
|
||||
} else if (displayPlayMethod === "Transcode") {
|
||||
html += globalize.translate("Transcoding");
|
||||
if (displayPlayMethod === 'DirectStream') {
|
||||
html += globalize.translate('DirectStreaming');
|
||||
} else if (displayPlayMethod === 'Transcode') {
|
||||
html += globalize.translate('Transcoding');
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.Framerate) {
|
||||
html += " (" + session.TranscodingInfo.Framerate + " fps)";
|
||||
html += ' (' + session.TranscodingInfo.Framerate + ' fps)';
|
||||
}
|
||||
|
||||
showTranscodingInfo = true;
|
||||
} else if (displayPlayMethod === "DirectPlay") {
|
||||
html += globalize.translate("DirectPlaying");
|
||||
} else if (displayPlayMethod === 'DirectPlay') {
|
||||
html += globalize.translate('DirectPlaying');
|
||||
}
|
||||
|
||||
if (showTranscodingInfo) {
|
||||
@@ -413,9 +413,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (session.TranscodingInfo) {
|
||||
if (session.TranscodingInfo.Bitrate) {
|
||||
if (session.TranscodingInfo.Bitrate > 1e6) {
|
||||
line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + " Mbps");
|
||||
line.push((session.TranscodingInfo.Bitrate / 1e6).toFixed(1) + ' Mbps');
|
||||
} else {
|
||||
line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + " Kbps");
|
||||
line.push(Math.floor(session.TranscodingInfo.Bitrate / 1e3) + ' Kbps');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -433,7 +433,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
if (line.length) {
|
||||
html += " - " + line.join(" ");
|
||||
html += ' - ' + line.join(' ');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -441,43 +441,43 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
},
|
||||
getSessionNowPlayingTime: function (session) {
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
if (nowPlayingItem) {
|
||||
if (session.PlayState.PositionTicks) {
|
||||
html += datetime.getDisplayRunningTime(session.PlayState.PositionTicks);
|
||||
} else {
|
||||
html += "0:00";
|
||||
html += '0:00';
|
||||
}
|
||||
|
||||
html += " / ";
|
||||
html += ' / ';
|
||||
|
||||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
html += datetime.getDisplayRunningTime(nowPlayingItem.RunTimeTicks);
|
||||
} else {
|
||||
html += "0:00";
|
||||
html += '0:00';
|
||||
}
|
||||
}
|
||||
|
||||
return html;
|
||||
},
|
||||
getAppSecondaryText: function (session) {
|
||||
return session.Client + " " + session.ApplicationVersion;
|
||||
return session.Client + ' ' + session.ApplicationVersion;
|
||||
},
|
||||
getNowPlayingName: function (session) {
|
||||
var imgUrl = "";
|
||||
var imgUrl = '';
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
// FIXME: It seems that, sometimes, server sends date in the future, so date-fns displays messages like 'in less than a minute'. We should fix
|
||||
// how dates are returned by the server when the session is active and show something like 'Active now', instead of past/future sentences
|
||||
if (!nowPlayingItem) {
|
||||
return {
|
||||
html: globalize.translate("LastSeen", datefns.formatDistanceToNow(Date.parse(session.LastActivityDate), dfnshelper.localeWithSuffix)),
|
||||
html: globalize.translate('LastSeen', datefns.formatDistanceToNow(Date.parse(session.LastActivityDate), dfnshelper.localeWithSuffix)),
|
||||
image: imgUrl
|
||||
};
|
||||
}
|
||||
|
||||
var topText = itemHelper.getDisplayName(nowPlayingItem);
|
||||
var bottomText = "";
|
||||
var bottomText = '';
|
||||
|
||||
if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) {
|
||||
bottomText = topText;
|
||||
@@ -496,14 +496,14 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
tag: nowPlayingItem.ImageTags.Logo,
|
||||
maxHeight: 24,
|
||||
maxWidth: 130,
|
||||
type: "Logo"
|
||||
type: 'Logo'
|
||||
});
|
||||
} else if (nowPlayingItem.ParentLogoImageTag) {
|
||||
imgUrl = ApiClient.getScaledImageUrl(nowPlayingItem.ParentLogoItemId, {
|
||||
tag: nowPlayingItem.ParentLogoImageTag,
|
||||
maxHeight: 24,
|
||||
maxWidth: 130,
|
||||
type: "Logo"
|
||||
type: 'Logo'
|
||||
});
|
||||
}
|
||||
|
||||
@@ -512,7 +512,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
return {
|
||||
html: bottomText ? topText + "<br/>" + bottomText : topText,
|
||||
html: bottomText ? topText + '<br/>' + bottomText : topText,
|
||||
image: imgUrl
|
||||
};
|
||||
},
|
||||
@@ -527,104 +527,104 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
html.push(session.AdditionalUsers[i].UserName);
|
||||
}
|
||||
|
||||
return html.join(", ");
|
||||
return html.join(', ');
|
||||
},
|
||||
getUserImage: function (session) {
|
||||
if (session.UserId && session.UserPrimaryImageTag) {
|
||||
return ApiClient.getUserImageUrl(session.UserId, {
|
||||
tag: session.UserPrimaryImageTag,
|
||||
type: "Primary"
|
||||
type: 'Primary'
|
||||
});
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
updateSession: function (row, session) {
|
||||
row.classList.remove("deadSession");
|
||||
row.classList.remove('deadSession');
|
||||
var nowPlayingItem = session.NowPlayingItem;
|
||||
|
||||
if (nowPlayingItem) {
|
||||
row.classList.add("playingSession");
|
||||
row.classList.add('playingSession');
|
||||
} else {
|
||||
row.classList.remove("playingSession");
|
||||
row.classList.remove('playingSession');
|
||||
}
|
||||
|
||||
if (session.ServerId && -1 !== session.SupportedCommands.indexOf("DisplayMessage") && session.DeviceId !== connectionManager.deviceId()) {
|
||||
row.querySelector(".btnSessionSendMessage").classList.remove("hide");
|
||||
if (session.ServerId && -1 !== session.SupportedCommands.indexOf('DisplayMessage') && session.DeviceId !== connectionManager.deviceId()) {
|
||||
row.querySelector('.btnSessionSendMessage').classList.remove('hide');
|
||||
} else {
|
||||
row.querySelector(".btnSessionSendMessage").classList.add("hide");
|
||||
row.querySelector('.btnSessionSendMessage').classList.add('hide');
|
||||
}
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons && session.TranscodingInfo && session.TranscodingInfo.TranscodeReasons.length) {
|
||||
row.querySelector(".btnSessionInfo").classList.remove("hide");
|
||||
row.querySelector('.btnSessionInfo').classList.remove('hide');
|
||||
} else {
|
||||
row.querySelector(".btnSessionInfo").classList.add("hide");
|
||||
row.querySelector('.btnSessionInfo').classList.add('hide');
|
||||
}
|
||||
|
||||
var btnSessionPlayPause = row.querySelector(".btnSessionPlayPause");
|
||||
var btnSessionPlayPause = row.querySelector('.btnSessionPlayPause');
|
||||
|
||||
if (session.ServerId && nowPlayingItem && session.SupportsRemoteControl && session.DeviceId !== connectionManager.deviceId()) {
|
||||
btnSessionPlayPause.classList.remove("hide");
|
||||
row.querySelector(".btnSessionStop").classList.remove("hide");
|
||||
btnSessionPlayPause.classList.remove('hide');
|
||||
row.querySelector('.btnSessionStop').classList.remove('hide');
|
||||
} else {
|
||||
btnSessionPlayPause.classList.add("hide");
|
||||
row.querySelector(".btnSessionStop").classList.add("hide");
|
||||
btnSessionPlayPause.classList.add('hide');
|
||||
row.querySelector('.btnSessionStop').classList.add('hide');
|
||||
}
|
||||
|
||||
const btnSessionPlayPauseIcon = btnSessionPlayPause.querySelector(".material-icons");
|
||||
btnSessionPlayPauseIcon.classList.remove("play_arrow", "pause");
|
||||
btnSessionPlayPauseIcon.classList.add(session.PlayState && session.PlayState.IsPaused ? "play_arrow" : "pause");
|
||||
const btnSessionPlayPauseIcon = btnSessionPlayPause.querySelector('.material-icons');
|
||||
btnSessionPlayPauseIcon.classList.remove('play_arrow', 'pause');
|
||||
btnSessionPlayPauseIcon.classList.add(session.PlayState && session.PlayState.IsPaused ? 'play_arrow' : 'pause');
|
||||
|
||||
row.querySelector(".sessionNowPlayingStreamInfo").innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session);
|
||||
row.querySelector(".sessionNowPlayingTime").innerHTML = DashboardPage.getSessionNowPlayingTime(session);
|
||||
row.querySelector(".sessionUserName").innerHTML = DashboardPage.getUsersHtml(session);
|
||||
row.querySelector(".sessionAppSecondaryText").innerHTML = DashboardPage.getAppSecondaryText(session);
|
||||
row.querySelector(".sessionTranscodingFramerate").innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + " fps" : "";
|
||||
row.querySelector('.sessionNowPlayingStreamInfo').innerHTML = DashboardPage.getSessionNowPlayingStreamInfo(session);
|
||||
row.querySelector('.sessionNowPlayingTime').innerHTML = DashboardPage.getSessionNowPlayingTime(session);
|
||||
row.querySelector('.sessionUserName').innerHTML = DashboardPage.getUsersHtml(session);
|
||||
row.querySelector('.sessionAppSecondaryText').innerHTML = DashboardPage.getAppSecondaryText(session);
|
||||
row.querySelector('.sessionTranscodingFramerate').innerHTML = session.TranscodingInfo && session.TranscodingInfo.Framerate ? session.TranscodingInfo.Framerate + ' fps' : '';
|
||||
var nowPlayingName = DashboardPage.getNowPlayingName(session);
|
||||
var nowPlayingInfoElem = row.querySelector(".sessionNowPlayingInfo");
|
||||
var nowPlayingInfoElem = row.querySelector('.sessionNowPlayingInfo');
|
||||
|
||||
if (!(nowPlayingName.image && nowPlayingName.image == nowPlayingInfoElem.getAttribute("data-imgsrc"))) {
|
||||
if (!(nowPlayingName.image && nowPlayingName.image == nowPlayingInfoElem.getAttribute('data-imgsrc'))) {
|
||||
nowPlayingInfoElem.innerHTML = nowPlayingName.html;
|
||||
nowPlayingInfoElem.setAttribute("data-imgsrc", nowPlayingName.image || "");
|
||||
nowPlayingInfoElem.setAttribute('data-imgsrc', nowPlayingName.image || '');
|
||||
}
|
||||
|
||||
var playbackProgressElem = row.querySelector(".playbackProgress");
|
||||
var playbackProgressElem = row.querySelector('.playbackProgress');
|
||||
|
||||
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
|
||||
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
|
||||
playbackProgressElem.outerHTML = indicators.getProgressHtml(percent, {
|
||||
containerClass: "playbackProgress"
|
||||
containerClass: 'playbackProgress'
|
||||
});
|
||||
} else {
|
||||
playbackProgressElem.outerHTML = indicators.getProgressHtml(0, {
|
||||
containerClass: "playbackProgress hide"
|
||||
containerClass: 'playbackProgress hide'
|
||||
});
|
||||
}
|
||||
|
||||
var transcodingProgress = row.querySelector(".transcodingProgress");
|
||||
var transcodingProgress = row.querySelector('.transcodingProgress');
|
||||
|
||||
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
|
||||
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
|
||||
transcodingProgress.outerHTML = indicators.getProgressHtml(percent, {
|
||||
containerClass: "transcodingProgress"
|
||||
containerClass: 'transcodingProgress'
|
||||
});
|
||||
} else {
|
||||
transcodingProgress.outerHTML = indicators.getProgressHtml(0, {
|
||||
containerClass: "transcodingProgress hide"
|
||||
containerClass: 'transcodingProgress hide'
|
||||
});
|
||||
}
|
||||
|
||||
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || "";
|
||||
var imgElem = row.querySelector(".sessionNowPlayingContent");
|
||||
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || '';
|
||||
var imgElem = row.querySelector('.sessionNowPlayingContent');
|
||||
|
||||
if (imgUrl != imgElem.getAttribute("data-src")) {
|
||||
imgElem.style.backgroundImage = imgUrl ? "url('" + imgUrl + "')" : "";
|
||||
imgElem.setAttribute("data-src", imgUrl);
|
||||
if (imgUrl != imgElem.getAttribute('data-src')) {
|
||||
imgElem.style.backgroundImage = imgUrl ? "url('" + imgUrl + "')" : '';
|
||||
imgElem.setAttribute('data-src', imgUrl);
|
||||
|
||||
if (imgUrl) {
|
||||
imgElem.classList.add("sessionNowPlayingContent-withbackground");
|
||||
imgElem.classList.add('sessionNowPlayingContent-withbackground');
|
||||
} else {
|
||||
imgElem.classList.remove("sessionNowPlayingContent-withbackground");
|
||||
imgElem.classList.remove('sessionNowPlayingContent-withbackground');
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -638,7 +638,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.BackdropImageTags && item.BackdropImageTags.length) {
|
||||
return ApiClient.getScaledImageUrl(item.Id, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Backdrop",
|
||||
type: 'Backdrop',
|
||||
tag: item.BackdropImageTags[0]
|
||||
});
|
||||
}
|
||||
@@ -646,7 +646,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
|
||||
return ApiClient.getScaledImageUrl(item.ParentBackdropItemId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Backdrop",
|
||||
type: 'Backdrop',
|
||||
tag: item.ParentBackdropImageTags[0]
|
||||
});
|
||||
}
|
||||
@@ -654,7 +654,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.BackdropImageTag) {
|
||||
return ApiClient.getScaledImageUrl(item.BackdropItemId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Backdrop",
|
||||
type: 'Backdrop',
|
||||
tag: item.BackdropImageTag
|
||||
});
|
||||
}
|
||||
@@ -664,7 +664,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && imageTags.Thumb) {
|
||||
return ApiClient.getScaledImageUrl(item.Id, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Thumb",
|
||||
type: 'Thumb',
|
||||
tag: imageTags.Thumb
|
||||
});
|
||||
}
|
||||
@@ -672,7 +672,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.ParentThumbImageTag) {
|
||||
return ApiClient.getScaledImageUrl(item.ParentThumbItemId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Thumb",
|
||||
type: 'Thumb',
|
||||
tag: item.ParentThumbImageTag
|
||||
});
|
||||
}
|
||||
@@ -680,7 +680,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.ThumbImageTag) {
|
||||
return ApiClient.getScaledImageUrl(item.ThumbItemId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Thumb",
|
||||
type: 'Thumb',
|
||||
tag: item.ThumbImageTag
|
||||
});
|
||||
}
|
||||
@@ -688,7 +688,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && imageTags.Primary) {
|
||||
return ApiClient.getScaledImageUrl(item.Id, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Primary",
|
||||
type: 'Primary',
|
||||
tag: imageTags.Primary
|
||||
});
|
||||
}
|
||||
@@ -696,7 +696,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.PrimaryImageTag) {
|
||||
return ApiClient.getScaledImageUrl(item.PrimaryImageItemId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Primary",
|
||||
type: 'Primary',
|
||||
tag: item.PrimaryImageTag
|
||||
});
|
||||
}
|
||||
@@ -704,46 +704,46 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
if (item && item.AlbumPrimaryImageTag) {
|
||||
return ApiClient.getScaledImageUrl(item.AlbumId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.20),
|
||||
type: "Primary",
|
||||
type: 'Primary',
|
||||
tag: item.AlbumPrimaryImageTag
|
||||
});
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
systemUpdateTaskKey: "SystemUpdateTask",
|
||||
systemUpdateTaskKey: 'SystemUpdateTask',
|
||||
stopTask: function (btn, id) {
|
||||
var page = dom.parentWithClass(btn, "page");
|
||||
var page = dom.parentWithClass(btn, 'page');
|
||||
ApiClient.stopScheduledTask(id).then(function () {
|
||||
pollForInfo(page, ApiClient);
|
||||
});
|
||||
},
|
||||
restart: function (btn) {
|
||||
require(["confirm"], function (confirm) {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm({
|
||||
title: globalize.translate("HeaderRestart"),
|
||||
text: globalize.translate("MessageConfirmRestart"),
|
||||
confirmText: globalize.translate("ButtonRestart"),
|
||||
primary: "delete"
|
||||
title: globalize.translate('HeaderRestart'),
|
||||
text: globalize.translate('MessageConfirmRestart'),
|
||||
confirmText: globalize.translate('ButtonRestart'),
|
||||
primary: 'delete'
|
||||
}).then(function () {
|
||||
var page = dom.parentWithClass(btn, "page");
|
||||
page.querySelector("#btnRestartServer").disabled = true;
|
||||
page.querySelector("#btnShutdown").disabled = true;
|
||||
var page = dom.parentWithClass(btn, 'page');
|
||||
page.querySelector('#btnRestartServer').disabled = true;
|
||||
page.querySelector('#btnShutdown').disabled = true;
|
||||
ApiClient.restartServer();
|
||||
});
|
||||
});
|
||||
},
|
||||
shutdown: function (btn) {
|
||||
require(["confirm"], function (confirm) {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm({
|
||||
title: globalize.translate("HeaderShutdown"),
|
||||
text: globalize.translate("MessageConfirmShutdown"),
|
||||
confirmText: globalize.translate("ButtonShutdown"),
|
||||
primary: "delete"
|
||||
title: globalize.translate('HeaderShutdown'),
|
||||
text: globalize.translate('MessageConfirmShutdown'),
|
||||
confirmText: globalize.translate('ButtonShutdown'),
|
||||
primary: 'delete'
|
||||
}).then(function () {
|
||||
var page = dom.parentWithClass(btn, "page");
|
||||
page.querySelector("#btnRestartServer").disabled = true;
|
||||
page.querySelector("#btnShutdown").disabled = true;
|
||||
var page = dom.parentWithClass(btn, 'page');
|
||||
page.querySelector('#btnRestartServer').disabled = true;
|
||||
page.querySelector('#btnShutdown').disabled = true;
|
||||
ApiClient.shutdownServer();
|
||||
});
|
||||
});
|
||||
@@ -789,8 +789,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
}
|
||||
|
||||
var serverId = ApiClient.serverId();
|
||||
view.querySelector(".activeDevices").addEventListener("click", onActiveDevicesClick);
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.querySelector('.activeDevices').addEventListener('click', onActiveDevicesClick);
|
||||
view.addEventListener('viewshow', function () {
|
||||
var page = this;
|
||||
var apiClient = ApiClient;
|
||||
|
||||
@@ -798,28 +798,28 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
loading.show();
|
||||
pollForInfo(page, apiClient);
|
||||
DashboardPage.startInterval(apiClient);
|
||||
events.on(serverNotifications, "RestartRequired", onRestartRequired);
|
||||
events.on(serverNotifications, "ServerShuttingDown", onServerShuttingDown);
|
||||
events.on(serverNotifications, "ServerRestarting", onServerRestarting);
|
||||
events.on(serverNotifications, "PackageInstalling", onPackageInstalling);
|
||||
events.on(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted);
|
||||
events.on(serverNotifications, "Sessions", onSessionsUpdate);
|
||||
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||
events.on(serverNotifications, 'RestartRequired', onRestartRequired);
|
||||
events.on(serverNotifications, 'ServerShuttingDown', onServerShuttingDown);
|
||||
events.on(serverNotifications, 'ServerRestarting', onServerRestarting);
|
||||
events.on(serverNotifications, 'PackageInstalling', onPackageInstalling);
|
||||
events.on(serverNotifications, 'PackageInstallationCompleted', onPackageInstallationCompleted);
|
||||
events.on(serverNotifications, 'Sessions', onSessionsUpdate);
|
||||
events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
|
||||
DashboardPage.lastAppUpdateCheck = null;
|
||||
reloadSystemInfo(page, ApiClient);
|
||||
|
||||
if (!page.userActivityLog) {
|
||||
page.userActivityLog = new ActivityLog({
|
||||
serverId: ApiClient.serverId(),
|
||||
element: page.querySelector(".userActivityItems")
|
||||
element: page.querySelector('.userActivityItems')
|
||||
});
|
||||
}
|
||||
|
||||
if (ApiClient.isMinServerVersion("3.4.1.25")) {
|
||||
if (ApiClient.isMinServerVersion('3.4.1.25')) {
|
||||
if (!page.serverActivityLog) {
|
||||
page.serverActivityLog = new ActivityLog({
|
||||
serverId: ApiClient.serverId(),
|
||||
element: page.querySelector(".serverActivityItems")
|
||||
element: page.querySelector('.serverActivityItems')
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -828,21 +828,21 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
||||
loading.hide();
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function () {
|
||||
view.addEventListener('viewbeforehide', function () {
|
||||
var apiClient = ApiClient;
|
||||
events.off(serverNotifications, "RestartRequired", onRestartRequired);
|
||||
events.off(serverNotifications, "ServerShuttingDown", onServerShuttingDown);
|
||||
events.off(serverNotifications, "ServerRestarting", onServerRestarting);
|
||||
events.off(serverNotifications, "PackageInstalling", onPackageInstalling);
|
||||
events.off(serverNotifications, "PackageInstallationCompleted", onPackageInstallationCompleted);
|
||||
events.off(serverNotifications, "Sessions", onSessionsUpdate);
|
||||
events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||
events.off(serverNotifications, 'RestartRequired', onRestartRequired);
|
||||
events.off(serverNotifications, 'ServerShuttingDown', onServerShuttingDown);
|
||||
events.off(serverNotifications, 'ServerRestarting', onServerRestarting);
|
||||
events.off(serverNotifications, 'PackageInstalling', onPackageInstalling);
|
||||
events.off(serverNotifications, 'PackageInstallationCompleted', onPackageInstallationCompleted);
|
||||
events.off(serverNotifications, 'Sessions', onSessionsUpdate);
|
||||
events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
|
||||
|
||||
if (apiClient) {
|
||||
DashboardPage.stopInterval(apiClient);
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
var page = this;
|
||||
var userActivityLog = page.userActivityLog;
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
define(["loading", "libraryMenu", "dom", "emby-input", "emby-button"], function (loading, libraryMenu, dom) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryMenu', 'dom', 'emby-input', 'emby-button'], function (loading, libraryMenu, dom) {
|
||||
'use strict';
|
||||
|
||||
function load(page, device, deviceOptions) {
|
||||
page.querySelector("#txtCustomName", page).value = deviceOptions.CustomName || "";
|
||||
page.querySelector(".reportedName", page).innerHTML = device.Name || "";
|
||||
page.querySelector('#txtCustomName', page).value = deviceOptions.CustomName || '';
|
||||
page.querySelector('.reportedName', page).innerHTML = device.Name || '';
|
||||
}
|
||||
|
||||
function loadData() {
|
||||
var page = this;
|
||||
loading.show();
|
||||
var id = getParameterByName("id");
|
||||
var promise1 = ApiClient.getJSON(ApiClient.getUrl("Devices/Info", {
|
||||
var id = getParameterByName('id');
|
||||
var promise1 = ApiClient.getJSON(ApiClient.getUrl('Devices/Info', {
|
||||
Id: id
|
||||
}));
|
||||
var promise2 = ApiClient.getJSON(ApiClient.getUrl("Devices/Options", {
|
||||
var promise2 = ApiClient.getJSON(ApiClient.getUrl('Devices/Options', {
|
||||
Id: id
|
||||
}));
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
@@ -23,28 +23,28 @@ define(["loading", "libraryMenu", "dom", "emby-input", "emby-button"], function
|
||||
}
|
||||
|
||||
function save(page) {
|
||||
var id = getParameterByName("id");
|
||||
var id = getParameterByName('id');
|
||||
ApiClient.ajax({
|
||||
url: ApiClient.getUrl("Devices/Options", {
|
||||
url: ApiClient.getUrl('Devices/Options', {
|
||||
Id: id
|
||||
}),
|
||||
type: "POST",
|
||||
type: 'POST',
|
||||
data: JSON.stringify({
|
||||
CustomName: page.querySelector("#txtCustomName").value
|
||||
CustomName: page.querySelector('#txtCustomName').value
|
||||
}),
|
||||
contentType: "application/json"
|
||||
contentType: 'application/json'
|
||||
}).then(Dashboard.processServerConfigurationUpdateResult);
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
var form = this;
|
||||
save(dom.parentWithClass(form, "page"));
|
||||
save(dom.parentWithClass(form, 'page'));
|
||||
e.preventDefault();
|
||||
return false;
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector("form").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", loadData);
|
||||
view.querySelector('form').addEventListener('submit', onSubmit);
|
||||
view.addEventListener('viewshow', loadData);
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,24 +1,24 @@
|
||||
define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "date-fns", "dfnshelper", "emby-button", "emby-itemscontainer", "cardStyle"], function (loading, dom, libraryMenu, globalize, imageHelper, datefns, dfnshelper) {
|
||||
"use strict";
|
||||
define(['loading', 'dom', 'libraryMenu', 'globalize', 'scripts/imagehelper', 'date-fns', 'dfnshelper', 'emby-button', 'emby-itemscontainer', 'cardStyle'], function (loading, dom, libraryMenu, globalize, imageHelper, datefns, dfnshelper) {
|
||||
'use strict';
|
||||
|
||||
function canDelete(deviceId) {
|
||||
return deviceId !== ApiClient.deviceId();
|
||||
}
|
||||
|
||||
function deleteDevice(page, id) {
|
||||
var msg = globalize.translate("DeleteDeviceConfirmation");
|
||||
var msg = globalize.translate('DeleteDeviceConfirmation');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm({
|
||||
text: msg,
|
||||
title: globalize.translate("HeaderDeleteDevice"),
|
||||
confirmText: globalize.translate("ButtonDelete"),
|
||||
primary: "delete"
|
||||
title: globalize.translate('HeaderDeleteDevice'),
|
||||
confirmText: globalize.translate('ButtonDelete'),
|
||||
primary: 'delete'
|
||||
}).then(function () {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: ApiClient.getUrl("Devices", {
|
||||
type: 'DELETE',
|
||||
url: ApiClient.getUrl('Devices', {
|
||||
Id: id
|
||||
})
|
||||
}).then(function () {
|
||||
@@ -33,31 +33,31 @@ define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "da
|
||||
|
||||
if (canEdit) {
|
||||
menuItems.push({
|
||||
name: globalize.translate("Edit"),
|
||||
id: "open",
|
||||
icon: "mode_edit"
|
||||
name: globalize.translate('Edit'),
|
||||
id: 'open',
|
||||
icon: 'mode_edit'
|
||||
});
|
||||
}
|
||||
|
||||
if (canDelete(deviceId)) {
|
||||
menuItems.push({
|
||||
name: globalize.translate("Delete"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
name: globalize.translate('Delete'),
|
||||
id: 'delete',
|
||||
icon: 'delete'
|
||||
});
|
||||
}
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: btn,
|
||||
callback: function (id) {
|
||||
switch (id) {
|
||||
case "open":
|
||||
Dashboard.navigate("device.html?id=" + deviceId);
|
||||
case 'open':
|
||||
Dashboard.navigate('device.html?id=' + deviceId);
|
||||
break;
|
||||
|
||||
case "delete":
|
||||
case 'delete':
|
||||
deleteDevice(view, deviceId);
|
||||
}
|
||||
}
|
||||
@@ -66,74 +66,74 @@ define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "da
|
||||
}
|
||||
|
||||
function load(page, devices) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += devices.map(function (device) {
|
||||
var deviceHtml = "";
|
||||
var deviceHtml = '';
|
||||
deviceHtml += "<div data-id='" + device.Id + "' class='card backdropCard'>";
|
||||
deviceHtml += '<div class="cardBox visualCardBox">';
|
||||
deviceHtml += '<div class="cardScalable">';
|
||||
deviceHtml += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
deviceHtml += '<a is="emby-linkbutton" href="' + (canEdit ? "device.html?id=" + device.Id : "#") + '" class="cardContent cardImageContainer">';
|
||||
deviceHtml += '<a is="emby-linkbutton" href="' + (canEdit ? 'device.html?id=' + device.Id : '#') + '" class="cardContent cardImageContainer">';
|
||||
var iconUrl = imageHelper.getDeviceIcon(device);
|
||||
|
||||
if (iconUrl) {
|
||||
deviceHtml += '<div class="cardImage" style="background-image:url(\'' + iconUrl + "');background-size: auto 64%;background-position:center center;\">";
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += '</div>';
|
||||
} else {
|
||||
deviceHtml += '<span class="cardImageIcon material-icons tablet_android"></span>';
|
||||
}
|
||||
|
||||
deviceHtml += "</a>";
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += '</a>';
|
||||
deviceHtml += '</div>';
|
||||
deviceHtml += '<div class="cardFooter">';
|
||||
|
||||
if (canEdit || canDelete(device.Id)) {
|
||||
deviceHtml += '<div style="text-align:right; float:right;padding-top:5px;">';
|
||||
deviceHtml += '<button type="button" is="paper-icon-button-light" data-id="' + device.Id + '" title="' + globalize.translate("Menu") + '" class="btnDeviceMenu"><span class="material-icons more_horiz"></span></button>';
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += '<button type="button" is="paper-icon-button-light" data-id="' + device.Id + '" title="' + globalize.translate('Menu') + '" class="btnDeviceMenu"><span class="material-icons more_horiz"></span></button>';
|
||||
deviceHtml += '</div>';
|
||||
}
|
||||
|
||||
deviceHtml += "<div class='cardText'>";
|
||||
deviceHtml += device.Name;
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += '</div>';
|
||||
deviceHtml += "<div class='cardText cardText-secondary'>";
|
||||
deviceHtml += device.AppName + " " + device.AppVersion;
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += device.AppName + ' ' + device.AppVersion;
|
||||
deviceHtml += '</div>';
|
||||
deviceHtml += "<div class='cardText cardText-secondary'>";
|
||||
|
||||
if (device.LastUserName) {
|
||||
deviceHtml += device.LastUserName;
|
||||
deviceHtml += ", " + datefns.formatDistanceToNow(Date.parse(device.DateLastActivity), dfnshelper.localeWithSuffix);
|
||||
deviceHtml += ', ' + datefns.formatDistanceToNow(Date.parse(device.DateLastActivity), dfnshelper.localeWithSuffix);
|
||||
}
|
||||
|
||||
deviceHtml += " ";
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += "</div>";
|
||||
deviceHtml += ' ';
|
||||
deviceHtml += '</div>';
|
||||
deviceHtml += '</div>';
|
||||
deviceHtml += '</div>';
|
||||
deviceHtml += '</div>';
|
||||
return deviceHtml;
|
||||
}).join("");
|
||||
page.querySelector(".devicesList").innerHTML = html;
|
||||
}).join('');
|
||||
page.querySelector('.devicesList').innerHTML = html;
|
||||
}
|
||||
|
||||
function loadData(page) {
|
||||
loading.show();
|
||||
ApiClient.getJSON(ApiClient.getUrl("Devices")).then(function (result) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Devices')).then(function (result) {
|
||||
load(page, result.Items);
|
||||
loading.hide();
|
||||
});
|
||||
}
|
||||
|
||||
var canEdit = ApiClient.isMinServerVersion("3.4.1.31");
|
||||
var canEdit = ApiClient.isMinServerVersion('3.4.1.31');
|
||||
return function (view, params) {
|
||||
view.querySelector(".devicesList").addEventListener("click", function (e) {
|
||||
var btnDeviceMenu = dom.parentWithClass(e.target, "btnDeviceMenu");
|
||||
view.querySelector('.devicesList').addEventListener('click', function (e) {
|
||||
var btnDeviceMenu = dom.parentWithClass(e.target, 'btnDeviceMenu');
|
||||
|
||||
if (btnDeviceMenu) {
|
||||
showDeviceMenu(view, btnDeviceMenu, btnDeviceMenu.getAttribute("data-id"));
|
||||
showDeviceMenu(view, btnDeviceMenu, btnDeviceMenu.getAttribute('data-id'));
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
loadData(this);
|
||||
});
|
||||
};
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,9 +1,9 @@
|
||||
define(["jQuery", "globalize", "loading", "libraryMenu", "listViewStyle", "emby-button"], function ($, globalize, loading, libraryMenu) {
|
||||
"use strict";
|
||||
define(['jQuery', 'globalize', 'loading', 'libraryMenu', 'listViewStyle', 'emby-button'], function ($, globalize, loading, libraryMenu) {
|
||||
'use strict';
|
||||
|
||||
function loadProfiles(page) {
|
||||
loading.show();
|
||||
ApiClient.getJSON(ApiClient.getUrl("Dlna/ProfileInfos")).then(function (result) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Dlna/ProfileInfos')).then(function (result) {
|
||||
renderUserProfiles(page, result);
|
||||
renderSystemProfiles(page, result);
|
||||
loading.hide();
|
||||
@@ -11,19 +11,19 @@ define(["jQuery", "globalize", "loading", "libraryMenu", "listViewStyle", "emby-
|
||||
}
|
||||
|
||||
function renderUserProfiles(page, profiles) {
|
||||
renderProfiles(page, page.querySelector(".customProfiles"), profiles.filter(function (p) {
|
||||
return "User" == p.Type;
|
||||
renderProfiles(page, page.querySelector('.customProfiles'), profiles.filter(function (p) {
|
||||
return 'User' == p.Type;
|
||||
}));
|
||||
}
|
||||
|
||||
function renderSystemProfiles(page, profiles) {
|
||||
renderProfiles(page, page.querySelector(".systemProfiles"), profiles.filter(function (p) {
|
||||
return "System" == p.Type;
|
||||
renderProfiles(page, page.querySelector('.systemProfiles'), profiles.filter(function (p) {
|
||||
return 'System' == p.Type;
|
||||
}));
|
||||
}
|
||||
|
||||
function renderProfiles(page, element, profiles) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
if (profiles.length) {
|
||||
html += '<div class="paperList">';
|
||||
@@ -35,35 +35,35 @@ define(["jQuery", "globalize", "loading", "libraryMenu", "listViewStyle", "emby-
|
||||
html += '<span class="listItemIcon material-icons live_tv"></span>';
|
||||
html += '<div class="listItemBody two-line">';
|
||||
html += "<a is='emby-linkbutton' style='padding:0;margin:0;' data-ripple='false' class='clearLink' href='dlnaprofile.html?id=" + profile.Id + "'>";
|
||||
html += "<div>" + profile.Name + "</div>";
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += '<div>' + profile.Name + '</div>';
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
|
||||
if ("User" == profile.Type) {
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnDeleteProfile" data-profileid="' + profile.Id + '" title="' + globalize.translate("ButtonDelete") + '"><span class="material-icons delete"></span></button>';
|
||||
if ('User' == profile.Type) {
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnDeleteProfile" data-profileid="' + profile.Id + '" title="' + globalize.translate('ButtonDelete') + '"><span class="material-icons delete"></span></button>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
if (profiles.length) {
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
element.innerHTML = html;
|
||||
$(".btnDeleteProfile", element).on("click", function () {
|
||||
var id = this.getAttribute("data-profileid");
|
||||
$('.btnDeleteProfile', element).on('click', function () {
|
||||
var id = this.getAttribute('data-profileid');
|
||||
deleteProfile(page, id);
|
||||
});
|
||||
}
|
||||
|
||||
function deleteProfile(page, id) {
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(globalize.translate("MessageConfirmProfileDeletion"), globalize.translate("HeaderConfirmProfileDeletion")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(globalize.translate('MessageConfirmProfileDeletion'), globalize.translate('HeaderConfirmProfileDeletion')).then(function () {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: ApiClient.getUrl("Dlna/Profiles/" + id)
|
||||
type: 'DELETE',
|
||||
url: ApiClient.getUrl('Dlna/Profiles/' + id)
|
||||
}).then(function () {
|
||||
loading.hide();
|
||||
loadProfiles(page);
|
||||
@@ -74,16 +74,16 @@ define(["jQuery", "globalize", "loading", "libraryMenu", "listViewStyle", "emby-
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "dlnasettings.html",
|
||||
name: globalize.translate("TabSettings")
|
||||
href: 'dlnasettings.html',
|
||||
name: globalize.translate('TabSettings')
|
||||
}, {
|
||||
href: "dlnaprofiles.html",
|
||||
name: globalize.translate("TabProfiles")
|
||||
href: 'dlnaprofiles.html',
|
||||
name: globalize.translate('TabProfiles')
|
||||
}];
|
||||
}
|
||||
|
||||
$(document).on("pageshow", "#dlnaProfilesPage", function () {
|
||||
libraryMenu.setTabs("dlna", 1, getTabs);
|
||||
$(document).on('pageshow', '#dlnaProfilesPage', function () {
|
||||
libraryMenu.setTabs('dlna', 1, getTabs);
|
||||
loadProfiles(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,53 +1,53 @@
|
||||
define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function ($, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'fnchecked'], function ($, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config, users) {
|
||||
page.querySelector("#chkEnablePlayTo").checked = config.EnablePlayTo;
|
||||
page.querySelector("#chkEnableDlnaDebugLogging").checked = config.EnableDebugLog;
|
||||
$("#txtClientDiscoveryInterval", page).val(config.ClientDiscoveryIntervalSeconds);
|
||||
$("#chkEnableServer", page).checked(config.EnableServer);
|
||||
$("#chkBlastAliveMessages", page).checked(config.BlastAliveMessages);
|
||||
$("#txtBlastInterval", page).val(config.BlastAliveMessageIntervalSeconds);
|
||||
page.querySelector('#chkEnablePlayTo').checked = config.EnablePlayTo;
|
||||
page.querySelector('#chkEnableDlnaDebugLogging').checked = config.EnableDebugLog;
|
||||
$('#txtClientDiscoveryInterval', page).val(config.ClientDiscoveryIntervalSeconds);
|
||||
$('#chkEnableServer', page).checked(config.EnableServer);
|
||||
$('#chkBlastAliveMessages', page).checked(config.BlastAliveMessages);
|
||||
$('#txtBlastInterval', page).val(config.BlastAliveMessageIntervalSeconds);
|
||||
var usersHtml = users.map(function (u) {
|
||||
return '<option value="' + u.Id + '">' + u.Name + "</option>";
|
||||
}).join("");
|
||||
$("#selectUser", page).html(usersHtml).val(config.DefaultUserId || "");
|
||||
return '<option value="' + u.Id + '">' + u.Name + '</option>';
|
||||
}).join('');
|
||||
$('#selectUser', page).html(usersHtml).val(config.DefaultUserId || '');
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
loading.show();
|
||||
var form = this;
|
||||
ApiClient.getNamedConfiguration("dlna").then(function (config) {
|
||||
config.EnablePlayTo = form.querySelector("#chkEnablePlayTo").checked;
|
||||
config.EnableDebugLog = form.querySelector("#chkEnableDlnaDebugLogging").checked;
|
||||
config.ClientDiscoveryIntervalSeconds = $("#txtClientDiscoveryInterval", form).val();
|
||||
config.EnableServer = $("#chkEnableServer", form).checked();
|
||||
config.BlastAliveMessages = $("#chkBlastAliveMessages", form).checked();
|
||||
config.BlastAliveMessageIntervalSeconds = $("#txtBlastInterval", form).val();
|
||||
config.DefaultUserId = $("#selectUser", form).val();
|
||||
ApiClient.updateNamedConfiguration("dlna", config).then(Dashboard.processServerConfigurationUpdateResult);
|
||||
ApiClient.getNamedConfiguration('dlna').then(function (config) {
|
||||
config.EnablePlayTo = form.querySelector('#chkEnablePlayTo').checked;
|
||||
config.EnableDebugLog = form.querySelector('#chkEnableDlnaDebugLogging').checked;
|
||||
config.ClientDiscoveryIntervalSeconds = $('#txtClientDiscoveryInterval', form).val();
|
||||
config.EnableServer = $('#chkEnableServer', form).checked();
|
||||
config.BlastAliveMessages = $('#chkBlastAliveMessages', form).checked();
|
||||
config.BlastAliveMessageIntervalSeconds = $('#txtBlastInterval', form).val();
|
||||
config.DefaultUserId = $('#selectUser', form).val();
|
||||
ApiClient.updateNamedConfiguration('dlna', config).then(Dashboard.processServerConfigurationUpdateResult);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "dlnasettings.html",
|
||||
name: globalize.translate("TabSettings")
|
||||
href: 'dlnasettings.html',
|
||||
name: globalize.translate('TabSettings')
|
||||
}, {
|
||||
href: "dlnaprofiles.html",
|
||||
name: globalize.translate("TabProfiles")
|
||||
href: 'dlnaprofiles.html',
|
||||
name: globalize.translate('TabProfiles')
|
||||
}];
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#dlnaSettingsPage", function () {
|
||||
$(".dlnaSettingsForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#dlnaSettingsPage", function () {
|
||||
libraryMenu.setTabs("dlna", 0, getTabs);
|
||||
$(document).on('pageinit', '#dlnaSettingsPage', function () {
|
||||
$('.dlnaSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#dlnaSettingsPage', function () {
|
||||
libraryMenu.setTabs('dlna', 0, getTabs);
|
||||
loading.show();
|
||||
var page = this;
|
||||
var promise1 = ApiClient.getNamedConfiguration("dlna");
|
||||
var promise1 = ApiClient.getNamedConfiguration('dlna');
|
||||
var promise2 = ApiClient.getUsers();
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
loadPage(page, responses[0], responses[1]);
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, loading, globalize, dom, libraryMenu) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'globalize', 'dom', 'libraryMenu'], function ($, loading, globalize, dom, libraryMenu) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config, systemInfo) {
|
||||
Array.prototype.forEach.call(page.querySelectorAll(".chkDecodeCodec"), function (c) {
|
||||
c.checked = -1 !== (config.HardwareDecodingCodecs || []).indexOf(c.getAttribute("data-codec"));
|
||||
Array.prototype.forEach.call(page.querySelectorAll('.chkDecodeCodec'), function (c) {
|
||||
c.checked = -1 !== (config.HardwareDecodingCodecs || []).indexOf(c.getAttribute('data-codec'));
|
||||
});
|
||||
page.querySelector("#chkHardwareEncoding").checked = config.EnableHardwareEncoding;
|
||||
$("#selectVideoDecoder", page).val(config.HardwareAccelerationType);
|
||||
$("#selectThreadCount", page).val(config.EncodingThreadCount);
|
||||
$("#txtDownMixAudioBoost", page).val(config.DownMixAudioBoost);
|
||||
page.querySelector(".txtEncoderPath").value = config.EncoderAppPathDisplay || "";
|
||||
$("#txtTranscodingTempPath", page).val(systemInfo.TranscodingTempPath || "");
|
||||
$("#txtVaapiDevice", page).val(config.VaapiDevice || "");
|
||||
page.querySelector("#selectEncoderPreset").value = config.EncoderPreset || "";
|
||||
page.querySelector("#txtH264Crf").value = config.H264Crf || "";
|
||||
page.querySelector("#selectDeinterlaceMethod").value = config.DeinterlaceMethod || "";
|
||||
page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false;
|
||||
page.querySelector("#chkEnableThrottling").checked = config.EnableThrottling || false;
|
||||
page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", {
|
||||
page.querySelector('#chkHardwareEncoding').checked = config.EnableHardwareEncoding;
|
||||
$('#selectVideoDecoder', page).val(config.HardwareAccelerationType);
|
||||
$('#selectThreadCount', page).val(config.EncodingThreadCount);
|
||||
$('#txtDownMixAudioBoost', page).val(config.DownMixAudioBoost);
|
||||
page.querySelector('.txtEncoderPath').value = config.EncoderAppPathDisplay || '';
|
||||
$('#txtTranscodingTempPath', page).val(systemInfo.TranscodingTempPath || '');
|
||||
$('#txtVaapiDevice', page).val(config.VaapiDevice || '');
|
||||
page.querySelector('#selectEncoderPreset').value = config.EncoderPreset || '';
|
||||
page.querySelector('#txtH264Crf').value = config.H264Crf || '';
|
||||
page.querySelector('#selectDeinterlaceMethod').value = config.DeinterlaceMethod || '';
|
||||
page.querySelector('#chkEnableSubtitleExtraction').checked = config.EnableSubtitleExtraction || false;
|
||||
page.querySelector('#chkEnableThrottling').checked = config.EnableThrottling || false;
|
||||
page.querySelector('#selectVideoDecoder').dispatchEvent(new CustomEvent('change', {
|
||||
bubbles: true
|
||||
}));
|
||||
loading.hide();
|
||||
@@ -25,10 +25,10 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||
|
||||
function onSaveEncodingPathFailure(response) {
|
||||
loading.hide();
|
||||
var msg = "";
|
||||
msg = globalize.translate("FFmpegSavePathNotFound");
|
||||
var msg = '';
|
||||
msg = globalize.translate('FFmpegSavePathNotFound');
|
||||
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
alert(msg);
|
||||
});
|
||||
}
|
||||
@@ -36,11 +36,11 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||
function updateEncoder(form) {
|
||||
return ApiClient.getSystemInfo().then(function (systemInfo) {
|
||||
return ApiClient.ajax({
|
||||
url: ApiClient.getUrl("System/MediaEncoder/Path"),
|
||||
type: "POST",
|
||||
url: ApiClient.getUrl('System/MediaEncoder/Path'),
|
||||
type: 'POST',
|
||||
data: {
|
||||
Path: form.querySelector(".txtEncoderPath").value,
|
||||
PathType: "Custom"
|
||||
Path: form.querySelector('.txtEncoderPath').value,
|
||||
PathType: 'Custom'
|
||||
}
|
||||
}).then(Dashboard.processServerConfigurationUpdateResult, onSaveEncodingPathFailure);
|
||||
});
|
||||
@@ -51,28 +51,28 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||
|
||||
var onDecoderConfirmed = function () {
|
||||
loading.show();
|
||||
ApiClient.getNamedConfiguration("encoding").then(function (config) {
|
||||
config.DownMixAudioBoost = $("#txtDownMixAudioBoost", form).val();
|
||||
config.TranscodingTempPath = $("#txtTranscodingTempPath", form).val();
|
||||
config.EncodingThreadCount = $("#selectThreadCount", form).val();
|
||||
config.HardwareAccelerationType = $("#selectVideoDecoder", form).val();
|
||||
config.VaapiDevice = $("#txtVaapiDevice", form).val();
|
||||
config.EncoderPreset = form.querySelector("#selectEncoderPreset").value;
|
||||
config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0");
|
||||
config.DeinterlaceMethod = form.querySelector("#selectDeinterlaceMethod").value;
|
||||
config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").checked;
|
||||
config.EnableThrottling = form.querySelector("#chkEnableThrottling").checked;
|
||||
config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll(".chkDecodeCodec"), function (c) {
|
||||
ApiClient.getNamedConfiguration('encoding').then(function (config) {
|
||||
config.DownMixAudioBoost = $('#txtDownMixAudioBoost', form).val();
|
||||
config.TranscodingTempPath = $('#txtTranscodingTempPath', form).val();
|
||||
config.EncodingThreadCount = $('#selectThreadCount', form).val();
|
||||
config.HardwareAccelerationType = $('#selectVideoDecoder', form).val();
|
||||
config.VaapiDevice = $('#txtVaapiDevice', form).val();
|
||||
config.EncoderPreset = form.querySelector('#selectEncoderPreset').value;
|
||||
config.H264Crf = parseInt(form.querySelector('#txtH264Crf').value || '0');
|
||||
config.DeinterlaceMethod = form.querySelector('#selectDeinterlaceMethod').value;
|
||||
config.EnableSubtitleExtraction = form.querySelector('#chkEnableSubtitleExtraction').checked;
|
||||
config.EnableThrottling = form.querySelector('#chkEnableThrottling').checked;
|
||||
config.HardwareDecodingCodecs = Array.prototype.map.call(Array.prototype.filter.call(form.querySelectorAll('.chkDecodeCodec'), function (c) {
|
||||
return c.checked;
|
||||
}), function (c) {
|
||||
return c.getAttribute("data-codec");
|
||||
return c.getAttribute('data-codec');
|
||||
});
|
||||
config.EnableHardwareEncoding = form.querySelector("#chkHardwareEncoding").checked;
|
||||
ApiClient.updateNamedConfiguration("encoding", config).then(function () {
|
||||
config.EnableHardwareEncoding = form.querySelector('#chkHardwareEncoding').checked;
|
||||
ApiClient.updateNamedConfiguration('encoding', config).then(function () {
|
||||
updateEncoder(form);
|
||||
}, function () {
|
||||
require(["alert"], function (alert) {
|
||||
alert(globalize.translate("DefaultErrorMessage"));
|
||||
require(['alert'], function (alert) {
|
||||
alert(globalize.translate('DefaultErrorMessage'));
|
||||
});
|
||||
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
@@ -80,11 +80,11 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||
});
|
||||
};
|
||||
|
||||
if ($("#selectVideoDecoder", form).val()) {
|
||||
require(["alert"], function (alert) {
|
||||
if ($('#selectVideoDecoder', form).val()) {
|
||||
require(['alert'], function (alert) {
|
||||
alert({
|
||||
title: globalize.translate("TitleHardwareAcceleration"),
|
||||
text: globalize.translate("HardwareAccelerationWarning")
|
||||
title: globalize.translate('TitleHardwareAcceleration'),
|
||||
text: globalize.translate('HardwareAccelerationWarning')
|
||||
}).then(onDecoderConfirmed);
|
||||
});
|
||||
} else {
|
||||
@@ -95,64 +95,64 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||
}
|
||||
|
||||
function setDecodingCodecsVisible(context, value) {
|
||||
value = value || "";
|
||||
value = value || '';
|
||||
var any;
|
||||
Array.prototype.forEach.call(context.querySelectorAll(".chkDecodeCodec"), function (c) {
|
||||
if (-1 === c.getAttribute("data-types").split(",").indexOf(value)) {
|
||||
dom.parentWithTag(c, "LABEL").classList.add("hide");
|
||||
Array.prototype.forEach.call(context.querySelectorAll('.chkDecodeCodec'), function (c) {
|
||||
if (-1 === c.getAttribute('data-types').split(',').indexOf(value)) {
|
||||
dom.parentWithTag(c, 'LABEL').classList.add('hide');
|
||||
} else {
|
||||
dom.parentWithTag(c, "LABEL").classList.remove("hide");
|
||||
dom.parentWithTag(c, 'LABEL').classList.remove('hide');
|
||||
any = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (any) {
|
||||
context.querySelector(".decodingCodecsList").classList.remove("hide");
|
||||
context.querySelector('.decodingCodecsList').classList.remove('hide');
|
||||
} else {
|
||||
context.querySelector(".decodingCodecsList").classList.add("hide");
|
||||
context.querySelector('.decodingCodecsList').classList.add('hide');
|
||||
}
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "encodingsettings.html",
|
||||
name: globalize.translate("Transcoding")
|
||||
href: 'encodingsettings.html',
|
||||
name: globalize.translate('Transcoding')
|
||||
}, {
|
||||
href: "playbackconfiguration.html",
|
||||
name: globalize.translate("TabResumeSettings")
|
||||
href: 'playbackconfiguration.html',
|
||||
name: globalize.translate('TabResumeSettings')
|
||||
}, {
|
||||
href: "streamingsettings.html",
|
||||
name: globalize.translate("TabStreaming")
|
||||
href: 'streamingsettings.html',
|
||||
name: globalize.translate('TabStreaming')
|
||||
}];
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#encodingSettingsPage", function () {
|
||||
$(document).on('pageinit', '#encodingSettingsPage', function () {
|
||||
var page = this;
|
||||
page.querySelector("#selectVideoDecoder").addEventListener("change", function () {
|
||||
if ("vaapi" == this.value) {
|
||||
page.querySelector(".fldVaapiDevice").classList.remove("hide");
|
||||
page.querySelector("#txtVaapiDevice").setAttribute("required", "required");
|
||||
page.querySelector('#selectVideoDecoder').addEventListener('change', function () {
|
||||
if ('vaapi' == this.value) {
|
||||
page.querySelector('.fldVaapiDevice').classList.remove('hide');
|
||||
page.querySelector('#txtVaapiDevice').setAttribute('required', 'required');
|
||||
} else {
|
||||
page.querySelector(".fldVaapiDevice").classList.add("hide");
|
||||
page.querySelector("#txtVaapiDevice").removeAttribute("required");
|
||||
page.querySelector('.fldVaapiDevice').classList.add('hide');
|
||||
page.querySelector('#txtVaapiDevice').removeAttribute('required');
|
||||
}
|
||||
|
||||
if (this.value) {
|
||||
page.querySelector(".hardwareAccelerationOptions").classList.remove("hide");
|
||||
page.querySelector('.hardwareAccelerationOptions').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".hardwareAccelerationOptions").classList.add("hide");
|
||||
page.querySelector('.hardwareAccelerationOptions').classList.add('hide');
|
||||
}
|
||||
|
||||
setDecodingCodecsVisible(page, this.value);
|
||||
});
|
||||
$("#btnSelectEncoderPath", page).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectEncoderPath', page).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
includeFiles: true,
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
$(".txtEncoderPath", page).val(path);
|
||||
$('.txtEncoderPath', page).val(path);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
@@ -160,29 +160,29 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function ($, lo
|
||||
});
|
||||
});
|
||||
});
|
||||
$("#btnSelectTranscodingTempPath", page).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectTranscodingTempPath', page).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
$("#txtTranscodingTempPath", page).val(path);
|
||||
$('#txtTranscodingTempPath', page).val(path);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
validateWriteable: true,
|
||||
header: globalize.translate("HeaderSelectTranscodingPath"),
|
||||
instruction: globalize.translate("HeaderSelectTranscodingPathHelp")
|
||||
header: globalize.translate('HeaderSelectTranscodingPath'),
|
||||
instruction: globalize.translate('HeaderSelectTranscodingPathHelp')
|
||||
});
|
||||
});
|
||||
});
|
||||
$(".encodingSettingsForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#encodingSettingsPage", function () {
|
||||
$('.encodingSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#encodingSettingsPage', function () {
|
||||
loading.show();
|
||||
libraryMenu.setTabs("playback", 0, getTabs);
|
||||
libraryMenu.setTabs('playback', 0, getTabs);
|
||||
var page = this;
|
||||
ApiClient.getNamedConfiguration("encoding").then(function (config) {
|
||||
ApiClient.getNamedConfiguration('encoding').then(function (config) {
|
||||
ApiClient.getSystemInfo().then(function (systemInfo) {
|
||||
loadPage(page, config, systemInfo);
|
||||
});
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox", "emby-textarea", "emby-input", "emby-select", "emby-button"], function ($, loading, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'globalize', 'fnchecked', 'emby-checkbox', 'emby-textarea', 'emby-input', 'emby-select', 'emby-button'], function ($, loading, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config, languageOptions, systemInfo) {
|
||||
page.querySelector("#txtServerName").value = systemInfo.ServerName;
|
||||
$("#chkAutoRunWebApp", page).checked(config.AutoRunWebApp);
|
||||
page.querySelector('#txtServerName').value = systemInfo.ServerName;
|
||||
$('#chkAutoRunWebApp', page).checked(config.AutoRunWebApp);
|
||||
|
||||
if (systemInfo.CanLaunchWebBrowser) {
|
||||
page.querySelector("#fldAutoRunWebApp").classList.remove("hide");
|
||||
page.querySelector('#fldAutoRunWebApp').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector("#fldAutoRunWebApp").classList.add("hide");
|
||||
page.querySelector('#fldAutoRunWebApp').classList.add('hide');
|
||||
}
|
||||
|
||||
page.querySelector("#txtCachePath").value = systemInfo.CachePath || "";
|
||||
$("#txtMetadataPath", page).val(systemInfo.InternalMetadataPath || "");
|
||||
$("#txtMetadataNetworkPath", page).val(systemInfo.MetadataNetworkPath || "");
|
||||
$("#selectLocalizationLanguage", page).html(languageOptions.map(function (language) {
|
||||
return '<option value="' + language.Value + '">' + language.Name + "</option>";
|
||||
page.querySelector('#txtCachePath').value = systemInfo.CachePath || '';
|
||||
$('#txtMetadataPath', page).val(systemInfo.InternalMetadataPath || '');
|
||||
$('#txtMetadataNetworkPath', page).val(systemInfo.MetadataNetworkPath || '');
|
||||
$('#selectLocalizationLanguage', page).html(languageOptions.map(function (language) {
|
||||
return '<option value="' + language.Value + '">' + language.Name + '</option>';
|
||||
})).val(config.UICulture);
|
||||
currentLanguage = config.UICulture;
|
||||
if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) {
|
||||
$(".autoUpdatesContainer", page).removeClass("hide");
|
||||
$('.autoUpdatesContainer', page).removeClass('hide');
|
||||
} else {
|
||||
$(".autoUpdatesContainer", page).addClass("hide");
|
||||
$('.autoUpdatesContainer', page).addClass('hide');
|
||||
}
|
||||
|
||||
loading.hide();
|
||||
@@ -30,19 +30,19 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox", "emby-te
|
||||
function onSubmit() {
|
||||
loading.show();
|
||||
var form = this;
|
||||
$(form).parents(".page");
|
||||
$(form).parents('.page');
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
config.ServerName = $("#txtServerName", form).val();
|
||||
config.UICulture = $("#selectLocalizationLanguage", form).val();
|
||||
config.CachePath = form.querySelector("#txtCachePath").value;
|
||||
config.MetadataPath = $("#txtMetadataPath", form).val();
|
||||
config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val();
|
||||
config.ServerName = $('#txtServerName', form).val();
|
||||
config.UICulture = $('#selectLocalizationLanguage', form).val();
|
||||
config.CachePath = form.querySelector('#txtCachePath').value;
|
||||
config.MetadataPath = $('#txtMetadataPath', form).val();
|
||||
config.MetadataNetworkPath = $('#txtMetadataNetworkPath', form).val();
|
||||
var requiresReload = config.UICulture !== currentLanguage;
|
||||
config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked();
|
||||
config.AutoRunWebApp = $('#chkAutoRunWebApp', form).checked();
|
||||
ApiClient.updateServerConfiguration(config).then(function() {
|
||||
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) {
|
||||
brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value;
|
||||
brandingConfig.CustomCss = form.querySelector("#txtCustomCss").value;
|
||||
brandingConfig.LoginDisclaimer = form.querySelector('#txtLoginDisclaimer').value;
|
||||
brandingConfig.CustomCss = form.querySelector('#txtCustomCss').value;
|
||||
|
||||
if (currentBrandingOptions && brandingConfig.CustomCss !== currentBrandingOptions.CustomCss) {
|
||||
requiresReload = true;
|
||||
@@ -57,8 +57,8 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox", "emby-te
|
||||
});
|
||||
});
|
||||
}, function () {
|
||||
require(["alert"], function (alert) {
|
||||
alert(globalize.translate("DefaultErrorMessage"));
|
||||
require(['alert'], function (alert) {
|
||||
alert(globalize.translate('DefaultErrorMessage'));
|
||||
});
|
||||
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
@@ -69,61 +69,61 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox", "emby-te
|
||||
|
||||
var currentBrandingOptions;
|
||||
var currentLanguage;
|
||||
var brandingConfigKey = "branding";
|
||||
var brandingConfigKey = 'branding';
|
||||
return function (view, params) {
|
||||
$("#btnSelectCachePath", view).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectCachePath', view).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
view.querySelector("#txtCachePath").value = path;
|
||||
view.querySelector('#txtCachePath').value = path;
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
validateWriteable: true,
|
||||
header: globalize.translate("HeaderSelectServerCachePath"),
|
||||
instruction: globalize.translate("HeaderSelectServerCachePathHelp")
|
||||
header: globalize.translate('HeaderSelectServerCachePath'),
|
||||
instruction: globalize.translate('HeaderSelectServerCachePathHelp')
|
||||
});
|
||||
});
|
||||
});
|
||||
$("#btnSelectMetadataPath", view).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectMetadataPath', view).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
path: $("#txtMetadataPath", view).val(),
|
||||
networkSharePath: $("#txtMetadataNetworkPath", view).val(),
|
||||
path: $('#txtMetadataPath', view).val(),
|
||||
networkSharePath: $('#txtMetadataNetworkPath', view).val(),
|
||||
callback: function (path, networkPath) {
|
||||
if (path) {
|
||||
$("#txtMetadataPath", view).val(path);
|
||||
$('#txtMetadataPath', view).val(path);
|
||||
}
|
||||
|
||||
if (networkPath) {
|
||||
$("#txtMetadataNetworkPath", view).val(networkPath);
|
||||
$('#txtMetadataNetworkPath', view).val(networkPath);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
validateWriteable: true,
|
||||
header: globalize.translate("HeaderSelectMetadataPath"),
|
||||
instruction: globalize.translate("HeaderSelectMetadataPathHelp"),
|
||||
header: globalize.translate('HeaderSelectMetadataPath'),
|
||||
instruction: globalize.translate('HeaderSelectMetadataPathHelp'),
|
||||
enableNetworkSharePath: true
|
||||
});
|
||||
});
|
||||
});
|
||||
$(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function () {
|
||||
$('.dashboardGeneralForm', view).off('submit', onSubmit).on('submit', onSubmit);
|
||||
view.addEventListener('viewshow', function () {
|
||||
var promiseConfig = ApiClient.getServerConfiguration();
|
||||
var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl("Localization/Options"));
|
||||
var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl('Localization/Options'));
|
||||
var promiseSystemInfo = ApiClient.getSystemInfo();
|
||||
Promise.all([promiseConfig, promiseLanguageOptions, promiseSystemInfo]).then(function (responses) {
|
||||
loadPage(view, responses[0], responses[1], responses[2]);
|
||||
});
|
||||
ApiClient.getNamedConfiguration(brandingConfigKey).then(function (config) {
|
||||
currentBrandingOptions = config;
|
||||
view.querySelector("#txtLoginDisclaimer").value = config.LoginDisclaimer || "";
|
||||
view.querySelector("#txtCustomCss").value = config.CustomCss || "";
|
||||
view.querySelector('#txtLoginDisclaimer').value = config.LoginDisclaimer || '';
|
||||
view.querySelector('#txtCustomCss').value = config.CustomCss || '';
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,50 +1,50 @@
|
||||
define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", "emby-button"], function(globalize, loading, libraryMenu) {
|
||||
"use strict";
|
||||
define(['globalize', 'loading', 'libraryMenu', 'emby-checkbox', 'emby-button', 'emby-button'], function(globalize, loading, libraryMenu) {
|
||||
'use strict';
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "library.html",
|
||||
name: globalize.translate("HeaderLibraries")
|
||||
href: 'library.html',
|
||||
name: globalize.translate('HeaderLibraries')
|
||||
}, {
|
||||
href: "librarydisplay.html",
|
||||
name: globalize.translate("TabDisplay")
|
||||
href: 'librarydisplay.html',
|
||||
name: globalize.translate('TabDisplay')
|
||||
}, {
|
||||
href: "metadataimages.html",
|
||||
name: globalize.translate("TabMetadata")
|
||||
href: 'metadataimages.html',
|
||||
name: globalize.translate('TabMetadata')
|
||||
}, {
|
||||
href: "metadatanfo.html",
|
||||
name: globalize.translate("TabNfoSettings")
|
||||
href: 'metadatanfo.html',
|
||||
name: globalize.translate('TabNfoSettings')
|
||||
}];
|
||||
}
|
||||
|
||||
return function(view, params) {
|
||||
function loadData() {
|
||||
ApiClient.getServerConfiguration().then(function(config) {
|
||||
view.querySelector(".chkFolderView").checked = config.EnableFolderView;
|
||||
view.querySelector(".chkGroupMoviesIntoCollections").checked = config.EnableGroupingIntoCollections;
|
||||
view.querySelector(".chkDisplaySpecialsWithinSeasons").checked = config.DisplaySpecialsWithinSeasons;
|
||||
view.querySelector(".chkExternalContentInSuggestions").checked = config.EnableExternalContentInSuggestions;
|
||||
view.querySelector("#chkSaveMetadataHidden").checked = config.SaveMetadataHidden;
|
||||
view.querySelector('.chkFolderView').checked = config.EnableFolderView;
|
||||
view.querySelector('.chkGroupMoviesIntoCollections').checked = config.EnableGroupingIntoCollections;
|
||||
view.querySelector('.chkDisplaySpecialsWithinSeasons').checked = config.DisplaySpecialsWithinSeasons;
|
||||
view.querySelector('.chkExternalContentInSuggestions').checked = config.EnableExternalContentInSuggestions;
|
||||
view.querySelector('#chkSaveMetadataHidden').checked = config.SaveMetadataHidden;
|
||||
});
|
||||
ApiClient.getNamedConfiguration("metadata").then(function(metadata) {
|
||||
view.querySelector("#selectDateAdded").selectedIndex = metadata.UseFileCreationTimeForDateAdded ? 1 : 0;
|
||||
ApiClient.getNamedConfiguration('metadata').then(function(metadata) {
|
||||
view.querySelector('#selectDateAdded').selectedIndex = metadata.UseFileCreationTimeForDateAdded ? 1 : 0;
|
||||
});
|
||||
}
|
||||
|
||||
view.querySelector("form").addEventListener("submit", function(e) {
|
||||
view.querySelector('form').addEventListener('submit', function(e) {
|
||||
loading.show();
|
||||
var form = this;
|
||||
ApiClient.getServerConfiguration().then(function(config) {
|
||||
config.EnableFolderView = form.querySelector(".chkFolderView").checked;
|
||||
config.EnableGroupingIntoCollections = form.querySelector(".chkGroupMoviesIntoCollections").checked;
|
||||
config.DisplaySpecialsWithinSeasons = form.querySelector(".chkDisplaySpecialsWithinSeasons").checked;
|
||||
config.EnableExternalContentInSuggestions = form.querySelector(".chkExternalContentInSuggestions").checked;
|
||||
config.SaveMetadataHidden = form.querySelector("#chkSaveMetadataHidden").checked;
|
||||
config.EnableFolderView = form.querySelector('.chkFolderView').checked;
|
||||
config.EnableGroupingIntoCollections = form.querySelector('.chkGroupMoviesIntoCollections').checked;
|
||||
config.DisplaySpecialsWithinSeasons = form.querySelector('.chkDisplaySpecialsWithinSeasons').checked;
|
||||
config.EnableExternalContentInSuggestions = form.querySelector('.chkExternalContentInSuggestions').checked;
|
||||
config.SaveMetadataHidden = form.querySelector('#chkSaveMetadataHidden').checked;
|
||||
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
|
||||
});
|
||||
ApiClient.getNamedConfiguration("metadata").then(function(config) {
|
||||
config.UseFileCreationTimeForDateAdded = "1" === $("#selectDateAdded", form).val();
|
||||
ApiClient.updateNamedConfiguration("metadata", config);
|
||||
ApiClient.getNamedConfiguration('metadata').then(function(config) {
|
||||
config.UseFileCreationTimeForDateAdded = '1' === $('#selectDateAdded', form).val();
|
||||
ApiClient.updateNamedConfiguration('metadata', config);
|
||||
});
|
||||
|
||||
e.preventDefault();
|
||||
@@ -52,14 +52,14 @@ define(["globalize", "loading", "libraryMenu", "emby-checkbox", "emby-button", "
|
||||
return false;
|
||||
});
|
||||
|
||||
view.addEventListener("viewshow", function() {
|
||||
libraryMenu.setTabs("librarysetup", 1, getTabs);
|
||||
view.addEventListener('viewshow', function() {
|
||||
libraryMenu.setTabs('librarysetup', 1, getTabs);
|
||||
loadData();
|
||||
ApiClient.getSystemInfo().then(function(info) {
|
||||
if ("Windows" === info.OperatingSystem) {
|
||||
view.querySelector(".fldSaveMetadataHidden").classList.remove("hide");
|
||||
if ('Windows' === info.OperatingSystem) {
|
||||
view.querySelector('.fldSaveMetadataHidden').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldSaveMetadataHidden").classList.add("hide");
|
||||
view.querySelector('.fldSaveMetadataHidden').classList.add('hide');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
define(["datetime", "loading", "apphost", "listViewStyle", "emby-button", "flexStyles"], function(datetime, loading, appHost) {
|
||||
"use strict";
|
||||
define(['datetime', 'loading', 'apphost', 'listViewStyle', 'emby-button', 'flexStyles'], function(datetime, loading, appHost) {
|
||||
'use strict';
|
||||
return function(view, params) {
|
||||
view.addEventListener("viewbeforeshow", function() {
|
||||
view.addEventListener('viewbeforeshow', function() {
|
||||
loading.show();
|
||||
var apiClient = ApiClient;
|
||||
apiClient.getJSON(apiClient.getUrl("System/Logs")).then(function(logs) {
|
||||
var html = "";
|
||||
apiClient.getJSON(apiClient.getUrl('System/Logs')).then(function(logs) {
|
||||
var html = '';
|
||||
html += '<div class="paperList">';
|
||||
html += logs.map(function(log) {
|
||||
var logUrl = apiClient.getUrl("System/Logs/Log", {
|
||||
var logUrl = apiClient.getUrl('System/Logs/Log', {
|
||||
name: log.Name
|
||||
});
|
||||
logUrl += "&api_key=" + apiClient.accessToken();
|
||||
var logHtml = "";
|
||||
logUrl += '&api_key=' + apiClient.accessToken();
|
||||
var logHtml = '';
|
||||
logHtml += '<a is="emby-linkbutton" href="' + logUrl + '" target="_blank" class="listItem listItem-border" style="color:inherit;">';
|
||||
logHtml += '<div class="listItemBody two-line">';
|
||||
logHtml += "<h3 class='listItemBodyText'>" + log.Name + "</h3>";
|
||||
logHtml += "<h3 class='listItemBodyText'>" + log.Name + '</h3>';
|
||||
var date = datetime.parseISO8601Date(log.DateModified, true);
|
||||
var text = datetime.toLocaleDateString(date);
|
||||
text += " " + datetime.getDisplayTime(date);
|
||||
logHtml += '<div class="listItemBodyText secondary">' + text + "</div>";
|
||||
logHtml += "</div>";
|
||||
logHtml += "</a>";
|
||||
text += ' ' + datetime.getDisplayTime(date);
|
||||
logHtml += '<div class="listItemBodyText secondary">' + text + '</div>';
|
||||
logHtml += '</div>';
|
||||
logHtml += '</a>';
|
||||
return logHtml;
|
||||
}).join("");
|
||||
html += "</div>";
|
||||
view.querySelector(".serverLogs").innerHTML = html;
|
||||
}).join('');
|
||||
html += '</div>';
|
||||
view.querySelector('.serverLogs').innerHTML = html;
|
||||
loading.hide();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "globalize", "dom", "indicators", "scripts/imagehelper", "cardStyle", "emby-itemrefreshindicator"], function ($, appHost, taskButton, loading, libraryMenu, globalize, dom, indicators, imageHelper) {
|
||||
"use strict";
|
||||
define(['jQuery', 'apphost', 'scripts/taskbutton', 'loading', 'libraryMenu', 'globalize', 'dom', 'indicators', 'scripts/imagehelper', 'cardStyle', 'emby-itemrefreshindicator'], function ($, appHost, taskButton, loading, libraryMenu, globalize, dom, indicators, imageHelper) {
|
||||
'use strict';
|
||||
|
||||
function addVirtualFolder(page) {
|
||||
require(["medialibrarycreator"], function (medialibrarycreator) {
|
||||
require(['medialibrarycreator'], function (medialibrarycreator) {
|
||||
new medialibrarycreator().show({
|
||||
collectionTypeOptions: getCollectionTypeOptions().filter(function (f) {
|
||||
return !f.hidden;
|
||||
@@ -17,7 +17,7 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function editVirtualFolder(page, virtualFolder) {
|
||||
require(["medialibraryeditor"], function (medialibraryeditor) {
|
||||
require(['medialibraryeditor'], function (medialibraryeditor) {
|
||||
new medialibraryeditor().show({
|
||||
refresh: shouldRefreshLibraryAfterChanges(page),
|
||||
library: virtualFolder
|
||||
@@ -30,14 +30,14 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function deleteVirtualFolder(page, virtualFolder) {
|
||||
var msg = globalize.translate("MessageAreYouSureYouWishToRemoveMediaFolder");
|
||||
var msg = globalize.translate('MessageAreYouSureYouWishToRemoveMediaFolder');
|
||||
|
||||
if (virtualFolder.Locations.length) {
|
||||
msg += "<br/><br/>" + globalize.translate("MessageTheFollowingLocationWillBeRemovedFromLibrary") + "<br/><br/>";
|
||||
msg += virtualFolder.Locations.join("<br/>");
|
||||
msg += '<br/><br/>' + globalize.translate('MessageTheFollowingLocationWillBeRemovedFromLibrary') + '<br/><br/>';
|
||||
msg += virtualFolder.Locations.join('<br/>');
|
||||
}
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm({
|
||||
|
||||
text: msg,
|
||||
@@ -55,20 +55,20 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function refreshVirtualFolder(page, virtualFolder) {
|
||||
require(["refreshDialog"], function (refreshDialog) {
|
||||
require(['refreshDialog'], function (refreshDialog) {
|
||||
new refreshDialog({
|
||||
itemIds: [virtualFolder.ItemId],
|
||||
serverId: ApiClient.serverId(),
|
||||
mode: "scan"
|
||||
mode: 'scan'
|
||||
}).show();
|
||||
});
|
||||
}
|
||||
|
||||
function renameVirtualFolder(page, virtualFolder) {
|
||||
require(["prompt"], function (prompt) {
|
||||
require(['prompt'], function (prompt) {
|
||||
prompt({
|
||||
label: globalize.translate("LabelNewName"),
|
||||
confirmText: globalize.translate("ButtonRename")
|
||||
label: globalize.translate('LabelNewName'),
|
||||
confirmText: globalize.translate('ButtonRename')
|
||||
}).then(function (newName) {
|
||||
if (newName && newName != virtualFolder.Name) {
|
||||
var refreshAfterChange = shouldRefreshLibraryAfterChanges(page);
|
||||
@@ -81,59 +81,59 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function showCardMenu(page, elem, virtualFolders) {
|
||||
var card = dom.parentWithClass(elem, "card");
|
||||
var index = parseInt(card.getAttribute("data-index"));
|
||||
var card = dom.parentWithClass(elem, 'card');
|
||||
var index = parseInt(card.getAttribute('data-index'));
|
||||
var virtualFolder = virtualFolders[index];
|
||||
var menuItems = [];
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonEditImages"),
|
||||
id: "editimages",
|
||||
icon: "photo"
|
||||
name: globalize.translate('ButtonEditImages'),
|
||||
id: 'editimages',
|
||||
icon: 'photo'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ManageLibrary"),
|
||||
id: "edit",
|
||||
icon: "folder_open"
|
||||
name: globalize.translate('ManageLibrary'),
|
||||
id: 'edit',
|
||||
icon: 'folder_open'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonRemove"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
name: globalize.translate('ButtonRemove'),
|
||||
id: 'delete',
|
||||
icon: 'delete'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonRename"),
|
||||
id: "rename",
|
||||
icon: "mode_edit"
|
||||
name: globalize.translate('ButtonRename'),
|
||||
id: 'rename',
|
||||
icon: 'mode_edit'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ScanLibrary"),
|
||||
id: "refresh",
|
||||
icon: "refresh"
|
||||
name: globalize.translate('ScanLibrary'),
|
||||
id: 'refresh',
|
||||
icon: 'refresh'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: elem,
|
||||
callback: function (resultId) {
|
||||
switch (resultId) {
|
||||
case "edit":
|
||||
case 'edit':
|
||||
editVirtualFolder(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "editimages":
|
||||
case 'editimages':
|
||||
editImages(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "rename":
|
||||
case 'rename':
|
||||
renameVirtualFolder(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "delete":
|
||||
case 'delete':
|
||||
deleteVirtualFolder(page, virtualFolder);
|
||||
break;
|
||||
|
||||
case "refresh":
|
||||
case 'refresh':
|
||||
refreshVirtualFolder(page, virtualFolder);
|
||||
}
|
||||
}
|
||||
@@ -149,14 +149,14 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function shouldRefreshLibraryAfterChanges(page) {
|
||||
return "mediaLibraryPage" === page.id;
|
||||
return 'mediaLibraryPage' === page.id;
|
||||
}
|
||||
|
||||
function reloadVirtualFolders(page, virtualFolders) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
virtualFolders.push({
|
||||
Name: globalize.translate("ButtonAddMediaLibrary"),
|
||||
icon: "add_circle",
|
||||
Name: globalize.translate('ButtonAddMediaLibrary'),
|
||||
icon: 'add_circle',
|
||||
Locations: [],
|
||||
showType: false,
|
||||
showLocations: false,
|
||||
@@ -169,19 +169,19 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
html += getVirtualFolderHtml(page, virtualFolder, i);
|
||||
}
|
||||
|
||||
var divVirtualFolders = page.querySelector("#divVirtualFolders");
|
||||
var divVirtualFolders = page.querySelector('#divVirtualFolders');
|
||||
divVirtualFolders.innerHTML = html;
|
||||
divVirtualFolders.classList.add("itemsContainer");
|
||||
divVirtualFolders.classList.add("vertical-wrap");
|
||||
$(".btnCardMenu", divVirtualFolders).on("click", function () {
|
||||
divVirtualFolders.classList.add('itemsContainer');
|
||||
divVirtualFolders.classList.add('vertical-wrap');
|
||||
$('.btnCardMenu', divVirtualFolders).on('click', function () {
|
||||
showCardMenu(page, this, virtualFolders);
|
||||
});
|
||||
divVirtualFolders.querySelector(".addLibrary").addEventListener("click", function () {
|
||||
divVirtualFolders.querySelector('.addLibrary').addEventListener('click', function () {
|
||||
addVirtualFolder(page);
|
||||
});
|
||||
$(".editLibrary", divVirtualFolders).on("click", function () {
|
||||
var card = $(this).parents(".card")[0];
|
||||
var index = parseInt(card.getAttribute("data-index"));
|
||||
$('.editLibrary', divVirtualFolders).on('click', function () {
|
||||
var card = $(this).parents('.card')[0];
|
||||
var index = parseInt(card.getAttribute('data-index'));
|
||||
var virtualFolder = virtualFolders[index];
|
||||
|
||||
if (virtualFolder.ItemId) {
|
||||
@@ -192,7 +192,7 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function editImages(page, virtualFolder) {
|
||||
require(["imageEditor"], function (imageEditor) {
|
||||
require(['imageEditor'], function (imageEditor) {
|
||||
imageEditor.show({
|
||||
itemId: virtualFolder.ItemId,
|
||||
serverId: ApiClient.serverId()
|
||||
@@ -203,48 +203,48 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
}
|
||||
|
||||
function getLink(text, url) {
|
||||
return globalize.translate(text, '<a is="emby-linkbutton" class="button-link" href="' + url + '" target="_blank" data-autohide="true">', "</a>");
|
||||
return globalize.translate(text, '<a is="emby-linkbutton" class="button-link" href="' + url + '" target="_blank" data-autohide="true">', '</a>');
|
||||
}
|
||||
|
||||
function getCollectionTypeOptions() {
|
||||
return [{
|
||||
name: "",
|
||||
value: ""
|
||||
name: '',
|
||||
value: ''
|
||||
}, {
|
||||
name: globalize.translate("FolderTypeMovies"),
|
||||
value: "movies",
|
||||
message: getLink("MovieLibraryHelp", "https://docs.jellyfin.org/general/server/media/movies.html")
|
||||
name: globalize.translate('FolderTypeMovies'),
|
||||
value: 'movies',
|
||||
message: getLink('MovieLibraryHelp', 'https://docs.jellyfin.org/general/server/media/movies.html')
|
||||
}, {
|
||||
name: globalize.translate("FolderTypeMusic"),
|
||||
value: "music",
|
||||
message: getLink("MusicLibraryHelp", "https://docs.jellyfin.org/general/server/media/music.html")
|
||||
name: globalize.translate('FolderTypeMusic'),
|
||||
value: 'music',
|
||||
message: getLink('MusicLibraryHelp', 'https://docs.jellyfin.org/general/server/media/music.html')
|
||||
}, {
|
||||
name: globalize.translate("FolderTypeTvShows"),
|
||||
value: "tvshows",
|
||||
message: getLink("TvLibraryHelp", "https://docs.jellyfin.org/general/server/media/shows.html")
|
||||
name: globalize.translate('FolderTypeTvShows'),
|
||||
value: 'tvshows',
|
||||
message: getLink('TvLibraryHelp', 'https://docs.jellyfin.org/general/server/media/shows.html')
|
||||
}, {
|
||||
name: globalize.translate("FolderTypeBooks"),
|
||||
value: "books",
|
||||
message: getLink("BookLibraryHelp", "https://docs.jellyfin.org/general/server/media/books.html")
|
||||
name: globalize.translate('FolderTypeBooks'),
|
||||
value: 'books',
|
||||
message: getLink('BookLibraryHelp', 'https://docs.jellyfin.org/general/server/media/books.html')
|
||||
}, {
|
||||
name: globalize.translate("OptionHomeVideos"),
|
||||
value: "homevideos"
|
||||
name: globalize.translate('OptionHomeVideos'),
|
||||
value: 'homevideos'
|
||||
}, {
|
||||
name: globalize.translate("FolderTypeMusicVideos"),
|
||||
value: "musicvideos"
|
||||
name: globalize.translate('FolderTypeMusicVideos'),
|
||||
value: 'musicvideos'
|
||||
}, {
|
||||
name: globalize.translate("FolderTypeUnset"),
|
||||
value: "mixed",
|
||||
message: globalize.translate("MessageUnsetContentHelp")
|
||||
name: globalize.translate('FolderTypeUnset'),
|
||||
value: 'mixed',
|
||||
message: globalize.translate('MessageUnsetContentHelp')
|
||||
}];
|
||||
}
|
||||
|
||||
function getVirtualFolderHtml(page, virtualFolder, index) {
|
||||
var html = "";
|
||||
var style = "";
|
||||
var html = '';
|
||||
var style = '';
|
||||
|
||||
if (page.classList.contains("wizardPage")) {
|
||||
style += "min-width:33.3%;";
|
||||
if (page.classList.contains('wizardPage')) {
|
||||
style += 'min-width:33.3%;';
|
||||
}
|
||||
|
||||
html += '<div class="card backdropCard scalableCard backdropCard-scalable" style="' + style + '" data-index="' + index + '" data-id="' + virtualFolder.ItemId + '">';
|
||||
@@ -252,12 +252,12 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
html += '<div class="cardContent">';
|
||||
var imgUrl = "";
|
||||
var imgUrl = '';
|
||||
|
||||
if (virtualFolder.PrimaryImageItemId) {
|
||||
imgUrl = ApiClient.getScaledImageUrl(virtualFolder.PrimaryImageItemId, {
|
||||
maxWidth: Math.round(dom.getScreenWidth() * 0.40),
|
||||
type: "Primary"
|
||||
type: 'Primary'
|
||||
});
|
||||
}
|
||||
|
||||
@@ -274,9 +274,9 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
|
||||
if (hasCardImageContainer) {
|
||||
html += '<div class="cardIndicators backdropCardIndicators">';
|
||||
html += '<div is="emby-itemrefreshindicator"' + (virtualFolder.RefreshProgress || virtualFolder.RefreshStatus && "Idle" !== virtualFolder.RefreshStatus ? "" : ' class="hide"') + ' data-progress="' + (virtualFolder.RefreshProgress || 0) + '" data-status="' + virtualFolder.RefreshStatus + '"></div>';
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '<div is="emby-itemrefreshindicator"' + (virtualFolder.RefreshProgress || virtualFolder.RefreshStatus && 'Idle' !== virtualFolder.RefreshStatus ? '' : ' class="hide"') + ' data-progress="' + (virtualFolder.RefreshProgress || 0) + '" data-status="' + virtualFolder.RefreshStatus + '"></div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
if (!imgUrl && virtualFolder.showNameWithIcon) {
|
||||
@@ -286,106 +286,106 @@ define(["jQuery", "apphost", "scripts/taskbutton", "loading", "libraryMenu", "gl
|
||||
if (virtualFolder.showNameWithIcon) {
|
||||
html += '<div style="margin:1em 0;position:width:100%;">';
|
||||
html += virtualFolder.Name;
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
html += "</h3>";
|
||||
html += '</h3>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">'; // always show menu unless explicitly hidden
|
||||
|
||||
if (virtualFolder.showMenu !== false) {
|
||||
html += '<div style="text-align:right; float:right;padding-top:5px;">';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><span class="material-icons more_horiz"></span></button>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
html += "<div class='cardText'>";
|
||||
|
||||
if (virtualFolder.showNameWithIcon) {
|
||||
html += " ";
|
||||
html += ' ';
|
||||
} else {
|
||||
html += virtualFolder.Name;
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
var typeName = getCollectionTypeOptions().filter(function (t) {
|
||||
return t.value == virtualFolder.CollectionType;
|
||||
})[0];
|
||||
typeName = typeName ? typeName.name : globalize.translate("FolderTypeUnset");
|
||||
typeName = typeName ? typeName.name : globalize.translate('FolderTypeUnset');
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
|
||||
if (virtualFolder.showType === false) {
|
||||
html += " ";
|
||||
html += ' ';
|
||||
} else {
|
||||
html += typeName;
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
|
||||
if (virtualFolder.showLocations === false) {
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += " ";
|
||||
html += "</div>";
|
||||
html += ' ';
|
||||
html += '</div>';
|
||||
} else if (virtualFolder.Locations.length && virtualFolder.Locations.length === 1) {
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += virtualFolder.Locations[0];
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
} else {
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += globalize.translate("NumLocationsValue", virtualFolder.Locations.length);
|
||||
html += "</div>";
|
||||
html += globalize.translate('NumLocationsValue', virtualFolder.Locations.length);
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html;
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "library.html",
|
||||
name: globalize.translate("HeaderLibraries")
|
||||
href: 'library.html',
|
||||
name: globalize.translate('HeaderLibraries')
|
||||
}, {
|
||||
href: "librarydisplay.html",
|
||||
name: globalize.translate("TabDisplay")
|
||||
href: 'librarydisplay.html',
|
||||
name: globalize.translate('TabDisplay')
|
||||
}, {
|
||||
href: "metadataimages.html",
|
||||
name: globalize.translate("TabMetadata")
|
||||
href: 'metadataimages.html',
|
||||
name: globalize.translate('TabMetadata')
|
||||
}, {
|
||||
href: "metadatanfo.html",
|
||||
name: globalize.translate("TabNfoSettings")
|
||||
href: 'metadatanfo.html',
|
||||
name: globalize.translate('TabNfoSettings')
|
||||
}];
|
||||
}
|
||||
|
||||
window.WizardLibraryPage = {
|
||||
next: function () {
|
||||
Dashboard.navigate("wizardsettings.html");
|
||||
Dashboard.navigate('wizardsettings.html');
|
||||
}
|
||||
};
|
||||
pageClassOn("pageshow", "mediaLibraryPage", function () {
|
||||
pageClassOn('pageshow', 'mediaLibraryPage', function () {
|
||||
reloadLibrary(this);
|
||||
});
|
||||
pageIdOn("pageshow", "mediaLibraryPage", function () {
|
||||
libraryMenu.setTabs("librarysetup", 0, getTabs);
|
||||
pageIdOn('pageshow', 'mediaLibraryPage', function () {
|
||||
libraryMenu.setTabs('librarysetup', 0, getTabs);
|
||||
var page = this;
|
||||
taskButton({
|
||||
mode: "on",
|
||||
progressElem: page.querySelector(".refreshProgress"),
|
||||
taskKey: "RefreshLibrary",
|
||||
button: page.querySelector(".btnRefresh")
|
||||
mode: 'on',
|
||||
progressElem: page.querySelector('.refreshProgress'),
|
||||
taskKey: 'RefreshLibrary',
|
||||
button: page.querySelector('.btnRefresh')
|
||||
});
|
||||
});
|
||||
pageIdOn("pagebeforehide", "mediaLibraryPage", function () {
|
||||
pageIdOn('pagebeforehide', 'mediaLibraryPage', function () {
|
||||
var page = this;
|
||||
taskButton({
|
||||
mode: "off",
|
||||
progressElem: page.querySelector(".refreshProgress"),
|
||||
taskKey: "RefreshLibrary",
|
||||
button: page.querySelector(".btnRefresh")
|
||||
mode: 'off',
|
||||
progressElem: page.querySelector('.refreshProgress'),
|
||||
taskKey: 'RefreshLibrary',
|
||||
button: page.querySelector('.btnRefresh')
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
define(["jQuery", "dom", "loading", "libraryMenu", "globalize", "listViewStyle"], function($, dom, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'dom', 'loading', 'libraryMenu', 'globalize', 'listViewStyle'], function($, dom, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function populateLanguages(select) {
|
||||
return ApiClient.getCultures().then(function(languages) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<option value=''></option>";
|
||||
for (var i = 0, length = languages.length; i < length; i++) {
|
||||
var culture = languages[i];
|
||||
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>";
|
||||
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>';
|
||||
}
|
||||
select.innerHTML = html;
|
||||
});
|
||||
@@ -15,50 +15,50 @@ define(["jQuery", "dom", "loading", "libraryMenu", "globalize", "listViewStyle"]
|
||||
|
||||
function populateCountries(select) {
|
||||
return ApiClient.getCountries().then(function(allCountries) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<option value=''></option>";
|
||||
for (var i = 0, length = allCountries.length; i < length; i++) {
|
||||
var culture = allCountries[i];
|
||||
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>";
|
||||
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>';
|
||||
}
|
||||
select.innerHTML = html;
|
||||
});
|
||||
}
|
||||
|
||||
function loadPage(page) {
|
||||
var promises = [ApiClient.getServerConfiguration(), populateLanguages(page.querySelector("#selectLanguage")), populateCountries(page.querySelector("#selectCountry"))];
|
||||
var promises = [ApiClient.getServerConfiguration(), populateLanguages(page.querySelector('#selectLanguage')), populateCountries(page.querySelector('#selectCountry'))];
|
||||
Promise.all(promises).then(function(responses) {
|
||||
var config = responses[0];
|
||||
page.querySelector("#selectLanguage").value = config.PreferredMetadataLanguage || "", page.querySelector("#selectCountry").value = config.MetadataCountryCode || "", loading.hide();
|
||||
page.querySelector('#selectLanguage').value = config.PreferredMetadataLanguage || '', page.querySelector('#selectCountry').value = config.MetadataCountryCode || '', loading.hide();
|
||||
});
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
var form = this;
|
||||
return loading.show(), ApiClient.getServerConfiguration().then(function(config) {
|
||||
config.PreferredMetadataLanguage = form.querySelector("#selectLanguage").value, config.MetadataCountryCode = form.querySelector("#selectCountry").value, ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
|
||||
config.PreferredMetadataLanguage = form.querySelector('#selectLanguage').value, config.MetadataCountryCode = form.querySelector('#selectCountry').value, ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
|
||||
}), !1;
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "library.html",
|
||||
name: globalize.translate("HeaderLibraries")
|
||||
href: 'library.html',
|
||||
name: globalize.translate('HeaderLibraries')
|
||||
}, {
|
||||
href: "librarydisplay.html",
|
||||
name: globalize.translate("TabDisplay")
|
||||
href: 'librarydisplay.html',
|
||||
name: globalize.translate('TabDisplay')
|
||||
}, {
|
||||
href: "metadataimages.html",
|
||||
name: globalize.translate("TabMetadata")
|
||||
href: 'metadataimages.html',
|
||||
name: globalize.translate('TabMetadata')
|
||||
}, {
|
||||
href: "metadatanfo.html",
|
||||
name: globalize.translate("TabNfoSettings")
|
||||
href: 'metadatanfo.html',
|
||||
name: globalize.translate('TabNfoSettings')
|
||||
}];
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#metadataImagesConfigurationPage", function() {
|
||||
$(".metadataImagesConfigurationForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#metadataImagesConfigurationPage", function() {
|
||||
libraryMenu.setTabs("metadata", 2, getTabs), loading.show(), loadPage(this);
|
||||
$(document).on('pageinit', '#metadataImagesConfigurationPage', function() {
|
||||
$('.metadataImagesConfigurationForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#metadataImagesConfigurationPage', function() {
|
||||
libraryMenu.setTabs('metadata', 2, getTabs), loading.show(), loadPage(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config, users) {
|
||||
var html = '<option value="" selected="selected">' + globalize.translate("OptionNone") + "</option>";
|
||||
var html = '<option value="" selected="selected">' + globalize.translate('OptionNone') + '</option>';
|
||||
html += users.map(function (user) {
|
||||
return '<option value="' + user.Id + '">' + user.Name + "</option>";
|
||||
}).join("");
|
||||
$("#selectUser", page).html(html).val(config.UserId || "");
|
||||
$("#selectReleaseDateFormat", page).val(config.ReleaseDateFormat);
|
||||
page.querySelector("#chkSaveImagePaths").checked = config.SaveImagePathsInNfo;
|
||||
page.querySelector("#chkEnablePathSubstitution").checked = config.EnablePathSubstitution;
|
||||
page.querySelector("#chkEnableExtraThumbs").checked = config.EnableExtraThumbsDuplication;
|
||||
return '<option value="' + user.Id + '">' + user.Name + '</option>';
|
||||
}).join('');
|
||||
$('#selectUser', page).html(html).val(config.UserId || '');
|
||||
$('#selectReleaseDateFormat', page).val(config.ReleaseDateFormat);
|
||||
page.querySelector('#chkSaveImagePaths').checked = config.SaveImagePathsInNfo;
|
||||
page.querySelector('#chkEnablePathSubstitution').checked = config.EnablePathSubstitution;
|
||||
page.querySelector('#chkEnableExtraThumbs').checked = config.EnableExtraThumbsDuplication;
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
@@ -18,11 +18,11 @@ define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading,
|
||||
loading.show();
|
||||
var form = this;
|
||||
ApiClient.getNamedConfiguration(metadataKey).then(function (config) {
|
||||
config.UserId = $("#selectUser", form).val() || null;
|
||||
config.ReleaseDateFormat = $("#selectReleaseDateFormat", form).val();
|
||||
config.SaveImagePathsInNfo = form.querySelector("#chkSaveImagePaths").checked;
|
||||
config.EnablePathSubstitution = form.querySelector("#chkEnablePathSubstitution").checked;
|
||||
config.EnableExtraThumbsDuplication = form.querySelector("#chkEnableExtraThumbs").checked;
|
||||
config.UserId = $('#selectUser', form).val() || null;
|
||||
config.ReleaseDateFormat = $('#selectReleaseDateFormat', form).val();
|
||||
config.SaveImagePathsInNfo = form.querySelector('#chkSaveImagePaths').checked;
|
||||
config.EnablePathSubstitution = form.querySelector('#chkEnablePathSubstitution').checked;
|
||||
config.EnableExtraThumbsDuplication = form.querySelector('#chkEnableExtraThumbs').checked;
|
||||
ApiClient.updateNamedConfiguration(metadataKey, config).then(function () {
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
showConfirmMessage(config);
|
||||
@@ -33,36 +33,36 @@ define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading,
|
||||
|
||||
function showConfirmMessage(config) {
|
||||
var msg = [];
|
||||
msg.push(globalize.translate("MetadataSettingChangeHelp"));
|
||||
msg.push(globalize.translate('MetadataSettingChangeHelp'));
|
||||
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
alert({
|
||||
text: msg.join("<br/><br/>")
|
||||
text: msg.join('<br/><br/>')
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "library.html",
|
||||
name: globalize.translate("HeaderLibraries")
|
||||
href: 'library.html',
|
||||
name: globalize.translate('HeaderLibraries')
|
||||
}, {
|
||||
href: "librarydisplay.html",
|
||||
name: globalize.translate("TabDisplay")
|
||||
href: 'librarydisplay.html',
|
||||
name: globalize.translate('TabDisplay')
|
||||
}, {
|
||||
href: "metadataimages.html",
|
||||
name: globalize.translate("TabMetadata")
|
||||
href: 'metadataimages.html',
|
||||
name: globalize.translate('TabMetadata')
|
||||
}, {
|
||||
href: "metadatanfo.html",
|
||||
name: globalize.translate("TabNfoSettings")
|
||||
href: 'metadatanfo.html',
|
||||
name: globalize.translate('TabNfoSettings')
|
||||
}];
|
||||
}
|
||||
|
||||
var metadataKey = "xbmcmetadata";
|
||||
$(document).on("pageinit", "#metadataNfoPage", function () {
|
||||
$(".metadataNfoForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#metadataNfoPage", function () {
|
||||
libraryMenu.setTabs("metadata", 3, getTabs);
|
||||
var metadataKey = 'xbmcmetadata';
|
||||
$(document).on('pageinit', '#metadataNfoPage', function () {
|
||||
$('.metadataNfoForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#metadataNfoPage', function () {
|
||||
libraryMenu.setTabs('metadata', 3, getTabs);
|
||||
loading.show();
|
||||
var page = this;
|
||||
var promise1 = ApiClient.getUsers();
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"], function (loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryMenu', 'globalize', 'emby-checkbox', 'emby-select'], function (loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function onSubmit(e) {
|
||||
var form = this;
|
||||
var localAddress = form.querySelector("#txtLocalAddress").value;
|
||||
var enableUpnp = form.querySelector("#chkEnableUpnp").checked;
|
||||
var localAddress = form.querySelector('#txtLocalAddress').value;
|
||||
var enableUpnp = form.querySelector('#chkEnableUpnp').checked;
|
||||
confirmSelections(localAddress, enableUpnp, function () {
|
||||
var validationResult = getValidationAlert(form);
|
||||
|
||||
@@ -16,35 +16,35 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
||||
validateHttps(form).then(function () {
|
||||
loading.show();
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
config.LocalNetworkSubnets = form.querySelector("#txtLanNetworks").value.split(",").map(function (s) {
|
||||
config.LocalNetworkSubnets = form.querySelector('#txtLanNetworks').value.split(',').map(function (s) {
|
||||
return s.trim();
|
||||
}).filter(function (s) {
|
||||
return s.length > 0;
|
||||
});
|
||||
config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function (s) {
|
||||
config.RemoteIPFilter = form.querySelector('#txtExternalAddressFilter').value.split(',').map(function (s) {
|
||||
return s.trim();
|
||||
}).filter(function (s) {
|
||||
return s.length > 0;
|
||||
});
|
||||
config.IsRemoteIPFilterBlacklist = "blacklist" === form.querySelector("#selectExternalAddressFilterMode").value;
|
||||
config.PublicPort = form.querySelector("#txtPublicPort").value;
|
||||
config.PublicHttpsPort = form.querySelector("#txtPublicHttpsPort").value;
|
||||
var httpsMode = form.querySelector("#selectHttpsMode").value;
|
||||
config.IsRemoteIPFilterBlacklist = 'blacklist' === form.querySelector('#selectExternalAddressFilterMode').value;
|
||||
config.PublicPort = form.querySelector('#txtPublicPort').value;
|
||||
config.PublicHttpsPort = form.querySelector('#txtPublicHttpsPort').value;
|
||||
var httpsMode = form.querySelector('#selectHttpsMode').value;
|
||||
|
||||
switch (httpsMode) {
|
||||
case "proxy":
|
||||
case 'proxy':
|
||||
config.EnableHttps = true;
|
||||
config.RequireHttps = false;
|
||||
config.IsBehindProxy = true;
|
||||
break;
|
||||
|
||||
case "required":
|
||||
case 'required':
|
||||
config.EnableHttps = true;
|
||||
config.RequireHttps = true;
|
||||
config.IsBehindProxy = false;
|
||||
break;
|
||||
|
||||
case "enabled":
|
||||
case 'enabled':
|
||||
config.EnableHttps = true;
|
||||
config.RequireHttps = false;
|
||||
config.IsBehindProxy = false;
|
||||
@@ -56,13 +56,13 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
||||
config.IsBehindProxy = false;
|
||||
}
|
||||
|
||||
config.HttpsPortNumber = form.querySelector("#txtHttpsPort").value;
|
||||
config.HttpServerPortNumber = form.querySelector("#txtPortNumber").value;
|
||||
config.HttpsPortNumber = form.querySelector('#txtHttpsPort').value;
|
||||
config.HttpServerPortNumber = form.querySelector('#txtPortNumber').value;
|
||||
config.EnableUPnP = enableUpnp;
|
||||
config.BaseUrl = form.querySelector("#txtBaseUrl").value;
|
||||
config.EnableRemoteAccess = form.querySelector("#chkRemoteAccess").checked;
|
||||
config.CertificatePath = form.querySelector("#txtCertificatePath").value || null;
|
||||
config.CertificatePassword = form.querySelector("#txtCertPassword").value || null;
|
||||
config.BaseUrl = form.querySelector('#txtBaseUrl').value;
|
||||
config.EnableRemoteAccess = form.querySelector('#chkRemoteAccess').checked;
|
||||
config.CertificatePath = form.querySelector('#txtCertificatePath').value || null;
|
||||
config.CertificatePassword = form.querySelector('#txtCertPassword').value || null;
|
||||
config.LocalNetworkAddresses = localAddress ? [localAddress] : [];
|
||||
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse);
|
||||
});
|
||||
@@ -72,43 +72,43 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
||||
}
|
||||
|
||||
function triggerChange(select) {
|
||||
var evt = document.createEvent("HTMLEvents");
|
||||
evt.initEvent("change", false, true);
|
||||
var evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent('change', false, true);
|
||||
select.dispatchEvent(evt);
|
||||
}
|
||||
|
||||
function getValidationAlert(form) {
|
||||
if (form.querySelector("#txtPublicPort").value === form.querySelector("#txtPublicHttpsPort").value) {
|
||||
return "The public http and https ports must be different.";
|
||||
if (form.querySelector('#txtPublicPort').value === form.querySelector('#txtPublicHttpsPort').value) {
|
||||
return 'The public http and https ports must be different.';
|
||||
}
|
||||
|
||||
if (form.querySelector("#txtPortNumber").value === form.querySelector("#txtHttpsPort").value) {
|
||||
return "The http and https ports must be different.";
|
||||
if (form.querySelector('#txtPortNumber').value === form.querySelector('#txtHttpsPort').value) {
|
||||
return 'The http and https ports must be different.';
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function validateHttps(form) {
|
||||
var remoteAccess = form.querySelector("#chkRemoteAccess").checked;
|
||||
var certPath = form.querySelector("#txtCertificatePath").value || null;
|
||||
var httpsMode = form.querySelector("#selectHttpsMode").value;
|
||||
var remoteAccess = form.querySelector('#chkRemoteAccess').checked;
|
||||
var certPath = form.querySelector('#txtCertificatePath').value || null;
|
||||
var httpsMode = form.querySelector('#selectHttpsMode').value;
|
||||
|
||||
if (!remoteAccess || ("enabled" !== httpsMode && "required" !== httpsMode || certPath)) {
|
||||
if (!remoteAccess || ('enabled' !== httpsMode && 'required' !== httpsMode || certPath)) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
return alertText({
|
||||
title: globalize.translate("TitleHostingSettings"),
|
||||
text: globalize.translate("HttpsRequiresCert")
|
||||
title: globalize.translate('TitleHostingSettings'),
|
||||
text: globalize.translate('HttpsRequiresCert')
|
||||
}).then(reject, reject);
|
||||
});
|
||||
}
|
||||
|
||||
function alertText(options) {
|
||||
return new Promise(function (resolve, reject) {
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
alert(options).then(resolve, reject);
|
||||
});
|
||||
});
|
||||
@@ -117,8 +117,8 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
||||
function confirmSelections(localAddress, enableUpnp, callback) {
|
||||
if (localAddress || !enableUpnp) {
|
||||
alertText({
|
||||
title: globalize.translate("TitleHostingSettings"),
|
||||
text: globalize.translate("SettingsWarning")
|
||||
title: globalize.translate('TitleHostingSettings'),
|
||||
text: globalize.translate('SettingsWarning')
|
||||
}).then(callback);
|
||||
} else {
|
||||
callback();
|
||||
@@ -127,76 +127,76 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
||||
|
||||
return function (view, params) {
|
||||
function loadPage(page, config) {
|
||||
page.querySelector("#txtPortNumber").value = config.HttpServerPortNumber;
|
||||
page.querySelector("#txtPublicPort").value = config.PublicPort;
|
||||
page.querySelector("#txtPublicHttpsPort").value = config.PublicHttpsPort;
|
||||
page.querySelector("#txtLocalAddress").value = config.LocalNetworkAddresses[0] || "";
|
||||
page.querySelector("#txtLanNetworks").value = (config.LocalNetworkSubnets || []).join(", ");
|
||||
page.querySelector("#txtExternalAddressFilter").value = (config.RemoteIPFilter || []).join(", ");
|
||||
page.querySelector("#selectExternalAddressFilterMode").value = config.IsRemoteIPFilterBlacklist ? "blacklist" : "whitelist";
|
||||
page.querySelector("#chkRemoteAccess").checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess;
|
||||
var selectHttpsMode = page.querySelector("#selectHttpsMode");
|
||||
page.querySelector('#txtPortNumber').value = config.HttpServerPortNumber;
|
||||
page.querySelector('#txtPublicPort').value = config.PublicPort;
|
||||
page.querySelector('#txtPublicHttpsPort').value = config.PublicHttpsPort;
|
||||
page.querySelector('#txtLocalAddress').value = config.LocalNetworkAddresses[0] || '';
|
||||
page.querySelector('#txtLanNetworks').value = (config.LocalNetworkSubnets || []).join(', ');
|
||||
page.querySelector('#txtExternalAddressFilter').value = (config.RemoteIPFilter || []).join(', ');
|
||||
page.querySelector('#selectExternalAddressFilterMode').value = config.IsRemoteIPFilterBlacklist ? 'blacklist' : 'whitelist';
|
||||
page.querySelector('#chkRemoteAccess').checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess;
|
||||
var selectHttpsMode = page.querySelector('#selectHttpsMode');
|
||||
|
||||
if (config.IsBehindProxy) {
|
||||
selectHttpsMode.value = "proxy";
|
||||
selectHttpsMode.value = 'proxy';
|
||||
} else if (config.RequireHttps) {
|
||||
selectHttpsMode.value = "required";
|
||||
selectHttpsMode.value = 'required';
|
||||
} else if (config.EnableHttps) {
|
||||
selectHttpsMode.value = "enabled";
|
||||
selectHttpsMode.value = 'enabled';
|
||||
} else {
|
||||
selectHttpsMode.value = "disabled";
|
||||
selectHttpsMode.value = 'disabled';
|
||||
}
|
||||
|
||||
page.querySelector("#txtHttpsPort").value = config.HttpsPortNumber;
|
||||
page.querySelector("#txtBaseUrl").value = config.BaseUrl || "";
|
||||
var txtCertificatePath = page.querySelector("#txtCertificatePath");
|
||||
txtCertificatePath.value = config.CertificatePath || "";
|
||||
page.querySelector("#txtCertPassword").value = config.CertificatePassword || "";
|
||||
page.querySelector("#chkEnableUpnp").checked = config.EnableUPnP;
|
||||
triggerChange(page.querySelector("#chkRemoteAccess"));
|
||||
page.querySelector('#txtHttpsPort').value = config.HttpsPortNumber;
|
||||
page.querySelector('#txtBaseUrl').value = config.BaseUrl || '';
|
||||
var txtCertificatePath = page.querySelector('#txtCertificatePath');
|
||||
txtCertificatePath.value = config.CertificatePath || '';
|
||||
page.querySelector('#txtCertPassword').value = config.CertificatePassword || '';
|
||||
page.querySelector('#chkEnableUpnp').checked = config.EnableUPnP;
|
||||
triggerChange(page.querySelector('#chkRemoteAccess'));
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
view.querySelector("#chkRemoteAccess").addEventListener("change", function () {
|
||||
view.querySelector('#chkRemoteAccess').addEventListener('change', function () {
|
||||
if (this.checked) {
|
||||
view.querySelector(".fldExternalAddressFilter").classList.remove("hide");
|
||||
view.querySelector(".fldExternalAddressFilterMode").classList.remove("hide");
|
||||
view.querySelector(".fldPublicPort").classList.remove("hide");
|
||||
view.querySelector(".fldPublicHttpsPort").classList.remove("hide");
|
||||
view.querySelector(".fldCertificatePath").classList.remove("hide");
|
||||
view.querySelector(".fldCertPassword").classList.remove("hide");
|
||||
view.querySelector(".fldHttpsMode").classList.remove("hide");
|
||||
view.querySelector(".fldEnableUpnp").classList.remove("hide");
|
||||
view.querySelector('.fldExternalAddressFilter').classList.remove('hide');
|
||||
view.querySelector('.fldExternalAddressFilterMode').classList.remove('hide');
|
||||
view.querySelector('.fldPublicPort').classList.remove('hide');
|
||||
view.querySelector('.fldPublicHttpsPort').classList.remove('hide');
|
||||
view.querySelector('.fldCertificatePath').classList.remove('hide');
|
||||
view.querySelector('.fldCertPassword').classList.remove('hide');
|
||||
view.querySelector('.fldHttpsMode').classList.remove('hide');
|
||||
view.querySelector('.fldEnableUpnp').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldExternalAddressFilter").classList.add("hide");
|
||||
view.querySelector(".fldExternalAddressFilterMode").classList.add("hide");
|
||||
view.querySelector(".fldPublicPort").classList.add("hide");
|
||||
view.querySelector(".fldPublicHttpsPort").classList.add("hide");
|
||||
view.querySelector(".fldCertificatePath").classList.add("hide");
|
||||
view.querySelector(".fldCertPassword").classList.add("hide");
|
||||
view.querySelector(".fldHttpsMode").classList.add("hide");
|
||||
view.querySelector(".fldEnableUpnp").classList.add("hide");
|
||||
view.querySelector('.fldExternalAddressFilter').classList.add('hide');
|
||||
view.querySelector('.fldExternalAddressFilterMode').classList.add('hide');
|
||||
view.querySelector('.fldPublicPort').classList.add('hide');
|
||||
view.querySelector('.fldPublicHttpsPort').classList.add('hide');
|
||||
view.querySelector('.fldCertificatePath').classList.add('hide');
|
||||
view.querySelector('.fldCertPassword').classList.add('hide');
|
||||
view.querySelector('.fldHttpsMode').classList.add('hide');
|
||||
view.querySelector('.fldEnableUpnp').classList.add('hide');
|
||||
}
|
||||
});
|
||||
view.querySelector("#btnSelectCertPath").addEventListener("click", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
view.querySelector('#btnSelectCertPath').addEventListener('click', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
includeFiles: true,
|
||||
includeDirectories: true,
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
view.querySelector("#txtCertificatePath").value = path;
|
||||
view.querySelector('#txtCertificatePath').value = path;
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
header: globalize.translate("HeaderSelectCertificatePath")
|
||||
header: globalize.translate('HeaderSelectCertificatePath')
|
||||
});
|
||||
});
|
||||
});
|
||||
view.querySelector(".dashboardHostingForm").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
view.querySelector('.dashboardHostingForm').addEventListener('submit', onSubmit);
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
loading.show();
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
loadPage(view, config);
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
define(["jQuery", "emby-checkbox", "fnchecked"], function ($) {
|
||||
"use strict";
|
||||
define(['jQuery', 'emby-checkbox', 'fnchecked'], function ($) {
|
||||
'use strict';
|
||||
|
||||
function fillItems(elem, items, cssClass, idPrefix, currentList, isEnabledList) {
|
||||
var html = '<div class="checkboxList paperList" style="padding: .5em 1em;">';
|
||||
html += items.map(function (u) {
|
||||
var isChecked = isEnabledList ? currentList.indexOf(u.Id) != -1 : currentList.indexOf(u.Id) == -1;
|
||||
var checkedHtml = isChecked ? ' checked="checked"' : "";
|
||||
return '<label><input is="emby-checkbox" class="' + cssClass + '" type="checkbox" data-itemid="' + u.Id + '"' + checkedHtml + "/><span>" + u.Name + "</span></label>";
|
||||
}).join("");
|
||||
html += "</div>";
|
||||
elem.html(html).trigger("create");
|
||||
var checkedHtml = isChecked ? ' checked="checked"' : '';
|
||||
return '<label><input is="emby-checkbox" class="' + cssClass + '" type="checkbox" data-itemid="' + u.Id + '"' + checkedHtml + '/><span>' + u.Name + '</span></label>';
|
||||
}).join('');
|
||||
html += '</div>';
|
||||
elem.html(html).trigger('create');
|
||||
}
|
||||
|
||||
function reload(page) {
|
||||
var type = getParameterByName("type");
|
||||
var type = getParameterByName('type');
|
||||
var promise1 = ApiClient.getUsers();
|
||||
var promise2 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
|
||||
var promise3 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Types"));
|
||||
var promise4 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Services"));
|
||||
var promise3 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types'));
|
||||
var promise4 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Services'));
|
||||
Promise.all([promise1, promise2, promise3, promise4]).then(function (responses) {
|
||||
var users = responses[0];
|
||||
var notificationOptions = responses[1];
|
||||
@@ -31,34 +31,34 @@ define(["jQuery", "emby-checkbox", "fnchecked"], function ($) {
|
||||
})[0] || {};
|
||||
|
||||
if (typeInfo.IsBasedOnUserEvent) {
|
||||
$(".monitorUsers", page).show();
|
||||
$('.monitorUsers', page).show();
|
||||
} else {
|
||||
$(".monitorUsers", page).hide();
|
||||
$('.monitorUsers', page).hide();
|
||||
}
|
||||
|
||||
$(".notificationType", page).html(typeInfo.Name || "Unknown Notification");
|
||||
$('.notificationType', page).html(typeInfo.Name || 'Unknown Notification');
|
||||
|
||||
if (!notificationConfig) {
|
||||
notificationConfig = {
|
||||
DisabledMonitorUsers: [],
|
||||
SendToUsers: [],
|
||||
DisabledServices: [],
|
||||
SendToUserMode: "Admins"
|
||||
SendToUserMode: 'Admins'
|
||||
};
|
||||
}
|
||||
|
||||
fillItems($(".monitorUsersList", page), users, "chkMonitor", "chkMonitor", notificationConfig.DisabledMonitorUsers);
|
||||
fillItems($(".sendToUsersList", page), users, "chkSendTo", "chkSendTo", notificationConfig.SendToUsers, true);
|
||||
fillItems($(".servicesList", page), services, "chkService", "chkService", notificationConfig.DisabledServices);
|
||||
$("#chkEnabled", page).checked(notificationConfig.Enabled || false);
|
||||
$("#selectUsers", page).val(notificationConfig.SendToUserMode).trigger("change");
|
||||
fillItems($('.monitorUsersList', page), users, 'chkMonitor', 'chkMonitor', notificationConfig.DisabledMonitorUsers);
|
||||
fillItems($('.sendToUsersList', page), users, 'chkSendTo', 'chkSendTo', notificationConfig.SendToUsers, true);
|
||||
fillItems($('.servicesList', page), services, 'chkService', 'chkService', notificationConfig.DisabledServices);
|
||||
$('#chkEnabled', page).checked(notificationConfig.Enabled || false);
|
||||
$('#selectUsers', page).val(notificationConfig.SendToUserMode).trigger('change');
|
||||
});
|
||||
}
|
||||
|
||||
function save(page) {
|
||||
var type = getParameterByName("type");
|
||||
var type = getParameterByName('type');
|
||||
var promise1 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
|
||||
var promise2 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Types"));
|
||||
var promise2 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types'));
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
var notificationOptions = responses[0];
|
||||
var types = responses[1];
|
||||
@@ -76,47 +76,47 @@ define(["jQuery", "emby-checkbox", "fnchecked"], function ($) {
|
||||
types.filter(function (n) {
|
||||
return n.Type == type;
|
||||
})[0];
|
||||
notificationConfig.Enabled = $("#chkEnabled", page).checked();
|
||||
notificationConfig.SendToUserMode = $("#selectUsers", page).val();
|
||||
notificationConfig.DisabledMonitorUsers = $(".chkMonitor", page).get().filter(function (c) {
|
||||
notificationConfig.Enabled = $('#chkEnabled', page).checked();
|
||||
notificationConfig.SendToUserMode = $('#selectUsers', page).val();
|
||||
notificationConfig.DisabledMonitorUsers = $('.chkMonitor', page).get().filter(function (c) {
|
||||
return !c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-itemid");
|
||||
return c.getAttribute('data-itemid');
|
||||
});
|
||||
notificationConfig.SendToUsers = $(".chkSendTo", page).get().filter(function (c) {
|
||||
notificationConfig.SendToUsers = $('.chkSendTo', page).get().filter(function (c) {
|
||||
return c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-itemid");
|
||||
return c.getAttribute('data-itemid');
|
||||
});
|
||||
notificationConfig.DisabledServices = $(".chkService", page).get().filter(function (c) {
|
||||
notificationConfig.DisabledServices = $('.chkService', page).get().filter(function (c) {
|
||||
return !c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-itemid");
|
||||
return c.getAttribute('data-itemid');
|
||||
});
|
||||
ApiClient.updateNamedConfiguration(notificationsConfigurationKey, notificationOptions).then(function (r) {
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
Dashboard.navigate("notificationsettings.html");
|
||||
Dashboard.navigate('notificationsettings.html');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
save($(this).parents(".page"));
|
||||
save($(this).parents('.page'));
|
||||
return false;
|
||||
}
|
||||
|
||||
var notificationsConfigurationKey = "notifications";
|
||||
$(document).on("pageinit", "#notificationSettingPage", function () {
|
||||
var notificationsConfigurationKey = 'notifications';
|
||||
$(document).on('pageinit', '#notificationSettingPage', function () {
|
||||
var page = this;
|
||||
$("#selectUsers", page).on("change", function () {
|
||||
if ("Custom" == this.value) {
|
||||
$(".selectCustomUsers", page).show();
|
||||
$('#selectUsers', page).on('change', function () {
|
||||
if ('Custom' == this.value) {
|
||||
$('.selectCustomUsers', page).show();
|
||||
} else {
|
||||
$(".selectCustomUsers", page).hide();
|
||||
$('.selectCustomUsers', page).hide();
|
||||
}
|
||||
});
|
||||
$(".notificationSettingForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#notificationSettingPage", function () {
|
||||
$('.notificationSettingForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#notificationSettingPage', function () {
|
||||
reload(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
define(["loading", "libraryMenu", "globalize", "listViewStyle", "emby-button"], function(loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryMenu', 'globalize', 'listViewStyle', 'emby-button'], function(loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function reload(page) {
|
||||
loading.show();
|
||||
ApiClient.getJSON(ApiClient.getUrl("Notifications/Types")).then(function(list) {
|
||||
var html = "";
|
||||
var lastCategory = "";
|
||||
ApiClient.getJSON(ApiClient.getUrl('Notifications/Types')).then(function(list) {
|
||||
var html = '';
|
||||
var lastCategory = '';
|
||||
var showHelp = true;
|
||||
html += list.map(function(notification) {
|
||||
var itemHtml = "";
|
||||
var itemHtml = '';
|
||||
if (notification.Category !== lastCategory) {
|
||||
lastCategory = notification.Category;
|
||||
if (lastCategory) {
|
||||
itemHtml += "</div>";
|
||||
itemHtml += "</div>";
|
||||
itemHtml += '</div>';
|
||||
itemHtml += '</div>';
|
||||
}
|
||||
itemHtml += '<div class="verticalSection verticalSection-extrabottompadding">';
|
||||
itemHtml += '<div class="sectionTitleContainer" style="margin-bottom:1em;">';
|
||||
itemHtml += '<h2 class="sectionTitle">';
|
||||
itemHtml += notification.Category;
|
||||
itemHtml += "</h2>";
|
||||
itemHtml += '</h2>';
|
||||
if (showHelp) {
|
||||
showHelp = false;
|
||||
itemHtml += '<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/notifications.html">';
|
||||
itemHtml += globalize.translate("Help");
|
||||
itemHtml += "</a>";
|
||||
itemHtml += globalize.translate('Help');
|
||||
itemHtml += '</a>';
|
||||
}
|
||||
itemHtml += "</div>";
|
||||
itemHtml += '</div>';
|
||||
itemHtml += '<div class="paperList">';
|
||||
}
|
||||
itemHtml += '<a class="listItem listItem-border" is="emby-linkbutton" data-ripple="false" href="notificationsetting.html?type=' + notification.Type + '">';
|
||||
@@ -36,24 +36,24 @@ define(["loading", "libraryMenu", "globalize", "listViewStyle", "emby-button"],
|
||||
itemHtml += '<span class="listItemIcon material-icons notifications_off" style="background-color:#999;"></span>';
|
||||
}
|
||||
itemHtml += '<div class="listItemBody">';
|
||||
itemHtml += '<div class="listItemBodyText">' + notification.Name + "</div>";
|
||||
itemHtml += "</div>";
|
||||
itemHtml += '<div class="listItemBodyText">' + notification.Name + '</div>';
|
||||
itemHtml += '</div>';
|
||||
itemHtml += '<button type="button" is="paper-icon-button-light"><span class="material-icons mode_edit"></span></button>';
|
||||
itemHtml += "</a>";
|
||||
itemHtml += '</a>';
|
||||
return itemHtml;
|
||||
}).join("");
|
||||
}).join('');
|
||||
|
||||
if (list.length) {
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
page.querySelector(".notificationList").innerHTML = html;
|
||||
page.querySelector('.notificationList').innerHTML = html;
|
||||
loading.hide();
|
||||
});
|
||||
}
|
||||
|
||||
return function(view, params) {
|
||||
view.addEventListener("viewshow", function() {
|
||||
view.addEventListener('viewshow', function() {
|
||||
reload(view);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize'], function ($, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config) {
|
||||
$("#txtMinResumePct", page).val(config.MinResumePct);
|
||||
$("#txtMaxResumePct", page).val(config.MaxResumePct);
|
||||
$("#txtMinResumeDuration", page).val(config.MinResumeDurationSeconds);
|
||||
$('#txtMinResumePct', page).val(config.MinResumePct);
|
||||
$('#txtMaxResumePct', page).val(config.MaxResumePct);
|
||||
$('#txtMinResumeDuration', page).val(config.MinResumeDurationSeconds);
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
@@ -24,22 +24,22 @@ define(["jQuery", "loading", "libraryMenu", "globalize"], function ($, loading,
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "encodingsettings.html",
|
||||
name: globalize.translate("Transcoding")
|
||||
href: 'encodingsettings.html',
|
||||
name: globalize.translate('Transcoding')
|
||||
}, {
|
||||
href: "playbackconfiguration.html",
|
||||
name: globalize.translate("TabResumeSettings")
|
||||
href: 'playbackconfiguration.html',
|
||||
name: globalize.translate('TabResumeSettings')
|
||||
}, {
|
||||
href: "streamingsettings.html",
|
||||
name: globalize.translate("TabStreaming")
|
||||
href: 'streamingsettings.html',
|
||||
name: globalize.translate('TabStreaming')
|
||||
}];
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#playbackConfigurationPage", function () {
|
||||
$(".playbackConfigurationForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#playbackConfigurationPage", function () {
|
||||
$(document).on('pageinit', '#playbackConfigurationPage', function () {
|
||||
$('.playbackConfigurationForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#playbackConfigurationPage', function () {
|
||||
loading.show();
|
||||
libraryMenu.setTabs("playback", 1, getTabs);
|
||||
libraryMenu.setTabs('playback', 1, getTabs);
|
||||
var page = this;
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
loadPage(page, config);
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "emby-button"], function ($, loading, libraryMenu, globalize, connectionManager) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'emby-button'], function ($, loading, libraryMenu, globalize, connectionManager) {
|
||||
'use strict';
|
||||
|
||||
function populateHistory(packageInfo, page) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
var length = Math.min(packageInfo.versions.length, 10);
|
||||
|
||||
for (var i = 0; i < length; i++) {
|
||||
var version = packageInfo.versions[i];
|
||||
html += '<h2 style="margin:.5em 0;">' + version.version + "</h2>";
|
||||
html += '<div style="margin-bottom:1.5em;">' + version.changelog + "</div>";
|
||||
html += '<h2 style="margin:.5em 0;">' + version.version + '</h2>';
|
||||
html += '<div style="margin-bottom:1.5em;">' + version.changelog + '</div>';
|
||||
}
|
||||
|
||||
$("#revisionHistory", page).html(html);
|
||||
$('#revisionHistory', page).html(html);
|
||||
}
|
||||
|
||||
function populateVersions(packageInfo, page, installedPlugin) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (var i = 0; i < packageInfo.versions.length; i++) {
|
||||
var version = packageInfo.versions[i];
|
||||
html += '<option value="' + version.version + '">' + version.version + "</option>";
|
||||
html += '<option value="' + version.version + '">' + version.version + '</option>';
|
||||
}
|
||||
|
||||
var selectmenu = $("#selectVersion", page).html(html);
|
||||
var selectmenu = $('#selectVersion', page).html(html);
|
||||
|
||||
if (!installedPlugin) {
|
||||
$("#pCurrentVersion", page).hide().html("");
|
||||
$('#pCurrentVersion', page).hide().html('');
|
||||
}
|
||||
|
||||
var packageVersion = packageInfo.versions[0];
|
||||
@@ -42,56 +42,56 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||
populateVersions(pkg, page, installedPlugin);
|
||||
populateHistory(pkg, page);
|
||||
|
||||
$(".pluginName", page).html(pkg.name);
|
||||
$("#btnInstallDiv", page).removeClass("hide");
|
||||
$("#pSelectVersion", page).removeClass("hide");
|
||||
$('.pluginName', page).html(pkg.name);
|
||||
$('#btnInstallDiv', page).removeClass('hide');
|
||||
$('#pSelectVersion', page).removeClass('hide');
|
||||
|
||||
if (pkg.overview) {
|
||||
$("#overview", page).show().html(pkg.overview);
|
||||
$('#overview', page).show().html(pkg.overview);
|
||||
} else {
|
||||
$("#overview", page).hide();
|
||||
$('#overview', page).hide();
|
||||
}
|
||||
|
||||
$("#description", page).html(pkg.description);
|
||||
$("#developer", page).html(pkg.owner);
|
||||
$('#description', page).html(pkg.description);
|
||||
$('#developer', page).html(pkg.owner);
|
||||
|
||||
if (installedPlugin) {
|
||||
var currentVersionText = globalize.translate("MessageYouHaveVersionInstalled", "<strong>" + installedPlugin.Version + "</strong>");
|
||||
$("#pCurrentVersion", page).show().html(currentVersionText);
|
||||
var currentVersionText = globalize.translate('MessageYouHaveVersionInstalled', '<strong>' + installedPlugin.Version + '</strong>');
|
||||
$('#pCurrentVersion', page).show().html(currentVersionText);
|
||||
} else {
|
||||
$("#pCurrentVersion", page).hide().html("");
|
||||
$('#pCurrentVersion', page).hide().html('');
|
||||
}
|
||||
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function alertText(options) {
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
alert(options);
|
||||
});
|
||||
}
|
||||
|
||||
function performInstallation(page, packageName, guid, updateClass, version) {
|
||||
var developer = $("#developer", page).html().toLowerCase();
|
||||
var developer = $('#developer', page).html().toLowerCase();
|
||||
|
||||
var alertCallback = function () {
|
||||
loading.show();
|
||||
page.querySelector("#btnInstall").disabled = true;
|
||||
page.querySelector('#btnInstall').disabled = true;
|
||||
ApiClient.installPlugin(packageName, guid, updateClass, version).then(function () {
|
||||
loading.hide();
|
||||
alertText(globalize.translate("PluginInstalledMessage"));
|
||||
alertText(globalize.translate('PluginInstalledMessage'));
|
||||
});
|
||||
};
|
||||
|
||||
if (developer !== 'jellyfin') {
|
||||
loading.hide();
|
||||
var msg = globalize.translate("MessagePluginInstallDisclaimer");
|
||||
msg += "<br/>";
|
||||
msg += "<br/>";
|
||||
msg += globalize.translate("PleaseConfirmPluginInstallation");
|
||||
var msg = globalize.translate('MessagePluginInstallDisclaimer');
|
||||
msg += '<br/>';
|
||||
msg += '<br/>';
|
||||
msg += globalize.translate('PleaseConfirmPluginInstallation');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(msg, globalize.translate("HeaderConfirmPluginInstallation")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(msg, globalize.translate('HeaderConfirmPluginInstallation')).then(function () {
|
||||
alertCallback();
|
||||
}, function () {
|
||||
console.debug('plugin not installed');
|
||||
@@ -103,24 +103,24 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
$(".addPluginForm", view).on("submit", function () {
|
||||
$('.addPluginForm', view).on('submit', function () {
|
||||
loading.show();
|
||||
var page = $(this).parents("#addPluginPage")[0];
|
||||
var page = $(this).parents('#addPluginPage')[0];
|
||||
var name = params.name;
|
||||
var guid = params.guid;
|
||||
ApiClient.getInstalledPlugins().then(function (plugins) {
|
||||
var installedPlugin = plugins.filter(function (plugin) {
|
||||
return plugin.Name == name;
|
||||
})[0];
|
||||
var vals = $("#selectVersion", page).val().split("|");
|
||||
var vals = $('#selectVersion', page).val().split('|');
|
||||
var version = vals[0];
|
||||
|
||||
if (installedPlugin) {
|
||||
if (installedPlugin.Version === version) {
|
||||
loading.hide();
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessageAlreadyInstalled"),
|
||||
title: globalize.translate("HeaderPluginInstallation")
|
||||
message: globalize.translate('MessageAlreadyInstalled'),
|
||||
title: globalize.translate('HeaderPluginInstallation')
|
||||
});
|
||||
}
|
||||
} else {
|
||||
@@ -129,7 +129,7 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
||||
});
|
||||
return false;
|
||||
});
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
var page = this;
|
||||
loading.show();
|
||||
var name = params.name;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby-checkbox", "emby-select"], function (loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryMenu', 'globalize', 'cardStyle', 'emby-button', 'emby-checkbox', 'emby-select'], function (loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function reloadList(page) {
|
||||
loading.show();
|
||||
@@ -7,8 +7,8 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||
var promise2 = ApiClient.getInstalledPlugins();
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
populateList({
|
||||
catalogElement: page.querySelector("#pluginTiles"),
|
||||
noItemsElement: page.querySelector("#noPlugins"),
|
||||
catalogElement: page.querySelector('#pluginTiles'),
|
||||
noItemsElement: page.querySelector('#noPlugins'),
|
||||
availablePlugins: responses[0],
|
||||
installedPlugins: responses[1]
|
||||
});
|
||||
@@ -16,15 +16,15 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||
}
|
||||
|
||||
function getHeaderText(category) {
|
||||
category = category.replace(" ", "");
|
||||
if ("Channel" === category) {
|
||||
category = "Channels";
|
||||
} else if ("Theme" === category) {
|
||||
category = "Themes";
|
||||
} else if ("LiveTV" === category) {
|
||||
category = "HeaderLiveTV";
|
||||
} else if ("ScreenSaver" === category) {
|
||||
category = "HeaderScreenSavers";
|
||||
category = category.replace(' ', '');
|
||||
if ('Channel' === category) {
|
||||
category = 'Channels';
|
||||
} else if ('Theme' === category) {
|
||||
category = 'Themes';
|
||||
} else if ('LiveTV' === category) {
|
||||
category = 'HeaderLiveTV';
|
||||
} else if ('ScreenSaver' === category) {
|
||||
category = 'HeaderScreenSavers';
|
||||
}
|
||||
|
||||
return globalize.translate(category);
|
||||
@@ -56,28 +56,28 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||
});
|
||||
|
||||
var currentCategory = null;
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (var i = 0; i < availablePlugins.length; i++) {
|
||||
var plugin = availablePlugins[i];
|
||||
var category = plugin.categoryDisplayName;
|
||||
if (category != currentCategory) {
|
||||
if (currentCategory) {
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">' + category + "</h2>";
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">' + category + '</h2>';
|
||||
html += '<div class="itemsContainer vertical-wrap">';
|
||||
currentCategory = category;
|
||||
}
|
||||
html += getPluginHtml(plugin, options, installedPlugins);
|
||||
}
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
|
||||
if (!availablePlugins.length && options.noItemsElement) {
|
||||
options.noItemsElement.classList.remove("hide");
|
||||
options.noItemsElement.classList.remove('hide');
|
||||
}
|
||||
|
||||
options.catalogElement.innerHTML = html;
|
||||
@@ -85,44 +85,44 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||
}
|
||||
|
||||
function getPluginHtml(plugin, options, installedPlugins) {
|
||||
var html = "";
|
||||
var href = plugin.externalUrl ? plugin.externalUrl : "addplugin.html?name=" + encodeURIComponent(plugin.name) + "&guid=" + plugin.guid;
|
||||
var html = '';
|
||||
var href = plugin.externalUrl ? plugin.externalUrl : 'addplugin.html?name=' + encodeURIComponent(plugin.name) + '&guid=' + plugin.guid;
|
||||
|
||||
if (options.context) {
|
||||
href += "&context=" + options.context;
|
||||
href += '&context=' + options.context;
|
||||
}
|
||||
|
||||
var target = plugin.externalUrl ? ' target="_blank"' : "";
|
||||
var target = plugin.externalUrl ? ' target="_blank"' : '';
|
||||
html += "<div class='card backdropCard'>";
|
||||
html += '<div class="cardBox visualCardBox">';
|
||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + href + '"' + target + ">";
|
||||
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + href + '"' + target + '>';
|
||||
html += '<span class="cardImageIcon material-icons folder"></span>';
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter">';
|
||||
html += "<div class='cardText'>";
|
||||
html += plugin.name;
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
var installedPlugin = installedPlugins.filter(function (ip) {
|
||||
return ip.Id == plugin.guid;
|
||||
})[0];
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += installedPlugin ? globalize.translate("LabelVersionInstalled", installedPlugin.Version) : " ";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
return html += "</div>";
|
||||
html += installedPlugin ? globalize.translate('LabelVersionInstalled', installedPlugin.Version) : ' ';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html += '</div>';
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "installedplugins.html",
|
||||
name: globalize.translate("TabMyPlugins")
|
||||
href: 'installedplugins.html',
|
||||
name: globalize.translate('TabMyPlugins')
|
||||
}, {
|
||||
href: "availableplugins.html",
|
||||
name: globalize.translate("TabCatalog")
|
||||
href: 'availableplugins.html',
|
||||
name: globalize.translate('TabCatalog')
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -131,8 +131,8 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
||||
};
|
||||
|
||||
return function (view, params) {
|
||||
view.addEventListener("viewshow", function () {
|
||||
libraryMenu.setTabs("plugins", 1, getTabs);
|
||||
view.addEventListener('viewshow', function () {
|
||||
libraryMenu.setTabs('plugins', 1, getTabs);
|
||||
reloadList(this);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"], function (loading, libraryMenu, dom, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryMenu', 'dom', 'globalize', 'cardStyle', 'emby-button'], function (loading, libraryMenu, dom, globalize) {
|
||||
'use strict';
|
||||
|
||||
function deletePlugin(page, uniqueid, name) {
|
||||
var msg = globalize.translate("UninstallPluginConfirmation", name);
|
||||
var msg = globalize.translate('UninstallPluginConfirmation', name);
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm({
|
||||
title: globalize.translate("UninstallPluginHeader"),
|
||||
title: globalize.translate('UninstallPluginHeader'),
|
||||
text: msg,
|
||||
primary: "delete",
|
||||
confirmText: globalize.translate("UninstallPluginHeader")
|
||||
primary: 'delete',
|
||||
confirmText: globalize.translate('UninstallPluginHeader')
|
||||
}).then(function () {
|
||||
loading.show();
|
||||
ApiClient.uninstallPlugin(uniqueid).then(function () {
|
||||
@@ -21,13 +21,13 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||
|
||||
function showNoConfigurationMessage() {
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("NoPluginConfigurationMessage")
|
||||
message: globalize.translate('NoPluginConfigurationMessage')
|
||||
});
|
||||
}
|
||||
|
||||
function showConnectMessage() {
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessagePluginConfigurationRequiresLocalAccess")
|
||||
message: globalize.translate('MessagePluginConfigurationRequiresLocalAccess')
|
||||
});
|
||||
}
|
||||
|
||||
@@ -36,33 +36,33 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||
return pluginConfigurationPage.PluginId == plugin.Id;
|
||||
})[0];
|
||||
var configPageUrl = configPage ? Dashboard.getConfigurationPageUrl(configPage.Name) : null;
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<div data-id='" + plugin.Id + "' data-name='" + plugin.Name + "' class='card backdropCard'>";
|
||||
html += '<div class="cardBox visualCardBox">';
|
||||
html += '<div class="cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
html += configPageUrl ? '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + configPageUrl + '">' : '<div class="cardContent noConfigPluginCard noHoverEffect cardImageContainer">';
|
||||
html += '<span class="cardImageIcon material-icons folder"></span>';
|
||||
html += configPageUrl ? "</a>" : "</div>";
|
||||
html += "</div>";
|
||||
html += configPageUrl ? '</a>' : '</div>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter">';
|
||||
html += '<div style="text-align:right; float:right;padding-top:5px;">';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><span class="material-icons more_horiz"></span></button>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += "<div class='cardText'>";
|
||||
html += configPage.DisplayName || plugin.Name;
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += plugin.Version;
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html;
|
||||
}
|
||||
|
||||
function renderPlugins(page, plugins) {
|
||||
ApiClient.getJSON(ApiClient.getUrl("web/configurationpages") + "?pageType=PluginConfiguration").then(function (configPages) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('web/configurationpages') + '?pageType=PluginConfiguration').then(function (configPages) {
|
||||
populateList(page, plugins, configPages);
|
||||
});
|
||||
}
|
||||
@@ -78,22 +78,22 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||
|
||||
var html = plugins.map(function (p) {
|
||||
return getPluginCardHtml(p, pluginConfigurationPages);
|
||||
}).join("");
|
||||
}).join('');
|
||||
|
||||
var installedPluginsElement = page.querySelector(".installedPlugins");
|
||||
installedPluginsElement.removeEventListener("click", onInstalledPluginsClick);
|
||||
installedPluginsElement.addEventListener("click", onInstalledPluginsClick);
|
||||
var installedPluginsElement = page.querySelector('.installedPlugins');
|
||||
installedPluginsElement.removeEventListener('click', onInstalledPluginsClick);
|
||||
installedPluginsElement.addEventListener('click', onInstalledPluginsClick);
|
||||
|
||||
if (plugins.length) {
|
||||
installedPluginsElement.classList.add("itemsContainer");
|
||||
installedPluginsElement.classList.add("vertical-wrap");
|
||||
installedPluginsElement.classList.add('itemsContainer');
|
||||
installedPluginsElement.classList.add('vertical-wrap');
|
||||
} else {
|
||||
html += '<div class="centerMessage">';
|
||||
html += "<h1>" + globalize.translate("MessageNoPluginsInstalled") + "</h1>";
|
||||
html += '<h1>' + globalize.translate('MessageNoPluginsInstalled') + '</h1>';
|
||||
html += '<p><a is="emby-linkbutton" class="button-link" href="availableplugins.html">';
|
||||
html += globalize.translate("BrowsePluginCatalogMessage");
|
||||
html += "</a></p>";
|
||||
html += "</div>";
|
||||
html += globalize.translate('BrowsePluginCatalogMessage');
|
||||
html += '</a></p>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
installedPluginsElement.innerHTML = html;
|
||||
@@ -101,36 +101,36 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||
}
|
||||
|
||||
function showPluginMenu(page, elem) {
|
||||
var card = dom.parentWithClass(elem, "card");
|
||||
var id = card.getAttribute("data-id");
|
||||
var name = card.getAttribute("data-name");
|
||||
var configHref = card.querySelector(".cardContent").getAttribute("href");
|
||||
var card = dom.parentWithClass(elem, 'card');
|
||||
var id = card.getAttribute('data-id');
|
||||
var name = card.getAttribute('data-name');
|
||||
var configHref = card.querySelector('.cardContent').getAttribute('href');
|
||||
var menuItems = [];
|
||||
|
||||
if (configHref) {
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonSettings"),
|
||||
id: "open",
|
||||
icon: "mode_edit"
|
||||
name: globalize.translate('ButtonSettings'),
|
||||
id: 'open',
|
||||
icon: 'mode_edit'
|
||||
});
|
||||
}
|
||||
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonUninstall"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
name: globalize.translate('ButtonUninstall'),
|
||||
id: 'delete',
|
||||
icon: 'delete'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: elem,
|
||||
callback: function (resultId) {
|
||||
switch (resultId) {
|
||||
case "open":
|
||||
case 'open':
|
||||
Dashboard.navigate(configHref);
|
||||
break;
|
||||
case "delete":
|
||||
case 'delete':
|
||||
deletePlugin(page, id, name);
|
||||
break;
|
||||
}
|
||||
@@ -148,29 +148,29 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "installedplugins.html",
|
||||
name: globalize.translate("TabMyPlugins")
|
||||
href: 'installedplugins.html',
|
||||
name: globalize.translate('TabMyPlugins')
|
||||
}, {
|
||||
href: "availableplugins.html",
|
||||
name: globalize.translate("TabCatalog")
|
||||
href: 'availableplugins.html',
|
||||
name: globalize.translate('TabCatalog')
|
||||
}];
|
||||
}
|
||||
|
||||
function onInstalledPluginsClick(e) {
|
||||
if (dom.parentWithClass(e.target, "noConfigPluginCard")) {
|
||||
if (dom.parentWithClass(e.target, 'noConfigPluginCard')) {
|
||||
showNoConfigurationMessage();
|
||||
} else if (dom.parentWithClass(e.target, "connectModePluginCard")) {
|
||||
} else if (dom.parentWithClass(e.target, 'connectModePluginCard')) {
|
||||
showConnectMessage();
|
||||
} else {
|
||||
var btnCardMenu = dom.parentWithClass(e.target, "btnCardMenu");
|
||||
var btnCardMenu = dom.parentWithClass(e.target, 'btnCardMenu');
|
||||
if (btnCardMenu) {
|
||||
showPluginMenu(dom.parentWithClass(btnCardMenu, "page"), btnCardMenu);
|
||||
showPluginMenu(dom.parentWithClass(btnCardMenu, 'page'), btnCardMenu);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pageIdOn("pageshow", "pluginsPage", function () {
|
||||
libraryMenu.setTabs("plugins", 0, getTabs);
|
||||
pageIdOn('pageshow', 'pluginsPage', function () {
|
||||
libraryMenu.setTabs('plugins', 0, getTabs);
|
||||
reloadList(this);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby-button", "emby-select"], function ($, loading, datetime, dom, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'datetime', 'dom', 'globalize', 'emby-input', 'emby-button', 'emby-select'], function ($, loading, datetime, dom, globalize) {
|
||||
'use strict';
|
||||
|
||||
function fillTimeOfDay(select) {
|
||||
|
||||
@@ -14,7 +14,7 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||
|
||||
select.innerHTML = options.map(function (o) {
|
||||
return '<option value="' + o.value + '">' + o.name + '</option>';
|
||||
}).join("");
|
||||
}).join('');
|
||||
}
|
||||
|
||||
Array.prototype.remove = function (from, to) {
|
||||
@@ -26,23 +26,23 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||
var ScheduledTaskPage = {
|
||||
refreshScheduledTask: function (view) {
|
||||
loading.show();
|
||||
var id = getParameterByName("id");
|
||||
var id = getParameterByName('id');
|
||||
ApiClient.getScheduledTask(id).then(function (task) {
|
||||
ScheduledTaskPage.loadScheduledTask(view, task);
|
||||
});
|
||||
},
|
||||
loadScheduledTask: function (view, task) {
|
||||
$(".taskName", view).html(task.Name);
|
||||
$("#pTaskDescription", view).html(task.Description);
|
||||
$('.taskName', view).html(task.Name);
|
||||
$('#pTaskDescription', view).html(task.Description);
|
||||
|
||||
require(["listViewStyle"], function () {
|
||||
require(['listViewStyle'], function () {
|
||||
ScheduledTaskPage.loadTaskTriggers(view, task);
|
||||
});
|
||||
|
||||
loading.hide();
|
||||
},
|
||||
loadTaskTriggers: function (context, task) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += '<div class="paperList">';
|
||||
|
||||
for (var i = 0, length = task.Triggers.length; i < length; i++) {
|
||||
@@ -55,63 +55,63 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||
} else {
|
||||
html += '<div class="listItemBody">';
|
||||
}
|
||||
html += "<div class='listItemBodyText'>" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + "</div>";
|
||||
html += "<div class='listItemBodyText'>" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + '</div>';
|
||||
if (trigger.MaxRuntimeMs) {
|
||||
html += '<div class="listItemBodyText secondary">';
|
||||
var hours = trigger.MaxRuntimeTicks / 36e9;
|
||||
if (hours == 1) {
|
||||
html += globalize.translate("ValueTimeLimitSingleHour");
|
||||
html += globalize.translate('ValueTimeLimitSingleHour');
|
||||
} else {
|
||||
html += globalize.translate("ValueTimeLimitMultiHour", hours);
|
||||
html += globalize.translate('ValueTimeLimitMultiHour', hours);
|
||||
}
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '<button class="btnDeleteTrigger" data-index="' + i + '" type="button" is="paper-icon-button-light" title="' + globalize.translate("ButtonDelete") + '"><span class="material-icons delete"></span></button>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<button class="btnDeleteTrigger" data-index="' + i + '" type="button" is="paper-icon-button-light" title="' + globalize.translate('ButtonDelete') + '"><span class="material-icons delete"></span></button>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
context.querySelector(".taskTriggers").innerHTML = html;
|
||||
html += '</div>';
|
||||
context.querySelector('.taskTriggers').innerHTML = html;
|
||||
},
|
||||
// TODO: Replace this mess with date-fns and remove datetime completely
|
||||
getTriggerFriendlyName: function (trigger) {
|
||||
if ("DailyTrigger" == trigger.Type) {
|
||||
return globalize.translate("DailyAt", ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
||||
if ('DailyTrigger' == trigger.Type) {
|
||||
return globalize.translate('DailyAt', ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
||||
}
|
||||
|
||||
if ("WeeklyTrigger" == trigger.Type) {
|
||||
if ('WeeklyTrigger' == trigger.Type) {
|
||||
// TODO: The day of week isn't localised as well
|
||||
return globalize.translate("WeeklyAt", trigger.DayOfWeek, ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
||||
return globalize.translate('WeeklyAt', trigger.DayOfWeek, ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks));
|
||||
}
|
||||
|
||||
if ("SystemEventTrigger" == trigger.Type && "WakeFromSleep" == trigger.SystemEvent) {
|
||||
return globalize.translate("OnWakeFromSleep");
|
||||
if ('SystemEventTrigger' == trigger.Type && 'WakeFromSleep' == trigger.SystemEvent) {
|
||||
return globalize.translate('OnWakeFromSleep');
|
||||
}
|
||||
|
||||
if (trigger.Type == "IntervalTrigger") {
|
||||
if (trigger.Type == 'IntervalTrigger') {
|
||||
|
||||
var hours = trigger.IntervalTicks / 36e9;
|
||||
|
||||
if (hours == 0.25) {
|
||||
return globalize.translate("EveryXMinutes", "15");
|
||||
return globalize.translate('EveryXMinutes', '15');
|
||||
}
|
||||
if (hours == 0.5) {
|
||||
return globalize.translate("EveryXMinutes", "30");
|
||||
return globalize.translate('EveryXMinutes', '30');
|
||||
}
|
||||
if (hours == 0.75) {
|
||||
return globalize.translate("EveryXMinutes", "45");
|
||||
return globalize.translate('EveryXMinutes', '45');
|
||||
}
|
||||
if (hours == 1) {
|
||||
return globalize.translate("EveryHour");
|
||||
return globalize.translate('EveryHour');
|
||||
}
|
||||
|
||||
return globalize.translate("EveryXHours", hours);
|
||||
return globalize.translate('EveryXHours', hours);
|
||||
}
|
||||
|
||||
if (trigger.Type == "StartupTrigger") {
|
||||
return globalize.translate("OnApplicationStartup");
|
||||
if (trigger.Type == 'StartupTrigger') {
|
||||
return globalize.translate('OnApplicationStartup');
|
||||
}
|
||||
|
||||
return trigger.Type;
|
||||
@@ -124,20 +124,20 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||
return datetime.getDisplayTime(now);
|
||||
},
|
||||
showAddTriggerPopup: function (view) {
|
||||
$("#selectTriggerType", view).val("DailyTrigger");
|
||||
view.querySelector("#selectTriggerType").dispatchEvent(new CustomEvent("change", {}));
|
||||
$("#popupAddTrigger", view).removeClass("hide");
|
||||
$('#selectTriggerType', view).val('DailyTrigger');
|
||||
view.querySelector('#selectTriggerType').dispatchEvent(new CustomEvent('change', {}));
|
||||
$('#popupAddTrigger', view).removeClass('hide');
|
||||
},
|
||||
confirmDeleteTrigger: function (view, index) {
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(globalize.translate("MessageDeleteTaskTrigger"), globalize.translate("HeaderDeleteTaskTrigger")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(globalize.translate('MessageDeleteTaskTrigger'), globalize.translate('HeaderDeleteTaskTrigger')).then(function () {
|
||||
ScheduledTaskPage.deleteTrigger(view, index);
|
||||
});
|
||||
});
|
||||
},
|
||||
deleteTrigger: function (view, index) {
|
||||
loading.show();
|
||||
var id = getParameterByName("id");
|
||||
var id = getParameterByName('id');
|
||||
ApiClient.getScheduledTask(id).then(function (task) {
|
||||
task.Triggers.remove(index);
|
||||
ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
|
||||
@@ -146,55 +146,55 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||
});
|
||||
},
|
||||
refreshTriggerFields: function (page, triggerType) {
|
||||
if (triggerType == "DailyTrigger") {
|
||||
$("#fldTimeOfDay", page).show();
|
||||
$("#fldDayOfWeek", page).hide();
|
||||
$("#fldSelectSystemEvent", page).hide();
|
||||
$("#fldSelectInterval", page).hide();
|
||||
$("#selectTimeOfDay", page).attr("required", "required");
|
||||
} else if (triggerType == "WeeklyTrigger") {
|
||||
$("#fldTimeOfDay", page).show();
|
||||
$("#fldDayOfWeek", page).show();
|
||||
$("#fldSelectSystemEvent", page).hide();
|
||||
$("#fldSelectInterval", page).hide();
|
||||
$("#selectTimeOfDay", page).attr("required", "required");
|
||||
} else if (triggerType == "SystemEventTrigger") {
|
||||
$("#fldTimeOfDay", page).hide();
|
||||
$("#fldDayOfWeek", page).hide();
|
||||
$("#fldSelectSystemEvent", page).show();
|
||||
$("#fldSelectInterval", page).hide();
|
||||
$("#selectTimeOfDay", page).removeAttr("required");
|
||||
} else if (triggerType == "IntervalTrigger") {
|
||||
$("#fldTimeOfDay", page).hide();
|
||||
$("#fldDayOfWeek", page).hide();
|
||||
$("#fldSelectSystemEvent", page).hide();
|
||||
$("#fldSelectInterval", page).show();
|
||||
$("#selectTimeOfDay", page).removeAttr("required");
|
||||
} else if (triggerType == "StartupTrigger") {
|
||||
$("#fldTimeOfDay", page).hide();
|
||||
$("#fldDayOfWeek", page).hide();
|
||||
$("#fldSelectSystemEvent", page).hide();
|
||||
$("#fldSelectInterval", page).hide();
|
||||
$("#selectTimeOfDay", page).removeAttr("required");
|
||||
if (triggerType == 'DailyTrigger') {
|
||||
$('#fldTimeOfDay', page).show();
|
||||
$('#fldDayOfWeek', page).hide();
|
||||
$('#fldSelectSystemEvent', page).hide();
|
||||
$('#fldSelectInterval', page).hide();
|
||||
$('#selectTimeOfDay', page).attr('required', 'required');
|
||||
} else if (triggerType == 'WeeklyTrigger') {
|
||||
$('#fldTimeOfDay', page).show();
|
||||
$('#fldDayOfWeek', page).show();
|
||||
$('#fldSelectSystemEvent', page).hide();
|
||||
$('#fldSelectInterval', page).hide();
|
||||
$('#selectTimeOfDay', page).attr('required', 'required');
|
||||
} else if (triggerType == 'SystemEventTrigger') {
|
||||
$('#fldTimeOfDay', page).hide();
|
||||
$('#fldDayOfWeek', page).hide();
|
||||
$('#fldSelectSystemEvent', page).show();
|
||||
$('#fldSelectInterval', page).hide();
|
||||
$('#selectTimeOfDay', page).removeAttr('required');
|
||||
} else if (triggerType == 'IntervalTrigger') {
|
||||
$('#fldTimeOfDay', page).hide();
|
||||
$('#fldDayOfWeek', page).hide();
|
||||
$('#fldSelectSystemEvent', page).hide();
|
||||
$('#fldSelectInterval', page).show();
|
||||
$('#selectTimeOfDay', page).removeAttr('required');
|
||||
} else if (triggerType == 'StartupTrigger') {
|
||||
$('#fldTimeOfDay', page).hide();
|
||||
$('#fldDayOfWeek', page).hide();
|
||||
$('#fldSelectSystemEvent', page).hide();
|
||||
$('#fldSelectInterval', page).hide();
|
||||
$('#selectTimeOfDay', page).removeAttr('required');
|
||||
}
|
||||
},
|
||||
getTriggerToAdd: function (page) {
|
||||
var trigger = {
|
||||
Type: $("#selectTriggerType", page).val()
|
||||
Type: $('#selectTriggerType', page).val()
|
||||
};
|
||||
|
||||
if (trigger.Type == "DailyTrigger") {
|
||||
trigger.TimeOfDayTicks = $("#selectTimeOfDay", page).val();
|
||||
} else if (trigger.Type == "WeeklyTrigger") {
|
||||
trigger.DayOfWeek = $("#selectDayOfWeek", page).val();
|
||||
trigger.TimeOfDayTicks = $("#selectTimeOfDay", page).val();
|
||||
} else if (trigger.Type == "SystemEventTrigger") {
|
||||
trigger.SystemEvent = $("#selectSystemEvent", page).val();
|
||||
} else if (trigger.Type == "IntervalTrigger") {
|
||||
trigger.IntervalTicks = $("#selectInterval", page).val();
|
||||
if (trigger.Type == 'DailyTrigger') {
|
||||
trigger.TimeOfDayTicks = $('#selectTimeOfDay', page).val();
|
||||
} else if (trigger.Type == 'WeeklyTrigger') {
|
||||
trigger.DayOfWeek = $('#selectDayOfWeek', page).val();
|
||||
trigger.TimeOfDayTicks = $('#selectTimeOfDay', page).val();
|
||||
} else if (trigger.Type == 'SystemEventTrigger') {
|
||||
trigger.SystemEvent = $('#selectSystemEvent', page).val();
|
||||
} else if (trigger.Type == 'IntervalTrigger') {
|
||||
trigger.IntervalTicks = $('#selectInterval', page).val();
|
||||
}
|
||||
|
||||
var timeLimit = $("#txtTimeLimit", page).val() || "0";
|
||||
var timeLimit = $('#txtTimeLimit', page).val() || '0';
|
||||
timeLimit = parseFloat(timeLimit) * 3600000;
|
||||
|
||||
trigger.MaxRuntimeMs = timeLimit || null;
|
||||
@@ -205,34 +205,34 @@ define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby
|
||||
return function (view, params) {
|
||||
function onSubmit(e) {
|
||||
loading.show();
|
||||
var id = getParameterByName("id");
|
||||
var id = getParameterByName('id');
|
||||
ApiClient.getScheduledTask(id).then(function (task) {
|
||||
task.Triggers.push(ScheduledTaskPage.getTriggerToAdd(view));
|
||||
ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
|
||||
$("#popupAddTrigger").addClass("hide");
|
||||
$('#popupAddTrigger').addClass('hide');
|
||||
ScheduledTaskPage.refreshScheduledTask(view);
|
||||
});
|
||||
});
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
view.querySelector(".addTriggerForm").addEventListener("submit", onSubmit);
|
||||
fillTimeOfDay(view.querySelector("#selectTimeOfDay"));
|
||||
$(view.querySelector("#popupAddTrigger").parentNode).trigger("create");
|
||||
view.querySelector(".selectTriggerType").addEventListener("change", function () {
|
||||
view.querySelector('.addTriggerForm').addEventListener('submit', onSubmit);
|
||||
fillTimeOfDay(view.querySelector('#selectTimeOfDay'));
|
||||
$(view.querySelector('#popupAddTrigger').parentNode).trigger('create');
|
||||
view.querySelector('.selectTriggerType').addEventListener('change', function () {
|
||||
ScheduledTaskPage.refreshTriggerFields(view, this.value);
|
||||
});
|
||||
view.querySelector(".btnAddTrigger").addEventListener("click", function () {
|
||||
view.querySelector('.btnAddTrigger').addEventListener('click', function () {
|
||||
ScheduledTaskPage.showAddTriggerPopup(view);
|
||||
});
|
||||
view.addEventListener("click", function (e) {
|
||||
var btnDeleteTrigger = dom.parentWithClass(e.target, "btnDeleteTrigger");
|
||||
view.addEventListener('click', function (e) {
|
||||
var btnDeleteTrigger = dom.parentWithClass(e.target, 'btnDeleteTrigger');
|
||||
|
||||
if (btnDeleteTrigger) {
|
||||
ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute("data-index")));
|
||||
ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute('data-index')));
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
ScheduledTaskPage.refreshScheduledTask(view);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date-fns", "dfnshelper", "listViewStyle", "emby-button"], function ($, loading, events, globalize, serverNotifications, datefns, dfnshelper) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'events', 'globalize', 'serverNotifications', 'date-fns', 'dfnshelper', 'listViewStyle', 'emby-button'], function ($, loading, events, globalize, serverNotifications, datefns, dfnshelper) {
|
||||
'use strict';
|
||||
|
||||
function reloadList(page) {
|
||||
ApiClient.getScheduledTasks({
|
||||
@@ -12,114 +12,114 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
|
||||
|
||||
function populateList(page, tasks) {
|
||||
tasks = tasks.sort(function(a, b) {
|
||||
a = a.Category + " " + a.Name;
|
||||
b = b.Category + " " + b.Name;
|
||||
a = a.Category + ' ' + a.Name;
|
||||
b = b.Category + ' ' + b.Name;
|
||||
return a == b ? 0 : a < b ? -1 : 1;
|
||||
});
|
||||
|
||||
var currentCategory;
|
||||
var html = "";
|
||||
var html = '';
|
||||
for (var i = 0; i < tasks.length; i++) {
|
||||
var task = tasks[i];
|
||||
if (task.Category != currentCategory) {
|
||||
currentCategory = task.Category;
|
||||
if (currentCategory) {
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
html += '<div class="verticalSection verticalSection-extrabottompadding">';
|
||||
html += '<div class="sectionTitleContainer" style="margin-bottom:1em;">';
|
||||
html += '<h2 class="sectionTitle">';
|
||||
html += currentCategory;
|
||||
html += "</h2>";
|
||||
html += '</h2>';
|
||||
if (i === 0) {
|
||||
html += '<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/tasks.html">' + globalize.translate("Help") + "</a>";
|
||||
html += '<a is="emby-linkbutton" class="raised button-alt headerHelpButton" target="_blank" href="https://docs.jellyfin.org/general/server/tasks.html">' + globalize.translate('Help') + '</a>';
|
||||
}
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<div class="paperList">';
|
||||
}
|
||||
html += '<div class="listItem listItem-border scheduledTaskPaperIconItem" data-status="' + task.State + '">';
|
||||
html += "<a is='emby-linkbutton' style='margin:0;padding:0;' class='clearLink listItemIconContainer' href='scheduledtask.html?id=" + task.Id + "'>";
|
||||
html += '<span class="material-icons listItemIcon schedule"></span>';
|
||||
html += "</a>";
|
||||
html += '</a>';
|
||||
html += '<div class="listItemBody two-line">';
|
||||
html += "<a class='clearLink' style='margin:0;padding:0;display:block;text-align:left;' is='emby-linkbutton' href='scheduledtask.html?id=" + task.Id + "'>";
|
||||
html += "<h3 class='listItemBodyText'>" + task.Name + "</h3>";
|
||||
html += "<div class='secondary listItemBodyText' id='taskProgress" + task.Id + "'>" + getTaskProgressHtml(task) + "</div>";
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
if (task.State === "Running") {
|
||||
html += '<button type="button" is="paper-icon-button-light" id="btnTask' + task.Id + '" class="btnStopTask" data-taskid="' + task.Id + '" title="' + globalize.translate("ButtonStop") + '"><span class="material-icons stop"></span></button>';
|
||||
} else if (task.State === "Idle") {
|
||||
html += '<button type="button" is="paper-icon-button-light" id="btnTask' + task.Id + '" class="btnStartTask" data-taskid="' + task.Id + '" title="' + globalize.translate("ButtonStart") + '"><span class="material-icons play_arrow"></span></button>';
|
||||
html += "<h3 class='listItemBodyText'>" + task.Name + '</h3>';
|
||||
html += "<div class='secondary listItemBodyText' id='taskProgress" + task.Id + "'>" + getTaskProgressHtml(task) + '</div>';
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
if (task.State === 'Running') {
|
||||
html += '<button type="button" is="paper-icon-button-light" id="btnTask' + task.Id + '" class="btnStopTask" data-taskid="' + task.Id + '" title="' + globalize.translate('ButtonStop') + '"><span class="material-icons stop"></span></button>';
|
||||
} else if (task.State === 'Idle') {
|
||||
html += '<button type="button" is="paper-icon-button-light" id="btnTask' + task.Id + '" class="btnStartTask" data-taskid="' + task.Id + '" title="' + globalize.translate('ButtonStart') + '"><span class="material-icons play_arrow"></span></button>';
|
||||
}
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
if (tasks.length) {
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
page.querySelector(".divScheduledTasks").innerHTML = html;
|
||||
page.querySelector('.divScheduledTasks').innerHTML = html;
|
||||
}
|
||||
|
||||
function getTaskProgressHtml(task) {
|
||||
var html = "";
|
||||
if (task.State === "Idle") {
|
||||
var html = '';
|
||||
if (task.State === 'Idle') {
|
||||
if (task.LastExecutionResult) {
|
||||
var endtime = Date.parse(task.LastExecutionResult.EndTimeUtc);
|
||||
var 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() }));
|
||||
if (task.LastExecutionResult.Status === "Failed") {
|
||||
html += " <span style='color:#FF0000;'>(" + globalize.translate("LabelFailed") + ")</span>";
|
||||
} else if (task.LastExecutionResult.Status === "Cancelled") {
|
||||
html += " <span style='color:#0026FF;'>(" + globalize.translate("LabelCancelled") + ")</span>";
|
||||
} else if (task.LastExecutionResult.Status === "Aborted") {
|
||||
html += " <span style='color:#FF0000;'>" + globalize.translate("LabelAbortedByServerShutdown") + "</span>";
|
||||
if (task.LastExecutionResult.Status === 'Failed') {
|
||||
html += " <span style='color:#FF0000;'>(" + globalize.translate('LabelFailed') + ')</span>';
|
||||
} else if (task.LastExecutionResult.Status === 'Cancelled') {
|
||||
html += " <span style='color:#0026FF;'>(" + globalize.translate('LabelCancelled') + ')</span>';
|
||||
} else if (task.LastExecutionResult.Status === 'Aborted') {
|
||||
html += " <span style='color:#FF0000;'>" + globalize.translate('LabelAbortedByServerShutdown') + '</span>';
|
||||
}
|
||||
}
|
||||
} else if (task.State === "Running") {
|
||||
} else if (task.State === 'Running') {
|
||||
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
|
||||
html += '<div style="display:flex;align-items:center;">';
|
||||
html += '<div class="taskProgressOuter" title="' + progress + '%" style="flex-grow:1;">';
|
||||
html += '<div class="taskProgressInner" style="width:' + progress + '%;">';
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "<span style='color:#00a4dc;margin-left:5px;'>" + progress + "%</span>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += "<span style='color:#00a4dc;margin-left:5px;'>" + progress + '%</span>';
|
||||
html += '</div>';
|
||||
} else {
|
||||
html += "<span style='color:#FF0000;'>" + globalize.translate("LabelStopping") + "</span>";
|
||||
html += "<span style='color:#FF0000;'>" + globalize.translate('LabelStopping') + '</span>';
|
||||
}
|
||||
return html;
|
||||
}
|
||||
|
||||
function setTaskButtonIcon(button, icon) {
|
||||
var inner = button.querySelector(".material-icons");
|
||||
inner.classList.remove("stop", "play_arrow");
|
||||
var inner = button.querySelector('.material-icons');
|
||||
inner.classList.remove('stop', 'play_arrow');
|
||||
inner.classList.add(icon);
|
||||
}
|
||||
|
||||
function updateTaskButton(elem, state) {
|
||||
if (state === "Running") {
|
||||
elem.classList.remove("btnStartTask");
|
||||
elem.classList.add("btnStopTask");
|
||||
setTaskButtonIcon(elem, "stop");
|
||||
elem.title = globalize.translate("ButtonStop");
|
||||
} else if (state === "Idle") {
|
||||
elem.classList.add("btnStartTask");
|
||||
elem.classList.remove("btnStopTask");
|
||||
setTaskButtonIcon(elem, "play_arrow");
|
||||
elem.title = globalize.translate("ButtonStart");
|
||||
if (state === 'Running') {
|
||||
elem.classList.remove('btnStartTask');
|
||||
elem.classList.add('btnStopTask');
|
||||
setTaskButtonIcon(elem, 'stop');
|
||||
elem.title = globalize.translate('ButtonStop');
|
||||
} else if (state === 'Idle') {
|
||||
elem.classList.add('btnStartTask');
|
||||
elem.classList.remove('btnStopTask');
|
||||
setTaskButtonIcon(elem, 'play_arrow');
|
||||
elem.title = globalize.translate('ButtonStart');
|
||||
}
|
||||
$(elem).parents(".listItem")[0].setAttribute("data-status", state);
|
||||
$(elem).parents('.listItem')[0].setAttribute('data-status', state);
|
||||
}
|
||||
|
||||
return function(view, params) {
|
||||
function updateTasks(tasks) {
|
||||
for (var i = 0; i < tasks.length; i++) {
|
||||
var task = tasks[i];
|
||||
view.querySelector("#taskProgress" + task.Id).innerHTML = getTaskProgressHtml(task);
|
||||
updateTaskButton(view.querySelector("#btnTask" + task.Id), task.State);
|
||||
view.querySelector('#taskProgress' + task.Id).innerHTML = getTaskProgressHtml(task);
|
||||
updateTaskButton(view.querySelector('#btnTask' + task.Id), task.State);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -136,47 +136,47 @@ define(["jQuery", "loading", "events", "globalize", "serverNotifications", "date
|
||||
}
|
||||
|
||||
function startInterval() {
|
||||
ApiClient.sendMessage("ScheduledTasksInfoStart", "1000,1000");
|
||||
ApiClient.sendMessage('ScheduledTasksInfoStart', '1000,1000');
|
||||
pollInterval && clearInterval(pollInterval);
|
||||
pollInterval = setInterval(onPollIntervalFired, 1e4);
|
||||
}
|
||||
|
||||
function stopInterval() {
|
||||
ApiClient.sendMessage("ScheduledTasksInfoStop");
|
||||
ApiClient.sendMessage('ScheduledTasksInfoStop');
|
||||
pollInterval && clearInterval(pollInterval);
|
||||
}
|
||||
|
||||
var pollInterval;
|
||||
var serverId = ApiClient.serverId();
|
||||
|
||||
$(".divScheduledTasks", view).on("click", ".btnStartTask", function() {
|
||||
$('.divScheduledTasks', view).on('click', '.btnStartTask', function() {
|
||||
var button = this;
|
||||
var id = button.getAttribute("data-taskid");
|
||||
var id = button.getAttribute('data-taskid');
|
||||
ApiClient.startScheduledTask(id).then(function() {
|
||||
updateTaskButton(button, "Running");
|
||||
updateTaskButton(button, 'Running');
|
||||
reloadList(view);
|
||||
});
|
||||
});
|
||||
|
||||
$(".divScheduledTasks", view).on("click", ".btnStopTask", function() {
|
||||
$('.divScheduledTasks', view).on('click', '.btnStopTask', function() {
|
||||
var button = this;
|
||||
var id = button.getAttribute("data-taskid");
|
||||
var id = button.getAttribute('data-taskid');
|
||||
ApiClient.stopScheduledTask(id).then(function() {
|
||||
updateTaskButton(button, "");
|
||||
updateTaskButton(button, '');
|
||||
reloadList(view);
|
||||
});
|
||||
});
|
||||
|
||||
view.addEventListener("viewbeforehide", function() {
|
||||
events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||
view.addEventListener('viewbeforehide', function() {
|
||||
events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
|
||||
stopInterval();
|
||||
});
|
||||
|
||||
view.addEventListener("viewshow", function() {
|
||||
view.addEventListener('viewshow', function() {
|
||||
loading.show();
|
||||
startInterval();
|
||||
reloadList(view);
|
||||
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||
events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
define(["components/activitylog", "globalize"], function (ActivityLog, globalize) {
|
||||
"use strict";
|
||||
define(['components/activitylog', 'globalize'], function (ActivityLog, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
var activityLog;
|
||||
|
||||
if (params.useractivity !== "false") {
|
||||
view.querySelector(".activityItems").setAttribute("data-useractivity", "true");
|
||||
view.querySelector(".sectionTitle").innerHTML = globalize.translate("HeaderActivity");
|
||||
if (params.useractivity !== 'false') {
|
||||
view.querySelector('.activityItems').setAttribute('data-useractivity', 'true');
|
||||
view.querySelector('.sectionTitle').innerHTML = globalize.translate('HeaderActivity');
|
||||
} else {
|
||||
view.querySelector(".activityItems").setAttribute("data-useractivity", "false");
|
||||
view.querySelector(".sectionTitle").innerHTML = globalize.translate("Alerts");
|
||||
view.querySelector('.activityItems').setAttribute('data-useractivity', 'false');
|
||||
view.querySelector('.sectionTitle').innerHTML = globalize.translate('Alerts');
|
||||
}
|
||||
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
if (!activityLog) {
|
||||
activityLog = new ActivityLog({
|
||||
serverId: ApiClient.serverId(),
|
||||
element: view.querySelector(".activityItems")
|
||||
element: view.querySelector('.activityItems')
|
||||
});
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
if (activityLog) {
|
||||
activityLog.destroy();
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
define(["jQuery", "libraryMenu", "loading", "globalize"], function ($, libraryMenu, loading, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'libraryMenu', 'loading', 'globalize'], function ($, libraryMenu, loading, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config) {
|
||||
$("#txtRemoteClientBitrateLimit", page).val(config.RemoteClientBitrateLimit / 1e6 || "");
|
||||
$('#txtRemoteClientBitrateLimit', page).val(config.RemoteClientBitrateLimit / 1e6 || '');
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ define(["jQuery", "libraryMenu", "loading", "globalize"], function ($, libraryMe
|
||||
loading.show();
|
||||
var form = this;
|
||||
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);
|
||||
});
|
||||
|
||||
@@ -19,22 +19,22 @@ define(["jQuery", "libraryMenu", "loading", "globalize"], function ($, libraryMe
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "encodingsettings.html",
|
||||
name: globalize.translate("Transcoding")
|
||||
href: 'encodingsettings.html',
|
||||
name: globalize.translate('Transcoding')
|
||||
}, {
|
||||
href: "playbackconfiguration.html",
|
||||
name: globalize.translate("TabResumeSettings")
|
||||
href: 'playbackconfiguration.html',
|
||||
name: globalize.translate('TabResumeSettings')
|
||||
}, {
|
||||
href: "streamingsettings.html",
|
||||
name: globalize.translate("TabStreaming")
|
||||
href: 'streamingsettings.html',
|
||||
name: globalize.translate('TabStreaming')
|
||||
}];
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#streamingSettingsPage", function () {
|
||||
$(".streamingSettingsForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#streamingSettingsPage", function () {
|
||||
$(document).on('pageinit', '#streamingSettingsPage', function () {
|
||||
$('.streamingSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#streamingSettingsPage', function () {
|
||||
loading.show();
|
||||
libraryMenu.setTabs("playback", 2, getTabs);
|
||||
libraryMenu.setTabs('playback', 2, getTabs);
|
||||
var page = this;
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
loadPage(page, config);
|
||||
|
||||
@@ -1,25 +1,25 @@
|
||||
define(["loading", "scripts/editorsidebar"], function (loading) {
|
||||
"use strict";
|
||||
define(['loading', 'scripts/editorsidebar'], function (loading) {
|
||||
'use strict';
|
||||
|
||||
function reload(context, itemId) {
|
||||
loading.show();
|
||||
|
||||
if (itemId) {
|
||||
require(["metadataEditor"], function (metadataEditor) {
|
||||
metadataEditor.embed(context.querySelector(".editPageInnerContent"), itemId, ApiClient.serverInfo().Id);
|
||||
require(['metadataEditor'], function (metadataEditor) {
|
||||
metadataEditor.embed(context.querySelector('.editPageInnerContent'), itemId, ApiClient.serverInfo().Id);
|
||||
});
|
||||
} else {
|
||||
context.querySelector(".editPageInnerContent").innerHTML = "";
|
||||
context.querySelector('.editPageInnerContent').innerHTML = '';
|
||||
loading.hide();
|
||||
}
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
reload(this, MetadataEditor.getCurrentItemId());
|
||||
});
|
||||
MetadataEditor.setCurrentItemId(null);
|
||||
view.querySelector(".libraryTree").addEventListener("itemclicked", function (event) {
|
||||
view.querySelector('.libraryTree').addEventListener('itemclicked', function (event) {
|
||||
var data = event.detail;
|
||||
|
||||
if (data.id != MetadataEditor.getCurrentItemId()) {
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "apphost", "layoutManager", "focusManager", "emby-itemscontainer", "emby-scroller"], function (appRouter, cardBuilder, dom, globalize, connectionManager, appHost, layoutManager, focusManager) {
|
||||
"use strict";
|
||||
define(['appRouter', 'cardBuilder', 'dom', 'globalize', 'connectionManager', 'apphost', 'layoutManager', 'focusManager', 'emby-itemscontainer', 'emby-scroller'], function (appRouter, cardBuilder, dom, globalize, connectionManager, appHost, layoutManager, focusManager) {
|
||||
'use strict';
|
||||
|
||||
function enableScrollX() {
|
||||
return true;
|
||||
}
|
||||
|
||||
function getThumbShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function getPosterShape() {
|
||||
return enableScrollX() ? "overflowPortrait" : "portrait";
|
||||
return enableScrollX() ? 'overflowPortrait' : 'portrait';
|
||||
}
|
||||
|
||||
function getSquareShape() {
|
||||
return enableScrollX() ? "overflowSquare" : "square";
|
||||
return enableScrollX() ? 'overflowSquare' : 'square';
|
||||
}
|
||||
|
||||
function getSections() {
|
||||
return [{
|
||||
name: "HeaderFavoriteMovies",
|
||||
types: "Movie",
|
||||
name: 'HeaderFavoriteMovies',
|
||||
types: 'Movie',
|
||||
shape: getPosterShape(),
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
@@ -28,8 +28,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayText: false,
|
||||
centerText: true
|
||||
}, {
|
||||
name: "HeaderFavoriteShows",
|
||||
types: "Series",
|
||||
name: 'HeaderFavoriteShows',
|
||||
types: 'Series',
|
||||
shape: getPosterShape(),
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
@@ -37,8 +37,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayText: false,
|
||||
centerText: true
|
||||
}, {
|
||||
name: "HeaderFavoriteEpisodes",
|
||||
types: "Episode",
|
||||
name: 'HeaderFavoriteEpisodes',
|
||||
types: 'Episode',
|
||||
shape: getThumbShape(),
|
||||
preferThumb: false,
|
||||
showTitle: true,
|
||||
@@ -47,8 +47,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayText: false,
|
||||
centerText: true
|
||||
}, {
|
||||
name: "HeaderFavoriteVideos",
|
||||
types: "Video",
|
||||
name: 'HeaderFavoriteVideos',
|
||||
types: 'Video',
|
||||
shape: getThumbShape(),
|
||||
preferThumb: true,
|
||||
showTitle: true,
|
||||
@@ -56,16 +56,16 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayText: false,
|
||||
centerText: true
|
||||
}, {
|
||||
name: "HeaderFavoriteCollections",
|
||||
types: "BoxSet",
|
||||
name: 'HeaderFavoriteCollections',
|
||||
types: 'BoxSet',
|
||||
shape: getPosterShape(),
|
||||
showTitle: true,
|
||||
overlayPlayButton: true,
|
||||
overlayText: false,
|
||||
centerText: true
|
||||
}, {
|
||||
name: "HeaderFavoritePlaylists",
|
||||
types: "Playlist",
|
||||
name: 'HeaderFavoritePlaylists',
|
||||
types: 'Playlist',
|
||||
shape: getSquareShape(),
|
||||
preferThumb: false,
|
||||
showTitle: true,
|
||||
@@ -75,8 +75,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayPlayButton: true,
|
||||
coverImage: true
|
||||
}, {
|
||||
name: "HeaderFavoritePeople",
|
||||
types: "Person",
|
||||
name: 'HeaderFavoritePeople',
|
||||
types: 'Person',
|
||||
shape: getPosterShape(),
|
||||
preferThumb: false,
|
||||
showTitle: true,
|
||||
@@ -86,8 +86,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayPlayButton: true,
|
||||
coverImage: true
|
||||
}, {
|
||||
name: "HeaderFavoriteArtists",
|
||||
types: "MusicArtist",
|
||||
name: 'HeaderFavoriteArtists',
|
||||
types: 'MusicArtist',
|
||||
shape: getSquareShape(),
|
||||
preferThumb: false,
|
||||
showTitle: true,
|
||||
@@ -97,8 +97,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayPlayButton: true,
|
||||
coverImage: true
|
||||
}, {
|
||||
name: "HeaderFavoriteAlbums",
|
||||
types: "MusicAlbum",
|
||||
name: 'HeaderFavoriteAlbums',
|
||||
types: 'MusicAlbum',
|
||||
shape: getSquareShape(),
|
||||
preferThumb: false,
|
||||
showTitle: true,
|
||||
@@ -108,8 +108,8 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
overlayPlayButton: true,
|
||||
coverImage: true
|
||||
}, {
|
||||
name: "HeaderFavoriteSongs",
|
||||
types: "Audio",
|
||||
name: 'HeaderFavoriteSongs',
|
||||
types: 'Audio',
|
||||
shape: getSquareShape(),
|
||||
preferThumb: false,
|
||||
showTitle: true,
|
||||
@@ -117,11 +117,11 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
showParentTitle: true,
|
||||
centerText: true,
|
||||
overlayMoreButton: true,
|
||||
action: "instantmix",
|
||||
action: 'instantmix',
|
||||
coverImage: true
|
||||
}, {
|
||||
name: "HeaderFavoriteBooks",
|
||||
types: "Book",
|
||||
name: 'HeaderFavoriteBooks',
|
||||
types: 'Book',
|
||||
shape: getPosterShape(),
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
@@ -135,23 +135,23 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
return function () {
|
||||
var apiClient = this.apiClient;
|
||||
var options = {
|
||||
SortBy: (section.types, "SeriesName,SortName"),
|
||||
SortOrder: "Ascending",
|
||||
Filters: "IsFavorite",
|
||||
SortBy: (section.types, 'SeriesName,SortName'),
|
||||
SortOrder: 'Ascending',
|
||||
Filters: 'IsFavorite',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
CollapseBoxSetItems: false,
|
||||
ExcludeLocationTypes: "Virtual",
|
||||
ExcludeLocationTypes: 'Virtual',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
options.Limit = 20;
|
||||
var userId = apiClient.getCurrentUserId();
|
||||
|
||||
if ("MusicArtist" === section.types) {
|
||||
if ('MusicArtist' === section.types) {
|
||||
return apiClient.getArtists(userId, options);
|
||||
}
|
||||
|
||||
if ("Person" === section.types) {
|
||||
if ('Person' === section.types) {
|
||||
return apiClient.getPeople(userId, options);
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
}
|
||||
|
||||
function getRouteUrl(section, serverId) {
|
||||
return appRouter.getRouteUrl("list", {
|
||||
return appRouter.getRouteUrl('list', {
|
||||
serverId: serverId,
|
||||
itemTypes: section.types,
|
||||
isFavorite: true
|
||||
@@ -170,14 +170,14 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
|
||||
function getItemsHtmlFn(section) {
|
||||
return function (items) {
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
var cardLayout = (appHost.preferVisualCards || supportsImageAnalysis) && section.autoCardLayout && section.showTitle;
|
||||
cardLayout = false;
|
||||
var serverId = this.apiClient.serverId();
|
||||
var leadingButtons = layoutManager.tv ? [{
|
||||
name: globalize.translate("All"),
|
||||
id: "more",
|
||||
icon: "favorite",
|
||||
name: globalize.translate('All'),
|
||||
id: 'more',
|
||||
icon: 'favorite',
|
||||
routeUrl: getRouteUrl(section, serverId)
|
||||
}] : null;
|
||||
var lines = 0;
|
||||
@@ -220,7 +220,7 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
this.view = view;
|
||||
this.params = params;
|
||||
this.apiClient = connectionManager.currentApiClient();
|
||||
this.sectionsContainer = view.querySelector(".sections");
|
||||
this.sectionsContainer = view.querySelector('.sections');
|
||||
createSections(this, this.sectionsContainer, this.apiClient);
|
||||
}
|
||||
|
||||
@@ -228,50 +228,50 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
var i;
|
||||
var length;
|
||||
var sections = getSections();
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (i = 0, length = sections.length; i < length; i++) {
|
||||
var section = sections[i];
|
||||
var sectionClass = "verticalSection";
|
||||
var sectionClass = 'verticalSection';
|
||||
|
||||
if (!section.showTitle) {
|
||||
sectionClass += " verticalSection-extrabottompadding";
|
||||
sectionClass += ' verticalSection-extrabottompadding';
|
||||
}
|
||||
|
||||
html += '<div class="' + sectionClass + ' hide">';
|
||||
html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">';
|
||||
|
||||
if (layoutManager.tv) {
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">' + globalize.translate(section.name) + "</h2>";
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">' + globalize.translate(section.name) + '</h2>';
|
||||
} else {
|
||||
html += '<a is="emby-linkbutton" href="' + getRouteUrl(section, apiClient.serverId()) + '" class="more button-flat button-flat-mini sectionTitleTextButton">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">';
|
||||
html += globalize.translate(section.name);
|
||||
html += "</h2>";
|
||||
html += '</h2>';
|
||||
html += '<span class="material-icons chevron_right"></span>';
|
||||
html += "</a>";
|
||||
html += '</a>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale" data-centerfocus="true"><div is="emby-itemscontainer" class="itemsContainer scrollSlider focuscontainer-x" data-monitor="markfavorite"></div></div>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
elem.innerHTML = html;
|
||||
var elems = elem.querySelectorAll(".itemsContainer");
|
||||
var elems = elem.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
var itemsContainer = elems[i];
|
||||
itemsContainer.fetchData = getFetchDataFn(sections[i]).bind(instance);
|
||||
itemsContainer.getItemsHtml = getItemsHtmlFn(sections[i]).bind(instance);
|
||||
itemsContainer.parentContainer = dom.parentWithClass(itemsContainer, "verticalSection");
|
||||
itemsContainer.parentContainer = dom.parentWithClass(itemsContainer, 'verticalSection');
|
||||
}
|
||||
}
|
||||
|
||||
FavoritesTab.prototype.onResume = function (options) {
|
||||
var promises = (this.apiClient, []);
|
||||
var view = this.view;
|
||||
var elems = this.sectionsContainer.querySelectorAll(".itemsContainer");
|
||||
var elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (var i = 0, length = elems.length; i < length; i++) {
|
||||
promises.push(elems[i].resume(options));
|
||||
@@ -285,7 +285,7 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
};
|
||||
|
||||
FavoritesTab.prototype.onPause = function () {
|
||||
var elems = this.sectionsContainer.querySelectorAll(".itemsContainer");
|
||||
var elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (var i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].pause();
|
||||
@@ -296,7 +296,7 @@ define(["appRouter", "cardBuilder", "dom", "globalize", "connectionManager", "ap
|
||||
this.view = null;
|
||||
this.params = null;
|
||||
this.apiClient = null;
|
||||
var elems = this.sectionsContainer.querySelectorAll(".itemsContainer");
|
||||
var elems = this.sectionsContainer.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (var i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].fetchData = null;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
define(["tabbedView", "globalize", "require", "emby-tabs", "emby-button", "emby-scroller"], function (TabbedView, globalize, require) {
|
||||
"use strict";
|
||||
define(['tabbedView', 'globalize', 'require', 'emby-tabs', 'emby-button', 'emby-scroller'], function (TabbedView, globalize, require) {
|
||||
'use strict';
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
name: globalize.translate("Home")
|
||||
name: globalize.translate('Home')
|
||||
}, {
|
||||
name: globalize.translate("Favorites")
|
||||
name: globalize.translate('Favorites')
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -21,18 +21,18 @@ define(["tabbedView", "globalize", "require", "emby-tabs", "emby-button", "emby-
|
||||
|
||||
function getTabController(index) {
|
||||
if (null == index) {
|
||||
throw new Error("index cannot be null");
|
||||
throw new Error('index cannot be null');
|
||||
}
|
||||
|
||||
var depends = [];
|
||||
|
||||
switch (index) {
|
||||
case 0:
|
||||
depends.push("controllers/hometab");
|
||||
depends.push('controllers/hometab');
|
||||
break;
|
||||
|
||||
case 1:
|
||||
depends.push("controllers/favorites");
|
||||
depends.push('controllers/favorites');
|
||||
}
|
||||
|
||||
var instance = this;
|
||||
@@ -63,12 +63,12 @@ define(["tabbedView", "globalize", "require", "emby-tabs", "emby-button", "emby-
|
||||
|
||||
HomeView.prototype.onPause = function () {
|
||||
TabbedView.prototype.onPause.call(this);
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
|
||||
};
|
||||
|
||||
HomeView.prototype.onResume = function (options) {
|
||||
TabbedView.prototype.onResume.call(this, options);
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
|
||||
};
|
||||
|
||||
return HomeView;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
define(["userSettings", "loading", "connectionManager", "apphost", "layoutManager", "focusManager", "homeSections", "emby-itemscontainer"], function (userSettings, loading, connectionManager, appHost, layoutManager, focusManager, homeSections) {
|
||||
"use strict";
|
||||
define(['userSettings', 'loading', 'connectionManager', 'apphost', 'layoutManager', 'focusManager', 'homeSections', 'emby-itemscontainer'], function (userSettings, loading, connectionManager, appHost, layoutManager, focusManager, homeSections) {
|
||||
'use strict';
|
||||
|
||||
function HomeTab(view, params) {
|
||||
this.view = view;
|
||||
this.params = params;
|
||||
this.apiClient = connectionManager.currentApiClient();
|
||||
this.sectionsContainer = view.querySelector(".sections");
|
||||
view.querySelector(".sections").addEventListener("settingschange", onHomeScreenSettingsChanged.bind(this));
|
||||
this.sectionsContainer = view.querySelector('.sections');
|
||||
view.querySelector('.sections').addEventListener('settingschange', onHomeScreenSettingsChanged.bind(this));
|
||||
}
|
||||
|
||||
function onHomeScreenSettingsChanged() {
|
||||
@@ -36,7 +36,7 @@ define(["userSettings", "loading", "connectionManager", "apphost", "layoutManage
|
||||
this.destroyHomeSections();
|
||||
this.sectionsRendered = true;
|
||||
return apiClient.getCurrentUser().then(function (user) {
|
||||
return homeSections.loadSections(view.querySelector(".sections"), apiClient, user, userSettings).then(function () {
|
||||
return homeSections.loadSections(view.querySelector('.sections'), apiClient, user, userSettings).then(function () {
|
||||
if (options.autoFocus) {
|
||||
focusManager.autoFocus(view);
|
||||
}
|
||||
|
||||
+550
-550
File diff suppressed because it is too large
Load Diff
+293
-293
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "userSettings", "emby-itemscontainer"], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) {
|
||||
"use strict";
|
||||
define(['cardBuilder', 'imageLoader', 'libraryBrowser', 'loading', 'events', 'userSettings', 'emby-itemscontainer'], function (cardBuilder, imageLoader, libraryBrowser, loading, events, userSettings) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData() {
|
||||
@@ -7,7 +7,7 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "us
|
||||
pageData = {
|
||||
query: {
|
||||
StartIndex: 0,
|
||||
Fields: "PrimaryImageAspectRatio"
|
||||
Fields: 'PrimaryImageAspectRatio'
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -26,7 +26,7 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "us
|
||||
function getChannelsHtml(channels) {
|
||||
return cardBuilder.getCardsHtml({
|
||||
items: channels,
|
||||
shape: "square",
|
||||
shape: 'square',
|
||||
showTitle: true,
|
||||
lazy: true,
|
||||
cardLayout: true,
|
||||
@@ -60,7 +60,7 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "us
|
||||
}
|
||||
|
||||
var query = getQuery();
|
||||
context.querySelector(".paging").innerHTML = libraryBrowser.getQueryPagingHtml({
|
||||
context.querySelector('.paging').innerHTML = libraryBrowser.getQueryPagingHtml({
|
||||
startIndex: query.StartIndex,
|
||||
limit: query.Limit,
|
||||
totalRecordCount: result.TotalRecordCount,
|
||||
@@ -69,30 +69,30 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "us
|
||||
filterButton: false
|
||||
});
|
||||
var html = getChannelsHtml(result.Items);
|
||||
var elem = context.querySelector("#items");
|
||||
var elem = context.querySelector('#items');
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
var i;
|
||||
var length;
|
||||
var elems;
|
||||
|
||||
for (elems = context.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
for (elems = context.querySelectorAll('.btnNextPage'), i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
for (elems = context.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
for (elems = context.querySelectorAll('.btnPreviousPage'), i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
}
|
||||
|
||||
function showFilterMenu(context) {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(),
|
||||
mode: "livetvchannels",
|
||||
mode: 'livetvchannels',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
reloadItems(context);
|
||||
});
|
||||
filterDialog.show();
|
||||
@@ -110,7 +110,7 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "us
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(view);
|
||||
});
|
||||
});
|
||||
@@ -119,7 +119,7 @@ define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "us
|
||||
var pageData;
|
||||
var self = this;
|
||||
var isLoading = false;
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
showFilterMenu(tabContent);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["tvguide"], function (tvguide) {
|
||||
"use strict";
|
||||
define(['tvguide'], function (tvguide) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
var guideInstance;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "scripts/livetvcomponents", "listViewStyle", "emby-itemscontainer"], function (layoutManager, loading, cardBuilder, appHost, imageLoader) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'cardBuilder', 'apphost', 'imageLoader', 'scripts/livetvcomponents', 'listViewStyle', 'emby-itemscontainer'], function (layoutManager, loading, cardBuilder, appHost, imageLoader) {
|
||||
'use strict';
|
||||
|
||||
function renderRecordings(elem, recordings, cardOptions, scrollX) {
|
||||
if (!elem) {
|
||||
@@ -7,35 +7,35 @@ define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "sc
|
||||
}
|
||||
|
||||
if (recordings.length) {
|
||||
elem.classList.remove("hide");
|
||||
elem.classList.remove('hide');
|
||||
} else {
|
||||
elem.classList.add("hide");
|
||||
elem.classList.add('hide');
|
||||
}
|
||||
|
||||
var recordingItems = elem.querySelector(".recordingItems");
|
||||
var recordingItems = elem.querySelector('.recordingItems');
|
||||
|
||||
if (scrollX) {
|
||||
recordingItems.classList.add("scrollX");
|
||||
recordingItems.classList.add("hiddenScrollX");
|
||||
recordingItems.classList.remove("vertical-wrap");
|
||||
recordingItems.classList.add('scrollX');
|
||||
recordingItems.classList.add('hiddenScrollX');
|
||||
recordingItems.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
recordingItems.classList.remove("scrollX");
|
||||
recordingItems.classList.remove("hiddenScrollX");
|
||||
recordingItems.classList.add("vertical-wrap");
|
||||
recordingItems.classList.remove('scrollX');
|
||||
recordingItems.classList.remove('hiddenScrollX');
|
||||
recordingItems.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
appHost.supports("imageanalysis");
|
||||
appHost.supports('imageanalysis');
|
||||
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
|
||||
items: recordings,
|
||||
shape: scrollX ? "autooverflow" : "auto",
|
||||
defaultShape: scrollX ? "overflowBackdrop" : "backdrop",
|
||||
shape: scrollX ? 'autooverflow' : 'auto',
|
||||
defaultShape: scrollX ? 'overflowBackdrop' : 'backdrop',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
coverImage: true,
|
||||
cardLayout: false,
|
||||
centerText: true,
|
||||
allowBottomPadding: !scrollX,
|
||||
preferThumb: "auto",
|
||||
preferThumb: 'auto',
|
||||
overlayText: false
|
||||
}, cardOptions || {}));
|
||||
imageLoader.lazyChildren(recordingItems);
|
||||
@@ -43,7 +43,7 @@ define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "sc
|
||||
|
||||
function renderLatestRecordings(context, promise) {
|
||||
promise.then(function (result) {
|
||||
renderRecordings(context.querySelector("#latestRecordings"), result.Items, {
|
||||
renderRecordings(context.querySelector('#latestRecordings'), result.Items, {
|
||||
showYear: true,
|
||||
lines: 2
|
||||
}, false);
|
||||
@@ -53,7 +53,7 @@ define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "sc
|
||||
|
||||
function renderRecordingFolders(context, promise) {
|
||||
promise.then(function (result) {
|
||||
renderRecordings(context.querySelector("#recordingFolders"), result.Items, {
|
||||
renderRecordings(context.querySelector('#recordingFolders'), result.Items, {
|
||||
showYear: false,
|
||||
showParentTitle: false
|
||||
}, false);
|
||||
@@ -61,12 +61,12 @@ define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "sc
|
||||
}
|
||||
|
||||
function onMoreClick(e) {
|
||||
var type = this.getAttribute("data-type");
|
||||
var type = this.getAttribute('data-type');
|
||||
var serverId = ApiClient.serverId();
|
||||
|
||||
switch (type) {
|
||||
case "latest":
|
||||
Dashboard.navigate("list.html?type=Recordings&serverId=" + serverId);
|
||||
case 'latest':
|
||||
Dashboard.navigate('list.html?type=Recordings&serverId=' + serverId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -79,10 +79,10 @@ define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "sc
|
||||
var latestPromise;
|
||||
var self = this;
|
||||
var lastFullRender = 0;
|
||||
var moreButtons = tabContent.querySelectorAll(".more");
|
||||
var moreButtons = tabContent.querySelectorAll('.more');
|
||||
|
||||
for (var i = 0, length = moreButtons.length; i < length; i++) {
|
||||
moreButtons[i].addEventListener("click", onMoreClick);
|
||||
moreButtons[i].addEventListener('click', onMoreClick);
|
||||
}
|
||||
|
||||
self.preRender = function () {
|
||||
@@ -90,9 +90,9 @@ define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "sc
|
||||
latestPromise = ApiClient.getLiveTvRecordings({
|
||||
UserId: Dashboard.getCurrentUserId(),
|
||||
Limit: 12,
|
||||
Fields: "CanDelete,PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
EnableTotalRecordCount: false,
|
||||
EnableImageTypes: "Primary,Thumb,Backdrop"
|
||||
EnableImageTypes: 'Primary,Thumb,Backdrop'
|
||||
});
|
||||
foldersPromise = ApiClient.getRecordingFolders(Dashboard.getCurrentUserId());
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "scripts/livetvcomponents", "emby-button", "emby-itemscontainer"], function (layoutManager, cardBuilder, appHost, imageLoader, loading) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'cardBuilder', 'apphost', 'imageLoader', 'loading', 'scripts/livetvcomponents', 'emby-button', 'emby-itemscontainer'], function (layoutManager, cardBuilder, appHost, imageLoader, loading) {
|
||||
'use strict';
|
||||
|
||||
function enableScrollX() {
|
||||
return !layoutManager.desktop;
|
||||
@@ -7,54 +7,54 @@ define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "sc
|
||||
|
||||
function renderRecordings(elem, recordings, cardOptions) {
|
||||
if (recordings.length) {
|
||||
elem.classList.remove("hide");
|
||||
elem.classList.remove('hide');
|
||||
} else {
|
||||
elem.classList.add("hide");
|
||||
elem.classList.add('hide');
|
||||
}
|
||||
|
||||
var recordingItems = elem.querySelector(".recordingItems");
|
||||
var recordingItems = elem.querySelector('.recordingItems');
|
||||
|
||||
if (enableScrollX()) {
|
||||
recordingItems.classList.add("scrollX");
|
||||
recordingItems.classList.add('scrollX');
|
||||
|
||||
if (layoutManager.tv) {
|
||||
recordingItems.classList.add("smoothScrollX");
|
||||
recordingItems.classList.add('smoothScrollX');
|
||||
}
|
||||
|
||||
recordingItems.classList.add("hiddenScrollX");
|
||||
recordingItems.classList.remove("vertical-wrap");
|
||||
recordingItems.classList.add('hiddenScrollX');
|
||||
recordingItems.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
recordingItems.classList.remove("scrollX");
|
||||
recordingItems.classList.remove("smoothScrollX");
|
||||
recordingItems.classList.remove("hiddenScrollX");
|
||||
recordingItems.classList.add("vertical-wrap");
|
||||
recordingItems.classList.remove('scrollX');
|
||||
recordingItems.classList.remove('smoothScrollX');
|
||||
recordingItems.classList.remove('hiddenScrollX');
|
||||
recordingItems.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
var cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
|
||||
cardLayout = false;
|
||||
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
|
||||
items: recordings,
|
||||
shape: enableScrollX() ? "autooverflow" : "auto",
|
||||
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
coverImage: true,
|
||||
cardLayout: cardLayout,
|
||||
centerText: !cardLayout,
|
||||
allowBottomPadding: !enableScrollX(),
|
||||
preferThumb: "auto"
|
||||
preferThumb: 'auto'
|
||||
}, cardOptions || {}));
|
||||
imageLoader.lazyChildren(recordingItems);
|
||||
}
|
||||
|
||||
function getBackdropShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function renderActiveRecordings(context, promise) {
|
||||
promise.then(function (result) {
|
||||
renderRecordings(context.querySelector("#activeRecordings"), result.Items, {
|
||||
shape: enableScrollX() ? "autooverflow" : "auto",
|
||||
renderRecordings(context.querySelector('#activeRecordings'), result.Items, {
|
||||
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
||||
defaultShape: getBackdropShape(),
|
||||
showParentTitle: false,
|
||||
showParentTitleOrTitle: true,
|
||||
@@ -74,19 +74,19 @@ define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "sc
|
||||
var elem = context;
|
||||
|
||||
if (html) {
|
||||
elem.classList.remove("hide");
|
||||
elem.classList.remove('hide');
|
||||
} else {
|
||||
elem.classList.add("hide");
|
||||
elem.classList.add('hide');
|
||||
}
|
||||
|
||||
elem.querySelector(".recordingItems").innerHTML = html;
|
||||
elem.querySelector('.recordingItems').innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
});
|
||||
}
|
||||
|
||||
function renderUpcomingRecordings(context, promise) {
|
||||
promise.then(function (result) {
|
||||
renderTimers(context.querySelector("#upcomingRecordings"), result.Items);
|
||||
renderTimers(context.querySelector('#upcomingRecordings'), result.Items);
|
||||
loading.hide();
|
||||
});
|
||||
}
|
||||
@@ -95,7 +95,7 @@ define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "sc
|
||||
var activeRecordingsPromise;
|
||||
var upcomingRecordingsPromise;
|
||||
var self = this;
|
||||
tabContent.querySelector("#upcomingRecordings .recordingItems").addEventListener("timercancelled", function () {
|
||||
tabContent.querySelector('#upcomingRecordings .recordingItems').addEventListener('timercancelled', function () {
|
||||
self.preRender();
|
||||
self.renderTab();
|
||||
});
|
||||
@@ -104,9 +104,9 @@ define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "sc
|
||||
activeRecordingsPromise = ApiClient.getLiveTvRecordings({
|
||||
UserId: Dashboard.getCurrentUserId(),
|
||||
IsInProgress: true,
|
||||
Fields: "CanDelete,PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'CanDelete,PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
EnableTotalRecordCount: false,
|
||||
EnableImageTypes: "Primary,Thumb,Backdrop"
|
||||
EnableImageTypes: 'Primary,Thumb,Backdrop'
|
||||
});
|
||||
upcomingRecordingsPromise = ApiClient.getLiveTvTimers({
|
||||
IsActive: false,
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
define(["datetime", "cardBuilder", "imageLoader", "apphost", "loading", "paper-icon-button-light", "emby-button"], function (datetime, cardBuilder, imageLoader, appHost, loading) {
|
||||
"use strict";
|
||||
define(['datetime', 'cardBuilder', 'imageLoader', 'apphost', 'loading', 'paper-icon-button-light', 'emby-button'], function (datetime, cardBuilder, imageLoader, appHost, loading) {
|
||||
'use strict';
|
||||
|
||||
function renderTimers(context, timers) {
|
||||
var html = "";
|
||||
appHost.supports("imageanalysis");
|
||||
var html = '';
|
||||
appHost.supports('imageanalysis');
|
||||
html += cardBuilder.getCardsHtml({
|
||||
items: timers,
|
||||
shape: "auto",
|
||||
defaultShape: "portrait",
|
||||
shape: 'auto',
|
||||
defaultShape: 'portrait',
|
||||
showTitle: true,
|
||||
cardLayout: false,
|
||||
preferThumb: "auto",
|
||||
preferThumb: 'auto',
|
||||
coverImage: true,
|
||||
overlayText: false,
|
||||
showSeriesTimerTime: true,
|
||||
@@ -19,7 +19,7 @@ define(["datetime", "cardBuilder", "imageLoader", "apphost", "loading", "paper-i
|
||||
overlayMoreButton: true,
|
||||
lines: 3
|
||||
});
|
||||
var elem = context.querySelector("#items");
|
||||
var elem = context.querySelector('#items');
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
loading.hide();
|
||||
@@ -33,8 +33,8 @@ define(["datetime", "cardBuilder", "imageLoader", "apphost", "loading", "paper-i
|
||||
}
|
||||
|
||||
var query = {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending"
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending'
|
||||
};
|
||||
return function (view, params, tabContent) {
|
||||
var timersPromise;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "userSettings", "inputManager", "loading", "globalize", "libraryBrowser", "mainTabsManager", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button"], function (layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'userSettings', 'inputManager', 'loading', 'globalize', 'libraryBrowser', 'mainTabsManager', 'cardBuilder', 'apphost', 'imageLoader', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (layoutManager, userSettings, inputManager, loading, globalize, libraryBrowser, mainTabsManager, cardBuilder, appHost, imageLoader) {
|
||||
'use strict';
|
||||
|
||||
function enableScrollX() {
|
||||
return !layoutManager.desktop;
|
||||
@@ -7,16 +7,16 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
|
||||
function getBackdropShape() {
|
||||
if (enableScrollX()) {
|
||||
return "overflowBackdrop";
|
||||
return 'overflowBackdrop';
|
||||
}
|
||||
return "backdrop";
|
||||
return 'backdrop';
|
||||
}
|
||||
|
||||
function getPortraitShape() {
|
||||
if (enableScrollX()) {
|
||||
return "overflowPortrait";
|
||||
return 'overflowPortrait';
|
||||
}
|
||||
return "portrait";
|
||||
return 'portrait';
|
||||
}
|
||||
|
||||
function getLimit() {
|
||||
@@ -40,17 +40,17 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
IsAiring: true,
|
||||
limit: limit,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Thumb,Backdrop",
|
||||
EnableImageTypes: 'Primary,Thumb,Backdrop',
|
||||
EnableTotalRecordCount: false,
|
||||
Fields: "ChannelInfo,PrimaryImageAspectRatio"
|
||||
Fields: 'ChannelInfo,PrimaryImageAspectRatio'
|
||||
}).then(function (result) {
|
||||
renderItems(page, result.Items, "activeProgramItems", "play", {
|
||||
renderItems(page, result.Items, 'activeProgramItems', 'play', {
|
||||
showAirDateTime: false,
|
||||
showAirEndTime: true
|
||||
});
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
@@ -69,10 +69,10 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
IsNews: false,
|
||||
IsSeries: true,
|
||||
EnableTotalRecordCount: false,
|
||||
Fields: "ChannelInfo,PrimaryImageAspectRatio",
|
||||
EnableImageTypes: "Primary,Thumb"
|
||||
Fields: 'ChannelInfo,PrimaryImageAspectRatio',
|
||||
EnableImageTypes: 'Primary,Thumb'
|
||||
}).then(function (result) {
|
||||
renderItems(page, result.Items, "upcomingEpisodeItems");
|
||||
renderItems(page, result.Items, 'upcomingEpisodeItems');
|
||||
});
|
||||
ApiClient.getLiveTvPrograms({
|
||||
userId: Dashboard.getCurrentUserId(),
|
||||
@@ -80,10 +80,10 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
limit: getLimit(),
|
||||
IsMovie: true,
|
||||
EnableTotalRecordCount: false,
|
||||
Fields: "ChannelInfo",
|
||||
EnableImageTypes: "Primary,Thumb"
|
||||
Fields: 'ChannelInfo',
|
||||
EnableImageTypes: 'Primary,Thumb'
|
||||
}).then(function (result) {
|
||||
renderItems(page, result.Items, "upcomingTvMovieItems", null, {
|
||||
renderItems(page, result.Items, 'upcomingTvMovieItems', null, {
|
||||
shape: getPortraitShape(),
|
||||
preferThumb: null,
|
||||
showParentTitle: false
|
||||
@@ -95,10 +95,10 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
limit: getLimit(),
|
||||
IsSports: true,
|
||||
EnableTotalRecordCount: false,
|
||||
Fields: "ChannelInfo,PrimaryImageAspectRatio",
|
||||
EnableImageTypes: "Primary,Thumb"
|
||||
Fields: 'ChannelInfo,PrimaryImageAspectRatio',
|
||||
EnableImageTypes: 'Primary,Thumb'
|
||||
}).then(function (result) {
|
||||
renderItems(page, result.Items, "upcomingSportsItems");
|
||||
renderItems(page, result.Items, 'upcomingSportsItems');
|
||||
});
|
||||
ApiClient.getLiveTvPrograms({
|
||||
userId: Dashboard.getCurrentUserId(),
|
||||
@@ -106,10 +106,10 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
limit: getLimit(),
|
||||
IsKids: true,
|
||||
EnableTotalRecordCount: false,
|
||||
Fields: "ChannelInfo,PrimaryImageAspectRatio",
|
||||
EnableImageTypes: "Primary,Thumb"
|
||||
Fields: 'ChannelInfo,PrimaryImageAspectRatio',
|
||||
EnableImageTypes: 'Primary,Thumb'
|
||||
}).then(function (result) {
|
||||
renderItems(page, result.Items, "upcomingKidsItems");
|
||||
renderItems(page, result.Items, 'upcomingKidsItems');
|
||||
});
|
||||
ApiClient.getLiveTvPrograms({
|
||||
userId: Dashboard.getCurrentUserId(),
|
||||
@@ -117,10 +117,10 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
limit: getLimit(),
|
||||
IsNews: true,
|
||||
EnableTotalRecordCount: false,
|
||||
Fields: "ChannelInfo,PrimaryImageAspectRatio",
|
||||
EnableImageTypes: "Primary,Thumb"
|
||||
Fields: 'ChannelInfo,PrimaryImageAspectRatio',
|
||||
EnableImageTypes: 'Primary,Thumb'
|
||||
}).then(function (result) {
|
||||
renderItems(page, result.Items, "upcomingNewsItems", null, {
|
||||
renderItems(page, result.Items, 'upcomingNewsItems', null, {
|
||||
showParentTitleOrTitle: true,
|
||||
showTitle: false,
|
||||
showParentTitle: false
|
||||
@@ -132,9 +132,9 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
function renderItems(page, items, sectionClass, overlayButton, cardOptions) {
|
||||
var html = cardBuilder.getCardsHtml(Object.assign({
|
||||
items: items,
|
||||
preferThumb: "auto",
|
||||
preferThumb: 'auto',
|
||||
inheritThumb: false,
|
||||
shape: enableScrollX() ? "autooverflow" : "auto",
|
||||
shape: enableScrollX() ? 'autooverflow' : 'auto',
|
||||
defaultShape: getBackdropShape(),
|
||||
showParentTitle: true,
|
||||
showTitle: true,
|
||||
@@ -142,57 +142,57 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
coverImage: true,
|
||||
overlayText: false,
|
||||
lazy: true,
|
||||
overlayPlayButton: "play" === overlayButton,
|
||||
overlayMoreButton: "more" === overlayButton,
|
||||
overlayInfoButton: "info" === overlayButton,
|
||||
overlayPlayButton: 'play' === overlayButton,
|
||||
overlayMoreButton: 'more' === overlayButton,
|
||||
overlayInfoButton: 'info' === overlayButton,
|
||||
allowBottomPadding: !enableScrollX(),
|
||||
showAirTime: true,
|
||||
showAirDateTime: true
|
||||
}, cardOptions || {}));
|
||||
var elem = page.querySelector("." + sectionClass);
|
||||
var elem = page.querySelector('.' + sectionClass);
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
name: globalize.translate("Programs")
|
||||
name: globalize.translate('Programs')
|
||||
}, {
|
||||
name: globalize.translate("TabGuide")
|
||||
name: globalize.translate('TabGuide')
|
||||
}, {
|
||||
name: globalize.translate("TabChannels")
|
||||
name: globalize.translate('TabChannels')
|
||||
}, {
|
||||
name: globalize.translate("TabRecordings")
|
||||
name: globalize.translate('TabRecordings')
|
||||
}, {
|
||||
name: globalize.translate("HeaderSchedule")
|
||||
name: globalize.translate('HeaderSchedule')
|
||||
}, {
|
||||
name: globalize.translate("TabSeries")
|
||||
name: globalize.translate('TabSeries')
|
||||
}, {
|
||||
name: globalize.translate("ButtonSearch"),
|
||||
cssClass: "searchTabButton"
|
||||
name: globalize.translate('ButtonSearch'),
|
||||
cssClass: 'searchTabButton'
|
||||
}];
|
||||
}
|
||||
|
||||
function setScrollClasses(elem, scrollX) {
|
||||
if (scrollX) {
|
||||
elem.classList.add("hiddenScrollX");
|
||||
elem.classList.add('hiddenScrollX');
|
||||
|
||||
if (layoutManager.tv) {
|
||||
elem.classList.add("smoothScrollX");
|
||||
elem.classList.add('smoothScrollX');
|
||||
}
|
||||
|
||||
elem.classList.add("scrollX");
|
||||
elem.classList.remove("vertical-wrap");
|
||||
elem.classList.add('scrollX');
|
||||
elem.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
elem.classList.remove("hiddenScrollX");
|
||||
elem.classList.remove("smoothScrollX");
|
||||
elem.classList.remove("scrollX");
|
||||
elem.classList.add("vertical-wrap");
|
||||
elem.classList.remove('hiddenScrollX');
|
||||
elem.classList.remove('smoothScrollX');
|
||||
elem.classList.remove('scrollX');
|
||||
elem.classList.add('vertical-wrap');
|
||||
}
|
||||
}
|
||||
|
||||
function getDefaultTabIndex(folderId) {
|
||||
if (userSettings.get("landing-" + folderId) === "guide") {
|
||||
if (userSettings.get('landing-' + folderId) === 'guide') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -219,7 +219,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
}
|
||||
|
||||
function getTabContainers() {
|
||||
return view.querySelectorAll(".pageTabContent");
|
||||
return view.querySelectorAll('.pageTabContent');
|
||||
}
|
||||
|
||||
function initTabs() {
|
||||
@@ -235,27 +235,27 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
break;
|
||||
|
||||
case 1:
|
||||
depends.push("controllers/livetv/livetvguide");
|
||||
depends.push('controllers/livetv/livetvguide');
|
||||
break;
|
||||
|
||||
case 2:
|
||||
depends.push("controllers/livetv/livetvchannels");
|
||||
depends.push('controllers/livetv/livetvchannels');
|
||||
break;
|
||||
|
||||
case 3:
|
||||
depends.push("controllers/livetv/livetvrecordings");
|
||||
depends.push('controllers/livetv/livetvrecordings');
|
||||
break;
|
||||
|
||||
case 4:
|
||||
depends.push("controllers/livetv/livetvschedule");
|
||||
depends.push('controllers/livetv/livetvschedule');
|
||||
break;
|
||||
|
||||
case 5:
|
||||
depends.push("controllers/livetv/livetvseriestimers");
|
||||
depends.push('controllers/livetv/livetvseriestimers');
|
||||
break;
|
||||
|
||||
case 6:
|
||||
depends.push("scripts/searchtab");
|
||||
depends.push('scripts/searchtab');
|
||||
}
|
||||
|
||||
require(depends, function (controllerFactory) {
|
||||
@@ -275,7 +275,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
controller = self;
|
||||
} else if (6 === index) {
|
||||
controller = new controllerFactory(view, tabContent, {
|
||||
collectionType: "livetv"
|
||||
collectionType: 'livetv'
|
||||
});
|
||||
} else {
|
||||
controller = new controllerFactory(view, params, tabContent);
|
||||
@@ -320,28 +320,28 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
}
|
||||
|
||||
function onInputCommand(evt) {
|
||||
if (evt.detail.command === "search") {
|
||||
if (evt.detail.command === 'search') {
|
||||
evt.preventDefault();
|
||||
Dashboard.navigate("search.html?collectionType=livetv");
|
||||
Dashboard.navigate('search.html?collectionType=livetv');
|
||||
}
|
||||
}
|
||||
|
||||
var isViewRestored;
|
||||
var self = this;
|
||||
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex("livetv"));
|
||||
var currentTabIndex = parseInt(params.tab || getDefaultTabIndex('livetv'));
|
||||
var initialTabIndex = currentTabIndex;
|
||||
var lastFullRender = 0;
|
||||
[].forEach.call(view.querySelectorAll(".sectionTitleTextButton-programs"), function (link) {
|
||||
[].forEach.call(view.querySelectorAll('.sectionTitleTextButton-programs'), function (link) {
|
||||
var href = link.href;
|
||||
|
||||
if (href) {
|
||||
link.href = href + "&serverId=" + ApiClient.serverId();
|
||||
link.href = href + '&serverId=' + ApiClient.serverId();
|
||||
}
|
||||
});
|
||||
|
||||
self.initTab = function () {
|
||||
var tabContent = view.querySelector(".pageTabContent[data-index='0']");
|
||||
var containers = tabContent.querySelectorAll(".itemsContainer");
|
||||
var containers = tabContent.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (var i = 0, length = containers.length; i < length; i++) {
|
||||
setScrollClasses(containers[i], enableScrollX());
|
||||
@@ -362,11 +362,11 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
var currentTabController;
|
||||
var tabControllers = [];
|
||||
var renderedTabs = [];
|
||||
view.addEventListener("viewbeforeshow", function (evt) {
|
||||
view.addEventListener('viewbeforeshow', function (evt) {
|
||||
isViewRestored = evt.detail.isRestored;
|
||||
initTabs();
|
||||
});
|
||||
view.addEventListener("viewshow", function (evt) {
|
||||
view.addEventListener('viewshow', function (evt) {
|
||||
isViewRestored = evt.detail.isRestored;
|
||||
|
||||
if (!isViewRestored) {
|
||||
@@ -375,14 +375,14 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
||||
|
||||
inputManager.on(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function (e) {
|
||||
view.addEventListener('viewbeforehide', function (e) {
|
||||
if (currentTabController && currentTabController.onHide) {
|
||||
currentTabController.onHide();
|
||||
}
|
||||
|
||||
inputManager.off(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewdestroy", function (evt) {
|
||||
view.addEventListener('viewdestroy', function (evt) {
|
||||
tabControllers.forEach(function (tabController) {
|
||||
if (tabController.destroy) {
|
||||
tabController.destroy();
|
||||
|
||||
@@ -1,30 +1,30 @@
|
||||
define(["events", "loading", "globalize"], function (events, loading, globalize) {
|
||||
"use strict";
|
||||
define(['events', 'loading', 'globalize'], function (events, loading, globalize) {
|
||||
'use strict';
|
||||
|
||||
function onListingsSubmitted() {
|
||||
Dashboard.navigate("livetvstatus.html");
|
||||
Dashboard.navigate('livetvstatus.html');
|
||||
}
|
||||
|
||||
function init(page, type, providerId) {
|
||||
var url = "components/tvproviders/" + type + ".js";
|
||||
var url = 'components/tvproviders/' + type + '.js';
|
||||
|
||||
require([url], function (factory) {
|
||||
var instance = new factory(page, providerId, {});
|
||||
events.on(instance, "submitted", onListingsSubmitted);
|
||||
events.on(instance, 'submitted', onListingsSubmitted);
|
||||
instance.init();
|
||||
});
|
||||
}
|
||||
|
||||
function loadTemplate(page, type, providerId) {
|
||||
require(["text!./components/tvproviders/" + type + ".template.html"], function (html) {
|
||||
page.querySelector(".providerTemplate").innerHTML = globalize.translateDocument(html);
|
||||
require(['text!./components/tvproviders/' + type + '.template.html'], function (html) {
|
||||
page.querySelector('.providerTemplate').innerHTML = globalize.translateDocument(html);
|
||||
init(page, type, providerId);
|
||||
});
|
||||
}
|
||||
|
||||
pageIdOn("pageshow", "liveTvGuideProviderPage", function () {
|
||||
pageIdOn('pageshow', 'liveTvGuideProviderPage', function () {
|
||||
loading.show();
|
||||
var providerId = getParameterByName("id");
|
||||
loadTemplate(this, getParameterByName("type"), providerId);
|
||||
var providerId = getParameterByName('id');
|
||||
loadTemplate(this, getParameterByName('type'), providerId);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,38 +1,38 @@
|
||||
define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function ($, loading, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'globalize', 'fnchecked', 'emby-button'], function ($, loading, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config) {
|
||||
$(".liveTvSettingsForm", page).show();
|
||||
$(".noLiveTvServices", page).hide();
|
||||
$("#selectGuideDays", page).val(config.GuideDays || "");
|
||||
$("#txtPrePaddingMinutes", page).val(config.PrePaddingSeconds / 60);
|
||||
$("#txtPostPaddingMinutes", page).val(config.PostPaddingSeconds / 60);
|
||||
page.querySelector("#txtRecordingPath").value = config.RecordingPath || "";
|
||||
page.querySelector("#txtMovieRecordingPath").value = config.MovieRecordingPath || "";
|
||||
page.querySelector("#txtSeriesRecordingPath").value = config.SeriesRecordingPath || "";
|
||||
page.querySelector("#txtPostProcessor").value = config.RecordingPostProcessor || "";
|
||||
page.querySelector("#txtPostProcessorArguments").value = config.RecordingPostProcessorArguments || "";
|
||||
$('.liveTvSettingsForm', page).show();
|
||||
$('.noLiveTvServices', page).hide();
|
||||
$('#selectGuideDays', page).val(config.GuideDays || '');
|
||||
$('#txtPrePaddingMinutes', page).val(config.PrePaddingSeconds / 60);
|
||||
$('#txtPostPaddingMinutes', page).val(config.PostPaddingSeconds / 60);
|
||||
page.querySelector('#txtRecordingPath').value = config.RecordingPath || '';
|
||||
page.querySelector('#txtMovieRecordingPath').value = config.MovieRecordingPath || '';
|
||||
page.querySelector('#txtSeriesRecordingPath').value = config.SeriesRecordingPath || '';
|
||||
page.querySelector('#txtPostProcessor').value = config.RecordingPostProcessor || '';
|
||||
page.querySelector('#txtPostProcessorArguments').value = config.RecordingPostProcessorArguments || '';
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
loading.show();
|
||||
var form = this;
|
||||
ApiClient.getNamedConfiguration("livetv").then(function (config) {
|
||||
config.GuideDays = $("#selectGuideDays", form).val() || null;
|
||||
var recordingPath = form.querySelector("#txtRecordingPath").value || null;
|
||||
var movieRecordingPath = form.querySelector("#txtMovieRecordingPath").value || null;
|
||||
var seriesRecordingPath = form.querySelector("#txtSeriesRecordingPath").value || null;
|
||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||
config.GuideDays = $('#selectGuideDays', form).val() || null;
|
||||
var recordingPath = form.querySelector('#txtRecordingPath').value || null;
|
||||
var movieRecordingPath = form.querySelector('#txtMovieRecordingPath').value || null;
|
||||
var seriesRecordingPath = form.querySelector('#txtSeriesRecordingPath').value || null;
|
||||
var recordingPathChanged = recordingPath != config.RecordingPath || movieRecordingPath != config.MovieRecordingPath || seriesRecordingPath != config.SeriesRecordingPath;
|
||||
config.RecordingPath = recordingPath;
|
||||
config.MovieRecordingPath = movieRecordingPath;
|
||||
config.SeriesRecordingPath = seriesRecordingPath;
|
||||
config.RecordingEncodingFormat = "mkv";
|
||||
config.PrePaddingSeconds = 60 * $("#txtPrePaddingMinutes", form).val();
|
||||
config.PostPaddingSeconds = 60 * $("#txtPostPaddingMinutes", form).val();
|
||||
config.RecordingPostProcessor = $("#txtPostProcessor", form).val();
|
||||
config.RecordingPostProcessorArguments = $("#txtPostProcessorArguments", form).val();
|
||||
ApiClient.updateNamedConfiguration("livetv", config).then(function () {
|
||||
config.RecordingEncodingFormat = 'mkv';
|
||||
config.PrePaddingSeconds = 60 * $('#txtPrePaddingMinutes', form).val();
|
||||
config.PostPaddingSeconds = 60 * $('#txtPostPaddingMinutes', form).val();
|
||||
config.RecordingPostProcessor = $('#txtPostProcessor', form).val();
|
||||
config.RecordingPostProcessorArguments = $('#txtPostProcessorArguments', form).val();
|
||||
ApiClient.updateNamedConfiguration('livetv', config).then(function () {
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
showSaveMessage(recordingPathChanged);
|
||||
});
|
||||
@@ -41,29 +41,29 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function
|
||||
}
|
||||
|
||||
function showSaveMessage(recordingPathChanged) {
|
||||
var msg = "";
|
||||
var msg = '';
|
||||
|
||||
if (recordingPathChanged) {
|
||||
msg += globalize.translate("RecordingPathChangeMessage");
|
||||
msg += globalize.translate('RecordingPathChangeMessage');
|
||||
}
|
||||
|
||||
if (msg) {
|
||||
require(["alert"], function (alert) {
|
||||
require(['alert'], function (alert) {
|
||||
alert(msg);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#liveTvSettingsPage", function () {
|
||||
$(document).on('pageinit', '#liveTvSettingsPage', function () {
|
||||
var page = this;
|
||||
$(".liveTvSettingsForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
$("#btnSelectRecordingPath", page).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
$('#btnSelectRecordingPath', page).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
$("#txtRecordingPath", page).val(path);
|
||||
$('#txtRecordingPath', page).val(path);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
@@ -72,13 +72,13 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function
|
||||
});
|
||||
});
|
||||
});
|
||||
$("#btnSelectMovieRecordingPath", page).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
$("#txtMovieRecordingPath", page).val(path);
|
||||
$('#txtMovieRecordingPath', page).val(path);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
@@ -87,13 +87,13 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function
|
||||
});
|
||||
});
|
||||
});
|
||||
$("#btnSelectSeriesRecordingPath", page).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
$("#txtSeriesRecordingPath", page).val(path);
|
||||
$('#txtSeriesRecordingPath', page).val(path);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
@@ -102,14 +102,14 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function
|
||||
});
|
||||
});
|
||||
});
|
||||
$("#btnSelectPostProcessorPath", page).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
$('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
includeFiles: true,
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
$("#txtPostProcessor", page).val(path);
|
||||
$('#txtPostProcessor', page).val(path);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
@@ -117,10 +117,10 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-button"], function
|
||||
});
|
||||
});
|
||||
});
|
||||
}).on("pageshow", "#liveTvSettingsPage", function () {
|
||||
}).on('pageshow', '#liveTvSettingsPage', function () {
|
||||
loading.show();
|
||||
var page = this;
|
||||
ApiClient.getNamedConfiguration("livetv").then(function (config) {
|
||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||
loadPage(page, config);
|
||||
});
|
||||
});
|
||||
|
||||
+109
-109
@@ -1,23 +1,23 @@
|
||||
define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layoutManager", "loading", "browser", "listViewStyle", "flexStyles", "emby-itemscontainer", "cardStyle", "material-icons", "emby-button"], function ($, globalize, taskButton, dom, libraryMenu, layoutManager, loading, browser) {
|
||||
"use strict";
|
||||
define(['jQuery', 'globalize', 'scripts/taskbutton', 'dom', 'libraryMenu', 'layoutManager', 'loading', 'browser', 'listViewStyle', 'flexStyles', 'emby-itemscontainer', 'cardStyle', 'material-icons', 'emby-button'], function ($, globalize, taskButton, dom, libraryMenu, layoutManager, loading, browser) {
|
||||
'use strict';
|
||||
|
||||
var enableFocusTransform = !browser.slow && !browser.edge;
|
||||
|
||||
function getDeviceHtml(device) {
|
||||
var padderClass;
|
||||
var html = "";
|
||||
var cssClass = "card scalableCard";
|
||||
var cardBoxCssClass = "cardBox visualCardBox";
|
||||
cssClass += " backdropCard backdropCard-scalable";
|
||||
padderClass = "cardPadder-backdrop";
|
||||
var html = '';
|
||||
var cssClass = 'card scalableCard';
|
||||
var cardBoxCssClass = 'cardBox visualCardBox';
|
||||
cssClass += ' backdropCard backdropCard-scalable';
|
||||
padderClass = 'cardPadder-backdrop';
|
||||
|
||||
// TODO move card creation code to Card component
|
||||
|
||||
if (layoutManager.tv) {
|
||||
cssClass += " show-focus";
|
||||
cssClass += ' show-focus';
|
||||
|
||||
if (enableFocusTransform) {
|
||||
cssClass += " show-animation";
|
||||
cssClass += ' show-animation';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,33 +27,33 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
html += '<div class="' + padderClass + '"></div>';
|
||||
html += '<div class="cardContent searchImage">';
|
||||
html += '<div class="cardImageContainer coveredImage"><span class="cardImageIcon material-icons dvr"></span></div>';
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
||||
html += '<button is="paper-icon-button-light" class="itemAction btnCardOptions autoSize" data-action="menu"><span class="material-icons more_horiz"></span></button>';
|
||||
html += '<div class="cardText">' + (device.FriendlyName || getTunerName(device.Type)) + "</div>";
|
||||
html += '<div class="cardText">' + (device.FriendlyName || getTunerName(device.Type)) + '</div>';
|
||||
html += '<div class="cardText cardText-secondary">';
|
||||
html += device.Url || " ";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
return html += "</div>";
|
||||
html += device.Url || ' ';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html += '</div>';
|
||||
}
|
||||
|
||||
function renderDevices(page, devices) {
|
||||
var html = devices.map(getDeviceHtml).join("");
|
||||
page.querySelector(".devicesList").innerHTML = html;
|
||||
var html = devices.map(getDeviceHtml).join('');
|
||||
page.querySelector('.devicesList').innerHTML = html;
|
||||
}
|
||||
|
||||
function deleteDevice(page, id) {
|
||||
var message = globalize.translate("MessageConfirmDeleteTunerDevice");
|
||||
var message = globalize.translate('MessageConfirmDeleteTunerDevice');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(message, globalize.translate("HeaderDeleteDevice")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(message, globalize.translate('HeaderDeleteDevice')).then(function () {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: ApiClient.getUrl("LiveTv/TunerHosts", {
|
||||
type: 'DELETE',
|
||||
url: ApiClient.getUrl('LiveTv/TunerHosts', {
|
||||
Id: id
|
||||
})
|
||||
}).then(function () {
|
||||
@@ -65,7 +65,7 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
|
||||
function reload(page) {
|
||||
loading.show();
|
||||
ApiClient.getNamedConfiguration("livetv").then(function (config) {
|
||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||
renderDevices(page, config.TunerHosts);
|
||||
renderProviders(page, config.ListingProviders);
|
||||
});
|
||||
@@ -73,27 +73,27 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
}
|
||||
|
||||
function submitAddDeviceForm(page) {
|
||||
page.querySelector(".dlgAddDevice").close();
|
||||
page.querySelector('.dlgAddDevice').close();
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "POST",
|
||||
url: ApiClient.getUrl("LiveTv/TunerHosts"),
|
||||
type: 'POST',
|
||||
url: ApiClient.getUrl('LiveTv/TunerHosts'),
|
||||
data: JSON.stringify({
|
||||
Type: $("#selectTunerDeviceType", page).val(),
|
||||
Url: $("#txtDevicePath", page).val()
|
||||
Type: $('#selectTunerDeviceType', page).val(),
|
||||
Url: $('#txtDevicePath', page).val()
|
||||
}),
|
||||
contentType: "application/json"
|
||||
contentType: 'application/json'
|
||||
}).then(function () {
|
||||
reload(page);
|
||||
}, function () {
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("ErrorAddingTunerDevice")
|
||||
message: globalize.translate('ErrorAddingTunerDevice')
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function renderProviders(page, providers) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
if (providers.length) {
|
||||
html += '<div class="paperList">';
|
||||
@@ -103,25 +103,25 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
html += '<div class="listItem">';
|
||||
html += '<span class="listItemIcon material-icons dvr"></span>';
|
||||
html += '<div class="listItemBody two-line">';
|
||||
html += '<a is="emby-linkbutton" style="display:block;padding:0;margin:0;text-align:left;" class="clearLink" href="' + getProviderConfigurationUrl(provider.Type) + "&id=" + provider.Id + '">';
|
||||
html += '<a is="emby-linkbutton" style="display:block;padding:0;margin:0;text-align:left;" class="clearLink" href="' + getProviderConfigurationUrl(provider.Type) + '&id=' + provider.Id + '">';
|
||||
html += '<h3 class="listItemBodyText">';
|
||||
html += getProviderName(provider.Type);
|
||||
html += "</h3>";
|
||||
html += '</h3>';
|
||||
html += '<div class="listItemBodyText secondary">';
|
||||
html += provider.Path || provider.ListingsId || "";
|
||||
html += "</div>";
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += provider.Path || provider.ListingsId || '';
|
||||
html += '</div>';
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnOptions" data-id="' + provider.Id + '"><span class="material-icons listItemAside more_horiz"></span></button>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
var elem = $(".providerList", page).html(html);
|
||||
$(".btnOptions", elem).on("click", function () {
|
||||
var id = this.getAttribute("data-id");
|
||||
var elem = $('.providerList', page).html(html);
|
||||
$('.btnOptions', elem).on('click', function () {
|
||||
var id = this.getAttribute('data-id');
|
||||
showProviderOptions(page, id, this);
|
||||
});
|
||||
}
|
||||
@@ -129,25 +129,25 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
function showProviderOptions(page, providerId, button) {
|
||||
var items = [];
|
||||
items.push({
|
||||
name: globalize.translate("ButtonDelete"),
|
||||
id: "delete"
|
||||
name: globalize.translate('ButtonDelete'),
|
||||
id: 'delete'
|
||||
});
|
||||
items.push({
|
||||
name: globalize.translate("MapChannels"),
|
||||
id: "map"
|
||||
name: globalize.translate('MapChannels'),
|
||||
id: 'map'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: items,
|
||||
positionTo: button
|
||||
}).then(function (id) {
|
||||
switch (id) {
|
||||
case "delete":
|
||||
case 'delete':
|
||||
deleteProvider(page, providerId);
|
||||
break;
|
||||
|
||||
case "map":
|
||||
case 'map':
|
||||
mapChannels(page, providerId);
|
||||
}
|
||||
});
|
||||
@@ -155,7 +155,7 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
}
|
||||
|
||||
function mapChannels(page, providerId) {
|
||||
require(["components/channelmapper/channelmapper"], function (channelmapper) {
|
||||
require(['components/channelmapper/channelmapper'], function (channelmapper) {
|
||||
new channelmapper({
|
||||
serverId: ApiClient.serverInfo().Id,
|
||||
providerId: providerId
|
||||
@@ -164,14 +164,14 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
}
|
||||
|
||||
function deleteProvider(page, id) {
|
||||
var message = globalize.translate("MessageConfirmDeleteGuideProvider");
|
||||
var message = globalize.translate('MessageConfirmDeleteGuideProvider');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(message, globalize.translate("HeaderDeleteProvider")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(message, globalize.translate('HeaderDeleteProvider')).then(function () {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: ApiClient.getUrl("LiveTv/ListingProviders", {
|
||||
type: 'DELETE',
|
||||
url: ApiClient.getUrl('LiveTv/ListingProviders', {
|
||||
Id: id
|
||||
})
|
||||
}).then(function () {
|
||||
@@ -185,51 +185,51 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
|
||||
function getTunerName(providerId) {
|
||||
switch (providerId = providerId.toLowerCase()) {
|
||||
case "m3u":
|
||||
return "M3U";
|
||||
case "hdhomerun":
|
||||
return "HDHomeRun";
|
||||
case "hauppauge":
|
||||
return "Hauppauge";
|
||||
case "satip":
|
||||
return "DVB";
|
||||
case 'm3u':
|
||||
return 'M3U';
|
||||
case 'hdhomerun':
|
||||
return 'HDHomeRun';
|
||||
case 'hauppauge':
|
||||
return 'Hauppauge';
|
||||
case 'satip':
|
||||
return 'DVB';
|
||||
default:
|
||||
return "Unknown";
|
||||
return 'Unknown';
|
||||
}
|
||||
}
|
||||
|
||||
function getProviderName(providerId) {
|
||||
switch (providerId = providerId.toLowerCase()) {
|
||||
case "schedulesdirect":
|
||||
return "Schedules Direct";
|
||||
case "xmltv":
|
||||
return "XMLTV";
|
||||
case 'schedulesdirect':
|
||||
return 'Schedules Direct';
|
||||
case 'xmltv':
|
||||
return 'XMLTV';
|
||||
default:
|
||||
return "Unknown";
|
||||
return 'Unknown';
|
||||
}
|
||||
}
|
||||
|
||||
function getProviderConfigurationUrl(providerId) {
|
||||
switch (providerId = providerId.toLowerCase()) {
|
||||
case "xmltv":
|
||||
return "livetvguideprovider.html?type=xmltv";
|
||||
case "schedulesdirect":
|
||||
return "livetvguideprovider.html?type=schedulesdirect";
|
||||
case 'xmltv':
|
||||
return 'livetvguideprovider.html?type=xmltv';
|
||||
case 'schedulesdirect':
|
||||
return 'livetvguideprovider.html?type=schedulesdirect';
|
||||
}
|
||||
}
|
||||
|
||||
function addProvider(button) {
|
||||
var menuItems = [];
|
||||
menuItems.push({
|
||||
name: "Schedules Direct",
|
||||
id: "SchedulesDirect"
|
||||
name: 'Schedules Direct',
|
||||
id: 'SchedulesDirect'
|
||||
});
|
||||
menuItems.push({
|
||||
name: "XMLTV",
|
||||
id: "xmltv"
|
||||
name: 'XMLTV',
|
||||
id: 'xmltv'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: button,
|
||||
@@ -241,81 +241,81 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
|
||||
}
|
||||
|
||||
function addDevice(button) {
|
||||
Dashboard.navigate("livetvtuner.html");
|
||||
Dashboard.navigate('livetvtuner.html');
|
||||
}
|
||||
|
||||
function showDeviceMenu(button, tunerDeviceId) {
|
||||
var items = [];
|
||||
items.push({
|
||||
name: globalize.translate("ButtonDelete"),
|
||||
id: "delete"
|
||||
name: globalize.translate('ButtonDelete'),
|
||||
id: 'delete'
|
||||
});
|
||||
items.push({
|
||||
name: globalize.translate("ButtonEdit"),
|
||||
id: "edit"
|
||||
name: globalize.translate('ButtonEdit'),
|
||||
id: 'edit'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: items,
|
||||
positionTo: button
|
||||
}).then(function (id) {
|
||||
switch (id) {
|
||||
case "delete":
|
||||
deleteDevice(dom.parentWithClass(button, "page"), tunerDeviceId);
|
||||
case 'delete':
|
||||
deleteDevice(dom.parentWithClass(button, 'page'), tunerDeviceId);
|
||||
break;
|
||||
|
||||
case "edit":
|
||||
Dashboard.navigate("livetvtuner.html?id=" + tunerDeviceId);
|
||||
case 'edit':
|
||||
Dashboard.navigate('livetvtuner.html?id=' + tunerDeviceId);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function onDevicesListClick(e) {
|
||||
var card = dom.parentWithClass(e.target, "card");
|
||||
var card = dom.parentWithClass(e.target, 'card');
|
||||
|
||||
if (card) {
|
||||
var id = card.getAttribute("data-id");
|
||||
var btnCardOptions = dom.parentWithClass(e.target, "btnCardOptions");
|
||||
var id = card.getAttribute('data-id');
|
||||
var btnCardOptions = dom.parentWithClass(e.target, 'btnCardOptions');
|
||||
|
||||
if (btnCardOptions) {
|
||||
showDeviceMenu(btnCardOptions, id);
|
||||
} else {
|
||||
Dashboard.navigate("livetvtuner.html?id=" + id);
|
||||
Dashboard.navigate('livetvtuner.html?id=' + id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#liveTvStatusPage", function () {
|
||||
$(document).on('pageinit', '#liveTvStatusPage', function () {
|
||||
var page = this;
|
||||
$(".btnAddDevice", page).on("click", function () {
|
||||
$('.btnAddDevice', page).on('click', function () {
|
||||
addDevice(this);
|
||||
});
|
||||
$(".formAddDevice", page).on("submit", function () {
|
||||
$('.formAddDevice', page).on('submit', function () {
|
||||
submitAddDeviceForm(page);
|
||||
return false;
|
||||
});
|
||||
$(".btnAddProvider", page).on("click", function () {
|
||||
$('.btnAddProvider', page).on('click', function () {
|
||||
addProvider(this);
|
||||
});
|
||||
page.querySelector(".devicesList").addEventListener("click", onDevicesListClick);
|
||||
}).on("pageshow", "#liveTvStatusPage", function () {
|
||||
page.querySelector('.devicesList').addEventListener('click', onDevicesListClick);
|
||||
}).on('pageshow', '#liveTvStatusPage', function () {
|
||||
var page = this;
|
||||
reload(page);
|
||||
taskButton({
|
||||
mode: "on",
|
||||
progressElem: page.querySelector(".refreshGuideProgress"),
|
||||
taskKey: "RefreshGuide",
|
||||
button: page.querySelector(".btnRefresh")
|
||||
mode: 'on',
|
||||
progressElem: page.querySelector('.refreshGuideProgress'),
|
||||
taskKey: 'RefreshGuide',
|
||||
button: page.querySelector('.btnRefresh')
|
||||
});
|
||||
}).on("pagehide", "#liveTvStatusPage", function () {
|
||||
}).on('pagehide', '#liveTvStatusPage', function () {
|
||||
var page = this;
|
||||
taskButton({
|
||||
mode: "off",
|
||||
progressElem: page.querySelector(".refreshGuideProgress"),
|
||||
taskKey: "RefreshGuide",
|
||||
button: page.querySelector(".btnRefresh")
|
||||
mode: 'off',
|
||||
progressElem: page.querySelector('.refreshGuideProgress'),
|
||||
taskKey: 'RefreshGuide',
|
||||
button: page.querySelector('.btnRefresh')
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button", "emby-checkbox", "emby-select"], function (globalize, loading, libraryMenu, dom) {
|
||||
"use strict";
|
||||
define(['globalize', 'loading', 'libraryMenu', 'dom', 'emby-input', 'emby-button', 'emby-checkbox', 'emby-select'], function (globalize, loading, libraryMenu, dom) {
|
||||
'use strict';
|
||||
|
||||
function isM3uVariant(type) {
|
||||
return ["nextpvr"].indexOf(type || "") !== -1;
|
||||
return ['nextpvr'].indexOf(type || '') !== -1;
|
||||
}
|
||||
|
||||
function fillTypes(view, currentId) {
|
||||
return ApiClient.getJSON(ApiClient.getUrl("LiveTv/TunerHosts/Types")).then(function (types) {
|
||||
var selectType = view.querySelector(".selectType");
|
||||
var html = "";
|
||||
return ApiClient.getJSON(ApiClient.getUrl('LiveTv/TunerHosts/Types')).then(function (types) {
|
||||
var selectType = view.querySelector('.selectType');
|
||||
var html = '';
|
||||
html += types.map(function (tuner) {
|
||||
return '<option value="' + tuner.Id + '">' + tuner.Name + "</option>";
|
||||
}).join("");
|
||||
return '<option value="' + tuner.Id + '">' + tuner.Name + '</option>';
|
||||
}).join('');
|
||||
html += '<option value="other">';
|
||||
html += globalize.translate("TabOther");
|
||||
html += "</option>";
|
||||
html += globalize.translate('TabOther');
|
||||
html += '</option>';
|
||||
selectType.innerHTML = html;
|
||||
selectType.disabled = null != currentId;
|
||||
selectType.value = "";
|
||||
selectType.value = '';
|
||||
onTypeChange.call(selectType);
|
||||
});
|
||||
}
|
||||
|
||||
function reload(view, providerId) {
|
||||
view.querySelector(".txtDevicePath").value = "";
|
||||
view.querySelector(".chkFavorite").checked = false;
|
||||
view.querySelector(".txtDevicePath").value = "";
|
||||
view.querySelector('.txtDevicePath').value = '';
|
||||
view.querySelector('.chkFavorite').checked = false;
|
||||
view.querySelector('.txtDevicePath').value = '';
|
||||
|
||||
if (providerId) {
|
||||
ApiClient.getNamedConfiguration("livetv").then(function (config) {
|
||||
ApiClient.getNamedConfiguration('livetv').then(function (config) {
|
||||
var info = config.TunerHosts.filter(function (i) {
|
||||
return i.Id === providerId;
|
||||
})[0];
|
||||
@@ -38,8 +38,8 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
|
||||
}
|
||||
|
||||
function fillTunerHostInfo(view, info) {
|
||||
var selectType = view.querySelector(".selectType");
|
||||
var type = info.Type || "";
|
||||
var selectType = view.querySelector('.selectType');
|
||||
var type = info.Type || '';
|
||||
|
||||
if (info.Source && isM3uVariant(info.Source)) {
|
||||
type = info.Source;
|
||||
@@ -47,36 +47,36 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
|
||||
|
||||
selectType.value = type;
|
||||
onTypeChange.call(selectType);
|
||||
view.querySelector(".txtDevicePath").value = info.Url || "";
|
||||
view.querySelector(".txtFriendlyName").value = info.FriendlyName || "";
|
||||
view.querySelector(".txtUserAgent").value = info.UserAgent || "";
|
||||
view.querySelector(".fldDeviceId").value = info.DeviceId || "";
|
||||
view.querySelector(".chkFavorite").checked = info.ImportFavoritesOnly;
|
||||
view.querySelector(".chkTranscode").checked = info.AllowHWTranscoding;
|
||||
view.querySelector(".chkStreamLoop").checked = info.EnableStreamLooping;
|
||||
view.querySelector(".txtTunerCount").value = info.TunerCount || "0";
|
||||
view.querySelector('.txtDevicePath').value = info.Url || '';
|
||||
view.querySelector('.txtFriendlyName').value = info.FriendlyName || '';
|
||||
view.querySelector('.txtUserAgent').value = info.UserAgent || '';
|
||||
view.querySelector('.fldDeviceId').value = info.DeviceId || '';
|
||||
view.querySelector('.chkFavorite').checked = info.ImportFavoritesOnly;
|
||||
view.querySelector('.chkTranscode').checked = info.AllowHWTranscoding;
|
||||
view.querySelector('.chkStreamLoop').checked = info.EnableStreamLooping;
|
||||
view.querySelector('.txtTunerCount').value = info.TunerCount || '0';
|
||||
}
|
||||
|
||||
function submitForm(page) {
|
||||
loading.show();
|
||||
var info = {
|
||||
Type: page.querySelector(".selectType").value,
|
||||
Url: page.querySelector(".txtDevicePath").value || null,
|
||||
UserAgent: page.querySelector(".txtUserAgent").value || null,
|
||||
FriendlyName: page.querySelector(".txtFriendlyName").value || null,
|
||||
DeviceId: page.querySelector(".fldDeviceId").value || null,
|
||||
TunerCount: page.querySelector(".txtTunerCount").value || 0,
|
||||
ImportFavoritesOnly: page.querySelector(".chkFavorite").checked,
|
||||
AllowHWTranscoding: page.querySelector(".chkTranscode").checked,
|
||||
EnableStreamLooping: page.querySelector(".chkStreamLoop").checked
|
||||
Type: page.querySelector('.selectType').value,
|
||||
Url: page.querySelector('.txtDevicePath').value || null,
|
||||
UserAgent: page.querySelector('.txtUserAgent').value || null,
|
||||
FriendlyName: page.querySelector('.txtFriendlyName').value || null,
|
||||
DeviceId: page.querySelector('.fldDeviceId').value || null,
|
||||
TunerCount: page.querySelector('.txtTunerCount').value || 0,
|
||||
ImportFavoritesOnly: page.querySelector('.chkFavorite').checked,
|
||||
AllowHWTranscoding: page.querySelector('.chkTranscode').checked,
|
||||
EnableStreamLooping: page.querySelector('.chkStreamLoop').checked
|
||||
};
|
||||
|
||||
if (isM3uVariant(info.Type)) {
|
||||
info.Source = info.Type;
|
||||
info.Type = "m3u";
|
||||
info.Type = 'm3u';
|
||||
}
|
||||
|
||||
var id = getParameterByName("id");
|
||||
var id = getParameterByName('id');
|
||||
|
||||
if (id) {
|
||||
info.Id = id;
|
||||
@@ -84,17 +84,17 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
|
||||
|
||||
info.Id;
|
||||
ApiClient.ajax({
|
||||
type: "POST",
|
||||
url: ApiClient.getUrl("LiveTv/TunerHosts"),
|
||||
type: 'POST',
|
||||
url: ApiClient.getUrl('LiveTv/TunerHosts'),
|
||||
data: JSON.stringify(info),
|
||||
contentType: "application/json"
|
||||
contentType: 'application/json'
|
||||
}).then(function (result) {
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
Dashboard.navigate("livetvstatus.html");
|
||||
Dashboard.navigate('livetvstatus.html');
|
||||
}, function () {
|
||||
loading.hide();
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("ErrorSavingTvProvider")
|
||||
message: globalize.translate('ErrorSavingTvProvider')
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -106,7 +106,7 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
|
||||
}
|
||||
|
||||
function getDetectedDevice() {
|
||||
return getRequirePromise(["tunerPicker"]).then(function (tunerPicker) {
|
||||
return getRequirePromise(['tunerPicker']).then(function (tunerPicker) {
|
||||
return new tunerPicker().show({
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
@@ -115,113 +115,113 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
|
||||
|
||||
function onTypeChange() {
|
||||
var value = this.value;
|
||||
var view = dom.parentWithClass(this, "page");
|
||||
var mayIncludeUnsupportedDrmChannels = "hdhomerun" === value;
|
||||
var supportsTranscoding = "hdhomerun" === value;
|
||||
var supportsFavorites = "hdhomerun" === value;
|
||||
var supportsTunerIpAddress = "hdhomerun" === value;
|
||||
var supportsTunerFileOrUrl = "m3u" === value;
|
||||
var supportsStreamLooping = "m3u" === value;
|
||||
var supportsTunerCount = "m3u" === value;
|
||||
var supportsUserAgent = "m3u" === value;
|
||||
var suppportsSubmit = "other" !== value;
|
||||
var view = dom.parentWithClass(this, 'page');
|
||||
var mayIncludeUnsupportedDrmChannels = 'hdhomerun' === value;
|
||||
var supportsTranscoding = 'hdhomerun' === value;
|
||||
var supportsFavorites = 'hdhomerun' === value;
|
||||
var supportsTunerIpAddress = 'hdhomerun' === value;
|
||||
var supportsTunerFileOrUrl = 'm3u' === value;
|
||||
var supportsStreamLooping = 'm3u' === value;
|
||||
var supportsTunerCount = 'm3u' === value;
|
||||
var supportsUserAgent = 'm3u' === value;
|
||||
var suppportsSubmit = 'other' !== value;
|
||||
var supportsSelectablePath = supportsTunerFileOrUrl;
|
||||
var txtDevicePath = view.querySelector(".txtDevicePath");
|
||||
var txtDevicePath = view.querySelector('.txtDevicePath');
|
||||
|
||||
if (supportsTunerIpAddress) {
|
||||
txtDevicePath.label(globalize.translate("LabelTunerIpAddress"));
|
||||
view.querySelector(".fldPath").classList.remove("hide");
|
||||
txtDevicePath.label(globalize.translate('LabelTunerIpAddress'));
|
||||
view.querySelector('.fldPath').classList.remove('hide');
|
||||
} else if (supportsTunerFileOrUrl) {
|
||||
txtDevicePath.label(globalize.translate("LabelFileOrUrl"));
|
||||
view.querySelector(".fldPath").classList.remove("hide");
|
||||
txtDevicePath.label(globalize.translate('LabelFileOrUrl'));
|
||||
view.querySelector('.fldPath').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldPath").classList.add("hide");
|
||||
view.querySelector('.fldPath').classList.add('hide');
|
||||
}
|
||||
|
||||
if (supportsSelectablePath) {
|
||||
view.querySelector(".btnSelectPath").classList.remove("hide");
|
||||
view.querySelector(".txtDevicePath").setAttribute("required", "required");
|
||||
view.querySelector('.btnSelectPath').classList.remove('hide');
|
||||
view.querySelector('.txtDevicePath').setAttribute('required', 'required');
|
||||
} else {
|
||||
view.querySelector(".btnSelectPath").classList.add("hide");
|
||||
view.querySelector(".txtDevicePath").removeAttribute("required");
|
||||
view.querySelector('.btnSelectPath').classList.add('hide');
|
||||
view.querySelector('.txtDevicePath').removeAttribute('required');
|
||||
}
|
||||
|
||||
if (supportsUserAgent) {
|
||||
view.querySelector(".fldUserAgent").classList.remove("hide");
|
||||
view.querySelector('.fldUserAgent').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldUserAgent").classList.add("hide");
|
||||
view.querySelector('.fldUserAgent').classList.add('hide');
|
||||
}
|
||||
|
||||
if (supportsFavorites) {
|
||||
view.querySelector(".fldFavorites").classList.remove("hide");
|
||||
view.querySelector('.fldFavorites').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldFavorites").classList.add("hide");
|
||||
view.querySelector('.fldFavorites').classList.add('hide');
|
||||
}
|
||||
|
||||
if (supportsTranscoding) {
|
||||
view.querySelector(".fldTranscode").classList.remove("hide");
|
||||
view.querySelector('.fldTranscode').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldTranscode").classList.add("hide");
|
||||
view.querySelector('.fldTranscode').classList.add('hide');
|
||||
}
|
||||
|
||||
if (supportsStreamLooping) {
|
||||
view.querySelector(".fldStreamLoop").classList.remove("hide");
|
||||
view.querySelector('.fldStreamLoop').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".fldStreamLoop").classList.add("hide");
|
||||
view.querySelector('.fldStreamLoop').classList.add('hide');
|
||||
}
|
||||
|
||||
if (supportsTunerCount) {
|
||||
view.querySelector(".fldTunerCount").classList.remove("hide");
|
||||
view.querySelector(".txtTunerCount").setAttribute("required", "required");
|
||||
view.querySelector('.fldTunerCount').classList.remove('hide');
|
||||
view.querySelector('.txtTunerCount').setAttribute('required', 'required');
|
||||
} else {
|
||||
view.querySelector(".fldTunerCount").classList.add("hide");
|
||||
view.querySelector(".txtTunerCount").removeAttribute("required");
|
||||
view.querySelector('.fldTunerCount').classList.add('hide');
|
||||
view.querySelector('.txtTunerCount').removeAttribute('required');
|
||||
}
|
||||
|
||||
if (mayIncludeUnsupportedDrmChannels) {
|
||||
view.querySelector(".drmMessage").classList.remove("hide");
|
||||
view.querySelector('.drmMessage').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".drmMessage").classList.add("hide");
|
||||
view.querySelector('.drmMessage').classList.add('hide');
|
||||
}
|
||||
|
||||
if (suppportsSubmit) {
|
||||
view.querySelector(".button-submit").classList.remove("hide");
|
||||
view.querySelector('.button-submit').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector(".button-submit").classList.add("hide");
|
||||
view.querySelector('.button-submit').classList.add('hide');
|
||||
}
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
if (!params.id) {
|
||||
view.querySelector(".btnDetect").classList.remove("hide");
|
||||
view.querySelector('.btnDetect').classList.remove('hide');
|
||||
}
|
||||
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
var currentId = params.id;
|
||||
fillTypes(view, currentId).then(function () {
|
||||
reload(view, currentId);
|
||||
});
|
||||
});
|
||||
view.querySelector("form").addEventListener("submit", function (e) {
|
||||
view.querySelector('form').addEventListener('submit', function (e) {
|
||||
submitForm(view);
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
return false;
|
||||
});
|
||||
view.querySelector(".selectType").addEventListener("change", onTypeChange);
|
||||
view.querySelector(".btnDetect").addEventListener("click", function () {
|
||||
view.querySelector('.selectType').addEventListener('change', onTypeChange);
|
||||
view.querySelector('.btnDetect').addEventListener('click', function () {
|
||||
getDetectedDevice().then(function (info) {
|
||||
fillTunerHostInfo(view, info);
|
||||
});
|
||||
});
|
||||
view.querySelector(".btnSelectPath").addEventListener("click", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
view.querySelector('.btnSelectPath').addEventListener('click', function () {
|
||||
require(['directorybrowser'], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
includeFiles: true,
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
view.querySelector(".txtDevicePath").value = path;
|
||||
view.querySelector('.txtDevicePath').value = path;
|
||||
}
|
||||
|
||||
picker.close();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData(context) {
|
||||
@@ -9,16 +9,16 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "BoxSet",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'BoxSet',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName",
|
||||
Fields: 'PrimaryImageAspectRatio,SortName',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
@@ -38,7 +38,7 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
|
||||
function getSavedQueryKey(context) {
|
||||
if (!context.savedQueryKey) {
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey("moviecollections");
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey('moviecollections');
|
||||
}
|
||||
|
||||
return context.savedQueryKey;
|
||||
@@ -46,17 +46,17 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
|
||||
function onViewStyleChange() {
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
if ("List" == viewStyle) {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if ('List' == viewStyle) {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
@@ -99,45 +99,45 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
filterButton: false
|
||||
});
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
overlayPlayButton: true,
|
||||
centerText: true,
|
||||
showTitle: true
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
lazy: true,
|
||||
cardLayout: true,
|
||||
showTitle: true
|
||||
});
|
||||
} else if (viewStyle == "Banner") {
|
||||
} else if (viewStyle == 'Banner') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "banner",
|
||||
shape: 'banner',
|
||||
preferBanner: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
lazy: true
|
||||
});
|
||||
} else if (viewStyle == "List") {
|
||||
} else if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "auto",
|
||||
context: "movies",
|
||||
shape: 'auto',
|
||||
context: 'movies',
|
||||
showTitle: true,
|
||||
centerText: false,
|
||||
cardLayout: true
|
||||
@@ -145,8 +145,8 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "auto",
|
||||
context: "movies",
|
||||
shape: 'auto',
|
||||
context: 'movies',
|
||||
centerText: true,
|
||||
overlayPlayButton: true,
|
||||
showTitle: true
|
||||
@@ -154,34 +154,34 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
}
|
||||
var i;
|
||||
var length;
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
if (!result.Items.length) {
|
||||
html = '<p style="text-align:center;">' + globalize.translate("MessageNoCollectionsAvailable") + "</p>";
|
||||
html = '<p style="text-align:center;">' + globalize.translate('MessageNoCollectionsAvailable') + '</p>';
|
||||
}
|
||||
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
itemsContainer.innerHTML = html;
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
@@ -196,23 +196,23 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||
tabContent.querySelector('.btnSort').addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionNameSort"),
|
||||
id: "SortName"
|
||||
name: globalize.translate('OptionNameSort'),
|
||||
id: 'SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionImdbRating"),
|
||||
id: "CommunityRating,SortName"
|
||||
name: globalize.translate('OptionImdbRating'),
|
||||
id: 'CommunityRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionParentalRating"),
|
||||
id: "OfficialRating,SortName"
|
||||
name: globalize.translate('OptionParentalRating'),
|
||||
id: 'OfficialRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionReleaseDate"),
|
||||
id: "PremiereDate,SortName"
|
||||
name: globalize.translate('OptionReleaseDate'),
|
||||
id: 'PremiereDate,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
@@ -222,11 +222,11 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
button: e.target
|
||||
});
|
||||
});
|
||||
var btnSelectView = tabContent.querySelector(".btnSelectView");
|
||||
btnSelectView.addEventListener("click", function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "List,Poster,PosterCard,Thumb,ThumbCard".split(","));
|
||||
var btnSelectView = tabContent.querySelector('.btnSelectView');
|
||||
btnSelectView.addEventListener('click', function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard,Thumb,ThumbCard'.split(','));
|
||||
});
|
||||
btnSelectView.addEventListener("layoutchange", function (e) {
|
||||
btnSelectView.addEventListener('layoutchange', function (e) {
|
||||
var viewStyle = e.detail.viewStyle;
|
||||
getPageData(tabContent).view = viewStyle;
|
||||
libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
|
||||
@@ -234,8 +234,8 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
onViewStyleChange();
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
tabContent.querySelector(".btnNewCollection").addEventListener("click", function () {
|
||||
require(["collectionEditor"], function (collectionEditor) {
|
||||
tabContent.querySelector('.btnNewCollection').addEventListener('click', function () {
|
||||
require(['collectionEditor'], function (collectionEditor) {
|
||||
var serverId = ApiClient.serverInfo().Id;
|
||||
new collectionEditor().show({
|
||||
items: [],
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader", "apphost", "globalize", "appRouter", "dom", "emby-button"], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader', 'apphost', 'globalize', 'appRouter', 'dom', 'emby-button'], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData() {
|
||||
@@ -9,13 +9,13 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Movie",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Movie',
|
||||
Recursive: true,
|
||||
EnableTotalRecordCount: false
|
||||
},
|
||||
view: "Poster"
|
||||
view: 'Poster'
|
||||
};
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
@@ -29,7 +29,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
return libraryBrowser.getSavedQueryKey("moviegenres");
|
||||
return libraryBrowser.getSavedQueryKey('moviegenres');
|
||||
}
|
||||
|
||||
function getPromise() {
|
||||
@@ -43,29 +43,29 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
}
|
||||
|
||||
function getThumbShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function getPortraitShape() {
|
||||
return enableScrollX() ? "overflowPortrait" : "portrait";
|
||||
return enableScrollX() ? 'overflowPortrait' : 'portrait';
|
||||
}
|
||||
|
||||
function fillItemsContainer(elem) {
|
||||
var id = elem.getAttribute("data-id");
|
||||
var id = elem.getAttribute('data-id');
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var limit = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? 5 : 9;
|
||||
var limit = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 5 : 9;
|
||||
|
||||
if (enableScrollX()) {
|
||||
limit = 10;
|
||||
}
|
||||
|
||||
var enableImageTypes = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? "Primary,Backdrop,Thumb" : "Primary";
|
||||
var enableImageTypes = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 'Primary,Backdrop,Thumb' : 'Primary';
|
||||
var query = {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Movie",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Movie',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: enableImageTypes,
|
||||
Limit: limit,
|
||||
@@ -74,9 +74,9 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
ParentId: params.topParentId
|
||||
};
|
||||
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getThumbShape(),
|
||||
@@ -87,7 +87,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
overlayMoreButton: true,
|
||||
allowBottomPadding: false
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getThumbShape(),
|
||||
@@ -98,7 +98,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
cardLayout: true,
|
||||
showYear: true
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getPortraitShape(),
|
||||
@@ -108,7 +108,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
cardLayout: true,
|
||||
showYear: true
|
||||
});
|
||||
} else if (viewStyle == "Poster") {
|
||||
} else if (viewStyle == 'Poster') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getPortraitShape(),
|
||||
@@ -121,7 +121,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
});
|
||||
}
|
||||
if (result.Items.length >= query.Limit) {
|
||||
tabContent.querySelector(".btnMoreFromGenre" + id + " .material-icons").classList.remove("hide");
|
||||
tabContent.querySelector('.btnMoreFromGenre' + id + ' .material-icons').classList.remove('hide');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -129,8 +129,8 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
function reloadItems(context, promise) {
|
||||
var query = getQuery();
|
||||
promise.then(function (result) {
|
||||
var elem = context.querySelector("#items");
|
||||
var html = "";
|
||||
var elem = context.querySelector('#items');
|
||||
var html = '';
|
||||
var items = result.Items;
|
||||
|
||||
for (var i = 0, length = items.length; i < length; i++) {
|
||||
@@ -139,20 +139,20 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">';
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl(item, {
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
parentId: params.topParentId
|
||||
}) + '" class="more button-flat button-flat-mini sectionTitleTextButton btnMoreFromGenre' + item.Id + '">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">';
|
||||
html += item.Name;
|
||||
html += "</h2>";
|
||||
html += '</h2>';
|
||||
html += '<span class="material-icons hide chevron_right"></span>';
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
if (enableScrollX()) {
|
||||
var scrollXClass = "scrollX hiddenScrollX";
|
||||
var scrollXClass = 'scrollX hiddenScrollX';
|
||||
|
||||
if (layoutManager.tv) {
|
||||
scrollXClass += "smoothScrollX padded-top-focusscale padded-bottom-focusscale";
|
||||
scrollXClass += 'smoothScrollX padded-top-focusscale padded-bottom-focusscale';
|
||||
}
|
||||
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' lazy padded-left padded-right" data-id="' + item.Id + '">';
|
||||
@@ -160,8 +160,8 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap lazy padded-left padded-right" data-id="' + item.Id + '">';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
elem.innerHTML = html;
|
||||
@@ -180,7 +180,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
var data = {};
|
||||
|
||||
self.getViewStyles = function () {
|
||||
return "Poster,PosterCard,Thumb,ThumbCard".split(",");
|
||||
return 'Poster,PosterCard,Thumb,ThumbCard'.split(',');
|
||||
};
|
||||
|
||||
self.getCurrentViewStyle = function () {
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser", "alphaPicker", "listView", "cardBuilder", "globalize", "emby-itemscontainer"], function (loading, layoutManager, userSettings, events, libraryBrowser, alphaPicker, listView, cardBuilder, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'layoutManager', 'userSettings', 'events', 'libraryBrowser', 'alphaPicker', 'listView', 'cardBuilder', 'globalize', 'emby-itemscontainer'], function (loading, layoutManager, userSettings, events, libraryBrowser, alphaPicker, listView, cardBuilder, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent, options) {
|
||||
function onViewStyleChange() {
|
||||
if (self.getCurrentViewStyle() == "List") {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if (self.getCurrentViewStyle() == 'List') {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function updateFilterControls() {
|
||||
@@ -63,26 +63,26 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
});
|
||||
var i;
|
||||
var length;
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
isLoading = false;
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(tabContent);
|
||||
});
|
||||
}
|
||||
@@ -91,49 +91,49 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
var html;
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
lazy: true,
|
||||
overlayPlayButton: true,
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
centerText: true
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
lazy: true,
|
||||
cardLayout: true,
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
centerText: true
|
||||
});
|
||||
} else if (viewStyle == "Banner") {
|
||||
} else if (viewStyle == 'Banner') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
shape: "banner",
|
||||
shape: 'banner',
|
||||
preferBanner: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
lazy: true
|
||||
});
|
||||
} else if (viewStyle == "List") {
|
||||
} else if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: items,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
shape: "portrait",
|
||||
context: "movies",
|
||||
shape: 'portrait',
|
||||
context: 'movies',
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
centerText: true,
|
||||
@@ -143,8 +143,8 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
shape: "portrait",
|
||||
context: "movies",
|
||||
shape: 'portrait',
|
||||
context: 'movies',
|
||||
overlayPlayButton: true,
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
@@ -159,10 +159,10 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
itemsContainer.fetchData = fetchData;
|
||||
itemsContainer.getItemsHtml = getItemsHtml;
|
||||
itemsContainer.afterRefresh = afterRefresh;
|
||||
var alphaPickerElement = tabContent.querySelector(".alphaPicker");
|
||||
var alphaPickerElement = tabContent.querySelector('.alphaPicker');
|
||||
|
||||
if (alphaPickerElement) {
|
||||
alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
|
||||
alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
|
||||
var newValue = e.detail.value;
|
||||
query.NameStartsWithOrGreater = newValue;
|
||||
query.StartIndex = 0;
|
||||
@@ -170,53 +170,53 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
});
|
||||
self.alphaPicker = new alphaPicker({
|
||||
element: alphaPickerElement,
|
||||
valueChangeEvent: "click"
|
||||
valueChangeEvent: 'click'
|
||||
});
|
||||
|
||||
tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
|
||||
alphaPickerElement.classList.add("alphaPicker-fixed-right");
|
||||
itemsContainer.classList.add("padded-right-withalphapicker");
|
||||
tabContent.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
|
||||
alphaPickerElement.classList.add('alphaPicker-fixed-right');
|
||||
itemsContainer.classList.add('padded-right-withalphapicker');
|
||||
}
|
||||
|
||||
var btnFilter = tabContent.querySelector(".btnFilter");
|
||||
var btnFilter = tabContent.querySelector('.btnFilter');
|
||||
|
||||
if (btnFilter) {
|
||||
btnFilter.addEventListener("click", function () {
|
||||
btnFilter.addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
}
|
||||
var btnSort = tabContent.querySelector(".btnSort");
|
||||
var btnSort = tabContent.querySelector('.btnSort');
|
||||
|
||||
if (btnSort) {
|
||||
btnSort.addEventListener("click", function (e) {
|
||||
btnSort.addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionNameSort"),
|
||||
id: "SortName,ProductionYear"
|
||||
name: globalize.translate('OptionNameSort'),
|
||||
id: 'SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionImdbRating"),
|
||||
id: "CommunityRating,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionImdbRating'),
|
||||
id: 'CommunityRating,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionCriticRating"),
|
||||
id: "CriticRating,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionCriticRating'),
|
||||
id: 'CriticRating,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionDatePlayed"),
|
||||
id: "DatePlayed,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionDatePlayed'),
|
||||
id: 'DatePlayed,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionParentalRating"),
|
||||
id: "OfficialRating,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionParentalRating'),
|
||||
id: 'OfficialRating,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionPlayCount"),
|
||||
id: "PlayCount,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionPlayCount'),
|
||||
id: 'PlayCount,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionReleaseDate"),
|
||||
id: "PremiereDate,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionReleaseDate'),
|
||||
id: 'PremiereDate,SortName,ProductionYear'
|
||||
}, {
|
||||
name: globalize.translate("OptionRuntime"),
|
||||
id: "Runtime,SortName,ProductionYear"
|
||||
name: globalize.translate('OptionRuntime'),
|
||||
id: 'Runtime,SortName,ProductionYear'
|
||||
}],
|
||||
callback: function () {
|
||||
query.StartIndex = 0;
|
||||
@@ -228,11 +228,11 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
});
|
||||
});
|
||||
}
|
||||
var btnSelectView = tabContent.querySelector(".btnSelectView");
|
||||
btnSelectView.addEventListener("click", function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "Banner,List,Poster,PosterCard,Thumb,ThumbCard".split(","));
|
||||
var btnSelectView = tabContent.querySelector('.btnSelectView');
|
||||
btnSelectView.addEventListener('click', function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(','));
|
||||
});
|
||||
btnSelectView.addEventListener("layoutchange", function (e) {
|
||||
btnSelectView.addEventListener('layoutchange', function (e) {
|
||||
var viewStyle = e.detail.viewStyle;
|
||||
userSettings.set(savedViewKey, viewStyle);
|
||||
query.StartIndex = 0;
|
||||
@@ -242,17 +242,17 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
}
|
||||
|
||||
var self = this;
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var savedQueryKey = params.topParentId + "-" + options.mode;
|
||||
var savedViewKey = savedQueryKey + "-view";
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
var savedQueryKey = params.topParentId + '-' + options.mode;
|
||||
var savedViewKey = savedQueryKey + '-view';
|
||||
var query = {
|
||||
SortBy: "SortName,ProductionYear",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Movie",
|
||||
SortBy: 'SortName,ProductionYear',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Movie',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
StartIndex: 0,
|
||||
ParentId: params.topParentId
|
||||
};
|
||||
@@ -263,20 +263,20 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
|
||||
var isLoading = false;
|
||||
|
||||
if (options.mode === "favorites") {
|
||||
if (options.mode === 'favorites') {
|
||||
query.IsFavorite = true;
|
||||
}
|
||||
|
||||
query = userSettings.loadQuerySettings(savedQueryKey, query);
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: query,
|
||||
mode: "movies",
|
||||
mode: 'movies',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
query.StartIndex = 0;
|
||||
itemsContainer.refreshItems();
|
||||
});
|
||||
@@ -285,7 +285,7 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
|
||||
};
|
||||
|
||||
self.getCurrentViewStyle = function () {
|
||||
return userSettings.get(savedViewKey) || "Poster";
|
||||
return userSettings.get(savedViewKey) || 'Poster';
|
||||
};
|
||||
|
||||
self.initTab = function () {
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "globalize", "emby-scroller", "emby-itemscontainer", "emby-tabs", "emby-button"], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager, globalize) {
|
||||
"use strict";
|
||||
define(['events', 'layoutManager', 'inputManager', 'userSettings', 'libraryMenu', 'mainTabsManager', 'cardBuilder', 'dom', 'imageLoader', 'playbackManager', 'globalize', 'emby-scroller', 'emby-itemscontainer', 'emby-tabs', 'emby-button'], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager, globalize) {
|
||||
'use strict';
|
||||
|
||||
function enableScrollX() {
|
||||
return !layoutManager.desktop;
|
||||
}
|
||||
|
||||
function getPortraitShape() {
|
||||
return enableScrollX() ? "overflowPortrait" : "portrait";
|
||||
return enableScrollX() ? 'overflowPortrait' : 'portrait';
|
||||
}
|
||||
|
||||
function getThumbShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function loadLatest(page, userId, parentId) {
|
||||
var options = {
|
||||
IncludeItemTypes: "Movie",
|
||||
IncludeItemTypes: 'Movie',
|
||||
Limit: 18,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options)).then(function (items) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) {
|
||||
var allowBottomPadding = !enableScrollX();
|
||||
var container = page.querySelector("#recentlyAddedItems");
|
||||
var container = page.querySelector('#recentlyAddedItems');
|
||||
cardBuilder.buildCards(items, {
|
||||
itemsContainer: container,
|
||||
shape: getPortraitShape(),
|
||||
@@ -45,28 +45,28 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
function loadResume(page, userId, parentId) {
|
||||
var screenWidth = dom.getWindowSize().innerWidth;
|
||||
var options = {
|
||||
SortBy: "DatePlayed",
|
||||
SortOrder: "Descending",
|
||||
IncludeItemTypes: "Movie",
|
||||
Filters: "IsResumable",
|
||||
SortBy: 'DatePlayed',
|
||||
SortOrder: 'Descending',
|
||||
IncludeItemTypes: 'Movie',
|
||||
Filters: 'IsResumable',
|
||||
Limit: screenWidth >= 1920 ? 5 : screenWidth >= 1600 ? 5 : 3,
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
|
||||
CollapseBoxSetItems: false,
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
ApiClient.getItems(userId, options).then(function (result) {
|
||||
if (result.Items.length) {
|
||||
page.querySelector("#resumableSection").classList.remove("hide");
|
||||
page.querySelector('#resumableSection').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector("#resumableSection").classList.add("hide");
|
||||
page.querySelector('#resumableSection').classList.add('hide');
|
||||
}
|
||||
|
||||
var allowBottomPadding = !enableScrollX();
|
||||
var container = page.querySelector("#resumableItems");
|
||||
var container = page.querySelector('#resumableItems');
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: container,
|
||||
preferThumb: true,
|
||||
@@ -86,31 +86,31 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
}
|
||||
|
||||
function getRecommendationHtml(recommendation) {
|
||||
var html = "";
|
||||
var title = "";
|
||||
var html = '';
|
||||
var title = '';
|
||||
|
||||
switch (recommendation.RecommendationType) {
|
||||
case "SimilarToRecentlyPlayed":
|
||||
title = globalize.translate("RecommendationBecauseYouWatched", recommendation.BaselineItemName);
|
||||
case 'SimilarToRecentlyPlayed':
|
||||
title = globalize.translate('RecommendationBecauseYouWatched', recommendation.BaselineItemName);
|
||||
break;
|
||||
|
||||
case "SimilarToLikedItem":
|
||||
title = globalize.translate("RecommendationBecauseYouLike", recommendation.BaselineItemName);
|
||||
case 'SimilarToLikedItem':
|
||||
title = globalize.translate('RecommendationBecauseYouLike', recommendation.BaselineItemName);
|
||||
break;
|
||||
|
||||
case "HasDirectorFromRecentlyPlayed":
|
||||
case "HasLikedDirector":
|
||||
title = globalize.translate("RecommendationDirectedBy", recommendation.BaselineItemName);
|
||||
case 'HasDirectorFromRecentlyPlayed':
|
||||
case 'HasLikedDirector':
|
||||
title = globalize.translate('RecommendationDirectedBy', recommendation.BaselineItemName);
|
||||
break;
|
||||
|
||||
case "HasActorFromRecentlyPlayed":
|
||||
case "HasLikedActor":
|
||||
title = globalize.translate("RecommendationStarring", recommendation.BaselineItemName);
|
||||
case 'HasActorFromRecentlyPlayed':
|
||||
case 'HasLikedActor':
|
||||
title = globalize.translate('RecommendationStarring', recommendation.BaselineItemName);
|
||||
break;
|
||||
}
|
||||
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + title + "</h2>";
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + title + '</h2>';
|
||||
var allowBottomPadding = true;
|
||||
|
||||
if (enableScrollX()) {
|
||||
@@ -133,31 +133,31 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
if (enableScrollX()) {
|
||||
html += '</div>';
|
||||
}
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html;
|
||||
}
|
||||
|
||||
function loadSuggestions(page, userId, parentId) {
|
||||
var screenWidth = dom.getWindowSize().innerWidth;
|
||||
var url = ApiClient.getUrl("Movies/Recommendations", {
|
||||
var url = ApiClient.getUrl('Movies/Recommendations', {
|
||||
userId: userId,
|
||||
categoryLimit: 6,
|
||||
ItemLimit: screenWidth >= 1920 ? 8 : screenWidth >= 1600 ? 8 : screenWidth >= 1200 ? 6 : 5,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb'
|
||||
});
|
||||
ApiClient.getJSON(url).then(function (recommendations) {
|
||||
if (!recommendations.length) {
|
||||
page.querySelector(".noItemsMessage").classList.remove("hide");
|
||||
page.querySelector(".recommendations").innerHTML = "";
|
||||
page.querySelector('.noItemsMessage').classList.remove('hide');
|
||||
page.querySelector('.recommendations').innerHTML = '';
|
||||
return;
|
||||
}
|
||||
|
||||
var html = recommendations.map(getRecommendationHtml).join("");
|
||||
page.querySelector(".noItemsMessage").classList.add("hide");
|
||||
var recs = page.querySelector(".recommendations");
|
||||
var html = recommendations.map(getRecommendationHtml).join('');
|
||||
page.querySelector('.noItemsMessage').classList.add('hide');
|
||||
var recs = page.querySelector('.recommendations');
|
||||
recs.innerHTML = html;
|
||||
imageLoader.lazyChildren(recs);
|
||||
|
||||
@@ -167,33 +167,33 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
}
|
||||
|
||||
function autoFocus(page) {
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
}
|
||||
|
||||
function setScrollClasses(elem, scrollX) {
|
||||
if (scrollX) {
|
||||
elem.classList.add("hiddenScrollX");
|
||||
elem.classList.add('hiddenScrollX');
|
||||
|
||||
if (layoutManager.tv) {
|
||||
elem.classList.add("smoothScrollX");
|
||||
elem.classList.add("padded-top-focusscale");
|
||||
elem.classList.add("padded-bottom-focusscale");
|
||||
elem.classList.add('smoothScrollX');
|
||||
elem.classList.add('padded-top-focusscale');
|
||||
elem.classList.add('padded-bottom-focusscale');
|
||||
}
|
||||
|
||||
elem.classList.add("scrollX");
|
||||
elem.classList.remove("vertical-wrap");
|
||||
elem.classList.add('scrollX');
|
||||
elem.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
elem.classList.remove("hiddenScrollX");
|
||||
elem.classList.remove("smoothScrollX");
|
||||
elem.classList.remove("scrollX");
|
||||
elem.classList.add("vertical-wrap");
|
||||
elem.classList.remove('hiddenScrollX');
|
||||
elem.classList.remove('smoothScrollX');
|
||||
elem.classList.remove('scrollX');
|
||||
elem.classList.add('vertical-wrap');
|
||||
}
|
||||
}
|
||||
|
||||
function initSuggestedTab(page, tabContent) {
|
||||
var containers = tabContent.querySelectorAll(".itemsContainer");
|
||||
var containers = tabContent.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (var i = 0, length = containers.length; i < length; i++) {
|
||||
setScrollClasses(containers[i], enableScrollX());
|
||||
@@ -203,7 +203,7 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
function loadSuggestionsTab(view, params, tabContent) {
|
||||
var parentId = params.topParentId;
|
||||
var userId = ApiClient.getCurrentUserId();
|
||||
console.debug("loadSuggestionsTab");
|
||||
console.debug('loadSuggestionsTab');
|
||||
loadResume(tabContent, userId, parentId);
|
||||
loadLatest(tabContent, userId, parentId);
|
||||
loadSuggestions(tabContent, userId, parentId);
|
||||
@@ -211,35 +211,35 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
name: globalize.translate("Movies")
|
||||
name: globalize.translate('Movies')
|
||||
}, {
|
||||
name: globalize.translate("TabSuggestions")
|
||||
name: globalize.translate('TabSuggestions')
|
||||
}, {
|
||||
name: globalize.translate("TabTrailers")
|
||||
name: globalize.translate('TabTrailers')
|
||||
}, {
|
||||
name: globalize.translate("TabFavorites")
|
||||
name: globalize.translate('TabFavorites')
|
||||
}, {
|
||||
name: globalize.translate("TabCollections")
|
||||
name: globalize.translate('TabCollections')
|
||||
}, {
|
||||
name: globalize.translate("TabGenres")
|
||||
name: globalize.translate('TabGenres')
|
||||
}, {
|
||||
name: globalize.translate("ButtonSearch"),
|
||||
cssClass: "searchTabButton"
|
||||
name: globalize.translate('ButtonSearch'),
|
||||
cssClass: 'searchTabButton'
|
||||
}];
|
||||
}
|
||||
|
||||
function getDefaultTabIndex(folderId) {
|
||||
switch (userSettings.get("landing-" + folderId)) {
|
||||
case "suggestions":
|
||||
switch (userSettings.get('landing-' + folderId)) {
|
||||
case 'suggestions':
|
||||
return 1;
|
||||
|
||||
case "favorites":
|
||||
case 'favorites':
|
||||
return 3;
|
||||
|
||||
case "collections":
|
||||
case 'collections':
|
||||
return 4;
|
||||
|
||||
case "genres":
|
||||
case 'genres':
|
||||
return 5;
|
||||
|
||||
default:
|
||||
@@ -258,7 +258,7 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
}
|
||||
|
||||
function getTabContainers() {
|
||||
return view.querySelectorAll(".pageTabContent");
|
||||
return view.querySelectorAll('.pageTabContent');
|
||||
}
|
||||
|
||||
function initTabs() {
|
||||
@@ -270,30 +270,30 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
|
||||
switch (index) {
|
||||
case 0:
|
||||
depends.push("controllers/movies/movies");
|
||||
depends.push('controllers/movies/movies');
|
||||
break;
|
||||
|
||||
case 1:
|
||||
break;
|
||||
|
||||
case 2:
|
||||
depends.push("controllers/movies/movietrailers");
|
||||
depends.push('controllers/movies/movietrailers');
|
||||
break;
|
||||
|
||||
case 3:
|
||||
depends.push("controllers/movies/movies");
|
||||
depends.push('controllers/movies/movies');
|
||||
break;
|
||||
|
||||
case 4:
|
||||
depends.push("controllers/movies/moviecollections");
|
||||
depends.push('controllers/movies/moviecollections');
|
||||
break;
|
||||
|
||||
case 5:
|
||||
depends.push("controllers/movies/moviegenres");
|
||||
depends.push('controllers/movies/moviegenres');
|
||||
break;
|
||||
|
||||
case 6:
|
||||
depends.push("scripts/searchtab");
|
||||
depends.push('scripts/searchtab');
|
||||
}
|
||||
|
||||
require(depends, function (controllerFactory) {
|
||||
@@ -313,12 +313,12 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
controller = self;
|
||||
} else if (index === 6) {
|
||||
controller = new controllerFactory(view, tabContent, {
|
||||
collectionType: "movies",
|
||||
collectionType: 'movies',
|
||||
parentId: params.topParentId
|
||||
});
|
||||
} else if (index == 0 || index == 3) {
|
||||
controller = new controllerFactory(view, params, tabContent, {
|
||||
mode: index ? "favorites" : "movies"
|
||||
mode: index ? 'favorites' : 'movies'
|
||||
});
|
||||
} else {
|
||||
controller = new controllerFactory(view, params, tabContent);
|
||||
@@ -356,7 +356,7 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
}
|
||||
|
||||
function onPlaybackStop(e, state) {
|
||||
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
|
||||
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
||||
renderedTabs = [];
|
||||
mainTabsManager.getTabsElement().triggerTabChange();
|
||||
}
|
||||
@@ -364,9 +364,9 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
|
||||
function onInputCommand(e) {
|
||||
switch (e.detail.command) {
|
||||
case "search":
|
||||
case 'search':
|
||||
e.preventDefault();
|
||||
Dashboard.navigate("search.html?collectionType=movies&parentId=" + params.topParentId);
|
||||
Dashboard.navigate('search.html?collectionType=movies&parentId=' + params.topParentId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,28 +388,28 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
|
||||
|
||||
var tabControllers = [];
|
||||
var renderedTabs = [];
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute("data-title")) {
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute('data-title')) {
|
||||
var parentId = params.topParentId;
|
||||
|
||||
if (parentId) {
|
||||
ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
|
||||
view.setAttribute("data-title", item.Name);
|
||||
view.setAttribute('data-title', item.Name);
|
||||
libraryMenu.setTitle(item.Name);
|
||||
});
|
||||
} else {
|
||||
view.setAttribute("data-title", globalize.translate("TabMovies"));
|
||||
libraryMenu.setTitle(globalize.translate("TabMovies"));
|
||||
view.setAttribute('data-title', globalize.translate('TabMovies'));
|
||||
libraryMenu.setTitle(globalize.translate('TabMovies'));
|
||||
}
|
||||
}
|
||||
|
||||
events.on(playbackManager, "playbackstop", onPlaybackStop);
|
||||
events.on(playbackManager, 'playbackstop', onPlaybackStop);
|
||||
inputManager.on(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function (e) {
|
||||
view.addEventListener('viewbeforehide', function (e) {
|
||||
inputManager.off(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewdestroy", function (e) {
|
||||
view.addEventListener('viewdestroy', function (e) {
|
||||
tabControllers.forEach(function (t) {
|
||||
if (t.destroy) {
|
||||
t.destroy();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData(context) {
|
||||
@@ -9,16 +9,16 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Trailer",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Trailer',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,SortName,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
@@ -37,7 +37,7 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
function getSavedQueryKey(context) {
|
||||
if (!context.savedQueryKey) {
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey("trailers");
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey('trailers');
|
||||
}
|
||||
|
||||
return context.savedQueryKey;
|
||||
@@ -85,43 +85,43 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
var html;
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
overlayPlayButton: true
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
cardLayout: true,
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
centerText: true
|
||||
});
|
||||
} else if (viewStyle == "Banner") {
|
||||
} else if (viewStyle == 'Banner') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "banner",
|
||||
shape: 'banner',
|
||||
preferBanner: true,
|
||||
context: "movies"
|
||||
context: 'movies'
|
||||
});
|
||||
} else if (viewStyle == "List") {
|
||||
} else if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
context: "movies",
|
||||
context: 'movies',
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
context: "movies",
|
||||
shape: 'portrait',
|
||||
context: 'movies',
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
cardLayout: true,
|
||||
@@ -130,8 +130,8 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
context: "movies",
|
||||
shape: 'portrait',
|
||||
context: 'movies',
|
||||
centerText: true,
|
||||
overlayPlayButton: true,
|
||||
showTitle: true,
|
||||
@@ -141,27 +141,27 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
var i;
|
||||
var length;
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
if (!result.Items.length) {
|
||||
html = '<p style="text-align:center;">' + globalize.translate("MessageNoTrailersFound") + "</p>";
|
||||
html = '<p style="text-align:center;">' + globalize.translate('MessageNoTrailersFound') + '</p>';
|
||||
}
|
||||
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
itemsContainer.innerHTML = html;
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(tabContent), query);
|
||||
@@ -180,13 +180,13 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(tabContent),
|
||||
mode: "movies",
|
||||
mode: 'movies',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
reloadItems();
|
||||
});
|
||||
@@ -199,9 +199,9 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
var alphaPickerElement = tabContent.querySelector(".alphaPicker");
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
|
||||
var alphaPickerElement = tabContent.querySelector('.alphaPicker');
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
|
||||
var newValue = e.detail.value;
|
||||
var query = getQuery(tabContent);
|
||||
query.NameStartsWithOrGreater = newValue;
|
||||
@@ -210,39 +210,39 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
});
|
||||
self.alphaPicker = new alphaPicker({
|
||||
element: alphaPickerElement,
|
||||
valueChangeEvent: "click"
|
||||
valueChangeEvent: 'click'
|
||||
});
|
||||
|
||||
tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
|
||||
alphaPickerElement.classList.add("alphaPicker-fixed-right");
|
||||
itemsContainer.classList.add("padded-right-withalphapicker");
|
||||
tabContent.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
|
||||
alphaPickerElement.classList.add('alphaPicker-fixed-right');
|
||||
itemsContainer.classList.add('padded-right-withalphapicker');
|
||||
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||
tabContent.querySelector('.btnSort').addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionNameSort"),
|
||||
id: "SortName"
|
||||
name: globalize.translate('OptionNameSort'),
|
||||
id: 'SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionImdbRating"),
|
||||
id: "CommunityRating,SortName"
|
||||
name: globalize.translate('OptionImdbRating'),
|
||||
id: 'CommunityRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDatePlayed"),
|
||||
id: "DatePlayed,SortName"
|
||||
name: globalize.translate('OptionDatePlayed'),
|
||||
id: 'DatePlayed,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionParentalRating"),
|
||||
id: "OfficialRating,SortName"
|
||||
name: globalize.translate('OptionParentalRating'),
|
||||
id: 'OfficialRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionPlayCount"),
|
||||
id: "PlayCount,SortName"
|
||||
name: globalize.translate('OptionPlayCount'),
|
||||
id: 'PlayCount,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionReleaseDate"),
|
||||
id: "PremiereDate,SortName"
|
||||
name: globalize.translate('OptionReleaseDate'),
|
||||
id: 'PremiereDate,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'playbackManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function playAll() {
|
||||
@@ -23,16 +23,16 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
if (!pageData) {
|
||||
pageData = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "MusicAlbum",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'MusicAlbum',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,SortName,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
@@ -52,7 +52,7 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
|
||||
function getSavedQueryKey() {
|
||||
if (!savedQueryKey) {
|
||||
savedQueryKey = libraryBrowser.getSavedQueryKey("musicalbums");
|
||||
savedQueryKey = libraryBrowser.getSavedQueryKey('musicalbums');
|
||||
}
|
||||
|
||||
return savedQueryKey;
|
||||
@@ -60,17 +60,17 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
|
||||
function onViewStyleChange() {
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
if ("List" == viewStyle) {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if ('List' == viewStyle) {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
@@ -114,18 +114,18 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
filterButton: false
|
||||
});
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
if (viewStyle == "List") {
|
||||
if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
context: "music",
|
||||
context: 'music',
|
||||
sortBy: query.SortBy,
|
||||
addToListButton: true
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
context: "music",
|
||||
shape: 'square',
|
||||
context: 'music',
|
||||
showTitle: true,
|
||||
coverImage: true,
|
||||
showParentTitle: true,
|
||||
@@ -135,8 +135,8 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
context: "music",
|
||||
shape: 'square',
|
||||
context: 'music',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
lazy: true,
|
||||
@@ -146,30 +146,30 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
}
|
||||
var i;
|
||||
var length;
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
itemsContainer.innerHTML = html;
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(tabContent);
|
||||
});
|
||||
});
|
||||
@@ -186,13 +186,13 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(),
|
||||
mode: "albums",
|
||||
mode: 'albums',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
getQuery().StartIndex = 0;
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
@@ -205,10 +205,10 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
var alphaPickerElement = tabContent.querySelector(".alphaPicker");
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var alphaPickerElement = tabContent.querySelector('.alphaPicker');
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
|
||||
alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
|
||||
var newValue = e.detail.value;
|
||||
var query = getQuery();
|
||||
query.NameStartsWithOrGreater = newValue;
|
||||
@@ -217,39 +217,39 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
});
|
||||
self.alphaPicker = new alphaPicker({
|
||||
element: alphaPickerElement,
|
||||
valueChangeEvent: "click"
|
||||
valueChangeEvent: 'click'
|
||||
});
|
||||
|
||||
tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
|
||||
alphaPickerElement.classList.add("alphaPicker-fixed-right");
|
||||
itemsContainer.classList.add("padded-right-withalphapicker");
|
||||
tabContent.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
|
||||
alphaPickerElement.classList.add('alphaPicker-fixed-right');
|
||||
itemsContainer.classList.add('padded-right-withalphapicker');
|
||||
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||
tabContent.querySelector('.btnSort').addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionNameSort"),
|
||||
id: "SortName"
|
||||
name: globalize.translate('OptionNameSort'),
|
||||
id: 'SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionAlbumArtist"),
|
||||
id: "AlbumArtist,SortName"
|
||||
name: globalize.translate('OptionAlbumArtist'),
|
||||
id: 'AlbumArtist,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionCommunityRating"),
|
||||
id: "CommunityRating,SortName"
|
||||
name: globalize.translate('OptionCommunityRating'),
|
||||
id: 'CommunityRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionCriticRating"),
|
||||
id: "CriticRating,SortName"
|
||||
name: globalize.translate('OptionCriticRating'),
|
||||
id: 'CriticRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionReleaseDate"),
|
||||
id: "ProductionYear,PremiereDate,SortName"
|
||||
name: globalize.translate('OptionReleaseDate'),
|
||||
id: 'ProductionYear,PremiereDate,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionRandom"),
|
||||
id: "Random,SortName"
|
||||
name: globalize.translate('OptionRandom'),
|
||||
id: 'Random,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
getQuery().StartIndex = 0;
|
||||
@@ -259,11 +259,11 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
button: e.target
|
||||
});
|
||||
});
|
||||
var btnSelectView = tabContent.querySelector(".btnSelectView");
|
||||
btnSelectView.addEventListener("click", function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "List,Poster,PosterCard".split(","));
|
||||
var btnSelectView = tabContent.querySelector('.btnSelectView');
|
||||
btnSelectView.addEventListener('click', function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(','));
|
||||
});
|
||||
btnSelectView.addEventListener("layoutchange", function (e) {
|
||||
btnSelectView.addEventListener('layoutchange', function (e) {
|
||||
var viewStyle = e.detail.viewStyle;
|
||||
getPageData().view = viewStyle;
|
||||
libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle);
|
||||
@@ -271,8 +271,8 @@ define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser
|
||||
onViewStyleChange();
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
tabContent.querySelector(".btnPlayAll").addEventListener("click", playAll);
|
||||
tabContent.querySelector(".btnShuffle").addEventListener("click", shuffle);
|
||||
tabContent.querySelector('.btnPlayAll').addEventListener('click', playAll);
|
||||
tabContent.querySelector('.btnShuffle').addEventListener('click', shuffle);
|
||||
}
|
||||
|
||||
initPage(tabContent);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "userSettings", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost, userSettings) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'alphaPicker', 'listView', 'cardBuilder', 'apphost', 'userSettings', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost, userSettings) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData(context) {
|
||||
@@ -8,13 +8,13 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
if (!pageData) {
|
||||
var queryValues = {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,SortName,BasicSyncInfo',
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
@@ -23,7 +23,7 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
pageData = data[key] = {
|
||||
query: queryValues,
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
@@ -46,17 +46,17 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
function onViewStyleChange() {
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
if ("List" == viewStyle) {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if ('List' == viewStyle) {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
@@ -103,16 +103,16 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
filterButton: false
|
||||
});
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
if (viewStyle == "List") {
|
||||
if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
context: "music",
|
||||
shape: 'square',
|
||||
context: 'music',
|
||||
showTitle: true,
|
||||
coverImage: true,
|
||||
cardLayout: true
|
||||
@@ -120,8 +120,8 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
context: "music",
|
||||
shape: 'square',
|
||||
context: 'music',
|
||||
showTitle: true,
|
||||
coverImage: true,
|
||||
lazy: true,
|
||||
@@ -131,30 +131,30 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
}
|
||||
var i;
|
||||
var length;
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
itemsContainer.innerHTML = html;
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(tabContent);
|
||||
});
|
||||
});
|
||||
@@ -170,13 +170,13 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(tabContent),
|
||||
mode: self.mode,
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
@@ -189,10 +189,10 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
var alphaPickerElement = tabContent.querySelector(".alphaPicker");
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var alphaPickerElement = tabContent.querySelector('.alphaPicker');
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
|
||||
alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
|
||||
var newValue = e.detail.value;
|
||||
var query = getQuery(tabContent);
|
||||
query.NameStartsWithOrGreater = newValue;
|
||||
@@ -201,21 +201,21 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
});
|
||||
self.alphaPicker = new alphaPicker({
|
||||
element: alphaPickerElement,
|
||||
valueChangeEvent: "click"
|
||||
valueChangeEvent: 'click'
|
||||
});
|
||||
|
||||
tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
|
||||
alphaPickerElement.classList.add("alphaPicker-fixed-right");
|
||||
itemsContainer.classList.add("padded-right-withalphapicker");
|
||||
tabContent.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
|
||||
alphaPickerElement.classList.add('alphaPicker-fixed-right');
|
||||
itemsContainer.classList.add('padded-right-withalphapicker');
|
||||
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
var btnSelectView = tabContent.querySelector(".btnSelectView");
|
||||
btnSelectView.addEventListener("click", function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "List,Poster,PosterCard".split(","));
|
||||
var btnSelectView = tabContent.querySelector('.btnSelectView');
|
||||
btnSelectView.addEventListener('click', function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(','));
|
||||
});
|
||||
btnSelectView.addEventListener("layoutchange", function (e) {
|
||||
btnSelectView.addEventListener('layoutchange', function (e) {
|
||||
var viewStyle = e.detail.viewStyle;
|
||||
getPageData(tabContent).view = viewStyle;
|
||||
libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
|
||||
"use strict";
|
||||
define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData() {
|
||||
@@ -9,13 +9,13 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,ItemCounts",
|
||||
Fields: 'PrimaryImageAspectRatio,ItemCounts',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
@@ -29,7 +29,7 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
return libraryBrowser.getSavedQueryKey("genres");
|
||||
return libraryBrowser.getSavedQueryKey('genres');
|
||||
}
|
||||
|
||||
function getPromise() {
|
||||
@@ -41,40 +41,40 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
function reloadItems(context, promise) {
|
||||
var query = getQuery();
|
||||
promise.then(function (result) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: 'music',
|
||||
centerText: true,
|
||||
overlayMoreButton: true,
|
||||
showTitle: true
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: 'music',
|
||||
cardLayout: true,
|
||||
showTitle: true
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "auto",
|
||||
shape: 'auto',
|
||||
context: 'music',
|
||||
cardLayout: true,
|
||||
showTitle: true
|
||||
});
|
||||
} else if (viewStyle == "Poster") {
|
||||
} else if (viewStyle == 'Poster') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "auto",
|
||||
shape: 'auto',
|
||||
context: 'music',
|
||||
centerText: true,
|
||||
overlayMoreButton: true,
|
||||
@@ -82,13 +82,13 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
});
|
||||
}
|
||||
|
||||
var elem = context.querySelector("#items");
|
||||
var elem = context.querySelector('#items');
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(context);
|
||||
});
|
||||
});
|
||||
@@ -103,7 +103,7 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
var data = {};
|
||||
|
||||
self.getViewStyles = function () {
|
||||
return "Poster,PosterCard,Thumb,ThumbCard".split(",");
|
||||
return 'Poster,PosterCard,Thumb,ThumbCard'.split(',');
|
||||
};
|
||||
|
||||
self.getCurrentViewStyle = function () {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
|
||||
"use strict";
|
||||
define(['libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'loading'], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData() {
|
||||
@@ -9,14 +9,14 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Playlist",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Playlist',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,CanDelete",
|
||||
Fields: 'PrimaryImageAspectRatio,SortName,CanDelete',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
@@ -30,7 +30,7 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
return libraryBrowser.getSavedQueryKey("genres");
|
||||
return libraryBrowser.getSavedQueryKey('genres');
|
||||
}
|
||||
|
||||
function getPromise() {
|
||||
@@ -42,10 +42,10 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
function reloadItems(context, promise) {
|
||||
var query = getQuery();
|
||||
promise.then(function (result) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
shape: 'square',
|
||||
showTitle: true,
|
||||
coverImage: true,
|
||||
centerText: true,
|
||||
@@ -53,13 +53,13 @@ define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], f
|
||||
allowBottomPadding: true,
|
||||
cardLayout: false
|
||||
});
|
||||
var elem = context.querySelector("#items");
|
||||
var elem = context.querySelector('#items');
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(context);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "cardBuilder", "dom", "apphost", "imageLoader", "libraryMenu", "playbackManager", "mainTabsManager", "globalize", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button", "flexStyles"], function (browser, layoutManager, userSettings, inputManager, loading, cardBuilder, dom, appHost, imageLoader, libraryMenu, playbackManager, mainTabsManager, globalize) {
|
||||
"use strict";
|
||||
define(['browser', 'layoutManager', 'userSettings', 'inputManager', 'loading', 'cardBuilder', 'dom', 'apphost', 'imageLoader', 'libraryMenu', 'playbackManager', 'mainTabsManager', 'globalize', 'scrollStyles', 'emby-itemscontainer', 'emby-tabs', 'emby-button', 'flexStyles'], function (browser, layoutManager, userSettings, inputManager, loading, cardBuilder, dom, appHost, imageLoader, libraryMenu, playbackManager, mainTabsManager, globalize) {
|
||||
'use strict';
|
||||
|
||||
function itemsPerRow() {
|
||||
var screenWidth = dom.getWindowSize().innerWidth;
|
||||
@@ -24,24 +24,24 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
}
|
||||
|
||||
function getSquareShape() {
|
||||
return enableScrollX() ? "overflowSquare" : "square";
|
||||
return enableScrollX() ? 'overflowSquare' : 'square';
|
||||
}
|
||||
|
||||
function loadLatest(page, parentId) {
|
||||
loading.show();
|
||||
var userId = ApiClient.getCurrentUserId();
|
||||
var options = {
|
||||
IncludeItemTypes: "Audio",
|
||||
IncludeItemTypes: 'Audio',
|
||||
Limit: enableScrollX() ? 3 * itemsPerRow() : 2 * itemsPerRow(),
|
||||
Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options)).then(function (items) {
|
||||
var elem = page.querySelector("#recentlyAddedSongs");
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).then(function (items) {
|
||||
var elem = page.querySelector('#recentlyAddedSongs');
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
supportsImageAnalysis = false;
|
||||
elem.innerHTML = cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
@@ -60,7 +60,7 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
imageLoader.lazyChildren(elem);
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
@@ -68,29 +68,29 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
|
||||
function loadRecentlyPlayed(page, parentId) {
|
||||
var options = {
|
||||
SortBy: "DatePlayed",
|
||||
SortOrder: "Descending",
|
||||
IncludeItemTypes: "Audio",
|
||||
SortBy: 'DatePlayed',
|
||||
SortOrder: 'Descending',
|
||||
IncludeItemTypes: 'Audio',
|
||||
Limit: itemsPerRow(),
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,AudioInfo",
|
||||
Filters: "IsPlayed",
|
||||
Fields: 'PrimaryImageAspectRatio,AudioInfo',
|
||||
Filters: 'IsPlayed',
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
|
||||
var elem = page.querySelector("#recentlyPlayed");
|
||||
var elem = page.querySelector('#recentlyPlayed');
|
||||
|
||||
if (result.Items.length) {
|
||||
elem.classList.remove("hide");
|
||||
elem.classList.remove('hide');
|
||||
} else {
|
||||
elem.classList.add("hide");
|
||||
elem.classList.add('hide');
|
||||
}
|
||||
|
||||
var itemsContainer = elem.querySelector(".itemsContainer");
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var itemsContainer = elem.querySelector('.itemsContainer');
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
supportsImageAnalysis = false;
|
||||
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
@@ -98,7 +98,7 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
shape: getSquareShape(),
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
action: "instantmix",
|
||||
action: 'instantmix',
|
||||
lazy: true,
|
||||
centerText: !supportsImageAnalysis,
|
||||
overlayMoreButton: !supportsImageAnalysis,
|
||||
@@ -112,29 +112,29 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
|
||||
function loadFrequentlyPlayed(page, parentId) {
|
||||
var options = {
|
||||
SortBy: "PlayCount",
|
||||
SortOrder: "Descending",
|
||||
IncludeItemTypes: "Audio",
|
||||
SortBy: 'PlayCount',
|
||||
SortOrder: 'Descending',
|
||||
IncludeItemTypes: 'Audio',
|
||||
Limit: itemsPerRow(),
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,AudioInfo",
|
||||
Filters: "IsPlayed",
|
||||
Fields: 'PrimaryImageAspectRatio,AudioInfo',
|
||||
Filters: 'IsPlayed',
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
|
||||
var elem = page.querySelector("#topPlayed");
|
||||
var elem = page.querySelector('#topPlayed');
|
||||
|
||||
if (result.Items.length) {
|
||||
elem.classList.remove("hide");
|
||||
elem.classList.remove('hide');
|
||||
} else {
|
||||
elem.classList.add("hide");
|
||||
elem.classList.add('hide');
|
||||
}
|
||||
|
||||
var itemsContainer = elem.querySelector(".itemsContainer");
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var itemsContainer = elem.querySelector('.itemsContainer');
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
supportsImageAnalysis = false;
|
||||
itemsContainer.innerHTML = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
@@ -142,7 +142,7 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
shape: getSquareShape(),
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
action: "instantmix",
|
||||
action: 'instantmix',
|
||||
lazy: true,
|
||||
centerText: !supportsImageAnalysis,
|
||||
overlayMoreButton: !supportsImageAnalysis,
|
||||
@@ -155,55 +155,55 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
}
|
||||
|
||||
function loadSuggestionsTab(page, tabContent, parentId) {
|
||||
console.debug("loadSuggestionsTab");
|
||||
console.debug('loadSuggestionsTab');
|
||||
loadLatest(tabContent, parentId);
|
||||
loadRecentlyPlayed(tabContent, parentId);
|
||||
loadFrequentlyPlayed(tabContent, parentId);
|
||||
|
||||
require(["components/favoriteitems"], function (favoriteItems) {
|
||||
favoriteItems.render(tabContent, ApiClient.getCurrentUserId(), parentId, ["favoriteArtists", "favoriteAlbums", "favoriteSongs"]);
|
||||
require(['components/favoriteitems'], function (favoriteItems) {
|
||||
favoriteItems.render(tabContent, ApiClient.getCurrentUserId(), parentId, ['favoriteArtists', 'favoriteAlbums', 'favoriteSongs']);
|
||||
});
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
name: globalize.translate("TabSuggestions")
|
||||
name: globalize.translate('TabSuggestions')
|
||||
}, {
|
||||
name: globalize.translate("TabAlbums")
|
||||
name: globalize.translate('TabAlbums')
|
||||
}, {
|
||||
name: globalize.translate("TabAlbumArtists")
|
||||
name: globalize.translate('TabAlbumArtists')
|
||||
}, {
|
||||
name: globalize.translate("TabArtists")
|
||||
name: globalize.translate('TabArtists')
|
||||
}, {
|
||||
name: globalize.translate("TabPlaylists")
|
||||
name: globalize.translate('TabPlaylists')
|
||||
}, {
|
||||
name: globalize.translate("TabSongs")
|
||||
name: globalize.translate('TabSongs')
|
||||
}, {
|
||||
name: globalize.translate("TabGenres")
|
||||
name: globalize.translate('TabGenres')
|
||||
}, {
|
||||
name: globalize.translate("ButtonSearch"),
|
||||
cssClass: "searchTabButton"
|
||||
name: globalize.translate('ButtonSearch'),
|
||||
cssClass: 'searchTabButton'
|
||||
}];
|
||||
}
|
||||
|
||||
function getDefaultTabIndex(folderId) {
|
||||
switch (userSettings.get("landing-" + folderId)) {
|
||||
case "albums":
|
||||
switch (userSettings.get('landing-' + folderId)) {
|
||||
case 'albums':
|
||||
return 1;
|
||||
|
||||
case "albumartists":
|
||||
case 'albumartists':
|
||||
return 2;
|
||||
|
||||
case "artists":
|
||||
case 'artists':
|
||||
return 3;
|
||||
|
||||
case "playlists":
|
||||
case 'playlists':
|
||||
return 4;
|
||||
|
||||
case "songs":
|
||||
case 'songs':
|
||||
return 5;
|
||||
|
||||
case "genres":
|
||||
case 'genres':
|
||||
return 6;
|
||||
|
||||
default:
|
||||
@@ -224,19 +224,19 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
|
||||
function setScrollClasses(elem, scrollX) {
|
||||
if (scrollX) {
|
||||
elem.classList.add("hiddenScrollX");
|
||||
elem.classList.add('hiddenScrollX');
|
||||
|
||||
if (layoutManager.tv) {
|
||||
elem.classList.add("smoothScrollX");
|
||||
elem.classList.add('smoothScrollX');
|
||||
}
|
||||
|
||||
elem.classList.add("scrollX");
|
||||
elem.classList.remove("vertical-wrap");
|
||||
elem.classList.add('scrollX');
|
||||
elem.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
elem.classList.remove("hiddenScrollX");
|
||||
elem.classList.remove("smoothScrollX");
|
||||
elem.classList.remove("scrollX");
|
||||
elem.classList.add("vertical-wrap");
|
||||
elem.classList.remove('hiddenScrollX');
|
||||
elem.classList.remove('smoothScrollX');
|
||||
elem.classList.remove('scrollX');
|
||||
elem.classList.add('vertical-wrap');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
}
|
||||
|
||||
function getTabContainers() {
|
||||
return view.querySelectorAll(".pageTabContent");
|
||||
return view.querySelectorAll('.pageTabContent');
|
||||
}
|
||||
|
||||
function initTabs() {
|
||||
@@ -264,28 +264,28 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
break;
|
||||
|
||||
case 1:
|
||||
depends.push("controllers/music/musicalbums");
|
||||
depends.push('controllers/music/musicalbums');
|
||||
break;
|
||||
|
||||
case 2:
|
||||
case 3:
|
||||
depends.push("controllers/music/musicartists");
|
||||
depends.push('controllers/music/musicartists');
|
||||
break;
|
||||
|
||||
case 4:
|
||||
depends.push("controllers/music/musicplaylists");
|
||||
depends.push('controllers/music/musicplaylists');
|
||||
break;
|
||||
|
||||
case 5:
|
||||
depends.push("controllers/music/songs");
|
||||
depends.push('controllers/music/songs');
|
||||
break;
|
||||
|
||||
case 6:
|
||||
depends.push("controllers/music/musicgenres");
|
||||
depends.push('controllers/music/musicgenres');
|
||||
break;
|
||||
|
||||
case 7:
|
||||
depends.push("scripts/searchtab");
|
||||
depends.push('scripts/searchtab');
|
||||
}
|
||||
|
||||
require(depends, function (controllerFactory) {
|
||||
@@ -305,7 +305,7 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
controller = self;
|
||||
} else if (index === 7) {
|
||||
controller = new controllerFactory(view, tabContent, {
|
||||
collectionType: "music",
|
||||
collectionType: 'music',
|
||||
parentId: params.topParentId
|
||||
});
|
||||
} else {
|
||||
@@ -313,9 +313,9 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
}
|
||||
|
||||
if (index == 2) {
|
||||
controller.mode = "albumartists";
|
||||
controller.mode = 'albumartists';
|
||||
} else if (index == 3) {
|
||||
controller.mode = "artists";
|
||||
controller.mode = 'artists';
|
||||
}
|
||||
|
||||
tabControllers[index] = controller;
|
||||
@@ -350,9 +350,9 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
|
||||
function onInputCommand(e) {
|
||||
switch (e.detail.command) {
|
||||
case "search":
|
||||
case 'search':
|
||||
e.preventDefault();
|
||||
Dashboard.navigate("search.html?collectionType=music&parentId=" + params.topParentId);
|
||||
Dashboard.navigate('search.html?collectionType=music&parentId=' + params.topParentId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -363,7 +363,7 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
|
||||
self.initTab = function () {
|
||||
var tabContent = view.querySelector(".pageTabContent[data-index='0']");
|
||||
var containers = tabContent.querySelectorAll(".itemsContainer");
|
||||
var containers = tabContent.querySelectorAll('.itemsContainer');
|
||||
|
||||
for (var i = 0, length = containers.length; i < length; i++) {
|
||||
setScrollClasses(containers[i], enableScrollX());
|
||||
@@ -376,29 +376,29 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
|
||||
|
||||
var tabControllers = [];
|
||||
var renderedTabs = [];
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
isViewRestored = e.detail.isRestored;
|
||||
initTabs();
|
||||
if (!view.getAttribute("data-title")) {
|
||||
if (!view.getAttribute('data-title')) {
|
||||
var parentId = params.topParentId;
|
||||
|
||||
if (parentId) {
|
||||
ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
|
||||
view.setAttribute("data-title", item.Name);
|
||||
view.setAttribute('data-title', item.Name);
|
||||
libraryMenu.setTitle(item.Name);
|
||||
});
|
||||
} else {
|
||||
view.setAttribute("data-title", globalize.translate("TabMusic"));
|
||||
libraryMenu.setTitle(globalize.translate("TabMusic"));
|
||||
view.setAttribute('data-title', globalize.translate('TabMusic'));
|
||||
libraryMenu.setTitle(globalize.translate('TabMusic'));
|
||||
}
|
||||
}
|
||||
|
||||
inputManager.on(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function (e) {
|
||||
view.addEventListener('viewbeforehide', function (e) {
|
||||
inputManager.off(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewdestroy", function (e) {
|
||||
view.addEventListener('viewdestroy', function (e) {
|
||||
tabControllers.forEach(function (t) {
|
||||
if (t.destroy) {
|
||||
t.destroy();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userSettings", "globalize", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading, userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['events', 'libraryBrowser', 'imageLoader', 'listView', 'loading', 'userSettings', 'globalize', 'emby-itemscontainer'], function (events, libraryBrowser, imageLoader, listView, loading, userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData(context) {
|
||||
@@ -9,14 +9,14 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userS
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "Album,SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Audio",
|
||||
SortBy: 'Album,SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Audio',
|
||||
Recursive: true,
|
||||
Fields: "AudioInfo,ParentId",
|
||||
Fields: 'AudioInfo,ParentId',
|
||||
StartIndex: 0,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary"
|
||||
EnableImageTypes: 'Primary'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -37,7 +37,7 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userS
|
||||
|
||||
function getSavedQueryKey(context) {
|
||||
if (!context.savedQueryKey) {
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey("songs");
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey('songs');
|
||||
}
|
||||
|
||||
return context.savedQueryKey;
|
||||
@@ -85,35 +85,35 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userS
|
||||
});
|
||||
var html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
action: "playallfromhere",
|
||||
action: 'playallfromhere',
|
||||
smallIcon: true,
|
||||
artist: true,
|
||||
addToListButton: true
|
||||
});
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
itemsContainer.innerHTML = html;
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
@@ -124,13 +124,13 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userS
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(tabContent),
|
||||
mode: "songs",
|
||||
mode: 'songs',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
@@ -143,38 +143,38 @@ define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "userS
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||
tabContent.querySelector('.btnSort').addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionTrackName"),
|
||||
id: "Name"
|
||||
name: globalize.translate('OptionTrackName'),
|
||||
id: 'Name'
|
||||
}, {
|
||||
name: globalize.translate("OptionAlbum"),
|
||||
id: "Album,SortName"
|
||||
name: globalize.translate('OptionAlbum'),
|
||||
id: 'Album,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionAlbumArtist"),
|
||||
id: "AlbumArtist,Album,SortName"
|
||||
name: globalize.translate('OptionAlbumArtist'),
|
||||
id: 'AlbumArtist,Album,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionArtist"),
|
||||
id: "Artist,Album,SortName"
|
||||
name: globalize.translate('OptionArtist'),
|
||||
id: 'Artist,Album,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDatePlayed"),
|
||||
id: "DatePlayed,SortName"
|
||||
name: globalize.translate('OptionDatePlayed'),
|
||||
id: 'DatePlayed,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionPlayCount"),
|
||||
id: "PlayCount,SortName"
|
||||
name: globalize.translate('OptionPlayCount'),
|
||||
id: 'PlayCount,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionReleaseDate"),
|
||||
id: "PremiereDate,AlbumArtist,Album,SortName"
|
||||
name: globalize.translate('OptionReleaseDate'),
|
||||
id: 'PremiereDate,AlbumArtist,Album,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionRuntime"),
|
||||
id: "Runtime,AlbumArtist,Album,SortName"
|
||||
name: globalize.translate('OptionRuntime'),
|
||||
id: 'Runtime,AlbumArtist,Album,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
define(["components/remotecontrol/remotecontrol", "libraryMenu", "emby-button"], function (remotecontrolFactory, libraryMenu) {
|
||||
"use strict";
|
||||
define(['components/remotecontrol/remotecontrol', 'libraryMenu', 'emby-button'], function (remotecontrolFactory, libraryMenu) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
var remoteControl = new remotecontrolFactory();
|
||||
remoteControl.init(view, view.querySelector(".remoteControlContent"));
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
remoteControl.init(view, view.querySelector('.remoteControlContent'));
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
libraryMenu.setTransparentMenu(true);
|
||||
|
||||
if (remoteControl) {
|
||||
remoteControl.onShow();
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function (e) {
|
||||
view.addEventListener('viewbeforehide', function (e) {
|
||||
libraryMenu.setTransparentMenu(false);
|
||||
|
||||
if (remoteControl) {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,5 @@
|
||||
define(["focusManager", "searchFields", "searchResults", "events"], function (focusManager, SearchFields, SearchResults, events) {
|
||||
"use strict";
|
||||
define(['focusManager', 'searchFields', 'searchResults', 'events'], function (focusManager, SearchFields, SearchResults, events) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
function onSearch(e, value) {
|
||||
@@ -7,21 +7,21 @@ define(["focusManager", "searchFields", "searchResults", "events"], function (fo
|
||||
}
|
||||
|
||||
var self = this;
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.addEventListener('viewshow', function () {
|
||||
if (!self.searchFields) {
|
||||
self.searchFields = new SearchFields({
|
||||
element: view.querySelector(".searchFields")
|
||||
element: view.querySelector('.searchFields')
|
||||
});
|
||||
self.searchResults = new SearchResults({
|
||||
element: view.querySelector(".searchResults"),
|
||||
element: view.querySelector('.searchResults'),
|
||||
serverId: params.serverId || ApiClient.serverId(),
|
||||
parentId: params.parentId,
|
||||
collectionType: params.collectionType
|
||||
});
|
||||
events.on(self.searchFields, "search", onSearch);
|
||||
events.on(self.searchFields, 'search', onSearch);
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
if (self.searchFields) {
|
||||
self.searchFields.destroy();
|
||||
self.searchFields = null;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "userSettings", "globalize", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'userSettings', 'globalize', 'emby-itemscontainer'], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData(context) {
|
||||
@@ -9,17 +9,17 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SeriesSortName,SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Episode",
|
||||
SortBy: 'SeriesSortName,SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Episode',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,UserData",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,UserData',
|
||||
IsMissing: false,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Thumb',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
@@ -39,7 +39,7 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
|
||||
function getSavedQueryKey(context) {
|
||||
if (!context.savedQueryKey) {
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey("episodes");
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey('episodes');
|
||||
}
|
||||
|
||||
return context.savedQueryKey;
|
||||
@@ -47,17 +47,17 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
|
||||
function onViewStyleChange() {
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
if ("List" == viewStyle) {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if ('List' == viewStyle) {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
@@ -100,17 +100,17 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
filterButton: false
|
||||
});
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
if (viewStyle == "List") {
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
sortBy: query.SortBy,
|
||||
showParentTitle: true
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
scalable: true,
|
||||
@@ -119,7 +119,7 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
overlayText: false,
|
||||
@@ -132,19 +132,19 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
var length;
|
||||
var elems;
|
||||
|
||||
elems = tabContent.querySelectorAll(".paging");
|
||||
elems = tabContent.querySelectorAll('.paging');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = html;
|
||||
@@ -153,7 +153,7 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
@@ -164,13 +164,13 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(tabContent),
|
||||
mode: "episodes",
|
||||
mode: 'episodes',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
filterDialog.show();
|
||||
@@ -182,35 +182,35 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||
tabContent.querySelector('.btnSort').addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionNameSort"),
|
||||
id: "SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionNameSort'),
|
||||
id: 'SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionTvdbRating"),
|
||||
id: "CommunityRating,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionTvdbRating'),
|
||||
id: 'CommunityRating,SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionPremiereDate"),
|
||||
id: "PremiereDate,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionPremiereDate'),
|
||||
id: 'PremiereDate,SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDatePlayed"),
|
||||
id: "DatePlayed,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionDatePlayed'),
|
||||
id: 'DatePlayed,SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionParentalRating"),
|
||||
id: "OfficialRating,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionParentalRating'),
|
||||
id: 'OfficialRating,SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionPlayCount"),
|
||||
id: "PlayCount,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionPlayCount'),
|
||||
id: 'PlayCount,SeriesSortName,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionRuntime"),
|
||||
id: "Runtime,SeriesSortName,SortName"
|
||||
name: globalize.translate('OptionRuntime'),
|
||||
id: 'Runtime,SeriesSortName,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
reloadItems(tabContent);
|
||||
@@ -219,11 +219,11 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
|
||||
button: e.target
|
||||
});
|
||||
});
|
||||
var btnSelectView = tabContent.querySelector(".btnSelectView");
|
||||
btnSelectView.addEventListener("click", function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "List,Poster,PosterCard".split(","));
|
||||
var btnSelectView = tabContent.querySelector('.btnSelectView');
|
||||
btnSelectView.addEventListener('click', function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'List,Poster,PosterCard'.split(','));
|
||||
});
|
||||
btnSelectView.addEventListener("layoutchange", function (e) {
|
||||
btnSelectView.addEventListener('layoutchange', function (e) {
|
||||
var viewStyle = e.detail.viewStyle;
|
||||
getPageData(tabContent).view = viewStyle;
|
||||
libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader", "apphost", "globalize", "appRouter", "dom", "emby-button"], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'libraryBrowser', 'cardBuilder', 'lazyLoader', 'apphost', 'globalize', 'appRouter', 'dom', 'emby-button'], function (layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData() {
|
||||
@@ -9,13 +9,13 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Series",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Series',
|
||||
Recursive: true,
|
||||
EnableTotalRecordCount: false
|
||||
},
|
||||
view: "Poster"
|
||||
view: 'Poster'
|
||||
};
|
||||
pageData.query.ParentId = params.topParentId;
|
||||
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||
@@ -29,7 +29,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
return libraryBrowser.getSavedQueryKey("seriesgenres");
|
||||
return libraryBrowser.getSavedQueryKey('seriesgenres');
|
||||
}
|
||||
|
||||
function getPromise() {
|
||||
@@ -43,29 +43,29 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
}
|
||||
|
||||
function getThumbShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function getPortraitShape() {
|
||||
return enableScrollX() ? "overflowPortrait" : "portrait";
|
||||
return enableScrollX() ? 'overflowPortrait' : 'portrait';
|
||||
}
|
||||
|
||||
function fillItemsContainer(elem) {
|
||||
var id = elem.getAttribute("data-id");
|
||||
var id = elem.getAttribute('data-id');
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var limit = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? 5 : 9;
|
||||
var limit = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 5 : 9;
|
||||
|
||||
if (enableScrollX()) {
|
||||
limit = 10;
|
||||
}
|
||||
|
||||
var enableImageTypes = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? "Primary,Backdrop,Thumb" : "Primary";
|
||||
var enableImageTypes = 'Thumb' == viewStyle || 'ThumbCard' == viewStyle ? 'Primary,Backdrop,Thumb' : 'Primary';
|
||||
var query = {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Series",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Series',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: enableImageTypes,
|
||||
Limit: limit,
|
||||
@@ -74,9 +74,9 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
ParentId: params.topParentId
|
||||
};
|
||||
ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getThumbShape(),
|
||||
@@ -87,7 +87,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
overlayMoreButton: true,
|
||||
allowBottomPadding: false
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getThumbShape(),
|
||||
@@ -98,7 +98,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
cardLayout: true,
|
||||
showYear: true
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getPortraitShape(),
|
||||
@@ -108,7 +108,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
cardLayout: true,
|
||||
showYear: true
|
||||
});
|
||||
} else if (viewStyle == "Poster") {
|
||||
} else if (viewStyle == 'Poster') {
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: getPortraitShape(),
|
||||
@@ -121,7 +121,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
});
|
||||
}
|
||||
if (result.Items.length >= query.Limit) {
|
||||
tabContent.querySelector(".btnMoreFromGenre" + id + " .material-icons").classList.remove("hide");
|
||||
tabContent.querySelector('.btnMoreFromGenre' + id + ' .material-icons').classList.remove('hide');
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -129,8 +129,8 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
function reloadItems(context, promise) {
|
||||
var query = getQuery();
|
||||
promise.then(function (result) {
|
||||
var elem = context.querySelector("#items");
|
||||
var html = "";
|
||||
var elem = context.querySelector('#items');
|
||||
var html = '';
|
||||
var items = result.Items;
|
||||
|
||||
for (var i = 0, length = items.length; i < length; i++) {
|
||||
@@ -138,26 +138,26 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<div class="sectionTitleContainer sectionTitleContainer-cards padded-left">';
|
||||
html += '<a is="emby-linkbutton" href="' + appRouter.getRouteUrl(item, {
|
||||
context: "tvshows",
|
||||
context: 'tvshows',
|
||||
parentId: params.topParentId
|
||||
}) + '" class="more button-flat button-flat-mini sectionTitleTextButton btnMoreFromGenre' + item.Id + '">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">';
|
||||
html += item.Name;
|
||||
html += "</h2>";
|
||||
html += '</h2>';
|
||||
html += '<span class="material-icons hide chevron_right"></span>';
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
if (enableScrollX()) {
|
||||
var scrollXClass = "scrollX hiddenScrollX";
|
||||
var scrollXClass = 'scrollX hiddenScrollX';
|
||||
if (layoutManager.tv) {
|
||||
scrollXClass += "smoothScrollX padded-top-focusscale padded-bottom-focusscale";
|
||||
scrollXClass += 'smoothScrollX padded-top-focusscale padded-bottom-focusscale';
|
||||
}
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' lazy padded-left padded-right" data-id="' + item.Id + '">';
|
||||
} else {
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap lazy padded-left padded-right" data-id="' + item.Id + '">';
|
||||
}
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
elem.innerHTML = html;
|
||||
@@ -176,7 +176,7 @@ define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader
|
||||
var data = {};
|
||||
|
||||
self.getViewStyles = function () {
|
||||
return "Poster,PosterCard,Thumb,ThumbCard".split(",");
|
||||
return 'Poster,PosterCard,Thumb,ThumbCard'.split(',');
|
||||
};
|
||||
|
||||
self.getCurrentViewStyle = function () {
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
define(["loading", "components/groupedcards", "cardBuilder", "apphost", "imageLoader"], function (loading, groupedcards, cardBuilder, appHost, imageLoader) {
|
||||
"use strict";
|
||||
define(['loading', 'components/groupedcards', 'cardBuilder', 'apphost', 'imageLoader'], function (loading, groupedcards, cardBuilder, appHost, imageLoader) {
|
||||
'use strict';
|
||||
|
||||
function getLatestPromise(context, params) {
|
||||
loading.show();
|
||||
var userId = ApiClient.getCurrentUserId();
|
||||
var parentId = params.topParentId;
|
||||
var options = {
|
||||
IncludeItemTypes: "Episode",
|
||||
IncludeItemTypes: 'Episode',
|
||||
Limit: 30,
|
||||
Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Thumb"
|
||||
EnableImageTypes: 'Primary,Backdrop,Thumb'
|
||||
};
|
||||
return ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options));
|
||||
return ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options));
|
||||
}
|
||||
|
||||
function loadLatest(context, params, promise) {
|
||||
promise.then(function (items) {
|
||||
var html = "";
|
||||
appHost.supports("imageanalysis");
|
||||
var html = '';
|
||||
appHost.supports('imageanalysis');
|
||||
html += cardBuilder.getCardsHtml({
|
||||
items: items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
showTitle: true,
|
||||
showSeriesYear: true,
|
||||
@@ -36,12 +36,12 @@ define(["loading", "components/groupedcards", "cardBuilder", "apphost", "imageLo
|
||||
overlayPlayButton: true,
|
||||
lines: 2
|
||||
});
|
||||
var elem = context.querySelector("#latestEpisodes");
|
||||
var elem = context.querySelector('#latestEpisodes');
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(context);
|
||||
});
|
||||
});
|
||||
@@ -59,6 +59,6 @@ define(["loading", "components/groupedcards", "cardBuilder", "apphost", "imageLo
|
||||
loadLatest(tabContent, params, latestPromise);
|
||||
};
|
||||
|
||||
tabContent.querySelector("#latestEpisodes").addEventListener("click", groupedcards.onItemsContainerClick);
|
||||
tabContent.querySelector('#latestEpisodes').addEventListener('click', groupedcards.onItemsContainerClick);
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,39 +1,39 @@
|
||||
define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "globalize", "scrollStyles", "emby-itemscontainer", "emby-button"], function (events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager, globalize) {
|
||||
"use strict";
|
||||
define(['events', 'inputManager', 'libraryMenu', 'layoutManager', 'loading', 'dom', 'userSettings', 'cardBuilder', 'playbackManager', 'mainTabsManager', 'globalize', 'scrollStyles', 'emby-itemscontainer', 'emby-button'], function (events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager, globalize) {
|
||||
'use strict';
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
name: globalize.translate("TabShows")
|
||||
name: globalize.translate('TabShows')
|
||||
}, {
|
||||
name: globalize.translate("TabSuggestions")
|
||||
name: globalize.translate('TabSuggestions')
|
||||
}, {
|
||||
name: globalize.translate("TabLatest")
|
||||
name: globalize.translate('TabLatest')
|
||||
}, {
|
||||
name: globalize.translate("TabUpcoming")
|
||||
name: globalize.translate('TabUpcoming')
|
||||
}, {
|
||||
name: globalize.translate("TabGenres")
|
||||
name: globalize.translate('TabGenres')
|
||||
}, {
|
||||
name: globalize.translate("TabNetworks")
|
||||
name: globalize.translate('TabNetworks')
|
||||
}, {
|
||||
name: globalize.translate("TabEpisodes")
|
||||
name: globalize.translate('TabEpisodes')
|
||||
}, {
|
||||
name: globalize.translate("ButtonSearch"),
|
||||
cssClass: "searchTabButton"
|
||||
name: globalize.translate('ButtonSearch'),
|
||||
cssClass: 'searchTabButton'
|
||||
}];
|
||||
}
|
||||
|
||||
function getDefaultTabIndex(folderId) {
|
||||
switch (userSettings.get("landing-" + folderId)) {
|
||||
case "suggestions":
|
||||
switch (userSettings.get('landing-' + folderId)) {
|
||||
case 'suggestions':
|
||||
return 1;
|
||||
|
||||
case "latest":
|
||||
case 'latest':
|
||||
return 2;
|
||||
|
||||
case "favorites":
|
||||
case 'favorites':
|
||||
return 1;
|
||||
|
||||
case "genres":
|
||||
case 'genres':
|
||||
return 4;
|
||||
|
||||
default:
|
||||
@@ -43,19 +43,19 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
|
||||
function setScrollClasses(elem, scrollX) {
|
||||
if (scrollX) {
|
||||
elem.classList.add("hiddenScrollX");
|
||||
elem.classList.add('hiddenScrollX');
|
||||
|
||||
if (layoutManager.tv) {
|
||||
elem.classList.add("smoothScrollX");
|
||||
elem.classList.add('smoothScrollX');
|
||||
}
|
||||
|
||||
elem.classList.add("scrollX");
|
||||
elem.classList.remove("vertical-wrap");
|
||||
elem.classList.add('scrollX');
|
||||
elem.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
elem.classList.remove("hiddenScrollX");
|
||||
elem.classList.remove("smoothScrollX");
|
||||
elem.classList.remove("scrollX");
|
||||
elem.classList.add("vertical-wrap");
|
||||
elem.classList.remove('hiddenScrollX');
|
||||
elem.classList.remove('smoothScrollX');
|
||||
elem.classList.remove('scrollX');
|
||||
elem.classList.add('vertical-wrap');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,25 +69,25 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
function loadNextUp() {
|
||||
var query = {
|
||||
Limit: 24,
|
||||
Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo',
|
||||
UserId: ApiClient.getCurrentUserId(),
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
query.ParentId = libraryMenu.getTopParentId();
|
||||
ApiClient.getNextUpEpisodes(query).then(function (result) {
|
||||
if (result.Items.length) {
|
||||
view.querySelector(".noNextUpItems").classList.add("hide");
|
||||
view.querySelector('.noNextUpItems').classList.add('hide');
|
||||
} else {
|
||||
view.querySelector(".noNextUpItems").classList.remove("hide");
|
||||
view.querySelector('.noNextUpItems').classList.remove('hide');
|
||||
}
|
||||
|
||||
var container = view.querySelector("#nextUpItems");
|
||||
var container = view.querySelector('#nextUpItems');
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: container,
|
||||
preferThumb: true,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
scalable: true,
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
@@ -98,7 +98,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
});
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(view);
|
||||
});
|
||||
});
|
||||
@@ -109,7 +109,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
}
|
||||
|
||||
function getThumbShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function loadResume() {
|
||||
@@ -117,28 +117,28 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
var screenWidth = dom.getWindowSize().innerWidth;
|
||||
var limit = screenWidth >= 1600 ? 5 : 6;
|
||||
var options = {
|
||||
SortBy: "DatePlayed",
|
||||
SortOrder: "Descending",
|
||||
IncludeItemTypes: "Episode",
|
||||
Filters: "IsResumable",
|
||||
SortBy: 'DatePlayed',
|
||||
SortOrder: 'Descending',
|
||||
IncludeItemTypes: 'Episode',
|
||||
Filters: 'IsResumable',
|
||||
Limit: limit,
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,BasicSyncInfo",
|
||||
ExcludeLocationTypes: "Virtual",
|
||||
Fields: 'PrimaryImageAspectRatio,SeriesInfo,UserData,BasicSyncInfo',
|
||||
ExcludeLocationTypes: 'Virtual',
|
||||
ParentId: parentId,
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
|
||||
if (result.Items.length) {
|
||||
view.querySelector("#resumableSection").classList.remove("hide");
|
||||
view.querySelector('#resumableSection').classList.remove('hide');
|
||||
} else {
|
||||
view.querySelector("#resumableSection").classList.add("hide");
|
||||
view.querySelector('#resumableSection').classList.add('hide');
|
||||
}
|
||||
|
||||
var allowBottomPadding = !enableScrollX();
|
||||
var container = view.querySelector("#resumableItems");
|
||||
var container = view.querySelector('#resumableItems');
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: container,
|
||||
preferThumb: true,
|
||||
@@ -165,7 +165,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
}
|
||||
|
||||
function getTabContainers() {
|
||||
return view.querySelectorAll(".pageTabContent");
|
||||
return view.querySelectorAll('.pageTabContent');
|
||||
}
|
||||
|
||||
function initTabs() {
|
||||
@@ -177,34 +177,34 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
|
||||
switch (index) {
|
||||
case 0:
|
||||
depends.push("controllers/shows/tvshows");
|
||||
depends.push('controllers/shows/tvshows');
|
||||
break;
|
||||
|
||||
case 1:
|
||||
break;
|
||||
|
||||
case 2:
|
||||
depends.push("controllers/shows/tvlatest");
|
||||
depends.push('controllers/shows/tvlatest');
|
||||
break;
|
||||
|
||||
case 3:
|
||||
depends.push("controllers/shows/tvupcoming");
|
||||
depends.push('controllers/shows/tvupcoming');
|
||||
break;
|
||||
|
||||
case 4:
|
||||
depends.push("controllers/shows/tvgenres");
|
||||
depends.push('controllers/shows/tvgenres');
|
||||
break;
|
||||
|
||||
case 5:
|
||||
depends.push("controllers/shows/tvstudios");
|
||||
depends.push('controllers/shows/tvstudios');
|
||||
break;
|
||||
|
||||
case 6:
|
||||
depends.push("controllers/shows/episodes");
|
||||
depends.push('controllers/shows/episodes');
|
||||
break;
|
||||
|
||||
case 7:
|
||||
depends.push("scripts/searchtab");
|
||||
depends.push('scripts/searchtab');
|
||||
}
|
||||
|
||||
require(depends, function (controllerFactory) {
|
||||
@@ -224,7 +224,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
controller = self;
|
||||
} else if (index === 7) {
|
||||
controller = new controllerFactory(view, tabContent, {
|
||||
collectionType: "tvshows",
|
||||
collectionType: 'tvshows',
|
||||
parentId: params.topParentId
|
||||
});
|
||||
} else {
|
||||
@@ -263,7 +263,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
}
|
||||
|
||||
function onPlaybackStop(e, state) {
|
||||
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
|
||||
if (state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
||||
renderedTabs = [];
|
||||
mainTabsManager.getTabsElement().triggerTabChange();
|
||||
}
|
||||
@@ -272,16 +272,16 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
function onWebSocketMessage(e, data) {
|
||||
var msg = data;
|
||||
|
||||
if (msg.MessageType === "UserDataChanged" && msg.Data.UserId == ApiClient.getCurrentUserId()) {
|
||||
if (msg.MessageType === 'UserDataChanged' && msg.Data.UserId == ApiClient.getCurrentUserId()) {
|
||||
renderedTabs = [];
|
||||
}
|
||||
}
|
||||
|
||||
function onInputCommand(e) {
|
||||
switch (e.detail.command) {
|
||||
case "search":
|
||||
case 'search':
|
||||
e.preventDefault();
|
||||
Dashboard.navigate("search.html?collectionType=tv&parentId=" + params.topParentId);
|
||||
Dashboard.navigate('search.html?collectionType=tv&parentId=' + params.topParentId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
|
||||
self.initTab = function () {
|
||||
var tabContent = self.tabContent;
|
||||
setScrollClasses(tabContent.querySelector("#resumableItems"), enableScrollX());
|
||||
setScrollClasses(tabContent.querySelector('#resumableItems'), enableScrollX());
|
||||
};
|
||||
|
||||
self.renderTab = function () {
|
||||
@@ -301,34 +301,34 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
|
||||
|
||||
var tabControllers = [];
|
||||
var renderedTabs = [];
|
||||
setScrollClasses(view.querySelector("#resumableItems"), enableScrollX());
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
setScrollClasses(view.querySelector('#resumableItems'), enableScrollX());
|
||||
view.addEventListener('viewshow', function (e) {
|
||||
isViewRestored = e.detail.isRestored;
|
||||
initTabs();
|
||||
if (!view.getAttribute("data-title")) {
|
||||
if (!view.getAttribute('data-title')) {
|
||||
var parentId = params.topParentId;
|
||||
|
||||
if (parentId) {
|
||||
ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
|
||||
view.setAttribute("data-title", item.Name);
|
||||
view.setAttribute('data-title', item.Name);
|
||||
libraryMenu.setTitle(item.Name);
|
||||
});
|
||||
} else {
|
||||
view.setAttribute("data-title", globalize.translate("TabShows"));
|
||||
libraryMenu.setTitle(globalize.translate("TabShows"));
|
||||
view.setAttribute('data-title', globalize.translate('TabShows'));
|
||||
libraryMenu.setTitle(globalize.translate('TabShows'));
|
||||
}
|
||||
}
|
||||
|
||||
events.on(playbackManager, "playbackstop", onPlaybackStop);
|
||||
events.on(ApiClient, "message", onWebSocketMessage);
|
||||
events.on(playbackManager, 'playbackstop', onPlaybackStop);
|
||||
events.on(ApiClient, 'message', onWebSocketMessage);
|
||||
inputManager.on(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function (e) {
|
||||
view.addEventListener('viewbeforehide', function (e) {
|
||||
inputManager.off(window, onInputCommand);
|
||||
events.off(playbackManager, "playbackstop", onPlaybackStop);
|
||||
events.off(ApiClient, "message", onWebSocketMessage);
|
||||
events.off(playbackManager, 'playbackstop', onPlaybackStop);
|
||||
events.off(ApiClient, 'message', onWebSocketMessage);
|
||||
});
|
||||
view.addEventListener("viewdestroy", function (e) {
|
||||
view.addEventListener('viewdestroy', function (e) {
|
||||
tabControllers.forEach(function (t) {
|
||||
if (t.destroy) {
|
||||
t.destroy();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "userSettings", "globalize", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker, userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'events', 'libraryBrowser', 'imageLoader', 'listView', 'cardBuilder', 'alphaPicker', 'userSettings', 'globalize', 'emby-itemscontainer'], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker, userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params, tabContent) {
|
||||
function getPageData(context) {
|
||||
@@ -9,16 +9,16 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Series",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Series',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
@@ -38,7 +38,7 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
function getSavedQueryKey(context) {
|
||||
if (!context.savedQueryKey) {
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey("series");
|
||||
context.savedQueryKey = libraryBrowser.getSavedQueryKey('series');
|
||||
}
|
||||
|
||||
return context.savedQueryKey;
|
||||
@@ -46,17 +46,17 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
|
||||
function onViewStyleChange() {
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
if ("List" == viewStyle) {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if ('List' == viewStyle) {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function reloadItems(page) {
|
||||
@@ -100,45 +100,45 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
filterButton: false
|
||||
});
|
||||
var viewStyle = self.getCurrentViewStyle();
|
||||
if (viewStyle == "Thumb") {
|
||||
if (viewStyle == 'Thumb') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "tvshows",
|
||||
context: 'tvshows',
|
||||
overlayMoreButton: true,
|
||||
showTitle: true,
|
||||
centerText: true
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
context: "tvshows",
|
||||
context: 'tvshows',
|
||||
cardLayout: true,
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
centerText: true
|
||||
});
|
||||
} else if (viewStyle == "Banner") {
|
||||
} else if (viewStyle == 'Banner') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "banner",
|
||||
shape: 'banner',
|
||||
preferBanner: true,
|
||||
context: "tvshows"
|
||||
context: 'tvshows'
|
||||
});
|
||||
} else if (viewStyle == "List") {
|
||||
} else if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
context: "tvshows",
|
||||
context: 'tvshows',
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
context: "tvshows",
|
||||
shape: 'portrait',
|
||||
context: 'tvshows',
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
centerText: true,
|
||||
@@ -147,8 +147,8 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "portrait",
|
||||
context: "tvshows",
|
||||
shape: 'portrait',
|
||||
context: 'tvshows',
|
||||
centerText: true,
|
||||
lazy: true,
|
||||
overlayMoreButton: true,
|
||||
@@ -158,30 +158,30 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
}
|
||||
var i;
|
||||
var length;
|
||||
var elems = tabContent.querySelectorAll(".paging");
|
||||
var elems = tabContent.querySelectorAll('.paging');
|
||||
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].innerHTML = pagingHtml;
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnNextPage");
|
||||
elems = tabContent.querySelectorAll('.btnNextPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onNextPageClick);
|
||||
elems[i].addEventListener('click', onNextPageClick);
|
||||
}
|
||||
|
||||
elems = tabContent.querySelectorAll(".btnPreviousPage");
|
||||
elems = tabContent.querySelectorAll('.btnPreviousPage');
|
||||
for (i = 0, length = elems.length; i < length; i++) {
|
||||
elems[i].addEventListener("click", onPreviousPageClick);
|
||||
elems[i].addEventListener('click', onPreviousPageClick);
|
||||
}
|
||||
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
itemsContainer.innerHTML = html;
|
||||
imageLoader.lazyChildren(itemsContainer);
|
||||
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
|
||||
loading.hide();
|
||||
isLoading = false;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
@@ -197,13 +197,13 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
var isLoading = false;
|
||||
|
||||
self.showFilterMenu = function () {
|
||||
require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
|
||||
require(['components/filterdialog/filterdialog'], function (filterDialogFactory) {
|
||||
var filterDialog = new filterDialogFactory({
|
||||
query: getQuery(tabContent),
|
||||
mode: "series",
|
||||
mode: 'series',
|
||||
serverId: ApiClient.serverId()
|
||||
});
|
||||
events.on(filterDialog, "filterchange", function () {
|
||||
events.on(filterDialog, 'filterchange', function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
reloadItems(tabContent);
|
||||
});
|
||||
@@ -216,10 +216,10 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
};
|
||||
|
||||
function initPage(tabContent) {
|
||||
var alphaPickerElement = tabContent.querySelector(".alphaPicker");
|
||||
var itemsContainer = tabContent.querySelector(".itemsContainer");
|
||||
var alphaPickerElement = tabContent.querySelector('.alphaPicker');
|
||||
var itemsContainer = tabContent.querySelector('.itemsContainer');
|
||||
|
||||
alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
|
||||
alphaPickerElement.addEventListener('alphavaluechanged', function (e) {
|
||||
var newValue = e.detail.value;
|
||||
var query = getQuery(tabContent);
|
||||
query.NameStartsWithOrGreater = newValue;
|
||||
@@ -228,36 +228,36 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
});
|
||||
self.alphaPicker = new alphaPicker({
|
||||
element: alphaPickerElement,
|
||||
valueChangeEvent: "click"
|
||||
valueChangeEvent: 'click'
|
||||
});
|
||||
|
||||
tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
|
||||
alphaPickerElement.classList.add("alphaPicker-fixed-right");
|
||||
itemsContainer.classList.add("padded-right-withalphapicker");
|
||||
tabContent.querySelector('.alphaPicker').classList.add('alphabetPicker-right');
|
||||
alphaPickerElement.classList.add('alphaPicker-fixed-right');
|
||||
itemsContainer.classList.add('padded-right-withalphapicker');
|
||||
|
||||
tabContent.querySelector(".btnFilter").addEventListener("click", function () {
|
||||
tabContent.querySelector('.btnFilter').addEventListener('click', function () {
|
||||
self.showFilterMenu();
|
||||
});
|
||||
tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
|
||||
tabContent.querySelector('.btnSort').addEventListener('click', function (e) {
|
||||
libraryBrowser.showSortMenu({
|
||||
items: [{
|
||||
name: globalize.translate("OptionNameSort"),
|
||||
id: "SortName"
|
||||
name: globalize.translate('OptionNameSort'),
|
||||
id: 'SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionImdbRating"),
|
||||
id: "CommunityRating,SortName"
|
||||
name: globalize.translate('OptionImdbRating'),
|
||||
id: 'CommunityRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDateAdded"),
|
||||
id: "DateCreated,SortName"
|
||||
name: globalize.translate('OptionDateAdded'),
|
||||
id: 'DateCreated,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionDatePlayed"),
|
||||
id: "DatePlayed,SortName"
|
||||
name: globalize.translate('OptionDatePlayed'),
|
||||
id: 'DatePlayed,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionParentalRating"),
|
||||
id: "OfficialRating,SortName"
|
||||
name: globalize.translate('OptionParentalRating'),
|
||||
id: 'OfficialRating,SortName'
|
||||
}, {
|
||||
name: globalize.translate("OptionReleaseDate"),
|
||||
id: "PremiereDate,SortName"
|
||||
name: globalize.translate('OptionReleaseDate'),
|
||||
id: 'PremiereDate,SortName'
|
||||
}],
|
||||
callback: function () {
|
||||
getQuery(tabContent).StartIndex = 0;
|
||||
@@ -267,11 +267,11 @@ define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "
|
||||
button: e.target
|
||||
});
|
||||
});
|
||||
var btnSelectView = tabContent.querySelector(".btnSelectView");
|
||||
btnSelectView.addEventListener("click", function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "Banner,List,Poster,PosterCard,Thumb,ThumbCard".split(","));
|
||||
var btnSelectView = tabContent.querySelector('.btnSelectView');
|
||||
btnSelectView.addEventListener('click', function (e) {
|
||||
libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), 'Banner,List,Poster,PosterCard,Thumb,ThumbCard'.split(','));
|
||||
});
|
||||
btnSelectView.addEventListener("layoutchange", function (e) {
|
||||
btnSelectView.addEventListener('layoutchange', function (e) {
|
||||
var viewStyle = e.detail.viewStyle;
|
||||
getPageData(tabContent).view = viewStyle;
|
||||
libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
define(["loading", "libraryBrowser", "cardBuilder", "apphost"], function (loading, libraryBrowser, cardBuilder, appHost) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryBrowser', 'cardBuilder', 'apphost'], function (loading, libraryBrowser, cardBuilder, appHost) {
|
||||
'use strict';
|
||||
|
||||
function getQuery(params) {
|
||||
var key = getSavedQueryKey();
|
||||
@@ -8,11 +8,11 @@ define(["loading", "libraryBrowser", "cardBuilder", "apphost"], function (loadin
|
||||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Series",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Series',
|
||||
Recursive: true,
|
||||
Fields: "DateCreated,PrimaryImageAspectRatio",
|
||||
Fields: 'DateCreated,PrimaryImageAspectRatio',
|
||||
StartIndex: 0
|
||||
}
|
||||
};
|
||||
@@ -23,7 +23,7 @@ define(["loading", "libraryBrowser", "cardBuilder", "apphost"], function (loadin
|
||||
}
|
||||
|
||||
function getSavedQueryKey() {
|
||||
return libraryBrowser.getSavedQueryKey("studios");
|
||||
return libraryBrowser.getSavedQueryKey('studios');
|
||||
}
|
||||
|
||||
function getPromise(context, params) {
|
||||
@@ -34,20 +34,20 @@ define(["loading", "libraryBrowser", "cardBuilder", "apphost"], function (loadin
|
||||
|
||||
function reloadItems(context, params, promise) {
|
||||
promise.then(function (result) {
|
||||
var elem = context.querySelector("#items");
|
||||
var elem = context.querySelector('#items');
|
||||
cardBuilder.buildCards(result.Items, {
|
||||
itemsContainer: elem,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
preferThumb: true,
|
||||
showTitle: true,
|
||||
scalable: true,
|
||||
centerText: true,
|
||||
overlayMoreButton: true,
|
||||
context: "tvshows"
|
||||
context: 'tvshows'
|
||||
});
|
||||
loading.hide();
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(context);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder", "apphost", "imageLoader", "globalize", "scrollStyles", "emby-itemscontainer"], function (layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader, globalize) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'loading', 'datetime', 'libraryBrowser', 'cardBuilder', 'apphost', 'imageLoader', 'globalize', 'scrollStyles', 'emby-itemscontainer'], function (layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader, globalize) {
|
||||
'use strict';
|
||||
|
||||
function getUpcomingPromise(context, params) {
|
||||
loading.show();
|
||||
var query = {
|
||||
Limit: 48,
|
||||
Fields: "AirTime,UserData",
|
||||
Fields: 'AirTime,UserData',
|
||||
UserId: ApiClient.getCurrentUserId(),
|
||||
ImageTypeLimit: 1,
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
query.ParentId = params.topParentId;
|
||||
return ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query));
|
||||
return ApiClient.getJSON(ApiClient.getUrl('Shows/Upcoming', query));
|
||||
}
|
||||
|
||||
function loadUpcoming(context, params, promise) {
|
||||
@@ -20,12 +20,12 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
|
||||
var items = result.Items;
|
||||
|
||||
if (items.length) {
|
||||
context.querySelector(".noItemsMessage").style.display = "none";
|
||||
context.querySelector('.noItemsMessage').style.display = 'none';
|
||||
} else {
|
||||
context.querySelector(".noItemsMessage").style.display = "block";
|
||||
context.querySelector('.noItemsMessage').style.display = 'block';
|
||||
}
|
||||
|
||||
renderUpcoming(context.querySelector("#upcomingItems"), items);
|
||||
renderUpcoming(context.querySelector('#upcomingItems'), items);
|
||||
loading.hide();
|
||||
});
|
||||
}
|
||||
@@ -35,27 +35,27 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
|
||||
}
|
||||
|
||||
function getThumbShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function renderUpcoming(elem, items) {
|
||||
var i;
|
||||
var length;
|
||||
var groups = [];
|
||||
var currentGroupName = "";
|
||||
var currentGroupName = '';
|
||||
var currentGroup = [];
|
||||
|
||||
for (i = 0, length = items.length; i < length; i++) {
|
||||
var item = items[i];
|
||||
var dateText = "";
|
||||
var dateText = '';
|
||||
|
||||
if (item.PremiereDate) {
|
||||
try {
|
||||
var premiereDate = datetime.parseISO8601Date(item.PremiereDate, true);
|
||||
dateText = datetime.isRelativeDay(premiereDate, -1) ? globalize.translate("Yesterday") : datetime.toLocaleDateString(premiereDate, {
|
||||
weekday: "long",
|
||||
month: "short",
|
||||
day: "numeric"
|
||||
dateText = datetime.isRelativeDay(premiereDate, -1) ? globalize.translate('Yesterday') : datetime.toLocaleDateString(premiereDate, {
|
||||
weekday: 'long',
|
||||
month: 'short',
|
||||
day: 'numeric'
|
||||
});
|
||||
} catch (err) {
|
||||
console.error('error parsing timestamp for upcoming tv shows');
|
||||
@@ -77,20 +77,20 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
|
||||
}
|
||||
}
|
||||
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (i = 0, length = groups.length; i < length; i++) {
|
||||
var group = groups[i];
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + "</h2>";
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + '</h2>';
|
||||
var allowBottomPadding = true;
|
||||
|
||||
if (enableScrollX()) {
|
||||
allowBottomPadding = false;
|
||||
var scrollXClass = "scrollX hiddenScrollX";
|
||||
var scrollXClass = 'scrollX hiddenScrollX';
|
||||
|
||||
if (layoutManager.tv) {
|
||||
scrollXClass += " smoothScrollX";
|
||||
scrollXClass += ' smoothScrollX';
|
||||
}
|
||||
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' padded-left padded-right">';
|
||||
@@ -98,7 +98,7 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
||||
}
|
||||
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
supportsImageAnalysis = false;
|
||||
html += cardBuilder.getCardsHtml({
|
||||
items: group.items,
|
||||
@@ -116,8 +116,8 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
|
||||
overlayMoreButton: true,
|
||||
missingIndicator: false
|
||||
});
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
elem.innerHTML = html;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySettings, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
define(['displaySettings', 'userSettings', 'autoFocuser'], function (DisplaySettings, userSettings, autoFocuser) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
function onBeforeUnload(e) {
|
||||
if (hasChanges) {
|
||||
e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
|
||||
e.returnValue = 'You currently have unsaved changes. Are you sure you wish to leave?';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySett
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
view.addEventListener('viewshow', function () {
|
||||
window.addEventListener('beforeunload', onBeforeUnload);
|
||||
|
||||
if (settingsInstance) {
|
||||
settingsInstance.loadData();
|
||||
@@ -21,7 +21,7 @@ define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySett
|
||||
settingsInstance = new DisplaySettings({
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".settingsContainer"),
|
||||
element: view.querySelector('.settingsContainer'),
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
@@ -29,18 +29,18 @@ define(["displaySettings", "userSettings", "autoFocuser"], function (DisplaySett
|
||||
});
|
||||
}
|
||||
});
|
||||
view.addEventListener("change", function () {
|
||||
view.addEventListener('change', function () {
|
||||
hasChanges = true;
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function () {
|
||||
window.removeEventListener("beforeunload", onBeforeUnload);
|
||||
view.addEventListener('viewbeforehide', function () {
|
||||
window.removeEventListener('beforeunload', onBeforeUnload);
|
||||
hasChanges = false;
|
||||
|
||||
if (settingsInstance) {
|
||||
settingsInstance.submit();
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
if (settingsInstance) {
|
||||
settingsInstance.destroy();
|
||||
settingsInstance = null;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
define(["homescreenSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (HomescreenSettings, dom, globalize, loading, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
define(['homescreenSettings', 'dom', 'globalize', 'loading', 'userSettings', 'autoFocuser', 'listViewStyle'], function (HomescreenSettings, dom, globalize, loading, userSettings, autoFocuser) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
function onBeforeUnload(e) {
|
||||
if (hasChanges) {
|
||||
e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
|
||||
e.returnValue = 'You currently have unsaved changes. Are you sure you wish to leave?';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ define(["homescreenSettings", "dom", "globalize", "loading", "userSettings", "au
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
view.addEventListener('viewshow', function () {
|
||||
window.addEventListener('beforeunload', onBeforeUnload);
|
||||
|
||||
if (homescreenSettingsInstance) {
|
||||
homescreenSettingsInstance.loadData();
|
||||
@@ -21,7 +21,7 @@ define(["homescreenSettings", "dom", "globalize", "loading", "userSettings", "au
|
||||
homescreenSettingsInstance = new HomescreenSettings({
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".homeScreenSettingsContainer"),
|
||||
element: view.querySelector('.homeScreenSettingsContainer'),
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
@@ -29,17 +29,17 @@ define(["homescreenSettings", "dom", "globalize", "loading", "userSettings", "au
|
||||
});
|
||||
}
|
||||
});
|
||||
view.addEventListener("change", function () {
|
||||
view.addEventListener('change', function () {
|
||||
hasChanges = true;
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function () {
|
||||
view.addEventListener('viewbeforehide', function () {
|
||||
hasChanges = false;
|
||||
|
||||
if (homescreenSettingsInstance) {
|
||||
homescreenSettingsInstance.submit();
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
if (homescreenSettingsInstance) {
|
||||
homescreenSettingsInstance.destroy();
|
||||
homescreenSettingsInstance = null;
|
||||
|
||||
@@ -1,62 +1,62 @@
|
||||
define(["apphost", "connectionManager", "layoutManager", "listViewStyle", "emby-button"], function(appHost, connectionManager, layoutManager) {
|
||||
"use strict";
|
||||
define(['apphost', 'connectionManager', 'layoutManager', 'listViewStyle', 'emby-button'], function(appHost, connectionManager, layoutManager) {
|
||||
'use strict';
|
||||
|
||||
return function(view, params) {
|
||||
view.querySelector(".btnLogout").addEventListener("click", function() {
|
||||
view.querySelector('.btnLogout').addEventListener('click', function() {
|
||||
Dashboard.logout();
|
||||
});
|
||||
|
||||
view.querySelector(".selectServer").addEventListener("click", function () {
|
||||
view.querySelector('.selectServer').addEventListener('click', function () {
|
||||
Dashboard.selectServer();
|
||||
});
|
||||
|
||||
view.querySelector(".clientSettings").addEventListener("click", function () {
|
||||
view.querySelector('.clientSettings').addEventListener('click', function () {
|
||||
window.NativeShell.openClientSettings();
|
||||
});
|
||||
|
||||
view.addEventListener("viewshow", function() {
|
||||
view.addEventListener('viewshow', function() {
|
||||
// this page can also be used by admins to change user preferences from the user edit page
|
||||
var userId = params.userId || Dashboard.getCurrentUserId();
|
||||
var page = this;
|
||||
|
||||
page.querySelector(".lnkMyProfile").setAttribute("href", "myprofile.html?userId=" + userId);
|
||||
page.querySelector(".lnkDisplayPreferences").setAttribute("href", "mypreferencesdisplay.html?userId=" + userId);
|
||||
page.querySelector(".lnkHomePreferences").setAttribute("href", "mypreferenceshome.html?userId=" + userId);
|
||||
page.querySelector(".lnkPlaybackPreferences").setAttribute("href", "mypreferencesplayback.html?userId=" + userId);
|
||||
page.querySelector(".lnkSubtitlePreferences").setAttribute("href", "mypreferencessubtitles.html?userId=" + userId);
|
||||
page.querySelector('.lnkMyProfile').setAttribute('href', 'myprofile.html?userId=' + userId);
|
||||
page.querySelector('.lnkDisplayPreferences').setAttribute('href', 'mypreferencesdisplay.html?userId=' + userId);
|
||||
page.querySelector('.lnkHomePreferences').setAttribute('href', 'mypreferenceshome.html?userId=' + userId);
|
||||
page.querySelector('.lnkPlaybackPreferences').setAttribute('href', 'mypreferencesplayback.html?userId=' + userId);
|
||||
page.querySelector('.lnkSubtitlePreferences').setAttribute('href', 'mypreferencessubtitles.html?userId=' + userId);
|
||||
|
||||
if (window.NativeShell && window.NativeShell.AppHost.supports("clientsettings")) {
|
||||
page.querySelector(".clientSettings").classList.remove("hide");
|
||||
if (window.NativeShell && window.NativeShell.AppHost.supports('clientsettings')) {
|
||||
page.querySelector('.clientSettings').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".clientSettings").classList.add("hide");
|
||||
page.querySelector('.clientSettings').classList.add('hide');
|
||||
}
|
||||
|
||||
if (appHost.supports("multiserver")) {
|
||||
page.querySelector(".selectServer").classList.remove("hide");
|
||||
if (appHost.supports('multiserver')) {
|
||||
page.querySelector('.selectServer').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".selectServer").classList.add("hide");
|
||||
page.querySelector('.selectServer').classList.add('hide');
|
||||
}
|
||||
|
||||
// hide the actions if user preferences are being edited for a different user
|
||||
if (params.userId && params.userId !== Dashboard.getCurrentUserId) {
|
||||
page.querySelector(".userSection").classList.add("hide");
|
||||
page.querySelector(".adminSection").classList.add("hide");
|
||||
page.querySelector('.userSection').classList.add('hide');
|
||||
page.querySelector('.adminSection').classList.add('hide');
|
||||
}
|
||||
|
||||
if (layoutManager.mobile) {
|
||||
page.querySelector(".headerUsername").classList.add("hide");
|
||||
page.querySelector(".adminSection").classList.add("hide");
|
||||
page.querySelector(".userSection").classList.add("hide");
|
||||
page.querySelector('.headerUsername').classList.add('hide');
|
||||
page.querySelector('.adminSection').classList.add('hide');
|
||||
page.querySelector('.userSection').classList.add('hide');
|
||||
}
|
||||
|
||||
ApiClient.getUser(userId).then(function(user) {
|
||||
page.querySelector(".headerUsername").innerHTML = user.Name;
|
||||
page.querySelector('.headerUsername').innerHTML = user.Name;
|
||||
if (!user.Policy.IsAdministrator) {
|
||||
page.querySelector(".adminSection").classList.add("hide");
|
||||
page.querySelector('.adminSection').classList.add('hide');
|
||||
}
|
||||
});
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(view);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
define(["playbackSettings", "dom", "globalize", "loading", "userSettings", "autoFocuser", "listViewStyle"], function (PlaybackSettings, dom, globalize, loading, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
define(['playbackSettings', 'dom', 'globalize', 'loading', 'userSettings', 'autoFocuser', 'listViewStyle'], function (PlaybackSettings, dom, globalize, loading, userSettings, autoFocuser) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
function onBeforeUnload(e) {
|
||||
if (hasChanges) {
|
||||
e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
|
||||
e.returnValue = 'You currently have unsaved changes. Are you sure you wish to leave?';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ define(["playbackSettings", "dom", "globalize", "loading", "userSettings", "auto
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
view.addEventListener('viewshow', function () {
|
||||
window.addEventListener('beforeunload', onBeforeUnload);
|
||||
|
||||
if (settingsInstance) {
|
||||
settingsInstance.loadData();
|
||||
@@ -21,7 +21,7 @@ define(["playbackSettings", "dom", "globalize", "loading", "userSettings", "auto
|
||||
settingsInstance = new PlaybackSettings({
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".settingsContainer"),
|
||||
element: view.querySelector('.settingsContainer'),
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
@@ -29,17 +29,17 @@ define(["playbackSettings", "dom", "globalize", "loading", "userSettings", "auto
|
||||
});
|
||||
}
|
||||
});
|
||||
view.addEventListener("change", function () {
|
||||
view.addEventListener('change', function () {
|
||||
hasChanges = true;
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function () {
|
||||
view.addEventListener('viewbeforehide', function () {
|
||||
hasChanges = false;
|
||||
|
||||
if (settingsInstance) {
|
||||
settingsInstance.submit();
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
if (settingsInstance) {
|
||||
settingsInstance.destroy();
|
||||
settingsInstance = null;
|
||||
|
||||
@@ -1,31 +1,31 @@
|
||||
define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "globalize", "emby-button"], function (UserPasswordPage, loading, libraryMenu, appHost, globalize) {
|
||||
"use strict";
|
||||
define(['controllers/userpasswordpage', 'loading', 'libraryMenu', 'apphost', 'globalize', 'emby-button'], function (UserPasswordPage, loading, libraryMenu, appHost, globalize) {
|
||||
'use strict';
|
||||
|
||||
function reloadUser(page) {
|
||||
var userId = getParameterByName("userId");
|
||||
var userId = getParameterByName('userId');
|
||||
loading.show();
|
||||
ApiClient.getUser(userId).then(function (user) {
|
||||
page.querySelector(".username").innerHTML = user.Name;
|
||||
page.querySelector('.username').innerHTML = user.Name;
|
||||
libraryMenu.setTitle(user.Name);
|
||||
|
||||
var imageUrl = "assets/img/avatar.png";
|
||||
var imageUrl = 'assets/img/avatar.png';
|
||||
if (user.PrimaryImageTag) {
|
||||
imageUrl = ApiClient.getUserImageUrl(user.Id, {
|
||||
tag: user.PrimaryImageTag,
|
||||
type: "Primary"
|
||||
type: 'Primary'
|
||||
});
|
||||
}
|
||||
|
||||
var userImage = page.querySelector("#image");
|
||||
userImage.style.backgroundImage = "url(" + imageUrl + ")";
|
||||
var userImage = page.querySelector('#image');
|
||||
userImage.style.backgroundImage = 'url(' + imageUrl + ')';
|
||||
|
||||
Dashboard.getCurrentUser().then(function (loggedInUser) {
|
||||
if (user.PrimaryImageTag) {
|
||||
page.querySelector("#btnAddImage").classList.add("hide");
|
||||
page.querySelector("#btnDeleteImage").classList.remove("hide");
|
||||
} else if (appHost.supports("fileinput") && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
|
||||
page.querySelector("#btnDeleteImage").classList.add("hide");
|
||||
page.querySelector("#btnAddImage").classList.remove("hide");
|
||||
page.querySelector('#btnAddImage').classList.add('hide');
|
||||
page.querySelector('#btnDeleteImage').classList.remove('hide');
|
||||
} else if (appHost.supports('fileinput') && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
|
||||
page.querySelector('#btnDeleteImage').classList.add('hide');
|
||||
page.querySelector('#btnAddImage').classList.remove('hide');
|
||||
}
|
||||
});
|
||||
loading.hide();
|
||||
@@ -36,8 +36,8 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "gl
|
||||
loading.hide();
|
||||
switch (evt.target.error.code) {
|
||||
case evt.target.error.NOT_FOUND_ERR:
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("FileNotFound"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('FileNotFound'));
|
||||
});
|
||||
break;
|
||||
case evt.target.error.ABORT_ERR:
|
||||
@@ -45,24 +45,24 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "gl
|
||||
break;
|
||||
case evt.target.error.NOT_READABLE_ERR:
|
||||
default:
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("FileReadError"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('FileReadError'));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function onFileReaderAbort(evt) {
|
||||
loading.hide();
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("FileReadCancelled"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('FileReadCancelled'));
|
||||
});
|
||||
}
|
||||
|
||||
function setFiles(page, files) {
|
||||
var userImage = page.querySelector("#image");
|
||||
var userImage = page.querySelector('#image');
|
||||
var file = files[0];
|
||||
|
||||
if (!file || !file.type.match("image.*")) {
|
||||
if (!file || !file.type.match('image.*')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -70,9 +70,9 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "gl
|
||||
reader.onerror = onFileReaderError;
|
||||
reader.onabort = onFileReaderAbort;
|
||||
reader.onload = function (evt) {
|
||||
userImage.style.backgroundImage = "url(" + evt.target.result + ")";
|
||||
var userId = getParameterByName("userId");
|
||||
ApiClient.uploadUserImage(userId, "Primary", file).then(function () {
|
||||
userImage.style.backgroundImage = 'url(' + evt.target.result + ')';
|
||||
var userId = getParameterByName('userId');
|
||||
ApiClient.uploadUserImage(userId, 'Primary', file).then(function () {
|
||||
loading.hide();
|
||||
reloadUser(page);
|
||||
});
|
||||
@@ -84,22 +84,22 @@ define(["controllers/userpasswordpage", "loading", "libraryMenu", "apphost", "gl
|
||||
return function (view, params) {
|
||||
reloadUser(view);
|
||||
new UserPasswordPage(view, params);
|
||||
view.querySelector("#btnDeleteImage").addEventListener("click", function () {
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(globalize.translate("DeleteImageConfirmation"), globalize.translate("DeleteImage")).then(function () {
|
||||
view.querySelector('#btnDeleteImage').addEventListener('click', function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(globalize.translate('DeleteImageConfirmation'), globalize.translate('DeleteImage')).then(function () {
|
||||
loading.show();
|
||||
var userId = getParameterByName("userId");
|
||||
ApiClient.deleteUserImage(userId, "primary").then(function () {
|
||||
var userId = getParameterByName('userId');
|
||||
ApiClient.deleteUserImage(userId, 'primary').then(function () {
|
||||
loading.hide();
|
||||
reloadUser(view);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
view.querySelector("#btnAddImage").addEventListener("click", function (evt) {
|
||||
view.querySelector("#uploadImage").click();
|
||||
view.querySelector('#btnAddImage').addEventListener('click', function (evt) {
|
||||
view.querySelector('#uploadImage').click();
|
||||
});
|
||||
view.querySelector("#uploadImage").addEventListener("change", function (evt) {
|
||||
view.querySelector('#uploadImage').addEventListener('change', function (evt) {
|
||||
setFiles(view, evt.target.files);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSettings, userSettings, autoFocuser) {
|
||||
"use strict";
|
||||
define(['subtitleSettings', 'userSettings', 'autoFocuser'], function (SubtitleSettings, userSettings, autoFocuser) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
function onBeforeUnload(e) {
|
||||
if (hasChanges) {
|
||||
e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
|
||||
e.returnValue = 'You currently have unsaved changes. Are you sure you wish to leave?';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,8 +12,8 @@ define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSe
|
||||
var hasChanges;
|
||||
var userId = params.userId || ApiClient.getCurrentUserId();
|
||||
var currentSettings = userId === ApiClient.getCurrentUserId() ? userSettings : new userSettings();
|
||||
view.addEventListener("viewshow", function () {
|
||||
window.addEventListener("beforeunload", onBeforeUnload);
|
||||
view.addEventListener('viewshow', function () {
|
||||
window.addEventListener('beforeunload', onBeforeUnload);
|
||||
|
||||
if (subtitleSettingsInstance) {
|
||||
subtitleSettingsInstance.loadData();
|
||||
@@ -21,7 +21,7 @@ define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSe
|
||||
subtitleSettingsInstance = new SubtitleSettings({
|
||||
serverId: ApiClient.serverId(),
|
||||
userId: userId,
|
||||
element: view.querySelector(".settingsContainer"),
|
||||
element: view.querySelector('.settingsContainer'),
|
||||
userSettings: currentSettings,
|
||||
enableSaveButton: false,
|
||||
enableSaveConfirmation: false,
|
||||
@@ -29,17 +29,17 @@ define(["subtitleSettings", "userSettings", "autoFocuser"], function (SubtitleSe
|
||||
});
|
||||
}
|
||||
});
|
||||
view.addEventListener("change", function () {
|
||||
view.addEventListener('change', function () {
|
||||
hasChanges = true;
|
||||
});
|
||||
view.addEventListener("viewbeforehide", function () {
|
||||
view.addEventListener('viewbeforehide', function () {
|
||||
hasChanges = false;
|
||||
|
||||
if (subtitleSettingsInstance) {
|
||||
subtitleSettingsInstance.submit();
|
||||
}
|
||||
});
|
||||
view.addEventListener("viewdestroy", function () {
|
||||
view.addEventListener('viewdestroy', function () {
|
||||
if (subtitleSettingsInstance) {
|
||||
subtitleSettingsInstance.destroy();
|
||||
subtitleSettingsInstance = null;
|
||||
|
||||
+88
-88
@@ -1,8 +1,8 @@
|
||||
define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function ($, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'fnchecked'], function ($, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadDeleteFolders(page, user, mediaFolders) {
|
||||
ApiClient.getJSON(ApiClient.getUrl("Channels", {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Channels', {
|
||||
SupportsMediaDeletion: true
|
||||
})).then(function (channelsResult) {
|
||||
var i;
|
||||
@@ -10,140 +10,140 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
var folder;
|
||||
var isChecked;
|
||||
var checkedAttribute;
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (i = 0, length = mediaFolders.length; i < length; i++) {
|
||||
folder = mediaFolders[i];
|
||||
isChecked = user.Policy.EnableContentDeletion || -1 != user.Policy.EnableContentDeletionFromFolders.indexOf(folder.Id);
|
||||
checkedAttribute = isChecked ? ' checked="checked"' : "";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + "><span>" + folder.Name + "</span></label>";
|
||||
checkedAttribute = isChecked ? ' checked="checked"' : '';
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + '><span>' + folder.Name + '</span></label>';
|
||||
}
|
||||
|
||||
for (i = 0, length = channelsResult.Items.length; i < length; i++) {
|
||||
folder = channelsResult.Items[i];
|
||||
isChecked = user.Policy.EnableContentDeletion || -1 != user.Policy.EnableContentDeletionFromFolders.indexOf(folder.Id);
|
||||
checkedAttribute = isChecked ? ' checked="checked"' : "";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + "><span>" + folder.Name + "</span></label>";
|
||||
checkedAttribute = isChecked ? ' checked="checked"' : '';
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + '><span>' + folder.Name + '</span></label>';
|
||||
}
|
||||
|
||||
$(".deleteAccess", page).html(html).trigger("create");
|
||||
$("#chkEnableDeleteAllFolders", page).checked(user.Policy.EnableContentDeletion).trigger("change");
|
||||
$('.deleteAccess', page).html(html).trigger('create');
|
||||
$('#chkEnableDeleteAllFolders', page).checked(user.Policy.EnableContentDeletion).trigger('change');
|
||||
});
|
||||
}
|
||||
|
||||
function loadAuthProviders(page, user, providers) {
|
||||
if (providers.length > 1) {
|
||||
page.querySelector(".fldSelectLoginProvider").classList.remove("hide");
|
||||
page.querySelector('.fldSelectLoginProvider').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".fldSelectLoginProvider").classList.add("hide");
|
||||
page.querySelector('.fldSelectLoginProvider').classList.add('hide');
|
||||
}
|
||||
|
||||
var currentProviderId = user.Policy.AuthenticationProviderId;
|
||||
page.querySelector(".selectLoginProvider").innerHTML = providers.map(function (provider) {
|
||||
var selected = provider.Id === currentProviderId || providers.length < 2 ? " selected" : "";
|
||||
return '<option value="' + provider.Id + '"' + selected + ">" + provider.Name + "</option>";
|
||||
page.querySelector('.selectLoginProvider').innerHTML = providers.map(function (provider) {
|
||||
var selected = provider.Id === currentProviderId || providers.length < 2 ? ' selected' : '';
|
||||
return '<option value="' + provider.Id + '"' + selected + '>' + provider.Name + '</option>';
|
||||
});
|
||||
}
|
||||
|
||||
function loadPasswordResetProviders(page, user, providers) {
|
||||
if (providers.length > 1) {
|
||||
page.querySelector(".fldSelectPasswordResetProvider").classList.remove("hide");
|
||||
page.querySelector('.fldSelectPasswordResetProvider').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".fldSelectPasswordResetProvider").classList.add("hide");
|
||||
page.querySelector('.fldSelectPasswordResetProvider').classList.add('hide');
|
||||
}
|
||||
|
||||
var currentProviderId = user.Policy.PasswordResetProviderId;
|
||||
page.querySelector(".selectPasswordResetProvider").innerHTML = providers.map(function (provider) {
|
||||
var selected = provider.Id === currentProviderId || providers.length < 2 ? " selected" : "";
|
||||
return '<option value="' + provider.Id + '"' + selected + ">" + provider.Name + "</option>";
|
||||
page.querySelector('.selectPasswordResetProvider').innerHTML = providers.map(function (provider) {
|
||||
var selected = provider.Id === currentProviderId || providers.length < 2 ? ' selected' : '';
|
||||
return '<option value="' + provider.Id + '"' + selected + '>' + provider.Name + '</option>';
|
||||
});
|
||||
}
|
||||
|
||||
function loadUser(page, user) {
|
||||
currentUser = user;
|
||||
ApiClient.getJSON(ApiClient.getUrl("Auth/Providers")).then(function (providers) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Auth/Providers')).then(function (providers) {
|
||||
loadAuthProviders(page, user, providers);
|
||||
});
|
||||
ApiClient.getJSON(ApiClient.getUrl("Auth/PasswordResetProviders")).then(function (providers) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Auth/PasswordResetProviders')).then(function (providers) {
|
||||
loadPasswordResetProviders(page, user, providers);
|
||||
});
|
||||
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
|
||||
IsHidden: false
|
||||
})).then(function (folders) {
|
||||
loadDeleteFolders(page, user, folders.Items);
|
||||
});
|
||||
|
||||
if (user.Policy.IsDisabled) {
|
||||
$(".disabledUserBanner", page).show();
|
||||
$('.disabledUserBanner', page).show();
|
||||
} else {
|
||||
$(".disabledUserBanner", page).hide();
|
||||
$('.disabledUserBanner', page).hide();
|
||||
}
|
||||
|
||||
$("#txtUserName", page).prop("disabled", "").removeAttr("disabled");
|
||||
$("#fldConnectInfo", page).show();
|
||||
$(".lnkEditUserPreferences", page).attr("href", "mypreferencesmenu.html?userId=" + user.Id);
|
||||
$('#txtUserName', page).prop('disabled', '').removeAttr('disabled');
|
||||
$('#fldConnectInfo', page).show();
|
||||
$('.lnkEditUserPreferences', page).attr('href', 'mypreferencesmenu.html?userId=' + user.Id);
|
||||
libraryMenu.setTitle(user.Name);
|
||||
page.querySelector(".username").innerHTML = user.Name;
|
||||
$("#txtUserName", page).val(user.Name);
|
||||
$("#chkIsAdmin", page).checked(user.Policy.IsAdministrator);
|
||||
$("#chkDisabled", page).checked(user.Policy.IsDisabled);
|
||||
$("#chkIsHidden", page).checked(user.Policy.IsHidden);
|
||||
$("#chkRemoteControlSharedDevices", page).checked(user.Policy.EnableSharedDeviceControl);
|
||||
$("#chkEnableRemoteControlOtherUsers", page).checked(user.Policy.EnableRemoteControlOfOtherUsers);
|
||||
$("#chkEnableDownloading", page).checked(user.Policy.EnableContentDownloading);
|
||||
$("#chkManageLiveTv", page).checked(user.Policy.EnableLiveTvManagement);
|
||||
$("#chkEnableLiveTvAccess", page).checked(user.Policy.EnableLiveTvAccess);
|
||||
$("#chkEnableMediaPlayback", page).checked(user.Policy.EnableMediaPlayback);
|
||||
$("#chkEnableAudioPlaybackTranscoding", page).checked(user.Policy.EnableAudioPlaybackTranscoding);
|
||||
$("#chkEnableVideoPlaybackTranscoding", page).checked(user.Policy.EnableVideoPlaybackTranscoding);
|
||||
$("#chkEnableVideoPlaybackRemuxing", page).checked(user.Policy.EnablePlaybackRemuxing);
|
||||
$("#chkForceRemoteSourceTranscoding", page).checked(user.Policy.ForceRemoteSourceTranscoding);
|
||||
$("#chkRemoteAccess", page).checked(null == user.Policy.EnableRemoteAccess || user.Policy.EnableRemoteAccess);
|
||||
$("#chkEnableSyncTranscoding", page).checked(user.Policy.EnableSyncTranscoding);
|
||||
$("#chkEnableConversion", page).checked(user.Policy.EnableMediaConversion || false);
|
||||
$("#chkEnableSharing", page).checked(user.Policy.EnablePublicSharing);
|
||||
$("#txtRemoteClientBitrateLimit", page).val(user.Policy.RemoteClientBitrateLimit / 1e6 || "");
|
||||
$("#txtLoginAttemptsBeforeLockout", page).val(user.Policy.LoginAttemptsBeforeLockout || "0");
|
||||
page.querySelector('.username').innerHTML = user.Name;
|
||||
$('#txtUserName', page).val(user.Name);
|
||||
$('#chkIsAdmin', page).checked(user.Policy.IsAdministrator);
|
||||
$('#chkDisabled', page).checked(user.Policy.IsDisabled);
|
||||
$('#chkIsHidden', page).checked(user.Policy.IsHidden);
|
||||
$('#chkRemoteControlSharedDevices', page).checked(user.Policy.EnableSharedDeviceControl);
|
||||
$('#chkEnableRemoteControlOtherUsers', page).checked(user.Policy.EnableRemoteControlOfOtherUsers);
|
||||
$('#chkEnableDownloading', page).checked(user.Policy.EnableContentDownloading);
|
||||
$('#chkManageLiveTv', page).checked(user.Policy.EnableLiveTvManagement);
|
||||
$('#chkEnableLiveTvAccess', page).checked(user.Policy.EnableLiveTvAccess);
|
||||
$('#chkEnableMediaPlayback', page).checked(user.Policy.EnableMediaPlayback);
|
||||
$('#chkEnableAudioPlaybackTranscoding', page).checked(user.Policy.EnableAudioPlaybackTranscoding);
|
||||
$('#chkEnableVideoPlaybackTranscoding', page).checked(user.Policy.EnableVideoPlaybackTranscoding);
|
||||
$('#chkEnableVideoPlaybackRemuxing', page).checked(user.Policy.EnablePlaybackRemuxing);
|
||||
$('#chkForceRemoteSourceTranscoding', page).checked(user.Policy.ForceRemoteSourceTranscoding);
|
||||
$('#chkRemoteAccess', page).checked(null == user.Policy.EnableRemoteAccess || user.Policy.EnableRemoteAccess);
|
||||
$('#chkEnableSyncTranscoding', page).checked(user.Policy.EnableSyncTranscoding);
|
||||
$('#chkEnableConversion', page).checked(user.Policy.EnableMediaConversion || false);
|
||||
$('#chkEnableSharing', page).checked(user.Policy.EnablePublicSharing);
|
||||
$('#txtRemoteClientBitrateLimit', page).val(user.Policy.RemoteClientBitrateLimit / 1e6 || '');
|
||||
$('#txtLoginAttemptsBeforeLockout', page).val(user.Policy.LoginAttemptsBeforeLockout || '0');
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function onSaveComplete(page, user) {
|
||||
Dashboard.navigate("userprofiles.html");
|
||||
Dashboard.navigate('userprofiles.html');
|
||||
loading.hide();
|
||||
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("SettingsSaved"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('SettingsSaved'));
|
||||
});
|
||||
}
|
||||
|
||||
function saveUser(user, page) {
|
||||
user.Name = $("#txtUserName", page).val();
|
||||
user.Policy.IsAdministrator = $("#chkIsAdmin", page).checked();
|
||||
user.Policy.IsHidden = $("#chkIsHidden", page).checked();
|
||||
user.Policy.IsDisabled = $("#chkDisabled", page).checked();
|
||||
user.Policy.EnableRemoteControlOfOtherUsers = $("#chkEnableRemoteControlOtherUsers", page).checked();
|
||||
user.Policy.EnableLiveTvManagement = $("#chkManageLiveTv", page).checked();
|
||||
user.Policy.EnableLiveTvAccess = $("#chkEnableLiveTvAccess", page).checked();
|
||||
user.Policy.EnableSharedDeviceControl = $("#chkRemoteControlSharedDevices", page).checked();
|
||||
user.Policy.EnableMediaPlayback = $("#chkEnableMediaPlayback", page).checked();
|
||||
user.Policy.EnableAudioPlaybackTranscoding = $("#chkEnableAudioPlaybackTranscoding", page).checked();
|
||||
user.Policy.EnableVideoPlaybackTranscoding = $("#chkEnableVideoPlaybackTranscoding", page).checked();
|
||||
user.Policy.EnablePlaybackRemuxing = $("#chkEnableVideoPlaybackRemuxing", page).checked();
|
||||
user.Policy.ForceRemoteSourceTranscoding = $("#chkForceRemoteSourceTranscoding", page).checked();
|
||||
user.Policy.EnableContentDownloading = $("#chkEnableDownloading", page).checked();
|
||||
user.Policy.EnableSyncTranscoding = $("#chkEnableSyncTranscoding", page).checked();
|
||||
user.Policy.EnableMediaConversion = $("#chkEnableConversion", page).checked();
|
||||
user.Policy.EnablePublicSharing = $("#chkEnableSharing", page).checked();
|
||||
user.Policy.EnableRemoteAccess = $("#chkRemoteAccess", page).checked();
|
||||
user.Policy.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($("#txtRemoteClientBitrateLimit", page).val() || "0"));
|
||||
user.Policy.LoginAttemptsBeforeLockout = parseInt($("#txtLoginAttemptsBeforeLockout", page).val() || "0");
|
||||
user.Policy.AuthenticationProviderId = page.querySelector(".selectLoginProvider").value;
|
||||
user.Policy.PasswordResetProviderId = page.querySelector(".selectPasswordResetProvider").value;
|
||||
user.Policy.EnableContentDeletion = $("#chkEnableDeleteAllFolders", page).checked();
|
||||
user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : $(".chkFolder", page).get().filter(function (c) {
|
||||
user.Name = $('#txtUserName', page).val();
|
||||
user.Policy.IsAdministrator = $('#chkIsAdmin', page).checked();
|
||||
user.Policy.IsHidden = $('#chkIsHidden', page).checked();
|
||||
user.Policy.IsDisabled = $('#chkDisabled', page).checked();
|
||||
user.Policy.EnableRemoteControlOfOtherUsers = $('#chkEnableRemoteControlOtherUsers', page).checked();
|
||||
user.Policy.EnableLiveTvManagement = $('#chkManageLiveTv', page).checked();
|
||||
user.Policy.EnableLiveTvAccess = $('#chkEnableLiveTvAccess', page).checked();
|
||||
user.Policy.EnableSharedDeviceControl = $('#chkRemoteControlSharedDevices', page).checked();
|
||||
user.Policy.EnableMediaPlayback = $('#chkEnableMediaPlayback', page).checked();
|
||||
user.Policy.EnableAudioPlaybackTranscoding = $('#chkEnableAudioPlaybackTranscoding', page).checked();
|
||||
user.Policy.EnableVideoPlaybackTranscoding = $('#chkEnableVideoPlaybackTranscoding', page).checked();
|
||||
user.Policy.EnablePlaybackRemuxing = $('#chkEnableVideoPlaybackRemuxing', page).checked();
|
||||
user.Policy.ForceRemoteSourceTranscoding = $('#chkForceRemoteSourceTranscoding', page).checked();
|
||||
user.Policy.EnableContentDownloading = $('#chkEnableDownloading', page).checked();
|
||||
user.Policy.EnableSyncTranscoding = $('#chkEnableSyncTranscoding', page).checked();
|
||||
user.Policy.EnableMediaConversion = $('#chkEnableConversion', page).checked();
|
||||
user.Policy.EnablePublicSharing = $('#chkEnableSharing', page).checked();
|
||||
user.Policy.EnableRemoteAccess = $('#chkRemoteAccess', page).checked();
|
||||
user.Policy.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($('#txtRemoteClientBitrateLimit', page).val() || '0'));
|
||||
user.Policy.LoginAttemptsBeforeLockout = parseInt($('#txtLoginAttemptsBeforeLockout', page).val() || '0');
|
||||
user.Policy.AuthenticationProviderId = page.querySelector('.selectLoginProvider').value;
|
||||
user.Policy.PasswordResetProviderId = page.querySelector('.selectPasswordResetProvider').value;
|
||||
user.Policy.EnableContentDeletion = $('#chkEnableDeleteAllFolders', page).checked();
|
||||
user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : $('.chkFolder', page).get().filter(function (c) {
|
||||
return c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-id");
|
||||
return c.getAttribute('data-id');
|
||||
});
|
||||
ApiClient.updateUser(user).then(function () {
|
||||
ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
|
||||
@@ -153,7 +153,7 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
var page = $(this).parents(".page")[0];
|
||||
var page = $(this).parents('.page')[0];
|
||||
loading.show();
|
||||
getUser().then(function (result) {
|
||||
saveUser(result, page);
|
||||
@@ -162,7 +162,7 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
}
|
||||
|
||||
function getUser() {
|
||||
var userId = getParameterByName("userId");
|
||||
var userId = getParameterByName('userId');
|
||||
return ApiClient.getUser(userId);
|
||||
}
|
||||
|
||||
@@ -174,25 +174,25 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
}
|
||||
|
||||
var currentUser;
|
||||
$(document).on("pageinit", "#editUserPage", function () {
|
||||
$(".editUserProfileForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
this.querySelector(".sharingHelp").innerHTML = globalize.translate("OptionAllowLinkSharingHelp", 30);
|
||||
$(document).on('pageinit', '#editUserPage', function () {
|
||||
$('.editUserProfileForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
this.querySelector('.sharingHelp').innerHTML = globalize.translate('OptionAllowLinkSharingHelp', 30);
|
||||
var page = this;
|
||||
$("#chkEnableDeleteAllFolders", this).on("change", function () {
|
||||
$('#chkEnableDeleteAllFolders', this).on('change', function () {
|
||||
if (this.checked) {
|
||||
$(".deleteAccess", page).hide();
|
||||
$('.deleteAccess', page).hide();
|
||||
} else {
|
||||
$(".deleteAccess", page).show();
|
||||
$('.deleteAccess', page).show();
|
||||
}
|
||||
});
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
if (config.EnableRemoteAccess) {
|
||||
page.querySelector(".fldRemoteAccess").classList.remove("hide");
|
||||
page.querySelector('.fldRemoteAccess').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".fldRemoteAccess").classList.add("hide");
|
||||
page.querySelector('.fldRemoteAccess').classList.add('hide');
|
||||
}
|
||||
});
|
||||
}).on("pagebeforeshow", "#editUserPage", function () {
|
||||
}).on('pagebeforeshow', '#editUserPage', function () {
|
||||
loadData(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function ($, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'fnchecked'], function ($, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function triggerChange(select) {
|
||||
var evt = document.createEvent("HTMLEvents");
|
||||
evt.initEvent("change", false, true);
|
||||
var evt = document.createEvent('HTMLEvents');
|
||||
evt.initEvent('change', false, true);
|
||||
select.dispatchEvent(evt);
|
||||
}
|
||||
|
||||
function loadMediaFolders(page, user, mediaFolders) {
|
||||
var html = "";
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderLibraries") + "</h3>";
|
||||
var html = '';
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderLibraries') + '</h3>';
|
||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||
|
||||
for (var i = 0, length = mediaFolders.length; i < length; i++) {
|
||||
var folder = mediaFolders[i];
|
||||
var isChecked = user.Policy.EnableAllFolders || -1 != user.Policy.EnabledFolders.indexOf(folder.Id);
|
||||
var checkedAttribute = isChecked ? ' checked="checked"' : "";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + "><span>" + folder.Name + "</span></label>";
|
||||
var checkedAttribute = isChecked ? ' checked="checked"' : '';
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" ' + checkedAttribute + '><span>' + folder.Name + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
page.querySelector(".folderAccess").innerHTML = html;
|
||||
var chkEnableAllFolders = page.querySelector("#chkEnableAllFolders");
|
||||
html += '</div>';
|
||||
page.querySelector('.folderAccess').innerHTML = html;
|
||||
var chkEnableAllFolders = page.querySelector('#chkEnableAllFolders');
|
||||
chkEnableAllFolders.checked = user.Policy.EnableAllFolders;
|
||||
triggerChange(chkEnableAllFolders);
|
||||
}
|
||||
|
||||
function loadChannels(page, user, channels) {
|
||||
var html = "";
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderChannels") + "</h3>";
|
||||
var html = '';
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderChannels') + '</h3>';
|
||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||
|
||||
for (var i = 0, length = channels.length; i < length; i++) {
|
||||
var folder = channels[i];
|
||||
var isChecked = user.Policy.EnableAllChannels || -1 != user.Policy.EnabledChannels.indexOf(folder.Id);
|
||||
var checkedAttribute = isChecked ? ' checked="checked"' : "";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkChannel" data-id="' + folder.Id + '" ' + checkedAttribute + "><span>" + folder.Name + "</span></label>";
|
||||
var checkedAttribute = isChecked ? ' checked="checked"' : '';
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkChannel" data-id="' + folder.Id + '" ' + checkedAttribute + '><span>' + folder.Name + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
$(".channelAccess", page).show().html(html);
|
||||
html += '</div>';
|
||||
$('.channelAccess', page).show().html(html);
|
||||
|
||||
if (channels.length) {
|
||||
$(".channelAccessContainer", page).show();
|
||||
$('.channelAccessContainer', page).show();
|
||||
} else {
|
||||
$(".channelAccessContainer", page).hide();
|
||||
$('.channelAccessContainer', page).hide();
|
||||
}
|
||||
|
||||
$("#chkEnableAllChannels", page).checked(user.Policy.EnableAllChannels).trigger("change");
|
||||
$('#chkEnableAllChannels', page).checked(user.Policy.EnableAllChannels).trigger('change');
|
||||
}
|
||||
|
||||
function loadDevices(page, user, devices) {
|
||||
var html = "";
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderDevices") + "</h3>";
|
||||
var html = '';
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderDevices') + '</h3>';
|
||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||
|
||||
for (var i = 0, length = devices.length; i < length; i++) {
|
||||
var device = devices[i];
|
||||
var checkedAttribute = user.Policy.EnableAllDevices || -1 != user.Policy.EnabledDevices.indexOf(device.Id) ? ' checked="checked"' : "";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkDevice" data-id="' + device.Id + '" ' + checkedAttribute + "><span>" + device.Name + " - " + device.AppName + "</span></label>";
|
||||
var checkedAttribute = user.Policy.EnableAllDevices || -1 != user.Policy.EnabledDevices.indexOf(device.Id) ? ' checked="checked"' : '';
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkDevice" data-id="' + device.Id + '" ' + checkedAttribute + '><span>' + device.Name + ' - ' + device.AppName + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
$(".deviceAccess", page).show().html(html);
|
||||
$("#chkEnableAllDevices", page).checked(user.Policy.EnableAllDevices).trigger("change");
|
||||
html += '</div>';
|
||||
$('.deviceAccess', page).show().html(html);
|
||||
$('#chkEnableAllDevices', page).checked(user.Policy.EnableAllDevices).trigger('change');
|
||||
|
||||
if (user.Policy.IsAdministrator) {
|
||||
page.querySelector(".deviceAccessContainer").classList.add("hide");
|
||||
page.querySelector('.deviceAccessContainer').classList.add('hide');
|
||||
} else {
|
||||
page.querySelector(".deviceAccessContainer").classList.remove("hide");
|
||||
page.querySelector('.deviceAccessContainer').classList.remove('hide');
|
||||
}
|
||||
}
|
||||
|
||||
function loadUser(page, user, loggedInUser, mediaFolders, channels, devices) {
|
||||
page.querySelector(".username").innerHTML = user.Name;
|
||||
page.querySelector('.username').innerHTML = user.Name;
|
||||
libraryMenu.setTitle(user.Name);
|
||||
loadChannels(page, user, channels);
|
||||
loadMediaFolders(page, user, mediaFolders);
|
||||
@@ -84,29 +84,29 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
function onSaveComplete(page) {
|
||||
loading.hide();
|
||||
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("SettingsSaved"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('SettingsSaved'));
|
||||
});
|
||||
}
|
||||
|
||||
function saveUser(user, page) {
|
||||
user.Policy.EnableAllFolders = $("#chkEnableAllFolders", page).checked();
|
||||
user.Policy.EnabledFolders = user.Policy.EnableAllFolders ? [] : $(".chkFolder", page).get().filter(function (c) {
|
||||
user.Policy.EnableAllFolders = $('#chkEnableAllFolders', page).checked();
|
||||
user.Policy.EnabledFolders = user.Policy.EnableAllFolders ? [] : $('.chkFolder', page).get().filter(function (c) {
|
||||
return c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-id");
|
||||
return c.getAttribute('data-id');
|
||||
});
|
||||
user.Policy.EnableAllChannels = $("#chkEnableAllChannels", page).checked();
|
||||
user.Policy.EnabledChannels = user.Policy.EnableAllChannels ? [] : $(".chkChannel", page).get().filter(function (c) {
|
||||
user.Policy.EnableAllChannels = $('#chkEnableAllChannels', page).checked();
|
||||
user.Policy.EnabledChannels = user.Policy.EnableAllChannels ? [] : $('.chkChannel', page).get().filter(function (c) {
|
||||
return c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-id");
|
||||
return c.getAttribute('data-id');
|
||||
});
|
||||
user.Policy.EnableAllDevices = $("#chkEnableAllDevices", page).checked();
|
||||
user.Policy.EnabledDevices = user.Policy.EnableAllDevices ? [] : $(".chkDevice", page).get().filter(function (c) {
|
||||
user.Policy.EnableAllDevices = $('#chkEnableAllDevices', page).checked();
|
||||
user.Policy.EnabledDevices = user.Policy.EnableAllDevices ? [] : $('.chkDevice', page).get().filter(function (c) {
|
||||
return c.checked;
|
||||
}).map(function (c) {
|
||||
return c.getAttribute("data-id");
|
||||
return c.getAttribute('data-id');
|
||||
});
|
||||
user.Policy.BlockedChannels = null;
|
||||
user.Policy.BlockedMediaFolders = null;
|
||||
@@ -116,44 +116,44 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
var page = $(this).parents(".page");
|
||||
var page = $(this).parents('.page');
|
||||
loading.show();
|
||||
var userId = getParameterByName("userId");
|
||||
var userId = getParameterByName('userId');
|
||||
ApiClient.getUser(userId).then(function (result) {
|
||||
saveUser(result, page);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#userLibraryAccessPage", function () {
|
||||
$(document).on('pageinit', '#userLibraryAccessPage', function () {
|
||||
var page = this;
|
||||
$("#chkEnableAllDevices", page).on("change", function () {
|
||||
$('#chkEnableAllDevices', page).on('change', function () {
|
||||
if (this.checked) {
|
||||
$(".deviceAccessListContainer", page).hide();
|
||||
$('.deviceAccessListContainer', page).hide();
|
||||
} else {
|
||||
$(".deviceAccessListContainer", page).show();
|
||||
$('.deviceAccessListContainer', page).show();
|
||||
}
|
||||
});
|
||||
$("#chkEnableAllChannels", page).on("change", function () {
|
||||
$('#chkEnableAllChannels', page).on('change', function () {
|
||||
if (this.checked) {
|
||||
$(".channelAccessListContainer", page).hide();
|
||||
$('.channelAccessListContainer', page).hide();
|
||||
} else {
|
||||
$(".channelAccessListContainer", page).show();
|
||||
$('.channelAccessListContainer', page).show();
|
||||
}
|
||||
});
|
||||
page.querySelector("#chkEnableAllFolders").addEventListener("change", function () {
|
||||
page.querySelector('#chkEnableAllFolders').addEventListener('change', function () {
|
||||
if (this.checked) {
|
||||
page.querySelector(".folderAccessListContainer").classList.add("hide");
|
||||
page.querySelector('.folderAccessListContainer').classList.add('hide');
|
||||
} else {
|
||||
page.querySelector(".folderAccessListContainer").classList.remove("hide");
|
||||
page.querySelector('.folderAccessListContainer').classList.remove('hide');
|
||||
}
|
||||
});
|
||||
$(".userLibraryAccessForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#userLibraryAccessPage", function () {
|
||||
$('.userLibraryAccessForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#userLibraryAccessPage', function () {
|
||||
var page = this;
|
||||
loading.show();
|
||||
var promise1;
|
||||
var userId = getParameterByName("userId");
|
||||
var userId = getParameterByName('userId');
|
||||
|
||||
if (userId) {
|
||||
promise1 = ApiClient.getUser(userId);
|
||||
@@ -166,11 +166,11 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "fnchecked"], function
|
||||
}
|
||||
|
||||
var promise2 = Dashboard.getCurrentUser();
|
||||
var promise4 = ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
|
||||
var promise4 = ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
|
||||
IsHidden: false
|
||||
}));
|
||||
var promise5 = ApiClient.getJSON(ApiClient.getUrl("Channels"));
|
||||
var promise6 = ApiClient.getJSON(ApiClient.getUrl("Devices"));
|
||||
var promise5 = ApiClient.getJSON(ApiClient.getUrl('Channels'));
|
||||
var promise6 = ApiClient.getJSON(ApiClient.getUrl('Devices'));
|
||||
Promise.all([promise1, promise2, promise4, promise5, promise6]).then(function (responses) {
|
||||
loadUser(page, responses[0], responses[1], responses[2].Items, responses[3].Items, responses[4].Items);
|
||||
});
|
||||
|
||||
+41
-41
@@ -1,51 +1,51 @@
|
||||
define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox"], function ($, loading, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'globalize', 'fnchecked', 'emby-checkbox'], function ($, loading, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadMediaFolders(page, mediaFolders) {
|
||||
var html = "";
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderLibraries") + "</h3>";
|
||||
var html = '';
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderLibraries') + '</h3>';
|
||||
html += '<div class="checkboxList paperList" style="padding:.5em 1em;">';
|
||||
|
||||
for (var i = 0; i < mediaFolders.length; i++) {
|
||||
var folder = mediaFolders[i];
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" checked="checked"/><span>' + folder.Name + "</span></label>";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkFolder" data-id="' + folder.Id + '" checked="checked"/><span>' + folder.Name + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
$(".folderAccess", page).html(html).trigger("create");
|
||||
$("#chkEnableAllFolders", page).checked(true).trigger("change");
|
||||
html += '</div>';
|
||||
$('.folderAccess', page).html(html).trigger('create');
|
||||
$('#chkEnableAllFolders', page).checked(true).trigger('change');
|
||||
}
|
||||
|
||||
function loadChannels(page, channels) {
|
||||
var html = "";
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderChannels") + "</h3>";
|
||||
var html = '';
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderChannels') + '</h3>';
|
||||
html += '<div class="checkboxList paperList" style="padding:.5em 1em;">';
|
||||
|
||||
for (var i = 0; i < channels.length; i++) {
|
||||
var folder = channels[i];
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkChannel" data-id="' + folder.Id + '" checked="checked"/><span>' + folder.Name + "</span></label>";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkChannel" data-id="' + folder.Id + '" checked="checked"/><span>' + folder.Name + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
$(".channelAccess", page).show().html(html).trigger("create");
|
||||
html += '</div>';
|
||||
$('.channelAccess', page).show().html(html).trigger('create');
|
||||
|
||||
if (channels.length) {
|
||||
$(".channelAccessContainer", page).show();
|
||||
$('.channelAccessContainer', page).show();
|
||||
} else {
|
||||
$(".channelAccessContainer", page).hide();
|
||||
$('.channelAccessContainer', page).hide();
|
||||
}
|
||||
|
||||
$("#chkEnableAllChannels", page).checked(true).trigger("change");
|
||||
$('#chkEnableAllChannels', page).checked(true).trigger('change');
|
||||
}
|
||||
|
||||
function loadUser(page) {
|
||||
$("#txtUsername", page).val("");
|
||||
$("#txtPassword", page).val("");
|
||||
$('#txtUsername', page).val('');
|
||||
$('#txtPassword', page).val('');
|
||||
loading.show();
|
||||
var promiseFolders = ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
|
||||
var promiseFolders = ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
|
||||
IsHidden: false
|
||||
}));
|
||||
var promiseChannels = ApiClient.getJSON(ApiClient.getUrl("Channels"));
|
||||
var promiseChannels = ApiClient.getJSON(ApiClient.getUrl('Channels'));
|
||||
Promise.all([promiseFolders, promiseChannels]).then(function (responses) {
|
||||
loadMediaFolders(page, responses[0].Items);
|
||||
loadChannels(page, responses[1].Items);
|
||||
@@ -55,37 +55,37 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox"], functio
|
||||
|
||||
function saveUser(page) {
|
||||
var user = {};
|
||||
user.Name = $("#txtUsername", page).val();
|
||||
user.Password = $("#txtPassword", page).val();
|
||||
user.Name = $('#txtUsername', page).val();
|
||||
user.Password = $('#txtPassword', page).val();
|
||||
ApiClient.createUser(user).then(function (user) {
|
||||
user.Policy.EnableAllFolders = $("#chkEnableAllFolders", page).checked();
|
||||
user.Policy.EnableAllFolders = $('#chkEnableAllFolders', page).checked();
|
||||
user.Policy.EnabledFolders = [];
|
||||
|
||||
if (!user.Policy.EnableAllFolders) {
|
||||
user.Policy.EnabledFolders = $(".chkFolder", page).get().filter(function (i) {
|
||||
user.Policy.EnabledFolders = $('.chkFolder', page).get().filter(function (i) {
|
||||
return i.checked;
|
||||
}).map(function (i) {
|
||||
return i.getAttribute("data-id");
|
||||
return i.getAttribute('data-id');
|
||||
});
|
||||
}
|
||||
|
||||
user.Policy.EnableAllChannels = $("#chkEnableAllChannels", page).checked();
|
||||
user.Policy.EnableAllChannels = $('#chkEnableAllChannels', page).checked();
|
||||
user.Policy.EnabledChannels = [];
|
||||
|
||||
if (!user.Policy.EnableAllChannels) {
|
||||
user.Policy.EnabledChannels = $(".chkChannel", page).get().filter(function (i) {
|
||||
user.Policy.EnabledChannels = $('.chkChannel', page).get().filter(function (i) {
|
||||
return i.checked;
|
||||
}).map(function (i) {
|
||||
return i.getAttribute("data-id");
|
||||
return i.getAttribute('data-id');
|
||||
});
|
||||
}
|
||||
|
||||
ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
|
||||
Dashboard.navigate("useredit.html?userId=" + user.Id);
|
||||
Dashboard.navigate('useredit.html?userId=' + user.Id);
|
||||
});
|
||||
}, function (response) {
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("DefaultErrorMessage"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('DefaultErrorMessage'));
|
||||
});
|
||||
|
||||
loading.hide();
|
||||
@@ -93,7 +93,7 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox"], functio
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
var page = $(this).parents(".page")[0];
|
||||
var page = $(this).parents('.page')[0];
|
||||
loading.show();
|
||||
saveUser(page);
|
||||
return false;
|
||||
@@ -103,24 +103,24 @@ define(["jQuery", "loading", "globalize", "fnchecked", "emby-checkbox"], functio
|
||||
loadUser(page);
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#newUserPage", function () {
|
||||
$(document).on('pageinit', '#newUserPage', function () {
|
||||
var page = this;
|
||||
$("#chkEnableAllChannels", page).on("change", function () {
|
||||
$('#chkEnableAllChannels', page).on('change', function () {
|
||||
if (this.checked) {
|
||||
$(".channelAccessListContainer", page).hide();
|
||||
$('.channelAccessListContainer', page).hide();
|
||||
} else {
|
||||
$(".channelAccessListContainer", page).show();
|
||||
$('.channelAccessListContainer', page).show();
|
||||
}
|
||||
});
|
||||
$("#chkEnableAllFolders", page).on("change", function () {
|
||||
$('#chkEnableAllFolders', page).on('change', function () {
|
||||
if (this.checked) {
|
||||
$(".folderAccessListContainer", page).hide();
|
||||
$('.folderAccessListContainer', page).hide();
|
||||
} else {
|
||||
$(".folderAccessListContainer", page).show();
|
||||
$('.folderAccessListContainer', page).show();
|
||||
}
|
||||
});
|
||||
$(".newUserProfileForm").off("submit", onSubmit).on("submit", onSubmit);
|
||||
}).on("pageshow", "#newUserPage", function () {
|
||||
$('.newUserProfileForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||
}).on('pageshow', '#newUserPage', function () {
|
||||
loadData(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewStyle", "paper-icon-button-light"], function ($, datetime, loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['jQuery', 'datetime', 'loading', 'libraryMenu', 'globalize', 'listViewStyle', 'paper-icon-button-light'], function ($, datetime, loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function populateRatings(allParentalRatings, page) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<option value=''></option>";
|
||||
var i;
|
||||
var length;
|
||||
@@ -14,7 +14,7 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
var lastRating = ratings[ratings.length - 1];
|
||||
|
||||
if (lastRating.Value === rating.Value) {
|
||||
lastRating.Name += "/" + rating.Name;
|
||||
lastRating.Name += '/' + rating.Name;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -27,56 +27,56 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
|
||||
for (i = 0, length = ratings.length; i < length; i++) {
|
||||
rating = ratings[i];
|
||||
html += "<option value='" + rating.Value + "'>" + rating.Name + "</option>";
|
||||
html += "<option value='" + rating.Value + "'>" + rating.Name + '</option>';
|
||||
}
|
||||
|
||||
$("#selectMaxParentalRating", page).html(html);
|
||||
$('#selectMaxParentalRating', page).html(html);
|
||||
}
|
||||
|
||||
function loadUnratedItems(page, user) {
|
||||
var items = [{
|
||||
name: globalize.translate("OptionBlockBooks"),
|
||||
value: "Book"
|
||||
name: globalize.translate('OptionBlockBooks'),
|
||||
value: 'Book'
|
||||
}, {
|
||||
name: globalize.translate("OptionBlockChannelContent"),
|
||||
value: "ChannelContent"
|
||||
name: globalize.translate('OptionBlockChannelContent'),
|
||||
value: 'ChannelContent'
|
||||
}, {
|
||||
name: globalize.translate("OptionBlockLiveTvChannels"),
|
||||
value: "LiveTvChannel"
|
||||
name: globalize.translate('OptionBlockLiveTvChannels'),
|
||||
value: 'LiveTvChannel'
|
||||
}, {
|
||||
name: globalize.translate("OptionBlockMovies"),
|
||||
value: "Movie"
|
||||
name: globalize.translate('OptionBlockMovies'),
|
||||
value: 'Movie'
|
||||
}, {
|
||||
name: globalize.translate("OptionBlockMusic"),
|
||||
value: "Music"
|
||||
name: globalize.translate('OptionBlockMusic'),
|
||||
value: 'Music'
|
||||
}, {
|
||||
name: globalize.translate("OptionBlockTrailers"),
|
||||
value: "Trailer"
|
||||
name: globalize.translate('OptionBlockTrailers'),
|
||||
value: 'Trailer'
|
||||
}, {
|
||||
name: globalize.translate("OptionBlockTvShows"),
|
||||
value: "Series"
|
||||
name: globalize.translate('OptionBlockTvShows'),
|
||||
value: 'Series'
|
||||
}];
|
||||
var html = "";
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate("HeaderBlockItemsWithNoRating") + "</h3>";
|
||||
var html = '';
|
||||
html += '<h3 class="checkboxListLabel">' + globalize.translate('HeaderBlockItemsWithNoRating') + '</h3>';
|
||||
html += '<div class="checkboxList paperList checkboxList-paperList">';
|
||||
|
||||
for (var i = 0, length = items.length; i < length; i++) {
|
||||
var item = items[i];
|
||||
var checkedAttribute = -1 != user.Policy.BlockUnratedItems.indexOf(item.value) ? ' checked="checked"' : "";
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkUnratedItem" data-itemtype="' + item.value + '" type="checkbox"' + checkedAttribute + "><span>" + item.name + "</span></label>";
|
||||
var checkedAttribute = -1 != user.Policy.BlockUnratedItems.indexOf(item.value) ? ' checked="checked"' : '';
|
||||
html += '<label><input type="checkbox" is="emby-checkbox" class="chkUnratedItem" data-itemtype="' + item.value + '" type="checkbox"' + checkedAttribute + '><span>' + item.name + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
$(".blockUnratedItems", page).html(html).trigger("create");
|
||||
html += '</div>';
|
||||
$('.blockUnratedItems', page).html(html).trigger('create');
|
||||
}
|
||||
|
||||
function loadUser(page, user, allParentalRatings) {
|
||||
page.querySelector(".username").innerHTML = user.Name;
|
||||
page.querySelector('.username').innerHTML = user.Name;
|
||||
libraryMenu.setTitle(user.Name);
|
||||
loadUnratedItems(page, user);
|
||||
loadBlockedTags(page, user.Policy.BlockedTags);
|
||||
populateRatings(allParentalRatings, page);
|
||||
var ratingValue = "";
|
||||
var ratingValue = '';
|
||||
|
||||
if (user.Policy.MaxParentalRating) {
|
||||
for (var i = 0, length = allParentalRatings.length; i < length; i++) {
|
||||
@@ -88,12 +88,12 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
}
|
||||
}
|
||||
|
||||
$("#selectMaxParentalRating", page).val(ratingValue);
|
||||
$('#selectMaxParentalRating', page).val(ratingValue);
|
||||
|
||||
if (user.Policy.IsAdministrator) {
|
||||
$(".accessScheduleSection", page).hide();
|
||||
$('.accessScheduleSection', page).hide();
|
||||
} else {
|
||||
$(".accessScheduleSection", page).show();
|
||||
$('.accessScheduleSection', page).show();
|
||||
}
|
||||
|
||||
renderAccessSchedule(page, user.Policy.AccessSchedules || []);
|
||||
@@ -106,19 +106,19 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
li += '<div class="listItemBody">';
|
||||
li += '<h3 class="listItemBodyText">';
|
||||
li += h;
|
||||
li += "</h3>";
|
||||
li += "</div>";
|
||||
li += '</h3>';
|
||||
li += '</div>';
|
||||
li += '<button type="button" is="paper-icon-button-light" class="blockedTag btnDeleteTag listItemButton" data-tag="' + h + '"><span class="material-icons delete"></span></button>';
|
||||
return li += "</div>";
|
||||
}).join("");
|
||||
return li += '</div>';
|
||||
}).join('');
|
||||
|
||||
if (html) {
|
||||
html = '<div class="paperList">' + html + "</div>";
|
||||
html = '<div class="paperList">' + html + '</div>';
|
||||
}
|
||||
|
||||
var elem = $(".blockedTags", page).html(html).trigger("create");
|
||||
$(".btnDeleteTag", elem).on("click", function () {
|
||||
var tag = this.getAttribute("data-tag");
|
||||
var elem = $('.blockedTags', page).html(html).trigger('create');
|
||||
$('.btnDeleteTag', elem).on('click', function () {
|
||||
var tag = this.getAttribute('data-tag');
|
||||
var newTags = tags.filter(function (t) {
|
||||
return t != tag;
|
||||
});
|
||||
@@ -132,43 +132,43 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
}
|
||||
|
||||
function renderAccessSchedule(page, schedules) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
var index = 0;
|
||||
html += schedules.map(function (a) {
|
||||
var itemHtml = "";
|
||||
var itemHtml = '';
|
||||
itemHtml += '<div class="liSchedule listItem" data-day="' + a.DayOfWeek + '" data-start="' + a.StartHour + '" data-end="' + a.EndHour + '">';
|
||||
itemHtml += '<div class="listItemBody two-line">';
|
||||
itemHtml += '<h3 class="listItemBodyText">';
|
||||
itemHtml += globalize.translate("Option" + a.DayOfWeek);
|
||||
itemHtml += "</h3>";
|
||||
itemHtml += '<div class="listItemBodyText secondary">' + getDisplayTime(a.StartHour) + " - " + getDisplayTime(a.EndHour) + "</div>";
|
||||
itemHtml += "</div>";
|
||||
itemHtml += globalize.translate('Option' + a.DayOfWeek);
|
||||
itemHtml += '</h3>';
|
||||
itemHtml += '<div class="listItemBodyText secondary">' + getDisplayTime(a.StartHour) + ' - ' + getDisplayTime(a.EndHour) + '</div>';
|
||||
itemHtml += '</div>';
|
||||
itemHtml += '<button type="button" is="paper-icon-button-light" class="btnDelete listItemButton" data-index="' + index + '"><span class="material-icons delete"></span></button>';
|
||||
itemHtml += "</div>";
|
||||
itemHtml += '</div>';
|
||||
index++;
|
||||
return itemHtml;
|
||||
}).join("");
|
||||
var accessScheduleList = page.querySelector(".accessScheduleList");
|
||||
}).join('');
|
||||
var accessScheduleList = page.querySelector('.accessScheduleList');
|
||||
accessScheduleList.innerHTML = html;
|
||||
$(".btnDelete", accessScheduleList).on("click", function () {
|
||||
deleteAccessSchedule(page, schedules, parseInt(this.getAttribute("data-index")));
|
||||
$('.btnDelete', accessScheduleList).on('click', function () {
|
||||
deleteAccessSchedule(page, schedules, parseInt(this.getAttribute('data-index')));
|
||||
});
|
||||
}
|
||||
|
||||
function onSaveComplete(page) {
|
||||
loading.hide();
|
||||
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("SettingsSaved"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('SettingsSaved'));
|
||||
});
|
||||
}
|
||||
|
||||
function saveUser(user, page) {
|
||||
user.Policy.MaxParentalRating = $("#selectMaxParentalRating", page).val() || null;
|
||||
user.Policy.BlockUnratedItems = $(".chkUnratedItem", page).get().filter(function (i) {
|
||||
user.Policy.MaxParentalRating = $('#selectMaxParentalRating', page).val() || null;
|
||||
user.Policy.BlockUnratedItems = $('.chkUnratedItem', page).get().filter(function (i) {
|
||||
return i.checked;
|
||||
}).map(function (i) {
|
||||
return i.getAttribute("data-itemtype");
|
||||
return i.getAttribute('data-itemtype');
|
||||
});
|
||||
user.Policy.AccessSchedules = getSchedulesFromPage(page);
|
||||
user.Policy.BlockedTags = getBlockedTagsFromPage(page);
|
||||
@@ -191,7 +191,7 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
function showSchedulePopup(page, schedule, index) {
|
||||
schedule = schedule || {};
|
||||
|
||||
require(["components/accessschedule/accessschedule"], function (accessschedule) {
|
||||
require(['components/accessschedule/accessschedule'], function (accessschedule) {
|
||||
accessschedule.show({
|
||||
schedule: schedule
|
||||
}).then(function (updatedSchedule) {
|
||||
@@ -208,25 +208,25 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
}
|
||||
|
||||
function getSchedulesFromPage(page) {
|
||||
return $(".liSchedule", page).map(function () {
|
||||
return $('.liSchedule', page).map(function () {
|
||||
return {
|
||||
DayOfWeek: this.getAttribute("data-day"),
|
||||
StartHour: this.getAttribute("data-start"),
|
||||
EndHour: this.getAttribute("data-end")
|
||||
DayOfWeek: this.getAttribute('data-day'),
|
||||
StartHour: this.getAttribute('data-start'),
|
||||
EndHour: this.getAttribute('data-end')
|
||||
};
|
||||
}).get();
|
||||
}
|
||||
|
||||
function getBlockedTagsFromPage(page) {
|
||||
return $(".blockedTag", page).map(function () {
|
||||
return this.getAttribute("data-tag");
|
||||
return $('.blockedTag', page).map(function () {
|
||||
return this.getAttribute('data-tag');
|
||||
}).get();
|
||||
}
|
||||
|
||||
function showBlockedTagPopup(page) {
|
||||
require(["prompt"], function (prompt) {
|
||||
require(['prompt'], function (prompt) {
|
||||
prompt({
|
||||
label: globalize.translate("LabelTag")
|
||||
label: globalize.translate('LabelTag')
|
||||
}).then(function (value) {
|
||||
var tags = getBlockedTagsFromPage(page);
|
||||
|
||||
@@ -240,28 +240,28 @@ define(["jQuery", "datetime", "loading", "libraryMenu", "globalize", "listViewSt
|
||||
|
||||
window.UserParentalControlPage = {
|
||||
onSubmit: function () {
|
||||
var page = $(this).parents(".page");
|
||||
var page = $(this).parents('.page');
|
||||
loading.show();
|
||||
var userId = getParameterByName("userId");
|
||||
var userId = getParameterByName('userId');
|
||||
ApiClient.getUser(userId).then(function (result) {
|
||||
saveUser(result, page);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
};
|
||||
$(document).on("pageinit", "#userParentalControlPage", function () {
|
||||
$(document).on('pageinit', '#userParentalControlPage', function () {
|
||||
var page = this;
|
||||
$(".btnAddSchedule", page).on("click", function () {
|
||||
$('.btnAddSchedule', page).on('click', function () {
|
||||
showSchedulePopup(page, {}, -1);
|
||||
});
|
||||
$(".btnAddBlockedTag", page).on("click", function () {
|
||||
$('.btnAddBlockedTag', page).on('click', function () {
|
||||
showBlockedTagPopup(page);
|
||||
});
|
||||
$(".userParentalControlForm").off("submit", UserParentalControlPage.onSubmit).on("submit", UserParentalControlPage.onSubmit);
|
||||
}).on("pageshow", "#userParentalControlPage", function () {
|
||||
$('.userParentalControlForm').off('submit', UserParentalControlPage.onSubmit).on('submit', UserParentalControlPage.onSubmit);
|
||||
}).on('pageshow', '#userParentalControlPage', function () {
|
||||
var page = this;
|
||||
loading.show();
|
||||
var userId = getParameterByName("userId");
|
||||
var userId = getParameterByName('userId');
|
||||
var promise1 = ApiClient.getUser(userId);
|
||||
var promise2 = ApiClient.getParentalRatings();
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
|
||||
@@ -1,67 +1,67 @@
|
||||
define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'libraryMenu', 'globalize', 'emby-button'], function (loading, libraryMenu, globalize) {
|
||||
'use strict';
|
||||
|
||||
function loadUser(page, params) {
|
||||
var userid = params.userId;
|
||||
ApiClient.getUser(userid).then(function (user) {
|
||||
Dashboard.getCurrentUser().then(function (loggedInUser) {
|
||||
libraryMenu.setTitle(user.Name);
|
||||
page.querySelector(".username").innerHTML = user.Name;
|
||||
page.querySelector('.username').innerHTML = user.Name;
|
||||
var showPasswordSection = true;
|
||||
var showLocalAccessSection = false;
|
||||
|
||||
if ("Guest" == user.ConnectLinkType) {
|
||||
page.querySelector(".localAccessSection").classList.add("hide");
|
||||
if ('Guest' == user.ConnectLinkType) {
|
||||
page.querySelector('.localAccessSection').classList.add('hide');
|
||||
showPasswordSection = false;
|
||||
} else if (user.HasConfiguredPassword) {
|
||||
page.querySelector("#btnResetPassword").classList.remove("hide");
|
||||
page.querySelector("#fldCurrentPassword").classList.remove("hide");
|
||||
page.querySelector('#btnResetPassword').classList.remove('hide');
|
||||
page.querySelector('#fldCurrentPassword').classList.remove('hide');
|
||||
showLocalAccessSection = true;
|
||||
} else {
|
||||
page.querySelector("#btnResetPassword").classList.add("hide");
|
||||
page.querySelector("#fldCurrentPassword").classList.add("hide");
|
||||
page.querySelector('#btnResetPassword').classList.add('hide');
|
||||
page.querySelector('#fldCurrentPassword').classList.add('hide');
|
||||
}
|
||||
|
||||
if (showPasswordSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
|
||||
page.querySelector(".passwordSection").classList.remove("hide");
|
||||
page.querySelector('.passwordSection').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".passwordSection").classList.add("hide");
|
||||
page.querySelector('.passwordSection').classList.add('hide');
|
||||
}
|
||||
|
||||
if (showLocalAccessSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
|
||||
page.querySelector(".localAccessSection").classList.remove("hide");
|
||||
page.querySelector('.localAccessSection').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".localAccessSection").classList.add("hide");
|
||||
page.querySelector('.localAccessSection').classList.add('hide');
|
||||
}
|
||||
|
||||
var txtEasyPassword = page.querySelector("#txtEasyPassword");
|
||||
txtEasyPassword.value = "";
|
||||
var txtEasyPassword = page.querySelector('#txtEasyPassword');
|
||||
txtEasyPassword.value = '';
|
||||
|
||||
if (user.HasConfiguredEasyPassword) {
|
||||
txtEasyPassword.placeholder = "******";
|
||||
page.querySelector("#btnResetEasyPassword").classList.remove("hide");
|
||||
txtEasyPassword.placeholder = '******';
|
||||
page.querySelector('#btnResetEasyPassword').classList.remove('hide');
|
||||
} else {
|
||||
txtEasyPassword.removeAttribute("placeholder");
|
||||
txtEasyPassword.placeholder = "";
|
||||
page.querySelector("#btnResetEasyPassword").classList.add("hide");
|
||||
txtEasyPassword.removeAttribute('placeholder');
|
||||
txtEasyPassword.placeholder = '';
|
||||
page.querySelector('#btnResetEasyPassword').classList.add('hide');
|
||||
}
|
||||
|
||||
page.querySelector(".chkEnableLocalEasyPassword").checked = user.Configuration.EnableLocalPassword;
|
||||
page.querySelector('.chkEnableLocalEasyPassword').checked = user.Configuration.EnableLocalPassword;
|
||||
|
||||
require(["autoFocuser"], function (autoFocuser) {
|
||||
require(['autoFocuser'], function (autoFocuser) {
|
||||
autoFocuser.autoFocus(page);
|
||||
});
|
||||
});
|
||||
});
|
||||
page.querySelector("#txtCurrentPassword").value = "";
|
||||
page.querySelector("#txtNewPassword").value = "";
|
||||
page.querySelector("#txtNewPasswordConfirm").value = "";
|
||||
page.querySelector('#txtCurrentPassword').value = '';
|
||||
page.querySelector('#txtNewPassword').value = '';
|
||||
page.querySelector('#txtNewPasswordConfirm').value = '';
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
function saveEasyPassword() {
|
||||
var userId = params.userId;
|
||||
var easyPassword = view.querySelector("#txtEasyPassword").value;
|
||||
var easyPassword = view.querySelector('#txtEasyPassword').value;
|
||||
|
||||
if (easyPassword) {
|
||||
ApiClient.updateEasyPassword(userId, easyPassword).then(function () {
|
||||
@@ -74,12 +74,12 @@ define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading
|
||||
|
||||
function onEasyPasswordSaved(userId) {
|
||||
ApiClient.getUser(userId).then(function (user) {
|
||||
user.Configuration.EnableLocalPassword = view.querySelector(".chkEnableLocalEasyPassword").checked;
|
||||
user.Configuration.EnableLocalPassword = view.querySelector('.chkEnableLocalEasyPassword').checked;
|
||||
ApiClient.updateUserConfiguration(user.Id, user.Configuration).then(function () {
|
||||
loading.hide();
|
||||
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("MessageSettingsSaved"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('MessageSettingsSaved'));
|
||||
});
|
||||
|
||||
loadUser(view, params);
|
||||
@@ -89,28 +89,28 @@ define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading
|
||||
|
||||
function savePassword() {
|
||||
var userId = params.userId;
|
||||
var currentPassword = view.querySelector("#txtCurrentPassword").value;
|
||||
var newPassword = view.querySelector("#txtNewPassword").value;
|
||||
var currentPassword = view.querySelector('#txtCurrentPassword').value;
|
||||
var newPassword = view.querySelector('#txtNewPassword').value;
|
||||
|
||||
if (view.querySelector("#fldCurrentPassword").classList.contains("hide")) {
|
||||
if (view.querySelector('#fldCurrentPassword').classList.contains('hide')) {
|
||||
// Firefox does not respect autocomplete=off, so clear it if the field is supposed to be hidden (and blank)
|
||||
// This should only happen when user.HasConfiguredPassword is false, but this information is not passed on
|
||||
currentPassword = "";
|
||||
currentPassword = '';
|
||||
}
|
||||
|
||||
ApiClient.updateUserPassword(userId, currentPassword, newPassword).then(function () {
|
||||
loading.hide();
|
||||
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("PasswordSaved"));
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('PasswordSaved'));
|
||||
});
|
||||
|
||||
loadUser(view, params);
|
||||
}, function () {
|
||||
loading.hide();
|
||||
Dashboard.alert({
|
||||
title: globalize.translate("HeaderLoginFailure"),
|
||||
message: globalize.translate("MessageInvalidUser")
|
||||
title: globalize.translate('HeaderLoginFailure'),
|
||||
message: globalize.translate('MessageInvalidUser')
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -118,9 +118,9 @@ define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading
|
||||
function onSubmit(e) {
|
||||
var form = this;
|
||||
|
||||
if (form.querySelector("#txtNewPassword").value != form.querySelector("#txtNewPasswordConfirm").value) {
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("PasswordMatchError"));
|
||||
if (form.querySelector('#txtNewPassword').value != form.querySelector('#txtNewPasswordConfirm').value) {
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('PasswordMatchError'));
|
||||
});
|
||||
} else {
|
||||
loading.show();
|
||||
@@ -139,17 +139,17 @@ define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading
|
||||
}
|
||||
|
||||
function resetPassword() {
|
||||
var msg = globalize.translate("PasswordResetConfirmation");
|
||||
var msg = globalize.translate('PasswordResetConfirmation');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(msg, globalize.translate("PasswordResetHeader")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(msg, globalize.translate('PasswordResetHeader')).then(function () {
|
||||
var userId = params.userId;
|
||||
loading.show();
|
||||
ApiClient.resetUserPassword(userId).then(function () {
|
||||
loading.hide();
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("PasswordResetComplete"),
|
||||
title: globalize.translate("PasswordResetHeader")
|
||||
message: globalize.translate('PasswordResetComplete'),
|
||||
title: globalize.translate('PasswordResetHeader')
|
||||
});
|
||||
loadUser(view, params);
|
||||
});
|
||||
@@ -158,17 +158,17 @@ define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading
|
||||
}
|
||||
|
||||
function resetEasyPassword() {
|
||||
var msg = globalize.translate("PinCodeResetConfirmation");
|
||||
var msg = globalize.translate('PinCodeResetConfirmation');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
confirm(msg, globalize.translate("HeaderPinCodeReset")).then(function () {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm(msg, globalize.translate('HeaderPinCodeReset')).then(function () {
|
||||
var userId = params.userId;
|
||||
loading.show();
|
||||
ApiClient.resetEasyPassword(userId).then(function () {
|
||||
loading.hide();
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("PinCodeResetComplete"),
|
||||
title: globalize.translate("HeaderPinCodeReset")
|
||||
message: globalize.translate('PinCodeResetComplete'),
|
||||
title: globalize.translate('HeaderPinCodeReset')
|
||||
});
|
||||
loadUser(view, params);
|
||||
});
|
||||
@@ -176,11 +176,11 @@ define(["loading", "libraryMenu", "globalize", "emby-button"], function (loading
|
||||
});
|
||||
}
|
||||
|
||||
view.querySelector(".updatePasswordForm").addEventListener("submit", onSubmit);
|
||||
view.querySelector(".localAccessForm").addEventListener("submit", onLocalAccessSubmit);
|
||||
view.querySelector("#btnResetEasyPassword").addEventListener("click", resetEasyPassword);
|
||||
view.querySelector("#btnResetPassword").addEventListener("click", resetPassword);
|
||||
view.addEventListener("viewshow", function () {
|
||||
view.querySelector('.updatePasswordForm').addEventListener('submit', onSubmit);
|
||||
view.querySelector('.localAccessForm').addEventListener('submit', onLocalAccessSubmit);
|
||||
view.querySelector('#btnResetEasyPassword').addEventListener('click', resetEasyPassword);
|
||||
view.querySelector('#btnResetPassword').addEventListener('click', resetPassword);
|
||||
view.addEventListener('viewshow', function () {
|
||||
loadUser(view, params);
|
||||
});
|
||||
};
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-button-light", "cardStyle", "emby-button", "indicators", "flexStyles"], function (loading, dom, globalize, datefns, dfnshelper) {
|
||||
"use strict";
|
||||
define(['loading', 'dom', 'globalize', 'date-fns', 'dfnshelper', 'paper-icon-button-light', 'cardStyle', 'emby-button', 'indicators', 'flexStyles'], function (loading, dom, globalize, datefns, dfnshelper) {
|
||||
'use strict';
|
||||
|
||||
function deleteUser(page, id) {
|
||||
var msg = globalize.translate("DeleteUserConfirmation");
|
||||
var msg = globalize.translate('DeleteUserConfirmation');
|
||||
|
||||
require(["confirm"], function (confirm) {
|
||||
require(['confirm'], function (confirm) {
|
||||
confirm({
|
||||
title: globalize.translate("DeleteUser"),
|
||||
title: globalize.translate('DeleteUser'),
|
||||
text: msg,
|
||||
confirmText: globalize.translate("ButtonDelete"),
|
||||
primary: "delete"
|
||||
confirmText: globalize.translate('ButtonDelete'),
|
||||
primary: 'delete'
|
||||
}).then(function () {
|
||||
loading.show();
|
||||
ApiClient.deleteUser(id).then(function () {
|
||||
@@ -20,50 +20,50 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
}
|
||||
|
||||
function showUserMenu(elem) {
|
||||
var card = dom.parentWithClass(elem, "card");
|
||||
var page = dom.parentWithClass(card, "page");
|
||||
var userId = card.getAttribute("data-userid");
|
||||
var card = dom.parentWithClass(elem, 'card');
|
||||
var page = dom.parentWithClass(card, 'page');
|
||||
var userId = card.getAttribute('data-userid');
|
||||
var menuItems = [];
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonOpen"),
|
||||
id: "open",
|
||||
icon: "mode_edit"
|
||||
name: globalize.translate('ButtonOpen'),
|
||||
id: 'open',
|
||||
icon: 'mode_edit'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonLibraryAccess"),
|
||||
id: "access",
|
||||
icon: "lock"
|
||||
name: globalize.translate('ButtonLibraryAccess'),
|
||||
id: 'access',
|
||||
icon: 'lock'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonParentalControl"),
|
||||
id: "parentalcontrol",
|
||||
icon: "person"
|
||||
name: globalize.translate('ButtonParentalControl'),
|
||||
id: 'parentalcontrol',
|
||||
icon: 'person'
|
||||
});
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonDelete"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
name: globalize.translate('ButtonDelete'),
|
||||
id: 'delete',
|
||||
icon: 'delete'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: card,
|
||||
callback: function (id) {
|
||||
switch (id) {
|
||||
case "open":
|
||||
Dashboard.navigate("useredit.html?userId=" + userId);
|
||||
case 'open':
|
||||
Dashboard.navigate('useredit.html?userId=' + userId);
|
||||
break;
|
||||
|
||||
case "access":
|
||||
Dashboard.navigate("userlibraryaccess.html?userId=" + userId);
|
||||
case 'access':
|
||||
Dashboard.navigate('userlibraryaccess.html?userId=' + userId);
|
||||
break;
|
||||
|
||||
case "parentalcontrol":
|
||||
Dashboard.navigate("userparentalcontrol.html?userId=" + userId);
|
||||
case 'parentalcontrol':
|
||||
Dashboard.navigate('userparentalcontrol.html?userId=' + userId);
|
||||
break;
|
||||
|
||||
case "delete":
|
||||
case 'delete':
|
||||
deleteUser(page, userId);
|
||||
}
|
||||
}
|
||||
@@ -72,11 +72,11 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
}
|
||||
|
||||
function getUserHtml(user, addConnectIndicator) {
|
||||
var html = "";
|
||||
var cssClass = "card squareCard scalableCard squareCard-scalable";
|
||||
var html = '';
|
||||
var cssClass = 'card squareCard scalableCard squareCard-scalable';
|
||||
|
||||
if (user.Policy.IsDisabled) {
|
||||
cssClass += " grayscale";
|
||||
cssClass += ' grayscale';
|
||||
}
|
||||
|
||||
html += "<div data-userid='" + user.Id + "' class='" + cssClass + "'>";
|
||||
@@ -90,14 +90,14 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
imgUrl = ApiClient.getUserImageUrl(user.Id, {
|
||||
width: 300,
|
||||
tag: user.PrimaryImageTag,
|
||||
type: "Primary"
|
||||
type: 'Primary'
|
||||
});
|
||||
}
|
||||
|
||||
var imageClass = "cardImage";
|
||||
var imageClass = 'cardImage';
|
||||
|
||||
if (user.Policy.IsDisabled) {
|
||||
imageClass += " disabledUser";
|
||||
imageClass += ' disabledUser';
|
||||
}
|
||||
|
||||
if (imgUrl) {
|
||||
@@ -107,62 +107,62 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
html += '<span class="material-icons cardImageIcon person"></span>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
||||
html += '<div class="cardText flex align-items-center">';
|
||||
html += '<div class="flex-grow" style="overflow:hidden;text-overflow:ellipsis;">';
|
||||
html += user.Name;
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnUserMenu flex-shrink-zero"><span class="material-icons more_horiz"></span></button>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<div class="cardText cardText-secondary">';
|
||||
var lastSeen = getLastSeenText(user.LastActivityDate);
|
||||
html += "" != lastSeen ? lastSeen : " ";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
return html + "</div>";
|
||||
html += '' != lastSeen ? lastSeen : ' ';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html + '</div>';
|
||||
}
|
||||
// FIXME: It seems that, sometimes, server sends date in the future, so date-fns displays messages like 'in less than a minute'. We should fix
|
||||
// how dates are returned by the server when the session is active and show something like 'Active now', instead of past/future sentences
|
||||
function getLastSeenText(lastActivityDate) {
|
||||
if (lastActivityDate) {
|
||||
return globalize.translate("LastSeen", datefns.formatDistanceToNow(Date.parse(lastActivityDate), dfnshelper.localeWithSuffix));
|
||||
return globalize.translate('LastSeen', datefns.formatDistanceToNow(Date.parse(lastActivityDate), dfnshelper.localeWithSuffix));
|
||||
}
|
||||
|
||||
return "";
|
||||
return '';
|
||||
}
|
||||
|
||||
function getUserSectionHtml(users, addConnectIndicator) {
|
||||
return users.map(function (u__q) {
|
||||
return getUserHtml(u__q, addConnectIndicator);
|
||||
}).join("");
|
||||
}).join('');
|
||||
}
|
||||
|
||||
function renderUsers(page, users) {
|
||||
page.querySelector(".localUsers").innerHTML = getUserSectionHtml(users, true);
|
||||
page.querySelector('.localUsers').innerHTML = getUserSectionHtml(users, true);
|
||||
}
|
||||
|
||||
function showPendingUserMenu(elem) {
|
||||
var menuItems = [];
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonCancel"),
|
||||
id: "delete",
|
||||
icon: "delete"
|
||||
name: globalize.translate('ButtonCancel'),
|
||||
id: 'delete',
|
||||
icon: 'delete'
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
var card = dom.parentWithClass(elem, "card");
|
||||
var page = dom.parentWithClass(card, "page");
|
||||
var id = card.getAttribute("data-id");
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
var card = dom.parentWithClass(elem, 'card');
|
||||
var page = dom.parentWithClass(card, 'page');
|
||||
var id = card.getAttribute('data-id');
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: card,
|
||||
callback: function (menuItemId) {
|
||||
switch (menuItemId) {
|
||||
case "delete":
|
||||
case 'delete':
|
||||
cancelAuthorization(page, id);
|
||||
}
|
||||
}
|
||||
@@ -171,7 +171,7 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
}
|
||||
|
||||
function getPendingUserHtml(user) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<div data-id='" + user.Id + "' class='card squareCard scalableCard squareCard-scalable'>";
|
||||
html += '<div class="cardBox cardBox-bottompadded visualCardBox">';
|
||||
html += '<div class="cardScalable visualCardBox-cardScalable">';
|
||||
@@ -180,41 +180,41 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
|
||||
if (user.ImageUrl) {
|
||||
html += '<div class="cardImage" style="background-image:url(\'' + user.ImageUrl + "');\">";
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
} else {
|
||||
html += '<span class="cardImageIcon material-icons person"></span>';
|
||||
}
|
||||
|
||||
html += "</a>";
|
||||
html += "</div>";
|
||||
html += '</a>';
|
||||
html += '</div>';
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
||||
html += '<div class="cardText" style="text-align:right; float:right;padding:0;">';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnUserMenu"><span class="material-icons more_horiz"></span></button>';
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<div class="cardText" style="padding-top:10px;padding-bottom:10px;">';
|
||||
html += user.UserName;
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
return html + "</div>";
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
return html + '</div>';
|
||||
}
|
||||
|
||||
function renderPendingGuests(page, users) {
|
||||
if (users.length) {
|
||||
page.querySelector(".sectionPendingGuests").classList.remove("hide");
|
||||
page.querySelector('.sectionPendingGuests').classList.remove('hide');
|
||||
} else {
|
||||
page.querySelector(".sectionPendingGuests").classList.add("hide");
|
||||
page.querySelector('.sectionPendingGuests').classList.add('hide');
|
||||
}
|
||||
|
||||
page.querySelector(".pending").innerHTML = users.map(getPendingUserHtml).join("");
|
||||
page.querySelector('.pending').innerHTML = users.map(getPendingUserHtml).join('');
|
||||
}
|
||||
|
||||
// TODO cvium: maybe reuse for invitation system
|
||||
function cancelAuthorization(page, id) {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: ApiClient.getUrl("Connect/Pending", {
|
||||
type: 'DELETE',
|
||||
url: ApiClient.getUrl('Connect/Pending', {
|
||||
Id: id
|
||||
})
|
||||
}).then(function () {
|
||||
@@ -236,34 +236,34 @@ define(["loading", "dom", "globalize", "date-fns", "dfnshelper", "paper-icon-but
|
||||
}
|
||||
|
||||
function showInvitePopup(page) {
|
||||
require(["components/guestinviter/guestinviter"], function (guestinviter) {
|
||||
require(['components/guestinviter/guestinviter'], function (guestinviter) {
|
||||
guestinviter.show().then(function () {
|
||||
loadData(page);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
pageIdOn("pageinit", "userProfilesPage", function () {
|
||||
pageIdOn('pageinit', 'userProfilesPage', function () {
|
||||
var page = this;
|
||||
page.querySelector(".btnAddUser").addEventListener("click", function() {
|
||||
Dashboard.navigate("usernew.html");
|
||||
page.querySelector('.btnAddUser').addEventListener('click', function() {
|
||||
Dashboard.navigate('usernew.html');
|
||||
});
|
||||
page.querySelector(".localUsers").addEventListener("click", function (e__e) {
|
||||
var btnUserMenu = dom.parentWithClass(e__e.target, "btnUserMenu");
|
||||
page.querySelector('.localUsers').addEventListener('click', function (e__e) {
|
||||
var btnUserMenu = dom.parentWithClass(e__e.target, 'btnUserMenu');
|
||||
|
||||
if (btnUserMenu) {
|
||||
showUserMenu(btnUserMenu);
|
||||
}
|
||||
});
|
||||
page.querySelector(".pending").addEventListener("click", function (e__r) {
|
||||
var btnUserMenu = dom.parentWithClass(e__r.target, "btnUserMenu");
|
||||
page.querySelector('.pending').addEventListener('click', function (e__r) {
|
||||
var btnUserMenu = dom.parentWithClass(e__r.target, 'btnUserMenu');
|
||||
|
||||
if (btnUserMenu) {
|
||||
showPendingUserMenu(btnUserMenu);
|
||||
}
|
||||
});
|
||||
});
|
||||
pageIdOn("pagebeforeshow", "userProfilesPage", function () {
|
||||
pageIdOn('pagebeforeshow', 'userProfilesPage', function () {
|
||||
loadData(this);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
define(["loading"], function (loading) {
|
||||
"use strict";
|
||||
define(['loading'], function (loading) {
|
||||
'use strict';
|
||||
|
||||
function onFinish() {
|
||||
loading.show();
|
||||
ApiClient.ajax({
|
||||
url: ApiClient.getUrl("Startup/Complete"),
|
||||
type: "POST"
|
||||
url: ApiClient.getUrl('Startup/Complete'),
|
||||
type: 'POST'
|
||||
}).then(function () {
|
||||
loading.hide();
|
||||
window.location.href = "index.html";
|
||||
window.location.href = 'index.html';
|
||||
});
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector(".btnWizardNext").addEventListener("click", onFinish);
|
||||
view.querySelector('.btnWizardNext').addEventListener('click', onFinish);
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loading) {
|
||||
"use strict";
|
||||
define(['loading', 'emby-checkbox', 'emby-button', 'emby-select'], function (loading) {
|
||||
'use strict';
|
||||
|
||||
function save(page) {
|
||||
loading.show();
|
||||
var apiClient = ApiClient;
|
||||
var config = {};
|
||||
config.EnableRemoteAccess = page.querySelector("#chkRemoteAccess").checked;
|
||||
config.EnableAutomaticPortMapping = page.querySelector("#chkEnableUpnp").checked;
|
||||
config.EnableRemoteAccess = page.querySelector('#chkRemoteAccess').checked;
|
||||
config.EnableAutomaticPortMapping = page.querySelector('#chkEnableUpnp').checked;
|
||||
apiClient.ajax({
|
||||
type: "POST",
|
||||
type: 'POST',
|
||||
data: config,
|
||||
url: apiClient.getUrl("Startup/RemoteAccess")
|
||||
url: apiClient.getUrl('Startup/RemoteAccess')
|
||||
}).then(function () {
|
||||
loading.hide();
|
||||
navigateToNextPage();
|
||||
@@ -18,7 +18,7 @@ define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loa
|
||||
}
|
||||
|
||||
function navigateToNextPage() {
|
||||
Dashboard.navigate("wizardfinish.html");
|
||||
Dashboard.navigate('wizardfinish.html');
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
@@ -28,12 +28,12 @@ define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loa
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector(".wizardSettingsForm").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
view.querySelector('.wizardSettingsForm').addEventListener('submit', onSubmit);
|
||||
view.addEventListener('viewshow', function () {
|
||||
document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
|
||||
});
|
||||
view.addEventListener("viewhide", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
view.addEventListener('viewhide', function () {
|
||||
document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loading) {
|
||||
"use strict";
|
||||
define(['loading', 'emby-checkbox', 'emby-button', 'emby-select'], function (loading) {
|
||||
'use strict';
|
||||
|
||||
function save(page) {
|
||||
loading.show();
|
||||
var apiClient = ApiClient;
|
||||
apiClient.getJSON(apiClient.getUrl("Startup/Configuration")).then(function (config) {
|
||||
config.PreferredMetadataLanguage = page.querySelector("#selectLanguage").value;
|
||||
config.MetadataCountryCode = page.querySelector("#selectCountry").value;
|
||||
apiClient.getJSON(apiClient.getUrl('Startup/Configuration')).then(function (config) {
|
||||
config.PreferredMetadataLanguage = page.querySelector('#selectLanguage').value;
|
||||
config.MetadataCountryCode = page.querySelector('#selectCountry').value;
|
||||
apiClient.ajax({
|
||||
type: "POST",
|
||||
type: 'POST',
|
||||
data: config,
|
||||
url: apiClient.getUrl("Startup/Configuration")
|
||||
url: apiClient.getUrl('Startup/Configuration')
|
||||
}).then(function () {
|
||||
loading.hide();
|
||||
navigateToNextPage();
|
||||
@@ -19,41 +19,41 @@ define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loa
|
||||
}
|
||||
|
||||
function populateLanguages(select, languages) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<option value=''></option>";
|
||||
|
||||
for (var i = 0, length = languages.length; i < length; i++) {
|
||||
var culture = languages[i];
|
||||
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>";
|
||||
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + '</option>';
|
||||
}
|
||||
|
||||
select.innerHTML = html;
|
||||
}
|
||||
|
||||
function populateCountries(select, allCountries) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
html += "<option value=''></option>";
|
||||
|
||||
for (var i = 0, length = allCountries.length; i < length; i++) {
|
||||
var culture = allCountries[i];
|
||||
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>";
|
||||
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + '</option>';
|
||||
}
|
||||
|
||||
select.innerHTML = html;
|
||||
}
|
||||
|
||||
function reloadData(page, config, cultures, countries) {
|
||||
populateLanguages(page.querySelector("#selectLanguage"), cultures);
|
||||
populateCountries(page.querySelector("#selectCountry"), countries);
|
||||
page.querySelector("#selectLanguage").value = config.PreferredMetadataLanguage;
|
||||
page.querySelector("#selectCountry").value = config.MetadataCountryCode;
|
||||
populateLanguages(page.querySelector('#selectLanguage'), cultures);
|
||||
populateCountries(page.querySelector('#selectCountry'), countries);
|
||||
page.querySelector('#selectLanguage').value = config.PreferredMetadataLanguage;
|
||||
page.querySelector('#selectCountry').value = config.MetadataCountryCode;
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function reload(page) {
|
||||
loading.show();
|
||||
var apiClient = ApiClient;
|
||||
var promise1 = apiClient.getJSON(apiClient.getUrl("Startup/Configuration"));
|
||||
var promise1 = apiClient.getJSON(apiClient.getUrl('Startup/Configuration'));
|
||||
var promise2 = apiClient.getCultures();
|
||||
var promise3 = apiClient.getCountries();
|
||||
Promise.all([promise1, promise2, promise3]).then(function (responses) {
|
||||
@@ -62,7 +62,7 @@ define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loa
|
||||
}
|
||||
|
||||
function navigateToNextPage() {
|
||||
Dashboard.navigate("wizardremoteaccess.html");
|
||||
Dashboard.navigate('wizardremoteaccess.html');
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
@@ -72,13 +72,13 @@ define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loa
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector(".wizardSettingsForm").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
view.querySelector('.wizardSettingsForm').addEventListener('submit', onSubmit);
|
||||
view.addEventListener('viewshow', function () {
|
||||
document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
|
||||
reload(this);
|
||||
});
|
||||
view.addEventListener("viewhide", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
view.addEventListener('viewhide', function () {
|
||||
document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
define(["jQuery", "loading", "emby-button", "emby-select"], function ($, loading) {
|
||||
"use strict";
|
||||
define(['jQuery', 'loading', 'emby-button', 'emby-select'], function ($, loading) {
|
||||
'use strict';
|
||||
|
||||
function loadPage(page, config, languageOptions) {
|
||||
$("#selectLocalizationLanguage", page).html(languageOptions.map(function (l) {
|
||||
return '<option value="' + l.Value + '">' + l.Name + "</option>";
|
||||
$('#selectLocalizationLanguage', page).html(languageOptions.map(function (l) {
|
||||
return '<option value="' + l.Value + '">' + l.Name + '</option>';
|
||||
})).val(config.UICulture);
|
||||
loading.hide();
|
||||
}
|
||||
@@ -11,38 +11,38 @@ define(["jQuery", "loading", "emby-button", "emby-select"], function ($, loading
|
||||
function save(page) {
|
||||
loading.show();
|
||||
var apiClient = ApiClient;
|
||||
apiClient.getJSON(apiClient.getUrl("Startup/Configuration")).then(function (config) {
|
||||
config.UICulture = $("#selectLocalizationLanguage", page).val();
|
||||
apiClient.getJSON(apiClient.getUrl('Startup/Configuration')).then(function (config) {
|
||||
config.UICulture = $('#selectLocalizationLanguage', page).val();
|
||||
apiClient.ajax({
|
||||
type: "POST",
|
||||
type: 'POST',
|
||||
data: config,
|
||||
url: apiClient.getUrl("Startup/Configuration")
|
||||
url: apiClient.getUrl('Startup/Configuration')
|
||||
}).then(function () {
|
||||
Dashboard.navigate("wizarduser.html");
|
||||
Dashboard.navigate('wizarduser.html');
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function onSubmit() {
|
||||
save($(this).parents(".page"));
|
||||
save($(this).parents('.page'));
|
||||
return false;
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
$(".wizardStartForm", view).on("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
$('.wizardStartForm', view).on('submit', onSubmit);
|
||||
view.addEventListener('viewshow', function () {
|
||||
document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
|
||||
loading.show();
|
||||
var page = this;
|
||||
var apiClient = ApiClient;
|
||||
var promise1 = apiClient.getJSON(apiClient.getUrl("Startup/Configuration"));
|
||||
var promise2 = apiClient.getJSON(apiClient.getUrl("Localization/Options"));
|
||||
var promise1 = apiClient.getJSON(apiClient.getUrl('Startup/Configuration'));
|
||||
var promise2 = apiClient.getJSON(apiClient.getUrl('Localization/Options'));
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
loadPage(page, responses[0], responses[1]);
|
||||
});
|
||||
});
|
||||
view.addEventListener("viewhide", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
view.addEventListener('viewhide', function () {
|
||||
document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "emby-button"], function (loading, globalize) {
|
||||
"use strict";
|
||||
define(['loading', 'globalize', 'dashboardcss', 'emby-input', 'emby-button', 'emby-button'], function (loading, globalize) {
|
||||
'use strict';
|
||||
|
||||
function getApiClient() {
|
||||
return ApiClient;
|
||||
}
|
||||
|
||||
function nextWizardPage() {
|
||||
Dashboard.navigate("wizardlibrary.html");
|
||||
Dashboard.navigate('wizardlibrary.html');
|
||||
}
|
||||
|
||||
function onUpdateUserComplete(result) {
|
||||
console.debug("user update complete: " + result);
|
||||
console.debug('user update complete: ' + result);
|
||||
loading.hide();
|
||||
nextWizardPage();
|
||||
}
|
||||
@@ -19,21 +19,21 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||
loading.show();
|
||||
var apiClient = getApiClient();
|
||||
apiClient.ajax({
|
||||
type: "POST",
|
||||
type: 'POST',
|
||||
data: {
|
||||
Name: form.querySelector("#txtUsername").value,
|
||||
Password: form.querySelector("#txtManualPassword").value
|
||||
Name: form.querySelector('#txtUsername').value,
|
||||
Password: form.querySelector('#txtManualPassword').value
|
||||
},
|
||||
url: apiClient.getUrl("Startup/User")
|
||||
url: apiClient.getUrl('Startup/User')
|
||||
}).then(onUpdateUserComplete);
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
var form = this;
|
||||
|
||||
if (form.querySelector("#txtManualPassword").value != form.querySelector("#txtPasswordConfirm").value) {
|
||||
require(["toast"], function (toast) {
|
||||
toast(globalize.translate("PasswordMatchError"));
|
||||
if (form.querySelector('#txtManualPassword').value != form.querySelector('#txtPasswordConfirm').value) {
|
||||
require(['toast'], function (toast) {
|
||||
toast(globalize.translate('PasswordMatchError'));
|
||||
});
|
||||
} else {
|
||||
submit(form);
|
||||
@@ -47,21 +47,21 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||
loading.show();
|
||||
var page = this;
|
||||
var apiClient = getApiClient();
|
||||
apiClient.getJSON(apiClient.getUrl("Startup/User")).then(function (user) {
|
||||
page.querySelector("#txtUsername").value = user.Name || "";
|
||||
page.querySelector("#txtManualPassword").value = user.Password || "";
|
||||
apiClient.getJSON(apiClient.getUrl('Startup/User')).then(function (user) {
|
||||
page.querySelector('#txtUsername').value = user.Name || '';
|
||||
page.querySelector('#txtManualPassword').value = user.Password || '';
|
||||
loading.hide();
|
||||
});
|
||||
}
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector(".wizardUserForm").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function () {
|
||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||
view.querySelector('.wizardUserForm').addEventListener('submit', onSubmit);
|
||||
view.addEventListener('viewshow', function () {
|
||||
document.querySelector('.skinHeader').classList.add('noHomeButtonHeader');
|
||||
});
|
||||
view.addEventListener("viewhide", function () {
|
||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||
view.addEventListener('viewhide', function () {
|
||||
document.querySelector('.skinHeader').classList.remove('noHomeButtonHeader');
|
||||
});
|
||||
view.addEventListener("viewshow", onViewShow);
|
||||
view.addEventListener('viewshow', onViewShow);
|
||||
};
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user