';
-
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem);
+
if (imgUrl) {
html += '
";
@@ -243,8 +246,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
html += '
';
html += '
';
-
var clientImage = DashboardPage.getClientImage(session);
+
if (clientImage) {
html += clientImage;
}
@@ -261,28 +264,36 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
html += '
';
}
- html += '
'
+ html += '
';
var nowPlayingName = DashboardPage.getNowPlayingName(session);
html += '
';
html += nowPlayingName.html;
html += "
";
html += '
' + DashboardPage.getSessionNowPlayingTime(session) + "
";
- html += '
'
+ html += '
';
if (nowPlayingItem && nowPlayingItem.RunTimeTicks) {
var percent = 100 * (session.PlayState.PositionTicks || 0) / nowPlayingItem.RunTimeTicks;
- html += indicators.getProgressHtml(percent, { containerClass: "playbackProgress" });
+ html += indicators.getProgressHtml(percent, {
+ containerClass: "playbackProgress"
+ });
} else {
// need to leave the element in just in case the device starts playback
- html += indicators.getProgressHtml(0, { containerClass: "playbackProgress hide" });
+ html += indicators.getProgressHtml(0, {
+ containerClass: "playbackProgress hide"
+ });
}
if (session.TranscodingInfo && session.TranscodingInfo.CompletionPercentage) {
var percent = session.TranscodingInfo.CompletionPercentage.toFixed(1);
- html += indicators.getProgressHtml(percent, { containerClass: "transcodingProgress" });
+ html += indicators.getProgressHtml(percent, {
+ containerClass: "transcodingProgress"
+ });
} else {
// same issue as playbackProgress element above
- html += indicators.getProgressHtml(0, { containerClass: "transcodingProgress hide" });
+ html += indicators.getProgressHtml(0, {
+ containerClass: "transcodingProgress hide"
+ });
}
html += "
";
@@ -317,6 +328,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
parentElement.insertAdjacentHTML("beforeend", html);
var deadSessionElem = parentElement.querySelector(".deadSession");
+
if (deadSessionElem) {
deadSessionElem.parentNode.removeChild(deadSessionElem);
}
@@ -340,9 +352,9 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
for (var i = 0, length = tasks.length; i < length; i++) {
var task = tasks[i];
-
html += "
";
html += task.Name + " ";
+
if (task.State === "Running") {
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
html += '';
@@ -373,19 +385,24 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
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 (session.TranscodingInfo && session.TranscodingInfo.Framerate) {
html += " (" + session.TranscodingInfo.Framerate + " fps)";
}
+
showTranscodingInfo = true;
} else if (displayPlayMethod === "DirectPlay") {
html += globalize.translate("DirectPlaying");
}
+
if (showTranscodingInfo) {
var line = [];
+
if (session.TranscodingInfo) {
if (session.TranscodingInfo.Bitrate) {
if (session.TranscodingInfo.Bitrate > 1e6) {
@@ -493,6 +510,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
},
getUsersHtml: function (session) {
var html = [];
+
if (session.UserId) {
html.push(session.UserName);
}
@@ -516,8 +534,8 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
},
updateSession: function (row, session) {
row.classList.remove("deadSession");
-
var nowPlayingItem = session.NowPlayingItem;
+
if (nowPlayingItem) {
row.classList.add("playingSession");
} else {
@@ -537,6 +555,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
}
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");
@@ -565,19 +584,29 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
}
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" });
+ playbackProgressElem.outerHTML = indicators.getProgressHtml(percent, {
+ containerClass: "playbackProgress"
+ });
} else {
- playbackProgressElem.outerHTML = indicators.getProgressHtml(0, { containerClass: "playbackProgress hide" });
+ playbackProgressElem.outerHTML = indicators.getProgressHtml(0, {
+ containerClass: "playbackProgress hide"
+ });
}
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" });
+ transcodingProgress.outerHTML = indicators.getProgressHtml(percent, {
+ containerClass: "transcodingProgress"
+ });
} else {
- transcodingProgress.outerHTML = indicators.getProgressHtml(0, { containerClass: "transcodingProgress hide" });
+ transcodingProgress.outerHTML = indicators.getProgressHtml(0, {
+ containerClass: "transcodingProgress hide"
+ });
}
var imgUrl = DashboardPage.getNowPlayingImageUrl(nowPlayingItem) || "";
@@ -815,10 +844,13 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
view.addEventListener("viewdestroy", function () {
var page = this;
var userActivityLog = page.userActivityLog;
+
if (userActivityLog) {
userActivityLog.destroy();
}
+
var serverActivityLog = page.serverActivityLog;
+
if (serverActivityLog) {
serverActivityLog.destroy();
}
diff --git a/src/controllers/device.js b/src/controllers/device.js
index e704b964a..cfe7efbe7 100644
--- a/src/controllers/device.js
+++ b/src/controllers/device.js
@@ -1,23 +1,25 @@
-define(["loading", "libraryMenu", "dom", "emby-input", "emby-button"], function(loading, libraryMenu, dom) {
+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"),
- promise1 = ApiClient.getJSON(ApiClient.getUrl("Devices/Info", {
- Id: id
- })),
- promise2 = ApiClient.getJSON(ApiClient.getUrl("Devices/Options", {
- Id: id
- }));
- Promise.all([promise1, promise2]).then(function(responses) {
- load(page, responses[0], responses[1]), loading.hide()
- })
+ var id = getParameterByName("id");
+ var promise1 = ApiClient.getJSON(ApiClient.getUrl("Devices/Info", {
+ Id: id
+ }));
+ var promise2 = ApiClient.getJSON(ApiClient.getUrl("Devices/Options", {
+ Id: id
+ }));
+ Promise.all([promise1, promise2]).then(function (responses) {
+ load(page, responses[0], responses[1]);
+ loading.hide();
+ });
}
function save(page) {
@@ -31,14 +33,18 @@ define(["loading", "libraryMenu", "dom", "emby-input", "emby-button"], function(
CustomName: page.querySelector("#txtCustomName").value
}),
contentType: "application/json"
- }).then(Dashboard.processServerConfigurationUpdateResult)
+ }).then(Dashboard.processServerConfigurationUpdateResult);
}
function onSubmit(e) {
var form = this;
- return save(dom.parentWithClass(form, "page")), e.preventDefault(), !1
+ save(dom.parentWithClass(form, "page"));
+ e.preventDefault();
+ return false;
}
- return function(view, params) {
- view.querySelector("form").addEventListener("submit", onSubmit), view.addEventListener("viewshow", loadData)
- }
-});
\ No newline at end of file
+
+ return function (view, params) {
+ view.querySelector("form").addEventListener("submit", onSubmit);
+ view.addEventListener("viewshow", loadData);
+ };
+});
diff --git a/src/controllers/devices.js b/src/controllers/devices.js
index 94d7eb70e..36f2cf88a 100644
--- a/src/controllers/devices.js
+++ b/src/controllers/devices.js
@@ -1,61 +1,73 @@
-define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "humanedate", "emby-button", "emby-itemscontainer", "cardStyle"], function(loading, dom, libraryMenu, globalize, imageHelper) {
+define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "humanedate", "emby-button", "emby-itemscontainer", "cardStyle"], function (loading, dom, libraryMenu, globalize, imageHelper) {
"use strict";
function canDelete(deviceId) {
- return deviceId !== ApiClient.deviceId()
+ return deviceId !== ApiClient.deviceId();
}
function deleteDevice(page, id) {
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"
- }).then(function() {
- loading.show(), ApiClient.ajax({
+ }).then(function () {
+ loading.show();
+ ApiClient.ajax({
type: "DELETE",
url: ApiClient.getUrl("Devices", {
Id: id
})
- }).then(function() {
- loadData(page)
- })
- })
- })
+ }).then(function () {
+ loadData(page);
+ });
+ });
+ });
}
function showDeviceMenu(view, btn, deviceId) {
var menuItems = [];
- canEdit && menuItems.push({
- name: globalize.translate("Edit"),
- id: "open",
- ironIcon: "mode-edit"
- }), canDelete(deviceId) && menuItems.push({
- name: globalize.translate("Delete"),
- id: "delete",
- ironIcon: "delete"
- }), require(["actionsheet"], function(actionsheet) {
+
+ if (canEdit) {
+ menuItems.push({
+ name: globalize.translate("Edit"),
+ id: "open",
+ ironIcon: "mode-edit"
+ });
+ }
+
+ if (canDelete(deviceId)) {
+ menuItems.push({
+ name: globalize.translate("Delete"),
+ id: "delete",
+ ironIcon: "delete"
+ });
+ }
+
+ require(["actionsheet"], function (actionsheet) {
actionsheet.show({
items: menuItems,
positionTo: btn,
- callback: function(id) {
+ callback: function (id) {
switch (id) {
case "open":
Dashboard.navigate("device.html?id=" + deviceId);
break;
+
case "delete":
- deleteDevice(view, deviceId)
+ deleteDevice(view, deviceId);
}
}
- })
- })
+ });
+ });
}
function load(page, devices) {
var html = "";
- html += devices.map(function(device) {
+ html += devices.map(function (device) {
var deviceHtml = "";
deviceHtml += "";
deviceHtml += '
";
deviceHtml += '";
deviceHtml += "
";
+
if (device.LastUserName) {
deviceHtml += device.LastUserName;
deviceHtml += ", " + humaneDate(device.DateLastActivity);
}
+
deviceHtml += " ";
deviceHtml += "
";
deviceHtml += "
";
@@ -99,17 +117,24 @@ define(["loading", "dom", "libraryMenu", "globalize", "scripts/imagehelper", "hu
}
function loadData(page) {
- loading.show(), ApiClient.getJSON(ApiClient.getUrl("Devices")).then(function(result) {
- load(page, result.Items), loading.hide()
- })
+ loading.show();
+ ApiClient.getJSON(ApiClient.getUrl("Devices")).then(function (result) {
+ load(page, result.Items);
+ loading.hide();
+ });
}
+
var canEdit = ApiClient.isMinServerVersion("3.4.1.31");
- return function(view, params) {
- view.querySelector(".devicesList").addEventListener("click", function(e) {
+ return function (view, params) {
+ view.querySelector(".devicesList").addEventListener("click", function (e) {
var btnDeviceMenu = dom.parentWithClass(e.target, "btnDeviceMenu");
- btnDeviceMenu && showDeviceMenu(view, btnDeviceMenu, btnDeviceMenu.getAttribute("data-id"))
- }), view.addEventListener("viewshow", function() {
- loadData(this)
- })
- }
+
+ if (btnDeviceMenu) {
+ showDeviceMenu(view, btnDeviceMenu, btnDeviceMenu.getAttribute("data-id"));
+ }
+ });
+ view.addEventListener("viewshow", function () {
+ loadData(this);
+ });
+ };
});
diff --git a/src/controllers/dlnaprofile.js b/src/controllers/dlnaprofile.js
index b4e320e6e..e9239693d 100644
--- a/src/controllers/dlnaprofile.js
+++ b/src/controllers/dlnaprofile.js
@@ -65,8 +65,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
profile.ContainerProfiles = profile.ContainerProfiles || [];
profile.CodecProfiles = profile.CodecProfiles || [];
profile.ResponseProfiles = profile.ResponseProfiles || [];
- var usersHtml = " " + users.map(function (u__w) {
- return '' + u__w.Name + " ";
+ var usersHtml = " " + users.map(function (u) {
+ return '' + u.Name + " ";
}).join("");
$("#selectUser", page).html(usersHtml).val(profile.UserId || "");
renderSubProfiles(page, profile);
@@ -74,12 +74,12 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
function renderIdentificationHeaders(page, headers) {
var index = 0;
- var html = '' + headers.map(function (h__e) {
+ var html = '
' + headers.map(function (h) {
var li = '
';
li += '
info ';
li += '
';
- li += '
' + h__e.Name + ": " + (h__e.Value || "") + " ";
- li += '
' + (h__e.Match || "") + "
";
+ li += '
' + h.Name + ": " + (h.Value || "") + " ";
+ li += '
' + (h.Match || "") + "
";
li += "
";
li += '';
li += "
";
@@ -130,11 +130,11 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
}
function renderXmlDocumentAttributes(page, attribute) {
- var html = '
' + attribute.map(function (h__r) {
+ var html = '
' + attribute.map(function (h) {
var li = '
';
li += '
info ';
li += '
';
- li += '
' + h__r.Name + " = " + (h__r.Value || "") + " ";
+ li += '' + h.Name + " = " + (h.Value || "") + " ";
li += "";
li += '
delete ';
return li += "
";
@@ -172,11 +172,11 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
function renderSubtitleProfiles(page, profiles) {
var index = 0;
- var html = '
' + profiles.map(function (h__t) {
+ var html = '
' + profiles.map(function (h) {
var li = '
';
li += '
info ';
li += '
';
- li += '
' + (h__t.Format || "") + " ";
+ li += '' + (h.Format || "") + " ";
li += "";
li += '
delete ';
li += "
";
@@ -248,8 +248,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
html += '
';
var currentType;
- for (var i__y = 0, length = profiles.length; i__y < length; i__y++) {
- var profile = profiles[i__y];
+ for (var i = 0, length = profiles.length; i < length; i++) {
+ var profile = profiles[i];
if (profile.Type !== currentType) {
html += '' + profile.Type + " ";
@@ -257,7 +257,7 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
}
html += "";
}
@@ -308,8 +308,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
html += '';
var currentType;
- for (var i__u = 0, length = profiles.length; i__u < length; i__u++) {
- var profile = profiles[i__u];
+ for (var i = 0, length = profiles.length; i < length; i++) {
+ var profile = profiles[i];
if (profile.Type !== currentType) {
html += '' + profile.Type + " ";
@@ -317,7 +317,7 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
}
html += "";
}
@@ -394,8 +394,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
html += '';
var currentType;
- for (var i__i = 0, length = profiles.length; i__i < length; i__i++) {
- var profile = profiles[i__i];
+ for (var i = 0, length = profiles.length; i < length; i++) {
+ var profile = profiles[i];
if (profile.Type !== currentType) {
html += '' + profile.Type + " ";
@@ -403,19 +403,19 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
}
html += "";
}
@@ -465,8 +465,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
html += '';
var currentType;
- for (var i__p = 0, length = profiles.length; i__p < length; i__p++) {
- var profile = profiles[i__p];
+ for (var i = 0, length = profiles.length; i < length; i++) {
+ var profile = profiles[i];
var type = profile.Type.replace("VideoAudio", "Video Audio");
if (type !== currentType) {
@@ -475,19 +475,19 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
}
html += "";
}
@@ -537,8 +537,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
html += '';
var currentType;
- for (var i__s = 0, length = profiles.length; i__s < length; i__s++) {
- var profile = profiles[i__s];
+ for (var i = 0, length = profiles.length; i < length; i++) {
+ var profile = profiles[i];
if (profile.Type !== currentType) {
html += '' + profile.Type + " ";
@@ -546,7 +546,7 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
}
html += "";
- html += '
';
+ html += ' ';
html += "" + Globalize.translate("ValueContainer").replace("{0}", profile.Container || allText) + "
";
if ("Video" == profile.Type) {
@@ -560,14 +560,14 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
if (profile.Conditions && profile.Conditions.length) {
html += "";
- html += Globalize.translate("ValueConditions").replace("{0}", profile.Conditions.map(function (c__d) {
- return c__d.Property;
+ html += Globalize.translate("ValueConditions").replace("{0}", profile.Conditions.map(function (c) {
+ return c.Property;
}).join(", "));
html += "
";
}
html += " ";
- html += '
delete ';
+ html += '
delete ';
html += "
";
}
@@ -649,8 +649,8 @@ define(["jQuery", "loading", "fnchecked", "emby-select", "emby-button", "emby-in
profile.Name = $("#txtName", page).val();
profile.EnableAlbumArtInDidl = $("#chkEnableAlbumArtInDidl", page).checked();
profile.EnableSingleAlbumArtLimit = $("#chkEnableSingleImageLimit", page).checked();
- profile.SupportedMediaTypes = $(".chkMediaType:checked", page).get().map(function (c__f) {
- return c__f.getAttribute("data-value");
+ profile.SupportedMediaTypes = $(".chkMediaType:checked", page).get().map(function (c) {
+ return c.getAttribute("data-value");
}).join(",");
profile.Identification = profile.Identification || {};
profile.FriendlyName = $("#txtInfoFriendlyName", page).val();
diff --git a/src/controllers/dlnaprofiles.js b/src/controllers/dlnaprofiles.js
index 95350120c..ae708bcd4 100644
--- a/src/controllers/dlnaprofiles.js
+++ b/src/controllers/dlnaprofiles.js
@@ -1,48 +1,75 @@
-define(["jQuery", "globalize", "loading", "libraryMenu", "listViewStyle", "emby-button"], function($, globalize, loading, libraryMenu) {
+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) {
- renderUserProfiles(page, result), renderSystemProfiles(page, result), loading.hide()
- })
+ loading.show();
+ ApiClient.getJSON(ApiClient.getUrl("Dlna/ProfileInfos")).then(function (result) {
+ renderUserProfiles(page, result);
+ renderSystemProfiles(page, result);
+ loading.hide();
+ });
}
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 = "";
- profiles.length && (html += '');
+
+ if (profiles.length) {
+ html += '
';
+ }
+
for (var i = 0, length = profiles.length; i < length; i++) {
var profile = profiles[i];
- html += '
', html += '
live_tv ', html += '
", "User" == profile.Type && (html += '
delete '), html += "
"
+ html += '
';
+ html += '
live_tv ';
+ html += '
";
+
+ if ("User" == profile.Type) {
+ html += '
delete ';
+ }
+
+ html += "
";
}
- profiles.length && (html += "
"), element.innerHTML = html, $(".btnDeleteProfile", element).on("click", function() {
+
+ if (profiles.length) {
+ html += "
";
+ }
+
+ element.innerHTML = html;
+ $(".btnDeleteProfile", element).on("click", function () {
var id = this.getAttribute("data-profileid");
- deleteProfile(page, id)
- })
+ deleteProfile(page, id);
+ });
}
function deleteProfile(page, id) {
- require(["confirm"], function(confirm) {
- confirm(globalize.translate("MessageConfirmProfileDeletion"), globalize.translate("HeaderConfirmProfileDeletion")).then(function() {
- loading.show(), ApiClient.ajax({
+ 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)
- }).then(function() {
- loading.hide(), loadProfiles(page)
- })
- })
- })
+ }).then(function () {
+ loading.hide();
+ loadProfiles(page);
+ });
+ });
+ });
}
function getTabs() {
@@ -52,10 +79,11 @@ define(["jQuery", "globalize", "loading", "libraryMenu", "listViewStyle", "emby-
}, {
href: "dlnaprofiles.html",
name: globalize.translate("TabProfiles")
- }]
+ }];
}
- $(document).on("pageshow", "#dlnaProfilesPage", function() {
- libraryMenu.setTabs("dlna", 1, getTabs), loadProfiles(this)
- })
-});
\ No newline at end of file
+ $(document).on("pageshow", "#dlnaProfilesPage", function () {
+ libraryMenu.setTabs("dlna", 1, getTabs);
+ loadProfiles(this);
+ });
+});
diff --git a/src/controllers/dlnasettings.js b/src/controllers/dlnasettings.js
index cc4693096..fbb3af120 100644
--- a/src/controllers/dlnasettings.js
+++ b/src/controllers/dlnasettings.js
@@ -1,20 +1,34 @@
-define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, libraryMenu) {
+define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
"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);
- var usersHtml = users.map(function(u) {
- return '' + u.Name + " "
+ 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 '' + u.Name + " ";
}).join("");
- $("#selectUser", page).html(usersHtml).val(config.DefaultUserId || ""), loading.hide()
+ $("#selectUser", page).html(usersHtml).val(config.DefaultUserId || "");
+ loading.hide();
}
function onSubmit() {
loading.show();
var form = this;
- return 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)
- }), !1
+ 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() {
@@ -24,17 +38,19 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, l
}, {
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), loading.show();
- var page = this,
- promise1 = ApiClient.getNamedConfiguration("dlna"),
- promise2 = ApiClient.getUsers();
- Promise.all([promise1, promise2]).then(function(responses) {
- loadPage(page, responses[0], responses[1])
- })
- })
-});
\ No newline at end of file
+
+ $(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 promise2 = ApiClient.getUsers();
+ Promise.all([promise1, promise2]).then(function (responses) {
+ loadPage(page, responses[0], responses[1]);
+ });
+ });
+});
diff --git a/src/controllers/edititemmetadata.js b/src/controllers/edititemmetadata.js
index bb5e70695..aba741d64 100644
--- a/src/controllers/edititemmetadata.js
+++ b/src/controllers/edititemmetadata.js
@@ -1,17 +1,31 @@
-define(["loading", "scripts/editorsidebar"], function(loading) {
+define(["loading", "scripts/editorsidebar"], function (loading) {
"use strict";
function reload(context, itemId) {
- loading.show(), itemId ? require(["metadataEditor"], function(metadataEditor) {
- metadataEditor.embed(context.querySelector(".editPageInnerContent"), itemId, ApiClient.serverInfo().Id)
- }) : (context.querySelector(".editPageInnerContent").innerHTML = "", loading.hide())
+ loading.show();
+
+ if (itemId) {
+ require(["metadataEditor"], function (metadataEditor) {
+ metadataEditor.embed(context.querySelector(".editPageInnerContent"), itemId, ApiClient.serverInfo().Id);
+ });
+ } else {
+ context.querySelector(".editPageInnerContent").innerHTML = "";
+ loading.hide();
+ }
}
- return function(view, params) {
- view.addEventListener("viewshow", function() {
- reload(this, MetadataEditor.getCurrentItemId())
- }), MetadataEditor.setCurrentItemId(null), view.querySelector(".libraryTree").addEventListener("itemclicked", function(event) {
+
+ return function (view, params) {
+ view.addEventListener("viewshow", function () {
+ reload(this, MetadataEditor.getCurrentItemId());
+ });
+ MetadataEditor.setCurrentItemId(null);
+ view.querySelector(".libraryTree").addEventListener("itemclicked", function (event) {
var data = event.detail;
- data.id != MetadataEditor.getCurrentItemId() && (MetadataEditor.setCurrentItemId(data.id), reload(view, data.id))
- })
- }
-});
\ No newline at end of file
+
+ if (data.id != MetadataEditor.getCurrentItemId()) {
+ MetadataEditor.setCurrentItemId(data.id);
+ reload(view, data.id);
+ }
+ });
+ };
+});
diff --git a/src/controllers/encodingsettings.js b/src/controllers/encodingsettings.js
index 0319d59a7..f3dfd2706 100644
--- a/src/controllers/encodingsettings.js
+++ b/src/controllers/encodingsettings.js
@@ -1,9 +1,9 @@
-define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function($, loading, globalize, dom, libraryMenu) {
+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);
@@ -17,19 +17,22 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function($, loa
page.querySelector("#chkEnableSubtitleExtraction").checked = config.EnableSubtitleExtraction || false;
page.querySelector("#selectVideoDecoder").dispatchEvent(new CustomEvent("change", {
bubbles: true
- })), loading.hide()
+ }));
+ loading.hide();
}
function onSaveEncodingPathFailure(response) {
loading.hide();
var msg = "";
- msg = globalize.translate("FFmpegSavePathNotFound"), require(["alert"], function(alert) {
- alert(msg)
- })
+ msg = globalize.translate("FFmpegSavePathNotFound");
+
+ require(["alert"], function (alert) {
+ alert(msg);
+ });
}
function updateEncoder(form) {
- return ApiClient.getSystemInfo().then(function(systemInfo) {
+ return ApiClient.getSystemInfo().then(function (systemInfo) {
return ApiClient.ajax({
url: ApiClient.getUrl("System/MediaEncoder/Path"),
type: "POST",
@@ -37,37 +40,67 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function($, loa
Path: form.querySelector(".txtEncoderPath").value,
PathType: "Custom"
}
- }).then(Dashboard.processServerConfigurationUpdateResult, onSaveEncodingPathFailure)
- })
+ }).then(Dashboard.processServerConfigurationUpdateResult, onSaveEncodingPathFailure);
+ });
}
function onSubmit() {
- var form = this,
- 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.H264Preset = form.querySelector("#selectH264Preset").value, config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0"), config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").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")
- }), config.EnableHardwareEncoding = form.querySelector("#chkHardwareEncoding").checked, ApiClient.updateNamedConfiguration("encoding", config).then(function() {
- updateEncoder(form)
- })
- })
- };
- return $("#selectVideoDecoder", form).val() ? require(["alert"], function(alert) {
- alert({
- title: globalize.translate("TitleHardwareAcceleration"),
- text: globalize.translate("HardwareAccelerationWarning")
- }).then(onDecoderConfirmed)
- }) : onDecoderConfirmed(), !1
+ var form = this;
+
+ 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.H264Preset = form.querySelector("#selectH264Preset").value;
+ config.H264Crf = parseInt(form.querySelector("#txtH264Crf").value || "0");
+ config.EnableSubtitleExtraction = form.querySelector("#chkEnableSubtitleExtraction").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");
+ });
+ config.EnableHardwareEncoding = form.querySelector("#chkHardwareEncoding").checked;
+ ApiClient.updateNamedConfiguration("encoding", config).then(function () {
+ updateEncoder(form);
+ });
+ });
+ };
+
+ if ($("#selectVideoDecoder", form).val()) {
+ require(["alert"], function (alert) {
+ alert({
+ title: globalize.translate("TitleHardwareAcceleration"),
+ text: globalize.translate("HardwareAccelerationWarning")
+ }).then(onDecoderConfirmed);
+ });
+ } else {
+ onDecoderConfirmed();
+ }
+
+ return false;
}
function setDecodingCodecsVisible(context, value) {
value = value || "";
var any;
- Array.prototype.forEach.call(context.querySelectorAll(".chkDecodeCodec"), function(c) {
- -1 === c.getAttribute("data-types").split(",").indexOf(value) ? dom.parentWithTag(c, "LABEL").classList.add("hide") : (dom.parentWithTag(c, "LABEL").classList.remove("hide"), any = !0)
- }), any ? context.querySelector(".decodingCodecsList").classList.remove("hide") : context.querySelector(".decodingCodecsList").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");
+ any = true;
+ }
+ });
+
+ if (any) {
+ context.querySelector(".decodingCodecsList").classList.remove("hide");
+ } else {
+ context.querySelector(".decodingCodecsList").classList.add("hide");
+ }
}
function getTabs() {
@@ -80,44 +113,69 @@ define(["jQuery", "loading", "globalize", "dom", "libraryMenu"], function($, loa
}, {
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() {
- "vaapi" == this.value ? (page.querySelector(".fldVaapiDevice").classList.remove("hide"), page.querySelector("#txtVaapiDevice").setAttribute("required", "required")) : (page.querySelector(".fldVaapiDevice").classList.add("hide"), page.querySelector("#txtVaapiDevice").removeAttribute("required")), this.value ? page.querySelector(".hardwareAccelerationOptions").classList.remove("hide") : page.querySelector(".hardwareAccelerationOptions").classList.add("hide"), setDecodingCodecsVisible(page, this.value)
- }), $("#btnSelectEncoderPath", page).on("click.selectDirectory", function() {
- require(["directorybrowser"], function(directoryBrowser) {
- var picker = new directoryBrowser;
+ 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");
+ }
+
+ if (this.value) {
+ page.querySelector(".hardwareAccelerationOptions").classList.remove("hide");
+ } else {
+ page.querySelector(".hardwareAccelerationOptions").classList.add("hide");
+ }
+
+ setDecodingCodecsVisible(page, this.value);
+ });
+ $("#btnSelectEncoderPath", page).on("click.selectDirectory", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- includeFiles: !0,
- callback: function(path) {
- path && $(".txtEncoderPath", page).val(path), picker.close()
+ includeFiles: true,
+ callback: function (path) {
+ if (path) {
+ $(".txtEncoderPath", page).val(path);
+ }
+
+ picker.close();
}
- })
- })
- }), $("#btnSelectTranscodingTempPath", page).on("click.selectDirectory", function() {
- require(["directorybrowser"], function(directoryBrowser) {
- var picker = new directoryBrowser;
+ });
+ });
+ });
+ $("#btnSelectTranscodingTempPath", page).on("click.selectDirectory", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- callback: function(path) {
- path && $("#txtTranscodingTempPath", page).val(path), picker.close()
+ callback: function (path) {
+ if (path) {
+ $("#txtTranscodingTempPath", page).val(path);
+ }
+
+ picker.close();
},
- validateWriteable: !0,
+ validateWriteable: true,
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);
var page = this;
- ApiClient.getNamedConfiguration("encoding").then(function(config) {
- ApiClient.getSystemInfo().then(function(systemInfo) {
+ ApiClient.getNamedConfiguration("encoding").then(function (config) {
+ ApiClient.getSystemInfo().then(function (systemInfo) {
loadPage(page, config, systemInfo);
- })
- })
- })
+ });
+ });
+ });
});
diff --git a/src/controllers/forgotpassword.js b/src/controllers/forgotpassword.js
index ac010a9b3..e0f8ea4ef 100644
--- a/src/controllers/forgotpassword.js
+++ b/src/controllers/forgotpassword.js
@@ -1,37 +1,53 @@
-define([], function() {
+define([], function () {
"use strict";
function processForgotPasswordResult(result) {
- if ("ContactAdmin" == result.Action) return void Dashboard.alert({
- message: Globalize.translate("MessageContactAdminToResetPassword"),
- title: Globalize.translate("HeaderForgotPassword")
- });
- if ("InNetworkRequired" == result.Action) return void Dashboard.alert({
- message: Globalize.translate("MessageForgotPasswordInNetworkRequired"),
- title: Globalize.translate("HeaderForgotPassword")
- });
+ if ("ContactAdmin" == result.Action) {
+ return void Dashboard.alert({
+ message: Globalize.translate("MessageContactAdminToResetPassword"),
+ title: Globalize.translate("HeaderForgotPassword")
+ });
+ }
+
+ if ("InNetworkRequired" == result.Action) {
+ return void Dashboard.alert({
+ message: Globalize.translate("MessageForgotPasswordInNetworkRequired"),
+ title: Globalize.translate("HeaderForgotPassword")
+ });
+ }
+
if ("PinCode" == result.Action) {
var msg = Globalize.translate("MessageForgotPasswordFileCreated");
- return msg += " ", msg += " ", msg += "Enter PIN here to finish Password Reset " ,msg += " ",msg += result.PinFile, msg += " ", void Dashboard.alert({
+ msg += " ";
+ msg += " ";
+ msg += "Enter PIN here to finish Password Reset ";
+ msg += " ";
+ msg += result.PinFile;
+ msg += " ";
+ return void Dashboard.alert({
message: msg,
title: Globalize.translate("HeaderForgotPassword"),
- callback: function() {
- Dashboard.navigate("forgotpasswordpin.html")
+ callback: function () {
+ Dashboard.navigate("forgotpasswordpin.html");
}
- })
+ });
}
}
- return function(view, params) {
+
+ return function (view, params) {
function onSubmit(e) {
- return ApiClient.ajax({
+ ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("Users/ForgotPassword"),
dataType: "json",
data: {
EnteredUsername: view.querySelector("#txtName").value
}
- }).then(processForgotPasswordResult), e.preventDefault(), !1
+ }).then(processForgotPasswordResult);
+ e.preventDefault();
+ return false;
}
- view.querySelector("form").addEventListener("submit", onSubmit)
- }
+
+ view.querySelector("form").addEventListener("submit", onSubmit);
+ };
});
diff --git a/src/controllers/forgotpasswordpin.js b/src/controllers/forgotpasswordpin.js
index e7dccc7be..47b1c899b 100644
--- a/src/controllers/forgotpasswordpin.js
+++ b/src/controllers/forgotpasswordpin.js
@@ -1,33 +1,41 @@
-define([], function() {
+define([], function () {
"use strict";
function processForgotPasswordResult(result) {
if (result.Success) {
var msg = Globalize.translate("MessagePasswordResetForUsers");
- return msg += " ", msg += " ", msg += result.UsersReset.join(" "), void Dashboard.alert({
+ msg += " ";
+ msg += " ";
+ msg += result.UsersReset.join(" ");
+ return void Dashboard.alert({
message: msg,
title: Globalize.translate("HeaderPasswordReset"),
- callback: function() {
- window.location.href = "index.html"
+ callback: function () {
+ window.location.href = "index.html";
}
- })
+ });
}
+
Dashboard.alert({
message: Globalize.translate("MessageInvalidForgotPasswordPin"),
title: Globalize.translate("HeaderPasswordReset")
- })
+ });
}
- return function(view, params) {
+
+ return function (view, params) {
function onSubmit(e) {
- return ApiClient.ajax({
+ ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("Users/ForgotPassword/Pin"),
dataType: "json",
data: {
Pin: view.querySelector("#txtPin").value
}
- }).then(processForgotPasswordResult), e.preventDefault(), !1
+ }).then(processForgotPasswordResult);
+ e.preventDefault();
+ return false;
}
- view.querySelector("form").addEventListener("submit", onSubmit)
- }
-});
\ No newline at end of file
+
+ view.querySelector("form").addEventListener("submit", onSubmit);
+ };
+});
diff --git a/src/controllers/home.js b/src/controllers/home.js
index 0ab31f291..b1dd70ebd 100644
--- a/src/controllers/home.js
+++ b/src/controllers/home.js
@@ -1,4 +1,4 @@
-define(["tabbedView", "globalize", "require", "emby-tabs", "emby-button", "emby-scroller"], function(TabbedView, globalize, require) {
+define(["tabbedView", "globalize", "require", "emby-tabs", "emby-button", "emby-scroller"], function (TabbedView, globalize, require) {
"use strict";
function getTabs() {
@@ -6,47 +6,70 @@ define(["tabbedView", "globalize", "require", "emby-tabs", "emby-button", "emby-
name: globalize.translate("Home")
}, {
name: globalize.translate("Favorites")
- }]
+ }];
}
function getDefaultTabIndex() {
- return 0
+ return 0;
}
function getRequirePromise(deps) {
- return new Promise(function(resolve, reject) {
- require(deps, resolve)
- })
+ return new Promise(function (resolve, reject) {
+ require(deps, resolve);
+ });
}
function getTabController(index) {
- if (null == index) throw new Error("index cannot be null");
+ if (null == index) {
+ throw new Error("index cannot be null");
+ }
+
var depends = [];
+
switch (index) {
case 0:
depends.push("controllers/hometab");
break;
+
case 1:
- depends.push("controllers/favorites")
+ depends.push("controllers/favorites");
}
+
var instance = this;
- return getRequirePromise(depends).then(function(controllerFactory) {
+ return getRequirePromise(depends).then(function (controllerFactory) {
var controller = instance.tabControllers[index];
+
if (!controller) {
- controller = new controllerFactory(instance.view.querySelector(".tabContent[data-index='" + index + "']"), instance.params), instance.tabControllers[index] = controller
+ controller = new controllerFactory(instance.view.querySelector(".tabContent[data-index='" + index + "']"), instance.params);
+ instance.tabControllers[index] = controller;
}
- return controller
- })
+
+ return controller;
+ });
}
function HomeView(view, params) {
- TabbedView.call(this, view, params)
+ TabbedView.call(this, view, params);
}
- return Object.assign(HomeView.prototype, TabbedView.prototype), HomeView.prototype.getTabs = getTabs, HomeView.prototype.getDefaultTabIndex = getDefaultTabIndex, HomeView.prototype.getTabController = getTabController, HomeView.prototype.setTitle = function() {
- Emby.Page.setTitle(null)
- }, HomeView.prototype.onPause = function() {
- TabbedView.prototype.onPause.call(this), document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")
- }, HomeView.prototype.onResume = function(options) {
- TabbedView.prototype.onResume.call(this, options), document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")
- }, HomeView
-});
\ No newline at end of file
+
+ Object.assign(HomeView.prototype, TabbedView.prototype);
+ HomeView.prototype.getTabs = getTabs;
+ HomeView.prototype.getDefaultTabIndex = getDefaultTabIndex;
+ HomeView.prototype.getTabController = getTabController;
+
+ HomeView.prototype.setTitle = function () {
+ Emby.Page.setTitle(null);
+ };
+
+ HomeView.prototype.onPause = function () {
+ TabbedView.prototype.onPause.call(this);
+ document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
+ };
+
+ HomeView.prototype.onResume = function (options) {
+ TabbedView.prototype.onResume.call(this, options);
+ document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
+ };
+
+ return HomeView;
+});
diff --git a/src/controllers/hometab.js b/src/controllers/hometab.js
index fed9b7214..d2adcb2da 100644
--- a/src/controllers/hometab.js
+++ b/src/controllers/hometab.js
@@ -1,35 +1,74 @@
-define(["userSettings", "loading", "connectionManager", "apphost", "layoutManager", "focusManager", "homeSections", "emby-itemscontainer"], function(userSettings, loading, connectionManager, appHost, layoutManager, focusManager, homeSections) {
+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.view = view;
+ this.params = params;
+ this.apiClient = connectionManager.currentApiClient();
+ this.sectionsContainer = view.querySelector(".sections");
+ view.querySelector(".sections").addEventListener("settingschange", onHomeScreenSettingsChanged.bind(this));
}
function onHomeScreenSettingsChanged() {
- this.sectionsRendered = !1, this.paused || this.onResume({
- refresh: !0
- })
+ this.sectionsRendered = false;
+
+ if (!this.paused) {
+ this.onResume({
+ refresh: true
+ });
+ }
}
- return HomeTab.prototype.onResume = function(options) {
+
+ HomeTab.prototype.onResume = function (options) {
if (this.sectionsRendered) {
var sectionsContainer = this.sectionsContainer;
- return sectionsContainer ? homeSections.resume(sectionsContainer, options) : Promise.resolve()
+
+ if (sectionsContainer) {
+ return homeSections.resume(sectionsContainer, options);
+ }
+
+ return Promise.resolve();
}
+
loading.show();
- var view = this.view,
- apiClient = this.apiClient;
- return this.destroyHomeSections(), this.sectionsRendered = !0, apiClient.getCurrentUser().then(function(user) {
- return homeSections.loadSections(view.querySelector(".sections"), apiClient, user, userSettings).then(function() {
- options.autoFocus && focusManager.autoFocus(view), loading.hide()
- })
- })
- }, HomeTab.prototype.onPause = function() {
+ var view = this.view;
+ var apiClient = this.apiClient;
+ this.destroyHomeSections();
+ this.sectionsRendered = true;
+ return apiClient.getCurrentUser().then(function (user) {
+ return homeSections.loadSections(view.querySelector(".sections"), apiClient, user, userSettings).then(function () {
+ if (options.autoFocus) {
+ focusManager.autoFocus(view);
+ }
+
+ loading.hide();
+ });
+ });
+ };
+
+ HomeTab.prototype.onPause = function () {
var sectionsContainer = this.sectionsContainer;
- sectionsContainer && homeSections.pause(sectionsContainer)
- }, HomeTab.prototype.destroy = function() {
- this.view = null, this.params = null, this.apiClient = null, this.destroyHomeSections(), this.sectionsContainer = null
- }, HomeTab.prototype.destroyHomeSections = function() {
+
+ if (sectionsContainer) {
+ homeSections.pause(sectionsContainer);
+ }
+ };
+
+ HomeTab.prototype.destroy = function () {
+ this.view = null;
+ this.params = null;
+ this.apiClient = null;
+ this.destroyHomeSections();
+ this.sectionsContainer = null;
+ };
+
+ HomeTab.prototype.destroyHomeSections = function () {
var sectionsContainer = this.sectionsContainer;
- sectionsContainer && homeSections.destroySections(sectionsContainer)
- }, HomeTab
-});
\ No newline at end of file
+
+ if (sectionsContainer) {
+ homeSections.destroySections(sectionsContainer);
+ }
+ };
+
+ return HomeTab;
+});
diff --git a/src/controllers/installedplugins.js b/src/controllers/installedplugins.js
index f9653fe26..a88f49d18 100644
--- a/src/controllers/installedplugins.js
+++ b/src/controllers/installedplugins.js
@@ -1,21 +1,22 @@
-define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"], function(loading, libraryMenu, dom, globalize) {
+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").replace("{0}", name);
- require(["confirm"], function(confirm) {
+
+ require(["confirm"], function (confirm) {
confirm({
title: globalize.translate("UninstallPluginHeader"),
text: msg,
primary: "delete",
confirmText: globalize.translate("UninstallPluginHeader")
- }).then(function() {
+ }).then(function () {
loading.show();
- ApiClient.uninstallPlugin(uniqueid).then(function() {
+ ApiClient.uninstallPlugin(uniqueid).then(function () {
reloadList(page);
});
- })
- })
+ });
+ });
}
function showNoConfigurationMessage() {
@@ -31,23 +32,24 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
}
function getPluginCardHtml(plugin, pluginConfigurationPages) {
- var configPage = pluginConfigurationPages.filter(function(pluginConfigurationPage) {
- return pluginConfigurationPage.PluginId == plugin.Id;
+ var configPage = pluginConfigurationPages.filter(function (pluginConfigurationPage) {
+ return pluginConfigurationPage.PluginId == plugin.Id;
})[0];
var configPageUrl = configPage ? Dashboard.getConfigurationPageUrl(configPage.Name) : null;
-
var html = "";
html += "";
html += '
';
html += '
";
html += '";
}
+
installedPluginsElement.innerHTML = html;
loading.hide();
}
@@ -103,6 +111,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
var name = card.getAttribute("data-name");
var configHref = card.querySelector(".cardContent").getAttribute("href");
var menuItems = [];
+
if (configHref) {
menuItems.push({
name: globalize.translate("ButtonSettings"),
@@ -110,22 +119,25 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
ironIcon: "mode-edit"
});
}
+
menuItems.push({
name: globalize.translate("ButtonUninstall"),
id: "delete",
ironIcon: "delete"
});
- require(["actionsheet"], function(actionsheet) {
+
+ require(["actionsheet"], function (actionsheet) {
actionsheet.show({
items: menuItems,
positionTo: elem,
- callback: function(resultId) {
+ callback: function (resultId) {
switch (resultId) {
case "open":
Dashboard.navigate(configHref);
break;
+
case "delete":
- deletePlugin(page, id, name)
+ deletePlugin(page, id, name);
}
}
});
@@ -134,7 +146,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
function reloadList(page) {
loading.show();
- ApiClient.getInstalledPlugins().then(function(plugins) {
+ ApiClient.getInstalledPlugins().then(function (plugins) {
renderPlugins(page, plugins);
});
}
@@ -146,7 +158,7 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
}, {
href: "availableplugins.html",
name: globalize.translate("TabCatalog")
- }]
+ }];
}
function onInstalledPluginsClick(e) {
@@ -156,16 +168,18 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
showConnectMessage();
} else {
var btnCardMenu = dom.parentWithClass(e.target, "btnCardMenu");
- btnCardMenu && showPluginMenu(dom.parentWithClass(btnCardMenu, "page"), btnCardMenu);
+
+ if (btnCardMenu) {
+ showPluginMenu(dom.parentWithClass(btnCardMenu, "page"), btnCardMenu);
+ }
}
}
- pageIdOn("pageshow", "pluginsPage", function() {
+ pageIdOn("pageshow", "pluginsPage", function () {
libraryMenu.setTabs("plugins", 0, getTabs);
reloadList(this);
});
-
window.PluginsPage = {
renderPlugins: renderPlugins
- }
+ };
});
diff --git a/src/controllers/itemdetailpage.js b/src/controllers/itemdetailpage.js
index 03e0f68a9..5bc54edf7 100644
--- a/src/controllers/itemdetailpage.js
+++ b/src/controllers/itemdetailpage.js
@@ -1,37 +1,61 @@
-define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-button", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function(loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) {
+define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuilder", "datetime", "mediaInfo", "backdrop", "listView", "itemContextMenu", "itemHelper", "dom", "indicators", "apphost", "imageLoader", "libraryMenu", "globalize", "browser", "events", "scrollHelper", "playbackManager", "libraryBrowser", "scrollStyles", "emby-itemscontainer", "emby-checkbox", "emby-button", "emby-playstatebutton", "emby-ratingbutton", "emby-scroller", "emby-select"], function (loading, appRouter, layoutManager, connectionManager, cardBuilder, datetime, mediaInfo, backdrop, listView, itemContextMenu, itemHelper, dom, indicators, appHost, imageLoader, libraryMenu, globalize, browser, events, scrollHelper, playbackManager, libraryBrowser) {
"use strict";
function getPromise(apiClient, params) {
var id = params.id;
- if (id) return apiClient.getItem(apiClient.getCurrentUserId(), id);
- if (params.seriesTimerId) return apiClient.getLiveTvSeriesTimer(params.seriesTimerId);
- var name = params.genre;
- if (name) return apiClient.getGenre(name, apiClient.getCurrentUserId());
- if (name = params.musicgenre) return apiClient.getMusicGenre(name, apiClient.getCurrentUserId());
- if (name = params.musicartist) return apiClient.getArtist(name, apiClient.getCurrentUserId());
- throw new Error("Invalid request")
+
+ if (id) {
+ return apiClient.getItem(apiClient.getCurrentUserId(), id);
+ }
+
+ if (params.seriesTimerId) {
+ return apiClient.getLiveTvSeriesTimer(params.seriesTimerId);
+ }
+
+ if (params.genre) {
+ return apiClient.getGenre(params.genre, apiClient.getCurrentUserId());
+ }
+
+ if (params.musicgenre) {
+ return apiClient.getMusicGenre(params.musicgenre, apiClient.getCurrentUserId());
+ }
+
+ if (params.musicartist) {
+ return apiClient.getArtist(params.musicartist, apiClient.getCurrentUserId());
+ }
+
+ throw new Error("Invalid request");
}
function hideAll(page, className, show) {
- var i, length, elems = page.querySelectorAll("." + className);
- for (i = 0, length = elems.length; i < length; i++) show ? elems[i].classList.remove("hide") : elems[i].classList.add("hide")
+ var i;
+ var length;
+ var elems = page.querySelectorAll("." + className);
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ if (show) {
+ elems[i].classList.remove("hide");
+ } else {
+ elems[i].classList.add("hide");
+ }
+ }
}
function getContextMenuOptions(item, user, button) {
var options = {
item: item,
- open: !1,
- play: !1,
- playAllFromHere: !1,
- queueAllFromHere: !1,
+ open: false,
+ play: false,
+ playAllFromHere: false,
+ queueAllFromHere: false,
positionTo: button,
- cancelTimer: !1,
- record: !1,
- deleteItem: !0 === item.IsFolder,
- shuffle: !1,
- instantMix: !1,
+ cancelTimer: false,
+ record: false,
+ deleteItem: true === item.IsFolder,
+ shuffle: false,
+ instantMix: false,
user: user,
- share: !0
+ share: true
};
return options;
}
@@ -39,18 +63,20 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
function getProgramScheduleHtml(items, options) {
options = options || {};
var html = "";
- return html += '
', html += listView.getListViewHtml({
+ html += '
';
+ html += listView.getListViewHtml({
items: items,
- enableUserDataButtons: !1,
- image: !0,
+ enableUserDataButtons: false,
+ image: true,
imageSource: "channel",
- showProgramDateTime: !0,
- showChannel: !1,
- mediaInfo: !1,
+ showProgramDateTime: true,
+ showChannel: false,
+ mediaInfo: false,
action: "none",
- moreButton: !1,
- recordButton: !1
- }), html += "
"
+ moreButton: false,
+ recordButton: false
+ });
+ return html += "
";
}
function renderSeriesTimerSchedule(page, apiClient, seriesTimerId) {
@@ -59,184 +85,339 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Thumb",
SortBy: "StartDate",
- EnableTotalRecordCount: !1,
- EnableUserData: !1,
+ EnableTotalRecordCount: false,
+ EnableUserData: false,
SeriesTimerId: seriesTimerId,
Fields: "ChannelInfo,ChannelImage"
- }).then(function(result) {
- result.Items.length && result.Items[0].SeriesTimerId != seriesTimerId && (result.Items = []);
- var html = getProgramScheduleHtml(result.Items),
- scheduleTab = page.querySelector(".seriesTimerSchedule");
- scheduleTab.innerHTML = html, imageLoader.lazyChildren(scheduleTab)
- })
+ }).then(function (result) {
+ if (result.Items.length && result.Items[0].SeriesTimerId != seriesTimerId) {
+ result.Items = [];
+ }
+
+ var html = getProgramScheduleHtml(result.Items);
+ var scheduleTab = page.querySelector(".seriesTimerSchedule");
+ scheduleTab.innerHTML = html;
+ imageLoader.lazyChildren(scheduleTab);
+ });
}
function renderTimerEditor(page, item, apiClient, user) {
- if ("Recording" !== item.Type || !user.Policy.EnableLiveTvManagement || !item.TimerId || "InProgress" !== item.Status) return void hideAll(page, "btnCancelTimer");
- hideAll(page, "btnCancelTimer", !0)
+ if ("Recording" !== item.Type || !user.Policy.EnableLiveTvManagement || !item.TimerId || "InProgress" !== item.Status) {
+ return void hideAll(page, "btnCancelTimer");
+ }
+
+ hideAll(page, "btnCancelTimer", true);
}
function renderSeriesTimerEditor(page, item, apiClient, user) {
- return "SeriesTimer" !== item.Type ? void hideAll(page, "btnCancelSeriesTimer") : user.Policy.EnableLiveTvManagement ? (require(["seriesRecordingEditor"], function(seriesRecordingEditor) {
- seriesRecordingEditor.embed(item, apiClient.serverId(), {
- context: page.querySelector(".seriesRecordingEditor")
- })
- }), page.querySelector(".seriesTimerScheduleSection").classList.remove("hide"), hideAll(page, "btnCancelSeriesTimer", !0), void renderSeriesTimerSchedule(page, apiClient, item.Id)) : (page.querySelector(".seriesTimerScheduleSection").classList.add("hide"), void hideAll(page, "btnCancelSeriesTimer"))
+ if ("SeriesTimer" !== item.Type) {
+ return void hideAll(page, "btnCancelSeriesTimer");
+ }
+
+ if (user.Policy.EnableLiveTvManagement) {
+ require(["seriesRecordingEditor"], function (seriesRecordingEditor) {
+ seriesRecordingEditor.embed(item, apiClient.serverId(), {
+ context: page.querySelector(".seriesRecordingEditor")
+ });
+ });
+
+ page.querySelector(".seriesTimerScheduleSection").classList.remove("hide");
+ hideAll(page, "btnCancelSeriesTimer", true);
+ return void renderSeriesTimerSchedule(page, apiClient, item.Id);
+ }
+
+ page.querySelector(".seriesTimerScheduleSection").classList.add("hide");
+ return void hideAll(page, "btnCancelSeriesTimer");
}
function renderTrackSelections(page, instance, item, forceReload) {
var select = page.querySelector(".selectSource");
- if (!item.MediaSources || !itemHelper.supportsMediaSourceSelection(item) || -1 === playbackManager.getSupportedCommands().indexOf("PlayMediaSource") || !playbackManager.canPlay(item)) return page.querySelector(".trackSelections").classList.add("hide"), select.innerHTML = "", page.querySelector(".selectVideo").innerHTML = "", page.querySelector(".selectAudio").innerHTML = "", void(page.querySelector(".selectSubtitles").innerHTML = "");
- playbackManager.getPlaybackMediaSources(item).then(function(mediaSources) {
- instance._currentPlaybackMediaSources = mediaSources, page.querySelector(".trackSelections").classList.remove("hide"), select.setLabel(globalize.translate("LabelVersion"));
- var currentValue = select.value,
- selectedId = mediaSources[0].Id;
- select.innerHTML = mediaSources.map(function(v) {
+
+ if (!item.MediaSources || !itemHelper.supportsMediaSourceSelection(item) || -1 === playbackManager.getSupportedCommands().indexOf("PlayMediaSource") || !playbackManager.canPlay(item)) {
+ page.querySelector(".trackSelections").classList.add("hide");
+ select.innerHTML = "";
+ page.querySelector(".selectVideo").innerHTML = "";
+ page.querySelector(".selectAudio").innerHTML = "";
+ page.querySelector(".selectSubtitles").innerHTML = "";
+ return;
+ }
+
+ playbackManager.getPlaybackMediaSources(item).then(function (mediaSources) {
+ instance._currentPlaybackMediaSources = mediaSources;
+ page.querySelector(".trackSelections").classList.remove("hide");
+ select.setLabel(globalize.translate("LabelVersion"));
+ var currentValue = select.value;
+ var selectedId = mediaSources[0].Id;
+ select.innerHTML = mediaSources.map(function (v) {
var selected = v.Id === selectedId ? " selected" : "";
- return '
" + v.Name + " "
- }).join(""), mediaSources.length > 1 ? page.querySelector(".selectSourceContainer").classList.remove("hide") : page.querySelector(".selectSourceContainer").classList.add("hide"), (select.value !== currentValue || forceReload) && (renderVideoSelections(page, mediaSources), renderAudioSelections(page, mediaSources), renderSubtitleSelections(page, mediaSources))
- })
+ return '
" + v.Name + " ";
+ }).join("");
+
+ if (mediaSources.length > 1) {
+ page.querySelector(".selectSourceContainer").classList.remove("hide");
+ } else {
+ page.querySelector(".selectSourceContainer").classList.add("hide");
+ }
+
+ if (select.value !== currentValue || forceReload) {
+ renderVideoSelections(page, mediaSources);
+ renderAudioSelections(page, mediaSources);
+ renderSubtitleSelections(page, mediaSources);
+ }
+ });
}
function renderVideoSelections(page, mediaSources) {
- var mediaSourceId = page.querySelector(".selectSource").value,
- mediaSource = mediaSources.filter(function(m) {
- return m.Id === mediaSourceId
- })[0],
- tracks = mediaSource.MediaStreams.filter(function(m) {
- return "Video" === m.Type
- }),
- select = page.querySelector(".selectVideo");
+ var mediaSourceId = page.querySelector(".selectSource").value;
+ var mediaSource = mediaSources.filter(function (m) {
+ return m.Id === mediaSourceId;
+ })[0];
+ var tracks = mediaSource.MediaStreams.filter(function (m) {
+ return "Video" === m.Type;
+ });
+ var select = page.querySelector(".selectVideo");
select.setLabel(globalize.translate("LabelVideo"));
var selectedId = tracks.length ? tracks[0].Index : -1;
- select.innerHTML = tracks.map(function(v) {
- var selected = v.Index === selectedId ? " selected" : "",
- titleParts = [],
- resolutionText = mediaInfo.getResolutionText(v);
- return resolutionText && titleParts.push(resolutionText), v.Codec && titleParts.push(v.Codec.toUpperCase()), '
" + (v.DisplayTitle || titleParts.join(" ")) + " "
- }).join(""), select.setAttribute("disabled", "disabled"), tracks.length ? page.querySelector(".selectVideoContainer").classList.remove("hide") : page.querySelector(".selectVideoContainer").classList.add("hide")
+ select.innerHTML = tracks.map(function (v) {
+ var selected = v.Index === selectedId ? " selected" : "";
+ var titleParts = [];
+ var resolutionText = mediaInfo.getResolutionText(v);
+
+ if (resolutionText) {
+ titleParts.push(resolutionText);
+ }
+
+ if (v.Codec) {
+ titleParts.push(v.Codec.toUpperCase());
+ }
+
+ return '
" + (v.DisplayTitle || titleParts.join(" ")) + " ";
+ }).join("");
+ select.setAttribute("disabled", "disabled");
+
+ if (tracks.length) {
+ page.querySelector(".selectVideoContainer").classList.remove("hide");
+ } else {
+ page.querySelector(".selectVideoContainer").classList.add("hide");
+ }
}
function renderAudioSelections(page, mediaSources) {
- var mediaSourceId = page.querySelector(".selectSource").value,
- mediaSource = mediaSources.filter(function(m) {
- return m.Id === mediaSourceId
- })[0],
- tracks = mediaSource.MediaStreams.filter(function(m) {
- return "Audio" === m.Type
- }),
- select = page.querySelector(".selectAudio");
+ var mediaSourceId = page.querySelector(".selectSource").value;
+ var mediaSource = mediaSources.filter(function (m) {
+ return m.Id === mediaSourceId;
+ })[0];
+ var tracks = mediaSource.MediaStreams.filter(function (m) {
+ return "Audio" === m.Type;
+ });
+ var select = page.querySelector(".selectAudio");
select.setLabel(globalize.translate("LabelAudio"));
var selectedId = mediaSource.DefaultAudioStreamIndex;
- select.innerHTML = tracks.map(function(v) {
+ select.innerHTML = tracks.map(function (v) {
var selected = v.Index === selectedId ? " selected" : "";
- return '
" + v.DisplayTitle + " "
- }).join(""), tracks.length > 1 ? select.removeAttribute("disabled") : select.setAttribute("disabled", "disabled"), tracks.length ? page.querySelector(".selectAudioContainer").classList.remove("hide") : page.querySelector(".selectAudioContainer").classList.add("hide")
+ return '
" + v.DisplayTitle + " ";
+ }).join("");
+
+ if (tracks.length > 1) {
+ select.removeAttribute("disabled");
+ } else {
+ select.setAttribute("disabled", "disabled");
+ }
+
+ if (tracks.length) {
+ page.querySelector(".selectAudioContainer").classList.remove("hide");
+ } else {
+ page.querySelector(".selectAudioContainer").classList.add("hide");
+ }
}
function renderSubtitleSelections(page, mediaSources) {
- var mediaSourceId = page.querySelector(".selectSource").value,
- mediaSource = mediaSources.filter(function(m) {
- return m.Id === mediaSourceId
- })[0],
- tracks = mediaSource.MediaStreams.filter(function(m) {
- return "Subtitle" === m.Type
- }),
- select = page.querySelector(".selectSubtitles");
+ var mediaSourceId = page.querySelector(".selectSource").value;
+ var mediaSource = mediaSources.filter(function (m) {
+ return m.Id === mediaSourceId;
+ })[0];
+ var tracks = mediaSource.MediaStreams.filter(function (m) {
+ return "Subtitle" === m.Type;
+ });
+ var select = page.querySelector(".selectSubtitles");
select.setLabel(globalize.translate("LabelSubtitles"));
var selectedId = null == mediaSource.DefaultSubtitleStreamIndex ? -1 : mediaSource.DefaultSubtitleStreamIndex;
+
if (tracks.length) {
var selected = -1 === selectedId ? " selected" : "";
- select.innerHTML = '
' + globalize.translate("Off") + " " + tracks.map(function(v) {
- return selected = v.Index === selectedId ? " selected" : "", '
" + v.DisplayTitle + " "
- }).join(""), page.querySelector(".selectSubtitlesContainer").classList.remove("hide")
- } else select.innerHTML = "", page.querySelector(".selectSubtitlesContainer").classList.add("hide")
+ select.innerHTML = '
' + globalize.translate("Off") + " " + tracks.map(function (v) {
+ selected = v.Index === selectedId ? " selected" : "";
+ return '
" + v.DisplayTitle + " ";
+ }).join("");
+ page.querySelector(".selectSubtitlesContainer").classList.remove("hide");
+ } else {
+ select.innerHTML = "";
+ page.querySelector(".selectSubtitlesContainer").classList.add("hide");
+ }
}
function reloadPlayButtons(page, item) {
- var canPlay = !1;
+ var canPlay = false;
+
if ("Program" == item.Type) {
- var now = new Date;
- now >= datetime.parseISO8601Date(item.StartDate, !0) && now < datetime.parseISO8601Date(item.EndDate, !0) ? (hideAll(page, "btnPlay", !0), canPlay = !0) : hideAll(page, "btnPlay"), hideAll(page, "btnResume"), hideAll(page, "btnInstantMix"), hideAll(page, "btnShuffle")
+ var now = new Date();
+
+ if (now >= datetime.parseISO8601Date(item.StartDate, true) && now < datetime.parseISO8601Date(item.EndDate, true)) {
+ hideAll(page, "btnPlay", true);
+ canPlay = true;
+ } else {
+ hideAll(page, "btnPlay");
+ }
+
+ hideAll(page, "btnResume");
+ hideAll(page, "btnInstantMix");
+ hideAll(page, "btnShuffle");
} else if (playbackManager.canPlay(item)) {
- hideAll(page, "btnPlay", !0);
+ hideAll(page, "btnPlay", true);
var enableInstantMix = -1 !== ["Audio", "MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type);
hideAll(page, "btnInstantMix", enableInstantMix);
var enableShuffle = item.IsFolder || -1 !== ["MusicAlbum", "MusicGenre", "MusicArtist"].indexOf(item.Type);
- hideAll(page, "btnShuffle", enableShuffle), canPlay = !0, hideAll(page, "btnResume", item.UserData && item.UserData.PlaybackPositionTicks > 0)
- } else hideAll(page, "btnPlay"), hideAll(page, "btnResume"), hideAll(page, "btnInstantMix"), hideAll(page, "btnShuffle");
- return canPlay
+ hideAll(page, "btnShuffle", enableShuffle);
+ canPlay = true;
+ hideAll(page, "btnResume", item.UserData && item.UserData.PlaybackPositionTicks > 0);
+ } else {
+ hideAll(page, "btnPlay");
+ hideAll(page, "btnResume");
+ hideAll(page, "btnInstantMix");
+ hideAll(page, "btnShuffle");
+ }
+
+ return canPlay;
}
function reloadUserDataButtons(page, item) {
- var i, length, btnPlaystates = page.querySelectorAll(".btnPlaystate");
+ var i;
+ var length;
+ var btnPlaystates = page.querySelectorAll(".btnPlaystate");
+
for (i = 0, length = btnPlaystates.length; i < length; i++) {
var btnPlaystate = btnPlaystates[i];
- itemHelper.canMarkPlayed(item) ? (btnPlaystate.classList.remove("hide"), btnPlaystate.setItem(item)) : (btnPlaystate.classList.add("hide"), btnPlaystate.setItem(null))
+
+ if (itemHelper.canMarkPlayed(item)) {
+ btnPlaystate.classList.remove("hide");
+ btnPlaystate.setItem(item);
+ } else {
+ btnPlaystate.classList.add("hide");
+ btnPlaystate.setItem(null);
+ }
}
+
var btnUserRatings = page.querySelectorAll(".btnUserRating");
+
for (i = 0, length = btnUserRatings.length; i < length; i++) {
var btnUserRating = btnUserRatings[i];
- itemHelper.canRate(item) ? (btnUserRating.classList.remove("hide"), btnUserRating.setItem(item)) : (btnUserRating.classList.add("hide"), btnUserRating.setItem(null))
+
+ if (itemHelper.canRate(item)) {
+ btnUserRating.classList.remove("hide");
+ btnUserRating.setItem(item);
+ } else {
+ btnUserRating.classList.add("hide");
+ btnUserRating.setItem(null);
+ }
}
}
function getArtistLinksHtml(artists, serverId, context) {
- for (var html = [], i = 0, length = artists.length; i < length; i++) {
- var artist = artists[i],
- href = appRouter.getRouteUrl(artist, {
- context: context,
- itemType: "MusicArtist",
- serverId: serverId
- });
- html.push('
' + artist.Name + " ")
+ var html = [];
+
+ for (var i = 0, length = artists.length; i < length; i++) {
+ var artist = artists[i];
+ var href = appRouter.getRouteUrl(artist, {
+ context: context,
+ itemType: "MusicArtist",
+ serverId: serverId
+ });
+ html.push('
' + artist.Name + " ");
}
- return html = html.join(" / ")
+
+ return html = html.join(" / ");
}
function renderName(item, container, isStatic, context) {
- var parentRoute, parentNameHtml = [],
- parentNameLast = !1;
- item.AlbumArtists ? (parentNameHtml.push(getArtistLinksHtml(item.AlbumArtists, item.ServerId, context)), parentNameLast = !0) : item.ArtistItems && item.ArtistItems.length && "MusicVideo" === item.Type ? (parentNameHtml.push(getArtistLinksHtml(item.ArtistItems, item.ServerId, context)), parentNameLast = !0) : item.SeriesName && "Episode" === item.Type ? (parentRoute = appRouter.getRouteUrl({
- Id: item.SeriesId,
- Name: item.SeriesName,
- Type: "Series",
- IsFolder: !0,
- ServerId: item.ServerId
- }, {
- context: context
- }), parentNameHtml.push('
' + item.SeriesName + " ")) : (item.IsSeries || item.EpisodeTitle) && parentNameHtml.push(item.Name), item.SeriesName && "Season" === item.Type ? (parentRoute = appRouter.getRouteUrl({
- Id: item.SeriesId,
- Name: item.SeriesName,
- Type: "Series",
- IsFolder: !0,
- ServerId: item.ServerId
- }, {
- context: context
- }), parentNameHtml.push('
' + item.SeriesName + " ")) : null != item.ParentIndexNumber && "Episode" === item.Type ? (parentRoute = appRouter.getRouteUrl({
- Id: item.SeasonId,
- Name: item.SeasonName,
- Type: "Season",
- IsFolder: !0,
- ServerId: item.ServerId
- }, {
- context: context
- }), parentNameHtml.push('
' + item.SeasonName + " ")) : null != item.ParentIndexNumber && item.IsSeries ? parentNameHtml.push(item.SeasonName || "S" + item.ParentIndexNumber) : item.Album && item.AlbumId && ("MusicVideo" === item.Type || "Audio" === item.Type) ? (parentRoute = appRouter.getRouteUrl({
- Id: item.AlbumId,
- Name: item.Album,
- Type: "MusicAlbum",
- IsFolder: !0,
- ServerId: item.ServerId
- }, {
- context: context
- }), parentNameHtml.push('
' + item.Album + " ")) : item.Album && parentNameHtml.push(item.Album);
- var html = "";
- parentNameHtml.length && (html = parentNameLast ? '
' + parentNameHtml.join(" - ") + " " : '
' + parentNameHtml.join(" - ") + " ");
- var name = itemHelper.getDisplayName(item, {
- includeParentInfo: !1
- });
+ var parentRoute;
+ var parentNameHtml = [];
+ var parentNameLast = false;
+ if (item.AlbumArtists) {
+ parentNameHtml.push(getArtistLinksHtml(item.AlbumArtists, item.ServerId, context));
+ parentNameLast = true;
+ } else if (item.ArtistItems && item.ArtistItems.length && "MusicVideo" === item.Type) {
+ parentNameHtml.push(getArtistLinksHtml(item.ArtistItems, item.ServerId, context));
+ parentNameLast = true;
+ } else if (item.SeriesName && "Episode" === item.Type) {
+ parentRoute = appRouter.getRouteUrl({
+ Id: item.SeriesId,
+ Name: item.SeriesName,
+ Type: "Series",
+ IsFolder: true,
+ ServerId: item.ServerId
+ }, {
+ context: context
+ });
+ parentNameHtml.push('
' + item.SeriesName + " ");
+ } else if (item.IsSeries || item.EpisodeTitle) {
+ parentNameHtml.push(item.Name);
+ }
+
+ if (item.SeriesName && "Season" === item.Type) {
+ parentRoute = appRouter.getRouteUrl({
+ Id: item.SeriesId,
+ Name: item.SeriesName,
+ Type: "Series",
+ IsFolder: true,
+ ServerId: item.ServerId
+ }, {
+ context: context
+ });
+ parentNameHtml.push('
' + item.SeriesName + " ");
+ } else if (null != item.ParentIndexNumber && "Episode" === item.Type) {
+ parentRoute = appRouter.getRouteUrl({
+ Id: item.SeasonId,
+ Name: item.SeasonName,
+ Type: "Season",
+ IsFolder: true,
+ ServerId: item.ServerId
+ }, {
+ context: context
+ });
+ parentNameHtml.push('
' + item.SeasonName + " ");
+ } else if (null != item.ParentIndexNumber && item.IsSeries) {
+ parentNameHtml.push(item.SeasonName || "S" + item.ParentIndexNumber);
+ } else if (item.Album && item.AlbumId && ("MusicVideo" === item.Type || "Audio" === item.Type)) {
+ parentRoute = appRouter.getRouteUrl({
+ Id: item.AlbumId,
+ Name: item.Album,
+ Type: "MusicAlbum",
+ IsFolder: true,
+ ServerId: item.ServerId
+ }, {
+ context: context
+ });
+ parentNameHtml.push('
' + item.Album + " ");
+ } else if (item.Album) {
+ parentNameHtml.push(item.Album);
+ }
+
+ var html = "";
+
+ if (parentNameHtml.length) {
+ if (parentNameLast) {
+ html = '
' + parentNameHtml.join(" - ") + " ";
+ } else {
+ html = '
' + parentNameHtml.join(" - ") + " ";
+ }
+ }
+
+ var name = itemHelper.getDisplayName(item, {
+ includeParentInfo: false
+ });
var offset = parentNameLast ? ".25em" : ".5em";
+
if (html && !parentNameLast) {
html += '
' + name + ' ';
} else {
@@ -248,110 +429,206 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
}
container.innerHTML = html;
- html.length ? container.classList.remove("hide") : container.classList.add("hide")
+
+ if (html.length) {
+ container.classList.remove("hide");
+ } else {
+ container.classList.add("hide");
+ }
}
function setTrailerButtonVisibility(page, item) {
- (item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers") ? hideAll(page, "btnPlayTrailer", !0) : hideAll(page, "btnPlayTrailer")
- }
-
- function renderDetailPageBackdrop(page, item, apiClient) {
- var imgUrl, screenWidth = screen.availWidth,
- hasbackdrop = !1,
- itemBackdropElement = page.querySelector("#itemBackdrop"),
- usePrimaryImage = ("Video" === item.MediaType && "Movie" !== item.Type && "Trailer" !== item.Type) || (item.MediaType && "Video" !== item.MediaType) || ("MusicAlbum" === item.Type) || ("MusicArtist" === item.Type);
- return "Program" === item.Type && item.ImageTags && item.ImageTags.Thumb ? (imgUrl = apiClient.getScaledImageUrl(item.Id, {
- type: "Thumb",
- index: 0,
- maxWidth: screenWidth,
- tag: item.ImageTags.Thumb
- }), itemBackdropElement.classList.remove("noBackdrop"), imageLoader.lazyImage(itemBackdropElement, imgUrl, !1), hasbackdrop = !0) : usePrimaryImage && item.ImageTags && item.ImageTags.Primary ? (imgUrl = apiClient.getScaledImageUrl(item.Id, {
- type: "Primary",
- index: 0,
- maxWidth: screenWidth,
- tag: item.ImageTags.Primary
- }), itemBackdropElement.classList.remove("noBackdrop"), imageLoader.lazyImage(itemBackdropElement, imgUrl, !1), hasbackdrop = !0) : item.BackdropImageTags && item.BackdropImageTags.length ? (imgUrl = apiClient.getScaledImageUrl(item.Id, {
- type: "Backdrop",
- index: 0,
- maxWidth: screenWidth,
- tag: item.BackdropImageTags[0]
- }), itemBackdropElement.classList.remove("noBackdrop"), imageLoader.lazyImage(itemBackdropElement, imgUrl, !1), hasbackdrop = !0) : item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length ? (imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, {
- type: "Backdrop",
- index: 0,
- tag: item.ParentBackdropImageTags[0],
- maxWidth: screenWidth
- }), itemBackdropElement.classList.remove("noBackdrop"), imageLoader.lazyImage(itemBackdropElement, imgUrl, !1), hasbackdrop = !0) : item.ImageTags && item.ImageTags.Thumb ? (imgUrl = apiClient.getScaledImageUrl(item.Id, {
- type: "Thumb",
- index: 0,
- maxWidth: screenWidth,
- tag: item.ImageTags.Thumb
- }), itemBackdropElement.classList.remove("noBackdrop"), imageLoader.lazyImage(itemBackdropElement, imgUrl, !1), hasbackdrop = !0) : (itemBackdropElement.classList.add("noBackdrop"), itemBackdropElement.style.backgroundImage = ""), hasbackdrop
- }
-
- function reloadFromItem(instance, page, params, item, user) {
- var context = params.context;
- renderName(item, page.querySelector(".nameContainer"), !1, context);
- var apiClient = connectionManager.getApiClient(item.ServerId);
- renderSeriesTimerEditor(page, item, apiClient, user), renderTimerEditor(page, item, apiClient, user), renderImage(page, item, apiClient, user), renderLogo(page, item, apiClient), setTitle(item, apiClient), setInitialCollapsibleState(page, item, apiClient, context, user), renderDetails(page, item, apiClient, context), renderTrackSelections(page, instance, item), dom.getWindowSize().innerWidth >= 1e3 ? backdrop.setBackdrops([item]) : backdrop.clear(), renderDetailPageBackdrop(page, item, apiClient);
- var canPlay = reloadPlayButtons(page, item);
if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers")) {
hideAll(page, "btnPlayTrailer", true);
} else {
hideAll(page, "btnPlayTrailer");
}
+ }
+
+ function renderDetailPageBackdrop(page, item, apiClient) {
+ var imgUrl;
+ var screenWidth = screen.availWidth;
+ var hasbackdrop = false;
+ var itemBackdropElement = page.querySelector("#itemBackdrop");
+ var usePrimaryImage = item.MediaType === "Video" && item.Type !== "Movie" && item.Type !== "Trailer" ||
+ item.MediaType && item.MediaType !== "Video" ||
+ item.Type === "MusicAlbum" ||
+ item.Type === "MusicArtist";
+
+ if ("Program" === item.Type && item.ImageTags && item.ImageTags.Thumb) {
+ imgUrl = apiClient.getScaledImageUrl(item.Id, {
+ type: "Thumb",
+ index: 0,
+ maxWidth: screenWidth,
+ tag: item.ImageTags.Thumb
+ });
+ itemBackdropElement.classList.remove("noBackdrop");
+ imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
+ hasbackdrop = true;
+ } else if (usePrimaryImage && item.ImageTags && item.ImageTags.Primary) {
+ imgUrl = apiClient.getScaledImageUrl(item.Id, {
+ type: "Primary",
+ index: 0,
+ maxWidth: screenWidth,
+ tag: item.ImageTags.Primary
+ });
+ itemBackdropElement.classList.remove("noBackdrop");
+ imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
+ hasbackdrop = true;
+ } else if (item.BackdropImageTags && item.BackdropImageTags.length) {
+ imgUrl = apiClient.getScaledImageUrl(item.Id, {
+ type: "Backdrop",
+ index: 0,
+ maxWidth: screenWidth,
+ tag: item.BackdropImageTags[0]
+ });
+ itemBackdropElement.classList.remove("noBackdrop");
+ imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
+ hasbackdrop = true;
+ } else if (item.ParentBackdropItemId && item.ParentBackdropImageTags && item.ParentBackdropImageTags.length) {
+ imgUrl = apiClient.getScaledImageUrl(item.ParentBackdropItemId, {
+ type: "Backdrop",
+ index: 0,
+ tag: item.ParentBackdropImageTags[0],
+ maxWidth: screenWidth
+ });
+ itemBackdropElement.classList.remove("noBackdrop");
+ imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
+ hasbackdrop = true;
+ } else if (item.ImageTags && item.ImageTags.Thumb) {
+ imgUrl = apiClient.getScaledImageUrl(item.Id, {
+ type: "Thumb",
+ index: 0,
+ maxWidth: screenWidth,
+ tag: item.ImageTags.Thumb
+ });
+ itemBackdropElement.classList.remove("noBackdrop");
+ imageLoader.lazyImage(itemBackdropElement, imgUrl, false);
+ hasbackdrop = true;
+ } else {
+ itemBackdropElement.classList.add("noBackdrop");
+ itemBackdropElement.style.backgroundImage = "";
+ }
+
+ return hasbackdrop;
+ }
+
+ function reloadFromItem(instance, page, params, item, user) {
+ var context = params.context;
+ renderName(item, page.querySelector(".nameContainer"), false, context);
+ var apiClient = connectionManager.getApiClient(item.ServerId);
+ renderSeriesTimerEditor(page, item, apiClient, user);
+ renderTimerEditor(page, item, apiClient, user);
+ renderImage(page, item, apiClient, user);
+ renderLogo(page, item, apiClient);
+ setTitle(item, apiClient);
+ setInitialCollapsibleState(page, item, apiClient, context, user);
+ renderDetails(page, item, apiClient, context);
+ renderTrackSelections(page, instance, item);
+
+ if (dom.getWindowSize().innerWidth >= 1000) {
+ backdrop.setBackdrops([item]);
+ } else {
+ backdrop.clear();
+ }
+
+ renderDetailPageBackdrop(page, item, apiClient);
+ var canPlay = reloadPlayButtons(page, item);
+
+ if ((item.LocalTrailerCount || item.RemoteTrailers && item.RemoteTrailers.length) && -1 !== playbackManager.getSupportedCommands().indexOf("PlayTrailers")) {
+ hideAll(page, "btnPlayTrailer", true);
+ } else {
+ hideAll(page, "btnPlayTrailer");
+ }
+
setTrailerButtonVisibility(page, item);
+
if (item.CanDelete && !item.IsFolder) {
hideAll(page, "btnDeleteItem", true);
} else {
hideAll(page, "btnDeleteItem");
}
+
if ("Program" !== item.Type || canPlay) {
hideAll(page, "mainDetailButtons", true);
} else {
hideAll(page, "mainDetailButtons");
}
+
showRecordingFields(instance, page, item, user);
- var groupedVersions = (item.MediaSources || []).filter(function(g) {
- return "Grouping" == g.Type
+ var groupedVersions = (item.MediaSources || []).filter(function (g) {
+ return "Grouping" == g.Type;
});
- user.Policy.IsAdministrator && groupedVersions.length ? page.querySelector(".btnSplitVersions").classList.remove("hide") : page.querySelector(".btnSplitVersions").classList.add("hide"), itemContextMenu.getCommands(getContextMenuOptions(item, user)).length ? hideAll(page, "btnMoreCommands", !0) : hideAll(page, "btnMoreCommands");
- var itemBirthday = page.querySelector("#itemBirthday");
- if ("Person" == item.Type && item.PremiereDate) try {
- var birthday = datetime.parseISO8601Date(item.PremiereDate, !0).toDateString();
- itemBirthday.classList.remove("hide"), itemBirthday.innerHTML = globalize.translate("BirthDateValue").replace("{0}", birthday)
- } catch (err) {
- itemBirthday.classList.add("hide")
- } else itemBirthday.classList.add("hide");
- var itemDeathDate = page.querySelector("#itemDeathDate");
- if ("Person" == item.Type && item.EndDate) try {
- var deathday = datetime.parseISO8601Date(item.EndDate, !0).toDateString();
- itemDeathDate.classList.remove("hide"), itemDeathDate.innerHTML = globalize.translate("DeathDateValue").replace("{0}", deathday)
- } catch (err) {
- itemDeathDate.classList.add("hide")
+
+ if (user.Policy.IsAdministrator && groupedVersions.length) {
+ page.querySelector(".btnSplitVersions").classList.remove("hide");
+ } else {
+ page.querySelector(".btnSplitVersions").classList.add("hide");
}
+
+ if (itemContextMenu.getCommands(getContextMenuOptions(item, user)).length) {
+ hideAll(page, "btnMoreCommands", true);
+ } else {
+ hideAll(page, "btnMoreCommands");
+ }
+
+ var itemBirthday = page.querySelector("#itemBirthday");
+
+ if ("Person" == item.Type && item.PremiereDate) {
+ try {
+ var birthday = datetime.parseISO8601Date(item.PremiereDate, true).toDateString();
+ itemBirthday.classList.remove("hide");
+ itemBirthday.innerHTML = globalize.translate("BirthDateValue").replace("{0}", birthday);
+ } catch (err) {
+ itemBirthday.classList.add("hide");
+ }
+ } else {
+ itemBirthday.classList.add("hide");
+ }
+
+ var itemDeathDate = page.querySelector("#itemDeathDate");
+
+ if ("Person" == item.Type && item.EndDate) {
+ try {
+ var deathday = datetime.parseISO8601Date(item.EndDate, true).toDateString();
+ itemDeathDate.classList.remove("hide");
+ itemDeathDate.innerHTML = globalize.translate("DeathDateValue").replace("{0}", deathday);
+ } catch (err) {
+ itemDeathDate.classList.add("hide");
+ }
+ } else {
+ itemDeathDate.classList.add("hide");
+ }
+
var itemBirthLocation = page.querySelector("#itemBirthLocation");
+
if ("Person" == item.Type && item.ProductionLocations && item.ProductionLocations.length) {
var gmap = '
' + item.ProductionLocations[0] + " ";
- itemBirthLocation.classList.remove("hide"), itemBirthLocation.innerHTML = globalize.translate("BirthPlaceValue").replace("{0}", gmap)
- } else itemBirthLocation.classList.add("hide");
- setPeopleHeader(page, item), loading.hide()
+ itemBirthLocation.classList.remove("hide");
+ itemBirthLocation.innerHTML = globalize.translate("BirthPlaceValue").replace("{0}", gmap);
+ } else {
+ itemBirthLocation.classList.add("hide");
+ }
+
+ setPeopleHeader(page, item);
+ loading.hide();
if (item.Type === "Book") {
hideAll(page, "btnDownload", true);
}
try {
- require(["focusManager"], function(focusManager) {
+ require(["focusManager"], function (focusManager) {
[".btnResume", ".btnPlay"].every(function (cls) {
-
var elems = page.querySelectorAll(cls);
-
+
for (var i = 0; i < elems.length; i++) {
if (focusManager.isCurrentlyFocusable(elems[i])) {
focusManager.focus(elems[i]);
return false;
}
}
+
return true;
});
});
@@ -361,35 +638,68 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
}
function logoImageUrl(item, apiClient, options) {
- return options = options || {}, options.type = "Logo", item.ImageTags && item.ImageTags.Logo ? (options.tag = item.ImageTags.Logo, apiClient.getScaledImageUrl(item.Id, options)) : item.ParentLogoImageTag ? (options.tag = item.ParentLogoImageTag, apiClient.getScaledImageUrl(item.ParentLogoItemId, options)) : null
+ options = options || {};
+ options.type = "Logo";
+
+ if (item.ImageTags && item.ImageTags.Logo) {
+ options.tag = item.ImageTags.Logo;
+ return apiClient.getScaledImageUrl(item.Id, options);
+ }
+
+ if (item.ParentLogoImageTag) {
+ options.tag = item.ParentLogoImageTag;
+ return apiClient.getScaledImageUrl(item.ParentLogoItemId, options);
+ }
+
+ return null;
}
function setTitle(item, apiClient) {
var url = logoImageUrl(item, apiClient, {});
+
if (url = null) {
var pageTitle = document.querySelector(".pageTitle");
- pageTitle.style.backgroundImage = "url('" + url + "')", pageTitle.classList.add("pageTitleWithLogo"), pageTitle.innerHTML = ""
- } else Emby.Page.setTitle("")
+ pageTitle.style.backgroundImage = "url('" + url + "')";
+ pageTitle.classList.add("pageTitleWithLogo");
+ pageTitle.innerHTML = "";
+ } else {
+ Emby.Page.setTitle("");
+ }
}
function renderLogo(page, item, apiClient) {
var url = logoImageUrl(item, apiClient, {
- maxWidth: 400
- }),
- detailLogo = page.querySelector(".detailLogo");
- url ? (detailLogo.classList.remove("hide"), detailLogo.classList.add("lazy"), detailLogo.setAttribute("data-src", url), imageLoader.lazyImage(detailLogo)) : detailLogo.classList.add("hide")
+ maxWidth: 400
+ });
+ var detailLogo = page.querySelector(".detailLogo");
+
+ if (url) {
+ detailLogo.classList.remove("hide");
+ detailLogo.classList.add("lazy");
+ detailLogo.setAttribute("data-src", url);
+ imageLoader.lazyImage(detailLogo);
+ } else {
+ detailLogo.classList.add("hide");
+ }
}
function showRecordingFields(instance, page, item, user) {
if (!instance.currentRecordingFields) {
var recordingFieldsElement = page.querySelector(".recordingFields");
- "Program" == item.Type && user.Policy.EnableLiveTvManagement ? require(["recordingFields"], function(recordingFields) {
- instance.currentRecordingFields = new recordingFields({
- parent: recordingFieldsElement,
- programId: item.Id,
- serverId: item.ServerId
- }), recordingFieldsElement.classList.remove("hide")
- }) : (recordingFieldsElement.classList.add("hide"), recordingFieldsElement.innerHTML = "")
+
+ if ("Program" == item.Type && user.Policy.EnableLiveTvManagement) {
+ require(["recordingFields"], function (recordingFields) {
+ instance.currentRecordingFields = new recordingFields({
+ parent: recordingFieldsElement,
+ programId: item.Id,
+ serverId: item.ServerId
+ });
+ recordingFieldsElement.classList.remove("hide");
+ });
+ } else {
+ recordingFieldsElement.classList.add("hide");
+ recordingFieldsElement.innerHTML = "";
+ }
}
}
@@ -399,7 +709,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
if (item.UserData && item.UserData.LastPlayedDate) {
lastPlayedElement.classList.remove("hide");
var datePlayed = datetime.parseISO8601Date(item.UserData.LastPlayedDate);
- lastPlayedElement.innerHTML = globalize.translate("DatePlayed") + " " + datetime.toLocaleDateString(datePlayed) + " " + datetime.getDisplayTime(datePlayed);
+ lastPlayedElement.innerHTML = globalize.translate("DatePlayed") + ": " + datetime.toLocaleDateString(datePlayed) + " " + datetime.getDisplayTime(datePlayed);
} else {
lastPlayedElement.classList.add("hide");
}
@@ -407,145 +717,340 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
function renderLinks(linksElem, item) {
var html = [];
+
if (item.DateCreated && itemHelper.enableDateAddedDisplay(item)) {
var dateCreated = datetime.parseISO8601Date(item.DateCreated);
- html.push(globalize.translate("AddedOnValue", datetime.toLocaleDateString(dateCreated) + " " + datetime.getDisplayTime(dateCreated)))
+ html.push(globalize.translate("AddedOnValue", datetime.toLocaleDateString(dateCreated) + " " + datetime.getDisplayTime(dateCreated)));
}
+
var links = [];
- if (!layoutManager.tv && (item.HomePageUrl && links.push('
' + globalize.translate("ButtonWebsite") + " "), item.ExternalUrls))
+
+ if (!layoutManager.tv && item.HomePageUrl) {
+ links.push('
' + globalize.translate("ButtonWebsite") + " ");
+ }
+ if (item.ExternalUrls) {
for (var i = 0, length = item.ExternalUrls.length; i < length; i++) {
var url = item.ExternalUrls[i];
- links.push('
' + url.Name + " ")
+ links.push('
' + url.Name + " ");
}
- links.length && html.push(globalize.translate("LinksValue", links.join(", "))), linksElem.innerHTML = html.join(", "), html.length ? linksElem.classList.remove("hide") : linksElem.classList.add("hide")
+ }
+
+ if (links.length) {
+ html.push(globalize.translate("LinksValue", links.join(", ")));
+ }
+
+ linksElem.innerHTML = html.join(", ");
+
+ if (html.length) {
+ linksElem.classList.remove("hide");
+ } else {
+ linksElem.classList.add("hide");
+ }
}
function renderDetailImage(page, elem, item, apiClient, editable, imageLoader, indicators) {
- "SeriesTimer" !== item.Type && "Program" !== item.Type || (editable = !1), "Person" !== item.Type ? (elem.classList.add("detailimg-hidemobile"), page.querySelector(".detailPageContent").classList.add("detailPageContent-nodetailimg")) : page.querySelector(".detailPageContent").classList.remove("detailPageContent-nodetailimg");
+ if ("SeriesTimer" === item.Type || "Program" === item.Type) {
+ editable = false;
+ }
+
+ if ("Person" !== item.Type) {
+ elem.classList.add("detailimg-hidemobile");
+ page.querySelector(".detailPageContent").classList.add("detailPageContent-nodetailimg");
+ } else {
+ page.querySelector(".detailPageContent").classList.remove("detailPageContent-nodetailimg");
+ }
+
var imageTags = item.ImageTags || {};
- item.PrimaryImageTag && (imageTags.Primary = item.PrimaryImageTag);
- var url, html = "",
- shape = "portrait",
- detectRatio = !1;
- imageTags.Primary ? (url = apiClient.getScaledImageUrl(item.Id, {
- type: "Primary",
- tag: item.ImageTags.Primary
- }), detectRatio = !0) : item.BackdropImageTags && item.BackdropImageTags.length ? (url = apiClient.getScaledImageUrl(item.Id, {
- type: "Backdrop",
- tag: item.BackdropImageTags[0]
- }), shape = "thumb") : imageTags.Thumb ? (url = apiClient.getScaledImageUrl(item.Id, {
- type: "Thumb",
- tag: item.ImageTags.Thumb
- }), shape = "thumb") : imageTags.Disc ? (url = apiClient.getScaledImageUrl(item.Id, {
- type: "Disc",
- tag: item.ImageTags.Disc
- }), shape = "square") : item.AlbumId && item.AlbumPrimaryImageTag ? (url = apiClient.getScaledImageUrl(item.AlbumId, {
- type: "Primary",
- tag: item.AlbumPrimaryImageTag
- }), shape = "square") : item.SeriesId && item.SeriesPrimaryImageTag ? url = apiClient.getScaledImageUrl(item.SeriesId, {
- type: "Primary",
- tag: item.SeriesPrimaryImageTag
- }) : item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag && (url = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, {
- type: "Primary",
- tag: item.ParentPrimaryImageTag
- })), html += '
', editable && (html += "
"), detectRatio && item.PrimaryImageAspectRatio && (item.PrimaryImageAspectRatio >= 1.48 ? shape = "thumb" : item.PrimaryImageAspectRatio >= .85 && item.PrimaryImageAspectRatio <= 1.34 && (shape = "square")), html += " ", editable && (html += " ");
+
+ if (item.PrimaryImageTag) {
+ imageTags.Primary = item.PrimaryImageTag;
+ }
+
+ var url;
+ var html = "";
+ var shape = "portrait";
+ var detectRatio = false;
+
+ if (imageTags.Primary) {
+ url = apiClient.getScaledImageUrl(item.Id, {
+ type: "Primary",
+ tag: item.ImageTags.Primary
+ });
+ detectRatio = true;
+ } else if (item.BackdropImageTags && item.BackdropImageTags.length) {
+ url = apiClient.getScaledImageUrl(item.Id, {
+ type: "Backdrop",
+ tag: item.BackdropImageTags[0]
+ });
+ shape = "thumb";
+ } else if (imageTags.Thumb) {
+ url = apiClient.getScaledImageUrl(item.Id, {
+ type: "Thumb",
+ tag: item.ImageTags.Thumb
+ });
+ shape = "thumb";
+ } else if (imageTags.Disc) {
+ url = apiClient.getScaledImageUrl(item.Id, {
+ type: "Disc",
+ tag: item.ImageTags.Disc
+ });
+ shape = "square";
+ } else if (item.AlbumId && item.AlbumPrimaryImageTag) {
+ url = apiClient.getScaledImageUrl(item.AlbumId, {
+ type: "Primary",
+ tag: item.AlbumPrimaryImageTag
+ });
+ shape = "square";
+ } else if (item.SeriesId && item.SeriesPrimaryImageTag) {
+ url = apiClient.getScaledImageUrl(item.SeriesId, {
+ type: "Primary",
+ tag: item.SeriesPrimaryImageTag
+ });
+ } else if (item.ParentPrimaryImageItemId && item.ParentPrimaryImageTag) {
+ url = apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, {
+ type: "Primary",
+ tag: item.ParentPrimaryImageTag
+ });
+ }
+
+ html += '
", elem.innerHTML = html, "thumb" == shape ? (elem.classList.add("thumbDetailImageContainer"), elem.classList.remove("portraitDetailImageContainer"), elem.classList.remove("squareDetailImageContainer")) : "square" == shape ? (elem.classList.remove("thumbDetailImageContainer"), elem.classList.remove("portraitDetailImageContainer"), elem.classList.add("squareDetailImageContainer")) : (elem.classList.remove("thumbDetailImageContainer"), elem.classList.add("portraitDetailImageContainer"), elem.classList.remove("squareDetailImageContainer")), url && imageLoader.lazyImage(elem.querySelector("img"), url)
+ html += '
';
+
+ if (progressHtml) {
+ html += progressHtml;
+ }
+
+ html += "
";
+ html += "
";
+ elem.innerHTML = html;
+
+ if ("thumb" == shape) {
+ elem.classList.add("thumbDetailImageContainer");
+ elem.classList.remove("portraitDetailImageContainer");
+ elem.classList.remove("squareDetailImageContainer");
+ } else if ("square" == shape) {
+ elem.classList.remove("thumbDetailImageContainer");
+ elem.classList.remove("portraitDetailImageContainer");
+ elem.classList.add("squareDetailImageContainer");
+ } else {
+ elem.classList.remove("thumbDetailImageContainer");
+ elem.classList.add("portraitDetailImageContainer");
+ elem.classList.remove("squareDetailImageContainer");
+ }
+
+
+ if (url) {
+ imageLoader.lazyImage(elem.querySelector("img"), url);
+ }
}
function renderImage(page, item, apiClient, user) {
- renderDetailImage(page, page.querySelector(".detailImageContainer"), item, apiClient, user.Policy.IsAdministrator && "Photo" != item.MediaType, imageLoader, indicators)
+ renderDetailImage(
+ page,
+ page.querySelector(".detailImageContainer"),
+ item,
+ apiClient,
+ user.Policy.IsAdministrator && "Photo" != item.MediaType,
+ imageLoader,
+ indicators
+ );
}
function refreshDetailImageUserData(elem, item) {
- elem.querySelector(".detailImageProgressContainer").innerHTML = indicators.getProgressBarHtml(item)
+ elem.querySelector(".detailImageProgressContainer").innerHTML = indicators.getProgressBarHtml(item);
}
function refreshImage(page, item, user) {
- refreshDetailImageUserData(page.querySelector(".detailImageContainer"), item)
+ refreshDetailImageUserData(page.querySelector(".detailImageContainer"), item);
}
function setPeopleHeader(page, item) {
- "Audio" == item.MediaType || "MusicAlbum" == item.Type || "Book" == item.MediaType || "Photo" == item.MediaType ? page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderPeople") : page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderCastAndCrew")
+ if ("Audio" == item.MediaType || "MusicAlbum" == item.Type || "Book" == item.MediaType || "Photo" == item.MediaType) {
+ page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderPeople");
+ } else {
+ page.querySelector("#peopleHeader").innerHTML = globalize.translate("HeaderCastAndCrew");
+ }
}
function renderNextUp(page, item, user) {
var section = page.querySelector(".nextUpSection");
- if ("Series" != item.Type) return void section.classList.add("hide");
+
+ if ("Series" != item.Type) {
+ return void section.classList.add("hide");
+ }
+
connectionManager.getApiClient(item.ServerId).getNextUpEpisodes({
SeriesId: item.Id,
UserId: user.Id
- }).then(function(result) {
- result.Items.length ? section.classList.remove("hide") : section.classList.add("hide");
+ }).then(function (result) {
+ if (result.Items.length) {
+ section.classList.remove("hide");
+ } else {
+ section.classList.add("hide");
+ }
+
var html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: getThumbShape(!1),
- showTitle: !0,
- displayAsSpecial: "Season" == item.Type && item.IndexNumber,
- overlayText: !1,
- centerText: !0,
- overlayPlayButton: !0
- }),
- itemsContainer = section.querySelector(".nextUpItems");
- itemsContainer.innerHTML = html, imageLoader.lazyChildren(itemsContainer)
- })
+ items: result.Items,
+ shape: getThumbShape(false),
+ showTitle: true,
+ displayAsSpecial: "Season" == item.Type && item.IndexNumber,
+ overlayText: false,
+ centerText: true,
+ overlayPlayButton: true
+ });
+ var itemsContainer = section.querySelector(".nextUpItems");
+ itemsContainer.innerHTML = html;
+ imageLoader.lazyChildren(itemsContainer);
+ });
}
function setInitialCollapsibleState(page, item, apiClient, context, user) {
- page.querySelector(".collectionItems").innerHTML = "", "Playlist" == item.Type ? (page.querySelector("#childrenCollapsible").classList.remove("hide"), renderPlaylistItems(page, item, user)) : "Studio" == item.Type || "Person" == item.Type || "Genre" == item.Type || "MusicGenre" == item.Type || "MusicArtist" == item.Type ? (page.querySelector("#childrenCollapsible").classList.remove("hide"), renderItemsByName(page, item, user)) : item.IsFolder ? ("BoxSet" == item.Type && page.querySelector("#childrenCollapsible").classList.add("hide"), renderChildren(page, item)) : page.querySelector("#childrenCollapsible").classList.add("hide"), "Series" == item.Type && renderSeriesSchedule(page, item, user), "Series" == item.Type ? renderNextUp(page, item, user) : page.querySelector(".nextUpSection").classList.add("hide"), renderScenes(page, item), item.SpecialFeatureCount && 0 != item.SpecialFeatureCount && "Series" != item.Type ? (page.querySelector("#specialsCollapsible").classList.remove("hide"), renderSpecials(page, item, user, 6)) : page.querySelector("#specialsCollapsible").classList.add("hide"), renderCast(page, item, context, enableScrollX() ? null : 12), item.PartCount && item.PartCount > 1 ? (page.querySelector("#additionalPartsCollapsible").classList.remove("hide"), renderAdditionalParts(page, item, user)) : page.querySelector("#additionalPartsCollapsible").classList.add("hide"), "MusicAlbum" == item.Type ? renderMusicVideos(page, item, user) : page.querySelector("#musicVideosCollapsible").classList.add("hide")
+ page.querySelector(".collectionItems").innerHTML = "";
+
+ if ("Playlist" == item.Type) {
+ page.querySelector("#childrenCollapsible").classList.remove("hide");
+ renderPlaylistItems(page, item, user);
+ } else if ("Studio" == item.Type || "Person" == item.Type || "Genre" == item.Type || "MusicGenre" == item.Type || "MusicArtist" == item.Type) {
+ page.querySelector("#childrenCollapsible").classList.remove("hide");
+ renderItemsByName(page, item, user);
+ } else if (item.IsFolder) {
+ if ("BoxSet" == item.Type) {
+ page.querySelector("#childrenCollapsible").classList.add("hide");
+ }
+
+ renderChildren(page, item);
+ } else {
+ page.querySelector("#childrenCollapsible").classList.add("hide");
+ }
+
+ if ("Series" == item.Type) {
+ renderSeriesSchedule(page, item, user);
+ renderNextUp(page, item, user);
+ } else {
+ page.querySelector(".nextUpSection").classList.add("hide");
+ }
+
+ renderScenes(page, item);
+
+ if (item.SpecialFeatureCount && 0 != item.SpecialFeatureCount && "Series" != item.Type) {
+ page.querySelector("#specialsCollapsible").classList.remove("hide");
+ renderSpecials(page, item, user, 6);
+ } else {
+ page.querySelector("#specialsCollapsible").classList.add("hide");
+ }
+
+ renderCast(page, item, context, enableScrollX() ? null : 12);
+
+ if (item.PartCount && item.PartCount > 1) {
+ page.querySelector("#additionalPartsCollapsible").classList.remove("hide");
+ renderAdditionalParts(page, item, user);
+ } else {
+ page.querySelector("#additionalPartsCollapsible").classList.add("hide");
+ }
+
+ if ("MusicAlbum" == item.Type) {
+ renderMusicVideos(page, item, user);
+ } else {
+ page.querySelector("#musicVideosCollapsible").classList.add("hide");
+ }
}
function renderOverview(elems, item) {
for (var i = 0, length = elems.length; i < length; i++) {
- var elem = elems[i],
- overview = item.Overview || "";
+ var elem = elems[i];
+ var overview = item.Overview || "";
+
if (overview) {
- elem.innerHTML = overview, elem.classList.remove("hide");
- for (var anchors = elem.querySelectorAll("a"), j = 0, length2 = anchors.length; j < length2; j++) anchors[j].setAttribute("target", "_blank")
- } else elem.innerHTML = "", elem.classList.add("hide")
+ elem.innerHTML = overview;
+ elem.classList.remove("hide");
+ var anchors = elem.querySelectorAll("a");
+
+ for (var j = 0, length2 = anchors.length; j < length2; j++) {
+ anchors[j].setAttribute("target", "_blank");
+ }
+ } else {
+ elem.innerHTML = "";
+ elem.classList.add("hide");
+ }
}
}
function renderGenres(page, item, apiClient, context, isStatic) {
context = context || inferContext(item);
- var type, genres = item.GenreItems || [];
+ var type;
+ var genres = item.GenreItems || [];
+
switch (context) {
case "music":
type = "MusicGenre";
break;
+
default:
- type = "Genre"
+ type = "Genre";
+ }
+
+ var html = genres.map(function (p) {
+ return '
' + p.Name + " ";
+ }).join(", ");
+ var elem = page.querySelector(".genres");
+ elem.innerHTML = globalize.translate(genres.length > 1 ? "GenresValue" : "GenreValue", html);
+
+ if (genres.length) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
}
- var html = genres.map(function(p) {
- return '
' + p.Name + " "
- }).join(", "),
- elem = page.querySelector(".genres");
- elem.innerHTML = genres.length > 1 ? globalize.translate("GenresValue", html) : globalize.translate("GenreValue", html), genres.length ? elem.classList.remove("hide") : elem.classList.add("hide")
}
function renderDirector(page, item, apiClient, context, isStatic) {
- var directors = (item.People || []).filter(function(p) {
- return "Director" === p.Type
- }),
- html = directors.map(function(p) {
- return '
' + p.Name + " "
- }).join(", "),
- elem = page.querySelector(".directors");
- elem.innerHTML = directors.length > 1 ? globalize.translate("DirectorsValue", html) : globalize.translate("DirectorValue", html), directors.length ? elem.classList.remove("hide") : elem.classList.add("hide")
+ var directors = (item.People || []).filter(function (p) {
+ return "Director" === p.Type;
+ });
+ var html = directors.map(function (p) {
+ return '
' + p.Name + " ";
+ }).join(", ");
+ var elem = page.querySelector(".directors");
+ elem.innerHTML = globalize.translate(directors.length > 1 ? "DirectorsValue" : "DirectorValue", html);
+
+ if (directors.length) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
+ }
}
function renderDetails(page, item, apiClient, context, isStatic) {
@@ -555,8 +1060,8 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
renderDirector(page, item, apiClient, context, isStatic);
renderGenres(page, item, apiClient, context, isStatic);
renderChannelGuide(page, apiClient, item);
-
var taglineElement = page.querySelector(".tagline");
+
if (item.Taglines && item.Taglines.length) {
taglineElement.classList.remove("hide");
taglineElement.innerHTML = item.Taglines[0];
@@ -571,15 +1076,17 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
overview.classList.add("detailsHiddenOnMobile");
externalLinksElem.classList.add("detailsHiddenOnMobile");
}
- renderOverview([overview], item);
- var i, itemMiscInfo;
+ renderOverview([overview], item);
+ var i;
+ var itemMiscInfo;
itemMiscInfo = page.querySelectorAll(".itemMiscInfo-primary");
+
for (i = 0; i < itemMiscInfo.length; i++) {
mediaInfo.fillPrimaryMediaInfo(itemMiscInfo[i], item, {
- interactive: !0,
- episodeTitle: !1,
- subtitles: !1
+ interactive: true,
+ episodeTitle: false,
+ subtitles: false
});
if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) {
@@ -589,11 +1096,12 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
}
}
- itemMiscInfo = page.querySelectorAll(".itemMiscInfo-secondary")
+ itemMiscInfo = page.querySelectorAll(".itemMiscInfo-secondary");
+
for (i = 0; i < itemMiscInfo.length; i++) {
mediaInfo.fillSecondaryMediaInfo(itemMiscInfo[i], item, {
- interactive: !0
- })
+ interactive: true
+ });
if (itemMiscInfo[i].innerHTML && "SeriesTimer" !== item.Type) {
itemMiscInfo[i].classList.remove("hide");
@@ -601,230 +1109,382 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
itemMiscInfo[i].classList.add("hide");
}
}
-
+
reloadUserDataButtons(page, item);
renderLinks(externalLinksElem, item);
renderUserInfo(page, item);
renderTags(page, item);
- renderSeriesAirTime(page, item, isStatic)
+ renderSeriesAirTime(page, item, isStatic);
}
function enableScrollX() {
- return browser.mobile && screen.availWidth <= 1e3
+ return browser.mobile && screen.availWidth <= 1000;
}
function getPortraitShape(scrollX) {
- return null == scrollX && (scrollX = enableScrollX()), scrollX ? "overflowPortrait" : "portrait"
+ if (null == scrollX) {
+ scrollX = enableScrollX();
+ }
+
+ return scrollX ? "overflowPortrait" : "portrait";
}
function getSquareShape(scrollX) {
- return null == scrollX && (scrollX = enableScrollX()), scrollX ? "overflowSquare" : "square"
+ if (null == scrollX) {
+ scrollX = enableScrollX();
+ }
+
+ return scrollX ? "overflowSquare" : "square";
}
function getThumbShape(scrollX) {
- return null == scrollX && (scrollX = enableScrollX()), scrollX ? "overflowBackdrop" : "backdrop"
+ if (null == scrollX) {
+ scrollX = enableScrollX();
+ }
+
+ return scrollX ? "overflowBackdrop" : "backdrop";
}
function renderMoreFromSeason(view, item, apiClient) {
var section = view.querySelector(".moreFromSeasonSection");
+
if (section) {
- if ("Episode" !== item.Type || !item.SeasonId || !item.SeriesId) return void section.classList.add("hide");
+ if ("Episode" !== item.Type || !item.SeasonId || !item.SeriesId) {
+ return void section.classList.add("hide");
+ }
+
var userId = apiClient.getCurrentUserId();
apiClient.getEpisodes(item.SeriesId, {
SeasonId: item.SeasonId,
UserId: userId,
Fields: "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount"
- }).then(function(result) {
- if (result.Items.length < 2) return void section.classList.add("hide");
- section.classList.remove("hide"), section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.SeasonName);
+ }).then(function (result) {
+ if (result.Items.length < 2) {
+ return void section.classList.add("hide");
+ }
+
+ section.classList.remove("hide");
+ section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.SeasonName);
var itemsContainer = section.querySelector(".itemsContainer");
cardBuilder.buildCards(result.Items, {
parentContainer: section,
itemsContainer: itemsContainer,
shape: "autooverflow",
sectionTitleTagName: "h2",
- scalable: !0,
- showTitle: !0,
- overlayText: !1,
- centerText: !0,
- includeParentInfoInTitle: !1,
- allowBottomPadding: !1
+ scalable: true,
+ showTitle: true,
+ overlayText: false,
+ centerText: true,
+ includeParentInfoInTitle: false,
+ allowBottomPadding: false
});
var card = itemsContainer.querySelector('.card[data-id="' + item.Id + '"]');
- card && setTimeout(function() {
- section.querySelector(".emby-scroller").toStart(card.previousSibling || card, !0)
- }, 100)
- })
+
+ if (card) {
+ setTimeout(function () {
+ section.querySelector(".emby-scroller").toStart(card.previousSibling || card, true);
+ }, 100);
+ }
+ });
}
}
function renderMoreFromArtist(view, item, apiClient) {
var section = view.querySelector(".moreFromArtistSection");
+
if (section) {
if ("MusicArtist" === item.Type) {
- if (!apiClient.isMinServerVersion("3.4.1.19")) return void section.classList.add("hide")
- } else if ("MusicAlbum" !== item.Type || !item.AlbumArtists || !item.AlbumArtists.length) return void section.classList.add("hide");
+ if (!apiClient.isMinServerVersion("3.4.1.19")) {
+ return void section.classList.add("hide");
+ }
+ } else if ("MusicAlbum" !== item.Type || !item.AlbumArtists || !item.AlbumArtists.length) {
+ return void section.classList.add("hide");
+ }
+
var query = {
IncludeItemTypes: "MusicAlbum",
- Recursive: !0,
+ Recursive: true,
ExcludeItemIds: item.Id,
SortBy: "ProductionYear,SortName",
SortOrder: "Descending"
};
- "MusicArtist" === item.Type ? query.ContributingArtistIds = item.Id : apiClient.isMinServerVersion("3.4.1.18") ? query.AlbumArtistIds = item.AlbumArtists[0].Id : query.ArtistIds = item.AlbumArtists[0].Id, apiClient.getItems(apiClient.getCurrentUserId(), query).then(function(result) {
- if (!result.Items.length) return void section.classList.add("hide");
- section.classList.remove("hide"), "MusicArtist" === item.Type ? section.querySelector("h2").innerHTML = globalize.translate("HeaderAppearsOn") : section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.AlbumArtists[0].Name), cardBuilder.buildCards(result.Items, {
+
+ if ("MusicArtist" === item.Type) {
+ query.ContributingArtistIds = item.Id;
+ } else if (apiClient.isMinServerVersion("3.4.1.18")) {
+ query.AlbumArtistIds = item.AlbumArtists[0].Id;
+ } else {
+ query.ArtistIds = item.AlbumArtists[0].Id;
+ }
+
+ apiClient.getItems(apiClient.getCurrentUserId(), query).then(function (result) {
+ if (!result.Items.length) {
+ return void section.classList.add("hide");
+ }
+
+ section.classList.remove("hide");
+
+ if ("MusicArtist" === item.Type) {
+ section.querySelector("h2").innerHTML = globalize.translate("HeaderAppearsOn");
+ } else {
+ section.querySelector("h2").innerHTML = globalize.translate("MoreFromValue", item.AlbumArtists[0].Name);
+ }
+
+ cardBuilder.buildCards(result.Items, {
parentContainer: section,
itemsContainer: section.querySelector(".itemsContainer"),
shape: "autooverflow",
sectionTitleTagName: "h2",
- scalable: !0,
+ scalable: true,
coverImage: "MusicArtist" === item.Type || "MusicAlbum" === item.Type,
- showTitle: !0,
- showParentTitle: !1,
- centerText: !0,
- overlayText: !1,
- overlayPlayButton: !0,
- showYear: !0
- })
- })
+ showTitle: true,
+ showParentTitle: false,
+ centerText: true,
+ overlayText: false,
+ overlayPlayButton: true,
+ showYear: true
+ });
+ });
}
}
function renderSimilarItems(page, item, context) {
var similarCollapsible = page.querySelector("#similarCollapsible");
+
if (similarCollapsible) {
- if ("Movie" != item.Type && "Trailer" != item.Type && "Series" != item.Type && "Program" != item.Type && "Recording" != item.Type && "MusicAlbum" != item.Type && "MusicArtist" != item.Type && "Playlist" != item.Type) return void similarCollapsible.classList.add("hide");
+ if ("Movie" != item.Type && "Trailer" != item.Type && "Series" != item.Type && "Program" != item.Type && "Recording" != item.Type && "MusicAlbum" != item.Type && "MusicArtist" != item.Type && "Playlist" != item.Type) {
+ return void similarCollapsible.classList.add("hide");
+ }
+
similarCollapsible.classList.remove("hide");
- var apiClient = connectionManager.getApiClient(item.ServerId),
- options = {
- userId: apiClient.getCurrentUserId(),
- limit: 12,
- fields: "PrimaryImageAspectRatio,UserData,CanDelete"
- };
- "MusicAlbum" == item.Type && item.AlbumArtists && item.AlbumArtists.length && (options.ExcludeArtistIds = item.AlbumArtists[0].Id), apiClient.getSimilarItems(item.Id, options).then(function(result) {
- if (!result.Items.length) return void similarCollapsible.classList.add("hide");
+ var apiClient = connectionManager.getApiClient(item.ServerId);
+ var options = {
+ userId: apiClient.getCurrentUserId(),
+ limit: 12,
+ fields: "PrimaryImageAspectRatio,UserData,CanDelete"
+ };
+
+ if ("MusicAlbum" == item.Type && item.AlbumArtists && item.AlbumArtists.length) {
+ options.ExcludeArtistIds = item.AlbumArtists[0].Id;
+ }
+
+ apiClient.getSimilarItems(item.Id, options).then(function (result) {
+ if (!result.Items.length) {
+ return void similarCollapsible.classList.add("hide");
+ }
+
similarCollapsible.classList.remove("hide");
var html = "";
html += cardBuilder.getCardsHtml({
items: result.Items,
shape: "autooverflow",
showParentTitle: "MusicAlbum" == item.Type,
- centerText: !0,
- showTitle: !0,
+ centerText: true,
+ showTitle: true,
context: context,
- lazy: !0,
- showDetailsMenu: !0,
+ lazy: true,
+ showDetailsMenu: true,
coverImage: "MusicAlbum" == item.Type || "MusicArtist" == item.Type,
- overlayPlayButton: !0,
- overlayText: !1,
+ overlayPlayButton: true,
+ overlayText: false,
showYear: "Movie" === item.Type || "Trailer" === item.Type
});
var similarContent = similarCollapsible.querySelector(".similarContent");
- similarContent.innerHTML = html, imageLoader.lazyChildren(similarContent)
- })
+ similarContent.innerHTML = html;
+ imageLoader.lazyChildren(similarContent);
+ });
}
}
function renderSeriesAirTime(page, item, isStatic) {
var seriesAirTime = page.querySelector("#seriesAirTime");
- if ("Series" != item.Type) return void seriesAirTime.classList.add("hide");
+ if ("Series" != item.Type) {
+ seriesAirTime.classList.add("hide");
+ return;
+ }
var html = "";
- if (item.AirDays && item.AirDays.length && (html += 7 == item.AirDays.length ? "daily" : item.AirDays.map(function(a) {
- return a + "s"
- }).join(",")), item.AirTime && (html += " at " + item.AirTime), item.Studios.length)
- if (isStatic) html += " on " + item.Studios[0].Name;
- else {
- var context = inferContext(item),
- href = appRouter.getRouteUrl(item.Studios[0], {
- context: context,
- itemType: "Studio",
- serverId: item.ServerId
- });
- html += ' on
' + item.Studios[0].Name + " "
- } html ? (html = ("Ended" == item.Status ? "Aired " : "Airs ") + html, seriesAirTime.innerHTML = html, seriesAirTime.classList.remove("hide")) : seriesAirTime.classList.add("hide")
+ if (item.AirDays && item.AirDays.length) {
+ if (7 == item.AirDays.length) {
+ html += "daily";
+ } else {
+ html += item.AirDays.map(function (a) {
+ return a + "s";
+ }).join(",");
+ }
+ }
+ if (item.AirTime) {
+ html += " at " + item.AirTime;
+ }
+ if (item.Studios.length) {
+ if (isStatic) {
+ html += " on " + item.Studios[0].Name;
+ } else {
+ var context = inferContext(item);
+ var href = appRouter.getRouteUrl(item.Studios[0], {
+ context: context,
+ itemType: "Studio",
+ serverId: item.ServerId
+ });
+ html += ' on
' + item.Studios[0].Name + " ";
+ }
+ }
+ if (html) {
+ html = ("Ended" == item.Status ? "Aired " : "Airs ") + html;
+ seriesAirTime.innerHTML = html;
+ seriesAirTime.classList.remove("hide");
+ } else {
+ seriesAirTime.classList.add("hide");
+ }
}
function renderTags(page, item) {
- var itemTags = page.querySelector(".itemTags"),
- tagElements = [],
- tags = item.Tags || [];
- "Program" === item.Type && (tags = []);
- for (var i = 0, length = tags.length; i < length; i++) tagElements.push(tags[i]);
- tagElements.length ? (itemTags.innerHTML = globalize.translate("TagsValue", tagElements.join(", ")), itemTags.classList.remove("hide")) : (itemTags.innerHTML = "", itemTags.classList.add("hide"))
+ var itemTags = page.querySelector(".itemTags");
+ var tagElements = [];
+ var tags = item.Tags || [];
+
+ if ("Program" === item.Type) {
+ tags = [];
+ }
+
+ for (var i = 0, length = tags.length; i < length; i++) {
+ tagElements.push(tags[i]);
+ }
+
+ if (tagElements.length) {
+ itemTags.innerHTML = globalize.translate("TagsValue", tagElements.join(", "));
+ itemTags.classList.remove("hide");
+ } else {
+ itemTags.innerHTML = "";
+ itemTags.classList.add("hide");
+ }
}
function renderChildren(page, item) {
- var fields = "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount",
- query = {
- ParentId: item.Id,
+ var fields = "ItemCounts,PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount";
+ var query = {
+ ParentId: item.Id,
+ Fields: fields
+ };
+
+ if ("BoxSet" !== item.Type) {
+ query.SortBy = "SortName";
+ }
+
+ var promise;
+ var apiClient = connectionManager.getApiClient(item.ServerId);
+ var userId = apiClient.getCurrentUserId();
+
+ if ("Series" == item.Type) {
+ promise = apiClient.getSeasons(item.Id, {
+ userId: userId,
Fields: fields
- };
- "BoxSet" !== item.Type && (query.SortBy = "SortName");
- var promise, apiClient = connectionManager.getApiClient(item.ServerId),
- userId = apiClient.getCurrentUserId();
- "Series" == item.Type ? promise = apiClient.getSeasons(item.Id, {
- userId: userId,
- Fields: fields
- }) : "Season" == item.Type ? (fields += ",Overview", promise = apiClient.getEpisodes(item.SeriesId, {
- seasonId: item.Id,
- userId: userId,
- Fields: fields
- })) : "MusicAlbum" == item.Type || "MusicArtist" == item.Type && (query.SortBy = "ProductionYear,SortName"), promise = promise || apiClient.getItems(apiClient.getCurrentUserId(), query), promise.then(function(result) {
- var html = "",
- scrollX = !1,
- isList = !1,
- childrenItemsContainer = page.querySelector(".childrenItemsContainer");
- if ("MusicAlbum" == item.Type) html = listView.getListViewHtml({
- items: result.Items,
- smallIcon: !0,
- showIndex: !0,
- index: "disc",
- showIndexNumberLeft: !0,
- playFromHere: !0,
- action: "playallfromhere",
- image: !1,
- artist: "auto",
- containerAlbumArtists: item.AlbumArtists,
- addToListButton: !0
- }), isList = !0;
- else if ("Series" == item.Type) scrollX = enableScrollX(), html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: getPortraitShape(),
- showTitle: !0,
- centerText: !0,
- lazy: !0,
- overlayPlayButton: !0,
- allowBottomPadding: !scrollX
});
- else if ("Season" == item.Type || "Episode" == item.Type) {
- if ("Episode" === item.Type || (isList = !0), scrollX = "Episode" == item.Type, result.Items.length < 2 && "Episode" === item.Type) return;
- "Episode" === item.Type ? html = cardBuilder.getCardsHtml({
+ } else if ("Season" == item.Type) {
+ fields += ",Overview";
+ promise = apiClient.getEpisodes(item.SeriesId, {
+ seasonId: item.Id,
+ userId: userId,
+ Fields: fields
+ });
+ } else if ("MusicArtist" == item.Type) {
+ query.SortBy = "ProductionYear,SortName";
+ }
+
+ promise = promise || apiClient.getItems(apiClient.getCurrentUserId(), query);
+ promise.then(function (result) {
+ var html = "";
+ var scrollX = false;
+ var isList = false;
+ var childrenItemsContainer = page.querySelector(".childrenItemsContainer");
+
+ if ("MusicAlbum" == item.Type) {
+ html = listView.getListViewHtml({
items: result.Items,
- shape: getThumbShape(scrollX),
- showTitle: !0,
- displayAsSpecial: "Season" == item.Type && item.IndexNumber,
- playFromHere: !0,
- overlayText: !0,
- lazy: !0,
- showDetailsMenu: !0,
- overlayPlayButton: !0,
- allowBottomPadding: !scrollX,
- includeParentInfoInTitle: !1
- }) : "Season" === item.Type && (html = listView.getListViewHtml({
+ smallIcon: true,
+ showIndex: true,
+ index: "disc",
+ showIndexNumberLeft: true,
+ playFromHere: true,
+ action: "playallfromhere",
+ image: false,
+ artist: "auto",
+ containerAlbumArtists: item.AlbumArtists,
+ addToListButton: true
+ });
+ isList = true;
+ } else if ("Series" == item.Type) {
+ scrollX = enableScrollX();
+ html = cardBuilder.getCardsHtml({
items: result.Items,
- showIndexNumber: !1,
- enableOverview: !0,
- imageSize: "large",
- enableSideMediaInfo: !1,
- highlight: !1,
- action: "none",
- infoButton: !0,
- imagePlayButton: !0,
- includeParentInfoInTitle: !1
- }))
+ shape: getPortraitShape(),
+ showTitle: true,
+ centerText: true,
+ lazy: true,
+ overlayPlayButton: true,
+ allowBottomPadding: !scrollX
+ });
+ } else if ("Season" == item.Type || "Episode" == item.Type) {
+ if ("Episode" !== item.Type) {
+ isList = true;
+ }
+ scrollX = "Episode" == item.Type;
+ if (result.Items.length < 2 && "Episode" === item.Type) {
+ return;
+ }
+
+ if ("Episode" === item.Type) {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: getThumbShape(scrollX),
+ showTitle: true,
+ displayAsSpecial: "Season" == item.Type && item.IndexNumber,
+ playFromHere: true,
+ overlayText: true,
+ lazy: true,
+ showDetailsMenu: true,
+ overlayPlayButton: true,
+ allowBottomPadding: !scrollX,
+ includeParentInfoInTitle: false
+ });
+ } else if ("Season" === item.Type) {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ showIndexNumber: false,
+ enableOverview: true,
+ imageSize: "large",
+ enableSideMediaInfo: false,
+ highlight: false,
+ action: layoutManager.tv ? "resume" : "none",
+ infoButton: true,
+ imagePlayButton: true,
+ includeParentInfoInTitle: false
+ });
+ }
}
- if ("BoxSet" !== item.Type && page.querySelector("#childrenCollapsible").classList.remove("hide"), scrollX ? (childrenItemsContainer.classList.add("scrollX"), childrenItemsContainer.classList.add("hiddenScrollX"), childrenItemsContainer.classList.remove("vertical-wrap"), childrenItemsContainer.classList.remove("vertical-list")) : (childrenItemsContainer.classList.remove("scrollX"), childrenItemsContainer.classList.remove("hiddenScrollX"), childrenItemsContainer.classList.remove("smoothScrollX"), isList ? (childrenItemsContainer.classList.add("vertical-list"), childrenItemsContainer.classList.remove("vertical-wrap")) : (childrenItemsContainer.classList.add("vertical-wrap"), childrenItemsContainer.classList.remove("vertical-list"))), childrenItemsContainer.innerHTML = html, imageLoader.lazyChildren(childrenItemsContainer), "BoxSet" == item.Type) {
+
+ if ("BoxSet" !== item.Type) {
+ page.querySelector("#childrenCollapsible").classList.remove("hide");
+ }
+ if (scrollX) {
+ childrenItemsContainer.classList.add("scrollX");
+ childrenItemsContainer.classList.add("hiddenScrollX");
+ childrenItemsContainer.classList.remove("vertical-wrap");
+ childrenItemsContainer.classList.remove("vertical-list");
+ } else {
+ childrenItemsContainer.classList.remove("scrollX");
+ childrenItemsContainer.classList.remove("hiddenScrollX");
+ childrenItemsContainer.classList.remove("smoothScrollX");
+ if (isList) {
+ childrenItemsContainer.classList.add("vertical-list");
+ childrenItemsContainer.classList.remove("vertical-wrap");
+ } else {
+ childrenItemsContainer.classList.add("vertical-wrap");
+ childrenItemsContainer.classList.remove("vertical-list");
+ }
+ }
+ childrenItemsContainer.innerHTML = html;
+ imageLoader.lazyChildren(childrenItemsContainer);
+ if ("BoxSet" == item.Type) {
var collectionItemTypes = [{
name: globalize.translate("HeaderVideos"),
mediaType: "Video"
@@ -838,175 +1498,276 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
name: globalize.translate("HeaderBooks"),
type: "Book"
}];
- renderCollectionItems(page, item, collectionItemTypes, result.Items)
+ renderCollectionItems(page, item, collectionItemTypes, result.Items);
}
- }), "Season" == item.Type ? page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderEpisodes") : "Series" == item.Type ? page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderSeasons") : "MusicAlbum" == item.Type ? page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderTracks") : page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderItems"), "MusicAlbum" == item.Type || "Season" == item.Type ? (page.querySelector(".childrenSectionHeader").classList.add("hide"), page.querySelector("#childrenCollapsible").classList.add("verticalSection-extrabottompadding")) : page.querySelector(".childrenSectionHeader").classList.remove("hide")
+ });
+
+ if ("Season" == item.Type) {
+ page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderEpisodes");
+ } else if ("Series" == item.Type) {
+ page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderSeasons");
+ } else if ("MusicAlbum" == item.Type) {
+ page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderTracks");
+ } else {
+ page.querySelector("#childrenTitle").innerHTML = globalize.translate("HeaderItems");
+ }
+
+ if ("MusicAlbum" == item.Type || "Season" == item.Type) {
+ page.querySelector(".childrenSectionHeader").classList.add("hide");
+ page.querySelector("#childrenCollapsible").classList.add("verticalSection-extrabottompadding");
+ } else {
+ page.querySelector(".childrenSectionHeader").classList.remove("hide");
+ }
}
function renderItemsByName(page, item, user) {
- require("scripts/itembynamedetailpage".split(","), function() {
- window.ItemsByName.renderItems(page, item)
- })
+ require("scripts/itembynamedetailpage".split(","), function () {
+ window.ItemsByName.renderItems(page, item);
+ });
}
function renderPlaylistItems(page, item, user) {
- require("scripts/playlistedit".split(","), function() {
- PlaylistViewer.render(page, item)
- })
+ require("scripts/playlistedit".split(","), function () {
+ PlaylistViewer.render(page, item);
+ });
}
function renderProgramsForChannel(page, result) {
- for (var html = "", currentItems = [], currentStartDate = null, i = 0, length = result.Items.length; i < length; i++) {
- var item = result.Items[i],
- itemStartDate = datetime.parseISO8601Date(item.StartDate);
- currentStartDate && currentStartDate.toDateString() === itemStartDate.toDateString() || (currentItems.length && (html += '
', html += '
' + datetime.toLocaleDateString(currentStartDate, {
+ var html = "";
+ var currentItems = [];
+ var currentStartDate = null;
+
+ for (var i = 0, length = result.Items.length; i < length; i++) {
+ var item = result.Items[i];
+ var itemStartDate = datetime.parseISO8601Date(item.StartDate);
+
+ if (!(currentStartDate && currentStartDate.toDateString() === itemStartDate.toDateString())) {
+ if (currentItems.length) {
+ html += '';
+ html += '
' + datetime.toLocaleDateString(currentStartDate, {
+ weekday: "long",
+ month: "long",
+ day: "numeric"
+ }) + " ";
+ html += '
' + listView.getListViewHtml({
+ items: currentItems,
+ enableUserDataButtons: false,
+ showParentTitle: true,
+ image: false,
+ showProgramTime: true,
+ mediaInfo: false,
+ parentTitleWithTitle: true
+ }) + "
";
+ }
+
+ currentStartDate = itemStartDate;
+ currentItems = [];
+ }
+
+ currentItems.push(item);
+ }
+
+ if (currentItems.length) {
+ html += '';
+ html += '
' + datetime.toLocaleDateString(currentStartDate, {
weekday: "long",
month: "long",
day: "numeric"
- }) + " ", html += '
' + listView.getListViewHtml({
+ }) + "";
+ html += '
' + listView.getListViewHtml({
items: currentItems,
- enableUserDataButtons: !1,
- showParentTitle: !0,
- image: !1,
- showProgramTime: !0,
- mediaInfo: !1,
- parentTitleWithTitle: !0
- }) + "
"), currentStartDate = itemStartDate, currentItems = []), currentItems.push(item)
+ enableUserDataButtons: false,
+ showParentTitle: true,
+ image: false,
+ showProgramTime: true,
+ mediaInfo: false,
+ parentTitleWithTitle: true
+ }) + "
";
}
- currentItems.length && (html += '
', html += '
' + datetime.toLocaleDateString(currentStartDate, {
- weekday: "long",
- month: "long",
- day: "numeric"
- }) + " ", html += '
' + listView.getListViewHtml({
- items: currentItems,
- enableUserDataButtons: !1,
- showParentTitle: !0,
- image: !1,
- showProgramTime: !0,
- mediaInfo: !1,
- parentTitleWithTitle: !0
- }) + "
"), page.querySelector(".programGuide").innerHTML = html
+
+ page.querySelector(".programGuide").innerHTML = html;
}
function renderChannelGuide(page, apiClient, item) {
- "TvChannel" === item.Type && (page.querySelector(".programGuideSection").classList.remove("hide"), apiClient.getLiveTvPrograms({
- ChannelIds: item.Id,
- UserId: apiClient.getCurrentUserId(),
- HasAired: !1,
- SortBy: "StartDate",
- EnableTotalRecordCount: !1,
- EnableImages: !1,
- ImageTypeLimit: 0,
- EnableUserData: !1
- }).then(function(result) {
- renderProgramsForChannel(page, result)
- }))
+ if ("TvChannel" === item.Type) {
+ page.querySelector(".programGuideSection").classList.remove("hide");
+ apiClient.getLiveTvPrograms({
+ ChannelIds: item.Id,
+ UserId: apiClient.getCurrentUserId(),
+ HasAired: false,
+ SortBy: "StartDate",
+ EnableTotalRecordCount: false,
+ EnableImages: false,
+ ImageTypeLimit: 0,
+ EnableUserData: false
+ }).then(function (result) {
+ renderProgramsForChannel(page, result);
+ });
+ }
}
function renderSeriesSchedule(page, item, user) {
var apiClient = connectionManager.getApiClient(item.ServerId);
apiClient.getLiveTvPrograms({
UserId: apiClient.getCurrentUserId(),
- HasAired: !1,
+ HasAired: false,
SortBy: "StartDate",
- EnableTotalRecordCount: !1,
- EnableImages: !1,
+ EnableTotalRecordCount: false,
+ EnableImages: false,
ImageTypeLimit: 0,
Limit: 50,
- EnableUserData: !1,
+ EnableUserData: false,
LibrarySeriesId: item.Id
- }).then(function(result) {
- result.Items.length ? page.querySelector("#seriesScheduleSection").classList.remove("hide") : page.querySelector("#seriesScheduleSection").classList.add("hide"), page.querySelector("#seriesScheduleList").innerHTML = listView.getListViewHtml({
+ }).then(function (result) {
+ if (result.Items.length) {
+ page.querySelector("#seriesScheduleSection").classList.remove("hide");
+ } else {
+ page.querySelector("#seriesScheduleSection").classList.add("hide");
+ }
+
+ page.querySelector("#seriesScheduleList").innerHTML = listView.getListViewHtml({
items: result.Items,
- enableUserDataButtons: !1,
- showParentTitle: !1,
- image: !1,
- showProgramDateTime: !0,
- mediaInfo: !1,
- showTitle: !0,
- moreButton: !1,
+ enableUserDataButtons: false,
+ showParentTitle: false,
+ image: false,
+ showProgramDateTime: true,
+ mediaInfo: false,
+ showTitle: true,
+ moreButton: false,
action: "programdialog"
- }), loading.hide()
- })
+ });
+ loading.hide();
+ });
}
function inferContext(item) {
- return "Movie" === item.Type || "BoxSet" === item.Type ? "movies" : "Series" === item.Type || "Season" === item.Type || "Episode" === item.Type ? "tvshows" : "MusicArtist" === item.Type || "MusicAlbum" === item.Type || "Audio" === item.Type || "AudioBook" === item.Type ? "music" : "Program" === item.Type ? "livetv" : null
+ if ("Movie" === item.Type || "BoxSet" === item.Type) {
+ return "movies";
+ }
+
+ if ("Series" === item.Type || "Season" === item.Type || "Episode" === item.Type) {
+ return "tvshows";
+ }
+
+ if ("MusicArtist" === item.Type || "MusicAlbum" === item.Type || "Audio" === item.Type || "AudioBook" === item.Type) {
+ return "music";
+ }
+
+ if ("Program" === item.Type) {
+ return "livetv";
+ }
+
+ return null;
}
function filterItemsByCollectionItemType(items, typeInfo) {
- return items.filter(function(item) {
- return typeInfo.mediaType ? item.MediaType == typeInfo.mediaType : item.Type == typeInfo.type
- })
+ return items.filter(function (item) {
+ if (typeInfo.mediaType) {
+ return item.MediaType == typeInfo.mediaType;
+ }
+
+ return item.Type == typeInfo.type;
+ });
}
function canPlaySomeItemInCollection(items) {
var i = 0;
+
for (length = items.length; i < length; i++) {
if (playbackManager.canPlay(items[i])) {
return true;
}
}
+
return false;
}
function renderCollectionItems(page, parentItem, types, items) {
page.querySelector(".collectionItems").innerHTML = "";
- var i, length;
+ var i;
+ var length;
+
for (i = 0, length = types.length; i < length; i++) {
- var type = types[i],
- typeItems = filterItemsByCollectionItemType(items, type);
- typeItems.length && renderCollectionItemType(page, parentItem, type, typeItems)
+ var type = types[i];
+ var typeItems = filterItemsByCollectionItemType(items, type);
+
+ if (typeItems.length) {
+ renderCollectionItemType(page, parentItem, type, typeItems);
+ }
}
+
var otherType = {
- name: globalize.translate("HeaderOtherItems")
- },
- otherTypeItems = items.filter(function(curr) {
- return !types.filter(function(t) {
- return filterItemsByCollectionItemType([curr], t).length > 0
- }).length
- });
- otherTypeItems.length && renderCollectionItemType(page, parentItem, otherType, otherTypeItems), items.length || renderCollectionItemType(page, parentItem, {
- name: globalize.translate("HeaderItems")
- }, items);
- var containers = page.querySelectorAll(".collectionItemsContainer"),
- notifyRefreshNeeded = function() {
- renderChildren(page, parentItem)
- };
- for (i = 0, length = containers.length; i < length; i++) containers[i].notifyRefreshNeeded = notifyRefreshNeeded
+ name: globalize.translate("HeaderOtherItems")
+ };
+ var otherTypeItems = items.filter(function (curr) {
+ return !types.filter(function (t) {
+ return filterItemsByCollectionItemType([curr], t).length > 0;
+ }).length;
+ });
+
+ if (otherTypeItems.length) {
+ renderCollectionItemType(page, parentItem, otherType, otherTypeItems);
+ }
+
+ if (!items.length) {
+ renderCollectionItemType(page, parentItem, {
+ name: globalize.translate("HeaderItems")
+ }, items);
+ }
+
+ var containers = page.querySelectorAll(".collectionItemsContainer");
+
+ var notifyRefreshNeeded = function () {
+ renderChildren(page, parentItem);
+ };
+
+ for (i = 0, length = containers.length; i < length; i++) {
+ containers[i].notifyRefreshNeeded = notifyRefreshNeeded;
+ }
// if nothing in the collection can be played hide play and shuffle buttons
if (!canPlaySomeItemInCollection(items)) {
hideAll(page, "btnPlay", false);
hideAll(page, "btnShuffle", false);
- }
+ }
}
function renderCollectionItemType(page, parentItem, type, items) {
var html = "";
- html += '
', html += '
', html += '
', html += "" + type.name + " ", html += " ", html += ' ', html += "", html += '
';
- var shape = "MusicAlbum" == type.type ? getSquareShape(!1) : getPortraitShape(!1);
+ html += '
';
+ html += '
';
+ html += '
';
+ html += "" + type.name + " ";
+ html += " ";
+ html += ' ';
+ html += "";
+ html += '
';
+ var shape = "MusicAlbum" == type.type ? getSquareShape(false) : getPortraitShape(false);
html += cardBuilder.getCardsHtml({
items: items,
shape: shape,
- showTitle: !0,
- centerText: !0,
- lazy: !0,
- showDetailsMenu: !0,
- overlayMoreButton: !0,
- showAddToCollection: !1,
- showRemoveFromCollection: !0,
+ showTitle: true,
+ centerText: true,
+ lazy: true,
+ showDetailsMenu: true,
+ overlayMoreButton: true,
+ showAddToCollection: false,
+ showRemoveFromCollection: true,
collectionId: parentItem.Id
- }), html += "
", html += "
";
+ });
+ html += "
";
+ html += "
";
var collectionItems = page.querySelector(".collectionItems");
- collectionItems.insertAdjacentHTML("beforeend", html), imageLoader.lazyChildren(collectionItems), collectionItems.querySelector(".btnAddToCollection").addEventListener("click", function() {
- require(["alert"], function(alert) {
+ collectionItems.insertAdjacentHTML("beforeend", html);
+ imageLoader.lazyChildren(collectionItems);
+ collectionItems.querySelector(".btnAddToCollection").addEventListener("click", function () {
+ require(["alert"], function (alert) {
alert({
text: globalize.translate("AddItemToCollectionHelp"),
html: globalize.translate("AddItemToCollectionHelp") + '
' + globalize.translate("ButtonLearnMore") + " "
- })
- })
- })
+ });
+ });
+ });
}
function renderMusicVideos(page, item, user) {
@@ -1014,295 +1775,362 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
SortBy: "SortName",
SortOrder: "Ascending",
IncludeItemTypes: "MusicVideo",
- Recursive: !0,
+ Recursive: true,
Fields: "PrimaryImageAspectRatio,BasicSyncInfo,CanDelete,MediaSourceCount",
AlbumIds: item.Id
- }).then(function(result) {
+ }).then(function (result) {
if (result.Items.length) {
page.querySelector("#musicVideosCollapsible").classList.remove("hide");
var musicVideosContent = page.querySelector(".musicVideosContent");
- musicVideosContent.innerHTML = getVideosHtml(result.Items, user), imageLoader.lazyChildren(musicVideosContent)
- } else page.querySelector("#musicVideosCollapsible").classList.add("hide")
- })
+ musicVideosContent.innerHTML = getVideosHtml(result.Items, user);
+ imageLoader.lazyChildren(musicVideosContent);
+ } else {
+ page.querySelector("#musicVideosCollapsible").classList.add("hide");
+ }
+ });
}
function renderAdditionalParts(page, item, user) {
- connectionManager.getApiClient(item.ServerId).getAdditionalVideoParts(user.Id, item.Id).then(function(result) {
+ connectionManager.getApiClient(item.ServerId).getAdditionalVideoParts(user.Id, item.Id).then(function (result) {
if (result.Items.length) {
page.querySelector("#additionalPartsCollapsible").classList.remove("hide");
var additionalPartsContent = page.querySelector("#additionalPartsContent");
- additionalPartsContent.innerHTML = getVideosHtml(result.Items, user), imageLoader.lazyChildren(additionalPartsContent)
- } else page.querySelector("#additionalPartsCollapsible").classList.add("hide")
- })
+ additionalPartsContent.innerHTML = getVideosHtml(result.Items, user);
+ imageLoader.lazyChildren(additionalPartsContent);
+ } else {
+ page.querySelector("#additionalPartsCollapsible").classList.add("hide");
+ }
+ });
}
function renderScenes(page, item) {
var chapters = item.Chapters || [];
+
if (chapters.length && !chapters[0].ImageTag && (chapters = []), chapters.length) {
page.querySelector("#scenesCollapsible").classList.remove("hide");
var scenesContent = page.querySelector("#scenesContent");
- require(["chaptercardbuilder"], function(chaptercardbuilder) {
+
+ require(["chaptercardbuilder"], function (chaptercardbuilder) {
chaptercardbuilder.buildChapterCards(item, chapters, {
itemsContainer: scenesContent,
width: 400,
backdropShape: "overflowBackdrop",
squareShape: "overflowSquare"
- })
- })
- } else page.querySelector("#scenesCollapsible").classList.add("hide")
+ });
+ });
+ } else {
+ page.querySelector("#scenesCollapsible").classList.add("hide");
+ }
}
function getVideosHtml(items, user, limit, moreButtonClass) {
var html = cardBuilder.getCardsHtml({
items: items,
shape: "auto",
- showTitle: !0,
+ showTitle: true,
action: "play",
- overlayText: !1,
- centerText: !0,
- showRuntime: !0
+ overlayText: false,
+ centerText: true,
+ showRuntime: true
});
- return limit && items.length > limit && (html += '
' + globalize.translate("ButtonMore") + "
"), html
+
+ if (limit && items.length > limit) {
+ html += '
' + globalize.translate("ButtonMore") + "
";
+ }
+
+ return html;
}
function renderSpecials(page, item, user, limit) {
- connectionManager.getApiClient(item.ServerId).getSpecialFeatures(user.Id, item.Id).then(function(specials) {
+ connectionManager.getApiClient(item.ServerId).getSpecialFeatures(user.Id, item.Id).then(function (specials) {
var specialsContent = page.querySelector("#specialsContent");
- specialsContent.innerHTML = getVideosHtml(specials, user, limit, "moreSpecials"), imageLoader.lazyChildren(specialsContent)
- })
+ specialsContent.innerHTML = getVideosHtml(specials, user, limit, "moreSpecials");
+ imageLoader.lazyChildren(specialsContent);
+ });
}
function renderCast(page, item, context, limit, isStatic) {
- var people = (item.People || []).filter(function(p) {
- return "Director" !== p.Type
+ var people = (item.People || []).filter(function (p) {
+ return "Director" !== p.Type;
});
- if (!people.length) return void page.querySelector("#castCollapsible").classList.add("hide");
+
+ if (!people.length) {
+ return void page.querySelector("#castCollapsible").classList.add("hide");
+ }
+
page.querySelector("#castCollapsible").classList.remove("hide");
var castContent = page.querySelector("#castContent");
- require(["peoplecardbuilder"], function(peoplecardbuilder) {
+
+ require(["peoplecardbuilder"], function (peoplecardbuilder) {
peoplecardbuilder.buildPeopleCards(people, {
itemsContainer: castContent,
- coverImage: !0,
+ coverImage: true,
serverId: item.ServerId,
width: 160,
shape: getPortraitShape()
- })
- })
+ });
+ });
}
function itemDetailPage() {
var self = this;
- self.setInitialCollapsibleState = setInitialCollapsibleState, self.renderDetails = renderDetails, self.renderCast = renderCast
+ self.setInitialCollapsibleState = setInitialCollapsibleState;
+ self.renderDetails = renderDetails;
+ self.renderCast = renderCast;
}
function bindAll(view, selector, eventName, fn) {
- var i, length, elems = view.querySelectorAll(selector);
- for (i = 0, length = elems.length; i < length; i++) elems[i].addEventListener(eventName, fn)
+ var i;
+ var length;
+ var elems = view.querySelectorAll(selector);
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener(eventName, fn);
+ }
}
function onTrackSelectionsSubmit(e) {
- return e.preventDefault(), !1
+ e.preventDefault();
+ return false;
}
- return window.ItemDetailPage = new itemDetailPage,
- function(view, params) {
- function reload(instance, page, params) {
- loading.show();
- var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient,
- promises = [getPromise(apiClient, params), apiClient.getCurrentUser()];
- Promise.all(promises).then(function(responses) {
- var item = responses[0],
- user = responses[1];
- currentItem = item, reloadFromItem(instance, page, params, item, user)
- })
- }
- function splitVersions(instance, page, apiClient, params) {
- require(["confirm"], function(confirm) {
- confirm("Are you sure you wish to split the media sources into separate items?", "Split Media Apart").then(function() {
- loading.show(), apiClient.ajax({
- type: "DELETE",
- url: apiClient.getUrl("Videos/" + params.id + "/AlternateSources")
- }).then(function() {
- loading.hide(), reload(instance, page, params)
- })
- })
- })
- }
+ window.ItemDetailPage = new itemDetailPage();
+ return function (view, params) {
+ function reload(instance, page, params) {
+ loading.show();
+ var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient;
+ var promises = [getPromise(apiClient, params), apiClient.getCurrentUser()];
+ Promise.all(promises).then(function (responses) {
+ var item = responses[0];
+ var user = responses[1];
+ currentItem = item;
+ reloadFromItem(instance, page, params, item, user);
+ });
+ }
- function getPlayOptions(startPosition) {
- var audioStreamIndex = view.querySelector(".selectAudio").value || null;
- return {
- startPositionTicks: startPosition,
- mediaSourceId: view.querySelector(".selectSource").value,
- audioStreamIndex: audioStreamIndex,
- subtitleStreamIndex: view.querySelector(".selectSubtitles").value
- }
- }
+ function splitVersions(instance, page, apiClient, params) {
+ require(["confirm"], function (confirm) {
+ confirm("Are you sure you wish to split the media sources into separate items?", "Split Media Apart").then(function () {
+ loading.show();
+ apiClient.ajax({
+ type: "DELETE",
+ url: apiClient.getUrl("Videos/" + params.id + "/AlternateSources")
+ }).then(function () {
+ loading.hide();
+ reload(instance, page, params);
+ });
+ });
+ });
+ }
- function playItem(item, startPosition) {
- var playOptions = getPlayOptions(startPosition);
- playOptions.items = [item], playbackManager.play(playOptions)
- }
+ function getPlayOptions(startPosition) {
+ var audioStreamIndex = view.querySelector(".selectAudio").value || null;
+ return {
+ startPositionTicks: startPosition,
+ mediaSourceId: view.querySelector(".selectSource").value,
+ audioStreamIndex: audioStreamIndex,
+ subtitleStreamIndex: view.querySelector(".selectSubtitles").value
+ };
+ }
- function playTrailer(page) {
- playbackManager.playTrailers(currentItem)
- }
+ function playItem(item, startPosition) {
+ var playOptions = getPlayOptions(startPosition);
+ playOptions.items = [item];
+ playbackManager.play(playOptions);
+ }
- function playCurrentItem(button, mode) {
- var item = currentItem;
- if ("Program" === item.Type) {
- var apiClient = connectionManager.getApiClient(item.ServerId);
- return void apiClient.getLiveTvChannel(item.ChannelId, apiClient.getCurrentUserId()).then(function(channel) {
- playbackManager.play({
- items: [channel]
- })
- })
- }
- playItem(item, item.UserData && "resume" === mode ? item.UserData.PlaybackPositionTicks : 0)
- }
+ function playTrailer(page) {
+ playbackManager.playTrailers(currentItem);
+ }
- function onPlayClick() {
- playCurrentItem(this, this.getAttribute("data-mode"))
- }
+ function playCurrentItem(button, mode) {
+ var item = currentItem;
- function onInstantMixClick() {
- playbackManager.instantMix(currentItem)
- }
-
- function onShuffleClick() {
- playbackManager.shuffle(currentItem)
- }
-
- function onDeleteClick() {
- require(["deleteHelper"], function(deleteHelper) {
- deleteHelper.deleteItem({
- item: currentItem,
- navigate: !0
- })
- })
- }
-
- function onCancelSeriesTimerClick() {
- require(["recordingHelper"], function(recordingHelper) {
- recordingHelper.cancelSeriesTimerWithConfirmation(currentItem.Id, currentItem.ServerId).then(function() {
- Dashboard.navigate("livetv.html")
- })
- })
- }
-
- function onCancelTimerClick() {
- require(["recordingHelper"], function(recordingHelper) {
- recordingHelper.cancelTimer(connectionManager.getApiClient(currentItem.ServerId), currentItem.TimerId).then(function() {
- reload(self, view, params)
- })
- })
- }
-
- function onPlayTrailerClick() {
- playTrailer(view)
- }
-
- function onDownloadChange() {
- reload(self, view, params)
- }
-
- function onDownloadClick() {
- require(['fileDownloader'], function (fileDownloader) {
- var downloadHref = apiClient.getItemDownloadUrl(currentItem.Id);
- fileDownloader.download([{
- url: downloadHref,
- itemId: currentItem.Id,
- serverId: currentItem.serverId
- }]);
+ if ("Program" === item.Type) {
+ var apiClient = connectionManager.getApiClient(item.ServerId);
+ return void apiClient.getLiveTvChannel(item.ChannelId, apiClient.getCurrentUserId()).then(function (channel) {
+ playbackManager.play({
+ items: [channel]
+ });
});
}
- function onMoreCommandsClick() {
- var button = this;
- apiClient.getCurrentUser().then(function(user) {
- itemContextMenu.show(getContextMenuOptions(currentItem, user, button)).then(function(result) {
- result.deleted ? appRouter.goHome() : result.updated && reload(self, view, params)
- })
- })
- }
+ playItem(item, item.UserData && "resume" === mode ? item.UserData.PlaybackPositionTicks : 0);
+ }
- function onPlayerChange() {
- renderTrackSelections(view, self, currentItem), setTrailerButtonVisibility(view, currentItem)
- }
+ function onPlayClick() {
+ playCurrentItem(this, this.getAttribute("data-mode"));
+ }
- function editImages() {
- return new Promise(function(resolve, reject) {
- require(["imageEditor"], function(imageEditor) {
- imageEditor.show({
- itemId: currentItem.Id,
- serverId: currentItem.ServerId
- }).then(resolve, reject)
- })
- })
- }
+ function onInstantMixClick() {
+ playbackManager.instantMix(currentItem);
+ }
- function onWebSocketMessage(e, data) {
- var msg = data;
- if ("UserDataChanged" === msg.MessageType && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) {
- var key = currentItem.UserData.Key,
- userData = msg.Data.UserDataList.filter(function(u) {
- return u.Key == key
- })[0];
- userData && (currentItem.UserData = userData, reloadPlayButtons(view, currentItem), apiClient.getCurrentUser().then(function(user) {
- refreshImage(view, currentItem, user)
- }))
+ function onShuffleClick() {
+ playbackManager.shuffle(currentItem);
+ }
+
+ function onDeleteClick() {
+ require(["deleteHelper"], function (deleteHelper) {
+ deleteHelper.deleteItem({
+ item: currentItem,
+ navigate: true
+ });
+ });
+ }
+
+ function onCancelSeriesTimerClick() {
+ require(["recordingHelper"], function (recordingHelper) {
+ recordingHelper.cancelSeriesTimerWithConfirmation(currentItem.Id, currentItem.ServerId).then(function () {
+ Dashboard.navigate("livetv.html");
+ });
+ });
+ }
+
+ function onCancelTimerClick() {
+ require(["recordingHelper"], function (recordingHelper) {
+ recordingHelper.cancelTimer(connectionManager.getApiClient(currentItem.ServerId), currentItem.TimerId).then(function () {
+ reload(self, view, params);
+ });
+ });
+ }
+
+ function onPlayTrailerClick() {
+ playTrailer(view);
+ }
+
+ function onDownloadChange() {
+ reload(self, view, params);
+ }
+
+ function onDownloadClick() {
+ require(['fileDownloader'], function (fileDownloader) {
+ var downloadHref = apiClient.getItemDownloadUrl(currentItem.Id);
+ fileDownloader.download([{
+ url: downloadHref,
+ itemId: currentItem.Id,
+ serverId: currentItem.serverId
+ }]);
+ });
+ }
+
+ function onMoreCommandsClick() {
+ var button = this;
+ apiClient.getCurrentUser().then(function (user) {
+ itemContextMenu.show(getContextMenuOptions(currentItem, user, button)).then(function (result) {
+ if (result.deleted) {
+ appRouter.goHome();
+ } else if (result.updated) {
+ reload(self, view, params);
+ }
+ });
+ });
+ }
+
+ function onPlayerChange() {
+ renderTrackSelections(view, self, currentItem);
+ setTrailerButtonVisibility(view, currentItem);
+ }
+
+ function editImages() {
+ return new Promise(function (resolve, reject) {
+ require(["imageEditor"], function (imageEditor) {
+ imageEditor.show({
+ itemId: currentItem.Id,
+ serverId: currentItem.ServerId
+ }).then(resolve, reject);
+ });
+ });
+ }
+
+ function onWebSocketMessage(e, data) {
+ var msg = data;
+
+ if ("UserDataChanged" === msg.MessageType && currentItem && msg.Data.UserId == apiClient.getCurrentUserId()) {
+ var key = currentItem.UserData.Key;
+ var userData = msg.Data.UserDataList.filter(function (u) {
+ return u.Key == key;
+ })[0];
+
+ if (userData) {
+ currentItem.UserData = userData;
+ reloadPlayButtons(view, currentItem);
+ apiClient.getCurrentUser().then(function (user) {
+ refreshImage(view, currentItem, user);
+ });
}
}
-
- var currentItem;
- var self = this;
- var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient;
- view.querySelectorAll(".btnPlay");
- bindAll(view, ".btnPlay", "click", onPlayClick);
- bindAll(view, ".btnResume", "click", onPlayClick);
- bindAll(view, ".btnInstantMix", "click", onInstantMixClick);
- bindAll(view, ".btnShuffle", "click", onShuffleClick);
- bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick);
- bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick);
- bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick);
- bindAll(view, ".btnDeleteItem", "click", onDeleteClick);
- bindAll(view, ".btnDownload", "click", onDownloadClick);
- view.querySelector(".btnMoreCommands i").innerHTML = "";
- view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit);
- view.querySelector(".btnSplitVersions").addEventListener("click", function() {
- splitVersions(self, view, apiClient, params)
- });
- bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick);
- view.querySelector(".selectSource").addEventListener("change", function() {
- renderVideoSelections(view, self._currentPlaybackMediaSources);
- renderAudioSelections(view, self._currentPlaybackMediaSources);
- renderSubtitleSelections(view, self._currentPlaybackMediaSources);
- });
- view.addEventListener("click", function(e) {
- dom.parentWithClass(e.target, "moreScenes") ? apiClient.getCurrentUser().then(function(user) {
- renderScenes(view, currentItem)
- }) : dom.parentWithClass(e.target, "morePeople") ? renderCast(view, currentItem, params.context) : dom.parentWithClass(e.target, "moreSpecials") && apiClient.getCurrentUser().then(function(user) {
- renderSpecials(view, currentItem, user)
- })
- });
- view.querySelector(".detailImageContainer").addEventListener("click", function(e) {
- dom.parentWithClass(e.target, "itemDetailGalleryLink") && editImages().then(function() {
- reload(self, view, params)
- })
- });
- view.addEventListener("viewshow", function(e) {
- var page = this;
- libraryMenu.setTransparentMenu(!0), e.detail.isRestored ? currentItem && (setTitle(currentItem, connectionManager.getApiClient(currentItem.ServerId)), renderTrackSelections(page, self, currentItem, !0)) : reload(self, page, params), events.on(apiClient, "message", onWebSocketMessage), events.on(playbackManager, "playerchange", onPlayerChange)
- });
- view.addEventListener("viewbeforehide", function() {
- events.off(apiClient, "message", onWebSocketMessage);
- events.off(playbackManager, "playerchange", onPlayerChange);
- libraryMenu.setTransparentMenu(false);
- });
- view.addEventListener("viewdestroy", function() {
- currentItem = null;
- self._currentPlaybackMediaSources = null;
- self.currentRecordingFields = null;
- })
}
+
+ var currentItem;
+ var self = this;
+ var apiClient = params.serverId ? connectionManager.getApiClient(params.serverId) : ApiClient;
+ view.querySelectorAll(".btnPlay");
+ bindAll(view, ".btnPlay", "click", onPlayClick);
+ bindAll(view, ".btnResume", "click", onPlayClick);
+ bindAll(view, ".btnInstantMix", "click", onInstantMixClick);
+ bindAll(view, ".btnShuffle", "click", onShuffleClick);
+ bindAll(view, ".btnPlayTrailer", "click", onPlayTrailerClick);
+ bindAll(view, ".btnCancelSeriesTimer", "click", onCancelSeriesTimerClick);
+ bindAll(view, ".btnCancelTimer", "click", onCancelTimerClick);
+ bindAll(view, ".btnDeleteItem", "click", onDeleteClick);
+ bindAll(view, ".btnDownload", "click", onDownloadClick);
+ view.querySelector(".btnMoreCommands i").innerHTML = "";
+ view.querySelector(".trackSelections").addEventListener("submit", onTrackSelectionsSubmit);
+ view.querySelector(".btnSplitVersions").addEventListener("click", function () {
+ splitVersions(self, view, apiClient, params);
+ });
+ bindAll(view, ".btnMoreCommands", "click", onMoreCommandsClick);
+ view.querySelector(".selectSource").addEventListener("change", function () {
+ renderVideoSelections(view, self._currentPlaybackMediaSources);
+ renderAudioSelections(view, self._currentPlaybackMediaSources);
+ renderSubtitleSelections(view, self._currentPlaybackMediaSources);
+ });
+ view.addEventListener("click", function (e) {
+ if (dom.parentWithClass(e.target, "moreScenes")) {
+ apiClient.getCurrentUser().then(function (user) {
+ renderScenes(view, currentItem);
+ });
+ } else if (dom.parentWithClass(e.target, "morePeople")) {
+ renderCast(view, currentItem, params.context);
+ } else if (dom.parentWithClass(e.target, "moreSpecials")) {
+ apiClient.getCurrentUser().then(function (user) {
+ renderSpecials(view, currentItem, user);
+ });
+ }
+ });
+ view.querySelector(".detailImageContainer").addEventListener("click", function (e) {
+ if (dom.parentWithClass(e.target, "itemDetailGalleryLink")) {
+ editImages().then(function () {
+ reload(self, view, params);
+ });
+ }
+ });
+ view.addEventListener("viewshow", function (e) {
+ var page = this;
+ libraryMenu.setTransparentMenu(true);
+
+ if (e.detail.isRestored) {
+ if (currentItem) {
+ setTitle(currentItem, connectionManager.getApiClient(currentItem.ServerId));
+ renderTrackSelections(page, self, currentItem, true);
+ }
+ } else {
+ reload(self, page, params);
+ }
+
+ events.on(apiClient, "message", onWebSocketMessage);
+ events.on(playbackManager, "playerchange", onPlayerChange);
+ });
+ view.addEventListener("viewbeforehide", function () {
+ events.off(apiClient, "message", onWebSocketMessage);
+ events.off(playbackManager, "playerchange", onPlayerChange);
+ libraryMenu.setTransparentMenu(false);
+ });
+ view.addEventListener("viewdestroy", function () {
+ currentItem = null;
+ self._currentPlaybackMediaSources = null;
+ self.currentRecordingFields = null;
+ });
+ };
});
diff --git a/src/controllers/list.js b/src/controllers/list.js
index aac181859..d15ebd244 100644
--- a/src/controllers/list.js
+++ b/src/controllers/list.js
@@ -1,4 +1,4 @@
-define(["globalize", "listView", "layoutManager", "userSettings", "focusManager", "cardBuilder", "loading", "connectionManager", "alphaNumericShortcuts", "scroller", "playbackManager", "alphaPicker", "emby-itemscontainer", "emby-scroller"], function(globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, scroller, playbackManager, alphaPicker) {
+define(["globalize", "listView", "layoutManager", "userSettings", "focusManager", "cardBuilder", "loading", "connectionManager", "alphaNumericShortcuts", "scroller", "playbackManager", "alphaPicker", "emby-itemscontainer", "emby-scroller"], function (globalize, listView, layoutManager, userSettings, focusManager, cardBuilder, loading, connectionManager, AlphaNumericShortcuts, scroller, playbackManager, alphaPicker) {
"use strict";
function getInitialLiveTvQuery(instance, params) {
@@ -8,83 +8,303 @@ define(["globalize", "listView", "layoutManager", "userSettings", "focusManager"
Fields: "ChannelInfo,PrimaryImageAspectRatio",
Limit: 300
};
- return "Recordings" === params.type ? query.IsInProgress = !1 : query.HasAired = !1, params.genreId && (query.GenreIds = params.genreId), "true" === params.IsMovie ? query.IsMovie = !0 : "false" === params.IsMovie && (query.IsMovie = !1), "true" === params.IsSeries ? query.IsSeries = !0 : "false" === params.IsSeries && (query.IsSeries = !1), "true" === params.IsNews ? query.IsNews = !0 : "false" === params.IsNews && (query.IsNews = !1), "true" === params.IsSports ? query.IsSports = !0 : "false" === params.IsSports && (query.IsSports = !1), "true" === params.IsKids ? query.IsKids = !0 : "false" === params.IsKids && (query.IsKids = !1), "true" === params.IsAiring ? query.IsAiring = !0 : "false" === params.IsAiring && (query.IsAiring = !1), modifyQueryWithFilters(instance, query)
+
+ if ("Recordings" === params.type) {
+ query.IsInProgress = false;
+ } else {
+ query.HasAired = false;
+ }
+
+ if (params.genreId) {
+ query.GenreIds = params.genreId;
+ }
+
+ if ("true" === params.IsMovie) {
+ query.IsMovie = true;
+ } else if ("false" === params.IsMovie) {
+ query.IsMovie = false;
+ }
+
+ if ("true" === params.IsSeries) {
+ query.IsSeries = true;
+ } else if ("false" === params.IsSeries) {
+ query.IsSeries = false;
+ }
+
+ if ("true" === params.IsNews) {
+ query.IsNews = true;
+ } else if ("false" === params.IsNews) {
+ query.IsNews = false;
+ }
+
+ if ("true" === params.IsSports) {
+ query.IsSports = true;
+ } else if ("false" === params.IsSports) {
+ query.IsSports = false;
+ }
+
+ if ("true" === params.IsKids) {
+ query.IsKids = true;
+ } else if ("false" === params.IsKids) {
+ query.IsKids = false;
+ }
+
+ if ("true" === params.IsAiring) {
+ query.IsAiring = true;
+ } else if ("false" === params.IsAiring) {
+ query.IsAiring = false;
+ }
+
+ return modifyQueryWithFilters(instance, query);
}
function modifyQueryWithFilters(instance, query) {
var sortValues = instance.getSortValues();
- query.SortBy || (query.SortBy = sortValues.sortBy, query.SortOrder = sortValues.sortOrder), query.Fields = query.Fields ? query.Fields + ",PrimaryImageAspectRatio" : "PrimaryImageAspectRatio", query.ImageTypeLimit = 1;
- var hasFilters, queryFilters = [],
- filters = instance.getFilters();
- return filters.IsPlayed && (queryFilters.push("IsPlayed"), hasFilters = !0), filters.IsUnplayed && (queryFilters.push("IsUnplayed"), hasFilters = !0), filters.IsFavorite && (queryFilters.push("IsFavorite"), hasFilters = !0), filters.IsResumable && (queryFilters.push("IsResumable"), hasFilters = !0), filters.VideoTypes && (hasFilters = !0, query.VideoTypes = filters.VideoTypes), filters.GenreIds && (hasFilters = !0, query.GenreIds = filters.GenreIds), filters.Is4K && (query.Is4K = !0, hasFilters = !0), filters.IsHD && (query.IsHD = !0, hasFilters = !0), filters.IsSD && (query.IsHD = !1, hasFilters = !0), filters.Is3D && (query.Is3D = !0, hasFilters = !0), filters.HasSubtitles && (query.HasSubtitles = !0, hasFilters = !0), filters.HasTrailer && (query.HasTrailer = !0, hasFilters = !0), filters.HasSpecialFeature && (query.HasSpecialFeature = !0, hasFilters = !0), filters.HasThemeSong && (query.HasThemeSong = !0, hasFilters = !0), filters.HasThemeVideo && (query.HasThemeVideo = !0, hasFilters = !0), query.Filters = queryFilters.length ? queryFilters.join(",") : null, instance.setFilterStatus(hasFilters), instance.alphaPicker && (query.NameStartsWithOrGreater = instance.alphaPicker.value()), query
+
+ if (!query.SortBy) {
+ query.SortBy = sortValues.sortBy;
+ query.SortOrder = sortValues.sortOrder;
+ }
+
+ query.Fields = query.Fields ? query.Fields + ",PrimaryImageAspectRatio" : "PrimaryImageAspectRatio";
+ query.ImageTypeLimit = 1;
+ var hasFilters;
+ var queryFilters = [];
+ var filters = instance.getFilters();
+
+ if (filters.IsPlayed) {
+ queryFilters.push("IsPlayed");
+ hasFilters = true;
+ }
+
+ if (filters.IsUnplayed) {
+ queryFilters.push("IsUnplayed");
+ hasFilters = true;
+ }
+
+ if (filters.IsFavorite) {
+ queryFilters.push("IsFavorite");
+ hasFilters = true;
+ }
+
+ if (filters.IsResumable) {
+ queryFilters.push("IsResumable");
+ hasFilters = true;
+ }
+
+ if (filters.VideoTypes) {
+ hasFilters = true;
+ query.VideoTypes = filters.VideoTypes;
+ }
+
+ if (filters.GenreIds) {
+ hasFilters = true;
+ query.GenreIds = filters.GenreIds;
+ }
+
+ if (filters.Is4K) {
+ query.Is4K = true;
+ hasFilters = true;
+ }
+
+ if (filters.IsHD) {
+ query.IsHD = true;
+ hasFilters = true;
+ }
+
+ if (filters.IsSD) {
+ query.IsHD = false;
+ hasFilters = true;
+ }
+
+ if (filters.Is3D) {
+ query.Is3D = true;
+ hasFilters = true;
+ }
+
+ if (filters.HasSubtitles) {
+ query.HasSubtitles = true;
+ hasFilters = true;
+ }
+
+ if (filters.HasTrailer) {
+ query.HasTrailer = true;
+ hasFilters = true;
+ }
+
+ if (filters.HasSpecialFeature) {
+ query.HasSpecialFeature = true;
+ hasFilters = true;
+ }
+
+ if (filters.HasThemeSong) {
+ query.HasThemeSong = true;
+ hasFilters = true;
+ }
+
+ if (filters.HasThemeVideo) {
+ query.HasThemeVideo = true;
+ hasFilters = true;
+ }
+
+ query.Filters = queryFilters.length ? queryFilters.join(",") : null;
+ instance.setFilterStatus(hasFilters);
+
+ if (instance.alphaPicker) {
+ query.NameStartsWithOrGreater = instance.alphaPicker.value();
+ }
+
+ return query;
}
function updateSortText(instance) {
var btnSortText = instance.btnSortText;
+
if (btnSortText) {
- for (var options = instance.getSortMenuOptions(), values = instance.getSortValues(), sortBy = values.sortBy, i = 0, length = options.length; i < length; i++)
+ var options = instance.getSortMenuOptions();
+ var values = instance.getSortValues();
+ var sortBy = values.sortBy;
+
+ for (var i = 0, length = options.length; i < length; i++) {
if (sortBy === options[i].value) {
btnSortText.innerHTML = globalize.translate("SortByValue", options[i].name);
- break
- } var btnSortIcon = instance.btnSortIcon;
- btnSortIcon && (btnSortIcon.innerHTML = "Descending" === values.sortOrder ? "" : "")
+ break;
+ }
+ }
+
+ var btnSortIcon = instance.btnSortIcon;
+
+ if (btnSortIcon) {
+ btnSortIcon.innerHTML = "Descending" === values.sortOrder ? "" : "";
+ }
}
}
function updateItemsContainerForViewType(instance) {
- "list" === instance.getViewSettings().imageType ? (instance.itemsContainer.classList.remove("vertical-wrap"), instance.itemsContainer.classList.add("vertical-list")) : (instance.itemsContainer.classList.add("vertical-wrap"), instance.itemsContainer.classList.remove("vertical-list"))
+ if ("list" === instance.getViewSettings().imageType) {
+ instance.itemsContainer.classList.remove("vertical-wrap");
+ instance.itemsContainer.classList.add("vertical-list");
+ } else {
+ instance.itemsContainer.classList.add("vertical-wrap");
+ instance.itemsContainer.classList.remove("vertical-list");
+ }
}
function updateAlphaPickerState(instance, numItems) {
if (instance.alphaPicker) {
var alphaPicker = instance.alphaPickerElement;
+
if (alphaPicker) {
var values = instance.getSortValues();
- null == numItems && (numItems = 100), "SortName" === values.sortBy && "Ascending" === values.sortOrder && numItems > 40 ? (alphaPicker.classList.remove("hide"), layoutManager.tv ? instance.itemsContainer.parentNode.classList.add("padded-left-withalphapicker") : instance.itemsContainer.parentNode.classList.add("padded-right-withalphapicker")) : (alphaPicker.classList.add("hide"), instance.itemsContainer.parentNode.classList.remove("padded-left-withalphapicker"), instance.itemsContainer.parentNode.classList.remove("padded-right-withalphapicker"))
+
+ if (null == numItems) {
+ numItems = 100;
+ }
+
+ if ("SortName" === values.sortBy && "Ascending" === values.sortOrder && numItems > 40) {
+ alphaPicker.classList.remove("hide");
+
+ if (layoutManager.tv) {
+ instance.itemsContainer.parentNode.classList.add("padded-left-withalphapicker");
+ } else {
+ instance.itemsContainer.parentNode.classList.add("padded-right-withalphapicker");
+ }
+ } else {
+ alphaPicker.classList.add("hide");
+ instance.itemsContainer.parentNode.classList.remove("padded-left-withalphapicker");
+ instance.itemsContainer.parentNode.classList.remove("padded-right-withalphapicker");
+ }
}
}
}
function getItems(instance, params, item, sortBy, startIndex, limit) {
var apiClient = connectionManager.getApiClient(params.serverId);
- if (instance.queryRecursive = !1, "Recordings" === params.type) return apiClient.getLiveTvRecordings(getInitialLiveTvQuery(instance, params));
- if ("Programs" === params.type) return "true" === params.IsAiring ? apiClient.getLiveTvRecommendedPrograms(getInitialLiveTvQuery(instance, params)) : apiClient.getLiveTvPrograms(getInitialLiveTvQuery(instance, params));
- if ("nextup" === params.type) return apiClient.getNextUpEpisodes(modifyQueryWithFilters(instance, {
- Limit: limit,
- Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo",
- UserId: apiClient.getCurrentUserId(),
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Thumb",
- EnableTotalRecordCount: !1,
- SortBy: sortBy
- }));
+
+ instance.queryRecursive = false;
+ if ("Recordings" === params.type) {
+ return apiClient.getLiveTvRecordings(getInitialLiveTvQuery(instance, params));
+ }
+
+ if ("Programs" === params.type) {
+ if ("true" === params.IsAiring) {
+ return apiClient.getLiveTvRecommendedPrograms(getInitialLiveTvQuery(instance, params));
+ }
+
+ return apiClient.getLiveTvPrograms(getInitialLiveTvQuery(instance, params));
+ }
+
+ if ("nextup" === params.type) {
+ return apiClient.getNextUpEpisodes(modifyQueryWithFilters(instance, {
+ Limit: limit,
+ Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,BasicSyncInfo",
+ UserId: apiClient.getCurrentUserId(),
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Thumb",
+ EnableTotalRecordCount: false,
+ SortBy: sortBy
+ }));
+ }
+
if (!item) {
- instance.queryRecursive = !0;
+ instance.queryRecursive = true;
var method = "getItems";
- return "MusicArtist" === params.type ? method = "getArtists" : "Person" === params.type && (method = "getPeople"), apiClient[method](apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, {
+
+ if ("MusicArtist" === params.type) {
+ method = "getArtists";
+ } else if ("Person" === params.type) {
+ method = "getPeople";
+ }
+
+ return apiClient[method](apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, {
StartIndex: startIndex,
Limit: limit,
Fields: "PrimaryImageAspectRatio,SortName",
ImageTypeLimit: 1,
IncludeItemTypes: "MusicArtist" === params.type || "Person" === params.type ? null : params.type,
- Recursive: !0,
+ Recursive: true,
IsFavorite: "true" === params.IsFavorite || null,
ArtistIds: params.artistId || null,
SortBy: sortBy
- }))
+ }));
}
+
if ("Genre" === item.Type || "MusicGenre" === item.Type || "Studio" === item.Type || "Person" === item.Type) {
- instance.queryRecursive = !0;
+ instance.queryRecursive = true;
var query = {
StartIndex: startIndex,
Limit: limit,
Fields: "PrimaryImageAspectRatio,SortName",
- Recursive: !0,
+ Recursive: true,
parentId: params.parentId,
SortBy: sortBy
};
- return "Studio" === item.Type ? query.StudioIds = item.Id : "Genre" === item.Type || "MusicGenre" === item.Type ? query.GenreIds = item.Id : "Person" === item.Type && (query.PersonIds = item.Id), "MusicGenre" === item.Type ? query.IncludeItemTypes = "MusicAlbum" : "GameGenre" === item.Type ? query.IncludeItemTypes = "Game" : "movies" === item.CollectionType ? query.IncludeItemTypes = "Movie" : "tvshows" === item.CollectionType ? query.IncludeItemTypes = "Series" : "Genre" === item.Type ? query.IncludeItemTypes = "Movie,Series,Video" : "Person" === item.Type && (query.IncludeItemTypes = params.type), apiClient.getItems(apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, query))
+
+ if ("Studio" === item.Type) {
+ query.StudioIds = item.Id;
+ } else if ("Genre" === item.Type || "MusicGenre" === item.Type) {
+ query.GenreIds = item.Id;
+ } else if ("Person" === item.Type) {
+ query.PersonIds = item.Id;
+ }
+
+ if ("MusicGenre" === item.Type) {
+ query.IncludeItemTypes = "MusicAlbum";
+ } else if ("GameGenre" === item.Type) {
+ query.IncludeItemTypes = "Game";
+ } else if ("movies" === item.CollectionType) {
+ query.IncludeItemTypes = "Movie";
+ } else if ("tvshows" === item.CollectionType) {
+ query.IncludeItemTypes = "Series";
+ } else if ("Genre" === item.Type) {
+ query.IncludeItemTypes = "Movie,Series,Video";
+ } else if ("Person" === item.Type) {
+ query.IncludeItemTypes = params.type;
+ }
+
+ return apiClient.getItems(apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, query));
}
+
return apiClient.getItems(apiClient.getCurrentUserId(), modifyQueryWithFilters(instance, {
StartIndex: startIndex,
Limit: limit,
@@ -92,35 +312,44 @@ define(["globalize", "listView", "layoutManager", "userSettings", "focusManager"
ImageTypeLimit: 1,
ParentId: item.Id,
SortBy: sortBy
- }))
+ }));
}
function getItem(params) {
- if ("Recordings" === params.type) return Promise.resolve(null);
- if ("Programs" === params.type) return Promise.resolve(null);
- if ("nextup" === params.type) return Promise.resolve(null);
- var apiClient = connectionManager.getApiClient(params.serverId),
- itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId;
- return itemId ? apiClient.getItem(apiClient.getCurrentUserId(), itemId) : Promise.resolve(null)
+ if ("Recordings" === params.type || "Programs" === params.type || "nextup" === params.type) {
+ return Promise.resolve(null);
+ }
+
+ var apiClient = connectionManager.getApiClient(params.serverId);
+ var itemId = params.genreId || params.musicGenreId || params.studioId || params.personId || params.parentId;
+
+ if (itemId) {
+ return apiClient.getItem(apiClient.getCurrentUserId(), itemId);
+ }
+
+ return Promise.resolve(null);
}
function showViewSettingsMenu() {
var instance = this;
- require(["viewSettings"], function(ViewSettings) {
- (new ViewSettings).show({
+
+ require(["viewSettings"], function (ViewSettings) {
+ new ViewSettings().show({
settingsKey: instance.getSettingsKey(),
settings: instance.getViewSettings(),
visibleSettings: instance.getVisibleViewSettings()
- }).then(function() {
- updateItemsContainerForViewType(instance), instance.itemsContainer.refreshItems()
- })
- })
+ }).then(function () {
+ updateItemsContainerForViewType(instance);
+ instance.itemsContainer.refreshItems();
+ });
+ });
}
function showFilterMenu() {
var instance = this;
- require(["filterMenu"], function(FilterMenu) {
- (new FilterMenu).show({
+
+ require(["filterMenu"], function (FilterMenu) {
+ new FilterMenu().show({
settingsKey: instance.getSettingsKey(),
settings: instance.getFilters(),
visibleSettings: instance.getVisibleFilters(),
@@ -129,201 +358,497 @@ define(["globalize", "listView", "layoutManager", "userSettings", "focusManager"
itemTypes: instance.getItemTypes(),
serverId: instance.params.serverId,
filterMenuOptions: instance.getFilterMenuOptions()
- }).then(function() {
- instance.itemsContainer.refreshItems()
- })
- })
+ }).then(function () {
+ instance.itemsContainer.refreshItems();
+ });
+ });
}
function showSortMenu() {
var instance = this;
- require(["sortMenu"], function(SortMenu) {
- (new SortMenu).show({
+
+ require(["sortMenu"], function (SortMenu) {
+ new SortMenu().show({
settingsKey: instance.getSettingsKey(),
settings: instance.getSortValues(),
onChange: instance.itemsContainer.refreshItems.bind(instance.itemsContainer),
serverId: instance.params.serverId,
sortOptions: instance.getSortMenuOptions()
- }).then(function() {
- updateSortText(instance), updateAlphaPickerState(instance), instance.itemsContainer.refreshItems()
- })
- })
+ }).then(function () {
+ updateSortText(instance);
+ updateAlphaPickerState(instance);
+ instance.itemsContainer.refreshItems();
+ });
+ });
}
function onNewItemClick() {
var instance = this;
- require(["playlistEditor"], function(playlistEditor) {
- (new playlistEditor).show({
+
+ require(["playlistEditor"], function (playlistEditor) {
+ new playlistEditor().show({
items: [],
serverId: instance.params.serverId
- })
- })
+ });
+ });
}
function hideOrShowAll(elems, hide) {
- for (var i = 0, length = elems.length; i < length; i++) hide ? elems[i].classList.add("hide") : elems[i].classList.remove("hide")
+ for (var i = 0, length = elems.length; i < length; i++) {
+ if (hide) {
+ elems[i].classList.add("hide");
+ } else {
+ elems[i].classList.remove("hide");
+ }
+ }
}
function bindAll(elems, eventName, fn) {
- for (var i = 0, length = elems.length; i < length; i++) elems[i].addEventListener(eventName, fn)
+ for (var i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener(eventName, fn);
+ }
}
function ItemsView(view, params) {
function fetchData() {
- return getItems(self, params, self.currentItem).then(function(result) {
- return null == self.totalItemCount && (self.totalItemCount = result.Items ? result.Items.length : result.length), updateAlphaPickerState(self, self.totalItemCount), result
- })
+ return getItems(self, params, self.currentItem).then(function (result) {
+ if (null == self.totalItemCount) {
+ self.totalItemCount = result.Items ? result.Items.length : result.length;
+ }
+
+ updateAlphaPickerState(self, self.totalItemCount);
+ return result;
+ });
}
function getItemsHtml(items) {
var settings = self.getViewSettings();
- if ("list" === settings.imageType) return listView.getListViewHtml({
- items: items
- });
- var shape, preferThumb, preferDisc, preferLogo, defaultShape, item = self.currentItem,
- lines = settings.showTitle ? 2 : 0;
- "banner" === settings.imageType ? shape = "banner" : "disc" === settings.imageType ? (shape = "square", preferDisc = !0) : "logo" === settings.imageType ? (shape = "backdrop", preferLogo = !0) : "thumb" === settings.imageType ? (shape = "backdrop", preferThumb = !0) : "nextup" === params.type ? (shape = "backdrop", preferThumb = "thumb" === settings.imageType) : "Programs" === params.type || "Recordings" === params.type ? (shape = "true" === params.IsMovie ? "portrait" : "autoVertical", preferThumb = "true" !== params.IsMovie && "auto", defaultShape = "true" === params.IsMovie ? "portrait" : "backdrop") : shape = "autoVertical";
+
+ if ("list" === settings.imageType) {
+ return listView.getListViewHtml({
+ items: items
+ });
+ }
+
+ var shape;
+ var preferThumb;
+ var preferDisc;
+ var preferLogo;
+ var defaultShape;
+ var item = self.currentItem;
+ var lines = settings.showTitle ? 2 : 0;
+
+ if ("banner" === settings.imageType) {
+ shape = "banner";
+ } else if ("disc" === settings.imageType) {
+ shape = "square";
+ preferDisc = true;
+ } else if ("logo" === settings.imageType) {
+ shape = "backdrop";
+ preferLogo = true;
+ } else if ("thumb" === settings.imageType) {
+ shape = "backdrop";
+ preferThumb = true;
+ } else if ("nextup" === params.type) {
+ shape = "backdrop";
+ preferThumb = "thumb" === settings.imageType;
+ } else if ("Programs" === params.type || "Recordings" === params.type) {
+ shape = "true" === params.IsMovie ? "portrait" : "autoVertical";
+ preferThumb = "true" !== params.IsMovie ? "auto" : false;
+ defaultShape = "true" === params.IsMovie ? "portrait" : "backdrop";
+ } else {
+ shape = "autoVertical";
+ }
+
var posterOptions = {
shape: shape,
showTitle: settings.showTitle,
showYear: settings.showTitle,
- centerText: !0,
- coverImage: !0,
+ centerText: true,
+ coverImage: true,
preferThumb: preferThumb,
preferDisc: preferDisc,
preferLogo: preferLogo,
- overlayPlayButton: !1,
- overlayMoreButton: !0,
+ overlayPlayButton: false,
+ overlayMoreButton: true,
overlayText: !settings.showTitle,
defaultShape: defaultShape,
action: "Audio" === params.type ? "playallfromhere" : null
};
- if ("nextup" === params.type) posterOptions.showParentTitle = settings.showTitle;
- else if ("Person" === params.type) posterOptions.showYear = !1, posterOptions.showParentTitle = !1, lines = 1;
- else if ("Audio" === params.type) posterOptions.showParentTitle = settings.showTitle;
- else if ("MusicAlbum" === params.type) posterOptions.showParentTitle = settings.showTitle;
- else if ("Episode" === params.type) posterOptions.showParentTitle = settings.showTitle;
- else if ("MusicArtist" === params.type) posterOptions.showYear = !1, lines = 1;
- else if ("Programs" === params.type) {
+
+ if ("nextup" === params.type) {
+ posterOptions.showParentTitle = settings.showTitle;
+ } else if ("Person" === params.type) {
+ posterOptions.showYear = false;
+ posterOptions.showParentTitle = false;
+ lines = 1;
+ } else if ("Audio" === params.type) {
+ posterOptions.showParentTitle = settings.showTitle;
+ } else if ("MusicAlbum" === params.type) {
+ posterOptions.showParentTitle = settings.showTitle;
+ } else if ("Episode" === params.type) {
+ posterOptions.showParentTitle = settings.showTitle;
+ } else if ("MusicArtist" === params.type) {
+ posterOptions.showYear = false;
+ lines = 1;
+ } else if ("Programs" === params.type) {
lines = settings.showTitle ? 1 : 0;
var showParentTitle = settings.showTitle && "true" !== params.IsMovie;
- showParentTitle && lines++;
+
+ if (showParentTitle) {
+ lines++;
+ }
+
var showAirTime = settings.showTitle && "Recordings" !== params.type;
- showAirTime && lines++;
+
+ if (showAirTime) {
+ lines++;
+ }
+
var showYear = settings.showTitle && "true" === params.IsMovie && "Recordings" === params.type;
- showYear && lines++, posterOptions = Object.assign(posterOptions, {
+
+ if (showYear) {
+ lines++;
+ }
+
+ posterOptions = Object.assign(posterOptions, {
inheritThumb: "Recordings" === params.type,
context: "livetv",
showParentTitle: showParentTitle,
showAirTime: showAirTime,
showAirDateTime: showAirTime,
- overlayPlayButton: !1,
- overlayMoreButton: !0,
+ overlayPlayButton: false,
+ overlayMoreButton: true,
showYear: showYear,
- coverImage: !0
- })
- } else posterOptions.showParentTitle = settings.showTitle;
- return posterOptions.lines = lines, posterOptions.items = items, item && "folders" === item.CollectionType && (posterOptions.context = "folders"), cardBuilder.getCardsHtml(posterOptions)
+ coverImage: true
+ });
+ } else {
+ posterOptions.showParentTitle = settings.showTitle;
+ }
+
+ posterOptions.lines = lines;
+ posterOptions.items = items;
+
+ if (item && "folders" === item.CollectionType) {
+ posterOptions.context = "folders";
+ }
+
+ return cardBuilder.getCardsHtml(posterOptions);
}
function initAlphaPicker() {
self.scroller = view.querySelector(".scrollFrameY");
var alphaPickerElement = self.alphaPickerElement;
- layoutManager.tv ? (alphaPickerElement.classList.add("alphaPicker-fixed-left"), alphaPickerElement.classList.add("focuscontainer-left"), self.itemsContainer.parentNode.classList.add("padded-left-withalphapicker")) : (alphaPickerElement.classList.add("alphaPicker-fixed-right"), alphaPickerElement.classList.add("focuscontainer-right"), self.itemsContainer.parentNode.classList.add("padded-right-withalphapicker")), self.alphaPicker = new alphaPicker({
+
+ if (layoutManager.tv) {
+ alphaPickerElement.classList.add("alphaPicker-fixed-left");
+ alphaPickerElement.classList.add("focuscontainer-left");
+ self.itemsContainer.parentNode.classList.add("padded-left-withalphapicker");
+ } else {
+ alphaPickerElement.classList.add("alphaPicker-fixed-right");
+ alphaPickerElement.classList.add("focuscontainer-right");
+ self.itemsContainer.parentNode.classList.add("padded-right-withalphapicker");
+ }
+
+ self.alphaPicker = new alphaPicker({
element: alphaPickerElement,
itemsContainer: layoutManager.tv ? self.itemsContainer : null,
itemClass: "card",
valueChangeEvent: layoutManager.tv ? null : "click"
- }), self.alphaPicker.on("alphavaluechanged", onAlphaPickerValueChanged)
+ });
+ self.alphaPicker.on("alphavaluechanged", onAlphaPickerValueChanged);
}
function onAlphaPickerValueChanged() {
self.alphaPicker.value();
- self.itemsContainer.refreshItems()
+ self.itemsContainer.refreshItems();
}
function setTitle(item) {
- Emby.Page.setTitle(getTitle(item) || ""), item && "playlists" === item.CollectionType ? hideOrShowAll(view.querySelectorAll(".btnNewItem"), !1) : hideOrShowAll(view.querySelectorAll(".btnNewItem"), !0)
+ Emby.Page.setTitle(getTitle(item) || "");
+
+ if (item && "playlists" === item.CollectionType) {
+ hideOrShowAll(view.querySelectorAll(".btnNewItem"), false);
+ } else {
+ hideOrShowAll(view.querySelectorAll(".btnNewItem"), true);
+ }
}
function getTitle(item) {
- return "Recordings" === params.type ? globalize.translate("Recordings") : "Programs" === params.type ? "true" === params.IsMovie ? globalize.translate("Movies") : "true" === params.IsSports ? globalize.translate("Sports") : "true" === params.IsKids ? globalize.translate("HeaderForKids") : "true" === params.IsAiring ? globalize.translate("HeaderOnNow") : "true" === params.IsSeries ? globalize.translate("Shows") : "true" === params.IsNews ? globalize.translate("News") : globalize.translate("Programs") : "nextup" === params.type ? globalize.translate("NextUp") : "favoritemovies" === params.type ? globalize.translate("FavoriteMovies") : item ? item.Name : "Movie" === params.type ? globalize.translate("Movies") : "Series" === params.type ? globalize.translate("Shows") : "Season" === params.type ? globalize.translate("Seasons") : "Episode" === params.type ? globalize.translate("Episodes") : "MusicArtist" === params.type ? globalize.translate("Artists") : "MusicAlbum" === params.type ? globalize.translate("Albums") : "Audio" === params.type ? globalize.translate("Songs") : "Video" === params.type ? globalize.translate("Videos") : void 0
+ if ("Recordings" === params.type) {
+ return globalize.translate("Recordings");
+ }
+
+ if ("Programs" === params.type) {
+ if ("true" === params.IsMovie) {
+ return globalize.translate("Movies");
+ }
+
+ if ("true" === params.IsSports) {
+ return globalize.translate("Sports");
+ }
+
+ if ("true" === params.IsKids) {
+ return globalize.translate("HeaderForKids");
+ }
+
+ if ("true" === params.IsAiring) {
+ return globalize.translate("HeaderOnNow");
+ }
+
+ if ("true" === params.IsSeries) {
+ return globalize.translate("Shows");
+ }
+
+ if ("true" === params.IsNews) {
+ return globalize.translate("News");
+ }
+
+ return globalize.translate("Programs");
+ }
+
+ if ("nextup" === params.type) {
+ return globalize.translate("NextUp");
+ }
+
+ if ("favoritemovies" === params.type) {
+ return globalize.translate("FavoriteMovies");
+ }
+
+ if (item) {
+ return item.Name;
+ }
+
+ if ("Movie" === params.type) {
+ return globalize.translate("Movies");
+ }
+
+ if ("Series" === params.type) {
+ return globalize.translate("Shows");
+ }
+
+ if ("Season" === params.type) {
+ return globalize.translate("Seasons");
+ }
+
+ if ("Episode" === params.type) {
+ return globalize.translate("Episodes");
+ }
+
+ if ("MusicArtist" === params.type) {
+ return globalize.translate("Artists");
+ }
+
+ if ("MusicAlbum" === params.type) {
+ return globalize.translate("Albums");
+ }
+
+ if ("Audio" === params.type) {
+ return globalize.translate("Songs");
+ }
+
+ if ("Video" === params.type) {
+ return globalize.translate("Videos");
+ }
+
+ return void 0;
}
function play() {
var currentItem = self.currentItem;
- if (currentItem && !self.hasFilters) return void playbackManager.play({
- items: [currentItem]
- });
- getItems(self, self.params, currentItem, null, null, 300).then(function(result) {
+
+ if (currentItem && !self.hasFilters) {
playbackManager.play({
- items: result.Items
- })
- })
+ items: [currentItem]
+ });
+ } else {
+ getItems(self, self.params, currentItem, null, null, 300).then(function (result) {
+ playbackManager.play({
+ items: result.Items
+ });
+ });
+ }
}
function queue() {
var currentItem = self.currentItem;
- if (currentItem && !self.hasFilters) return void playbackManager.queue({
- items: [currentItem]
- });
- getItems(self, self.params, currentItem, null, null, 300).then(function(result) {
+
+ if (currentItem && !self.hasFilters) {
playbackManager.queue({
- items: result.Items
- })
- })
+ items: [currentItem]
+ });
+ } else {
+ getItems(self, self.params, currentItem, null, null, 300).then(function (result) {
+ playbackManager.queue({
+ items: result.Items
+ });
+ });
+ }
}
function shuffle() {
var currentItem = self.currentItem;
- if (currentItem && !self.hasFilters) return void playbackManager.shuffle(currentItem);
- getItems(self, self.params, currentItem, "Random", null, 300).then(function(result) {
- playbackManager.play({
- items: result.Items
- })
- })
+
+ if (currentItem && !self.hasFilters) {
+ playbackManager.shuffle(currentItem);
+ } else {
+ getItems(self, self.params, currentItem, "Random", null, 300).then(function (result) {
+ playbackManager.play({
+ items: result.Items
+ });
+ });
+ }
}
+
var self = this;
- self.params = params, this.itemsContainer = view.querySelector(".itemsContainer"), params.parentId ? this.itemsContainer.setAttribute("data-parentid", params.parentId) : "nextup" === params.type ? this.itemsContainer.setAttribute("data-monitor", "videoplayback") : "favoritemovies" === params.type ? this.itemsContainer.setAttribute("data-monitor", "markfavorite") : "Programs" === params.type && this.itemsContainer.setAttribute("data-refreshinterval", "300000");
- var i, length, btnViewSettings = view.querySelectorAll(".btnViewSettings");
- for (i = 0, length = btnViewSettings.length; i < length; i++) btnViewSettings[i].addEventListener("click", showViewSettingsMenu.bind(this));
+ self.params = params;
+ this.itemsContainer = view.querySelector(".itemsContainer");
+
+ if (params.parentId) {
+ this.itemsContainer.setAttribute("data-parentid", params.parentId);
+ } else if ("nextup" === params.type) {
+ this.itemsContainer.setAttribute("data-monitor", "videoplayback");
+ } else if ("favoritemovies" === params.type) {
+ this.itemsContainer.setAttribute("data-monitor", "markfavorite");
+ } else if ("Programs" === params.type) {
+ this.itemsContainer.setAttribute("data-refreshinterval", "300000");
+ }
+
+ var i;
+ var length;
+ var btnViewSettings = view.querySelectorAll(".btnViewSettings");
+
+ for (i = 0, length = btnViewSettings.length; i < length; i++) {
+ btnViewSettings[i].addEventListener("click", showViewSettingsMenu.bind(this));
+ }
+
var filterButtons = view.querySelectorAll(".btnFilter");
this.filterButtons = filterButtons;
var hasVisibleFilters = this.getVisibleFilters().length;
+
for (i = 0, length = filterButtons.length; i < length; i++) {
var btnFilter = filterButtons[i];
- btnFilter.addEventListener("click", showFilterMenu.bind(this)), hasVisibleFilters ? btnFilter.classList.remove("hide") : btnFilter.classList.add("hide")
+ btnFilter.addEventListener("click", showFilterMenu.bind(this));
+
+ if (hasVisibleFilters) {
+ btnFilter.classList.remove("hide");
+ } else {
+ btnFilter.classList.add("hide");
+ }
}
+
var sortButtons = view.querySelectorAll(".btnSort");
+
for (this.sortButtons = sortButtons, i = 0, length = sortButtons.length; i < length; i++) {
var sortButton = sortButtons[i];
- sortButton.addEventListener("click", showSortMenu.bind(this)), "nextup" !== params.type && sortButton.classList.remove("hide")
+ sortButton.addEventListener("click", showSortMenu.bind(this));
+
+ if ("nextup" !== params.type) {
+ sortButton.classList.remove("hide");
+ }
}
- this.btnSortText = view.querySelector(".btnSortText"), this.btnSortIcon = view.querySelector(".btnSortIcon"), bindAll(view.querySelectorAll(".btnNewItem"), "click", onNewItemClick.bind(this)), this.alphaPickerElement = view.querySelector(".alphaPicker"), self.itemsContainer.fetchData = fetchData, self.itemsContainer.getItemsHtml = getItemsHtml, view.addEventListener("viewshow", function(e) {
+
+ this.btnSortText = view.querySelector(".btnSortText");
+ this.btnSortIcon = view.querySelector(".btnSortIcon");
+ bindAll(view.querySelectorAll(".btnNewItem"), "click", onNewItemClick.bind(this));
+ this.alphaPickerElement = view.querySelector(".alphaPicker");
+ self.itemsContainer.fetchData = fetchData;
+ self.itemsContainer.getItemsHtml = getItemsHtml;
+ view.addEventListener("viewshow", function (e) {
var isRestored = e.detail.isRestored;
- isRestored || (loading.show(), updateSortText(self), updateItemsContainerForViewType(self)), setTitle(null), getItem(params).then(function(item) {
- setTitle(item), self.currentItem = item;
+
+ if (!isRestored) {
+ loading.show();
+ updateSortText(self);
+ updateItemsContainerForViewType(self);
+ }
+
+ setTitle(null);
+ getItem(params).then(function (item) {
+ setTitle(item);
+ self.currentItem = item;
var refresh = !isRestored;
self.itemsContainer.resume({
refresh: refresh
- }).then(function() {
- loading.hide(), refresh && focusManager.autoFocus(self.itemsContainer)
- }), isRestored || item && "PhotoAlbum" !== item.Type && initAlphaPicker();
+ }).then(function () {
+ loading.hide();
+
+ if (refresh) {
+ focusManager.autoFocus(self.itemsContainer);
+ }
+ });
+
+ if (!isRestored && item && "PhotoAlbum" !== item.Type) {
+ initAlphaPicker();
+ }
+
var itemType = item ? item.Type : null;
- "MusicGenre" === itemType || "Programs" !== params.type && "Channel" !== itemType ? hideOrShowAll(view.querySelectorAll(".btnPlay"), !1) : hideOrShowAll(view.querySelectorAll(".btnPlay"), !0), "MusicGenre" === itemType || "Programs" !== params.type && "nextup" !== params.type && "Channel" !== itemType ? hideOrShowAll(view.querySelectorAll(".btnShuffle"), !1) : hideOrShowAll(view.querySelectorAll(".btnShuffle"), !0), item && playbackManager.canQueue(item) ? hideOrShowAll(view.querySelectorAll(".btnQueue"), !1) : hideOrShowAll(view.querySelectorAll(".btnQueue"), !0)
- }), isRestored || (bindAll(view.querySelectorAll(".btnPlay"), "click", play), bindAll(view.querySelectorAll(".btnQueue"), "click", queue), bindAll(view.querySelectorAll(".btnShuffle"), "click", shuffle)), this.alphaNumericShortcuts = new AlphaNumericShortcuts({
+
+ if ("MusicGenre" === itemType || "Programs" !== params.type && "Channel" !== itemType) {
+ hideOrShowAll(view.querySelectorAll(".btnPlay"), false);
+ } else {
+ hideOrShowAll(view.querySelectorAll(".btnPlay"), true);
+ }
+
+ if ("MusicGenre" === itemType || "Programs" !== params.type && "nextup" !== params.type && "Channel" !== itemType) {
+ hideOrShowAll(view.querySelectorAll(".btnShuffle"), false);
+ } else {
+ hideOrShowAll(view.querySelectorAll(".btnShuffle"), true);
+ }
+
+ if (item && playbackManager.canQueue(item)) {
+ hideOrShowAll(view.querySelectorAll(".btnQueue"), false);
+ } else {
+ hideOrShowAll(view.querySelectorAll(".btnQueue"), true);
+ }
+ });
+
+ if (!isRestored) {
+ bindAll(view.querySelectorAll(".btnPlay"), "click", play);
+ bindAll(view.querySelectorAll(".btnQueue"), "click", queue);
+ bindAll(view.querySelectorAll(".btnShuffle"), "click", shuffle);
+ }
+
+ this.alphaNumericShortcuts = new AlphaNumericShortcuts({
itemsContainer: self.itemsContainer
- })
- }), view.addEventListener("viewhide", function(e) {
+ });
+ });
+ view.addEventListener("viewhide", function (e) {
var itemsContainer = self.itemsContainer;
- itemsContainer && itemsContainer.pause();
+
+ if (itemsContainer) {
+ itemsContainer.pause();
+ }
+
var alphaNumericShortcuts = self.alphaNumericShortcuts;
- alphaNumericShortcuts && (alphaNumericShortcuts.destroy(), self.alphaNumericShortcuts = null)
- }), view.addEventListener("viewdestroy", function() {
- self.listController && self.listController.destroy(), self.alphaPicker && (self.alphaPicker.off("alphavaluechanged", onAlphaPickerValueChanged), self.alphaPicker.destroy()), self.currentItem = null, self.scroller = null, self.itemsContainer = null, self.filterButtons = null, self.sortButtons = null, self.btnSortText = null, self.btnSortIcon = null, self.alphaPickerElement = null
- })
+
+ if (alphaNumericShortcuts) {
+ alphaNumericShortcuts.destroy();
+ self.alphaNumericShortcuts = null;
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (self.listController) {
+ self.listController.destroy();
+ }
+
+ if (self.alphaPicker) {
+ self.alphaPicker.off("alphavaluechanged", onAlphaPickerValueChanged);
+ self.alphaPicker.destroy();
+ }
+
+ self.currentItem = null;
+ self.scroller = null;
+ self.itemsContainer = null;
+ self.filterButtons = null;
+ self.sortButtons = null;
+ self.btnSortText = null;
+ self.btnSortIcon = null;
+ self.alphaPickerElement = null;
+ });
}
- return ItemsView.prototype.getFilters = function() {
+
+ ItemsView.prototype.getFilters = function () {
var basekey = this.getSettingsKey();
return {
IsPlayed: "true" === userSettings.getFilter(basekey + "-filter-IsPlayed"),
@@ -342,87 +867,211 @@ define(["globalize", "listView", "layoutManager", "userSettings", "focusManager"
HasThemeSong: userSettings.getFilter(basekey + "-filter-HasThemeSong"),
HasThemeVideo: userSettings.getFilter(basekey + "-filter-HasThemeVideo"),
GenreIds: userSettings.getFilter(basekey + "-filter-GenreIds")
- }
- }, ItemsView.prototype.getSortValues = function() {
+ };
+ };
+
+ ItemsView.prototype.getSortValues = function () {
var basekey = this.getSettingsKey();
return {
sortBy: userSettings.getFilter(basekey + "-sortby") || this.getDefaultSortBy(),
sortOrder: "Descending" === userSettings.getFilter(basekey + "-sortorder") ? "Descending" : "Ascending"
+ };
+ };
+
+ ItemsView.prototype.getDefaultSortBy = function () {
+ var params = this.params;
+ var sortNameOption = this.getNameSortOption(params);
+
+ if (params.type) {
+ return sortNameOption.value;
}
- }, ItemsView.prototype.getDefaultSortBy = function() {
- var params = this.params,
- sortNameOption = this.getNameSortOption(params);
- return params.type ? sortNameOption.value : "IsFolder," + sortNameOption.value
- }, ItemsView.prototype.getSortMenuOptions = function() {
- var sortBy = [],
- params = this.params;
- "Programs" === params.type && sortBy.push({
- name: globalize.translate("AirDate"),
- value: "StartDate,SortName"
- });
+
+ return "IsFolder," + sortNameOption.value;
+ };
+
+ ItemsView.prototype.getSortMenuOptions = function () {
+ var sortBy = [];
+ var params = this.params;
+
+ if ("Programs" === params.type) {
+ sortBy.push({
+ name: globalize.translate("AirDate"),
+ value: "StartDate,SortName"
+ });
+ }
+
var option = this.getNameSortOption(params);
- return option && sortBy.push(option), option = this.getCommunityRatingSortOption(), option && sortBy.push(option), option = this.getCriticRatingSortOption(), option && sortBy.push(option), "Programs" !== params.type && sortBy.push({
- name: globalize.translate("DateAdded"),
- value: "DateCreated,SortName"
- }), option = this.getDatePlayedSortOption(), option && sortBy.push(option), params.type || (option = this.getNameSortOption(params), sortBy.push({
- name: globalize.translate("Folders"),
- value: "IsFolder," + option.value
- })), sortBy.push({
+
+ if (option) {
+ sortBy.push(option);
+ }
+
+ option = this.getCommunityRatingSortOption();
+
+ if (option) {
+ sortBy.push(option);
+ }
+
+ option = this.getCriticRatingSortOption();
+
+ if (option) {
+ sortBy.push(option);
+ }
+
+ if ("Programs" !== params.type) {
+ sortBy.push({
+ name: globalize.translate("DateAdded"),
+ value: "DateCreated,SortName"
+ });
+ }
+
+ option = this.getDatePlayedSortOption();
+
+ if (option) {
+ sortBy.push(option);
+ }
+
+ if (!params.type) {
+ option = this.getNameSortOption(params);
+ sortBy.push({
+ name: globalize.translate("Folders"),
+ value: "IsFolder," + option.value
+ });
+ }
+
+ sortBy.push({
name: globalize.translate("ParentalRating"),
value: "OfficialRating,SortName"
- }), option = this.getPlayCountSortOption(), option && sortBy.push(option), sortBy.push({
+ });
+ option = this.getPlayCountSortOption();
+
+ if (option) {
+ sortBy.push(option);
+ }
+
+ sortBy.push({
name: globalize.translate("ReleaseDate"),
value: "ProductionYear,PremiereDate,SortName"
- }), sortBy.push({
+ });
+ sortBy.push({
name: globalize.translate("Runtime"),
value: "Runtime,SortName"
- }), sortBy
- }, ItemsView.prototype.getNameSortOption = function(params) {
- return "Episode" === params.type ? {
- name: globalize.translate("Name"),
- value: "SeriesName,SortName"
- } : {
+ });
+ return sortBy;
+ };
+
+ ItemsView.prototype.getNameSortOption = function (params) {
+ if ("Episode" === params.type) {
+ return {
+ name: globalize.translate("Name"),
+ value: "SeriesName,SortName"
+ };
+ }
+
+ return {
name: globalize.translate("Name"),
value: "SortName"
+ };
+ };
+
+ ItemsView.prototype.getPlayCountSortOption = function () {
+ if ("Programs" === this.params.type) {
+ return null;
}
- }, ItemsView.prototype.getPlayCountSortOption = function() {
- return "Programs" === this.params.type ? null : {
+
+ return {
name: globalize.translate("PlayCount"),
value: "PlayCount,SortName"
+ };
+ };
+
+ ItemsView.prototype.getDatePlayedSortOption = function () {
+ if ("Programs" === this.params.type) {
+ return null;
}
- }, ItemsView.prototype.getDatePlayedSortOption = function() {
- return "Programs" === this.params.type ? null : {
+
+ return {
name: globalize.translate("DatePlayed"),
value: "DatePlayed,SortName"
+ };
+ };
+
+ ItemsView.prototype.getCriticRatingSortOption = function () {
+ if ("Programs" === this.params.type) {
+ return null;
}
- }, ItemsView.prototype.getCriticRatingSortOption = function() {
- return "Programs" === this.params.type ? null : {
+
+ return {
name: globalize.translate("CriticRating"),
value: "CriticRating,SortName"
- }
- }, ItemsView.prototype.getCommunityRatingSortOption = function() {
+ };
+ };
+
+ ItemsView.prototype.getCommunityRatingSortOption = function () {
return {
name: globalize.translate("CommunityRating"),
value: "CommunityRating,SortName"
+ };
+ };
+
+ ItemsView.prototype.getVisibleFilters = function () {
+ var filters = [];
+ var params = this.params;
+
+ if (!("nextup" === params.type)) {
+ if ("Programs" === params.type) {
+ filters.push("Genres");
+ } else {
+ params.type;
+ filters.push("IsUnplayed");
+ filters.push("IsPlayed");
+
+ if (!params.IsFavorite) {
+ filters.push("IsFavorite");
+ }
+
+ filters.push("IsResumable");
+ filters.push("VideoType");
+ filters.push("HasSubtitles");
+ filters.push("HasTrailer");
+ filters.push("HasSpecialFeature");
+ filters.push("HasThemeSong");
+ filters.push("HasThemeVideo");
+ }
}
- }, ItemsView.prototype.getVisibleFilters = function() {
- var filters = [],
- params = this.params;
- return "nextup" === params.type || ("Programs" === params.type ? filters.push("Genres") : (params.type, filters.push("IsUnplayed"), filters.push("IsPlayed"), params.IsFavorite || filters.push("IsFavorite"), filters.push("IsResumable"), filters.push("VideoType"), filters.push("HasSubtitles"), filters.push("HasTrailer"), filters.push("HasSpecialFeature"), filters.push("HasThemeSong"), filters.push("HasThemeVideo"))), filters
- }, ItemsView.prototype.setFilterStatus = function(hasFilters) {
+
+ return filters;
+ };
+
+ ItemsView.prototype.setFilterStatus = function (hasFilters) {
this.hasFilters = hasFilters;
var filterButtons = this.filterButtons;
- if (filterButtons.length)
+
+ if (filterButtons.length) {
for (var i = 0, length = filterButtons.length; i < length; i++) {
- var btnFilter = filterButtons[i],
- bubble = btnFilter.querySelector(".filterButtonBubble");
+ var btnFilter = filterButtons[i];
+ var bubble = btnFilter.querySelector(".filterButtonBubble");
+
if (!bubble) {
- if (!hasFilters) continue;
- btnFilter.insertAdjacentHTML("afterbegin", '
!
'), btnFilter.classList.add("btnFilterWithBubble"), bubble = btnFilter.querySelector(".filterButtonBubble")
+ if (!hasFilters) {
+ continue;
+ }
+
+ btnFilter.insertAdjacentHTML("afterbegin", '
!
');
+ btnFilter.classList.add("btnFilterWithBubble");
+ bubble = btnFilter.querySelector(".filterButtonBubble");
+ }
+
+ if (hasFilters) {
+ bubble.classList.remove("hide");
+ } else {
+ bubble.classList.add("hide");
}
- hasFilters ? bubble.classList.remove("hide") : bubble.classList.add("hide")
}
- }, ItemsView.prototype.getFilterMenuOptions = function() {
+ }
+ };
+
+ ItemsView.prototype.getFilterMenuOptions = function () {
var params = this.params;
return {
IsAiring: params.IsAiring,
@@ -432,31 +1081,126 @@ define(["globalize", "listView", "layoutManager", "userSettings", "focusManager"
IsNews: params.IsNews,
IsSeries: params.IsSeries,
Recursive: this.queryRecursive
+ };
+ };
+
+ ItemsView.prototype.getVisibleViewSettings = function () {
+ var item = (this.params, this.currentItem);
+ var fields = ["showTitle"];
+
+ if (!item || "PhotoAlbum" !== item.Type && "ChannelFolderItem" !== item.Type) {
+ fields.push("imageType");
}
- }, ItemsView.prototype.getVisibleViewSettings = function() {
- var item = (this.params, this.currentItem),
- fields = ["showTitle"];
- return (!item || "PhotoAlbum" !== item.Type && "ChannelFolderItem" !== item.Type) && fields.push("imageType"), fields.push("viewType"), fields
- }, ItemsView.prototype.getViewSettings = function() {
- var basekey = this.getSettingsKey(),
- params = this.params,
- item = this.currentItem,
- showTitle = userSettings.get(basekey + "-showTitle");
- "true" === showTitle ? showTitle = !0 : "false" === showTitle ? showTitle = !1 : "Programs" === params.type || "Recordings" === params.type || "Person" === params.type || "nextup" === params.type || "Audio" === params.type || "MusicAlbum" === params.type || "MusicArtist" === params.type ? showTitle = !0 : item && "PhotoAlbum" !== item.Type && (showTitle = !0);
+
+ fields.push("viewType");
+ return fields;
+ };
+
+ ItemsView.prototype.getViewSettings = function () {
+ var basekey = this.getSettingsKey();
+ var params = this.params;
+ var item = this.currentItem;
+ var showTitle = userSettings.get(basekey + "-showTitle");
+
+ if ("true" === showTitle) {
+ showTitle = true;
+ } else if ("false" === showTitle) {
+ showTitle = false;
+ } else if ("Programs" === params.type || "Recordings" === params.type || "Person" === params.type || "nextup" === params.type || "Audio" === params.type || "MusicAlbum" === params.type || "MusicArtist" === params.type) {
+ showTitle = true;
+ } else if (item && "PhotoAlbum" !== item.Type) {
+ showTitle = true;
+ }
+
var imageType = userSettings.get(basekey + "-imageType");
- return imageType || "nextup" === params.type && (imageType = "thumb"), {
+
+ if (!imageType && "nextup" === params.type) {
+ imageType = "thumb";
+ }
+
+ return {
showTitle: showTitle,
showYear: "false" !== userSettings.get(basekey + "-showYear"),
imageType: imageType || "primary",
viewType: userSettings.get(basekey + "-viewType") || "images"
- }
- }, ItemsView.prototype.getItemTypes = function() {
+ };
+ };
+
+ ItemsView.prototype.getItemTypes = function () {
var params = this.params;
- return "nextup" === params.type ? ["Episode"] : "Programs" === params.type ? ["Program"] : []
- }, ItemsView.prototype.getSettingsKey = function() {
+
+ if ("nextup" === params.type) {
+ return ["Episode"];
+ }
+
+ if ("Programs" === params.type) {
+ return ["Program"];
+ }
+
+ return [];
+ };
+
+ ItemsView.prototype.getSettingsKey = function () {
var values = [];
values.push("items");
var params = this.params;
- return params.type ? values.push(params.type) : params.parentId && values.push(params.parentId), params.IsAiring && values.push("IsAiring"), params.IsMovie && values.push("IsMovie"), params.IsKids && values.push("IsKids"), params.IsSports && values.push("IsSports"), params.IsNews && values.push("IsNews"), params.IsSeries && values.push("IsSeries"), params.IsFavorite && values.push("IsFavorite"), params.genreId && values.push("Genre"), params.musicGenreId && values.push("MusicGenre"), params.studioId && values.push("Studio"), params.personId && values.push("Person"), params.parentId && values.push("Folder"), values.join("-")
- }, ItemsView
+
+ if (params.type) {
+ values.push(params.type);
+ } else if (params.parentId) {
+ values.push(params.parentId);
+ }
+
+ if (params.IsAiring) {
+ values.push("IsAiring");
+ }
+
+ if (params.IsMovie) {
+ values.push("IsMovie");
+ }
+
+ if (params.IsKids) {
+ values.push("IsKids");
+ }
+
+ if (params.IsSports) {
+ values.push("IsSports");
+ }
+
+ if (params.IsNews) {
+ values.push("IsNews");
+ }
+
+ if (params.IsSeries) {
+ values.push("IsSeries");
+ }
+
+ if (params.IsFavorite) {
+ values.push("IsFavorite");
+ }
+
+ if (params.genreId) {
+ values.push("Genre");
+ }
+
+ if (params.musicGenreId) {
+ values.push("MusicGenre");
+ }
+
+ if (params.studioId) {
+ values.push("Studio");
+ }
+
+ if (params.personId) {
+ values.push("Person");
+ }
+
+ if (params.parentId) {
+ values.push("Folder");
+ }
+
+ return values.join("-");
+ };
+
+ return ItemsView;
});
diff --git a/src/controllers/livetv/livetvchannels.js b/src/controllers/livetv/livetvchannels.js
index cc2eda505..3e310a17a 100644
--- a/src/controllers/livetv/livetvchannels.js
+++ b/src/controllers/livetv/livetvchannels.js
@@ -1,89 +1,119 @@
-define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "emby-itemscontainer"], function(cardBuilder, imageLoader, libraryBrowser, loading, events) {
+define(["cardBuilder", "imageLoader", "libraryBrowser", "loading", "events", "emby-itemscontainer"], function (cardBuilder, imageLoader, libraryBrowser, loading, events) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData() {
- return pageData || (pageData = {
- query: {
- StartIndex: 0,
- Limit: 100,
- Fields: "PrimaryImageAspectRatio"
- }
- }), pageData
+ if (!pageData) {
+ pageData = {
+ query: {
+ StartIndex: 0,
+ Limit: 100,
+ Fields: "PrimaryImageAspectRatio"
+ }
+ };
+ }
+
+ return pageData;
}
function getQuery() {
- return getPageData().query
+ return getPageData().query;
}
function getChannelsHtml(channels) {
return cardBuilder.getCardsHtml({
items: channels,
shape: "square",
- showTitle: !0,
- lazy: !0,
- cardLayout: !0,
- showDetailsMenu: !0,
- showCurrentProgram: !0,
- showCurrentProgramTime: !0
- })
+ showTitle: true,
+ lazy: true,
+ cardLayout: true,
+ showDetailsMenu: true,
+ showCurrentProgram: true,
+ showCurrentProgramTime: true
+ });
}
function renderChannels(context, result) {
function onNextPageClick() {
- if (isLoading) return;
- query.StartIndex += query.Limit, reloadItems(context)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex += query.Limit;
+ reloadItems(context);
}
function onPreviousPageClick() {
- if (isLoading) return;
- query.StartIndex -= query.Limit, reloadItems(context)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex -= query.Limit;
+ reloadItems(context);
}
+
var query = getQuery();
context.querySelector(".paging").innerHTML = libraryBrowser.getQueryPagingHtml({
startIndex: query.StartIndex,
limit: query.Limit,
totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- filterButton: !1
+ showLimit: false,
+ updatePageSizeSetting: false,
+ filterButton: false
});
- var html = getChannelsHtml(result.Items),
- elem = context.querySelector("#items");
- elem.innerHTML = html, imageLoader.lazyChildren(elem);
- var i, length, elems;
- 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)
+ var html = getChannelsHtml(result.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(".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",
serverId: ApiClient.serverId()
});
- events.on(filterDialog, "filterchange", function() {
- reloadItems(context)
- }), filterDialog.show()
- })
+ events.on(filterDialog, "filterchange", function () {
+ reloadItems(context);
+ });
+ filterDialog.show();
+ });
}
function reloadItems(context, save) {
loading.show();
isLoading = true;
- var query = getQuery(),
- apiClient = ApiClient;
- query.UserId = apiClient.getCurrentUserId(), apiClient.getLiveTvChannels(query).then(function(result) {
+ var query = getQuery();
+ var apiClient = ApiClient;
+ query.UserId = apiClient.getCurrentUserId();
+ apiClient.getLiveTvChannels(query).then(function (result) {
renderChannels(context, result);
loading.hide();
isLoading = false;
- })
+ });
}
- var pageData, self = this, isLoading = false;
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- showFilterMenu(tabContent)
- }), self.renderTab = function() {
- reloadItems(tabContent)
- }
- }
+
+ var pageData;
+ var self = this;
+ var isLoading = false;
+ tabContent.querySelector(".btnFilter").addEventListener("click", function () {
+ showFilterMenu(tabContent);
+ });
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ };
+ };
});
diff --git a/src/controllers/livetv/livetvguide.js b/src/controllers/livetv/livetvguide.js
index 3c8b3f410..f7c2f1baa 100644
--- a/src/controllers/livetv/livetvguide.js
+++ b/src/controllers/livetv/livetvguide.js
@@ -1,16 +1,29 @@
-define(["tvguide"], function(tvguide) {
+define(["tvguide"], function (tvguide) {
"use strict";
- return function(view, params, tabContent) {
- var guideInstance, self = this;
- self.renderTab = function() {
- guideInstance || (guideInstance = new tvguide({
- element: tabContent,
- serverId: ApiClient.serverId()
- }))
- }, self.onShow = function() {
- guideInstance && guideInstance.resume()
- }, self.onHide = function() {
- guideInstance && guideInstance.pause()
- }
- }
-});
\ No newline at end of file
+
+ return function (view, params, tabContent) {
+ var guideInstance;
+ var self = this;
+
+ self.renderTab = function () {
+ if (!guideInstance) {
+ guideInstance = new tvguide({
+ element: tabContent,
+ serverId: ApiClient.serverId()
+ });
+ }
+ };
+
+ self.onShow = function () {
+ if (guideInstance) {
+ guideInstance.resume();
+ }
+ };
+
+ self.onHide = function () {
+ if (guideInstance) {
+ guideInstance.pause();
+ }
+ };
+ };
+});
diff --git a/src/controllers/livetv/livetvrecordings.js b/src/controllers/livetv/livetvrecordings.js
index f82b150a2..ed3ae2408 100644
--- a/src/controllers/livetv/livetvrecordings.js
+++ b/src/controllers/livetv/livetvrecordings.js
@@ -1,69 +1,106 @@
-define(["layoutManager", "loading", "cardBuilder", "apphost", "imageLoader", "scripts/livetvcomponents", "listViewStyle", "emby-itemscontainer"], function(layoutManager, loading, cardBuilder, appHost, imageLoader) {
+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) {
- recordings.length ? elem.classList.remove("hide") : elem.classList.add("hide");
+ if (recordings.length) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
+ }
+
var recordingItems = elem.querySelector(".recordingItems");
- scrollX ? (recordingItems.classList.add("scrollX"), recordingItems.classList.add("hiddenScrollX"), recordingItems.classList.remove("vertical-wrap")) : (recordingItems.classList.remove("scrollX"), recordingItems.classList.remove("hiddenScrollX"), recordingItems.classList.add("vertical-wrap"));
+
+ if (scrollX) {
+ 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");
+ }
+
appHost.supports("imageanalysis");
recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
items: recordings,
shape: scrollX ? "autooverflow" : "auto",
defaultShape: scrollX ? "overflowBackdrop" : "backdrop",
- showTitle: !0,
- showParentTitle: !0,
- coverImage: !0,
- cardLayout: !1,
- centerText: !0,
+ showTitle: true,
+ showParentTitle: true,
+ coverImage: true,
+ cardLayout: false,
+ centerText: true,
allowBottomPadding: !scrollX,
preferThumb: "auto",
- overlayText: !1
- }, cardOptions || {})), imageLoader.lazyChildren(recordingItems)
+ overlayText: false
+ }, cardOptions || {}));
+ imageLoader.lazyChildren(recordingItems);
}
function renderLatestRecordings(context, promise) {
- promise.then(function(result) {
+ promise.then(function (result) {
renderRecordings(context.querySelector("#latestRecordings"), result.Items, {
- showYear: !0,
+ showYear: true,
lines: 2
- }, !1), loading.hide()
- })
+ }, false);
+ loading.hide();
+ });
}
function renderRecordingFolders(context, promise) {
- promise.then(function(result) {
+ promise.then(function (result) {
renderRecordings(context.querySelector("#recordingFolders"), result.Items, {
- showYear: !1,
- showParentTitle: !1
- }, !1)
- })
+ showYear: false,
+ showParentTitle: false
+ }, false);
+ });
}
function onMoreClick(e) {
- var type = this.getAttribute("data-type"),
- serverId = ApiClient.serverId();
+ var type = this.getAttribute("data-type");
+ var serverId = ApiClient.serverId();
+
switch (type) {
case "latest":
- Dashboard.navigate("list.html?type=Recordings&serverId=" + serverId)
+ Dashboard.navigate("list.html?type=Recordings&serverId=" + serverId);
}
}
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function enableFullRender() {
- return (new Date).getTime() - lastFullRender > 3e5
+ return new Date().getTime() - lastFullRender > 300000;
}
- var foldersPromise, latestPromise, self = this,
- lastFullRender = 0;
- for (var moreButtons = tabContent.querySelectorAll(".more"), i = 0, length = moreButtons.length; i < length; i++) moreButtons[i].addEventListener("click", onMoreClick);
- self.preRender = function() {
- enableFullRender() && (latestPromise = ApiClient.getLiveTvRecordings({
- UserId: Dashboard.getCurrentUserId(),
- Limit: 12,
- Fields: "CanDelete,PrimaryImageAspectRatio,BasicSyncInfo",
- EnableTotalRecordCount: !1,
- EnableImageTypes: "Primary,Thumb,Backdrop"
- }), foldersPromise = ApiClient.getRecordingFolders(Dashboard.getCurrentUserId()))
- }, self.renderTab = function() {
- enableFullRender() && (loading.show(), renderLatestRecordings(tabContent, latestPromise), renderRecordingFolders(tabContent, foldersPromise), lastFullRender = (new Date).getTime())
+
+ var foldersPromise;
+ var latestPromise;
+ var self = this;
+ var lastFullRender = 0;
+ var moreButtons = tabContent.querySelectorAll(".more");
+
+ for (var i = 0, length = moreButtons.length; i < length; i++) {
+ moreButtons[i].addEventListener("click", onMoreClick);
}
- }
-});
\ No newline at end of file
+
+ self.preRender = function () {
+ if (enableFullRender()) {
+ latestPromise = ApiClient.getLiveTvRecordings({
+ UserId: Dashboard.getCurrentUserId(),
+ Limit: 12,
+ Fields: "CanDelete,PrimaryImageAspectRatio,BasicSyncInfo",
+ EnableTotalRecordCount: false,
+ EnableImageTypes: "Primary,Thumb,Backdrop"
+ });
+ foldersPromise = ApiClient.getRecordingFolders(Dashboard.getCurrentUserId());
+ }
+ };
+
+ self.renderTab = function () {
+ if (enableFullRender()) {
+ loading.show();
+ renderLatestRecordings(tabContent, latestPromise);
+ renderRecordingFolders(tabContent, foldersPromise);
+ lastFullRender = new Date().getTime();
+ }
+ };
+ };
+});
diff --git a/src/controllers/livetv/livetvschedule.js b/src/controllers/livetv/livetvschedule.js
index 24ece42db..3ee56a2a9 100644
--- a/src/controllers/livetv/livetvschedule.js
+++ b/src/controllers/livetv/livetvschedule.js
@@ -1,27 +1,50 @@
-define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "scripts/livetvcomponents", "emby-button", "emby-itemscontainer"], function(layoutManager, cardBuilder, appHost, imageLoader, loading) {
+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
+ return !layoutManager.desktop;
}
function renderRecordings(elem, recordings, cardOptions) {
- recordings.length ? elem.classList.remove("hide") : elem.classList.add("hide");
+ if (recordings.length) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
+ }
+
var recordingItems = elem.querySelector(".recordingItems");
- enableScrollX() ? (recordingItems.classList.add("scrollX"), layoutManager.tv && recordingItems.classList.add("smoothScrollX"), recordingItems.classList.add("hiddenScrollX"), recordingItems.classList.remove("vertical-wrap")) : (recordingItems.classList.remove("scrollX"), recordingItems.classList.remove("smoothScrollX"), recordingItems.classList.remove("hiddenScrollX"), recordingItems.classList.add("vertical-wrap"));
- var supportsImageAnalysis = appHost.supports("imageanalysis"),
- cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
- cardLayout = !1, recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
+
+ if (enableScrollX()) {
+ recordingItems.classList.add("scrollX");
+
+ if (layoutManager.tv) {
+ recordingItems.classList.add("smoothScrollX");
+ }
+
+ 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");
+ }
+
+ var supportsImageAnalysis = appHost.supports("imageanalysis");
+ var cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
+ cardLayout = false;
+ recordingItems.innerHTML = cardBuilder.getCardsHtml(Object.assign({
items: recordings,
shape: enableScrollX() ? "autooverflow" : "auto",
- showTitle: !0,
- showParentTitle: !0,
- coverImage: !0,
+ showTitle: true,
+ showParentTitle: true,
+ coverImage: true,
cardLayout: cardLayout,
centerText: !cardLayout,
allowBottomPadding: !enableScrollX(),
preferThumb: "auto"
- }, cardOptions || {})), imageLoader.lazyChildren(recordingItems)
+ }, cardOptions || {}));
+ imageLoader.lazyChildren(recordingItems);
}
function getBackdropShape() {
@@ -29,52 +52,72 @@ define(["layoutManager", "cardBuilder", "apphost", "imageLoader", "loading", "sc
}
function renderActiveRecordings(context, promise) {
- promise.then(function(result) {
+ promise.then(function (result) {
renderRecordings(context.querySelector("#activeRecordings"), result.Items, {
shape: enableScrollX() ? "autooverflow" : "auto",
defaultShape: getBackdropShape(),
- showParentTitle: !1,
- showParentTitleOrTitle: !0,
- showTitle: !1,
- showAirTime: !0,
- showAirEndTime: !0,
- showChannelName: !0,
- coverImage: !0,
- overlayText: !1,
- overlayMoreButton: !0
- })
- })
+ showParentTitle: false,
+ showParentTitleOrTitle: true,
+ showTitle: false,
+ showAirTime: true,
+ showAirEndTime: true,
+ showChannelName: true,
+ coverImage: true,
+ overlayText: false,
+ overlayMoreButton: true
+ });
+ });
}
function renderTimers(context, timers, options) {
- LiveTvHelpers.getTimersHtml(timers, options).then(function(html) {
+ LiveTvHelpers.getTimersHtml(timers, options).then(function (html) {
var elem = context;
- html ? elem.classList.remove("hide") : elem.classList.add("hide"), elem.querySelector(".recordingItems").innerHTML = html, imageLoader.lazyChildren(elem)
- })
+
+ if (html) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
+ }
+
+ elem.querySelector(".recordingItems").innerHTML = html;
+ imageLoader.lazyChildren(elem);
+ });
}
function renderUpcomingRecordings(context, promise) {
- promise.then(function(result) {
- renderTimers(context.querySelector("#upcomingRecordings"), result.Items), loading.hide()
- })
+ promise.then(function (result) {
+ renderTimers(context.querySelector("#upcomingRecordings"), result.Items);
+ loading.hide();
+ });
}
- return function(view, params, tabContent) {
- var activeRecordingsPromise, upcomingRecordingsPromise, self = this;
- tabContent.querySelector("#upcomingRecordings .recordingItems").addEventListener("timercancelled", function() {
- self.preRender(), self.renderTab()
- }), self.preRender = function() {
+
+ return function (view, params, tabContent) {
+ var activeRecordingsPromise;
+ var upcomingRecordingsPromise;
+ var self = this;
+ tabContent.querySelector("#upcomingRecordings .recordingItems").addEventListener("timercancelled", function () {
+ self.preRender();
+ self.renderTab();
+ });
+
+ self.preRender = function () {
activeRecordingsPromise = ApiClient.getLiveTvRecordings({
UserId: Dashboard.getCurrentUserId(),
- IsInProgress: !0,
+ IsInProgress: true,
Fields: "CanDelete,PrimaryImageAspectRatio,BasicSyncInfo",
- EnableTotalRecordCount: !1,
+ EnableTotalRecordCount: false,
EnableImageTypes: "Primary,Thumb,Backdrop"
- }), upcomingRecordingsPromise = ApiClient.getLiveTvTimers({
- IsActive: !1,
- IsScheduled: !0
- })
- }, self.renderTab = function() {
- loading.show(), renderActiveRecordings(tabContent, activeRecordingsPromise), renderUpcomingRecordings(tabContent, upcomingRecordingsPromise)
- }
- }
-});
\ No newline at end of file
+ });
+ upcomingRecordingsPromise = ApiClient.getLiveTvTimers({
+ IsActive: false,
+ IsScheduled: true
+ });
+ };
+
+ self.renderTab = function () {
+ loading.show();
+ renderActiveRecordings(tabContent, activeRecordingsPromise);
+ renderUpcomingRecordings(tabContent, upcomingRecordingsPromise);
+ };
+ };
+});
diff --git a/src/controllers/livetv/livetvseriestimers.js b/src/controllers/livetv/livetvseriestimers.js
index 5acd9f326..9c95cfa91 100644
--- a/src/controllers/livetv/livetvseriestimers.js
+++ b/src/controllers/livetv/livetvseriestimers.js
@@ -1,4 +1,4 @@
-define(["datetime", "cardBuilder", "imageLoader", "apphost", "loading", "paper-icon-button-light", "emby-button"], function(datetime, cardBuilder, imageLoader, appHost, loading) {
+define(["datetime", "cardBuilder", "imageLoader", "apphost", "loading", "paper-icon-button-light", "emby-button"], function (datetime, cardBuilder, imageLoader, appHost, loading) {
"use strict";
function renderTimers(context, timers) {
@@ -8,36 +8,44 @@ define(["datetime", "cardBuilder", "imageLoader", "apphost", "loading", "paper-i
items: timers,
shape: "auto",
defaultShape: "portrait",
- showTitle: !0,
- cardLayout: !1,
+ showTitle: true,
+ cardLayout: false,
preferThumb: "auto",
- coverImage: !0,
- overlayText: !1,
- showSeriesTimerTime: !0,
- showSeriesTimerChannel: !0,
- centerText: !0,
- overlayMoreButton: !0,
+ coverImage: true,
+ overlayText: false,
+ showSeriesTimerTime: true,
+ showSeriesTimerChannel: true,
+ centerText: true,
+ overlayMoreButton: true,
lines: 3
});
var elem = context.querySelector("#items");
- elem.innerHTML = html, imageLoader.lazyChildren(elem), loading.hide()
+ elem.innerHTML = html;
+ imageLoader.lazyChildren(elem);
+ loading.hide();
}
function reload(context, promise) {
- loading.show(), promise.then(function(result) {
- renderTimers(context, result.Items)
- })
+ loading.show();
+ promise.then(function (result) {
+ renderTimers(context, result.Items);
+ });
}
+
var query = {
SortBy: "SortName",
SortOrder: "Ascending"
};
- return function(view, params, tabContent) {
- var timersPromise, self = this;
- self.preRender = function() {
- timersPromise = ApiClient.getLiveTvSeriesTimers(query)
- }, self.renderTab = function() {
- reload(tabContent, timersPromise)
- }
- }
-});
\ No newline at end of file
+ return function (view, params, tabContent) {
+ var timersPromise;
+ var self = this;
+
+ self.preRender = function () {
+ timersPromise = ApiClient.getLiveTvSeriesTimers(query);
+ };
+
+ self.renderTab = function () {
+ reload(tabContent, timersPromise);
+ };
+ };
+});
diff --git a/src/controllers/livetv/livetvsuggested.js b/src/controllers/livetv/livetvsuggested.js
index 4fc51467e..509b7f521 100644
--- a/src/controllers/livetv/livetvsuggested.js
+++ b/src/controllers/livetv/livetvsuggested.js
@@ -23,6 +23,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
if (enableScrollX()) {
return 12;
}
+
return 9;
}
@@ -150,15 +151,22 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
}
function getTabs() {
- return [
- { name: globalize.translate("Programs") },
- { name: globalize.translate("TabGuide") },
- { name: globalize.translate("TabChannels") },
- { name: globalize.translate("TabRecordings") },
- { name: globalize.translate("HeaderSchedule") },
- { name: globalize.translate("TabSeries") },
- { name: globalize.translate("ButtonSearch"), cssClass: "searchTabButton" }
- ];
+ return [{
+ name: globalize.translate("Programs")
+ }, {
+ name: globalize.translate("TabGuide")
+ }, {
+ name: globalize.translate("TabChannels")
+ }, {
+ name: globalize.translate("TabRecordings")
+ }, {
+ name: globalize.translate("HeaderSchedule")
+ }, {
+ name: globalize.translate("TabSeries")
+ }, {
+ name: globalize.translate("ButtonSearch"),
+ cssClass: "searchTabButton"
+ }];
}
function setScrollClasses(elem, scrollX) {
@@ -183,6 +191,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
if (userSettings.get("landing-" + folderId) === "guide") {
return 1;
}
+
return 0;
}
@@ -220,21 +229,27 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
switch (index) {
case 0:
break;
+
case 1:
depends.push("controllers/livetv/livetvguide");
break;
+
case 2:
depends.push("controllers/livetv/livetvchannels");
break;
+
case 3:
depends.push("controllers/livetv/livetvrecordings");
break;
+
case 4:
depends.push("controllers/livetv/livetvschedule");
break;
+
case 5:
depends.push("controllers/livetv/livetvseriestimers");
break;
+
case 6:
depends.push("scripts/searchtab");
}
@@ -251,6 +266,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
if (!controller) {
tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+
if (0 === index) {
controller = self;
} else if (6 === index) {
@@ -260,6 +276,7 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
} else {
controller = new controllerFactory(view, params, tabContent);
}
+
tabControllers[index] = controller;
if (controller.initTab) {
@@ -347,15 +364,18 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
});
view.addEventListener("viewshow", function (evt) {
isViewRestored = evt.detail.isRestored;
+
if (!isViewRestored) {
mainTabsManager.selectedTabIndex(initialTabIndex);
}
+
inputManager.on(window, onInputCommand);
});
- view.addEventListener("viewbeforehide", function (e__u) {
+ view.addEventListener("viewbeforehide", function (e) {
if (currentTabController && currentTabController.onHide) {
currentTabController.onHide();
}
+
inputManager.off(window, onInputCommand);
});
view.addEventListener("viewdestroy", function (evt) {
diff --git a/src/controllers/livetvguideprovider.js b/src/controllers/livetvguideprovider.js
index 40617cdb9..a58917f22 100644
--- a/src/controllers/livetvguideprovider.js
+++ b/src/controllers/livetvguideprovider.js
@@ -1,26 +1,30 @@
-define(["events", "loading"], function(events, loading) {
+define(["events", "loading"], function (events, loading) {
"use strict";
function onListingsSubmitted() {
- Dashboard.navigate("livetvstatus.html")
+ Dashboard.navigate("livetvstatus.html");
}
function init(page, type, providerId) {
var url = "components/tvproviders/" + type + ".js";
- require([url], function(factory) {
+
+ require([url], function (factory) {
var instance = new factory(page, providerId, {});
- events.on(instance, "submitted", onListingsSubmitted), instance.init()
- })
+ 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), init(page, type, providerId)
- })
+ 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)
- })
-});
\ No newline at end of file
+ loadTemplate(this, getParameterByName("type"), providerId);
+ });
+});
diff --git a/src/controllers/livetvsettings.js b/src/controllers/livetvsettings.js
index 422257e33..2b11071c7 100644
--- a/src/controllers/livetvsettings.js
+++ b/src/controllers/livetvsettings.js
@@ -1,79 +1,127 @@
-define(["jQuery", "loading", "fnchecked", "emby-button"], function($, loading) {
+define(["jQuery", "loading", "fnchecked", "emby-button"], function ($, loading) {
"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 || "", loading.hide()
+ $(".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;
- return ApiClient.getNamedConfiguration("livetv").then(function(config) {
+ ApiClient.getNamedConfiguration("livetv").then(function (config) {
config.GuideDays = $("#selectGuideDays", form).val() || null;
- var recordingPath = form.querySelector("#txtRecordingPath").value || null,
- movieRecordingPath = form.querySelector("#txtMovieRecordingPath").value || null,
- seriesRecordingPath = form.querySelector("#txtSeriesRecordingPath").value || null,
- 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() {
- Dashboard.processServerConfigurationUpdateResult(), showSaveMessage(recordingPathChanged)
- })
- }), !1
+ 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 () {
+ Dashboard.processServerConfigurationUpdateResult();
+ showSaveMessage(recordingPathChanged);
+ });
+ });
+ return false;
}
function showSaveMessage(recordingPathChanged) {
var msg = "";
- recordingPathChanged && (msg += Globalize.translate("RecordingPathChangeMessage")), msg && require(["alert"], function(alert) {
- alert(msg)
- })
+
+ if (recordingPathChanged) {
+ msg += Globalize.translate("RecordingPathChangeMessage");
+ }
+
+ if (msg) {
+ 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) {
- var picker = new 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) {
- path && $("#txtRecordingPath", page).val(path), picker.close()
+ callback: function (path) {
+ if (path) {
+ $("#txtRecordingPath", page).val(path);
+ }
+
+ picker.close();
},
- validateWriteable: !0
- })
- })
- }), $("#btnSelectMovieRecordingPath", page).on("click.selectDirectory", function() {
- require(["directorybrowser"], function(directoryBrowser) {
- var picker = new directoryBrowser;
+ validateWriteable: true
+ });
+ });
+ });
+ $("#btnSelectMovieRecordingPath", page).on("click.selectDirectory", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- callback: function(path) {
- path && $("#txtMovieRecordingPath", page).val(path), picker.close()
+ callback: function (path) {
+ if (path) {
+ $("#txtMovieRecordingPath", page).val(path);
+ }
+
+ picker.close();
},
- validateWriteable: !0
- })
- })
- }), $("#btnSelectSeriesRecordingPath", page).on("click.selectDirectory", function() {
- require(["directorybrowser"], function(directoryBrowser) {
- var picker = new directoryBrowser;
+ validateWriteable: true
+ });
+ });
+ });
+ $("#btnSelectSeriesRecordingPath", page).on("click.selectDirectory", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- callback: function(path) {
- path && $("#txtSeriesRecordingPath", page).val(path), picker.close()
+ callback: function (path) {
+ if (path) {
+ $("#txtSeriesRecordingPath", page).val(path);
+ }
+
+ picker.close();
},
- validateWriteable: !0
- })
- })
- }), $("#btnSelectPostProcessorPath", page).on("click.selectDirectory", function() {
- require(["directorybrowser"], function(directoryBrowser) {
- var picker = new directoryBrowser;
+ validateWriteable: true
+ });
+ });
+ });
+ $("#btnSelectPostProcessorPath", page).on("click.selectDirectory", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- includeFiles: !0,
- callback: function(path) {
- path && $("#txtPostProcessor", page).val(path), picker.close()
+ includeFiles: true,
+ callback: function (path) {
+ if (path) {
+ $("#txtPostProcessor", page).val(path);
+ }
+
+ picker.close();
}
- })
- })
- })
- }).on("pageshow", "#liveTvSettingsPage", function() {
+ });
+ });
+ });
+ }).on("pageshow", "#liveTvSettingsPage", function () {
loading.show();
var page = this;
- ApiClient.getNamedConfiguration("livetv").then(function(config) {
- loadPage(page, config)
- })
- })
-});
\ No newline at end of file
+ ApiClient.getNamedConfiguration("livetv").then(function (config) {
+ loadPage(page, config);
+ });
+ });
+});
diff --git a/src/controllers/livetvstatus.js b/src/controllers/livetvstatus.js
index d268be299..03cad1a90 100644
--- a/src/controllers/livetvstatus.js
+++ b/src/controllers/livetvstatus.js
@@ -1,42 +1,75 @@
-define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layoutManager", "loading", "listViewStyle", "flexStyles", "emby-itemscontainer", "cardStyle", "material-icons", "emby-button"], function($, globalize, taskButton, dom, libraryMenu, layoutManager, loading) {
+define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layoutManager", "loading", "listViewStyle", "flexStyles", "emby-itemscontainer", "cardStyle", "material-icons", "emby-button"], function ($, globalize, taskButton, dom, libraryMenu, layoutManager, loading) {
"use strict";
function getDeviceHtml(device) {
- var padderClass, html = "",
- cssClass = "card scalableCard",
- cardBoxCssClass = "cardBox visualCardBox";
- return cssClass += " backdropCard backdropCard-scalable", padderClass = "cardPadder-backdrop", layoutManager.tv && (cssClass += " card-focusscale", cardBoxCssClass += " cardBox-focustransform"), cardBoxCssClass += " card-focuscontent", html += '
', html += '
', html += '
', html += '
', html += '
', html += '
dvr
', html += "
", html += "
", html += '", html += "
", html += "
"
+ var padderClass;
+ var html = "";
+ var cssClass = "card scalableCard";
+ var cardBoxCssClass = "cardBox visualCardBox";
+ cssClass += " backdropCard backdropCard-scalable";
+ padderClass = "cardPadder-backdrop";
+
+ if (layoutManager.tv) {
+ cssClass += " card-focusscale";
+ cardBoxCssClass += " cardBox-focustransform";
+ }
+
+ cardBoxCssClass += " card-focuscontent";
+ html += '
';
+ html += '
';
+ html += '
';
+ html += '
';
+ html += '
';
+ html += '
dvr
';
+ html += "
";
+ html += "
";
+ html += '";
+ html += "
";
+ return html += "
";
}
function renderDevices(page, devices) {
var html = devices.map(getDeviceHtml).join("");
- page.querySelector(".devicesList").innerHTML = html
+ page.querySelector(".devicesList").innerHTML = html;
}
function deleteDevice(page, id) {
var message = globalize.translate("MessageConfirmDeleteTunerDevice");
- require(["confirm"], function(confirm) {
- confirm(message, globalize.translate("HeaderDeleteDevice")).then(function() {
- loading.show(), ApiClient.ajax({
+
+ require(["confirm"], function (confirm) {
+ confirm(message, globalize.translate("HeaderDeleteDevice")).then(function () {
+ loading.show();
+ ApiClient.ajax({
type: "DELETE",
url: ApiClient.getUrl("LiveTv/TunerHosts", {
Id: id
})
- }).then(function() {
- reload(page)
- })
- })
- })
+ }).then(function () {
+ reload(page);
+ });
+ });
+ });
}
function reload(page) {
- loading.show(), ApiClient.getNamedConfiguration("livetv").then(function(config) {
- renderDevices(page, config.TunerHosts), renderProviders(page, config.ListingProviders)
- }), loading.hide()
+ loading.show();
+ ApiClient.getNamedConfiguration("livetv").then(function (config) {
+ renderDevices(page, config.TunerHosts);
+ renderProviders(page, config.ListingProviders);
+ });
+ loading.hide();
}
function submitAddDeviceForm(page) {
- page.querySelector(".dlgAddDevice").close(), loading.show(), ApiClient.ajax({
+ page.querySelector(".dlgAddDevice").close();
+ loading.show();
+ ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("LiveTv/TunerHosts"),
data: JSON.stringify({
@@ -44,30 +77,47 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
Url: $("#txtDevicePath", page).val()
}),
contentType: "application/json"
- }).then(function() {
- reload(page)
- }, function() {
+ }).then(function () {
+ reload(page);
+ }, function () {
Dashboard.alert({
message: globalize.translate("ErrorAddingTunerDevice")
- })
- })
+ });
+ });
}
function renderProviders(page, providers) {
var html = "";
+
if (providers.length) {
html += '
';
+
for (var i = 0, length = providers.length; i < length; i++) {
var provider = providers[i];
- html += '
', html += '
dvr ', html += '
", html += '
more_horiz ', html += "
"
+ html += '
';
+ html += '
dvr ';
+ html += '
";
+ html += '
more_horiz ';
+ html += "
";
}
- html += "
"
+
+ html += "
";
}
+
var elem = $(".providerList", page).html(html);
- $(".btnOptions", elem).on("click", function() {
+ $(".btnOptions", elem).on("click", function () {
var id = this.getAttribute("data-id");
- showProviderOptions(page, id, this)
- })
+ showProviderOptions(page, id, this);
+ });
}
function showProviderOptions(page, providerId, button) {
@@ -75,64 +125,74 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
items.push({
name: globalize.translate("ButtonDelete"),
id: "delete"
- }), items.push({
+ });
+ items.push({
name: globalize.translate("MapChannels"),
id: "map"
- }), require(["actionsheet"], function(actionsheet) {
+ });
+
+ require(["actionsheet"], function (actionsheet) {
actionsheet.show({
items: items,
positionTo: button
- }).then(function(id) {
+ }).then(function (id) {
switch (id) {
case "delete":
deleteProvider(page, providerId);
break;
+
case "map":
- mapChannels(page, providerId)
+ mapChannels(page, providerId);
}
- })
- })
+ });
+ });
}
function mapChannels(page, providerId) {
- require(["components/channelmapper/channelmapper"], function(channelmapper) {
+ require(["components/channelmapper/channelmapper"], function (channelmapper) {
new channelmapper({
serverId: ApiClient.serverInfo().Id,
providerId: providerId
- }).show()
- })
+ }).show();
+ });
}
function deleteProvider(page, id) {
var message = globalize.translate("MessageConfirmDeleteGuideProvider");
- require(["confirm"], function(confirm) {
- confirm(message, globalize.translate("HeaderDeleteProvider")).then(function() {
- loading.show(), ApiClient.ajax({
+
+ require(["confirm"], function (confirm) {
+ confirm(message, globalize.translate("HeaderDeleteProvider")).then(function () {
+ loading.show();
+ ApiClient.ajax({
type: "DELETE",
url: ApiClient.getUrl("LiveTv/ListingProviders", {
Id: id
})
- }).then(function() {
- reload(page)
- }, function() {
- reload(page)
- })
- })
- })
+ }).then(function () {
+ reload(page);
+ }, function () {
+ reload(page);
+ });
+ });
+ });
}
function getTunerName(providerId) {
switch (providerId = providerId.toLowerCase()) {
case "m3u":
return "M3U";
+
case "hdhomerun":
return "HDHomerun";
+
case "hauppauge":
return "Hauppauge";
+
case "satip":
return "DVB";
+
default:
- return "Unknown"
+ return "Unknown";
}
}
@@ -140,12 +200,15 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
switch (providerId = providerId.toLowerCase()) {
case "schedulesdirect":
return "Schedules Direct";
+
case "xmltv":
return "Xml TV";
+
case "emby":
return "Emby Guide";
+
default:
- return "Unknown"
+ return "Unknown";
}
}
@@ -153,10 +216,12 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
switch (providerId = providerId.toLowerCase()) {
case "xmltv":
return "livetvguideprovider.html?type=xmltv";
+
case "schedulesdirect":
return "livetvguideprovider.html?type=schedulesdirect";
+
case "emby":
- return "livetvguideprovider.html?type=emby"
+ return "livetvguideprovider.html?type=emby";
}
}
@@ -165,22 +230,25 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
menuItems.push({
name: "Schedules Direct",
id: "SchedulesDirect"
- }), menuItems.push({
+ });
+ menuItems.push({
name: "Xml TV",
id: "xmltv"
- }), require(["actionsheet"], function(actionsheet) {
+ });
+
+ require(["actionsheet"], function (actionsheet) {
actionsheet.show({
items: menuItems,
positionTo: button,
- callback: function(id) {
- Dashboard.navigate(getProviderConfigurationUrl(id))
+ callback: function (id) {
+ Dashboard.navigate(getProviderConfigurationUrl(id));
}
- })
- })
+ });
+ });
}
function addDevice(button) {
- Dashboard.navigate("livetvtuner.html")
+ Dashboard.navigate("livetvtuner.html");
}
function showDeviceMenu(button, tunerDeviceId) {
@@ -188,57 +256,73 @@ define(["jQuery", "globalize", "scripts/taskbutton", "dom", "libraryMenu", "layo
items.push({
name: globalize.translate("ButtonDelete"),
id: "delete"
- }), items.push({
+ });
+ items.push({
name: globalize.translate("ButtonEdit"),
id: "edit"
- }), require(["actionsheet"], function(actionsheet) {
+ });
+
+ require(["actionsheet"], function (actionsheet) {
actionsheet.show({
items: items,
positionTo: button
- }).then(function(id) {
+ }).then(function (id) {
switch (id) {
case "delete":
deleteDevice(dom.parentWithClass(button, "page"), tunerDeviceId);
break;
+
case "edit":
- Dashboard.navigate("livetvtuner.html?id=" + tunerDeviceId)
+ Dashboard.navigate("livetvtuner.html?id=" + tunerDeviceId);
}
- })
- })
+ });
+ });
}
function onDevicesListClick(e) {
var card = dom.parentWithClass(e.target, "card");
+
if (card) {
- var id = card.getAttribute("data-id"),
- btnCardOptions = dom.parentWithClass(e.target, "btnCardOptions");
- btnCardOptions ? showDeviceMenu(btnCardOptions, id) : Dashboard.navigate("livetvtuner.html?id=" + id)
+ 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);
+ }
}
}
- $(document).on("pageinit", "#liveTvStatusPage", function() {
+
+ $(document).on("pageinit", "#liveTvStatusPage", function () {
var page = this;
- $(".btnAddDevice", page).on("click", function() {
- addDevice(this)
- }), $(".formAddDevice", page).on("submit", function() {
- return submitAddDeviceForm(page), !1
- }), $(".btnAddProvider", page).on("click", function() {
- addProvider(this)
- }), page.querySelector(".devicesList").addEventListener("click", onDevicesListClick)
- }).on("pageshow", "#liveTvStatusPage", function() {
+ $(".btnAddDevice", page).on("click", function () {
+ addDevice(this);
+ });
+ $(".formAddDevice", page).on("submit", function () {
+ submitAddDeviceForm(page);
+ return false;
+ });
+ $(".btnAddProvider", page).on("click", function () {
+ addProvider(this);
+ });
+ page.querySelector(".devicesList").addEventListener("click", onDevicesListClick);
+ }).on("pageshow", "#liveTvStatusPage", function () {
var page = this;
- reload(page), taskButton({
+ reload(page);
+ taskButton({
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")
- })
- })
+ });
+ });
});
diff --git a/src/controllers/livetvtuner.js b/src/controllers/livetvtuner.js
index 43082e684..55a86d4be 100644
--- a/src/controllers/livetvtuner.js
+++ b/src/controllers/livetvtuner.js
@@ -1,4 +1,4 @@
-define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button", "emby-checkbox", "emby-select"], function(globalize, loading, libraryMenu, dom) {
+define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button", "emby-checkbox", "emby-select"], function (globalize, loading, libraryMenu, dom) {
"use strict";
function isM3uVariant(type) {
@@ -6,17 +6,16 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
}
function fillTypes(view, currentId) {
- return ApiClient.getJSON(ApiClient.getUrl("LiveTv/TunerHosts/Types")).then(function(types) {
+ return ApiClient.getJSON(ApiClient.getUrl("LiveTv/TunerHosts/Types")).then(function (types) {
var selectType = view.querySelector(".selectType");
var html = "";
- html += types.map(function(tuner) {
+ html += types.map(function (tuner) {
return '
' + tuner.Name + " ";
}).join("");
html += '
';
html += globalize.translate("TabOther");
html += " ";
selectType.innerHTML = html;
-
selectType.disabled = null != currentId;
selectType.value = "";
onTypeChange.call(selectType);
@@ -27,9 +26,10 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
view.querySelector(".txtDevicePath").value = "";
view.querySelector(".chkFavorite").checked = false;
view.querySelector(".txtDevicePath").value = "";
+
if (providerId) {
- ApiClient.getNamedConfiguration("livetv").then(function(config) {
- var info = config.TunerHosts.filter(function(i) {
+ ApiClient.getNamedConfiguration("livetv").then(function (config) {
+ var info = config.TunerHosts.filter(function (i) {
return i.Id === providerId;
})[0];
fillTunerHostInfo(view, info);
@@ -40,9 +40,11 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
function fillTunerHostInfo(view, info) {
var selectType = view.querySelector(".selectType");
var type = info.Type || "";
+
if (info.Source && isM3uVariant(info.Source)) {
type = info.Source;
}
+
selectType.value = type;
onTypeChange.call(selectType);
view.querySelector(".txtDevicePath").value = info.Url || "";
@@ -68,76 +70,164 @@ define(["globalize", "loading", "libraryMenu", "dom", "emby-input", "emby-button
AllowHWTranscoding: page.querySelector(".chkTranscode").checked,
EnableStreamLooping: page.querySelector(".chkStreamLoop").checked
};
- isM3uVariant(info.Type) && (info.Source = info.Type, info.Type = "m3u");
+
+ if (isM3uVariant(info.Type)) {
+ info.Source = info.Type;
+ info.Type = "m3u";
+ }
+
var id = getParameterByName("id");
- id && (info.Id = id);
+
+ if (id) {
+ info.Id = id;
+ }
+
info.Id;
ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("LiveTv/TunerHosts"),
data: JSON.stringify(info),
contentType: "application/json"
- }).then(function(result) {
- Dashboard.processServerConfigurationUpdateResult(), Dashboard.navigate("livetvstatus.html")
- }, function() {
- loading.hide(), Dashboard.alert({
+ }).then(function (result) {
+ Dashboard.processServerConfigurationUpdateResult();
+ Dashboard.navigate("livetvstatus.html");
+ }, function () {
+ loading.hide();
+ Dashboard.alert({
message: globalize.translate("ErrorSavingTvProvider")
- })
- })
+ });
+ });
}
function getRequirePromise(deps) {
- return new Promise(function(resolve, reject) {
- require(deps, resolve)
- })
+ return new Promise(function (resolve, reject) {
+ require(deps, resolve);
+ });
}
function getDetectedDevice() {
- return getRequirePromise(["tunerPicker"]).then(function(tunerPicker) {
- return (new tunerPicker).show({
+ return getRequirePromise(["tunerPicker"]).then(function (tunerPicker) {
+ return new tunerPicker().show({
serverId: ApiClient.serverId()
- })
- })
+ });
+ });
}
function onTypeChange() {
- var value = this.value,
- view = dom.parentWithClass(this, "page"),
- mayIncludeUnsupportedDrmChannels = "hdhomerun" === value,
- supportsTranscoding = "hdhomerun" === value,
- supportsFavorites = "hdhomerun" === value,
- supportsTunerIpAddress = "hdhomerun" === value,
- supportsTunerFileOrUrl = "m3u" === value,
- supportsStreamLooping = "m3u" === value,
- supportsTunerCount = "m3u" === value,
- supportsUserAgent = "m3u" === value,
- suppportsSubmit = "other" !== value,
- supportsSelectablePath = supportsTunerFileOrUrl,
- txtDevicePath = view.querySelector(".txtDevicePath");
- supportsTunerIpAddress ? (txtDevicePath.label(globalize.translate("LabelTunerIpAddress")), view.querySelector(".fldPath").classList.remove("hide")) : supportsTunerFileOrUrl ? (txtDevicePath.label(globalize.translate("LabelFileOrUrl")), view.querySelector(".fldPath").classList.remove("hide")) : view.querySelector(".fldPath").classList.add("hide"), supportsSelectablePath ? (view.querySelector(".btnSelectPath").classList.remove("hide"), view.querySelector(".txtDevicePath").setAttribute("required", "required")) : (view.querySelector(".btnSelectPath").classList.add("hide"), view.querySelector(".txtDevicePath").removeAttribute("required")), supportsUserAgent ? view.querySelector(".fldUserAgent").classList.remove("hide") : view.querySelector(".fldUserAgent").classList.add("hide"), supportsFavorites ? view.querySelector(".fldFavorites").classList.remove("hide") : view.querySelector(".fldFavorites").classList.add("hide"), supportsTranscoding ? view.querySelector(".fldTranscode").classList.remove("hide") : view.querySelector(".fldTranscode").classList.add("hide"), supportsStreamLooping ? view.querySelector(".fldStreamLoop").classList.remove("hide") : view.querySelector(".fldStreamLoop").classList.add("hide"), supportsTunerCount ? (view.querySelector(".fldTunerCount").classList.remove("hide"), view.querySelector(".txtTunerCount").setAttribute("required", "required")) : (view.querySelector(".fldTunerCount").classList.add("hide"), view.querySelector(".txtTunerCount").removeAttribute("required")), mayIncludeUnsupportedDrmChannels ? view.querySelector(".drmMessage").classList.remove("hide") : view.querySelector(".drmMessage").classList.add("hide"), suppportsSubmit ? view.querySelector(".button-submit").classList.remove("hide") : view.querySelector(".button-submit").classList.add("hide")
+ 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 supportsSelectablePath = supportsTunerFileOrUrl;
+ var txtDevicePath = view.querySelector(".txtDevicePath");
+
+ if (supportsTunerIpAddress) {
+ 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");
+ } else {
+ view.querySelector(".fldPath").classList.add("hide");
+ }
+
+ if (supportsSelectablePath) {
+ view.querySelector(".btnSelectPath").classList.remove("hide");
+ view.querySelector(".txtDevicePath").setAttribute("required", "required");
+ } else {
+ view.querySelector(".btnSelectPath").classList.add("hide");
+ view.querySelector(".txtDevicePath").removeAttribute("required");
+ }
+
+ if (supportsUserAgent) {
+ view.querySelector(".fldUserAgent").classList.remove("hide");
+ } else {
+ view.querySelector(".fldUserAgent").classList.add("hide");
+ }
+
+ if (supportsFavorites) {
+ view.querySelector(".fldFavorites").classList.remove("hide");
+ } else {
+ view.querySelector(".fldFavorites").classList.add("hide");
+ }
+
+ if (supportsTranscoding) {
+ view.querySelector(".fldTranscode").classList.remove("hide");
+ } else {
+ view.querySelector(".fldTranscode").classList.add("hide");
+ }
+
+ if (supportsStreamLooping) {
+ view.querySelector(".fldStreamLoop").classList.remove("hide");
+ } else {
+ view.querySelector(".fldStreamLoop").classList.add("hide");
+ }
+
+ if (supportsTunerCount) {
+ view.querySelector(".fldTunerCount").classList.remove("hide");
+ view.querySelector(".txtTunerCount").setAttribute("required", "required");
+ } else {
+ view.querySelector(".fldTunerCount").classList.add("hide");
+ view.querySelector(".txtTunerCount").removeAttribute("required");
+ }
+
+ if (mayIncludeUnsupportedDrmChannels) {
+ view.querySelector(".drmMessage").classList.remove("hide");
+ } else {
+ view.querySelector(".drmMessage").classList.add("hide");
+ }
+
+ if (suppportsSubmit) {
+ view.querySelector(".button-submit").classList.remove("hide");
+ } else {
+ view.querySelector(".button-submit").classList.add("hide");
+ }
}
- return function(view, params) {
- params.id || view.querySelector(".btnDetect").classList.remove("hide"), view.addEventListener("viewshow", function() {
+
+ return function (view, params) {
+ if (!params.id) {
+ view.querySelector(".btnDetect").classList.remove("hide");
+ }
+
+ view.addEventListener("viewshow", function () {
var currentId = params.id;
- fillTypes(view, currentId).then(function() {
- reload(view, currentId)
- })
- }), view.querySelector("form").addEventListener("submit", function(e) {
- return submitForm(view), e.preventDefault(), e.stopPropagation(), !1
- }), 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) {
- var picker = new directoryBrowser;
+ fillTypes(view, currentId).then(function () {
+ reload(view, currentId);
+ });
+ });
+ 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 () {
+ getDetectedDevice().then(function (info) {
+ fillTunerHostInfo(view, info);
+ });
+ });
+ view.querySelector(".btnSelectPath").addEventListener("click", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- includeFiles: !0,
- callback: function(path) {
- path && (view.querySelector(".txtDevicePath").value = path), picker.close()
+ includeFiles: true,
+ callback: function (path) {
+ if (path) {
+ view.querySelector(".txtDevicePath").value = path;
+ }
+
+ picker.close();
}
- })
- })
- })
- }
-});
\ No newline at end of file
+ });
+ });
+ });
+ };
+});
diff --git a/src/controllers/metadatanfo.js b/src/controllers/metadatanfo.js
index 1de17ae83..20049837d 100644
--- a/src/controllers/metadatanfo.js
+++ b/src/controllers/metadatanfo.js
@@ -1,30 +1,45 @@
-define(["jQuery", "loading", "libraryMenu"], function($, loading, libraryMenu) {
+define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu) {
"use strict";
function loadPage(page, config, users) {
var html = '
' + Globalize.translate("OptionNone") + " ";
- html += users.map(function(user) {
- return '
' + user.Name + " "
- }).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()
+ html += users.map(function (user) {
+ return '
' + user.Name + " ";
+ }).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();
}
function onSubmit() {
loading.show();
var form = this;
- return 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, ApiClient.updateNamedConfiguration(metadataKey, config).then(function() {
- Dashboard.processServerConfigurationUpdateResult(), showConfirmMessage(config)
- })
- }), !1
+ 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;
+ ApiClient.updateNamedConfiguration(metadataKey, config).then(function () {
+ Dashboard.processServerConfigurationUpdateResult();
+ showConfirmMessage(config);
+ });
+ });
+ return false;
}
function showConfirmMessage(config) {
var msg = [];
- msg.push(Globalize.translate("MetadataSettingChangeHelp")), require(["alert"], function(alert) {
+ msg.push(Globalize.translate("MetadataSettingChangeHelp"));
+
+ require(["alert"], function (alert) {
alert({
text: msg.join("
")
- })
- })
+ });
+ });
}
function getTabs() {
@@ -40,19 +55,20 @@ define(["jQuery", "loading", "libraryMenu"], function($, loading, libraryMenu) {
}, {
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), loading.show();
- var page = this,
- promise1 = ApiClient.getUsers(),
- promise2 = ApiClient.getNamedConfiguration(metadataKey);
- Promise.all([promise1, promise2]).then(function(responses) {
- loadPage(page, responses[1], responses[0])
- })
- })
-});
\ No newline at end of file
+ $(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();
+ var promise2 = ApiClient.getNamedConfiguration(metadataKey);
+ Promise.all([promise1, promise2]).then(function (responses) {
+ loadPage(page, responses[1], responses[0]);
+ });
+ });
+});
diff --git a/src/controllers/movies/moviecollections.js b/src/controllers/movies/moviecollections.js
index 1e83f11f3..d5bd96d34 100644
--- a/src/controllers/movies/moviecollections.js
+++ b/src/controllers/movies/moviecollections.js
@@ -1,9 +1,11 @@
-define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function(loading, events, libraryBrowser, imageLoader, listView, cardBuilder, appHost) {
+define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder, appHost) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData(context) {
- var key = getSavedQueryKey(context),
- pageData = data[key];
+ var key = getSavedQueryKey(context);
+ var pageData = data[key];
+
if (!pageData) {
pageData = data[key] = {
query: {
@@ -22,153 +24,223 @@ define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardB
pageData.query.ParentId = params.topParentId;
libraryBrowser.loadSavedQueryValues(key, pageData.query);
}
+
return pageData;
}
function getQuery(context) {
- return getPageData(context).query
+ return getPageData(context).query;
}
function getSavedQueryKey(context) {
- return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey("moviecollections")), context.savedQueryKey
+ if (!context.savedQueryKey) {
+ context.savedQueryKey = libraryBrowser.getSavedQueryKey("moviecollections");
+ }
+
+ return context.savedQueryKey;
}
function onViewStyleChange() {
- var viewStyle = self.getCurrentViewStyle(),
- itemsContainer = tabContent.querySelector(".itemsContainer");
- "List" == viewStyle ? (itemsContainer.classList.add("vertical-list"), itemsContainer.classList.remove("vertical-wrap")) : (itemsContainer.classList.remove("vertical-list"), itemsContainer.classList.add("vertical-wrap")), itemsContainer.innerHTML = ""
+ var viewStyle = self.getCurrentViewStyle();
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+
+ 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.innerHTML = "";
}
function reloadItems(page) {
loading.show();
isLoading = true;
var query = getQuery(page);
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function(result) {
+ ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
- query.StartIndex += query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex += query.Limit;
+ reloadItems(tabContent);
}
function onPreviousPageClick() {
- if (isLoading) return;
- query.StartIndex -= query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex -= query.Limit;
+ reloadItems(tabContent);
}
+
window.scrollTo(0, 0);
- var html, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- viewStyle = self.getCurrentViewStyle();
- html = "Thumb" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "movies",
- overlayPlayButton: !0,
- centerText: !0,
- showTitle: !0
- }) : "ThumbCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "movies",
- lazy: !0,
- cardLayout: !0,
- showTitle: !0
- }) : "Banner" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "banner",
- preferBanner: !0,
- context: "movies",
- lazy: !0
- }) : "List" == viewStyle ? listView.getListViewHtml({
- items: result.Items,
- context: "movies",
- sortBy: query.SortBy
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "auto",
- context: "movies",
- showTitle: !0,
- centerText: !1,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "auto",
- context: "movies",
- centerText: !0,
- overlayPlayButton: !0,
- showTitle: !0
+ var html;
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
});
- var i, length, elems = tabContent.querySelectorAll(".paging");
- for (i = 0, length = elems.length; i < length; i++) elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onPreviousPageClick);
- result.Items.length || (html = '
' + Globalize.translate("MessageNoCollectionsAvailable") + "
");
+ var viewStyle = self.getCurrentViewStyle();
+ if (viewStyle == "Thumb") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "movies",
+ overlayPlayButton: true,
+ centerText: true,
+ showTitle: true
+ });
+ } else if (viewStyle == "ThumbCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "movies",
+ lazy: true,
+ cardLayout: true,
+ showTitle: true
+ });
+ } else if (viewStyle == "Banner") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "banner",
+ preferBanner: true,
+ context: "movies",
+ lazy: true
+ });
+ } else if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ context: "movies",
+ sortBy: query.SortBy
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "auto",
+ context: "movies",
+ showTitle: true,
+ centerText: false,
+ cardLayout: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "auto",
+ context: "movies",
+ centerText: true,
+ overlayPlayButton: true,
+ showTitle: true
+ });
+ }
+ var i;
+ var length;
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].innerHTML = pagingHtml;
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onNextPageClick);
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
+ if (!result.Items.length) {
+ html = '
' + Globalize.translate("MessageNoCollectionsAvailable") + "
";
+ }
+
var itemsContainer = tabContent.querySelector(".itemsContainer");
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
loading.hide();
isLoading = false;
- })
+ });
}
- var self = this,
- pageSize = 100,
- data = {},
- isLoading = false;
- self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- },
- function(tabContent) {
- tabContent.querySelector(".btnSort").addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionNameSort"),
- id: "SortName"
- }, {
- name: Globalize.translate("OptionImdbRating"),
- id: "CommunityRating,SortName"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SortName"
- }, {
- name: Globalize.translate("OptionParentalRating"),
- id: "OfficialRating,SortName"
- }, {
- name: Globalize.translate("OptionReleaseDate"),
- id: "PremiereDate,SortName"
- }],
- callback: function() {
- getQuery(tabContent).StartIndex = 0, reloadItems(tabContent)
- },
- query: getQuery(tabContent),
- button: e.target
- })
+
+ var self = this;
+ var pageSize = 100;
+ var data = {};
+ var isLoading = false;
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ function initPage(tabContent) {
+ tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionNameSort"),
+ id: "SortName"
+ }, {
+ name: Globalize.translate("OptionImdbRating"),
+ id: "CommunityRating,SortName"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SortName"
+ }, {
+ name: Globalize.translate("OptionParentalRating"),
+ id: "OfficialRating,SortName"
+ }, {
+ name: Globalize.translate("OptionReleaseDate"),
+ id: "PremiereDate,SortName"
+ }],
+ callback: function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems(tabContent);
+ },
+ query: getQuery(tabContent),
+ 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(","))
- }), btnSelectView.addEventListener("layoutchange", function(e) {
- var viewStyle = e.detail.viewStyle;
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), getQuery(tabContent).StartIndex = 0, onViewStyleChange(), reloadItems(tabContent)
- }), tabContent.querySelector(".btnNewCollection").addEventListener("click", function() {
- require(["collectionEditor"], function(collectionEditor) {
- var serverId = ApiClient.serverInfo().Id;
- (new collectionEditor).show({
- items: [],
- serverId: serverId
- })
- })
- })
- }(tabContent), onViewStyleChange(), self.renderTab = function() {
- reloadItems(tabContent)
- }, self.destroy = function() {}
- }
+ });
+ 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) {
+ var viewStyle = e.detail.viewStyle;
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ getQuery(tabContent).StartIndex = 0;
+ onViewStyleChange();
+ reloadItems(tabContent);
+ });
+ tabContent.querySelector(".btnNewCollection").addEventListener("click", function () {
+ require(["collectionEditor"], function (collectionEditor) {
+ var serverId = ApiClient.serverInfo().Id;
+ new collectionEditor().show({
+ items: [],
+ serverId: serverId
+ });
+ });
+ });
+ }
+
+ initPage(tabContent);
+ onViewStyleChange();
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/movies/moviegenres.js b/src/controllers/movies/moviegenres.js
index 78fd601fd..80197b01c 100644
--- a/src/controllers/movies/moviegenres.js
+++ b/src/controllers/movies/moviegenres.js
@@ -1,139 +1,204 @@
-define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader", "apphost", "globalize", "appRouter", "dom", "emby-button"], function(layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
+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) {
+
+ return function (view, params, tabContent) {
function getPageData() {
- var key = getSavedQueryKey(),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Movie",
- Recursive: !0,
- EnableTotalRecordCount: !1
- },
- view: "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey();
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Movie",
+ Recursive: true,
+ EnableTotalRecordCount: false
+ },
+ view: "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery() {
- return getPageData().query
+ return getPageData().query;
}
function getSavedQueryKey() {
- return libraryBrowser.getSavedQueryKey("moviegenres")
+ return libraryBrowser.getSavedQueryKey("moviegenres");
}
function getPromise() {
loading.show();
var query = getQuery();
- return ApiClient.getGenres(ApiClient.getCurrentUserId(), query)
+ return ApiClient.getGenres(ApiClient.getCurrentUserId(), query);
}
function enableScrollX() {
- return !layoutManager.desktop
+ return !layoutManager.desktop;
}
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"),
- viewStyle = self.getCurrentViewStyle(),
- limit = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? 5 : 9;
- enableScrollX() && (limit = 10);
- var enableImageTypes = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? "Primary,Backdrop,Thumb" : "Primary",
- query = {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Movie",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: enableImageTypes,
- Limit: limit,
- GenreIds: id,
- EnableTotalRecordCount: !1,
- ParentId: params.topParentId
- };
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function(result) {
+ var id = elem.getAttribute("data-id");
+ var viewStyle = self.getCurrentViewStyle();
+ var limit = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? 5 : 9;
+
+ if (enableScrollX()) {
+ limit = 10;
+ }
+
+ var enableImageTypes = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? "Primary,Backdrop,Thumb" : "Primary";
+ var query = {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Movie",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
+ ImageTypeLimit: 1,
+ EnableImageTypes: enableImageTypes,
+ Limit: limit,
+ GenreIds: id,
+ EnableTotalRecordCount: false,
+ ParentId: params.topParentId
+ };
+ ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
var supportsImageAnalysis = appHost.supports("imageanalysis");
- "Thumb" == viewStyle ? cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getThumbShape(),
- preferThumb: !0,
- showTitle: !0,
- scalable: !0,
- centerText: !0,
- overlayMoreButton: !0,
- allowBottomPadding: !1
- }) : "ThumbCard" == viewStyle ? cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getThumbShape(),
- preferThumb: !0,
- showTitle: !0,
- scalable: !0,
- centerText: !1,
- cardLayout: !0,
- showYear: !0
- }) : "PosterCard" == viewStyle ? cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getPortraitShape(),
- showTitle: !0,
- scalable: !0,
- centerText: !1,
- cardLayout: !0,
- showYear: !0
- }) : "Poster" == viewStyle && cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getPortraitShape(),
- scalable: !0,
- overlayMoreButton: !0,
- allowBottomPadding: !1
- }), result.Items.length >= query.Limit && tabContent.querySelector(".btnMoreFromGenre" + id + " i").classList.remove("hide")
- })
+
+ if (viewStyle == "Thumb") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getThumbShape(),
+ preferThumb: true,
+ showTitle: true,
+ scalable: true,
+ centerText: true,
+ overlayMoreButton: true,
+ allowBottomPadding: false
+ });
+ } else if (viewStyle == "ThumbCard") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getThumbShape(),
+ preferThumb: true,
+ showTitle: true,
+ scalable: true,
+ centerText: false,
+ cardLayout: true,
+ showYear: true
+ });
+ } else if (viewStyle == "PosterCard") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getPortraitShape(),
+ showTitle: true,
+ scalable: true,
+ centerText: false,
+ cardLayout: true,
+ showYear: true
+ });
+ } else if (viewStyle == "Poster") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getPortraitShape(),
+ scalable: true,
+ overlayMoreButton: true,
+ allowBottomPadding: false
+ });
+ }
+ if (result.Items.length >= query.Limit) {
+ tabContent.querySelector(".btnMoreFromGenre" + id + " i").classList.remove("hide");
+ }
+ });
}
function reloadItems(context, promise) {
var query = getQuery();
- promise.then(function(result) {
- for (var elem = context.querySelector("#items"), html = "", items = result.Items, i = 0, length = items.length; i < length; i++) {
+ promise.then(function (result) {
+ var elem = context.querySelector("#items");
+ var html = "";
+ var items = result.Items;
+
+ for (var i = 0, length = items.length; i < length; i++) {
var item = items[i];
- if (html += '
', html += '
", enableScrollX()) {
+
+ html += '
';
+ html += '
";
+ if (enableScrollX()) {
var scrollXClass = "scrollX hiddenScrollX";
- layoutManager.tv && (scrollXClass += " smoothScrollX"), html += '
"
+
+ if (layoutManager.tv) {
+ scrollXClass += "smoothScrollX";
+ }
+
+ html += '
";
}
- elem.innerHTML = html, lazyLoader.lazyChildren(elem, fillItemsContainer), libraryBrowser.saveQueryValues(getSavedQueryKey(), query), loading.hide()
- })
+
+ elem.innerHTML = html;
+ lazyLoader.lazyChildren(elem, fillItemsContainer);
+ libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
+ loading.hide();
+ });
}
function fullyReload() {
- self.preRender(), self.renderTab()
+ self.preRender();
+ self.renderTab();
}
- var self = this,
- data = {};
- self.getViewStyles = function() {
- return "Poster,PosterCard,Thumb,ThumbCard".split(",")
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- }, self.setCurrentViewStyle = function(viewStyle) {
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), fullyReload()
- }, self.enableViewSelection = !0;
+
+ var self = this;
+ var data = {};
+
+ self.getViewStyles = function () {
+ return "Poster,PosterCard,Thumb,ThumbCard".split(",");
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ self.setCurrentViewStyle = function (viewStyle) {
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ fullyReload();
+ };
+
+ self.enableViewSelection = true;
var promise;
- self.preRender = function() {
- promise = getPromise()
- }, self.renderTab = function() {
- reloadItems(tabContent, promise)
- }
- }
-});
\ No newline at end of file
+
+ self.preRender = function () {
+ promise = getPromise();
+ };
+
+ self.renderTab = function () {
+ reloadItems(tabContent, promise);
+ };
+ };
+});
diff --git a/src/controllers/movies/movies.js b/src/controllers/movies/movies.js
index e0a5947ca..b4e30602f 100644
--- a/src/controllers/movies/movies.js
+++ b/src/controllers/movies/movies.js
@@ -1,7 +1,7 @@
-define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser", "alphaPicker", "listView", "cardBuilder", "emby-itemscontainer"],
- function(loading, layoutManager, userSettings, events, libraryBrowser, alphaPicker, listView, cardBuilder) {
+define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser", "alphaPicker", "listView", "cardBuilder", "emby-itemscontainer"], function (loading, layoutManager, userSettings, events, libraryBrowser, alphaPicker, listView, cardBuilder) {
"use strict";
- return function(view, params, tabContent, options) {
+
+ return function (view, params, tabContent, options) {
function onViewStyleChange() {
if (self.getCurrentViewStyle() == "List") {
itemsContainer.classList.add("vertical-list");
@@ -10,103 +10,141 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
itemsContainer.classList.remove("vertical-list");
itemsContainer.classList.add("vertical-wrap");
}
+
itemsContainer.innerHTML = "";
}
function updateFilterControls() {
- self.alphaPicker && self.alphaPicker.value(query.NameStartsWithOrGreater)
+ if (self.alphaPicker) {
+ self.alphaPicker.value(query.NameStartsWithOrGreater);
+ }
}
function fetchData() {
isLoading = true;
loading.show();
- return ApiClient.getItems(ApiClient.getCurrentUserId(), query)
+ return ApiClient.getItems(ApiClient.getCurrentUserId(), query);
}
function afterRefresh(result) {
function onNextPageClick() {
- if (isLoading) return;
+ if (isLoading) {
+ return;
+ }
+
query.StartIndex += query.Limit;
itemsContainer.refreshItems();
}
function onPreviousPageClick() {
- if (isLoading) return;
+ if (isLoading) {
+ return;
+ }
+
query.StartIndex -= query.Limit;
itemsContainer.refreshItems();
}
+
window.scrollTo(0, 0);
updateFilterControls();
- var i, length, elems, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- });
- for (elems = tabContent.querySelectorAll(".paging"), i = 0, length = elems.length; i < length; i++)
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
+ });
+ var i;
+ var length;
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++)
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++)
- elems[i].addEventListener("click", onPreviousPageClick)
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
isLoading = false;
loading.hide();
}
function getItemsHtml(items) {
+ var html;
var viewStyle = self.getCurrentViewStyle();
- return "Thumb" == viewStyle ? cardBuilder.getCardsHtml({
- items: items,
- shape: "backdrop",
- preferThumb: !0,
- context: "movies",
- lazy: !0,
- overlayPlayButton: !0,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- }) : "ThumbCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: items,
- shape: "backdrop",
- preferThumb: !0,
- context: "movies",
- lazy: !0,
- cardLayout: !0,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- }) : "Banner" == viewStyle ? cardBuilder.getCardsHtml({
- items: items,
- shape: "banner",
- preferBanner: !0,
- context: "movies",
- lazy: !0
- }) : "List" == viewStyle ? listView.getListViewHtml({
- items: items,
- context: "movies",
- sortBy: query.SortBy
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: items,
- shape: "portrait",
- context: "movies",
- showTitle: !0,
- showYear: !0,
- centerText: !0,
- lazy: !0,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: items,
- shape: "portrait",
- context: "movies",
- overlayPlayButton: !0,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- })
+
+ if (viewStyle == "Thumb") {
+ html = cardBuilder.getCardsHtml({
+ items: items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "movies",
+ lazy: true,
+ overlayPlayButton: true,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ } else if (viewStyle == "ThumbCard") {
+ html = cardBuilder.getCardsHtml({
+ items: items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "movies",
+ lazy: true,
+ cardLayout: true,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ } else if (viewStyle == "Banner") {
+ html = cardBuilder.getCardsHtml({
+ items: items,
+ shape: "banner",
+ preferBanner: true,
+ context: "movies",
+ lazy: true
+ });
+ } else if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: items,
+ context: "movies",
+ sortBy: query.SortBy
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: items,
+ shape: "portrait",
+ context: "movies",
+ showTitle: true,
+ showYear: true,
+ centerText: true,
+ lazy: true,
+ cardLayout: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: items,
+ shape: "portrait",
+ context: "movies",
+ overlayPlayButton: true,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ }
+
+ return html;
}
function initPage(tabContent) {
@@ -114,8 +152,9 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
itemsContainer.getItemsHtml = getItemsHtml;
itemsContainer.afterRefresh = afterRefresh;
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;
@@ -125,109 +164,132 @@ define(["loading", "layoutManager", "userSettings", "events", "libraryBrowser",
element: alphaPickerElement,
valueChangeEvent: "click"
});
+
if (layoutManager.desktop || layoutManager.mobile) {
alphaPickerElement.classList.add("alphabetPicker-right");
itemsContainer.classList.remove("padded-left-withalphapicker");
itemsContainer.classList.add("padded-right-withalphapicker");
}
}
+
var btnFilter = tabContent.querySelector(".btnFilter");
- btnFilter && btnFilter.addEventListener("click", function() {
- self.showFilterMenu()
- });
+
+ if (btnFilter) {
+ btnFilter.addEventListener("click", function () {
+ self.showFilterMenu();
+ });
+ }
var btnSort = tabContent.querySelector(".btnSort");
- btnSort && btnSort.addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionNameSort"),
- id: "SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionImdbRating"),
- id: "CommunityRating,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionCriticRating"),
- id: "CriticRating,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionDatePlayed"),
- id: "DatePlayed,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionParentalRating"),
- id: "OfficialRating,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionPlayCount"),
- id: "PlayCount,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionReleaseDate"),
- id: "PremiereDate,SortName,ProductionYear"
- }, {
- name: Globalize.translate("OptionRuntime"),
- id: "Runtime,SortName,ProductionYear"
- }],
- callback: function() {
- query.StartIndex = 0, userSettings.saveQuerySettings(savedQueryKey, query), itemsContainer.refreshItems()
- },
- query: query,
- button: e.target
- })
- });
+
+ if (btnSort) {
+ btnSort.addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionNameSort"),
+ id: "SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionImdbRating"),
+ id: "CommunityRating,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionCriticRating"),
+ id: "CriticRating,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionDatePlayed"),
+ id: "DatePlayed,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionParentalRating"),
+ id: "OfficialRating,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionPlayCount"),
+ id: "PlayCount,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionReleaseDate"),
+ id: "PremiereDate,SortName,ProductionYear"
+ }, {
+ name: Globalize.translate("OptionRuntime"),
+ id: "Runtime,SortName,ProductionYear"
+ }],
+ callback: function () {
+ query.StartIndex = 0;
+ userSettings.saveQuerySettings(savedQueryKey, query);
+ itemsContainer.refreshItems();
+ },
+ query: query,
+ 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(","))
- }), btnSelectView.addEventListener("layoutchange", function(e) {
+ btnSelectView.addEventListener("click", function (e) {
+ libraryBrowser.showLayoutMenu(e.target, self.getCurrentViewStyle(), "Banner,List,Poster,PosterCard,Thumb,ThumbCard".split(","));
+ });
+ btnSelectView.addEventListener("layoutchange", function (e) {
var viewStyle = e.detail.viewStyle;
userSettings.set(savedViewKey, viewStyle);
query.StartIndex = 0;
onViewStyleChange();
itemsContainer.refreshItems();
- })
+ });
}
- var self = this,
- itemsContainer = tabContent.querySelector(".itemsContainer"),
- savedQueryKey = params.topParentId + "-" + options.mode,
- savedViewKey = savedQueryKey + "-view",
- query = {
- SortBy: "SortName,ProductionYear",
- SortOrder: "Ascending",
- IncludeItemTypes: "Movie",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- StartIndex: 0,
- Limit: 100,
- ParentId: params.topParentId
- },
- isLoading = false;
- if (options.mode === "favorites") query.IsFavorite = true;
+
+ var self = this;
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+ var savedQueryKey = params.topParentId + "-" + options.mode;
+ var savedViewKey = savedQueryKey + "-view";
+ var query = {
+ SortBy: "SortName,ProductionYear",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Movie",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
+ StartIndex: 0,
+ Limit: 100,
+ ParentId: params.topParentId
+ };
+ var isLoading = false;
+
+ if (options.mode === "favorites") {
+ query.IsFavorite = true;
+ }
+
query = userSettings.loadQuerySettings(savedQueryKey, query);
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
var filterDialog = new filterDialogFactory({
query: query,
mode: "movies",
serverId: ApiClient.serverId()
});
- events.on(filterDialog, "filterchange", function() {
- query.StartIndex = 0, itemsContainer.refreshItems()
- }), filterDialog.show()
- })
+ events.on(filterDialog, "filterchange", function () {
+ query.StartIndex = 0;
+ itemsContainer.refreshItems();
+ });
+ filterDialog.show();
+ });
};
- self.getCurrentViewStyle = function() {
- return userSettings.get(savedViewKey) || "Poster"
+
+ self.getCurrentViewStyle = function () {
+ return userSettings.get(savedViewKey) || "Poster";
};
- self.initTab = function() {
+
+ self.initTab = function () {
initPage(tabContent);
onViewStyleChange();
};
- self.renderTab = function() {
+
+ self.renderTab = function () {
itemsContainer.refreshItems();
updateFilterControls();
};
- self.destroy = function() {
- itemsContainer = null
- }
- }
+
+ self.destroy = function () {
+ itemsContainer = null;
+ };
+ };
});
diff --git a/src/controllers/movies/moviesrecommended.js b/src/controllers/movies/moviesrecommended.js
index 2bab76773..82c0b6a12 100644
--- a/src/controllers/movies/moviesrecommended.js
+++ b/src/controllers/movies/moviesrecommended.js
@@ -1,16 +1,16 @@
-define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-itemscontainer", "emby-tabs", "emby-button"], function(events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager) {
+define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu", "mainTabsManager", "cardBuilder", "dom", "imageLoader", "playbackManager", "emby-itemscontainer", "emby-tabs", "emby-button"], function (events, layoutManager, inputManager, userSettings, libraryMenu, mainTabsManager, cardBuilder, dom, imageLoader, playbackManager) {
"use strict";
function enableScrollX() {
- return !layoutManager.desktop
+ 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) {
@@ -21,118 +21,168 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
ParentId: parentId,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- EnableTotalRecordCount: !1
+ EnableTotalRecordCount: false
};
- ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options)).then(function(items) {
- var allowBottomPadding = !enableScrollX(),
- container = page.querySelector("#recentlyAddedItems");
+ ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options)).then(function (items) {
+ var allowBottomPadding = !enableScrollX();
+ var container = page.querySelector("#recentlyAddedItems");
cardBuilder.buildCards(items, {
itemsContainer: container,
shape: getPortraitShape(),
- scalable: !0,
- overlayPlayButton: !0,
+ scalable: true,
+ overlayPlayButton: true,
allowBottomPadding: allowBottomPadding,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- })
- })
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ });
}
function loadResume(page, userId, parentId) {
- var screenWidth = dom.getWindowSize().innerWidth,
- options = {
- SortBy: "DatePlayed",
- SortOrder: "Descending",
- IncludeItemTypes: "Movie",
- Filters: "IsResumable",
- Limit: screenWidth >= 1920 ? 5 : screenWidth >= 1600 ? 5 : 3,
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
- CollapseBoxSetItems: !1,
- ParentId: parentId,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- EnableTotalRecordCount: !1
- };
- ApiClient.getItems(userId, options).then(function(result) {
- result.Items.length ? page.querySelector("#resumableSection").classList.remove("hide") : page.querySelector("#resumableSection").classList.add("hide");
- var allowBottomPadding = !enableScrollX(),
- container = page.querySelector("#resumableItems");
+ var screenWidth = dom.getWindowSize().innerWidth;
+ var options = {
+ SortBy: "DatePlayed",
+ SortOrder: "Descending",
+ IncludeItemTypes: "Movie",
+ Filters: "IsResumable",
+ Limit: screenWidth >= 1920 ? 5 : screenWidth >= 1600 ? 5 : 3,
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
+ CollapseBoxSetItems: false,
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
+ EnableTotalRecordCount: false
+ };
+ ApiClient.getItems(userId, options).then(function (result) {
+ if (result.Items.length) {
+ page.querySelector("#resumableSection").classList.remove("hide");
+ } else {
+ page.querySelector("#resumableSection").classList.add("hide");
+ }
+
+ var allowBottomPadding = !enableScrollX();
+ var container = page.querySelector("#resumableItems");
cardBuilder.buildCards(result.Items, {
itemsContainer: container,
- preferThumb: !0,
+ preferThumb: true,
shape: getThumbShape(),
- scalable: !0,
- overlayPlayButton: !0,
+ scalable: true,
+ overlayPlayButton: true,
allowBottomPadding: allowBottomPadding,
- cardLayout: !1,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- })
- })
+ cardLayout: false,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ });
}
function getRecommendationHtml(recommendation) {
- var html = "",
- title = "";
+ var html = "";
+ var title = "";
+
switch (recommendation.RecommendationType) {
case "SimilarToRecentlyPlayed":
title = Globalize.translate("RecommendationBecauseYouWatched").replace("{0}", recommendation.BaselineItemName);
break;
+
case "SimilarToLikedItem":
title = Globalize.translate("RecommendationBecauseYouLike").replace("{0}", recommendation.BaselineItemName);
break;
+
case "HasDirectorFromRecentlyPlayed":
case "HasLikedDirector":
title = Globalize.translate("RecommendationDirectedBy").replace("{0}", recommendation.BaselineItemName);
break;
+
case "HasActorFromRecentlyPlayed":
case "HasLikedActor":
- title = Globalize.translate("RecommendationStarring").replace("{0}", recommendation.BaselineItemName)
+ title = Globalize.translate("RecommendationStarring").replace("{0}", recommendation.BaselineItemName);
+ break;
}
- html += '
', html += '
' + title + " ";
- var allowBottomPadding = !0;
- return enableScrollX() ? (allowBottomPadding = !1, html += '
') : html += '
', html += cardBuilder.getCardsHtml(recommendation.Items, {
+
+ html += '
';
+ html += '
' + title + " ";
+ var allowBottomPadding = true;
+
+ if (enableScrollX()) {
+ allowBottomPadding = false;
+ html += '
"
+ });
+ html += "
";
+ html += "
";
+ return html;
}
function loadSuggestions(page, userId, parentId) {
- var screenWidth = dom.getWindowSize().innerWidth,
- url = ApiClient.getUrl("Movies/Recommendations", {
- userId: userId,
- categoryLimit: 6,
- ItemLimit: screenWidth >= 1920 ? 8 : screenWidth >= 1600 ? 8 : screenWidth >= 1200 ? 6 : 5,
- Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
- });
- ApiClient.getJSON(url).then(function(recommendations) {
- if (!recommendations.length) return page.querySelector(".noItemsMessage").classList.remove("hide"), void(page.querySelector(".recommendations").innerHTML = "");
+ var screenWidth = dom.getWindowSize().innerWidth;
+ 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",
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
+ });
+ ApiClient.getJSON(url).then(function (recommendations) {
+ if (!recommendations.length) {
+ 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");
- recs.innerHTML = html, imageLoader.lazyChildren(recs)
- })
+ recs.innerHTML = html;
+ imageLoader.lazyChildren(recs);
+ });
}
function setScrollClasses(elem, scrollX) {
- scrollX ? (elem.classList.add("hiddenScrollX"), layoutManager.tv && elem.classList.add("smoothScrollX"), elem.classList.add("scrollX"), elem.classList.remove("vertical-wrap")) : (elem.classList.remove("hiddenScrollX"), elem.classList.remove("smoothScrollX"), elem.classList.remove("scrollX"), elem.classList.add("vertical-wrap"))
+ if (scrollX) {
+ elem.classList.add("hiddenScrollX");
+
+ if (layoutManager.tv) {
+ elem.classList.add("smoothScrollX");
+ }
+
+ 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");
+ }
}
function initSuggestedTab(page, tabContent) {
- for (var containers = tabContent.querySelectorAll(".itemsContainer"), i = 0, length = containers.length; i < length; i++) setScrollClasses(containers[i], enableScrollX())
+ var containers = tabContent.querySelectorAll(".itemsContainer");
+
+ for (var i = 0, length = containers.length; i < length; i++) {
+ setScrollClasses(containers[i], enableScrollX());
+ }
}
function loadSuggestionsTab(view, params, tabContent) {
- var parentId = params.topParentId,
- userId = ApiClient.getCurrentUserId();
- console.log("loadSuggestionsTab"), loadResume(tabContent, userId, parentId), loadLatest(tabContent, userId, parentId), loadSuggestions(tabContent, userId, parentId)
+ var parentId = params.topParentId;
+ var userId = ApiClient.getCurrentUserId();
+ console.log("loadSuggestionsTab");
+ loadResume(tabContent, userId, parentId);
+ loadLatest(tabContent, userId, parentId);
+ loadSuggestions(tabContent, userId, parentId);
}
function getTabs() {
@@ -151,126 +201,196 @@ define(["events", "layoutManager", "inputManager", "userSettings", "libraryMenu"
}, {
name: Globalize.translate("ButtonSearch"),
cssClass: "searchTabButton"
- }]
+ }];
}
function getDefaultTabIndex(folderId) {
switch (userSettings.get("landing-" + folderId)) {
case "suggestions":
return 1;
+
case "favorites":
return 3;
+
case "collections":
return 4;
+
case "genres":
return 5;
+
default:
- return 0
+ return 0;
}
}
- return function(view, params) {
+
+ return function (view, params) {
function onBeforeTabChange(e) {
- preLoadTab(view, parseInt(e.detail.selectedTabIndex))
+ preLoadTab(view, parseInt(e.detail.selectedTabIndex));
}
function onTabChange(e) {
var newIndex = parseInt(e.detail.selectedTabIndex);
- loadTab(view, newIndex)
+ loadTab(view, newIndex);
}
function getTabContainers() {
- return view.querySelectorAll(".pageTabContent")
+ return view.querySelectorAll(".pageTabContent");
}
function initTabs() {
- mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange)
+ mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange);
}
function getTabController(page, index, callback) {
var depends = [];
+
switch (index) {
case 0:
depends.push("controllers/movies/movies");
break;
+
case 1:
break;
+
case 2:
depends.push("controllers/movies/movietrailers");
break;
+
case 3:
depends.push("controllers/movies/movies");
break;
+
case 4:
depends.push("controllers/movies/moviecollections");
break;
+
case 5:
depends.push("controllers/movies/moviegenres");
break;
+
case 6:
- depends.push("scripts/searchtab")
+ depends.push("scripts/searchtab");
}
- require(depends, function(controllerFactory) {
+
+ require(depends, function (controllerFactory) {
var tabContent;
- index === suggestionsTabIndex && (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), self.tabContent = tabContent);
+
+ if (index === suggestionsTabIndex) {
+ tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+ self.tabContent = tabContent;
+ }
+
var controller = tabControllers[index];
- controller || (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), controller = index === suggestionsTabIndex ? self : 6 === index ? new controllerFactory(view, tabContent, {
- collectionType: "movies",
- parentId: params.topParentId
- }) : 0 === index || 3 === index ? new controllerFactory(view, params, tabContent, {
- mode: index ? "favorites" : "movies"
- }) : new controllerFactory(view, params, tabContent), tabControllers[index] = controller, controller.initTab && controller.initTab()), callback(controller)
- })
+
+ if (!controller) {
+ tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+
+ if (index === suggestionsTabIndex) {
+ controller = self;
+ } else if (index === 6) {
+ controller = new controllerFactory(view, tabContent, {
+ collectionType: "movies",
+ parentId: params.topParentId
+ });
+ } else if (index == 0 || index == 3) {
+ controller = new controllerFactory(view, params, tabContent, {
+ mode: index ? "favorites" : "movies"
+ });
+ } else {
+ controller = new controllerFactory(view, params, tabContent);
+ }
+
+ tabControllers[index] = controller;
+
+ if (controller.initTab) {
+ controller.initTab();
+ }
+ }
+
+ callback(controller);
+ });
}
function preLoadTab(page, index) {
- getTabController(page, index, function(controller) {
- -1 == renderedTabs.indexOf(index) && controller.preRender && controller.preRender()
- })
+ getTabController(page, index, function (controller) {
+ if (renderedTabs.indexOf(index) == -1 && controller.preRender) {
+ controller.preRender();
+ }
+ });
}
function loadTab(page, index) {
- currentTabIndex = index, getTabController(page, index, function(controller) {
- initialTabIndex = null, -1 == renderedTabs.indexOf(index) && (renderedTabs.push(index), controller.renderTab())
- })
+ currentTabIndex = index;
+ getTabController(page, index, function (controller) {
+ initialTabIndex = null;
+
+ if (renderedTabs.indexOf(index) == -1) {
+ renderedTabs.push(index);
+ controller.renderTab();
+ }
+ });
}
function onPlaybackStop(e, state) {
- state.NowPlayingItem && "Video" == state.NowPlayingItem.MediaType && (renderedTabs = [], mainTabsManager.getTabsElement().triggerTabChange())
+ if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
+ renderedTabs = [];
+ mainTabsManager.getTabsElement().triggerTabChange();
+ }
}
function onInputCommand(e) {
switch (e.detail.command) {
case "search":
- e.preventDefault(), Dashboard.navigate("search.html?collectionType=movies&parentId=" + params.topParentId)
+ e.preventDefault();
+ Dashboard.navigate("search.html?collectionType=movies&parentId=" + params.topParentId);
}
}
- var isViewRestored, self = this,
- currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)),
- initialTabIndex = currentTabIndex,
- suggestionsTabIndex = 1;
- self.initTab = function() {
+
+ var isViewRestored;
+ var self = this;
+ var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
+ var initialTabIndex = currentTabIndex;
+ var suggestionsTabIndex = 1;
+
+ self.initTab = function () {
var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
initSuggestedTab(view, tabContent);
- }, self.renderTab = function() {
- var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
- loadSuggestionsTab(view, params, tabContent)
};
- var tabControllers = [],
- renderedTabs = [];
- view.addEventListener("viewshow", function(e) {
+
+ self.renderTab = function () {
+ var tabContent = view.querySelector(".pageTabContent[data-index='" + suggestionsTabIndex + "']");
+ loadSuggestionsTab(view, params, tabContent);
+ };
+
+ var tabControllers = [];
+ var renderedTabs = [];
+ view.addEventListener("viewshow", function (e) {
if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute("data-title")) {
var parentId = params.topParentId;
- parentId ? ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function(item) {
- view.setAttribute("data-title", item.Name), libraryMenu.setTitle(item.Name)
- }) : (view.setAttribute("data-title", Globalize.translate("TabMovies")), libraryMenu.setTitle(Globalize.translate("TabMovies")))
+
+ if (parentId) {
+ ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
+ view.setAttribute("data-title", item.Name);
+ libraryMenu.setTitle(item.Name);
+ });
+ } else {
+ view.setAttribute("data-title", Globalize.translate("TabMovies"));
+ libraryMenu.setTitle(Globalize.translate("TabMovies"));
+ }
}
- events.on(playbackManager, "playbackstop", onPlaybackStop), inputManager.on(window, onInputCommand)
- }), view.addEventListener("viewbeforehide", function(e) {
- inputManager.off(window, onInputCommand)
- }), view.addEventListener("viewdestroy", function(e) {
- tabControllers.forEach(function(t) {
- t.destroy && t.destroy()
- })
- })
- }
-});
\ No newline at end of file
+
+ events.on(playbackManager, "playbackstop", onPlaybackStop);
+ inputManager.on(window, onInputCommand);
+ });
+ view.addEventListener("viewbeforehide", function (e) {
+ inputManager.off(window, onInputCommand);
+ });
+ view.addEventListener("viewdestroy", function (e) {
+ tabControllers.forEach(function (t) {
+ if (t.destroy) {
+ t.destroy();
+ }
+ });
+ });
+ };
+});
diff --git a/src/controllers/movies/movietrailers.js b/src/controllers/movies/movietrailers.js
index 2d1fdda63..3e6229861 100644
--- a/src/controllers/movies/movietrailers.js
+++ b/src/controllers/movies/movietrailers.js
@@ -1,185 +1,261 @@
-define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function(layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
+define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData(context) {
- var key = getSavedQueryKey(context),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Trailer",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- StartIndex: 0,
- Limit: pageSize
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey(context);
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Trailer",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
+ StartIndex: 0,
+ Limit: pageSize
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery(context) {
- return getPageData(context).query
+ return getPageData(context).query;
}
function getSavedQueryKey(context) {
- return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey("trailers")), context.savedQueryKey
+ if (!context.savedQueryKey) {
+ context.savedQueryKey = libraryBrowser.getSavedQueryKey("trailers");
+ }
+
+ return context.savedQueryKey;
}
function reloadItems() {
loading.show();
isLoading = true;
var query = getQuery(tabContent);
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function(result) {
+ ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
- query.StartIndex += query.Limit, reloadItems()
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex += query.Limit;
+ reloadItems();
}
function onPreviousPageClick() {
- if (isLoading) return;
- query.StartIndex -= query.Limit, reloadItems()
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex -= query.Limit;
+ reloadItems();
}
- window.scrollTo(0, 0), updateFilterControls(tabContent);
- var html, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- viewStyle = self.getCurrentViewStyle();
- html = "Thumb" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "movies",
- overlayPlayButton: !0
- }) : "ThumbCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "movies",
- cardLayout: !0,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- }) : "Banner" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "banner",
- preferBanner: !0,
- context: "movies"
- }) : "List" == viewStyle ? listView.getListViewHtml({
- items: result.Items,
- context: "movies",
- sortBy: query.SortBy
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "portrait",
- context: "movies",
- showTitle: !0,
- showYear: !0,
- centerText: !0,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "portrait",
- context: "movies",
- centerText: !0,
- overlayPlayButton: !0,
- showTitle: !0,
- showYear: !0
+
+ window.scrollTo(0, 0);
+ updateFilterControls(tabContent);
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
});
- var i, length, elems = tabContent.querySelectorAll(".paging");
- for (i = 0, length = elems.length; i < length; i++) elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onPreviousPageClick);
- result.Items.length || (html = '
' + Globalize.translate("MessageNoTrailersFound") + "
");
+ var html;
+ var viewStyle = self.getCurrentViewStyle();
+
+ if (viewStyle == "Thumb") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "movies",
+ overlayPlayButton: true
+ });
+ } else if (viewStyle == "ThumbCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "movies",
+ cardLayout: true,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ } else if (viewStyle == "Banner") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "banner",
+ preferBanner: true,
+ context: "movies"
+ });
+ } else if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ context: "movies",
+ sortBy: query.SortBy
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "portrait",
+ context: "movies",
+ showTitle: true,
+ showYear: true,
+ cardLayout: true,
+ centerText: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "portrait",
+ context: "movies",
+ centerText: true,
+ overlayPlayButton: true,
+ showTitle: true,
+ showYear: true
+ });
+ }
+
+ var i;
+ var length;
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].innerHTML = pagingHtml;
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onNextPageClick);
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
+ if (!result.Items.length) {
+ html = '
' + Globalize.translate("MessageNoTrailersFound") + "
";
+ }
+
var itemsContainer = tabContent.querySelector(".itemsContainer");
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(tabContent), query);
loading.hide();
isLoading = false;
- })
+ });
}
function updateFilterControls(tabContent) {
var query = getQuery(tabContent);
- self.alphaPicker.value(query.NameStartsWithOrGreater)
+ self.alphaPicker.value(query.NameStartsWithOrGreater);
}
- var self = this,
- pageSize = 100,
- data = {},
- isLoading = false;
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
- var filterDialog = new filterDialogFactory({
- query: getQuery(tabContent),
- mode: "movies",
- serverId: ApiClient.serverId()
- });
- events.on(filterDialog, "filterchange", function() {
- getQuery(tabContent).StartIndex = 0, reloadItems()
- }), filterDialog.show()
- })
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- },
- function(tabContent) {
- var alphaPickerElement = tabContent.querySelector(".alphaPicker");
- if (alphaPickerElement.addEventListener("alphavaluechanged", function(e) {
- var newValue = e.detail.value,
- query = getQuery(tabContent);
- query.NameStartsWithOrGreater = newValue, query.StartIndex = 0, reloadItems()
- }), self.alphaPicker = new alphaPicker({
- element: alphaPickerElement,
- valueChangeEvent: "click"
- }), layoutManager.desktop || layoutManager.mobile) {
- tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
- var itemsContainer = tabContent.querySelector(".itemsContainer");
- itemsContainer.classList.remove("padded-left-withalphapicker"), itemsContainer.classList.add("padded-right-withalphapicker")
- }
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- self.showFilterMenu()
- }), tabContent.querySelector(".btnSort").addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionNameSort"),
- id: "SortName"
- }, {
- name: Globalize.translate("OptionImdbRating"),
- id: "CommunityRating,SortName"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SortName"
- }, {
- name: Globalize.translate("OptionDatePlayed"),
- id: "DatePlayed,SortName"
- }, {
- name: Globalize.translate("OptionParentalRating"),
- id: "OfficialRating,SortName"
- }, {
- name: Globalize.translate("OptionPlayCount"),
- id: "PlayCount,SortName"
- }, {
- name: Globalize.translate("OptionReleaseDate"),
- id: "PremiereDate,SortName"
- }],
- callback: function() {
- getQuery(tabContent).StartIndex = 0, reloadItems()
- },
- query: getQuery(tabContent),
- button: e.target
- })
- })
- }(tabContent), self.renderTab = function() {
- reloadItems(), updateFilterControls(tabContent)
- }, self.destroy = function() {}
- }
+
+ var self = this;
+ var pageSize = 100;
+ var data = {};
+ var isLoading = false;
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
+ var filterDialog = new filterDialogFactory({
+ query: getQuery(tabContent),
+ mode: "movies",
+ serverId: ApiClient.serverId()
+ });
+ events.on(filterDialog, "filterchange", function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems();
+ });
+ filterDialog.show();
+ });
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ function initPage(tabContent) {
+ var alphaPickerElement = tabContent.querySelector(".alphaPicker");
+ alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
+ var newValue = e.detail.value;
+ var query = getQuery(tabContent);
+ query.NameStartsWithOrGreater = newValue;
+ query.StartIndex = 0;
+ reloadItems();
+ });
+ self.alphaPicker = new alphaPicker({
+ element: alphaPickerElement,
+ valueChangeEvent: "click"
+ });
+
+ if (layoutManager.desktop || layoutManager.mobile) {
+ tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+ itemsContainer.classList.remove("padded-left-withalphapicker");
+ itemsContainer.classList.add("padded-right-withalphapicker");
+ }
+
+ tabContent.querySelector(".btnFilter").addEventListener("click", function () {
+ self.showFilterMenu();
+ });
+ tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionNameSort"),
+ id: "SortName"
+ }, {
+ name: Globalize.translate("OptionImdbRating"),
+ id: "CommunityRating,SortName"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SortName"
+ }, {
+ name: Globalize.translate("OptionDatePlayed"),
+ id: "DatePlayed,SortName"
+ }, {
+ name: Globalize.translate("OptionParentalRating"),
+ id: "OfficialRating,SortName"
+ }, {
+ name: Globalize.translate("OptionPlayCount"),
+ id: "PlayCount,SortName"
+ }, {
+ name: Globalize.translate("OptionReleaseDate"),
+ id: "PremiereDate,SortName"
+ }],
+ callback: function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems();
+ },
+ query: getQuery(tabContent),
+ button: e.target
+ });
+ });
+ }
+
+ initPage(tabContent);
+
+ self.renderTab = function () {
+ reloadItems();
+ updateFilterControls(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/music/musicalbums.js b/src/controllers/music/musicalbums.js
index 8a562c532..ac45d9a15 100644
--- a/src/controllers/music/musicalbums.js
+++ b/src/controllers/music/musicalbums.js
@@ -1,190 +1,275 @@
-define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function(layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
+define(["layoutManager", "playbackManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, playbackManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function playAll() {
- ApiClient.getItem(ApiClient.getCurrentUserId(), params.topParentId).then(function(item) {
+ ApiClient.getItem(ApiClient.getCurrentUserId(), params.topParentId).then(function (item) {
playbackManager.play({
items: [item]
- })
- })
+ });
+ });
}
function shuffle() {
- ApiClient.getItem(ApiClient.getCurrentUserId(), params.topParentId).then(function(item) {
+ ApiClient.getItem(ApiClient.getCurrentUserId(), params.topParentId).then(function (item) {
getQuery();
- playbackManager.shuffle(item, null)
- })
+ playbackManager.shuffle(item, null);
+ });
}
function getPageData() {
var key = getSavedQueryKey();
- return pageData || (pageData = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "MusicAlbum",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- StartIndex: 0,
- Limit: pageSize
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+
+ if (!pageData) {
+ pageData = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "MusicAlbum",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
+ StartIndex: 0,
+ Limit: pageSize
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery() {
- return getPageData().query
+ return getPageData().query;
}
function getSavedQueryKey() {
- return savedQueryKey || (savedQueryKey = libraryBrowser.getSavedQueryKey("musicalbums")), savedQueryKey
+ if (!savedQueryKey) {
+ savedQueryKey = libraryBrowser.getSavedQueryKey("musicalbums");
+ }
+
+ return savedQueryKey;
}
function onViewStyleChange() {
- var viewStyle = self.getCurrentViewStyle(),
- itemsContainer = tabContent.querySelector(".itemsContainer");
- "List" == viewStyle ? (itemsContainer.classList.add("vertical-list"), itemsContainer.classList.remove("vertical-wrap")) : (itemsContainer.classList.remove("vertical-list"), itemsContainer.classList.add("vertical-wrap")), itemsContainer.innerHTML = ""
+ var viewStyle = self.getCurrentViewStyle();
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+
+ 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.innerHTML = "";
}
function reloadItems(page) {
loading.show();
isLoading = true;
var query = getQuery();
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function(result) {
+ ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
- query.StartIndex += query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex += query.Limit;
+ reloadItems(tabContent);
}
function onPreviousPageClick() {
- if (isLoading) return;
- query.StartIndex -= query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex -= query.Limit;
+ reloadItems(tabContent);
}
- window.scrollTo(0, 0), updateFilterControls(page);
- var html, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- viewStyle = self.getCurrentViewStyle();
- html = "List" == viewStyle ? listView.getListViewHtml({
- items: result.Items,
- context: "music",
- sortBy: query.SortBy,
- addToListButton: !0
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "square",
- context: "music",
- showTitle: !0,
- coverImage: !0,
- showParentTitle: !0,
- lazy: !0,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "square",
- context: "music",
- showTitle: !0,
- showParentTitle: !0,
- lazy: !0,
- centerText: !0,
- overlayPlayButton: !0
+
+ window.scrollTo(0, 0);
+ updateFilterControls(page);
+ var html;
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
});
- var i, length, elems = tabContent.querySelectorAll(".paging");
- for (i = 0, length = elems.length; i < length; i++) elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onPreviousPageClick);
+ var viewStyle = self.getCurrentViewStyle();
+ if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ context: "music",
+ sortBy: query.SortBy,
+ addToListButton: true
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "square",
+ context: "music",
+ showTitle: true,
+ coverImage: true,
+ showParentTitle: true,
+ lazy: true,
+ cardLayout: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "square",
+ context: "music",
+ showTitle: true,
+ showParentTitle: true,
+ lazy: true,
+ centerText: true,
+ overlayPlayButton: true
+ });
+ }
+ var i;
+ var length;
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].innerHTML = pagingHtml;
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onNextPageClick);
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
var itemsContainer = tabContent.querySelector(".itemsContainer");
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
loading.hide();
isLoading = false;
- })
+ });
}
function updateFilterControls(tabContent) {
var query = getQuery();
- self.alphaPicker.value(query.NameStartsWithOrGreater)
+ self.alphaPicker.value(query.NameStartsWithOrGreater);
}
- var savedQueryKey, pageData, self = this,
- pageSize = 100,
- isLoading = false;
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
- var filterDialog = new filterDialogFactory({
- query: getQuery(),
- mode: "albums",
- serverId: ApiClient.serverId()
- });
- events.on(filterDialog, "filterchange", function() {
- getQuery().StartIndex = 0, reloadItems(tabContent)
- }), filterDialog.show()
- })
- }, self.getCurrentViewStyle = function() {
- return getPageData().view
- },
- function(tabContent) {
- var alphaPickerElement = tabContent.querySelector(".alphaPicker");
- if (alphaPickerElement.addEventListener("alphavaluechanged", function(e) {
- var newValue = e.detail.value,
- query = getQuery();
- query.NameStartsWithOrGreater = newValue, query.StartIndex = 0, reloadItems(tabContent)
- }), self.alphaPicker = new alphaPicker({
- element: alphaPickerElement,
- valueChangeEvent: "click"
- }), layoutManager.desktop || layoutManager.mobile) {
- tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
- var itemsContainer = tabContent.querySelector(".itemsContainer");
- itemsContainer.classList.remove("padded-left-withalphapicker"), itemsContainer.classList.add("padded-right-withalphapicker")
- }
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- self.showFilterMenu()
- }), tabContent.querySelector(".btnSort").addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionNameSort"),
- id: "SortName"
- }, {
- name: Globalize.translate("OptionAlbumArtist"),
- id: "AlbumArtist,SortName"
- }, {
- name: Globalize.translate("OptionCommunityRating"),
- id: "CommunityRating,SortName"
- }, {
- name: Globalize.translate("OptionCriticRating"),
- id: "CriticRating,SortName"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SortName"
- }, {
- name: Globalize.translate("OptionReleaseDate"),
- id: "ProductionYear,PremiereDate,SortName"
- }],
- callback: function() {
- getQuery().StartIndex = 0, reloadItems(tabContent)
- },
- query: getQuery(),
- button: e.target
- })
+
+ var savedQueryKey;
+ var pageData;
+ var self = this;
+ var pageSize = 100;
+ var isLoading = false;
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
+ var filterDialog = new filterDialogFactory({
+ query: getQuery(),
+ mode: "albums",
+ serverId: ApiClient.serverId()
});
- 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) {
- var viewStyle = e.detail.viewStyle;
- getPageData().view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle), getQuery().StartIndex = 0, onViewStyleChange(), reloadItems(tabContent)
- }), tabContent.querySelector(".btnPlayAll").addEventListener("click", playAll), tabContent.querySelector(".btnShuffle").addEventListener("click", shuffle)
- }(tabContent), onViewStyleChange(), self.renderTab = function() {
- reloadItems(tabContent), updateFilterControls(tabContent)
- }, self.destroy = function() {}
- }
+ events.on(filterDialog, "filterchange", function () {
+ getQuery().StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ filterDialog.show();
+ });
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData().view;
+ };
+
+ function initPage(tabContent) {
+ var alphaPickerElement = tabContent.querySelector(".alphaPicker");
+
+ alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
+ var newValue = e.detail.value;
+ var query = getQuery();
+ query.NameStartsWithOrGreater = newValue;
+ query.StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ self.alphaPicker = new alphaPicker({
+ element: alphaPickerElement,
+ valueChangeEvent: "click"
+ });
+ if (layoutManager.desktop || layoutManager.mobile) {
+ tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+ itemsContainer.classList.remove("padded-left-withalphapicker");
+ itemsContainer.classList.add("padded-right-withalphapicker");
+ }
+
+ tabContent.querySelector(".btnFilter").addEventListener("click", function () {
+ self.showFilterMenu();
+ });
+ tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionNameSort"),
+ id: "SortName"
+ }, {
+ name: Globalize.translate("OptionAlbumArtist"),
+ id: "AlbumArtist,SortName"
+ }, {
+ name: Globalize.translate("OptionCommunityRating"),
+ id: "CommunityRating,SortName"
+ }, {
+ name: Globalize.translate("OptionCriticRating"),
+ id: "CriticRating,SortName"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SortName"
+ }, {
+ name: Globalize.translate("OptionReleaseDate"),
+ id: "ProductionYear,PremiereDate,SortName"
+ }],
+ callback: function () {
+ getQuery().StartIndex = 0;
+ reloadItems(tabContent);
+ },
+ query: getQuery(),
+ button: e.target
+ });
+ });
+ 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) {
+ var viewStyle = e.detail.viewStyle;
+ getPageData().view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(), viewStyle);
+ getQuery().StartIndex = 0;
+ onViewStyleChange();
+ reloadItems(tabContent);
+ });
+ tabContent.querySelector(".btnPlayAll").addEventListener("click", playAll);
+ tabContent.querySelector(".btnShuffle").addEventListener("click", shuffle);
+ }
+
+ initPage(tabContent);
+ onViewStyleChange();
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ updateFilterControls(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/music/musicartists.js b/src/controllers/music/musicartists.js
index b28385169..5159f635f 100644
--- a/src/controllers/music/musicartists.js
+++ b/src/controllers/music/musicartists.js
@@ -1,144 +1,226 @@
-define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function(layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
+define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "alphaPicker", "listView", "cardBuilder", "apphost", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, alphaPicker, listView, cardBuilder, appHost) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData(context) {
- var key = getSavedQueryKey(context),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
- StartIndex: 0,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- Limit: 100
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey(context);
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,SortName,BasicSyncInfo",
+ StartIndex: 0,
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
+ Limit: 100
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery(context) {
- return getPageData(context).query
+ return getPageData(context).query;
}
function getSavedQueryKey(context) {
- return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey(self.mode)), context.savedQueryKey
+ if (!context.savedQueryKey) {
+ context.savedQueryKey = libraryBrowser.getSavedQueryKey(self.mode);
+ }
+
+ return context.savedQueryKey;
}
function onViewStyleChange() {
- var viewStyle = self.getCurrentViewStyle(),
- itemsContainer = tabContent.querySelector(".itemsContainer");
- "List" == viewStyle ? (itemsContainer.classList.add("vertical-list"), itemsContainer.classList.remove("vertical-wrap")) : (itemsContainer.classList.remove("vertical-list"), itemsContainer.classList.add("vertical-wrap")), itemsContainer.innerHTML = ""
+ var viewStyle = self.getCurrentViewStyle();
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+
+ 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.innerHTML = "";
}
function reloadItems(page) {
loading.show();
isLoading = true;
var query = getQuery(page);
- ("albumartists" == self.mode ? ApiClient.getAlbumArtists(ApiClient.getCurrentUserId(), query) : ApiClient.getArtists(ApiClient.getCurrentUserId(), query)).then(function(result) {
+ var promise = self.mode == 'albumartists' ?
+ ApiClient.getAlbumArtists(ApiClient.getCurrentUserId(), query) :
+ ApiClient.getArtists(ApiClient.getCurrentUserId(), query);
+ promise.then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
- query.StartIndex += query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex += query.Limit;
+ reloadItems(tabContent);
}
function onPreviousPageClick() {
- if (isLoading) return;
- query.StartIndex -= query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex -= query.Limit;
+ reloadItems(tabContent);
}
- window.scrollTo(0, 0), updateFilterControls(page);
- var html, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- viewStyle = self.getCurrentViewStyle();
- html = "List" == viewStyle ? listView.getListViewHtml({
- items: result.Items,
- sortBy: query.SortBy
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "square",
- context: "music",
- showTitle: !0,
- coverImage: !0,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "square",
- context: "music",
- showTitle: !0,
- coverImage: !0,
- lazy: !0,
- centerText: !0,
- overlayPlayButton: !0
+
+ window.scrollTo(0, 0);
+ updateFilterControls(page);
+ var html;
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
});
- var i, length, elems = tabContent.querySelectorAll(".paging");
- for (i = 0, length = elems.length; i < length; i++) elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onPreviousPageClick);
+ var viewStyle = self.getCurrentViewStyle();
+ if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ sortBy: query.SortBy
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "square",
+ context: "music",
+ showTitle: true,
+ coverImage: true,
+ cardLayout: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "square",
+ context: "music",
+ showTitle: true,
+ coverImage: true,
+ lazy: true,
+ centerText: true,
+ overlayPlayButton: true
+ });
+ }
+ var i;
+ var length;
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].innerHTML = pagingHtml;
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onNextPageClick);
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
var itemsContainer = tabContent.querySelector(".itemsContainer");
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
loading.hide();
isLoading = false;
- })
+ });
}
function updateFilterControls(tabContent) {
var query = getQuery(tabContent);
- self.alphaPicker.value(query.NameStartsWithOrGreater)
+ self.alphaPicker.value(query.NameStartsWithOrGreater);
}
- var self = this,
- data = {},
- isLoading = false;
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
- var filterDialog = new filterDialogFactory({
- query: getQuery(tabContent),
- mode: self.mode,
- serverId: ApiClient.serverId()
- });
- events.on(filterDialog, "filterchange", function() {
- getQuery(tabContent).StartIndex = 0, reloadItems(tabContent)
- }), filterDialog.show()
- })
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- },
- function(tabContent) {
- var alphaPickerElement = tabContent.querySelector(".alphaPicker");
- if (alphaPickerElement.addEventListener("alphavaluechanged", function(e) {
- var newValue = e.detail.value,
- query = getQuery(tabContent);
- query.NameStartsWithOrGreater = newValue, query.StartIndex = 0, reloadItems(tabContent)
- }), self.alphaPicker = new alphaPicker({
- element: alphaPickerElement,
- valueChangeEvent: "click"
- }), layoutManager.desktop || layoutManager.mobile) {
- tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
- var itemsContainer = tabContent.querySelector(".itemsContainer");
- itemsContainer.classList.remove("padded-left-withalphapicker"), itemsContainer.classList.add("padded-right-withalphapicker")
- }
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- self.showFilterMenu()
+
+ var self = this;
+ var data = {};
+ var isLoading = false;
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
+ var filterDialog = new filterDialogFactory({
+ query: getQuery(tabContent),
+ mode: self.mode,
+ serverId: ApiClient.serverId()
});
- 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) {
- var viewStyle = e.detail.viewStyle;
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), getQuery(tabContent).StartIndex = 0, onViewStyleChange(), reloadItems(tabContent)
- })
- }(tabContent), onViewStyleChange(), self.renderTab = function() {
- reloadItems(tabContent), updateFilterControls(tabContent)
- }, self.destroy = function() {}
- }
+ events.on(filterDialog, "filterchange", function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ filterDialog.show();
+ });
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ function initPage(tabContent) {
+ var alphaPickerElement = tabContent.querySelector(".alphaPicker");
+
+ alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
+ var newValue = e.detail.value;
+ var query = getQuery(tabContent);
+ query.NameStartsWithOrGreater = newValue;
+ query.StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ self.alphaPicker = new alphaPicker({
+ element: alphaPickerElement,
+ valueChangeEvent: "click"
+ });
+ if (layoutManager.desktop || layoutManager.mobile) {
+ tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+ itemsContainer.classList.remove("padded-left-withalphapicker");
+ itemsContainer.classList.add("padded-right-withalphapicker");
+ }
+
+ 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(","));
+ });
+ btnSelectView.addEventListener("layoutchange", function (e) {
+ var viewStyle = e.detail.viewStyle;
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ getQuery(tabContent).StartIndex = 0;
+ onViewStyleChange();
+ reloadItems(tabContent);
+ });
+ }
+
+ initPage(tabContent);
+ onViewStyleChange();
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ updateFilterControls(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/music/musicgenres.js b/src/controllers/music/musicgenres.js
index f66afcdb2..ed1efc0a6 100644
--- a/src/controllers/music/musicgenres.js
+++ b/src/controllers/music/musicgenres.js
@@ -1,91 +1,126 @@
-define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], function(libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
+define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData() {
- var key = getSavedQueryKey(),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,ItemCounts",
- StartIndex: 0
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey();
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,ItemCounts",
+ StartIndex: 0
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery() {
- return getPageData().query
+ return getPageData().query;
}
function getSavedQueryKey() {
- return libraryBrowser.getSavedQueryKey("genres")
+ return libraryBrowser.getSavedQueryKey("genres");
}
function getPromise() {
loading.show();
var query = getQuery();
- return ApiClient.getGenres(ApiClient.getCurrentUserId(), query)
+ return ApiClient.getGenres(ApiClient.getCurrentUserId(), query);
}
function reloadItems(context, promise) {
var query = getQuery();
- promise.then(function(result) {
- var html = "",
- viewStyle = self.getCurrentViewStyle();
- "Thumb" == viewStyle ? html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "music",
- centerText: !0,
- overlayMoreButton: !0,
- showTitle: !0
- }) : "ThumbCard" == viewStyle ? html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "music",
- cardLayout: !0,
- showTitle: !0
- }) : "PosterCard" == viewStyle ? html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "auto",
- context: "music",
- cardLayout: !0,
- showTitle: !0
- }) : "Poster" == viewStyle && (html = cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "auto",
- context: "music",
- centerText: !0,
- overlayMoreButton: !0,
- showTitle: !0
- }));
+ promise.then(function (result) {
+ var html = "";
+ var viewStyle = self.getCurrentViewStyle();
+
+ if (viewStyle == "Thumb") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: 'music',
+ centerText: true,
+ overlayMoreButton: true,
+ showTitle: true
+ });
+ } else if (viewStyle == "ThumbCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: 'music',
+ cardLayout: true,
+ showTitle: true,
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "auto",
+ context: 'music',
+ cardLayout: true,
+ showTitle: true,
+ });
+ } else if (viewStyle == "Poster") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "auto",
+ context: 'music',
+ centerText: true,
+ overlayMoreButton: true,
+ showTitle: true
+ });
+ }
+
var elem = context.querySelector("#items");
- elem.innerHTML = html, imageLoader.lazyChildren(elem), libraryBrowser.saveQueryValues(getSavedQueryKey(), query), loading.hide()
- })
+ elem.innerHTML = html;
+ imageLoader.lazyChildren(elem);
+ libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
+ loading.hide();
+ });
}
function fullyReload() {
- self.preRender(), self.renderTab()
+ self.preRender();
+ self.renderTab();
}
- var self = this,
- data = {};
- self.getViewStyles = function() {
- return "Poster,PosterCard,Thumb,ThumbCard".split(",")
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- }, self.setCurrentViewStyle = function(viewStyle) {
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), fullyReload()
- }, self.enableViewSelection = !0;
+
+ var self = this;
+ var data = {};
+
+ self.getViewStyles = function () {
+ return "Poster,PosterCard,Thumb,ThumbCard".split(",");
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ self.setCurrentViewStyle = function (viewStyle) {
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ fullyReload();
+ };
+
+ self.enableViewSelection = true;
var promise;
- self.preRender = function() {
- promise = getPromise()
- }, self.renderTab = function() {
- reloadItems(tabContent, promise)
- }
- }
-});
\ No newline at end of file
+
+ self.preRender = function () {
+ promise = getPromise();
+ };
+
+ self.renderTab = function () {
+ reloadItems(tabContent, promise);
+ };
+ };
+});
diff --git a/src/controllers/music/musicplaylists.js b/src/controllers/music/musicplaylists.js
index 511ace73a..964896077 100644
--- a/src/controllers/music/musicplaylists.js
+++ b/src/controllers/music/musicplaylists.js
@@ -1,64 +1,81 @@
-define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], function(libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
+define(["libraryBrowser", "cardBuilder", "apphost", "imageLoader", "loading"], function (libraryBrowser, cardBuilder, appHost, imageLoader, loading) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData() {
- var key = getSavedQueryKey(),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Playlist",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,SortName,CanDelete",
- StartIndex: 0
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey();
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Playlist",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,SortName,CanDelete",
+ StartIndex: 0
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery() {
- return getPageData().query
+ return getPageData().query;
}
function getSavedQueryKey() {
- return libraryBrowser.getSavedQueryKey("genres")
+ return libraryBrowser.getSavedQueryKey("genres");
}
function getPromise() {
loading.show();
var query = getQuery();
- return ApiClient.getItems(ApiClient.getCurrentUserId(), query)
+ return ApiClient.getItems(ApiClient.getCurrentUserId(), query);
}
function reloadItems(context, promise) {
var query = getQuery();
- promise.then(function(result) {
+ promise.then(function (result) {
var html = "";
html = cardBuilder.getCardsHtml({
items: result.Items,
shape: "square",
- showTitle: !0,
- coverImage: !0,
- centerText: !0,
- overlayPlayButton: !0,
- allowBottomPadding: !0,
- cardLayout: !1
+ showTitle: true,
+ coverImage: true,
+ centerText: true,
+ overlayPlayButton: true,
+ allowBottomPadding: true,
+ cardLayout: false
});
var elem = context.querySelector("#items");
- elem.innerHTML = html, imageLoader.lazyChildren(elem), libraryBrowser.saveQueryValues(getSavedQueryKey(), query), loading.hide()
- })
+ elem.innerHTML = html;
+ imageLoader.lazyChildren(elem);
+ libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
+ loading.hide();
+ });
}
- var self = this,
- data = {};
- self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
+
+ var self = this;
+ var data = {};
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
};
+
var promise;
- self.preRender = function() {
- promise = getPromise()
- }, self.renderTab = function() {
- reloadItems(tabContent, promise)
- }
- }
-});
\ No newline at end of file
+
+ self.preRender = function () {
+ promise = getPromise();
+ };
+
+ self.renderTab = function () {
+ reloadItems(tabContent, promise);
+ };
+ };
+});
diff --git a/src/controllers/music/musicrecommended.js b/src/controllers/music/musicrecommended.js
index 5dee7c5f5..fc3371833 100644
--- a/src/controllers/music/musicrecommended.js
+++ b/src/controllers/music/musicrecommended.js
@@ -1,49 +1,65 @@
-define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "cardBuilder", "dom", "apphost", "imageLoader", "libraryMenu", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button", "flexStyles"], function(browser, layoutManager, userSettings, inputManager, loading, cardBuilder, dom, appHost, imageLoader, libraryMenu, playbackManager, mainTabsManager) {
+define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "cardBuilder", "dom", "apphost", "imageLoader", "libraryMenu", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-tabs", "emby-button", "flexStyles"], function (browser, layoutManager, userSettings, inputManager, loading, cardBuilder, dom, appHost, imageLoader, libraryMenu, playbackManager, mainTabsManager) {
"use strict";
function itemsPerRow() {
var screenWidth = dom.getWindowSize().innerWidth;
- return screenWidth >= 1920 ? 9 : screenWidth >= 1200 ? 12 : screenWidth >= 1e3 ? 10 : 8
+
+ if (screenWidth >= 1920) {
+ return 9;
+ }
+
+ if (screenWidth >= 1200) {
+ return 12;
+ }
+
+ if (screenWidth >= 1000) {
+ return 10;
+ }
+
+ return 8;
}
function enableScrollX() {
- return !layoutManager.desktop
+ return !layoutManager.desktop;
}
function getSquareShape() {
- return enableScrollX() ? "overflowSquare" : "square"
+ return enableScrollX() ? "overflowSquare" : "square";
}
function loadLatest(page, parentId) {
loading.show();
- var userId = ApiClient.getCurrentUserId(),
- options = {
- IncludeItemTypes: "Audio",
- Limit: enableScrollX() ? 3 * itemsPerRow() : 2 * itemsPerRow(),
- Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
- ParentId: parentId,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- EnableTotalRecordCount: !1
- };
- ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options)).then(function(items) {
- var elem = page.querySelector("#recentlyAddedSongs"),
- supportsImageAnalysis = appHost.supports("imageanalysis");
- supportsImageAnalysis = !1, elem.innerHTML = cardBuilder.getCardsHtml({
+ var userId = ApiClient.getCurrentUserId();
+ var options = {
+ IncludeItemTypes: "Audio",
+ Limit: enableScrollX() ? 3 * itemsPerRow() : 2 * itemsPerRow(),
+ Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ 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");
+ supportsImageAnalysis = false;
+ elem.innerHTML = cardBuilder.getCardsHtml({
items: items,
- showUnplayedIndicator: !1,
- showLatestItemsPopup: !1,
+ showUnplayedIndicator: false,
+ showLatestItemsPopup: false,
shape: getSquareShape(),
- showTitle: !0,
- showParentTitle: !0,
- lazy: !0,
+ showTitle: true,
+ showParentTitle: true,
+ lazy: true,
centerText: !supportsImageAnalysis,
overlayPlayButton: !supportsImageAnalysis,
allowBottomPadding: !enableScrollX(),
cardLayout: supportsImageAnalysis,
- coverImage: !0
- }), imageLoader.lazyChildren(elem), loading.hide()
- })
+ coverImage: true
+ });
+ imageLoader.lazyChildren(elem);
+ loading.hide();
+ });
}
function loadRecentlyPlayed(page, parentId) {
@@ -52,34 +68,42 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
SortOrder: "Descending",
IncludeItemTypes: "Audio",
Limit: itemsPerRow(),
- Recursive: !0,
+ Recursive: true,
Fields: "PrimaryImageAspectRatio,AudioInfo",
Filters: "IsPlayed",
ParentId: parentId,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- EnableTotalRecordCount: !1
+ EnableTotalRecordCount: false
};
- ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function(result) {
+ ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
var elem = page.querySelector("#recentlyPlayed");
- result.Items.length ? elem.classList.remove("hide") : elem.classList.add("hide");
- var itemsContainer = elem.querySelector(".itemsContainer"),
- supportsImageAnalysis = appHost.supports("imageanalysis");
- supportsImageAnalysis = !1, itemsContainer.innerHTML = cardBuilder.getCardsHtml({
+
+ if (result.Items.length) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
+ }
+
+ var itemsContainer = elem.querySelector(".itemsContainer");
+ var supportsImageAnalysis = appHost.supports("imageanalysis");
+ supportsImageAnalysis = false;
+ itemsContainer.innerHTML = cardBuilder.getCardsHtml({
items: result.Items,
- showUnplayedIndicator: !1,
+ showUnplayedIndicator: false,
shape: getSquareShape(),
- showTitle: !0,
- showParentTitle: !0,
+ showTitle: true,
+ showParentTitle: true,
action: "instantmix",
- lazy: !0,
+ lazy: true,
centerText: !supportsImageAnalysis,
overlayMoreButton: !supportsImageAnalysis,
allowBottomPadding: !enableScrollX(),
cardLayout: supportsImageAnalysis,
- coverImage: !0
- }), imageLoader.lazyChildren(itemsContainer)
- })
+ coverImage: true
+ });
+ imageLoader.lazyChildren(itemsContainer);
+ });
}
function loadFrequentlyPlayed(page, parentId) {
@@ -88,40 +112,53 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
SortOrder: "Descending",
IncludeItemTypes: "Audio",
Limit: itemsPerRow(),
- Recursive: !0,
+ Recursive: true,
Fields: "PrimaryImageAspectRatio,AudioInfo",
Filters: "IsPlayed",
ParentId: parentId,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- EnableTotalRecordCount: !1
+ EnableTotalRecordCount: false
};
- ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function(result) {
+ ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
var elem = page.querySelector("#topPlayed");
- result.Items.length ? elem.classList.remove("hide") : elem.classList.add("hide");
- var itemsContainer = elem.querySelector(".itemsContainer"),
- supportsImageAnalysis = appHost.supports("imageanalysis");
- supportsImageAnalysis = !1, itemsContainer.innerHTML = cardBuilder.getCardsHtml({
+
+ if (result.Items.length) {
+ elem.classList.remove("hide");
+ } else {
+ elem.classList.add("hide");
+ }
+
+ var itemsContainer = elem.querySelector(".itemsContainer");
+ var supportsImageAnalysis = appHost.supports("imageanalysis");
+ supportsImageAnalysis = false;
+ itemsContainer.innerHTML = cardBuilder.getCardsHtml({
items: result.Items,
- showUnplayedIndicator: !1,
+ showUnplayedIndicator: false,
shape: getSquareShape(),
- showTitle: !0,
- showParentTitle: !0,
+ showTitle: true,
+ showParentTitle: true,
action: "instantmix",
- lazy: !0,
+ lazy: true,
centerText: !supportsImageAnalysis,
overlayMoreButton: !supportsImageAnalysis,
allowBottomPadding: !enableScrollX(),
cardLayout: supportsImageAnalysis,
- coverImage: !0
- }), imageLoader.lazyChildren(itemsContainer)
- })
+ coverImage: true
+ });
+ imageLoader.lazyChildren(itemsContainer);
+ });
}
function loadSuggestionsTab(page, tabContent, parentId) {
- console.log("loadSuggestionsTab"), loadLatest(tabContent, parentId), loadRecentlyPlayed(tabContent, parentId), loadFrequentlyPlayed(tabContent, parentId), require(["components/favoriteitems"], function(favoriteItems) {
- favoriteItems.render(tabContent, ApiClient.getCurrentUserId(), parentId, ["favoriteArtists", "favoriteAlbums", "favoriteSongs"])
- })
+ console.log("loadSuggestionsTab");
+ loadLatest(tabContent, parentId);
+ loadRecentlyPlayed(tabContent, parentId);
+ loadFrequentlyPlayed(tabContent, parentId);
+
+ require(["components/favoriteitems"], function (favoriteItems) {
+ favoriteItems.render(tabContent, ApiClient.getCurrentUserId(), parentId, ["favoriteArtists", "favoriteAlbums", "favoriteSongs"]);
+ });
}
function getTabs() {
@@ -142,135 +179,227 @@ define(["browser", "layoutManager", "userSettings", "inputManager", "loading", "
}, {
name: Globalize.translate("ButtonSearch"),
cssClass: "searchTabButton"
- }]
+ }];
}
function getDefaultTabIndex(folderId) {
switch (userSettings.get("landing-" + folderId)) {
case "albums":
return 1;
+
case "albumartists":
return 2;
+
case "artists":
return 3;
+
case "playlists":
return 4;
+
case "songs":
return 5;
+
case "genres":
return 6;
+
default:
- return 0
+ return 0;
}
}
- return function(view, params) {
+
+ return function (view, params) {
function reload() {
loading.show();
var tabContent = view.querySelector(".pageTabContent[data-index='0']");
- loadSuggestionsTab(view, tabContent, params.topParentId)
+ loadSuggestionsTab(view, tabContent, params.topParentId);
}
function enableScrollX() {
- return browser.mobile
+ return browser.mobile;
}
function setScrollClasses(elem, scrollX) {
- scrollX ? (elem.classList.add("hiddenScrollX"), layoutManager.tv && elem.classList.add("smoothScrollX"), elem.classList.add("scrollX"), elem.classList.remove("vertical-wrap")) : (elem.classList.remove("hiddenScrollX"), elem.classList.remove("smoothScrollX"), elem.classList.remove("scrollX"), elem.classList.add("vertical-wrap"))
+ if (scrollX) {
+ elem.classList.add("hiddenScrollX");
+
+ if (layoutManager.tv) {
+ elem.classList.add("smoothScrollX");
+ }
+
+ 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");
+ }
}
function onBeforeTabChange(e) {
- preLoadTab(view, parseInt(e.detail.selectedTabIndex))
+ preLoadTab(view, parseInt(e.detail.selectedTabIndex));
}
function onTabChange(e) {
- loadTab(view, parseInt(e.detail.selectedTabIndex))
+ loadTab(view, parseInt(e.detail.selectedTabIndex));
}
function getTabContainers() {
- return view.querySelectorAll(".pageTabContent")
+ return view.querySelectorAll(".pageTabContent");
}
function initTabs() {
- mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange)
+ mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange);
}
function getTabController(page, index, callback) {
var depends = [];
+
switch (index) {
case 0:
break;
+
case 1:
depends.push("controllers/music/musicalbums");
break;
+
case 2:
case 3:
depends.push("controllers/music/musicartists");
break;
+
case 4:
depends.push("controllers/music/musicplaylists");
break;
+
case 5:
depends.push("controllers/music/songs");
break;
+
case 6:
depends.push("controllers/music/musicgenres");
break;
+
case 7:
- depends.push("scripts/searchtab")
+ depends.push("scripts/searchtab");
}
- require(depends, function(controllerFactory) {
+
+ require(depends, function (controllerFactory) {
var tabContent;
- 0 == index && (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), self.tabContent = tabContent);
+
+ if (0 == index) {
+ tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+ self.tabContent = tabContent;
+ }
+
var controller = tabControllers[index];
- controller || (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), controller = 0 === index ? self : 7 === index ? new controllerFactory(view, tabContent, {
- collectionType: "music",
- parentId: params.topParentId
- }) : new controllerFactory(view, params, tabContent), 2 == index ? controller.mode = "albumartists" : 3 == index && (controller.mode = "artists"), tabControllers[index] = controller, controller.initTab && controller.initTab()), callback(controller)
- })
+
+ if (!controller) {
+ tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+
+ if (index === 0) {
+ controller = self;
+ } else if (index === 7) {
+ controller = new controllerFactory(view, tabContent, {
+ collectionType: "music",
+ parentId: params.topParentId
+ });
+ } else {
+ controller = new controllerFactory(view, params, tabContent);
+ }
+
+ if (index == 2) {
+ controller.mode = "albumartists";
+ } else if (index == 3) {
+ controller.mode = "artists";
+ }
+
+ tabControllers[index] = controller;
+ if (controller.initTab) {
+ controller.initTab();
+ }
+ }
+
+ callback(controller);
+ });
}
function preLoadTab(page, index) {
- getTabController(page, index, function(controller) {
- -1 == renderedTabs.indexOf(index) && controller.preRender && controller.preRender()
- })
+ getTabController(page, index, function (controller) {
+ if (renderedTabs.indexOf(index) == -1 && controller.preRender) {
+ controller.preRender();
+ }
+ });
}
function loadTab(page, index) {
- currentTabIndex = index, getTabController(page, index, function(controller) {
- initialTabIndex = null, -1 == renderedTabs.indexOf(index) && (renderedTabs.push(index), controller.renderTab())
- })
+ currentTabIndex = index;
+ getTabController(page, index, function (controller) {
+ initialTabIndex = null;
+
+ if (renderedTabs.indexOf(index) == -1) {
+ renderedTabs.push(index);
+ controller.renderTab();
+ }
+ });
}
function onInputCommand(e) {
switch (e.detail.command) {
case "search":
- e.preventDefault(), Dashboard.navigate("search.html?collectionType=music&parentId=" + params.topParentId)
+ e.preventDefault();
+ Dashboard.navigate("search.html?collectionType=music&parentId=" + params.topParentId);
}
}
- var isViewRestored, self = this,
- currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)),
- initialTabIndex = currentTabIndex;
- self.initTab = function() {
- for (var tabContent = view.querySelector(".pageTabContent[data-index='0']"), containers = tabContent.querySelectorAll(".itemsContainer"), i = 0, length = containers.length; i < length; i++) setScrollClasses(containers[i], enableScrollX())
- }, self.renderTab = function() {
- reload()
- };
- var tabControllers = [],
- renderedTabs = [];
- view.addEventListener("viewshow", function(e) {
- if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute("data-title")) {
- var parentId = params.topParentId;
- parentId ? ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function(item) {
- view.setAttribute("data-title", item.Name), libraryMenu.setTitle(item.Name)
- }) : (view.setAttribute("data-title", Globalize.translate("TabMusic")), libraryMenu.setTitle(Globalize.translate("TabMusic")))
+
+ var isViewRestored;
+ var self = this;
+ var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
+ var initialTabIndex = currentTabIndex;
+
+ self.initTab = function () {
+ var tabContent = view.querySelector(".pageTabContent[data-index='0']");
+ var containers = tabContent.querySelectorAll(".itemsContainer");
+
+ for (var i = 0, length = containers.length; i < length; i++) {
+ setScrollClasses(containers[i], enableScrollX());
}
- inputManager.on(window, onInputCommand)
- }), view.addEventListener("viewbeforehide", function(e) {
- inputManager.off(window, onInputCommand)
- }), view.addEventListener("viewdestroy", function(e) {
- tabControllers.forEach(function(t) {
- t.destroy && t.destroy()
- })
- })
- }
-});
\ No newline at end of file
+ };
+
+ self.renderTab = function () {
+ reload();
+ };
+
+ var tabControllers = [];
+ var renderedTabs = [];
+ view.addEventListener("viewshow", function (e) {
+ isViewRestored = e.detail.isRestored;
+ initTabs();
+ 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);
+ libraryMenu.setTitle(item.Name);
+ });
+ } else {
+ view.setAttribute("data-title", Globalize.translate("TabMusic"));
+ libraryMenu.setTitle(Globalize.translate("TabMusic"));
+ }
+ }
+
+ inputManager.on(window, onInputCommand);
+ });
+ view.addEventListener("viewbeforehide", function (e) {
+ inputManager.off(window, onInputCommand);
+ });
+ view.addEventListener("viewdestroy", function (e) {
+ tabControllers.forEach(function (t) {
+ if (t.destroy) {
+ t.destroy();
+ }
+ });
+ });
+ };
+});
diff --git a/src/controllers/music/songs.js b/src/controllers/music/songs.js
index f03abe75f..4806195ed 100644
--- a/src/controllers/music/songs.js
+++ b/src/controllers/music/songs.js
@@ -1,135 +1,185 @@
-define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-itemscontainer"], function(events, libraryBrowser, imageLoader, listView, loading) {
+define(["events", "libraryBrowser", "imageLoader", "listView", "loading", "emby-itemscontainer"], function (events, libraryBrowser, imageLoader, listView, loading) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData(context) {
- var key = getSavedQueryKey(context),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "Album,SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Audio",
- Recursive: !0,
- Fields: "AudioInfo,ParentId",
- Limit: 100,
- StartIndex: 0,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary"
- }
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey(context);
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "Album,SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Audio",
+ Recursive: true,
+ Fields: "AudioInfo,ParentId",
+ Limit: 100,
+ StartIndex: 0,
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary"
+ }
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery(context) {
- return getPageData(context).query
+ return getPageData(context).query;
}
function getSavedQueryKey(context) {
- return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey("songs")), context.savedQueryKey
+ if (!context.savedQueryKey) {
+ context.savedQueryKey = libraryBrowser.getSavedQueryKey("songs");
+ }
+
+ return context.savedQueryKey;
}
function reloadItems(page) {
loading.show();
isLoading = true;
var query = getQuery(page);
- ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function(result) {
+ ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
- query.StartIndex += query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex += query.Limit;
+ reloadItems(tabContent);
}
function onPreviousPageClick() {
- if (isLoading) return;
- query.StartIndex -= query.Limit, reloadItems(tabContent)
+ if (isLoading) {
+ return;
+ }
+
+ query.StartIndex -= query.Limit;
+ reloadItems(tabContent);
}
+
window.scrollTo(0, 0);
- var i, length, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- html = listView.getListViewHtml({
- items: result.Items,
- action: "playallfromhere",
- smallIcon: !0,
- artist: !0,
- addToListButton: !0
- }),
- elems = tabContent.querySelectorAll(".paging");
- for (i = 0, length = elems.length; i < length; i++) elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onPreviousPageClick);
+ var i;
+ var length;
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
+ });
+ var html = listView.getListViewHtml({
+ items: result.Items,
+ action: "playallfromhere",
+ smallIcon: true,
+ artist: true,
+ addToListButton: true
+ });
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].innerHTML = pagingHtml;
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onNextPageClick);
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
var itemsContainer = tabContent.querySelector(".itemsContainer");
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
loading.hide();
isLoading = false;
- })
+ });
}
- var self = this,
- data = {},
- isLoading = false;
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
- var filterDialog = new filterDialogFactory({
- query: getQuery(tabContent),
- mode: "songs",
- serverId: ApiClient.serverId()
- });
- events.on(filterDialog, "filterchange", function() {
- getQuery(tabContent).StartIndex = 0, reloadItems(tabContent)
- }), filterDialog.show()
- })
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- },
- function(tabContent) {
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- self.showFilterMenu()
- }), tabContent.querySelector(".btnSort").addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionTrackName"),
- id: "Name"
- }, {
- name: Globalize.translate("OptionAlbum"),
- id: "Album,SortName"
- }, {
- name: Globalize.translate("OptionAlbumArtist"),
- id: "AlbumArtist,Album,SortName"
- }, {
- name: Globalize.translate("OptionArtist"),
- id: "Artist,Album,SortName"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SortName"
- }, {
- name: Globalize.translate("OptionDatePlayed"),
- id: "DatePlayed,SortName"
- }, {
- name: Globalize.translate("OptionPlayCount"),
- id: "PlayCount,SortName"
- }, {
- name: Globalize.translate("OptionReleaseDate"),
- id: "PremiereDate,AlbumArtist,Album,SortName"
- }, {
- name: Globalize.translate("OptionRuntime"),
- id: "Runtime,AlbumArtist,Album,SortName"
- }],
- callback: function() {
- getQuery(tabContent).StartIndex = 0, reloadItems(tabContent)
- },
- query: getQuery(tabContent),
- button: e.target
- })
- })
- }(tabContent), self.renderTab = function() {
- reloadItems(tabContent)
- }, self.destroy = function() {}
- }
+
+ var self = this;
+ var data = {};
+ var isLoading = false;
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
+ var filterDialog = new filterDialogFactory({
+ query: getQuery(tabContent),
+ mode: "songs",
+ serverId: ApiClient.serverId()
+ });
+ events.on(filterDialog, "filterchange", function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ filterDialog.show();
+ });
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ function initPage(tabContent) {
+ tabContent.querySelector(".btnFilter").addEventListener("click", function () {
+ self.showFilterMenu();
+ });
+ tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionTrackName"),
+ id: "Name"
+ }, {
+ name: Globalize.translate("OptionAlbum"),
+ id: "Album,SortName"
+ }, {
+ name: Globalize.translate("OptionAlbumArtist"),
+ id: "AlbumArtist,Album,SortName"
+ }, {
+ name: Globalize.translate("OptionArtist"),
+ id: "Artist,Album,SortName"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SortName"
+ }, {
+ name: Globalize.translate("OptionDatePlayed"),
+ id: "DatePlayed,SortName"
+ }, {
+ name: Globalize.translate("OptionPlayCount"),
+ id: "PlayCount,SortName"
+ }, {
+ name: Globalize.translate("OptionReleaseDate"),
+ id: "PremiereDate,AlbumArtist,Album,SortName"
+ }, {
+ name: Globalize.translate("OptionRuntime"),
+ id: "Runtime,AlbumArtist,Album,SortName"
+ }],
+ callback: function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems(tabContent);
+ },
+ query: getQuery(tabContent),
+ button: e.target
+ });
+ });
+ }
+
+ initPage(tabContent);
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/notificationsetting.js b/src/controllers/notificationsetting.js
index a9333ba5a..70e6adaf6 100644
--- a/src/controllers/notificationsetting.js
+++ b/src/controllers/notificationsetting.js
@@ -1,85 +1,122 @@
-define(["jQuery", "emby-checkbox", "fnchecked"], function($) {
+define(["jQuery", "emby-checkbox", "fnchecked"], function ($) {
"use strict";
function fillItems(elem, items, cssClass, idPrefix, currentList, isEnabledList) {
var html = '
';
- html += items.map(function(u) {
- var isChecked = isEnabledList ? -1 != currentList.indexOf(u.Id) : -1 == currentList.indexOf(u.Id),
- checkedHtml = isChecked ? ' checked="checked"' : "";
- return '" + u.Name + " "
- }).join(""), html += "
", elem.html(html).trigger("create")
+ html += items.map(function (u) {
+ var isChecked = isEnabledList ? currentList.indexOf(u.Id) != -1 : currentList.indexOf(u.Id) == -1;
+ var checkedHtml = isChecked ? ' checked="checked"' : "";
+ return '
" + u.Name + " ";
+ }).join("");
+ html += "
";
+ elem.html(html).trigger("create");
}
function reload(page) {
- var type = getParameterByName("type"),
- promise1 = ApiClient.getUsers(),
- promise2 = ApiClient.getNamedConfiguration(notificationsConfigurationKey),
- promise3 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Types")),
- promise4 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Services"));
- Promise.all([promise1, promise2, promise3, promise4]).then(function(responses) {
- var users = responses[0],
- notificationOptions = responses[1],
- types = responses[2],
- services = responses[3],
- notificationConfig = notificationOptions.Options.filter(function(n) {
- return n.Type == type
- })[0],
- typeInfo = types.filter(function(n) {
- return n.Type == type
- })[0] || {};
- typeInfo.IsBasedOnUserEvent ? $(".monitorUsers", page).show() : $(".monitorUsers", page).hide(), $(".notificationType", page).html(typeInfo.Name || "Unknown Notification"), notificationConfig || (notificationConfig = {
- DisabledMonitorUsers: [],
- SendToUsers: [],
- DisabledServices: [],
- SendToUserMode: "Admins"
- }), fillItems($(".monitorUsersList", page), users, "chkMonitor", "chkMonitor", notificationConfig.DisabledMonitorUsers), fillItems($(".sendToUsersList", page), users, "chkSendTo", "chkSendTo", notificationConfig.SendToUsers, !0), fillItems($(".servicesList", page), services, "chkService", "chkService", notificationConfig.DisabledServices), $("#chkEnabled", page).checked(notificationConfig.Enabled || !1), $("#selectUsers", page).val(notificationConfig.SendToUserMode).trigger("change")
- })
+ 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"));
+ Promise.all([promise1, promise2, promise3, promise4]).then(function (responses) {
+ var users = responses[0];
+ var notificationOptions = responses[1];
+ var types = responses[2];
+ var services = responses[3];
+ var notificationConfig = notificationOptions.Options.filter(function (n) {
+ return n.Type == type;
+ })[0];
+ var typeInfo = types.filter(function (n) {
+ return n.Type == type;
+ })[0] || {};
+
+ if (typeInfo.IsBasedOnUserEvent) {
+ $(".monitorUsers", page).show();
+ } else {
+ $(".monitorUsers", page).hide();
+ }
+
+ $(".notificationType", page).html(typeInfo.Name || "Unknown Notification");
+
+ if (!notificationConfig) {
+ notificationConfig = {
+ DisabledMonitorUsers: [],
+ SendToUsers: [],
+ DisabledServices: [],
+ 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");
+ });
}
function save(page) {
- var type = getParameterByName("type"),
- promise1 = ApiClient.getNamedConfiguration(notificationsConfigurationKey),
- promise2 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Types"));
- Promise.all([promise1, promise2]).then(function(responses) {
- var notificationOptions = responses[0],
- types = responses[1],
- notificationConfig = notificationOptions.Options.filter(function(n) {
- return n.Type == type
- })[0];
- notificationConfig || (notificationConfig = {
- Type: type
- }, notificationOptions.Options.push(notificationConfig));
- types.filter(function(n) {
- return n.Type == type
+ var type = getParameterByName("type");
+ var promise1 = ApiClient.getNamedConfiguration(notificationsConfigurationKey);
+ var promise2 = ApiClient.getJSON(ApiClient.getUrl("Notifications/Types"));
+ Promise.all([promise1, promise2]).then(function (responses) {
+ var notificationOptions = responses[0];
+ var types = responses[1];
+ var notificationConfig = notificationOptions.Options.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) {
- return !c.checked
- }).map(function(c) {
- return c.getAttribute("data-itemid")
- }), notificationConfig.SendToUsers = $(".chkSendTo", page).get().filter(function(c) {
- return c.checked
- }).map(function(c) {
- return c.getAttribute("data-itemid")
- }), notificationConfig.DisabledServices = $(".chkService", page).get().filter(function(c) {
- return !c.checked
- }).map(function(c) {
- return c.getAttribute("data-itemid")
- }), ApiClient.updateNamedConfiguration(notificationsConfigurationKey, notificationOptions).then(function(r) {
- Dashboard.processServerConfigurationUpdateResult(), Dashboard.navigate("notificationsettings.html")
- })
- })
+
+ if (!notificationConfig) {
+ notificationConfig = {
+ Type: type
+ };
+ notificationOptions.Options.push(notificationConfig);
+ }
+
+ 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) {
+ return !c.checked;
+ }).map(function (c) {
+ return c.getAttribute("data-itemid");
+ });
+ notificationConfig.SendToUsers = $(".chkSendTo", page).get().filter(function (c) {
+ return c.checked;
+ }).map(function (c) {
+ return c.getAttribute("data-itemid");
+ });
+ notificationConfig.DisabledServices = $(".chkService", page).get().filter(function (c) {
+ return !c.checked;
+ }).map(function (c) {
+ return c.getAttribute("data-itemid");
+ });
+ ApiClient.updateNamedConfiguration(notificationsConfigurationKey, notificationOptions).then(function (r) {
+ Dashboard.processServerConfigurationUpdateResult();
+ Dashboard.navigate("notificationsettings.html");
+ });
+ });
}
function onSubmit() {
- return save($(this).parents(".page")), !1
+ save($(this).parents(".page"));
+ return false;
}
+
var notificationsConfigurationKey = "notifications";
- $(document).on("pageinit", "#notificationSettingPage", function() {
+ $(document).on("pageinit", "#notificationSettingPage", function () {
var page = this;
- $("#selectUsers", page).on("change", function() {
- "Custom" == this.value ? $(".selectCustomUsers", page).show() : $(".selectCustomUsers", page).hide()
- }), $(".notificationSettingForm").off("submit", onSubmit).on("submit", onSubmit)
- }).on("pageshow", "#notificationSettingPage", function() {
- reload(this)
- })
-});
\ No newline at end of file
+ $("#selectUsers", page).on("change", function () {
+ if ("Custom" == this.value) {
+ $(".selectCustomUsers", page).show();
+ } else {
+ $(".selectCustomUsers", page).hide();
+ }
+ });
+ $(".notificationSettingForm").off("submit", onSubmit).on("submit", onSubmit);
+ }).on("pageshow", "#notificationSettingPage", function () {
+ reload(this);
+ });
+});
diff --git a/src/controllers/nowplayingpage.js b/src/controllers/nowplayingpage.js
index 7f1b9b3f1..6fcdb2a79 100644
--- a/src/controllers/nowplayingpage.js
+++ b/src/controllers/nowplayingpage.js
@@ -1,11 +1,22 @@
-define(["components/remotecontrol/remotecontrol", "libraryMenu", "emby-button"], function(remotecontrolFactory, libraryMenu) {
+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) {
- libraryMenu.setTransparentMenu(!0), remoteControl && remoteControl.onShow()
- }), view.addEventListener("viewbeforehide", function(e) {
- libraryMenu.setTransparentMenu(!1), remoteControl && remoteControl.destroy()
- })
- }
-});
\ No newline at end of file
+
+ return function (view, params) {
+ var remoteControl = new remotecontrolFactory();
+ remoteControl.init(view, view.querySelector(".remoteControlContent"));
+ view.addEventListener("viewshow", function (e) {
+ libraryMenu.setTransparentMenu(true);
+
+ if (remoteControl) {
+ remoteControl.onShow();
+ }
+ });
+ view.addEventListener("viewbeforehide", function (e) {
+ libraryMenu.setTransparentMenu(false);
+
+ if (remoteControl) {
+ remoteControl.destroy();
+ }
+ });
+ };
+});
diff --git a/src/controllers/playbackconfiguration.js b/src/controllers/playbackconfiguration.js
index 35a780949..76c704f7e 100644
--- a/src/controllers/playbackconfiguration.js
+++ b/src/controllers/playbackconfiguration.js
@@ -1,16 +1,25 @@
-define(["jQuery", "loading", "libraryMenu"], function($, loading, libraryMenu) {
+define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu) {
"use strict";
function loadPage(page, config) {
- $("#txtMinResumePct", page).val(config.MinResumePct), $("#txtMaxResumePct", page).val(config.MaxResumePct), $("#txtMinResumeDuration", page).val(config.MinResumeDurationSeconds), loading.hide()
+ $("#txtMinResumePct", page).val(config.MinResumePct);
+ $("#txtMaxResumePct", page).val(config.MaxResumePct);
+ $("#txtMinResumeDuration", page).val(config.MinResumeDurationSeconds);
+ loading.hide();
}
function onSubmit() {
loading.show();
var form = this;
- return ApiClient.getServerConfiguration().then(function(config) {
- config.MinResumePct = $("#txtMinResumePct", form).val(), config.MaxResumePct = $("#txtMaxResumePct", form).val(), config.MinResumeDurationSeconds = $("#txtMinResumeDuration", form).val(), ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult)
- }), !1
+ ApiClient.getServerConfiguration().then(function (config) {
+ config.MinResumePct = $('#txtMinResumePct', form).val();
+ config.MaxResumePct = $('#txtMaxResumePct', form).val();
+ config.MinResumeDurationSeconds = $('#txtMinResumeDuration', form).val();
+
+ ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
+ });
+
+ return false;
}
function getTabs() {
@@ -23,17 +32,17 @@ define(["jQuery", "loading", "libraryMenu"], function($, loading, libraryMenu) {
}, {
href: "streamingsettings.html",
name: Globalize.translate("TabStreaming")
- }]
+ }];
}
- $(document).on("pageinit", "#playbackConfigurationPage", function() {
+ $(document).on("pageinit", "#playbackConfigurationPage", function () {
$(".playbackConfigurationForm").off("submit", onSubmit).on("submit", onSubmit)
- }).on("pageshow", "#playbackConfigurationPage", function() {
+ }).on("pageshow", "#playbackConfigurationPage", function () {
loading.show();
libraryMenu.setTabs("playback", 1, getTabs);
var page = this;
- ApiClient.getServerConfiguration().then(function(config) {
- loadPage(page, config)
- })
- })
-});
\ No newline at end of file
+ ApiClient.getServerConfiguration().then(function (config) {
+ loadPage(page, config);
+ });
+ });
+});
diff --git a/src/controllers/scheduledtaskpage.js b/src/controllers/scheduledtaskpage.js
index 32838c6de..7dae03cb3 100644
--- a/src/controllers/scheduledtaskpage.js
+++ b/src/controllers/scheduledtaskpage.js
@@ -1,111 +1,237 @@
-define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby-button", "emby-select"], function($, loading, datetime, dom, globalize) {
+define(["jQuery", "loading", "datetime", "dom", "globalize", "emby-input", "emby-button", "emby-select"], function ($, loading, datetime, dom, globalize) {
"use strict";
function fillTimeOfDay(select) {
- for (var options = [], i = 0; i < 864e5; i += 9e5) options.push({
- name: ScheduledTaskPage.getDisplayTime(1e4 * i),
- value: 1e4 * i
- });
- select.innerHTML = options.map(function(o) {
- return '
' + o.name + " "
- }).join("")
+
+ var options = [];
+
+ for (var i = 0; i < 86400000; i += 900000) {
+ options.push({
+ name: ScheduledTaskPage.getDisplayTime(i * 10000),
+ value: i * 10000
+ });
+ }
+
+ select.innerHTML = options.map(function (o) {
+ return '
' + o.name + ' ';
+ }).join("");
}
- Array.prototype.remove = function(from, to) {
+
+ Array.prototype.remove = function (from, to) {
var rest = this.slice((to || from) + 1 || this.length);
- return this.length = from < 0 ? this.length + from : from, this.push.apply(this, rest)
+ this.length = from < 0 ? this.length + from : from;
+ return this.push.apply(this, rest);
};
+
var ScheduledTaskPage = {
- refreshScheduledTask: function(view) {
+ refreshScheduledTask: function (view) {
loading.show();
var id = getParameterByName("id");
- ApiClient.getScheduledTask(id).then(function(task) {
- ScheduledTaskPage.loadScheduledTask(view, task)
- })
+ ApiClient.getScheduledTask(id).then(function (task) {
+ ScheduledTaskPage.loadScheduledTask(view, task);
+ });
},
- loadScheduledTask: function(view, task) {
- $(".taskName", view).html(task.Name), $("#pTaskDescription", view).html(task.Description), require(["listViewStyle"], function() {
- ScheduledTaskPage.loadTaskTriggers(view, task)
- }), loading.hide()
+ loadScheduledTask: function (view, task) {
+ $(".taskName", view).html(task.Name);
+ $("#pTaskDescription", view).html(task.Description);
+
+ require(["listViewStyle"], function () {
+ ScheduledTaskPage.loadTaskTriggers(view, task);
+ });
+
+ loading.hide();
},
- loadTaskTriggers: function(context, task) {
+ loadTaskTriggers: function (context, task) {
var html = "";
html += '
';
+
for (var i = 0, length = task.Triggers.length; i < length; i++) {
var trigger = task.Triggers[i];
- if (html += '
', html += '
schedule ', trigger.MaxRuntimeTicks ? html += '
' : html += '
', html += "
" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + "
", trigger.MaxRuntimeTicks) {
+
+ html += '
';
+ html += '
schedule ';
+ if (trigger.MaxRuntimeMs) {
+ html += '
';
+ } else {
+ html += '
';
+ }
+ html += "
" + ScheduledTaskPage.getTriggerFriendlyName(trigger) + "
";
+ if (trigger.MaxRuntimeMs) {
html += '
';
var hours = trigger.MaxRuntimeTicks / 36e9;
- html += 1 == hours ? globalize.translate("ValueTimeLimitSingleHour") : globalize.translate("ValueTimeLimitMultiHour", hours), html += "
"
+ if (hours == 1) {
+ html += globalize.translate("ValueTimeLimitSingleHour");
+ } else {
+ html += globalize.translate("ValueTimeLimitMultiHour", hours);
+ }
+ html += "
";
}
- html += "
", html += '
delete ', html += "
"
+
+ html += "
";
+ html += '
delete ';
+ html += "
";
}
- html += "
", context.querySelector(".taskTriggers").innerHTML = html
+
+ html += "
";
+ context.querySelector(".taskTriggers").innerHTML = html;
},
- getTriggerFriendlyName: function(trigger) {
- if ("DailyTrigger" == trigger.Type) return "Daily at " + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
- if ("WeeklyTrigger" == trigger.Type) return trigger.DayOfWeek + "s at " + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
- if ("SystemEventTrigger" == trigger.Type && "WakeFromSleep" == trigger.SystemEvent) return "On wake from sleep";
- if ("IntervalTrigger" == trigger.Type) {
+ getTriggerFriendlyName: function (trigger) {
+ if ("DailyTrigger" == trigger.Type) {
+ return "Daily at " + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
+ }
+
+ if ("WeeklyTrigger" == trigger.Type) {
+ return trigger.DayOfWeek + "s at " + ScheduledTaskPage.getDisplayTime(trigger.TimeOfDayTicks);
+ }
+
+ if ("SystemEventTrigger" == trigger.Type && "WakeFromSleep" == trigger.SystemEvent) {
+ return "On wake from sleep";
+ }
+
+ if (trigger.Type == "IntervalTrigger") {
+
var hours = trigger.IntervalTicks / 36e9;
- return .25 == hours ? "Every 15 minutes" : .5 == hours ? "Every 30 minutes" : .75 == hours ? "Every 45 minutes" : 1 == hours ? "Every hour" : "Every " + hours + " hours"
+
+ if (hours == .25) {
+ return "Every 15 minutes";
+ }
+ if (hours == .5) {
+ return "Every 30 minutes";
+ }
+ if (hours == .75) {
+ return "Every 45 minutes";
+ }
+ if (hours == 1) {
+ return "Every hour";
+ }
+
+ return "Every " + hours + " hours";
}
- return "StartupTrigger" == trigger.Type ? "On application startup" : trigger.Type
+
+ if (trigger.Type == "StartupTrigger") {
+ return "On application startup";
+ }
+
+ return trigger.Type;
},
- getDisplayTime: function(ticks) {
- var ms = ticks / 1e4,
- now = new Date;
- return now.setHours(0, 0, 0, 0), now.setTime(now.getTime() + ms), datetime.getDisplayTime(now)
+ getDisplayTime: function (ticks) {
+ var ms = ticks / 1e4;
+ var now = new Date();
+ now.setHours(0, 0, 0, 0);
+ now.setTime(now.getTime() + ms);
+ return datetime.getDisplayTime(now);
},
- showAddTriggerPopup: function(view) {
- $("#selectTriggerType", view).val("DailyTrigger"), view.querySelector("#selectTriggerType").dispatchEvent(new CustomEvent("change", {})), $("#popupAddTrigger", view).removeClass("hide")
+ showAddTriggerPopup: function (view) {
+ $("#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() {
- ScheduledTaskPage.deleteTrigger(view, index)
- })
- })
+ confirmDeleteTrigger: function (view, index) {
+ require(["confirm"], function (confirm) {
+ confirm(globalize.translate("MessageDeleteTaskTrigger"), globalize.translate("HeaderDeleteTaskTrigger")).then(function () {
+ ScheduledTaskPage.deleteTrigger(view, index);
+ });
+ });
},
- deleteTrigger: function(view, index) {
+ deleteTrigger: function (view, index) {
loading.show();
var id = getParameterByName("id");
- ApiClient.getScheduledTask(id).then(function(task) {
- task.Triggers.remove(index), ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function() {
- ScheduledTaskPage.refreshScheduledTask(view)
- })
- })
+ ApiClient.getScheduledTask(id).then(function (task) {
+ task.Triggers.remove(index);
+ ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
+ ScheduledTaskPage.refreshScheduledTask(view);
+ });
+ });
},
- refreshTriggerFields: function(page, triggerType) {
- "DailyTrigger" == triggerType ? ($("#fldTimeOfDay", page).show(), $("#fldDayOfWeek", page).hide(), $("#fldSelectSystemEvent", page).hide(), $("#fldSelectInterval", page).hide(), $("#selectTimeOfDay", page).attr("required", "required")) : "WeeklyTrigger" == triggerType ? ($("#fldTimeOfDay", page).show(), $("#fldDayOfWeek", page).show(), $("#fldSelectSystemEvent", page).hide(), $("#fldSelectInterval", page).hide(), $("#selectTimeOfDay", page).attr("required", "required")) : "SystemEventTrigger" == triggerType ? ($("#fldTimeOfDay", page).hide(), $("#fldDayOfWeek", page).hide(), $("#fldSelectSystemEvent", page).show(), $("#fldSelectInterval", page).hide(), $("#selectTimeOfDay", page).removeAttr("required")) : "IntervalTrigger" == triggerType ? ($("#fldTimeOfDay", page).hide(), $("#fldDayOfWeek", page).hide(), $("#fldSelectSystemEvent", page).hide(), $("#fldSelectInterval", page).show(), $("#selectTimeOfDay", page).removeAttr("required")) : "StartupTrigger" == triggerType && ($("#fldTimeOfDay", page).hide(), $("#fldDayOfWeek", page).hide(), $("#fldSelectSystemEvent", page).hide(), $("#fldSelectInterval", page).hide(), $("#selectTimeOfDay", page).removeAttr("required"))
+ 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");
+ }
},
- getTriggerToAdd: function(page) {
+ getTriggerToAdd: function (page) {
var trigger = {
Type: $("#selectTriggerType", page).val()
};
- "DailyTrigger" == trigger.Type ? trigger.TimeOfDayTicks = $("#selectTimeOfDay", page).val() : "WeeklyTrigger" == trigger.Type ? (trigger.DayOfWeek = $("#selectDayOfWeek", page).val(), trigger.TimeOfDayTicks = $("#selectTimeOfDay", page).val()) : "SystemEventTrigger" == trigger.Type ? trigger.SystemEvent = $("#selectSystemEvent", page).val() : "IntervalTrigger" == trigger.Type && (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";
- return timeLimit = 36e5 * parseFloat(timeLimit), trigger.MaxRuntimeMs = timeLimit || null, trigger
+ timeLimit = parseFloat(timeLimit) * 3600000;
+
+ trigger.MaxRuntimeMs = timeLimit || null;
+
+ return trigger;
}
};
- return function(view, params) {
+ return function (view, params) {
function onSubmit(e) {
loading.show();
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"), ScheduledTaskPage.refreshScheduledTask(view)
- })
- }), e.preventDefault()
+ ApiClient.getScheduledTask(id).then(function (task) {
+ task.Triggers.push(ScheduledTaskPage.getTriggerToAdd(view));
+ ApiClient.updateScheduledTaskTriggers(task.Id, task.Triggers).then(function () {
+ $("#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() {
- ScheduledTaskPage.refreshTriggerFields(view, this.value)
- }), view.querySelector(".btnAddTrigger").addEventListener("click", function() {
- ScheduledTaskPage.showAddTriggerPopup(view)
- }), view.addEventListener("click", function(e) {
+
+ 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 () {
+ ScheduledTaskPage.showAddTriggerPopup(view);
+ });
+ view.addEventListener("click", function (e) {
var btnDeleteTrigger = dom.parentWithClass(e.target, "btnDeleteTrigger");
- btnDeleteTrigger && ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute("data-index")))
- }), view.addEventListener("viewshow", function() {
- ScheduledTaskPage.refreshScheduledTask(view)
- })
- }
-});
\ No newline at end of file
+
+ if (btnDeleteTrigger) {
+ ScheduledTaskPage.confirmDeleteTrigger(view, parseInt(btnDeleteTrigger.getAttribute("data-index")));
+ }
+ });
+ view.addEventListener("viewshow", function () {
+ ScheduledTaskPage.refreshScheduledTask(view);
+ });
+ };
+});
diff --git a/src/controllers/searchpage.js b/src/controllers/searchpage.js
index b188a8b31..b260ef575 100644
--- a/src/controllers/searchpage.js
+++ b/src/controllers/searchpage.js
@@ -1,21 +1,36 @@
-define(["focusManager", "searchFields", "searchResults", "events"], function(focusManager, SearchFields, SearchResults, events) {
+define(["focusManager", "searchFields", "searchResults", "events"], function (focusManager, SearchFields, SearchResults, events) {
"use strict";
- return function(view, params) {
+
+ return function (view, params) {
function onSearch(e, value) {
- self.searchResults.search(value)
+ self.searchResults.search(value);
}
+
var self = this;
- view.addEventListener("viewshow", function() {
- self.searchFields || (self.searchFields = new SearchFields({
- element: view.querySelector(".searchFields")
- }), self.searchResults = new SearchResults({
- element: view.querySelector(".searchResults"),
- serverId: params.serverId || ApiClient.serverId(),
- parentId: params.parentId,
- collectionType: params.collectionType
- }), events.on(self.searchFields, "search", onSearch))
- }), view.addEventListener("viewdestroy", function() {
- self.searchFields && (self.searchFields.destroy(), self.searchFields = null), self.searchResults && (self.searchResults.destroy(), self.searchResults = null)
- })
- }
-});
\ No newline at end of file
+ view.addEventListener("viewshow", function () {
+ if (!self.searchFields) {
+ self.searchFields = new SearchFields({
+ element: view.querySelector(".searchFields")
+ });
+ self.searchResults = new SearchResults({
+ element: view.querySelector(".searchResults"),
+ serverId: params.serverId || ApiClient.serverId(),
+ parentId: params.parentId,
+ collectionType: params.collectionType
+ });
+ events.on(self.searchFields, "search", onSearch);
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (self.searchFields) {
+ self.searchFields.destroy();
+ self.searchFields = null;
+ }
+
+ if (self.searchResults) {
+ self.searchResults.destroy();
+ self.searchResults = null;
+ }
+ });
+ };
+});
diff --git a/src/controllers/selectserver.js b/src/controllers/selectserver.js
index 385ab69ca..80ecb13f0 100644
--- a/src/controllers/selectserver.js
+++ b/src/controllers/selectserver.js
@@ -1,50 +1,56 @@
-define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focusManager", "connectionManager", "globalize", "actionsheet", "dom", "material-icons", "flexStyles", "emby-scroller", "emby-itemscontainer", "cardStyle", "emby-button"], function(loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom) {
+define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focusManager", "connectionManager", "globalize", "actionsheet", "dom", "material-icons", "flexStyles", "emby-scroller", "emby-itemscontainer", "cardStyle", "emby-button"], function (loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom) {
"use strict";
function renderSelectServerItems(view, servers) {
- var items = servers.map(function(server) {
- return {
- name: server.Name,
- showIcon: !0,
- icon: "",
- cardType: "",
- id: server.Id,
- server: server
- }
+ var items = servers.map(function (server) {
+ return {
+ name: server.Name,
+ showIcon: true,
+ icon: "",
+ cardType: "",
+ id: server.Id,
+ server: server
+ };
});
- var html = items.map(function(item) {
- var cardImageContainer;
- if (item.showIcon) {
- cardImageContainer = '
' + item.icon + " ";
- } else {
- cardImageContainer = '
';
- }
- var cardBoxCssClass = "cardBox";
- if (layoutManager.tv) {
- cardBoxCssClass += " cardBox-focustransform";
- }
- var innerOpening = '
';
- var cardContainer = '';
- cardContainer += '
';
- cardContainer += innerOpening;
- cardContainer += '';
- cardContainer += '
';
- cardContainer += '
';
- cardContainer += '
';
- cardContainer += '
';
- cardContainer += cardImageContainer;
- cardContainer += '
';
- cardContainer += '
';
- cardContainer += '
';
- cardContainer += ' ';
- return cardContainer;
+ var html = items.map(function (item) {
+ var cardImageContainer;
+
+ if (item.showIcon) {
+ cardImageContainer = '
' + item.icon + " ";
+ } else {
+ cardImageContainer = '
';
+ }
+
+ var cardBoxCssClass = "cardBox";
+
+ if (layoutManager.tv) {
+ cardBoxCssClass += " cardBox-focustransform";
+ }
+
+ var innerOpening = '
';
+ var cardContainer = '';
+ cardContainer += '
';
+ cardContainer += innerOpening;
+ cardContainer += '';
+ cardContainer += '
';
+ cardContainer += '
';
+ cardContainer += '
';
+ cardContainer += '
';
+ cardContainer += cardImageContainer;
+ cardContainer += '
';
+ cardContainer += '
';
+ cardContainer += '
';
+ cardContainer += ' ';
+ return cardContainer;
}).join("");
var itemsContainer = view.querySelector(".servers");
+
if (!items.length) {
html = '
' + globalize.translate("MessageNoServersAvailable") + "
";
}
+
itemsContainer.innerHTML = html;
loading.hide();
}
@@ -73,7 +79,7 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
}
function alertTextWithOptions(options) {
- require(["alert"], function(alert) {
+ require(["alert"], function (alert) {
alert(options);
});
}
@@ -82,38 +88,42 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
alertText(globalize.translate("MessageUnableToConnectToServer"), globalize.translate("HeaderConnectionFailure"));
}
- return function(view, params) {
+ return function (view, params) {
function connectToServer(server) {
loading.show();
connectionManager.connectToServer(server, {
enableAutoLogin: appSettings.enableAutoLogin()
- }).then(function(result) {
+ }).then(function (result) {
loading.hide();
var apiClient = result.ApiClient;
+
switch (result.State) {
case "SignedIn":
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
Dashboard.navigate("home.html");
break;
+
case "ServerSignIn":
Dashboard.onServerChanged(null, null, apiClient);
Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id);
break;
+
case "ServerUpdateNeeded":
alertTextWithOptions({
text: globalize.translate("core#ServerUpdateNeeded", "https://github.com/jellyfin/jellyfin"),
html: globalize.translate("core#ServerUpdateNeeded", '
https://github.com/jellyfin/jellyfin ')
});
break;
+
default:
showServerConnectionFailure();
}
- })
+ });
}
function deleteServer(server) {
loading.show();
- connectionManager.deleteServer(server.Id).then(function() {
+ connectionManager.deleteServer(server.Id).then(function () {
loading.hide();
loadServers();
});
@@ -132,20 +142,22 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
actionSheet.show({
items: menuItems,
title: server.Name
- }).then(function(id) {
+ }).then(function (id) {
switch (id) {
case "connect":
connectToServer(server);
break;
+
case "delete":
deleteServer(server);
}
- })
+ });
}
function onServersRetrieved(result) {
servers = result;
renderSelectServerItems(view, result);
+
if (layoutManager.tv) {
focusManager.autoFocus(view);
}
@@ -158,25 +170,29 @@ 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);
- if (!isRestored) loadServers();
+
+ if (!isRestored) {
+ loadServers();
+ }
});
- view.querySelector(".servers").addEventListener("click", function(e) {
+ view.querySelector(".servers").addEventListener("click", function (e) {
var card = dom.parentWithClass(e.target, "card");
+
if (card) {
var url = card.getAttribute("data-url");
+
if (url) {
appRouter.show(url);
} else {
var id = card.getAttribute("data-id");
- onServerClick(servers.filter(function(s) {
+ onServerClick(servers.filter(function (s) {
return s.Id === id;
})[0]);
}
}
- })
- }
+ });
+ };
});
diff --git a/src/controllers/serveractivity.js b/src/controllers/serveractivity.js
index 2b43215c9..fb3b8112d 100644
--- a/src/controllers/serveractivity.js
+++ b/src/controllers/serveractivity.js
@@ -1,14 +1,31 @@
-define(["components/activitylog", "globalize"], function(ActivityLog, globalize) {
+define(["components/activitylog", "globalize"], function (ActivityLog, globalize) {
"use strict";
- return function(view, params) {
+
+ return function (view, params) {
var activityLog;
- "false" !== params.useractivity ? (view.querySelector(".activityItems").setAttribute("data-useractivity", "true"), view.querySelector(".sectionTitle").innerHTML = globalize.translate("HeaderActivity")) : (view.querySelector(".activityItems").setAttribute("data-useractivity", "false"), view.querySelector(".sectionTitle").innerHTML = globalize.translate("Alerts")), view.addEventListener("viewshow", function() {
- activityLog || (activityLog = new ActivityLog({
- serverId: ApiClient.serverId(),
- element: view.querySelector(".activityItems")
- }))
- }), view.addEventListener("viewdestroy", function() {
- activityLog && activityLog.destroy(), activityLog = null
- })
- }
-});
\ No newline at end of file
+
+ 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.addEventListener("viewshow", function () {
+ if (!activityLog) {
+ activityLog = new ActivityLog({
+ serverId: ApiClient.serverId(),
+ element: view.querySelector(".activityItems")
+ });
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (activityLog) {
+ activityLog.destroy();
+ }
+
+ activityLog = null;
+ });
+ };
+});
diff --git a/src/controllers/shows/episodes.js b/src/controllers/shows/episodes.js
index 1f783631f..42d9d89f7 100644
--- a/src/controllers/shows/episodes.js
+++ b/src/controllers/shows/episodes.js
@@ -1,169 +1,233 @@
-define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "emby-itemscontainer"], function(loading, events, libraryBrowser, imageLoader, listView, cardBuilder) {
+define(["loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "emby-itemscontainer"], function (loading, events, libraryBrowser, imageLoader, listView, cardBuilder) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData(context) {
- var key = getSavedQueryKey(context),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SeriesSortName,SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Episode",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,MediaSourceCount,UserData",
- IsMissing: !1,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Thumb",
- StartIndex: 0,
- Limit: pageSize
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey(context);
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SeriesSortName,SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Episode",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,MediaSourceCount,UserData",
+ IsMissing: false,
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Thumb",
+ StartIndex: 0,
+ Limit: pageSize
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery(context) {
- return getPageData(context).query
+ return getPageData(context).query;
}
function getSavedQueryKey(context) {
- return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey("episodes")), context.savedQueryKey
+ if (!context.savedQueryKey) {
+ context.savedQueryKey = libraryBrowser.getSavedQueryKey("episodes");
+ }
+
+ return context.savedQueryKey;
}
function onViewStyleChange() {
- var viewStyle = self.getCurrentViewStyle(),
- itemsContainer = tabContent.querySelector(".itemsContainer");
- "List" == viewStyle ? (itemsContainer.classList.add("vertical-list"), itemsContainer.classList.remove("vertical-wrap")) : (itemsContainer.classList.remove("vertical-list"), itemsContainer.classList.add("vertical-wrap")), itemsContainer.innerHTML = ""
+ var viewStyle = self.getCurrentViewStyle();
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+
+ 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.innerHTML = "";
}
function reloadItems(page) {
loading.show();
isLoading = true;
var query = getQuery(page);
- ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function(result) {
+ ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
+ if (isLoading) {
+ return;
+ }
+
query.StartIndex += query.Limit;
- reloadItems(tabContent)
+ reloadItems(tabContent);
}
function onPreviousPageClick() {
- if (isLoading) return;
+ if (isLoading) {
+ return;
+ }
+
query.StartIndex -= query.Limit;
- reloadItems(tabContent)
+ reloadItems(tabContent);
}
window.scrollTo(0, 0);
- var html, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- viewStyle = self.getCurrentViewStyle(),
- itemsContainer = tabContent.querySelector(".itemsContainer");
- html = "List" == viewStyle ? listView.getListViewHtml({
- items: result.Items,
- sortBy: query.SortBy,
- showParentTitle: !0
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- showTitle: !0,
- showParentTitle: !0,
- scalable: !0,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- showTitle: !0,
- showParentTitle: !0,
- overlayText: !1,
- centerText: !0,
- scalable: !0,
- overlayPlayButton: !0
+ var html;
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
});
- var i, length, elems;
- for (elems = tabContent.querySelectorAll(".paging"), i = 0, length = elems.length; i < length; i++)
+ var viewStyle = self.getCurrentViewStyle();
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+ if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ sortBy: query.SortBy,
+ showParentTitle: true
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ showTitle: true,
+ showParentTitle: true,
+ scalable: true,
+ cardLayout: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ showTitle: true,
+ showParentTitle: true,
+ overlayText: false,
+ centerText: true,
+ scalable: true,
+ overlayPlayButton: true
+ });
+ }
+ var i;
+ var length;
+ var elems;
+
+ elems = tabContent.querySelectorAll(".paging");
+ for (i = 0, length = elems.length; i < length; i++) {
elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++)
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++)
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
loading.hide();
isLoading = false;
- })
+ });
}
- var self = this,
- pageSize = 100,
- data = {},
- isLoading = false;
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
- var filterDialog = new filterDialogFactory({
- query: getQuery(tabContent),
- mode: "episodes",
- serverId: ApiClient.serverId()
- });
- events.on(filterDialog, "filterchange", function() {
- reloadItems(tabContent)
- }), filterDialog.show()
- })
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- },
- function(tabContent) {
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- self.showFilterMenu()
- }), tabContent.querySelector(".btnSort").addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionNameSort"),
- id: "SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionTvdbRating"),
- id: "CommunityRating,SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionPremiereDate"),
- id: "PremiereDate,SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionDatePlayed"),
- id: "DatePlayed,SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionParentalRating"),
- id: "OfficialRating,SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionPlayCount"),
- id: "PlayCount,SeriesSortName,SortName"
- }, {
- name: Globalize.translate("OptionRuntime"),
- id: "Runtime,SeriesSortName,SortName"
- }],
- callback: function() {
- reloadItems(tabContent)
- },
- query: getQuery(tabContent),
- button: e.target
- })
+
+ var self = this;
+ var pageSize = 100;
+ var data = {};
+ var isLoading = false;
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
+ var filterDialog = new filterDialogFactory({
+ query: getQuery(tabContent),
+ mode: "episodes",
+ serverId: ApiClient.serverId()
});
- 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) {
- var viewStyle = e.detail.viewStyle;
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), onViewStyleChange(), reloadItems(tabContent)
- })
- }(tabContent), onViewStyleChange(), self.renderTab = function() {
- reloadItems(tabContent)
- }, self.destroy = function() {}
- }
+ events.on(filterDialog, "filterchange", function () {
+ reloadItems(tabContent);
+ });
+ filterDialog.show();
+ });
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ function initPage(tabContent) {
+ tabContent.querySelector(".btnFilter").addEventListener("click", function () {
+ self.showFilterMenu();
+ });
+ tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionNameSort"),
+ id: "SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionTvdbRating"),
+ id: "CommunityRating,SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionPremiereDate"),
+ id: "PremiereDate,SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionDatePlayed"),
+ id: "DatePlayed,SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionParentalRating"),
+ id: "OfficialRating,SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionPlayCount"),
+ id: "PlayCount,SeriesSortName,SortName"
+ }, {
+ name: Globalize.translate("OptionRuntime"),
+ id: "Runtime,SeriesSortName,SortName"
+ }],
+ callback: function () {
+ reloadItems(tabContent);
+ },
+ query: getQuery(tabContent),
+ button: e.target
+ });
+ });
+ 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) {
+ var viewStyle = e.detail.viewStyle;
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ onViewStyleChange();
+ reloadItems(tabContent);
+ });
+ }
+
+ initPage(tabContent);
+ onViewStyleChange();
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/shows/tvgenres.js b/src/controllers/shows/tvgenres.js
index e9559155e..956b8fa6f 100644
--- a/src/controllers/shows/tvgenres.js
+++ b/src/controllers/shows/tvgenres.js
@@ -1,139 +1,200 @@
-define(["layoutManager", "loading", "libraryBrowser", "cardBuilder", "lazyLoader", "apphost", "globalize", "appRouter", "dom", "emby-button"], function(layoutManager, loading, libraryBrowser, cardBuilder, lazyLoader, appHost, globalize, appRouter, dom) {
+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) {
+
+ return function (view, params, tabContent) {
function getPageData() {
- var key = getSavedQueryKey(),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Series",
- Recursive: !0,
- EnableTotalRecordCount: !1
- },
- view: "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey();
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Series",
+ Recursive: true,
+ EnableTotalRecordCount: false
+ },
+ view: "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery() {
- return getPageData().query
+ return getPageData().query;
}
function getSavedQueryKey() {
- return libraryBrowser.getSavedQueryKey("seriesgenres")
+ return libraryBrowser.getSavedQueryKey("seriesgenres");
}
function getPromise() {
loading.show();
var query = getQuery();
- return ApiClient.getGenres(ApiClient.getCurrentUserId(), query)
+ return ApiClient.getGenres(ApiClient.getCurrentUserId(), query);
}
function enableScrollX() {
- return !layoutManager.desktop
+ return !layoutManager.desktop;
}
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"),
- viewStyle = self.getCurrentViewStyle(),
- limit = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? 5 : 9;
- enableScrollX() && (limit = 10);
- var enableImageTypes = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? "Primary,Backdrop,Thumb" : "Primary",
- query = {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Series",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: enableImageTypes,
- Limit: limit,
- GenreIds: id,
- EnableTotalRecordCount: !1,
- ParentId: params.topParentId
- };
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function(result) {
+ var id = elem.getAttribute("data-id");
+ var viewStyle = self.getCurrentViewStyle();
+ var limit = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? 5 : 9;
+
+ if (enableScrollX()) {
+ limit = 10;
+ }
+
+ var enableImageTypes = "Thumb" == viewStyle || "ThumbCard" == viewStyle ? "Primary,Backdrop,Thumb" : "Primary";
+ var query = {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Series",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,MediaSourceCount,BasicSyncInfo",
+ ImageTypeLimit: 1,
+ EnableImageTypes: enableImageTypes,
+ Limit: limit,
+ GenreIds: id,
+ EnableTotalRecordCount: false,
+ ParentId: params.topParentId
+ };
+ ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
var supportsImageAnalysis = appHost.supports("imageanalysis");
- "Thumb" == viewStyle ? cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getThumbShape(),
- preferThumb: !0,
- showTitle: !0,
- scalable: !0,
- centerText: !0,
- overlayMoreButton: !0,
- allowBottomPadding: !1
- }) : "ThumbCard" == viewStyle ? cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getThumbShape(),
- preferThumb: !0,
- showTitle: !0,
- scalable: !0,
- centerText: !1,
- cardLayout: !0,
- showYear: !0
- }) : "PosterCard" == viewStyle ? cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getPortraitShape(),
- showTitle: !0,
- scalable: !0,
- centerText: !1,
- cardLayout: !0,
- showYear: !0
- }) : "Poster" == viewStyle && cardBuilder.buildCards(result.Items, {
- itemsContainer: elem,
- shape: getPortraitShape(),
- scalable: !0,
- overlayMoreButton: !0,
- allowBottomPadding: !1
- }), result.Items.length >= query.Limit && tabContent.querySelector(".btnMoreFromGenre" + id + " i").classList.remove("hide")
- })
+
+ if (viewStyle == "Thumb") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getThumbShape(),
+ preferThumb: true,
+ showTitle: true,
+ scalable: true,
+ centerText: true,
+ overlayMoreButton: true,
+ allowBottomPadding: false
+ });
+ } else if (viewStyle == "ThumbCard") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getThumbShape(),
+ preferThumb: true,
+ showTitle: true,
+ scalable: true,
+ centerText: false,
+ cardLayout: true,
+ showYear: true
+ });
+ } else if (viewStyle == "PosterCard") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getPortraitShape(),
+ showTitle: true,
+ scalable: true,
+ centerText: false,
+ cardLayout: true,
+ showYear: true
+ });
+ } else if (viewStyle == "Poster") {
+ cardBuilder.buildCards(result.Items, {
+ itemsContainer: elem,
+ shape: getPortraitShape(),
+ scalable: true,
+ overlayMoreButton: true,
+ allowBottomPadding: false
+ });
+ }
+ if (result.Items.length >= query.Limit) {
+ tabContent.querySelector(".btnMoreFromGenre" + id + " i").classList.remove("hide");
+ }
+ });
}
function reloadItems(context, promise) {
var query = getQuery();
- promise.then(function(result) {
- for (var elem = context.querySelector("#items"), html = "", items = result.Items, i = 0, length = items.length; i < length; i++) {
+ promise.then(function (result) {
+ var elem = context.querySelector("#items");
+ var html = "";
+ var items = result.Items;
+
+ for (var i = 0, length = items.length; i < length; i++) {
var item = items[i];
- if (html += '
', html += '
", enableScrollX()) {
+ html += '
';
+ html += '
";
+ if (enableScrollX()) {
var scrollXClass = "scrollX hiddenScrollX";
- layoutManager.tv && (scrollXClass += " smoothScrollX"), html += '
"
+ if (layoutManager.tv) {
+ scrollXClass += "smoothScrollX";
+ }
+ html += '
";
}
- elem.innerHTML = html, lazyLoader.lazyChildren(elem, fillItemsContainer), libraryBrowser.saveQueryValues(getSavedQueryKey(), query), loading.hide()
- })
+
+ elem.innerHTML = html;
+ lazyLoader.lazyChildren(elem, fillItemsContainer);
+ libraryBrowser.saveQueryValues(getSavedQueryKey(), query);
+ loading.hide();
+ });
}
function fullyReload() {
- self.preRender(), self.renderTab()
+ self.preRender();
+ self.renderTab();
}
- var self = this,
- data = {};
- self.getViewStyles = function() {
- return "Poster,PosterCard,Thumb,ThumbCard".split(",")
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- }, self.setCurrentViewStyle = function(viewStyle) {
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), fullyReload()
- }, self.enableViewSelection = !0;
+
+ var self = this;
+ var data = {};
+
+ self.getViewStyles = function () {
+ return "Poster,PosterCard,Thumb,ThumbCard".split(",");
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ self.setCurrentViewStyle = function (viewStyle) {
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ fullyReload();
+ };
+
+ self.enableViewSelection = true;
var promise;
- self.preRender = function() {
- promise = getPromise()
- }, self.renderTab = function() {
- reloadItems(tabContent, promise)
- }
- }
-});
\ No newline at end of file
+
+ self.preRender = function () {
+ promise = getPromise();
+ };
+
+ self.renderTab = function () {
+ reloadItems(tabContent, promise);
+ };
+ };
+});
diff --git a/src/controllers/shows/tvlatest.js b/src/controllers/shows/tvlatest.js
index 006f41e6c..2a1ed56bf 100644
--- a/src/controllers/shows/tvlatest.js
+++ b/src/controllers/shows/tvlatest.js
@@ -1,52 +1,60 @@
-define(["loading", "components/groupedcards", "cardBuilder", "apphost", "imageLoader"], function(loading, groupedcards, cardBuilder, appHost, imageLoader) {
+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(),
- parentId = params.topParentId,
- options = {
- IncludeItemTypes: "Episode",
- Limit: 30,
- Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
- ParentId: parentId,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Thumb"
- };
- return ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options))
+ var userId = ApiClient.getCurrentUserId();
+ var parentId = params.topParentId;
+ var options = {
+ IncludeItemTypes: "Episode",
+ Limit: 30,
+ Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Thumb"
+ };
+ return ApiClient.getJSON(ApiClient.getUrl("Users/" + userId + "/Items/Latest", options));
}
function loadLatest(context, params, promise) {
- promise.then(function(items) {
+ promise.then(function (items) {
var html = "";
appHost.supports("imageanalysis");
html += cardBuilder.getCardsHtml({
items: items,
shape: "backdrop",
- preferThumb: !0,
- showTitle: !0,
- showSeriesYear: !0,
- showParentTitle: !0,
- overlayText: !1,
- cardLayout: !1,
- showUnplayedIndicator: !1,
- showChildCountIndicator: !0,
- centerText: !0,
- lazy: !0,
- overlayPlayButton: !0,
+ preferThumb: true,
+ showTitle: true,
+ showSeriesYear: true,
+ showParentTitle: true,
+ overlayText: false,
+ cardLayout: false,
+ showUnplayedIndicator: false,
+ showChildCountIndicator: true,
+ centerText: true,
+ lazy: true,
+ overlayPlayButton: true,
lines: 2
});
var elem = context.querySelector("#latestEpisodes");
- elem.innerHTML = html, imageLoader.lazyChildren(elem), loading.hide()
- })
+ elem.innerHTML = html;
+ imageLoader.lazyChildren(elem);
+ loading.hide();
+ });
}
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
var self = this;
var latestPromise;
- self.preRender = function() {
- latestPromise = getLatestPromise(view, params)
- }, self.renderTab = function() {
- loadLatest(tabContent, params, latestPromise)
- }, tabContent.querySelector("#latestEpisodes").addEventListener("click", groupedcards.onItemsContainerClick)
- }
-});
\ No newline at end of file
+
+ self.preRender = function () {
+ latestPromise = getLatestPromise(view, params);
+ };
+
+ self.renderTab = function () {
+ loadLatest(tabContent, params, latestPromise);
+ };
+
+ tabContent.querySelector("#latestEpisodes").addEventListener("click", groupedcards.onItemsContainerClick);
+ };
+});
diff --git a/src/controllers/shows/tvrecommended.js b/src/controllers/shows/tvrecommended.js
index 9de1461b3..1386e76a3 100644
--- a/src/controllers/shows/tvrecommended.js
+++ b/src/controllers/shows/tvrecommended.js
@@ -1,4 +1,4 @@
-define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function(events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager) {
+define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "dom", "userSettings", "cardBuilder", "playbackManager", "mainTabsManager", "scrollStyles", "emby-itemscontainer", "emby-button"], function (events, inputManager, libraryMenu, layoutManager, loading, dom, userSettings, cardBuilder, playbackManager, mainTabsManager) {
"use strict";
function getTabs() {
@@ -19,30 +19,51 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
}, {
name: Globalize.translate("ButtonSearch"),
cssClass: "searchTabButton"
- }]
+ }];
}
function getDefaultTabIndex(folderId) {
switch (userSettings.get("landing-" + folderId)) {
case "suggestions":
return 1;
+
case "latest":
return 2;
+
case "favorites":
return 1;
+
case "genres":
return 4;
+
default:
- return 0
+ return 0;
}
}
function setScrollClasses(elem, scrollX) {
- scrollX ? (elem.classList.add("hiddenScrollX"), layoutManager.tv && elem.classList.add("smoothScrollX"), elem.classList.add("scrollX"), elem.classList.remove("vertical-wrap")) : (elem.classList.remove("hiddenScrollX"), elem.classList.remove("smoothScrollX"), elem.classList.remove("scrollX"), elem.classList.add("vertical-wrap"))
+ if (scrollX) {
+ elem.classList.add("hiddenScrollX");
+
+ if (layoutManager.tv) {
+ elem.classList.add("smoothScrollX");
+ }
+
+ 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");
+ }
}
- return function(view, params) {
+
+ return function (view, params) {
function reload() {
- loading.show(), loadResume(), loadNextUp()
+ loading.show();
+ loadResume();
+ loadNextUp();
}
function loadNextUp() {
@@ -52,178 +73,263 @@ define(["events", "inputManager", "libraryMenu", "layoutManager", "loading", "do
UserId: ApiClient.getCurrentUserId(),
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Thumb",
- EnableTotalRecordCount: !1
+ EnableTotalRecordCount: false
};
- query.ParentId = libraryMenu.getTopParentId(), ApiClient.getNextUpEpisodes(query).then(function(result) {
- result.Items.length ? view.querySelector(".noNextUpItems").classList.add("hide") : view.querySelector(".noNextUpItems").classList.remove("hide");
+ query.ParentId = libraryMenu.getTopParentId();
+ ApiClient.getNextUpEpisodes(query).then(function (result) {
+ if (result.Items.length) {
+ view.querySelector(".noNextUpItems").classList.add("hide");
+ } else {
+ view.querySelector(".noNextUpItems").classList.remove("hide");
+ }
+
var container = view.querySelector("#nextUpItems");
cardBuilder.buildCards(result.Items, {
itemsContainer: container,
- preferThumb: !0,
+ preferThumb: true,
shape: "backdrop",
- scalable: !0,
- showTitle: !0,
- showParentTitle: !0,
- overlayText: !1,
- centerText: !0,
- overlayPlayButton: !0,
- cardLayout: !1
- }), loading.hide()
- })
+ scalable: true,
+ showTitle: true,
+ showParentTitle: true,
+ overlayText: false,
+ centerText: true,
+ overlayPlayButton: true,
+ cardLayout: false
+ });
+ loading.hide();
+ });
}
function enableScrollX() {
- return !layoutManager.desktop
+ return !layoutManager.desktop;
}
function getThumbShape() {
- return enableScrollX() ? "overflowBackdrop" : "backdrop"
+ return enableScrollX() ? "overflowBackdrop" : "backdrop";
}
function loadResume() {
- var parentId = libraryMenu.getTopParentId(),
- screenWidth = dom.getWindowSize().innerWidth,
- limit = screenWidth >= 1600 ? 5 : 6,
- options = {
- SortBy: "DatePlayed",
- SortOrder: "Descending",
- IncludeItemTypes: "Episode",
- Filters: "IsResumable",
- Limit: limit,
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,BasicSyncInfo",
- ExcludeLocationTypes: "Virtual",
- ParentId: parentId,
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Thumb",
- EnableTotalRecordCount: !1
- };
- ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function(result) {
- result.Items.length ? view.querySelector("#resumableSection").classList.remove("hide") : view.querySelector("#resumableSection").classList.add("hide");
- var allowBottomPadding = !enableScrollX(),
- container = view.querySelector("#resumableItems");
+ var parentId = libraryMenu.getTopParentId();
+ var screenWidth = dom.getWindowSize().innerWidth;
+ var limit = screenWidth >= 1600 ? 5 : 6;
+ var options = {
+ SortBy: "DatePlayed",
+ SortOrder: "Descending",
+ IncludeItemTypes: "Episode",
+ Filters: "IsResumable",
+ Limit: limit,
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,BasicSyncInfo",
+ ExcludeLocationTypes: "Virtual",
+ ParentId: parentId,
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Thumb",
+ EnableTotalRecordCount: false
+ };
+ ApiClient.getItems(ApiClient.getCurrentUserId(), options).then(function (result) {
+ if (result.Items.length) {
+ view.querySelector("#resumableSection").classList.remove("hide");
+ } else {
+ view.querySelector("#resumableSection").classList.add("hide");
+ }
+
+ var allowBottomPadding = !enableScrollX();
+ var container = view.querySelector("#resumableItems");
cardBuilder.buildCards(result.Items, {
itemsContainer: container,
- preferThumb: !0,
+ preferThumb: true,
shape: getThumbShape(),
- scalable: !0,
- showTitle: !0,
- showParentTitle: !0,
- overlayText: !1,
- centerText: !0,
- overlayPlayButton: !0,
+ scalable: true,
+ showTitle: true,
+ showParentTitle: true,
+ overlayText: false,
+ centerText: true,
+ overlayPlayButton: true,
allowBottomPadding: allowBottomPadding,
- cardLayout: !1
- })
- })
+ cardLayout: false
+ });
+ });
}
function onBeforeTabChange(e) {
- preLoadTab(view, parseInt(e.detail.selectedTabIndex))
+ preLoadTab(view, parseInt(e.detail.selectedTabIndex));
}
function onTabChange(e) {
var newIndex = parseInt(e.detail.selectedTabIndex);
- loadTab(view, newIndex)
+ loadTab(view, newIndex);
}
function getTabContainers() {
- return view.querySelectorAll(".pageTabContent")
+ return view.querySelectorAll(".pageTabContent");
}
function initTabs() {
- mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange)
+ mainTabsManager.setTabs(view, currentTabIndex, getTabs, getTabContainers, onBeforeTabChange, onTabChange);
}
function getTabController(page, index, callback) {
var depends = [];
+
switch (index) {
case 0:
depends.push("controllers/shows/tvshows");
break;
+
case 1:
break;
+
case 2:
depends.push("controllers/shows/tvlatest");
break;
+
case 3:
depends.push("controllers/shows/tvupcoming");
break;
+
case 4:
depends.push("controllers/shows/tvgenres");
break;
+
case 5:
depends.push("controllers/shows/tvstudios");
break;
+
case 6:
depends.push("controllers/shows/episodes");
break;
+
case 7:
- depends.push("scripts/searchtab")
+ depends.push("scripts/searchtab");
}
- require(depends, function(controllerFactory) {
+
+ require(depends, function (controllerFactory) {
var tabContent;
- 1 === index && (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), self.tabContent = tabContent);
+
+ if (index === 1) {
+ tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+ self.tabContent = tabContent;
+ }
+
var controller = tabControllers[index];
- controller || (tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']"), controller = 1 === index ? self : 7 === index ? new controllerFactory(view, tabContent, {
- collectionType: "tvshows",
- parentId: params.topParentId
- }) : new controllerFactory(view, params, tabContent), tabControllers[index] = controller, controller.initTab && controller.initTab()), callback(controller)
- })
+
+ if (!controller) {
+ tabContent = view.querySelector(".pageTabContent[data-index='" + index + "']");
+
+ if (index === 1) {
+ controller = self;
+ } else if (index === 7) {
+ controller = new controllerFactory(view, tabContent, {
+ collectionType: "tvshows",
+ parentId: params.topParentId
+ });
+ } else {
+ controller = new controllerFactory(view, params, tabContent);
+ }
+
+ tabControllers[index] = controller;
+
+ if (controller.initTab) {
+ controller.initTab();
+ }
+ }
+
+ callback(controller);
+ });
}
function preLoadTab(page, index) {
- getTabController(page, index, function(controller) {
- -1 == renderedTabs.indexOf(index) && controller.preRender && controller.preRender()
- })
+ getTabController(page, index, function (controller) {
+ if (renderedTabs.indexOf(index) == -1 && controller.preRender) {
+ controller.preRender();
+ }
+ });
}
function loadTab(page, index) {
- currentTabIndex = index, getTabController(page, index, function(controller) {
- initialTabIndex = null, -1 == renderedTabs.indexOf(index) && (renderedTabs.push(index), controller.renderTab())
- })
+ currentTabIndex = index;
+ getTabController(page, index, function (controller) {
+ initialTabIndex = null;
+
+ if (renderedTabs.indexOf(index) == -1) {
+ renderedTabs.push(index);
+ controller.renderTab();
+ }
+ });
}
function onPlaybackStop(e, state) {
- state.NowPlayingItem && "Video" == state.NowPlayingItem.MediaType && (renderedTabs = [], mainTabsManager.getTabsElement().triggerTabChange())
+ if (state.NowPlayingItem && state.NowPlayingItem.MediaType == "Video") {
+ renderedTabs = [];
+ mainTabsManager.getTabsElement().triggerTabChange();
+ }
}
function onWebSocketMessage(e, data) {
var msg = data;
- "UserDataChanged" === msg.MessageType && msg.Data.UserId == ApiClient.getCurrentUserId() && (renderedTabs = [])
+
+ if (msg.MessageType === "UserDataChanged" && msg.Data.UserId == ApiClient.getCurrentUserId()) {
+ renderedTabs = [];
+ }
}
function onInputCommand(e) {
switch (e.detail.command) {
case "search":
- e.preventDefault(), Dashboard.navigate("search.html?collectionType=tv&parentId=" + params.topParentId)
+ e.preventDefault();
+ Dashboard.navigate("search.html?collectionType=tv&parentId=" + params.topParentId);
}
}
- var isViewRestored, self = this,
- currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId)),
- initialTabIndex = currentTabIndex;
- self.initTab = function() {
+
+ var isViewRestored;
+ var self = this;
+ var currentTabIndex = parseInt(params.tab || getDefaultTabIndex(params.topParentId));
+ var initialTabIndex = currentTabIndex;
+
+ self.initTab = function () {
var tabContent = self.tabContent;
setScrollClasses(tabContent.querySelector("#resumableItems"), enableScrollX());
- }, self.renderTab = function() {
- reload()
};
- var tabControllers = [],
- renderedTabs = [];
- setScrollClasses(view.querySelector("#resumableItems"), enableScrollX()), view.addEventListener("viewshow", function(e) {
- if (isViewRestored = e.detail.isRestored, initTabs(), !view.getAttribute("data-title")) {
+
+ self.renderTab = function () {
+ reload();
+ };
+
+ var tabControllers = [];
+ var renderedTabs = [];
+ setScrollClasses(view.querySelector("#resumableItems"), enableScrollX());
+ view.addEventListener("viewshow", function (e) {
+ isViewRestored = e.detail.isRestored;
+ initTabs();
+ if (!view.getAttribute("data-title")) {
var parentId = params.topParentId;
- parentId ? ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function(item) {
- view.setAttribute("data-title", item.Name), libraryMenu.setTitle(item.Name)
- }) : (view.setAttribute("data-title", Globalize.translate("TabShows")), libraryMenu.setTitle(Globalize.translate("TabShows")))
+
+ if (parentId) {
+ ApiClient.getItem(ApiClient.getCurrentUserId(), parentId).then(function (item) {
+ view.setAttribute("data-title", item.Name);
+ libraryMenu.setTitle(item.Name);
+ });
+ } else {
+ view.setAttribute("data-title", Globalize.translate("TabShows"));
+ libraryMenu.setTitle(Globalize.translate("TabShows"));
+ }
}
- events.on(playbackManager, "playbackstop", onPlaybackStop), events.on(ApiClient, "message", onWebSocketMessage), inputManager.on(window, onInputCommand)
- }), view.addEventListener("viewbeforehide", function(e) {
- inputManager.off(window, onInputCommand), events.off(playbackManager, "playbackstop", onPlaybackStop), events.off(ApiClient, "message", onWebSocketMessage)
- }), view.addEventListener("viewdestroy", function(e) {
- tabControllers.forEach(function(t) {
- t.destroy && t.destroy()
- })
- })
- }
+
+ events.on(playbackManager, "playbackstop", onPlaybackStop);
+ events.on(ApiClient, "message", onWebSocketMessage);
+ inputManager.on(window, onInputCommand);
+ });
+ view.addEventListener("viewbeforehide", function (e) {
+ inputManager.off(window, onInputCommand);
+ events.off(playbackManager, "playbackstop", onPlaybackStop);
+ events.off(ApiClient, "message", onWebSocketMessage);
+ });
+ view.addEventListener("viewdestroy", function (e) {
+ tabControllers.forEach(function (t) {
+ if (t.destroy) {
+ t.destroy();
+ }
+ });
+ });
+ };
});
diff --git a/src/controllers/shows/tvshows.js b/src/controllers/shows/tvshows.js
index ac832a915..adccd9823 100644
--- a/src/controllers/shows/tvshows.js
+++ b/src/controllers/shows/tvshows.js
@@ -1,199 +1,284 @@
-define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "emby-itemscontainer"], function(layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker) {
+define(["layoutManager", "loading", "events", "libraryBrowser", "imageLoader", "listView", "cardBuilder", "alphaPicker", "emby-itemscontainer"], function (layoutManager, loading, events, libraryBrowser, imageLoader, listView, cardBuilder, alphaPicker) {
"use strict";
- return function(view, params, tabContent) {
+
+ return function (view, params, tabContent) {
function getPageData(context) {
- var key = getSavedQueryKey(context),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Series",
- Recursive: !0,
- Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
- ImageTypeLimit: 1,
- EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- StartIndex: 0,
- Limit: pageSize
- },
- view: libraryBrowser.getSavedView(key) || "Poster"
- }, pageData.query.ParentId = params.topParentId, libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
+ var key = getSavedQueryKey(context);
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Series",
+ Recursive: true,
+ Fields: "PrimaryImageAspectRatio,BasicSyncInfo",
+ ImageTypeLimit: 1,
+ EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
+ StartIndex: 0,
+ Limit: pageSize
+ },
+ view: libraryBrowser.getSavedView(key) || "Poster"
+ };
+ pageData.query.ParentId = params.topParentId;
+ libraryBrowser.loadSavedQueryValues(key, pageData.query);
+ }
+
+ return pageData;
}
function getQuery(context) {
- return getPageData(context).query
+ return getPageData(context).query;
}
function getSavedQueryKey(context) {
- return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey("series")), context.savedQueryKey
+ if (!context.savedQueryKey) {
+ context.savedQueryKey = libraryBrowser.getSavedQueryKey("series");
+ }
+
+ return context.savedQueryKey;
}
function onViewStyleChange() {
- var viewStyle = self.getCurrentViewStyle(),
- itemsContainer = tabContent.querySelector(".itemsContainer");
- "List" == viewStyle ? (itemsContainer.classList.add("vertical-list"), itemsContainer.classList.remove("vertical-wrap")) : (itemsContainer.classList.remove("vertical-list"), itemsContainer.classList.add("vertical-wrap")), itemsContainer.innerHTML = ""
+ var viewStyle = self.getCurrentViewStyle();
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+
+ 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.innerHTML = "";
}
function reloadItems(page) {
loading.show();
isLoading = true;
var query = getQuery(page);
- ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function(result) {
+ ApiClient.getItems(ApiClient.getCurrentUserId(), query).then(function (result) {
function onNextPageClick() {
- if (isLoading) return;
+ if (isLoading) {
+ return;
+ }
+
query.StartIndex += query.Limit;
reloadItems(tabContent);
}
function onPreviousPageClick() {
- if (isLoading) return;
+ if (isLoading) {
+ return;
+ }
+
query.StartIndex -= query.Limit;
reloadItems(tabContent);
}
- window.scrollTo(0, 0), updateFilterControls(page);
- var html, pagingHtml = libraryBrowser.getQueryPagingHtml({
- startIndex: query.StartIndex,
- limit: query.Limit,
- totalRecordCount: result.TotalRecordCount,
- showLimit: !1,
- updatePageSizeSetting: !1,
- addLayoutButton: !1,
- sortButton: !1,
- filterButton: !1
- }),
- viewStyle = self.getCurrentViewStyle();
- html = "Thumb" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "tvshows",
- overlayMoreButton: !0,
- showTitle: !0,
- centerText: !0
- }) : "ThumbCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "backdrop",
- preferThumb: !0,
- context: "tvshows",
- cardLayout: !0,
- showTitle: !0,
- showYear: !0,
- centerText: !0
- }) : "Banner" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "banner",
- preferBanner: !0,
- context: "tvshows"
- }) : "List" == viewStyle ? listView.getListViewHtml({
- items: result.Items,
- context: "tvshows",
- sortBy: query.SortBy
- }) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "portrait",
- context: "tvshows",
- showTitle: !0,
- showYear: !0,
- centerText: !0,
- cardLayout: !0
- }) : cardBuilder.getCardsHtml({
- items: result.Items,
- shape: "portrait",
- context: "tvshows",
- centerText: !0,
- lazy: !0,
- overlayMoreButton: !0,
- showTitle: !0,
- showYear: !0
+
+ window.scrollTo(0, 0);
+ updateFilterControls(page);
+ var html;
+ var pagingHtml = libraryBrowser.getQueryPagingHtml({
+ startIndex: query.StartIndex,
+ limit: query.Limit,
+ totalRecordCount: result.TotalRecordCount,
+ showLimit: false,
+ updatePageSizeSetting: false,
+ addLayoutButton: false,
+ sortButton: false,
+ filterButton: false
});
- var i, length, elems = tabContent.querySelectorAll(".paging");
- for (i = 0, length = elems.length; i < length; i++) elems[i].innerHTML = pagingHtml;
- for (elems = tabContent.querySelectorAll(".btnNextPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onNextPageClick);
- for (elems = tabContent.querySelectorAll(".btnPreviousPage"), i = 0, length = elems.length; i < length; i++) elems[i].addEventListener("click", onPreviousPageClick);
+ var viewStyle = self.getCurrentViewStyle();
+ if (viewStyle == "Thumb") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "tvshows",
+ overlayMoreButton: true,
+ showTitle: true,
+ centerText: true
+ });
+ } else if (viewStyle == "ThumbCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "backdrop",
+ preferThumb: true,
+ context: "tvshows",
+ cardLayout: true,
+ showTitle: true,
+ showYear: true,
+ centerText: true
+ });
+ } else if (viewStyle == "Banner") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "banner",
+ preferBanner: true,
+ context: "tvshows"
+ });
+ } else if (viewStyle == "List") {
+ html = listView.getListViewHtml({
+ items: result.Items,
+ context: "tvshows",
+ sortBy: query.SortBy
+ });
+ } else if (viewStyle == "PosterCard") {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "portrait",
+ context: "tvshows",
+ showTitle: true,
+ showYear: true,
+ centerText: true,
+ cardLayout: true
+ });
+ } else {
+ html = cardBuilder.getCardsHtml({
+ items: result.Items,
+ shape: "portrait",
+ context: "tvshows",
+ centerText: true,
+ lazy: true,
+ overlayMoreButton: true,
+ showTitle: true,
+ showYear: true
+ });
+ }
+ var i;
+ var length;
+ var elems = tabContent.querySelectorAll(".paging");
+
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].innerHTML = pagingHtml;
+ }
+
+ elems = tabContent.querySelectorAll(".btnNextPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onNextPageClick);
+ }
+
+ elems = tabContent.querySelectorAll(".btnPreviousPage");
+ for (i = 0, length = elems.length; i < length; i++) {
+ elems[i].addEventListener("click", onPreviousPageClick);
+ }
+
var itemsContainer = tabContent.querySelector(".itemsContainer");
itemsContainer.innerHTML = html;
imageLoader.lazyChildren(itemsContainer);
libraryBrowser.saveQueryValues(getSavedQueryKey(page), query);
loading.hide();
isLoading = false;
- })
+ });
}
function updateFilterControls(tabContent) {
var query = getQuery(tabContent);
- self.alphaPicker.value(query.NameStartsWithOrGreater)
+ self.alphaPicker.value(query.NameStartsWithOrGreater);
}
- var self = this,
- pageSize = 100,
- data = {},
- isLoading = false;
- self.showFilterMenu = function() {
- require(["components/filterdialog/filterdialog"], function(filterDialogFactory) {
- var filterDialog = new filterDialogFactory({
- query: getQuery(tabContent),
- mode: "series",
- serverId: ApiClient.serverId()
- });
- events.on(filterDialog, "filterchange", function() {
- getQuery(tabContent).StartIndex = 0, reloadItems(tabContent)
- }), filterDialog.show()
- })
- }, self.getCurrentViewStyle = function() {
- return getPageData(tabContent).view
- },
- function(tabContent) {
- var alphaPickerElement = tabContent.querySelector(".alphaPicker");
- if (alphaPickerElement.addEventListener("alphavaluechanged", function(e) {
- var newValue = e.detail.value,
- query = getQuery(tabContent);
- query.NameStartsWithOrGreater = newValue, query.StartIndex = 0, reloadItems(tabContent)
- }), self.alphaPicker = new alphaPicker({
- element: alphaPickerElement,
- valueChangeEvent: "click"
- }), layoutManager.desktop || layoutManager.mobile) {
- tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
- var itemsContainer = tabContent.querySelector(".itemsContainer");
- itemsContainer.classList.remove("padded-left-withalphapicker"), itemsContainer.classList.add("padded-right-withalphapicker")
- }
- tabContent.querySelector(".btnFilter").addEventListener("click", function() {
- self.showFilterMenu()
- }), tabContent.querySelector(".btnSort").addEventListener("click", function(e) {
- libraryBrowser.showSortMenu({
- items: [{
- name: Globalize.translate("OptionNameSort"),
- id: "SortName"
- }, {
- name: Globalize.translate("OptionImdbRating"),
- id: "CommunityRating,SortName"
- }, {
- name: Globalize.translate("OptionDateAdded"),
- id: "DateCreated,SortName"
- }, {
- name: Globalize.translate("OptionDatePlayed"),
- id: "DatePlayed,SortName"
- }, {
- name: Globalize.translate("OptionParentalRating"),
- id: "OfficialRating,SortName"
- }, {
- name: Globalize.translate("OptionReleaseDate"),
- id: "PremiereDate,SortName"
- }],
- callback: function() {
- getQuery(tabContent).StartIndex = 0, reloadItems(tabContent)
- },
- query: getQuery(tabContent),
- button: e.target
- })
+
+ var self = this;
+ var pageSize = 100;
+ var data = {};
+ var isLoading = false;
+
+ self.showFilterMenu = function () {
+ require(["components/filterdialog/filterdialog"], function (filterDialogFactory) {
+ var filterDialog = new filterDialogFactory({
+ query: getQuery(tabContent),
+ mode: "series",
+ serverId: ApiClient.serverId()
});
- 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) {
- var viewStyle = e.detail.viewStyle;
- getPageData(tabContent).view = viewStyle, libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle), getQuery(tabContent).StartIndex = 0, onViewStyleChange(), reloadItems(tabContent)
- })
- }(tabContent), onViewStyleChange(), self.renderTab = function() {
- reloadItems(tabContent), updateFilterControls(tabContent)
- }, self.destroy = function() {}
- }
+ events.on(filterDialog, "filterchange", function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ filterDialog.show();
+ });
+ };
+
+ self.getCurrentViewStyle = function () {
+ return getPageData(tabContent).view;
+ };
+
+ function initPage(tabContent) {
+ var alphaPickerElement = tabContent.querySelector(".alphaPicker");
+
+ alphaPickerElement.addEventListener("alphavaluechanged", function (e) {
+ var newValue = e.detail.value;
+ var query = getQuery(tabContent);
+ query.NameStartsWithOrGreater = newValue;
+ query.StartIndex = 0;
+ reloadItems(tabContent);
+ });
+ self.alphaPicker = new alphaPicker({
+ element: alphaPickerElement,
+ valueChangeEvent: "click"
+ });
+ if (layoutManager.desktop || layoutManager.mobile) {
+ tabContent.querySelector(".alphaPicker").classList.add("alphabetPicker-right");
+ var itemsContainer = tabContent.querySelector(".itemsContainer");
+ itemsContainer.classList.remove("padded-left-withalphapicker");
+ itemsContainer.classList.add("padded-right-withalphapicker");
+ }
+
+ tabContent.querySelector(".btnFilter").addEventListener("click", function () {
+ self.showFilterMenu();
+ });
+ tabContent.querySelector(".btnSort").addEventListener("click", function (e) {
+ libraryBrowser.showSortMenu({
+ items: [{
+ name: Globalize.translate("OptionNameSort"),
+ id: "SortName"
+ }, {
+ name: Globalize.translate("OptionImdbRating"),
+ id: "CommunityRating,SortName"
+ }, {
+ name: Globalize.translate("OptionDateAdded"),
+ id: "DateCreated,SortName"
+ }, {
+ name: Globalize.translate("OptionDatePlayed"),
+ id: "DatePlayed,SortName"
+ }, {
+ name: Globalize.translate("OptionParentalRating"),
+ id: "OfficialRating,SortName"
+ }, {
+ name: Globalize.translate("OptionReleaseDate"),
+ id: "PremiereDate,SortName"
+ }],
+ callback: function () {
+ getQuery(tabContent).StartIndex = 0;
+ reloadItems(tabContent);
+ },
+ query: getQuery(tabContent),
+ 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(","));
+ });
+ btnSelectView.addEventListener("layoutchange", function (e) {
+ var viewStyle = e.detail.viewStyle;
+ getPageData(tabContent).view = viewStyle;
+ libraryBrowser.saveViewSetting(getSavedQueryKey(tabContent), viewStyle);
+ getQuery(tabContent).StartIndex = 0;
+ onViewStyleChange();
+ reloadItems(tabContent);
+ });
+ }
+
+ initPage(tabContent);
+ onViewStyleChange();
+
+ self.renderTab = function () {
+ reloadItems(tabContent);
+ updateFilterControls(tabContent);
+ };
+
+ self.destroy = function () {};
+ };
});
diff --git a/src/controllers/shows/tvstudios.js b/src/controllers/shows/tvstudios.js
index bfa33401f..3c000a8e7 100644
--- a/src/controllers/shows/tvstudios.js
+++ b/src/controllers/shows/tvstudios.js
@@ -1,52 +1,65 @@
-define(["loading", "libraryBrowser", "cardBuilder", "apphost"], function(loading, libraryBrowser, cardBuilder, appHost) {
+define(["loading", "libraryBrowser", "cardBuilder", "apphost"], function (loading, libraryBrowser, cardBuilder, appHost) {
"use strict";
function getQuery(params) {
- var key = getSavedQueryKey(),
- pageData = data[key];
- return pageData || (pageData = data[key] = {
- query: {
- SortBy: "SortName",
- SortOrder: "Ascending",
- IncludeItemTypes: "Series",
- Recursive: !0,
- Fields: "DateCreated,PrimaryImageAspectRatio",
- StartIndex: 0
- }
- }, pageData.query.ParentId = params.topParentId), pageData.query
+ var key = getSavedQueryKey();
+ var pageData = data[key];
+
+ if (!pageData) {
+ pageData = data[key] = {
+ query: {
+ SortBy: "SortName",
+ SortOrder: "Ascending",
+ IncludeItemTypes: "Series",
+ Recursive: true,
+ Fields: "DateCreated,PrimaryImageAspectRatio",
+ StartIndex: 0
+ }
+ };
+ pageData.query.ParentId = params.topParentId;
+ }
+
+ return pageData.query;
}
function getSavedQueryKey() {
- return libraryBrowser.getSavedQueryKey("studios")
+ return libraryBrowser.getSavedQueryKey("studios");
}
function getPromise(context, params) {
var query = getQuery(params);
- return loading.show(), ApiClient.getStudios(ApiClient.getCurrentUserId(), query)
+ loading.show();
+ return ApiClient.getStudios(ApiClient.getCurrentUserId(), query);
}
function reloadItems(context, params, promise) {
- promise.then(function(result) {
+ promise.then(function (result) {
var elem = context.querySelector("#items");
cardBuilder.buildCards(result.Items, {
itemsContainer: elem,
shape: "backdrop",
- preferThumb: !0,
- showTitle: !0,
- scalable: !0,
- centerText: !0,
- overlayMoreButton: !0,
+ preferThumb: true,
+ showTitle: true,
+ scalable: true,
+ centerText: true,
+ overlayMoreButton: true,
context: "tvshows"
- }), loading.hide()
- })
+ });
+ loading.hide();
+ });
}
+
var data = {};
- return function(view, params, tabContent) {
- var promise, self = this;
- self.preRender = function() {
- promise = getPromise(view, params)
- }, self.renderTab = function() {
- reloadItems(tabContent, params, promise)
- }
- }
-});
\ No newline at end of file
+ return function (view, params, tabContent) {
+ var promise;
+ var self = this;
+
+ self.preRender = function () {
+ promise = getPromise(view, params);
+ };
+
+ self.renderTab = function () {
+ reloadItems(tabContent, params, promise);
+ };
+ };
+});
diff --git a/src/controllers/shows/tvupcoming.js b/src/controllers/shows/tvupcoming.js
index 9d6a79a5e..162e6fcb3 100644
--- a/src/controllers/shows/tvupcoming.js
+++ b/src/controllers/shows/tvupcoming.js
@@ -1,4 +1,4 @@
-define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer"], function(layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader) {
+define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder", "apphost", "imageLoader", "scrollStyles", "emby-itemscontainer"], function (layoutManager, loading, datetime, libraryBrowser, cardBuilder, appHost, imageLoader) {
"use strict";
function getUpcomingPromise(context, params) {
@@ -9,82 +9,129 @@ define(["layoutManager", "loading", "datetime", "libraryBrowser", "cardBuilder",
UserId: ApiClient.getCurrentUserId(),
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
- EnableTotalRecordCount: !1
+ EnableTotalRecordCount: false
};
- return query.ParentId = params.topParentId, ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query))
+ query.ParentId = params.topParentId;
+ return ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query));
}
function loadUpcoming(context, params, promise) {
- promise.then(function(result) {
+ promise.then(function (result) {
var items = result.Items;
- items.length ? context.querySelector(".noItemsMessage").style.display = "none" : context.querySelector(".noItemsMessage").style.display = "block", renderUpcoming(context.querySelector("#upcomingItems"), items), loading.hide()
- })
+
+ if (items.length) {
+ context.querySelector(".noItemsMessage").style.display = "none";
+ } else {
+ context.querySelector(".noItemsMessage").style.display = "block";
+ }
+
+ renderUpcoming(context.querySelector("#upcomingItems"), items);
+ loading.hide();
+ });
}
function enableScrollX() {
- return !layoutManager.desktop
+ return !layoutManager.desktop;
}
function getThumbShape() {
- return enableScrollX() ? "overflowBackdrop" : "backdrop"
+ return enableScrollX() ? "overflowBackdrop" : "backdrop";
}
function renderUpcoming(elem, items) {
- var i, length, groups = [],
- currentGroupName = "",
- currentGroup = [];
+ var i;
+ var length;
+ var groups = [];
+ var currentGroupName = "";
+ var currentGroup = [];
+
for (i = 0, length = items.length; i < length; i++) {
- var item = items[i],
- dateText = "";
- if (item.PremiereDate) try {
- var premiereDate = datetime.parseISO8601Date(item.PremiereDate, !0);
- dateText = datetime.isRelativeDay(premiereDate, -1) ? Globalize.translate("Yesterday") : datetime.toLocaleDateString(premiereDate, {
- weekday: "long",
- month: "short",
- day: "numeric"
- })
- } catch (err) {}
- dateText != currentGroupName ? (currentGroup.length && groups.push({
- name: currentGroupName,
- items: currentGroup
- }), currentGroupName = dateText, currentGroup = [item]) : currentGroup.push(item)
+ var item = items[i];
+ 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"
+ });
+ } catch (err) {}
+ }
+
+ if (dateText != currentGroupName) {
+ if (currentGroup.length) {
+ groups.push({
+ name: currentGroupName,
+ items: currentGroup
+ });
+ }
+
+ currentGroupName = dateText;
+ currentGroup = [item];
+ } else {
+ currentGroup.push(item);
+ }
}
+
var html = "";
+
for (i = 0, length = groups.length; i < length; i++) {
var group = groups[i];
- html += '
', html += '
' + group.name + " ";
- var allowBottomPadding = !0;
+ html += '
';
+ html += '
' + group.name + " ";
+ var allowBottomPadding = true;
+
if (enableScrollX()) {
- allowBottomPadding = !1;
+ allowBottomPadding = false;
var scrollXClass = "scrollX hiddenScrollX";
- layoutManager.tv && (scrollXClass += " smoothScrollX"), html += '
";
}
- elem.innerHTML = html, imageLoader.lazyChildren(elem)
+
+ elem.innerHTML = html;
+ imageLoader.lazyChildren(elem);
}
- return function(view, params, tabContent) {
- var upcomingPromise, self = this;
- self.preRender = function() {
- upcomingPromise = getUpcomingPromise(view, params)
- }, self.renderTab = function() {
- loadUpcoming(tabContent, params, upcomingPromise)
- }
- }
-});
\ No newline at end of file
+
+ return function (view, params, tabContent) {
+ var upcomingPromise;
+ var self = this;
+
+ self.preRender = function () {
+ upcomingPromise = getUpcomingPromise(view, params);
+ };
+
+ self.renderTab = function () {
+ loadUpcoming(tabContent, params, upcomingPromise);
+ };
+ };
+});
diff --git a/src/controllers/streamingsettings.js b/src/controllers/streamingsettings.js
index 6f19a6842..6c8503445 100644
--- a/src/controllers/streamingsettings.js
+++ b/src/controllers/streamingsettings.js
@@ -1,16 +1,19 @@
-define(["jQuery", "libraryMenu", "loading"], function($, libraryMenu, loading) {
+define(["jQuery", "libraryMenu", "loading"], function ($, libraryMenu, loading) {
"use strict";
function loadPage(page, config) {
- $("#txtRemoteClientBitrateLimit", page).val(config.RemoteClientBitrateLimit / 1e6 || ""), loading.hide()
+ $("#txtRemoteClientBitrateLimit", page).val(config.RemoteClientBitrateLimit / 1e6 || "");
+ loading.hide();
}
function onSubmit() {
loading.show();
var form = this;
- return ApiClient.getServerConfiguration().then(function(config) {
- config.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($("#txtRemoteClientBitrateLimit", form).val() || "0")), ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult)
- }), !1
+ ApiClient.getServerConfiguration().then(function (config) {
+ config.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($("#txtRemoteClientBitrateLimit", form).val() || "0"));
+ ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult);
+ });
+ return false;
}
function getTabs() {
@@ -23,30 +26,35 @@ define(["jQuery", "libraryMenu", "loading"], function($, libraryMenu, loading) {
}, {
href: "streamingsettings.html",
name: Globalize.translate("TabStreaming")
- }]
+ }];
}
- $(document).on("pageinit", "#streamingSettingsPage", function() {
+ $(document).on("pageinit", "#streamingSettingsPage", function () {
var page = this;
- $("#btnSelectTranscodingTempPath", page).on("click.selectDirectory", function() {
- require(["directorybrowser"], function(directoryBrowser) {
- var picker = new directoryBrowser;
+ $("#btnSelectTranscodingTempPath", page).on("click.selectDirectory", function () {
+ require(["directorybrowser"], function (directoryBrowser) {
+ var picker = new directoryBrowser();
picker.show({
- callback: function(path) {
- path && $("#txtTranscodingTempPath", page).val(path), picker.close()
+ callback: function (path) {
+ if (path) {
+ $("#txtTranscodingTempPath", page).val(path);
+ }
+
+ picker.close();
},
- validateWriteable: !0,
+ validateWriteable: true,
header: Globalize.translate("HeaderSelectTranscodingPath"),
instruction: Globalize.translate("HeaderSelectTranscodingPathHelp")
- })
- })
- }), $(".streamingSettingsForm").off("submit", onSubmit).on("submit", onSubmit)
- }).on("pageshow", "#streamingSettingsPage", function() {
+ });
+ });
+ });
+ $(".streamingSettingsForm").off("submit", onSubmit).on("submit", onSubmit);
+ }).on("pageshow", "#streamingSettingsPage", function () {
loading.show();
libraryMenu.setTabs("playback", 2, getTabs);
var page = this;
- ApiClient.getServerConfiguration().then(function(config) {
- loadPage(page, config)
- })
- })
-});
\ No newline at end of file
+ ApiClient.getServerConfiguration().then(function (config) {
+ loadPage(page, config);
+ });
+ });
+});
diff --git a/src/controllers/user/display.js b/src/controllers/user/display.js
index 4b4440f96..f91e874a8 100644
--- a/src/controllers/user/display.js
+++ b/src/controllers/user/display.js
@@ -1,28 +1,49 @@
-define(["displaySettings", "userSettingsBuilder", "userSettings"], function(DisplaySettings, userSettingsBuilder, currentUserSettings) {
+define(["displaySettings", "userSettingsBuilder", "userSettings"], function (DisplaySettings, userSettingsBuilder, currentUserSettings) {
"use strict";
- return function(view, params) {
+
+ return function (view, params) {
function onBeforeUnload(e) {
- hasChanges && (e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?")
+ if (hasChanges) {
+ e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
+ }
}
- var settingsInstance, hasChanges, userId = params.userId || ApiClient.getCurrentUserId(),
- userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder;
- view.addEventListener("viewshow", function() {
- window.addEventListener("beforeunload", onBeforeUnload), settingsInstance ? settingsInstance.loadData() : settingsInstance = new DisplaySettings({
- serverId: ApiClient.serverId(),
- userId: userId,
- element: view.querySelector(".settingsContainer"),
- userSettings: userSettings,
- enableSaveButton: !1,
- enableSaveConfirmation: !1
- })
- }), view.addEventListener("change", function() {
- hasChanges = !0
- }), view.addEventListener("viewbeforehide", function() {
- window.removeEventListener("beforeunload", onBeforeUnload), hasChanges = !1, settingsInstance && settingsInstance.submit()
- }), view.addEventListener("viewdestroy", function() {
- settingsInstance && (settingsInstance.destroy(), settingsInstance = null)
- }), view.addEventListener("viewdestroy", function() {
- settingsInstance && (settingsInstance.destroy(), settingsInstance = null)
- })
- }
-});
\ No newline at end of file
+
+ var settingsInstance;
+ var hasChanges;
+ var userId = params.userId || ApiClient.getCurrentUserId();
+ var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
+ view.addEventListener("viewshow", function () {
+ window.addEventListener("beforeunload", onBeforeUnload);
+
+ if (settingsInstance) {
+ settingsInstance.loadData();
+ } else {
+ settingsInstance = new DisplaySettings({
+ serverId: ApiClient.serverId(),
+ userId: userId,
+ element: view.querySelector(".settingsContainer"),
+ userSettings: userSettings,
+ enableSaveButton: false,
+ enableSaveConfirmation: false
+ });
+ }
+ });
+ view.addEventListener("change", function () {
+ hasChanges = true;
+ });
+ view.addEventListener("viewbeforehide", function () {
+ window.removeEventListener("beforeunload", onBeforeUnload);
+ hasChanges = false;
+
+ if (settingsInstance) {
+ settingsInstance.submit();
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (settingsInstance) {
+ settingsInstance.destroy();
+ settingsInstance = null;
+ }
+ });
+ };
+});
diff --git a/src/controllers/user/home.js b/src/controllers/user/home.js
index a7147ddda..5794d5872 100644
--- a/src/controllers/user/home.js
+++ b/src/controllers/user/home.js
@@ -1,26 +1,48 @@
-define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "listViewStyle"], function(HomescreenSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings) {
+define(["homescreenSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "listViewStyle"], function (HomescreenSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings) {
"use strict";
- return function(view, params) {
+
+ return function (view, params) {
function onBeforeUnload(e) {
- hasChanges && (e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?")
+ if (hasChanges) {
+ e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
+ }
}
- var homescreenSettingsInstance, hasChanges, userId = params.userId || ApiClient.getCurrentUserId(),
- userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder;
- view.addEventListener("viewshow", function() {
- window.addEventListener("beforeunload", onBeforeUnload), homescreenSettingsInstance ? homescreenSettingsInstance.loadData() : homescreenSettingsInstance = new HomescreenSettings({
- serverId: ApiClient.serverId(),
- userId: userId,
- element: view.querySelector(".homeScreenSettingsContainer"),
- userSettings: userSettings,
- enableSaveButton: !1,
- enableSaveConfirmation: !1
- })
- }), view.addEventListener("change", function() {
- hasChanges = !0
- }), view.addEventListener("viewbeforehide", function() {
- hasChanges = !1, homescreenSettingsInstance && homescreenSettingsInstance.submit()
- }), view.addEventListener("viewdestroy", function() {
- homescreenSettingsInstance && (homescreenSettingsInstance.destroy(), homescreenSettingsInstance = null)
- })
- }
-});
\ No newline at end of file
+
+ var homescreenSettingsInstance;
+ var hasChanges;
+ var userId = params.userId || ApiClient.getCurrentUserId();
+ var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
+ view.addEventListener("viewshow", function () {
+ window.addEventListener("beforeunload", onBeforeUnload);
+
+ if (homescreenSettingsInstance) {
+ homescreenSettingsInstance.loadData();
+ } else {
+ homescreenSettingsInstance = new HomescreenSettings({
+ serverId: ApiClient.serverId(),
+ userId: userId,
+ element: view.querySelector(".homeScreenSettingsContainer"),
+ userSettings: userSettings,
+ enableSaveButton: false,
+ enableSaveConfirmation: false
+ });
+ }
+ });
+ view.addEventListener("change", function () {
+ hasChanges = true;
+ });
+ view.addEventListener("viewbeforehide", function () {
+ hasChanges = false;
+
+ if (homescreenSettingsInstance) {
+ homescreenSettingsInstance.submit();
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (homescreenSettingsInstance) {
+ homescreenSettingsInstance.destroy();
+ homescreenSettingsInstance = null;
+ }
+ });
+ };
+});
diff --git a/src/controllers/user/menu.js b/src/controllers/user/menu.js
index 6bac0011d..d9fa2ab99 100644
--- a/src/controllers/user/menu.js
+++ b/src/controllers/user/menu.js
@@ -18,7 +18,7 @@ define(["apphost", "connectionManager", "listViewStyle", "emby-button"], functio
page.querySelector(".lnkSubtitlePreferences").setAttribute("href", "mypreferencessubtitles.html?userId=" + userId);
if (appHost.supports("multiserver")) {
- page.querySelector(".selectServer").classList.remove("hide")
+ page.querySelector(".selectServer").classList.remove("hide");
} else {
page.querySelector(".selectServer").classList.add("hide");
}
@@ -35,6 +35,6 @@ define(["apphost", "connectionManager", "listViewStyle", "emby-button"], functio
page.querySelector(".adminSection").classList.add("hide");
}
});
- })
- }
+ });
+ };
});
diff --git a/src/controllers/user/playback.js b/src/controllers/user/playback.js
index 856470948..f2463ad8d 100644
--- a/src/controllers/user/playback.js
+++ b/src/controllers/user/playback.js
@@ -1,26 +1,48 @@
-define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "listViewStyle"], function(PlaybackSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings) {
+define(["playbackSettings", "userSettingsBuilder", "dom", "globalize", "loading", "userSettings", "listViewStyle"], function (PlaybackSettings, userSettingsBuilder, dom, globalize, loading, currentUserSettings) {
"use strict";
- return function(view, params) {
+
+ return function (view, params) {
function onBeforeUnload(e) {
- hasChanges && (e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?")
+ if (hasChanges) {
+ e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
+ }
}
- var settingsInstance, hasChanges, userId = params.userId || ApiClient.getCurrentUserId(),
- userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder;
- view.addEventListener("viewshow", function() {
- window.addEventListener("beforeunload", onBeforeUnload), settingsInstance ? settingsInstance.loadData() : settingsInstance = new PlaybackSettings({
- serverId: ApiClient.serverId(),
- userId: userId,
- element: view.querySelector(".settingsContainer"),
- userSettings: userSettings,
- enableSaveButton: !1,
- enableSaveConfirmation: !1
- })
- }), view.addEventListener("change", function() {
- hasChanges = !0
- }), view.addEventListener("viewbeforehide", function() {
- hasChanges = !1, settingsInstance && settingsInstance.submit()
- }), view.addEventListener("viewdestroy", function() {
- settingsInstance && (settingsInstance.destroy(), settingsInstance = null)
- })
- }
-});
\ No newline at end of file
+
+ var settingsInstance;
+ var hasChanges;
+ var userId = params.userId || ApiClient.getCurrentUserId();
+ var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
+ view.addEventListener("viewshow", function () {
+ window.addEventListener("beforeunload", onBeforeUnload);
+
+ if (settingsInstance) {
+ settingsInstance.loadData();
+ } else {
+ settingsInstance = new PlaybackSettings({
+ serverId: ApiClient.serverId(),
+ userId: userId,
+ element: view.querySelector(".settingsContainer"),
+ userSettings: userSettings,
+ enableSaveButton: false,
+ enableSaveConfirmation: false
+ });
+ }
+ });
+ view.addEventListener("change", function () {
+ hasChanges = true;
+ });
+ view.addEventListener("viewbeforehide", function () {
+ hasChanges = false;
+
+ if (settingsInstance) {
+ settingsInstance.submit();
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (settingsInstance) {
+ settingsInstance.destroy();
+ settingsInstance = null;
+ }
+ });
+ };
+});
diff --git a/src/controllers/user/subtitles.js b/src/controllers/user/subtitles.js
index 81d949e1a..205265efc 100644
--- a/src/controllers/user/subtitles.js
+++ b/src/controllers/user/subtitles.js
@@ -1,26 +1,48 @@
-define(["subtitleSettings", "userSettingsBuilder", "userSettings"], function(SubtitleSettings, userSettingsBuilder, currentUserSettings) {
+define(["subtitleSettings", "userSettingsBuilder", "userSettings"], function (SubtitleSettings, userSettingsBuilder, currentUserSettings) {
"use strict";
- return function(view, params) {
+
+ return function (view, params) {
function onBeforeUnload(e) {
- hasChanges && (e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?")
+ if (hasChanges) {
+ e.returnValue = "You currently have unsaved changes. Are you sure you wish to leave?";
+ }
}
- var subtitleSettingsInstance, hasChanges, userId = params.userId || ApiClient.getCurrentUserId(),
- userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder;
- view.addEventListener("viewshow", function() {
- window.addEventListener("beforeunload", onBeforeUnload), subtitleSettingsInstance ? subtitleSettingsInstance.loadData() : subtitleSettingsInstance = new SubtitleSettings({
- serverId: ApiClient.serverId(),
- userId: userId,
- element: view.querySelector(".settingsContainer"),
- userSettings: userSettings,
- enableSaveButton: !1,
- enableSaveConfirmation: !1
- })
- }), view.addEventListener("change", function() {
- hasChanges = !0
- }), view.addEventListener("viewbeforehide", function() {
- hasChanges = !1, subtitleSettingsInstance && subtitleSettingsInstance.submit()
- }), view.addEventListener("viewdestroy", function() {
- subtitleSettingsInstance && (subtitleSettingsInstance.destroy(), subtitleSettingsInstance = null)
- })
- }
-});
\ No newline at end of file
+
+ var subtitleSettingsInstance;
+ var hasChanges;
+ var userId = params.userId || ApiClient.getCurrentUserId();
+ var userSettings = userId === ApiClient.getCurrentUserId() ? currentUserSettings : new userSettingsBuilder();
+ view.addEventListener("viewshow", function () {
+ window.addEventListener("beforeunload", onBeforeUnload);
+
+ if (subtitleSettingsInstance) {
+ subtitleSettingsInstance.loadData();
+ } else {
+ subtitleSettingsInstance = new SubtitleSettings({
+ serverId: ApiClient.serverId(),
+ userId: userId,
+ element: view.querySelector(".settingsContainer"),
+ userSettings: userSettings,
+ enableSaveButton: false,
+ enableSaveConfirmation: false
+ });
+ }
+ });
+ view.addEventListener("change", function () {
+ hasChanges = true;
+ });
+ view.addEventListener("viewbeforehide", function () {
+ hasChanges = false;
+
+ if (subtitleSettingsInstance) {
+ subtitleSettingsInstance.submit();
+ }
+ });
+ view.addEventListener("viewdestroy", function () {
+ if (subtitleSettingsInstance) {
+ subtitleSettingsInstance.destroy();
+ subtitleSettingsInstance = null;
+ }
+ });
+ };
+});
diff --git a/src/controllers/useredit.js b/src/controllers/useredit.js
index 0709e8dae..fb6a3f94c 100644
--- a/src/controllers/useredit.js
+++ b/src/controllers/useredit.js
@@ -1,53 +1,84 @@
-define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, libraryMenu) {
+define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
"use strict";
function loadDeleteFolders(page, user, mediaFolders) {
ApiClient.getJSON(ApiClient.getUrl("Channels", {
- SupportsMediaDeletion: !0
- })).then(function(channelsResult) {
- var i, length, folder, isChecked, checkedAttribute, 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 += '
" + folder.Name + " ";
- 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 += '
" + folder.Name + " ";
- $(".deleteAccess", page).html(html).trigger("create"), $("#chkEnableDeleteAllFolders", page).checked(user.Policy.EnableContentDeletion).trigger("change")
- })
+ SupportsMediaDeletion: true
+ })).then(function (channelsResult) {
+ var i;
+ var length;
+ var folder;
+ var isChecked;
+ var checkedAttribute;
+ 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 += '
" + folder.Name + " ";
+ }
+
+ 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 += '
" + folder.Name + " ";
+ }
+
+ $(".deleteAccess", page).html(html).trigger("create");
+ $("#chkEnableDeleteAllFolders", page).checked(user.Policy.EnableContentDeletion).trigger("change");
+ });
}
function loadAuthProviders(page, user, providers) {
- providers.length > 1 ? page.querySelector(".fldSelectLoginProvider").classList.remove("hide") : page.querySelector(".fldSelectLoginProvider").classList.add("hide");
+ if (providers.length > 1) {
+ page.querySelector(".fldSelectLoginProvider").classList.remove("hide");
+ } else {
+ page.querySelector(".fldSelectLoginProvider").classList.add("hide");
+ }
+
var currentProviderId = user.Policy.AuthenticationProviderId;
- page.querySelector(".selectLoginProvider").innerHTML = providers.map(function(provider) {
+ page.querySelector(".selectLoginProvider").innerHTML = providers.map(function (provider) {
var selected = provider.Id === currentProviderId || providers.length < 2 ? " selected" : "";
- return '
" + provider.Name + " "
- })
+ return '
" + provider.Name + " ";
+ });
}
function loadPasswordResetProviders(page, user, providers) {
- providers.length > 1 ? page.querySelector(".fldSelectPasswordResetProvider").classList.remove("hide") : page.querySelector(".fldSelectPasswordResetProvider").classList.add("hide");
+ if (providers.length > 1) {
+ page.querySelector(".fldSelectPasswordResetProvider").classList.remove("hide");
+ } else {
+ 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 '
" + provider.Name + " "
- })
+ page.querySelector(".selectPasswordResetProvider").innerHTML = providers.map(function (provider) {
+ var selected = provider.Id === currentProviderId || providers.length < 2 ? " selected" : "";
+ return '
" + provider.Name + " ";
+ });
}
function loadUser(page, user) {
currentUser = user;
- ApiClient.getJSON(ApiClient.getUrl("Auth/Providers")).then(function(providers) {
- loadAuthProviders(page, user, providers)
+ ApiClient.getJSON(ApiClient.getUrl("Auth/Providers")).then(function (providers) {
+ loadAuthProviders(page, user, providers);
});
- ApiClient.getJSON(ApiClient.getUrl("Auth/PasswordResetProviders")).then(function(providers) {
- loadPasswordResetProviders(page, user, providers)
+ ApiClient.getJSON(ApiClient.getUrl("Auth/PasswordResetProviders")).then(function (providers) {
+ loadPasswordResetProviders(page, user, providers);
});
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
- IsHidden: false
- })).then(function(folders) {
- loadDeleteFolders(page, user, folders.Items)
+ IsHidden: false
+ })).then(function (folders) {
+ loadDeleteFolders(page, user, folders.Items);
});
+
if (user.Policy.IsDisabled) {
$(".disabledUserBanner", page).show();
} else {
$(".disabledUserBanner", page).hide();
}
+
$("#txtUserName", page).prop("disabled", "").removeAttr("disabled");
$("#fldConnectInfo", page).show();
$(".lnkEditUserPreferences", page).attr("href", "mypreferencesmenu.html?userId=" + user.Id);
@@ -78,7 +109,8 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, l
function onSaveComplete(page, user) {
Dashboard.navigate("userprofiles.html");
loading.hide();
- require(["toast"], function(toast) {
+
+ require(["toast"], function (toast) {
toast(Globalize.translate("SettingsSaved"));
});
}
@@ -106,45 +138,59 @@ define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, l
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")
+ user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : $(".chkFolder", page).get().filter(function (c) {
+ return c.checked;
+ }).map(function (c) {
+ return c.getAttribute("data-id");
+ });
+ ApiClient.updateUser(user).then(function () {
+ ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
+ onSaveComplete(page, user);
+ });
});
- ApiClient.updateUser(user).then(function() {
- ApiClient.updateUserPolicy(user.Id, user.Policy).then(function() {
- onSaveComplete(page, user)
- })
- })
}
function onSubmit() {
var page = $(this).parents(".page")[0];
- return loading.show(), getUser().then(function(result) {
- saveUser(result, page)
- }), !1
+ loading.show();
+ getUser().then(function (result) {
+ saveUser(result, page);
+ });
+ return false;
}
function getUser() {
var userId = getParameterByName("userId");
- return ApiClient.getUser(userId)
+ return ApiClient.getUser(userId);
}
function loadData(page) {
- loading.show(), getUser().then(function(user) {
- loadUser(page, user)
- })
+ loading.show();
+ getUser().then(function (user) {
+ loadUser(page, user);
+ });
}
+
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() {
- this.checked ? $(".deleteAccess", page).hide() : $(".deleteAccess", page).show()
- }), ApiClient.getServerConfiguration().then(function(config) {
- config.EnableRemoteAccess ? page.querySelector(".fldRemoteAccess").classList.remove("hide") : page.querySelector(".fldRemoteAccess").classList.add("hide")
- })
- }).on("pagebeforeshow", "#editUserPage", function() {
- loadData(this)
- })
+ $("#chkEnableDeleteAllFolders", this).on("change", function () {
+ if (this.checked) {
+ $(".deleteAccess", page).hide();
+ } else {
+ $(".deleteAccess", page).show();
+ }
+ });
+ ApiClient.getServerConfiguration().then(function (config) {
+ if (config.EnableRemoteAccess) {
+ page.querySelector(".fldRemoteAccess").classList.remove("hide");
+ } else {
+ page.querySelector(".fldRemoteAccess").classList.add("hide");
+ }
+ });
+ }).on("pagebeforeshow", "#editUserPage", function () {
+ loadData(this);
+ });
});
diff --git a/src/controllers/userlibraryaccess.js b/src/controllers/userlibraryaccess.js
index 8352e90c3..38418f519 100644
--- a/src/controllers/userlibraryaccess.js
+++ b/src/controllers/userlibraryaccess.js
@@ -1,112 +1,178 @@
-define(["jQuery", "loading", "libraryMenu", "fnchecked"], function($, loading, libraryMenu) {
+define(["jQuery", "loading", "libraryMenu", "fnchecked"], function ($, loading, libraryMenu) {
"use strict";
function triggerChange(select) {
var evt = document.createEvent("HTMLEvents");
- evt.initEvent("change", !1, !0), select.dispatchEvent(evt)
+ evt.initEvent("change", false, true);
+ select.dispatchEvent(evt);
}
function loadMediaFolders(page, user, mediaFolders) {
var html = "";
- html += '
' + Globalize.translate("HeaderLibraries") + " ", html += '
";
+ page.querySelector(".folderAccess").innerHTML = html;
var chkEnableAllFolders = page.querySelector("#chkEnableAllFolders");
- chkEnableAllFolders.checked = user.Policy.EnableAllFolders, triggerChange(chkEnableAllFolders)
+ chkEnableAllFolders.checked = user.Policy.EnableAllFolders;
+ triggerChange(chkEnableAllFolders);
}
function loadChannels(page, user, channels) {
var html = "";
- html += '
' + Globalize.translate("HeaderChannels") + " ", html += '
';
+ html += '
' + Globalize.translate("HeaderChannels") + " ";
+ html += '
';
+
for (var i = 0, length = channels.length; i < length; i++) {
- var folder = channels[i],
- isChecked = user.Policy.EnableAllChannels || -1 != user.Policy.EnabledChannels.indexOf(folder.Id),
- checkedAttribute = isChecked ? ' checked="checked"' : "";
- html += '" + folder.Name + " "
+ var folder = channels[i];
+ var isChecked = user.Policy.EnableAllChannels || -1 != user.Policy.EnabledChannels.indexOf(folder.Id);
+ var checkedAttribute = isChecked ? ' checked="checked"' : "";
+ html += '" + folder.Name + " ";
}
- html += "
", $(".channelAccess", page).show().html(html), channels.length ? $(".channelAccessContainer", page).show() : $(".channelAccessContainer", page).hide(), $("#chkEnableAllChannels", page).checked(user.Policy.EnableAllChannels).trigger("change")
+
+ html += "
";
+ $(".channelAccess", page).show().html(html);
+
+ if (channels.length) {
+ $(".channelAccessContainer", page).show();
+ } else {
+ $(".channelAccessContainer", page).hide();
+ }
+
+ $("#chkEnableAllChannels", page).checked(user.Policy.EnableAllChannels).trigger("change");
}
function loadDevices(page, user, devices) {
var html = "";
- html += '
' + Globalize.translate("HeaderDevices") + " ", html += '
", $(".deviceAccess", page).show().html(html), $("#chkEnableAllDevices", page).checked(user.Policy.EnableAllDevices).trigger("change"), user.Policy.IsAdministrator ? page.querySelector(".deviceAccessContainer").classList.add("hide") : page.querySelector(".deviceAccessContainer").classList.remove("hide")
}
function loadUser(page, user, loggedInUser, mediaFolders, channels, devices) {
- page.querySelector(".username").innerHTML = user.Name, libraryMenu.setTitle(user.Name), loadChannels(page, user, channels), loadMediaFolders(page, user, mediaFolders), loadDevices(page, user, devices), loading.hide()
+ page.querySelector(".username").innerHTML = user.Name;
+ libraryMenu.setTitle(user.Name);
+ loadChannels(page, user, channels);
+ loadMediaFolders(page, user, mediaFolders);
+ loadDevices(page, user, devices);
+ loading.hide();
}
function onSaveComplete(page) {
- loading.hide(), require(["toast"], function(toast) {
- toast(Globalize.translate("SettingsSaved"))
- })
+ loading.hide();
+
+ 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) {
- return c.checked
- }).map(function(c) {
- return c.getAttribute("data-id")
- }), 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")
- }), 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")
- }), user.Policy.BlockedChannels = null, user.Policy.BlockedMediaFolders = null, ApiClient.updateUserPolicy(user.Id, user.Policy).then(function() {
- onSaveComplete(page)
- })
+ 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");
+ });
+ 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");
+ });
+ 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");
+ });
+ user.Policy.BlockedChannels = null;
+ user.Policy.BlockedMediaFolders = null;
+ ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
+ onSaveComplete(page);
+ });
}
function onSubmit() {
var page = $(this).parents(".page");
loading.show();
var userId = getParameterByName("userId");
- return ApiClient.getUser(userId).then(function(result) {
- saveUser(result, page)
- }), !1
+ 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() {
- this.checked ? $(".deviceAccessListContainer", page).hide() : $(".deviceAccessListContainer", page).show()
- }), $("#chkEnableAllChannels", page).on("change", function() {
- this.checked ? $(".channelAccessListContainer", page).hide() : $(".channelAccessListContainer", page).show()
- }), page.querySelector("#chkEnableAllFolders").addEventListener("change", function() {
- this.checked ? page.querySelector(".folderAccessListContainer").classList.add("hide") : page.querySelector(".folderAccessListContainer").classList.remove("hide")
- }), $(".userLibraryAccessForm").off("submit", onSubmit).on("submit", onSubmit)
- }).on("pageshow", "#userLibraryAccessPage", function() {
+ $("#chkEnableAllDevices", page).on("change", function () {
+ if (this.checked) {
+ $(".deviceAccessListContainer", page).hide();
+ } else {
+ $(".deviceAccessListContainer", page).show();
+ }
+ });
+ $("#chkEnableAllChannels", page).on("change", function () {
+ if (this.checked) {
+ $(".channelAccessListContainer", page).hide();
+ } else {
+ $(".channelAccessListContainer", page).show();
+ }
+ });
+ page.querySelector("#chkEnableAllFolders").addEventListener("change", function () {
+ if (this.checked) {
+ page.querySelector(".folderAccessListContainer").classList.add("hide");
+ } else {
+ page.querySelector(".folderAccessListContainer").classList.remove("hide");
+ }
+ });
+ $(".userLibraryAccessForm").off("submit", onSubmit).on("submit", onSubmit);
+ }).on("pageshow", "#userLibraryAccessPage", function () {
var page = this;
loading.show();
- var promise1, userId = getParameterByName("userId");
- if (userId) promise1 = ApiClient.getUser(userId);
- else {
+ var promise1;
+ var userId = getParameterByName("userId");
+
+ if (userId) {
+ promise1 = ApiClient.getUser(userId);
+ } else {
var deferred = $.Deferred();
deferred.resolveWith(null, [{
Configuration: {}
- }]), promise1 = deferred.promise()
+ }]);
+ promise1 = deferred.promise();
}
- var promise2 = Dashboard.getCurrentUser(),
- promise4 = ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
- IsHidden: !1
- })),
- promise5 = ApiClient.getJSON(ApiClient.getUrl("Channels")),
- 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)
- })
- })
-});
\ No newline at end of file
+
+ var promise2 = Dashboard.getCurrentUser();
+ var promise4 = ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
+ IsHidden: false
+ }));
+ 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);
+ });
+ });
+});
diff --git a/src/controllers/usernew.js b/src/controllers/usernew.js
index 10fa6fc4f..ec80679f8 100644
--- a/src/controllers/usernew.js
+++ b/src/controllers/usernew.js
@@ -1,14 +1,16 @@
-define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function($, loading) {
+define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function ($, loading) {
"use strict";
function loadMediaFolders(page, mediaFolders) {
var html = "";
html += '
' + Globalize.translate("HeaderLibraries") + " ";
html += '
';
+
for (var i = 0; i < mediaFolders.length; i++) {
var folder = mediaFolders[i];
html += '' + folder.Name + " ";
}
+
html += "
";
$(".folderAccess", page).html(html).trigger("create");
$("#chkEnableAllFolders", page).checked(true).trigger("change");
@@ -18,17 +20,21 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function($, loading)
var html = "";
html += '
' + Globalize.translate("HeaderChannels") + " ";
html += '
';
+
for (var i = 0; i < channels.length; i++) {
var folder = channels[i];
html += '' + folder.Name + " ";
}
+
html += "
";
$(".channelAccess", page).show().html(html).trigger("create");
+
if (channels.length) {
$(".channelAccessContainer", page).show();
} else {
$(".channelAccessContainer", page).hide();
}
+
$("#chkEnableAllChannels", page).checked(true).trigger("change");
}
@@ -37,46 +43,51 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function($, loading)
$("#txtPassword", page).val("");
loading.show();
var promiseFolders = ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders", {
- IsHidden: false
+ IsHidden: false
}));
var promiseChannels = ApiClient.getJSON(ApiClient.getUrl("Channels"));
- Promise.all([promiseFolders, promiseChannels]).then(function(responses) {
+ Promise.all([promiseFolders, promiseChannels]).then(function (responses) {
loadMediaFolders(page, responses[0].Items);
loadChannels(page, responses[1].Items);
loading.hide();
- })
+ });
}
function saveUser(page) {
var user = {};
user.Name = $("#txtUsername", page).val();
user.Password = $("#txtPassword", page).val();
- ApiClient.createUser(user).then(function(user) {
+ ApiClient.createUser(user).then(function (user) {
user.Policy.EnableAllFolders = $("#chkEnableAllFolders", page).checked();
user.Policy.EnabledFolders = [];
+
if (!user.Policy.EnableAllFolders) {
- user.Policy.EnabledFolders = $(".chkFolder", page).get().filter(function(i) {
- return i.checked
- }).map(function(i) {
+ user.Policy.EnabledFolders = $(".chkFolder", page).get().filter(function (i) {
+ return i.checked;
+ }).map(function (i) {
return i.getAttribute("data-id");
});
}
+
user.Policy.EnableAllChannels = $("#chkEnableAllChannels", page).checked();
user.Policy.EnabledChannels = [];
+
if (!user.Policy.EnableAllChannels) {
- user.Policy.EnabledChannels = $(".chkChannel", page).get().filter(function(i) {
- return i.checked
- }).map(function(i) {
+ user.Policy.EnabledChannels = $(".chkChannel", page).get().filter(function (i) {
+ return i.checked;
+ }).map(function (i) {
return i.getAttribute("data-id");
});
}
- ApiClient.updateUserPolicy(user.Id, user.Policy).then(function() {
+
+ ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
Dashboard.navigate("useredit.html?userId=" + user.Id);
});
- }, function(response) {
- require(["toast"], function(toast) {
+ }, function (response) {
+ require(["toast"], function (toast) {
toast(Globalize.translate("DefaultErrorMessage"));
});
+
loading.hide();
});
}
@@ -92,16 +103,16 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function($, loading)
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();
} else {
$(".channelAccessListContainer", page).show();
}
});
- $("#chkEnableAllFolders", page).on("change", function() {
+ $("#chkEnableAllFolders", page).on("change", function () {
if (this.checked) {
$(".folderAccessListContainer", page).hide();
} else {
@@ -109,7 +120,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox"], function($, loading)
}
});
$(".newUserProfileForm").off("submit", onSubmit).on("submit", onSubmit);
- }).on("pageshow", "#newUserPage", function() {
+ }).on("pageshow", "#newUserPage", function () {
loadData(this);
});
-});
\ No newline at end of file
+});
diff --git a/src/controllers/userparentalcontrol.js b/src/controllers/userparentalcontrol.js
index 381dc8cea..2a862912d 100644
--- a/src/controllers/userparentalcontrol.js
+++ b/src/controllers/userparentalcontrol.js
@@ -1,185 +1,271 @@
-define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-icon-button-light"], function($, datetime, loading, libraryMenu) {
+define(["jQuery", "datetime", "loading", "libraryMenu", "listViewStyle", "paper-icon-button-light"], function ($, datetime, loading, libraryMenu) {
"use strict";
function populateRatings(allParentalRatings, page) {
var html = "";
html += "
";
- var i, length, rating, ratings = [];
+ var i;
+ var length;
+ var rating;
+ var ratings = [];
+
for (i = 0, length = allParentalRatings.length; i < length; i++) {
if (rating = allParentalRatings[i], ratings.length) {
var lastRating = ratings[ratings.length - 1];
+
if (lastRating.Value === rating.Value) {
lastRating.Name += "/" + rating.Name;
- continue
+ continue;
}
}
+
ratings.push({
Name: rating.Name,
Value: rating.Value
- })
+ });
}
- for (i = 0, length = ratings.length; i < length; i++) rating = ratings[i], html += "
" + rating.Name + " ";
- $("#selectMaxParentalRating", page).html(html)
+
+ for (i = 0, length = ratings.length; i < length; i++) {
+ rating = ratings[i];
+ html += "
" + rating.Name + " ";
+ }
+
+ $("#selectMaxParentalRating", page).html(html);
}
function loadUnratedItems(page, user) {
var items = [{
- name: Globalize.translate("OptionBlockBooks"),
- value: "Book"
- }, {
- name: Globalize.translate("OptionBlockChannelContent"),
- value: "ChannelContent"
- }, {
- name: Globalize.translate("OptionBlockLiveTvChannels"),
- value: "LiveTvChannel"
- }, {
- name: Globalize.translate("OptionBlockMovies"),
- value: "Movie"
- }, {
- name: Globalize.translate("OptionBlockMusic"),
- value: "Music"
- }, {
- name: Globalize.translate("OptionBlockTrailers"),
- value: "Trailer"
- }, {
- name: Globalize.translate("OptionBlockTvShows"),
- value: "Series"
- }],
- html = "";
- html += '
' + Globalize.translate("HeaderBlockItemsWithNoRating") + " ", html += '
';
+ name: Globalize.translate("OptionBlockBooks"),
+ value: "Book"
+ }, {
+ name: Globalize.translate("OptionBlockChannelContent"),
+ value: "ChannelContent"
+ }, {
+ name: Globalize.translate("OptionBlockLiveTvChannels"),
+ value: "LiveTvChannel"
+ }, {
+ name: Globalize.translate("OptionBlockMovies"),
+ value: "Movie"
+ }, {
+ name: Globalize.translate("OptionBlockMusic"),
+ value: "Music"
+ }, {
+ name: Globalize.translate("OptionBlockTrailers"),
+ value: "Trailer"
+ }, {
+ name: Globalize.translate("OptionBlockTvShows"),
+ value: "Series"
+ }];
+ var html = "";
+ html += '
' + Globalize.translate("HeaderBlockItemsWithNoRating") + " ";
+ html += '
';
+
for (var i = 0, length = items.length; i < length; i++) {
- var item = items[i],
- checkedAttribute = -1 != user.Policy.BlockUnratedItems.indexOf(item.value) ? ' checked="checked"' : "";
- html += '" + item.name + " "
+ var item = items[i];
+ var checkedAttribute = -1 != user.Policy.BlockUnratedItems.indexOf(item.value) ? ' checked="checked"' : "";
+ html += '" + item.name + " ";
}
- html += "
", $(".blockUnratedItems", page).html(html).trigger("create")
+
+ html += "
";
+ $(".blockUnratedItems", page).html(html).trigger("create");
}
function loadUser(page, user, allParentalRatings) {
- page.querySelector(".username").innerHTML = user.Name, libraryMenu.setTitle(user.Name), loadUnratedItems(page, user), loadBlockedTags(page, user.Policy.BlockedTags), populateRatings(allParentalRatings, page);
+ page.querySelector(".username").innerHTML = user.Name;
+ libraryMenu.setTitle(user.Name);
+ loadUnratedItems(page, user);
+ loadBlockedTags(page, user.Policy.BlockedTags);
+ populateRatings(allParentalRatings, page);
var ratingValue = "";
- if (user.Policy.MaxParentalRating)
+
+ if (user.Policy.MaxParentalRating) {
for (var i = 0, length = allParentalRatings.length; i < length; i++) {
var rating = allParentalRatings[i];
- user.Policy.MaxParentalRating >= rating.Value && (ratingValue = rating.Value)
+
+ if (user.Policy.MaxParentalRating >= rating.Value) {
+ ratingValue = rating.Value;
+ }
}
- $("#selectMaxParentalRating", page).val(ratingValue), user.Policy.IsAdministrator ? $(".accessScheduleSection", page).hide() : $(".accessScheduleSection", page).show(), renderAccessSchedule(page, user.Policy.AccessSchedules || []), loading.hide()
+ }
+
+ $("#selectMaxParentalRating", page).val(ratingValue);
+
+ if (user.Policy.IsAdministrator) {
+ $(".accessScheduleSection", page).hide();
+ } else {
+ $(".accessScheduleSection", page).show();
+ }
+
+ renderAccessSchedule(page, user.Policy.AccessSchedules || []);
+ loading.hide();
}
function loadBlockedTags(page, tags) {
- var html = tags.map(function(h) {
+ var html = tags.map(function (h) {
var li = '
';
- return li += '
', li += '
', li += h, li += " ", li += "", li += '
delete ', li += "
"
+ li += '
';
+ li += '
';
+ li += h;
+ li += " ";
+ li += "";
+ li += '
delete ';
+ return li += "
";
}).join("");
- html && (html = '
' + html + "
");
+
+ if (html) {
+ html = '
' + html + "
";
+ }
+
var elem = $(".blockedTags", page).html(html).trigger("create");
- $(".btnDeleteTag", elem).on("click", function() {
- var tag = this.getAttribute("data-tag"),
- newTags = tags.filter(function(t) {
- return t != tag
- });
- loadBlockedTags(page, newTags)
- })
+ $(".btnDeleteTag", elem).on("click", function () {
+ var tag = this.getAttribute("data-tag");
+ var newTags = tags.filter(function (t) {
+ return t != tag;
+ });
+ loadBlockedTags(page, newTags);
+ });
}
function deleteAccessSchedule(page, schedules, index) {
- schedules.splice(index, 1), renderAccessSchedule(page, schedules)
+ schedules.splice(index, 1);
+ renderAccessSchedule(page, schedules);
}
function renderAccessSchedule(page, schedules) {
- var html = "",
- index = 0;
- html += schedules.map(function(a) {
+ var html = "";
+ var index = 0;
+ html += schedules.map(function (a) {
var itemHtml = "";
- return itemHtml += '
', itemHtml += '
', itemHtml += '
', itemHtml += Globalize.translate("Option" + a.DayOfWeek), itemHtml += " ", itemHtml += '
' + getDisplayTime(a.StartHour) + " - " + getDisplayTime(a.EndHour) + "
", itemHtml += "
", itemHtml += '
delete ', itemHtml += "
", index++, itemHtml
+ itemHtml += '
';
+ itemHtml += '
';
+ itemHtml += '
';
+ itemHtml += Globalize.translate("Option" + a.DayOfWeek);
+ itemHtml += " ";
+ itemHtml += '
' + getDisplayTime(a.StartHour) + " - " + getDisplayTime(a.EndHour) + "
";
+ itemHtml += "
";
+ itemHtml += '
delete ';
+ itemHtml += "
";
+ index++;
+ return itemHtml;
}).join("");
var accessScheduleList = page.querySelector(".accessScheduleList");
- accessScheduleList.innerHTML = html, $(".btnDelete", accessScheduleList).on("click", function() {
- deleteAccessSchedule(page, schedules, parseInt(this.getAttribute("data-index")))
- })
+ accessScheduleList.innerHTML = html;
+ $(".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"))
- })
+ loading.hide();
+
+ 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) {
- return i.checked
- }).map(function(i) {
- return i.getAttribute("data-itemtype")
- }), user.Policy.AccessSchedules = getSchedulesFromPage(page), user.Policy.BlockedTags = getBlockedTagsFromPage(page), ApiClient.updateUserPolicy(user.Id, user.Policy).then(function() {
- onSaveComplete(page)
- })
+ 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");
+ });
+ user.Policy.AccessSchedules = getSchedulesFromPage(page);
+ user.Policy.BlockedTags = getBlockedTagsFromPage(page);
+ ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
+ onSaveComplete(page);
+ });
}
function getDisplayTime(hours) {
- var minutes = 0,
- pct = hours % 1;
- return pct && (minutes = parseInt(60 * pct)), datetime.getDisplayTime(new Date(2e3, 1, 1, hours, minutes, 0, 0))
+ var minutes = 0;
+ var pct = hours % 1;
+
+ if (pct) {
+ minutes = parseInt(60 * pct);
+ }
+
+ return datetime.getDisplayTime(new Date(2000, 1, 1, hours, minutes, 0, 0));
}
function showSchedulePopup(page, schedule, index) {
- schedule = schedule || {}, require(["components/accessschedule/accessschedule"], function(accessschedule) {
+ schedule = schedule || {};
+
+ require(["components/accessschedule/accessschedule"], function (accessschedule) {
accessschedule.show({
schedule: schedule
- }).then(function(updatedSchedule) {
- var schedules = getSchedulesFromPage(page); - 1 == index && (index = schedules.length), schedules[index] = updatedSchedule, renderAccessSchedule(page, schedules)
- })
- })
+ }).then(function (updatedSchedule) {
+ var schedules = getSchedulesFromPage(page);
+
+ if (-1 == index) {
+ index = schedules.length;
+ }
+
+ schedules[index] = updatedSchedule;
+ renderAccessSchedule(page, schedules);
+ });
+ });
}
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")
- }
- }).get()
+ };
+ }).get();
}
function getBlockedTagsFromPage(page) {
- return $(".blockedTag", page).map(function() {
- return this.getAttribute("data-tag")
- }).get()
+ 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")
- }).then(function(value) {
- var tags = getBlockedTagsFromPage(page); - 1 == tags.indexOf(value) && (tags.push(value), loadBlockedTags(page, tags))
- })
- })
+ }).then(function (value) {
+ var tags = getBlockedTagsFromPage(page);
+
+ if (-1 == tags.indexOf(value)) {
+ tags.push(value);
+ loadBlockedTags(page, tags);
+ }
+ });
+ });
}
+
window.UserParentalControlPage = {
- onSubmit: function() {
+ onSubmit: function () {
var page = $(this).parents(".page");
loading.show();
var userId = getParameterByName("userId");
- return ApiClient.getUser(userId).then(function(result) {
- saveUser(result, page)
- }), !1
+ 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() {
- showSchedulePopup(page, {}, -1)
- }), $(".btnAddBlockedTag", page).on("click", function() {
- showBlockedTagPopup(page)
- }), $(".userParentalControlForm").off("submit", UserParentalControlPage.onSubmit).on("submit", UserParentalControlPage.onSubmit)
- }).on("pageshow", "#userParentalControlPage", function() {
+ $(".btnAddSchedule", page).on("click", function () {
+ showSchedulePopup(page, {}, -1);
+ });
+ $(".btnAddBlockedTag", page).on("click", function () {
+ showBlockedTagPopup(page);
+ });
+ $(".userParentalControlForm").off("submit", UserParentalControlPage.onSubmit).on("submit", UserParentalControlPage.onSubmit);
+ }).on("pageshow", "#userParentalControlPage", function () {
var page = this;
loading.show();
- var userId = getParameterByName("userId"),
- promise1 = ApiClient.getUser(userId),
- promise2 = ApiClient.getParentalRatings();
- Promise.all([promise1, promise2]).then(function(responses) {
- loadUser(page, responses[0], responses[1])
- })
- })
+ var userId = getParameterByName("userId");
+ var promise1 = ApiClient.getUser(userId);
+ var promise2 = ApiClient.getParentalRatings();
+ Promise.all([promise1, promise2]).then(function (responses) {
+ loadUser(page, responses[0], responses[1]);
+ });
+ });
});
diff --git a/src/controllers/userpasswordpage.js b/src/controllers/userpasswordpage.js
index d1eef004f..30ca06327 100644
--- a/src/controllers/userpasswordpage.js
+++ b/src/controllers/userpasswordpage.js
@@ -1,101 +1,183 @@
-define(["loading", "libraryMenu", "emby-button"], function(loading, libraryMenu) {
+define(["loading", "libraryMenu", "emby-button"], function (loading, libraryMenu) {
"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;
- var showPasswordSection = !0,
- showLocalAccessSection = !1;
- "Guest" == user.ConnectLinkType ? (page.querySelector(".localAccessSection").classList.add("hide"), showPasswordSection = !1) : user.HasConfiguredPassword ? (page.querySelector("#btnResetPassword").classList.remove("hide"), page.querySelector("#fldCurrentPassword").classList.remove("hide"), showLocalAccessSection = !0) : (page.querySelector("#btnResetPassword").classList.add("hide"), page.querySelector("#fldCurrentPassword").classList.add("hide")), showPasswordSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess) ? page.querySelector(".passwordSection").classList.remove("hide") : page.querySelector(".passwordSection").classList.add("hide"), showLocalAccessSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess) ? page.querySelector(".localAccessSection").classList.remove("hide") : page.querySelector(".localAccessSection").classList.add("hide");
+ ApiClient.getUser(userid).then(function (user) {
+ Dashboard.getCurrentUser().then(function (loggedInUser) {
+ libraryMenu.setTitle(user.Name);
+ page.querySelector(".username").innerHTML = user.Name;
+ var showPasswordSection = true;
+ var showLocalAccessSection = false;
+
+ 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");
+ showLocalAccessSection = true;
+ } else {
+ 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");
+ } else {
+ page.querySelector(".passwordSection").classList.add("hide");
+ }
+
+ if (showLocalAccessSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
+ page.querySelector(".localAccessSection").classList.remove("hide");
+ } else {
+ page.querySelector(".localAccessSection").classList.add("hide");
+ }
+
var txtEasyPassword = page.querySelector("#txtEasyPassword");
- txtEasyPassword.value = "", user.HasConfiguredEasyPassword ? (txtEasyPassword.placeholder = "******", page.querySelector("#btnResetEasyPassword").classList.remove("hide")) : (txtEasyPassword.removeAttribute("placeholder"), txtEasyPassword.placeholder = "", page.querySelector("#btnResetEasyPassword").classList.add("hide")), page.querySelector(".chkEnableLocalEasyPassword").checked = user.Configuration.EnableLocalPassword
- })
- }), page.querySelector("#txtCurrentPassword").value = "", page.querySelector("#txtNewPassword").value = "", page.querySelector("#txtNewPasswordConfirm").value = ""
+ txtEasyPassword.value = "";
+
+ if (user.HasConfiguredEasyPassword) {
+ txtEasyPassword.placeholder = "******";
+ page.querySelector("#btnResetEasyPassword").classList.remove("hide");
+ } else {
+ txtEasyPassword.removeAttribute("placeholder");
+ txtEasyPassword.placeholder = "";
+ page.querySelector("#btnResetEasyPassword").classList.add("hide");
+ }
+
+ page.querySelector(".chkEnableLocalEasyPassword").checked = user.Configuration.EnableLocalPassword;
+ });
+ });
+ page.querySelector("#txtCurrentPassword").value = "";
+ page.querySelector("#txtNewPassword").value = "";
+ page.querySelector("#txtNewPasswordConfirm").value = "";
}
- return function(view, params) {
+
+ return function (view, params) {
function saveEasyPassword() {
- var userId = params.userId,
- easyPassword = view.querySelector("#txtEasyPassword").value;
- easyPassword ? ApiClient.updateEasyPassword(userId, easyPassword).then(function() {
- onEasyPasswordSaved(userId)
- }) : onEasyPasswordSaved(userId)
+ var userId = params.userId;
+ var easyPassword = view.querySelector("#txtEasyPassword").value;
+
+ if (easyPassword) {
+ ApiClient.updateEasyPassword(userId, easyPassword).then(function () {
+ onEasyPasswordSaved(userId);
+ });
+ } else {
+ onEasyPasswordSaved(userId);
+ }
}
function onEasyPasswordSaved(userId) {
- ApiClient.getUser(userId).then(function(user) {
- 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"))
- }), loadUser(view, params)
- })
- })
+ ApiClient.getUser(userId).then(function (user) {
+ 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"));
+ });
+
+ loadUser(view, params);
+ });
+ });
}
function savePassword() {
- var userId = params.userId,
- currentPassword = view.querySelector("#txtCurrentPassword").value,
- newPassword = view.querySelector("#txtNewPassword").value;
+ var userId = params.userId;
+ var currentPassword = view.querySelector("#txtCurrentPassword").value;
+ var newPassword = view.querySelector("#txtNewPassword").value;
+
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 = "";
}
- ApiClient.updateUserPassword(userId, currentPassword, newPassword).then(function() {
- loading.hide(), require(["toast"], function(toast) {
- toast(Globalize.translate("PasswordSaved"))
- }), loadUser(view, params)
- }, function() {
- loading.hide(), Dashboard.alert({
+
+ ApiClient.updateUserPassword(userId, currentPassword, newPassword).then(function () {
+ loading.hide();
+
+ require(["toast"], function (toast) {
+ toast(Globalize.translate("PasswordSaved"));
+ });
+
+ loadUser(view, params);
+ }, function () {
+ loading.hide();
+ Dashboard.alert({
title: Globalize.translate("HeaderLoginFailure"),
message: Globalize.translate("MessageInvalidUser")
- })
- })
+ });
+ });
}
function onSubmit(e) {
var form = this;
- return form.querySelector("#txtNewPassword").value != form.querySelector("#txtNewPasswordConfirm").value ? require(["toast"], function(toast) {
- toast(Globalize.translate("PasswordMatchError"))
- }) : (loading.show(), savePassword()), e.preventDefault(), !1
+
+ if (form.querySelector("#txtNewPassword").value != form.querySelector("#txtNewPasswordConfirm").value) {
+ require(["toast"], function (toast) {
+ toast(Globalize.translate("PasswordMatchError"));
+ });
+ } else {
+ loading.show();
+ savePassword();
+ }
+
+ e.preventDefault();
+ return false;
}
function onLocalAccessSubmit(e) {
- return loading.show(), saveEasyPassword(), e.preventDefault(), !1
+ loading.show();
+ saveEasyPassword();
+ e.preventDefault();
+ return false;
}
function resetPassword() {
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({
+ loading.show();
+ ApiClient.resetUserPassword(userId).then(function () {
+ loading.hide();
+ Dashboard.alert({
message: Globalize.translate("PasswordResetComplete"),
title: Globalize.translate("PasswordResetHeader")
- }), loadUser(view, params)
- })
- })
- })
+ });
+ loadUser(view, params);
+ });
+ });
+ });
}
function resetEasyPassword() {
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({
+ loading.show();
+ ApiClient.resetEasyPassword(userId).then(function () {
+ loading.hide();
+ Dashboard.alert({
message: Globalize.translate("PinCodeResetComplete"),
title: Globalize.translate("HeaderPinCodeReset")
- }), loadUser(view, params)
- })
- })
- })
+ });
+ loadUser(view, params);
+ });
+ });
+ });
}
- 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)
- })
- }
+
+ 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);
+ });
+ };
});
diff --git a/src/controllers/wizardfinishpage.js b/src/controllers/wizardfinishpage.js
index 180af64b5..8242a16cb 100644
--- a/src/controllers/wizardfinishpage.js
+++ b/src/controllers/wizardfinishpage.js
@@ -6,7 +6,7 @@ define(["loading"], function (loading) {
ApiClient.ajax({
url: ApiClient.getUrl("Startup/Complete"),
type: "POST"
- }).then(function() {
+ }).then(function () {
loading.hide();
window.location.href = "index.html";
});
diff --git a/src/index.html b/src/index.html
index bc9c7b64c..d95784a3d 100644
--- a/src/index.html
+++ b/src/index.html
@@ -98,8 +98,8 @@
-
-
+
+
diff --git a/src/scripts/apploader.js b/src/scripts/apploader.js
index 9067ae607..4b5d2e8ee 100644
--- a/src/scripts/apploader.js
+++ b/src/scripts/apploader.js
@@ -20,7 +20,7 @@
}
injectScriptElement(
- self.Promise ? "./bower_components/alameda/alameda.js" : "./bower_components/requirejs/require.js",
+ self.Promise ? "./libraries/alameda.js" : "./libraries/require.js",
function() {
// onload of require library
injectScriptElement("./scripts/site.js");
diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js
index 8d282b003..ad15b8538 100644
--- a/src/scripts/librarymenu.js
+++ b/src/scripts/librarymenu.js
@@ -52,14 +52,6 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
headerSearchButton.classList.remove("hide");
}
- if (headerSettingsButton) {
- if (user.localUser.Policy.IsAdministrator) {
- headerSettingsButton.classList.remove("hide");
- } else {
- headerSettingsButton.classList.add("hide");
- }
- }
-
headerCastButton.classList.remove("hide");
} else {
headerHomeButton.classList.add("hide");
@@ -68,10 +60,6 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
if (headerSearchButton) {
headerSearchButton.classList.add("hide");
}
-
- if (headerSettingsButton) {
- headerSettingsButton.classList.add("hide");
- }
}
requiresUserRefresh = false;
@@ -95,10 +83,6 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
Dashboard.navigate("mypreferencesmenu.html");
}
- function onSettingsClick(e) {
- Dashboard.navigate("dashboard.html");
- }
-
function onHeaderHomeButtonClick() {
Dashboard.navigate("home.html");
}
@@ -122,12 +106,9 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
headerUserButton.addEventListener("click", onHeaderUserButtonClick);
headerHomeButton.addEventListener("click", onHeaderHomeButtonClick);
- initHeadRoom(skinHeader);
headerCastButton.addEventListener("click", onCastButtonClicked);
- if (headerSettingsButton) {
- headerSettingsButton.addEventListener("click", onSettingsClick);
- }
+ initHeadRoom(skinHeader);
}
function onCastButtonClicked() {
@@ -747,7 +728,6 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
var headerBackButton;
var headerUserButton;
var currentUser;
- var headerSettingsButton;
var headerCastButton;
var headerSearchButton;
var enableLibraryNavDrawer = !layoutManager.tv;
@@ -873,23 +853,20 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
html += '';
html += '';
html += '';
-
- if (!layoutManager.mobile) {
- html += '';
- }
-
html += "
";
html += "
";
html += '";
+
skinHeader.classList.add("skinHeader-withBackground");
+ skinHeader.classList.add("skinHeader-blurred");
skinHeader.innerHTML = html;
+
headerHomeButton = skinHeader.querySelector(".headerHomeButton");
headerUserButton = skinHeader.querySelector(".headerUserButton");
- headerSettingsButton = skinHeader.querySelector(".headerSettingsButton");
headerCastButton = skinHeader.querySelector(".headerCastButton");
headerSearchButton = skinHeader.querySelector(".headerSearchButton");
- skinHeader.classList.add("skinHeader-blurred");
+
lazyLoadViewMenuBarImages();
bindMenuEvents();
})();
diff --git a/src/strings/cs.json b/src/strings/cs.json
index 3d03fc945..5d53076d3 100644
--- a/src/strings/cs.json
+++ b/src/strings/cs.json
@@ -13,7 +13,7 @@
"AllChannels": "Všechny kanály",
"AllEpisodes": "Všechny epizody",
"AllLanguages": "Všechny jazyky",
- "AllowHWTranscodingHelp": "Pokud nastavíte, povolíte tuneru překódování v reálném čase. Může snížit zátěž překódovávání požadované Jellyfin serverem.",
+ "AllowHWTranscodingHelp": "Povolit tuneru překódování v reálném čase. Může snížit zátěž překódovávání požadované Jellyfin serverem.",
"AlwaysPlaySubtitles": "Vždy zobrazit titulky",
"AlwaysPlaySubtitlesHelp": "Titulky odpovídající jazykové předvolbě se načtou bez ohledu na jazyk audia.",
"Anytime": "Kdykoliv",
@@ -30,7 +30,7 @@
"BirthDateValue": "Narozen: {0}",
"BirthLocation": "Místo narození",
"BirthPlaceValue": "Místo narození: {0}",
- "BookLibraryHelp": "Audio a textové knihy jsou podporovány. Přečtěte si {0}pravidla pro názvy knih v Jellyfin{1}.",
+ "BookLibraryHelp": "Audio a textové knihy jsou podporovány. Přečtěte si {0}pravidla pro názvy knih {1}.",
"Books": "Knihy",
"Box": "Pouzdro",
"BoxRear": "Zadní část pouzdra",
@@ -157,7 +157,7 @@
"Dislike": "Nemám rád",
"Display": "Zobrazení",
"DisplayMissingEpisodesWithinSeasons": "Zobrazit chybějící epizody",
- "DisplayMissingEpisodesWithinSeasonsHelp": "Toto musí být zapnuto pro knihovny TV v nastavení Jellyfin serveru.",
+ "DisplayMissingEpisodesWithinSeasonsHelp": "Toto musí být zapnuto pro knihovny TV v nastavení serveru.",
"DisplayModeHelp": "Zvolte typ obrazovky, na které používáte Jellyfin.",
"DoNotRecord": "Nenahrávat",
"Down": "Dolů",
@@ -522,7 +522,7 @@
"LabelEnableDlnaClientDiscoveryInterval": "Čas pro vyhledání klienta (sekund)",
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Určuje dobu trvání v sekundách mezi SSDP vyhledávání prováděných pomocí Jellyfin.",
"LabelEnableDlnaDebugLogging": "Povolit DLNA protokolování (pro ladění)",
- "LabelEnableDlnaDebugLoggingHelp": "Toto nastavení vytváří velmi velké soubory se záznamy a doporučuje se pouze v případě problémů.",
+ "LabelEnableDlnaDebugLoggingHelp": "Vytváří velké soubory se záznamy a doporučuje se používat pouze pro potřeby odstraňování problémů.",
"LabelEnableDlnaPlayTo": "Povolit DLNA přehrávání",
"LabelEnableDlnaPlayToHelp": "Jellyfin dokáže detekovat zařízení v rámci vaší sítě a nabízí možnost jeho dálkového ovládání.",
"LabelEnableDlnaServer": "Povolit Dlna Server",
@@ -611,9 +611,9 @@
"LabelMethod": "Metoda:",
"LabelMinBackdropDownloadWidth": "Maximální šířka pro stažení pozadí:",
"LabelMinResumeDuration": "Minimální doba trvání:",
- "LabelMinResumeDurationHelp": "Videa kratší než tato délka nebudou pozastavitelné",
+ "LabelMinResumeDurationHelp": "Videa kratší než tato délka nebudou pozastavitelné.",
"LabelMinResumePercentage": "Minimální procento pro přerušení:",
- "LabelMinResumePercentageHelp": "Tituly budou označeny jako \"nepřehráno\", pokud budou zastaveny před tímto časem",
+ "LabelMinResumePercentageHelp": "Tituly budou označeny jako \"nepřehráno\", pokud budou zastaveny před tímto časem.",
"LabelMinScreenshotDownloadWidth": "Minimální šířka screenshotu obrazovky:",
"LabelModelDescription": "Popis modelu",
"LabelModelName": "Název modelu",
@@ -1027,7 +1027,7 @@
"PlaybackErrorNotAllowed": "V současné době nejste oprávněni přehrávat tento obsah. Pro více informací se obraťte se na správce systému.",
"PlaybackErrorPlaceHolder": "Chcete-li toto video přehrát, vložte disk.",
"Played": "Přehráno",
- "Playlists": "Playlisty",
+ "Playlists": "Seznamy skladeb",
"PleaseAddAtLeastOneFolder": "Přidejte prosím nejméně jednu složku do této knihovny pomocí tlačítka Přidat.",
"PleaseConfirmPluginInstallation": "Pro potvrzení, že jste si přečetli text výše a chcete pokračovat v instalaci zásuvných modulů, klikněte na tlačítko OK.",
"PleaseEnterNameOrId": "Prosím, zadejte název nebo externí Id.",
@@ -1230,7 +1230,7 @@
"AllowMediaConversion": "Povolit konverzi médií",
"AllowMediaConversionHelp": "Povolit nebo zakázat přístup k funkci konverze médií.",
"AllowOnTheFlySubtitleExtraction": "Povolit extrahování titulků za běhu",
- "AllowOnTheFlySubtitleExtractionHelp": "Vložené titulky mohou být extrahovány z videa a dodávány do aplikace Jellyfin ve formě prostého textu, aby se zabránilo překódování videa. V některých systémech to může trvat dlouho a způsobit zasekávání přehrávání videa. Při vypnutí funkce budou během překódování obsažené titulky vypáleny do obrazu, pokud je klientské zařízení nativně nepodporuje.",
+ "AllowOnTheFlySubtitleExtractionHelp": "Vložené titulky mohou být extrahovány z videa a dodávány do aplikací ve formě prostého textu, aby se zabránilo překódování videa. V některých systémech to může trvat dlouho a způsobit zasekávání přehrávání videa. Při vypnutí funkce budou během překódování obsažené titulky vypáleny do obrazu, pokud je klientské zařízení nativně nepodporuje.",
"AllowRemoteAccess": "Povolit vzdálené připojení na server Jellyfin.",
"AllowRemoteAccessHelp": "Pokud není zapnuto, všechna vzdálená připojení budou blokována.",
"AllowSeasonalThemesHelp": "Pokud je povoleno, sezónní motivy občas přepíšou nastavení vašeho motivu.",
@@ -1249,7 +1249,7 @@
"Blacklist": "Blacklist",
"BobAndWeaveWithHelp": "Bob and weave (vyšší kvalita, ale pomalejší)",
"Browse": "Procházet",
- "BurnSubtitlesHelp": "Určuje, zda má server vypalovat titulky při převodu videa v závislosti na formátu titulků. Vynechání vypalování titulků zlepší výkon serveru. Chcete-li vypálit grafické formáty (např. VOBSUB, PGS, SUB / IDX atd.), stejně jako některé titulky ASS / SSA, vyberte možnost Auto",
+ "BurnSubtitlesHelp": "Určuje, zda má server vypalovat titulky při převodu videa v závislosti na formátu titulků. Vynechání vypalování titulků zlepší výkon serveru. Chcete-li vypálit grafické formáty (VOBSUB, PGS, SUB / IDX atd.) a některé titulky ASS / SSA, vyberte možnost Auto.",
"ButtonInfo": "Info",
"ButtonMenu": "Menu",
"ButtonOk": "Ok",
@@ -1304,7 +1304,7 @@
"HandledByProxy": "Zpracováno reverzním proxy",
"HeaderAddLocalUser": "Přidat místního uživatele",
"HeaderAllowMediaDeletionFrom": "Povolit smazání médií z",
- "HeaderAppearsOn": "Appears On",
+ "HeaderAppearsOn": "Objeví se",
"HeaderAudio": "Audio",
"HeaderBlockItemsWithNoRating": "Blokovat položky s žádnými nebo nerozpoznanými informacemi o hodnocení:",
"HeaderCameraUploadHelp": "Aplikace Jellyfin mohou automaticky nahrávat fotografie z mobilních zařízení do serveru Jellyfin.",
@@ -1322,8 +1322,8 @@
"HeaderImageOptions": "Volby obrázku",
"HeaderInviteWithJellyfinConnect": "Pozvat s Jellyfin Connect",
"HeaderKodiMetadataHelp": "Chcete-li povolit nebo zakázat Nfo metadata, upravte nastavení knihovny v sekci ukládání metadat.",
- "HeaderLiveTV": "Live TV",
- "HeaderLiveTv": "Live TV",
+ "HeaderLiveTV": "Živá TV",
+ "HeaderLiveTv": "Živá TV",
"HeaderLiveTvTunerSetup": "Nastavení tuneru Live TV",
"HeaderMenu": "Menu",
"HeaderNewDevices": "Nové zařízení",
@@ -1350,7 +1350,7 @@
"LabelAlbum": "Album:",
"LabelAllowedRemoteAddresses": "Filtr vzdálené IP adresy:",
"LabelAllowedRemoteAddressesMode": "Režim filtru vzdálené IP adresy:",
- "LabelAudioCodec": "Audio: {0}",
+ "LabelAudioCodec": "Audio kodek:",
"LabelAutomaticallyRefreshInternetMetadataEvery": "Automaticky aktualizovat metadata z internetu:",
"LabelBlockContentWithTags": "Blokovat položky s tagy:",
"LabelBurnSubtitles": "Vypálit titulky:",
@@ -1369,8 +1369,8 @@
"LabelEnableHardwareDecodingFor": "Povolit hardwarové dekódování pro:",
"LabelHomeNetworkQuality": "Kvalita na domácí síti:",
"LabelInternetQuality": "Kvalita na internetu:",
- "LabelKodiMetadataUser": "Uložení dat sledování uživatele do nfo pro:",
- "LabelKodiMetadataUserHelp": "Povolte toto nastavení pro uložení dat sledování do souborů NFO pro jiné aplikace, které chcete používat.",
+ "LabelKodiMetadataUser": "Uložit data sledování uživatele do NFO souboru pro:",
+ "LabelKodiMetadataUserHelp": "Uložit sledovaná data o přehrávání pro využití dalšími aplikacemi.",
"LabelLanNetworks": "Sítě LAN:",
"LabelLimit": "Limit:",
"LabelMaxStreamingBitrate": "Maximální kvalita streamování:",
@@ -1383,7 +1383,7 @@
"LabelSecureConnectionsMode": "Režim zabezpečeného připojení:",
"LabelServerHost": "Host:",
"LabelSimultaneousConnectionLimit": "Limit současně běžících streamů:",
- "LabelSkin": "Skin:",
+ "LabelSkin": "Vzhled:",
"LabelSortBy": "Řadit podle:",
"LabelSortOrder": "Pořadí řazení:",
"LabelSpecialSeasonsDisplayName": "Zobrazovaný název pro zvláštní sezónu:",
@@ -1395,14 +1395,14 @@
"LabelTypeText": "Text",
"LabelUrl": "URL:",
"LabelUserAgent": "User agent:",
- "LabelUserRemoteClientBitrateLimitHelp": "Toto přepíše výchozí globální hodnotu nastavenou v nastavení přehrávání serveru.",
+ "LabelUserRemoteClientBitrateLimitHelp": "Přepíše výchozí globální hodnotu nastavenou v nastavení přehrávání serveru.",
"LabelVideo": "Video:",
- "LabelVideoCodec": "Video: {0}",
- "LeaveBlankToNotSetAPassword": "Volitelné - ponechat prázdné pro nastavení bez hesla",
+ "LabelVideoCodec": "Video kodek:",
+ "LeaveBlankToNotSetAPassword": "Můžete ponechat prázdné pro nastavení bez hesla.",
"LetterButtonAbbreviation": "A",
"LinkApi": "API",
"LinksValue": "Odkazy: {0}",
- "LiveTV": "Live TV",
+ "LiveTV": "Živá TV",
"LiveTvFeatureDescription": "Streamujte televizní vysílání do libovolné aplikace Jellyfin s kompatibilním televizním tunerem instalovaným na serveru Jellyfin.",
"Logo": "Logo",
"ManageLibrary": "Spravovat knihovnu",
@@ -1411,7 +1411,7 @@
"MediaInfoStreamTypeAudio": "Audio",
"MediaInfoStreamTypeData": "Data",
"MediaInfoStreamTypeVideo": "Video",
- "AuthProviderHelp": "Vyberte poskytovatele ověřování, který bude použit k ověření hesla tohoto uživatele",
+ "AuthProviderHelp": "Vyberte poskytovatele ověřování, který bude použit k ověření hesla tohoto uživatele.",
"HeaderFavoriteMovies": "Oblíbená videa",
"HeaderFavoriteShows": "Oblíbené seriály",
"HeaderFavoriteEpisodes": "Oblíbené epizody",
@@ -1420,7 +1420,7 @@
"HeaderFavoriteSongs": "Oblíbená hudba",
"HeaderRestartingServer": "Restartování serveru",
"LabelAuthProvider": "Poskytovatel ověření:",
- "LabelServerNameHelp": "Tento název bude použit k identifikaci tohoto serveru. Pokud zůstane prázdné, bude použit název počítače.",
+ "LabelServerNameHelp": "Tento název bude použit k identifikaci serveru a bude výchozí pro název počítače serveru.",
"LabelPasswordResetProvider": "Poskytovatel obnovy hesla:",
"LabelServerName": "Název serveru:",
"LabelTranscodePath": "Cesta pro překódování:",
@@ -1439,16 +1439,16 @@
"MessageNoCollectionsAvailable": "Kolekce vám umožní vychutnat si osobní seskupení filmů, seriálů a hudebních alb. Chcete-li je začít vytvářet, klikněte na tlačítko +.",
"MessagePleaseWait": "Prosím, čekejte. Může to trvat několik minut.",
"Metadata": "Metadata",
- "MovieLibraryHelp": "Podívejte se na {0}průvodce pojmenováním filmů Jellyfin{1}.",
+ "MovieLibraryHelp": "Podívejte se na {0}průvodce pojmenováním filmů{1}.",
"Never": "Nikdy",
"NextUp": "Další",
"NoNewDevicesFound": "Nebyla nalezena žádná nová zařízení. Chcete-li přidat nový tuner, zavřete tento dialog a zadejte informace o zařízení ručně.",
- "OnlyImageFormats": "Pouze obrazové formáty (VOBSUB, PGS, SUB/IDX, atd.)",
+ "OnlyImageFormats": "Pouze obrazové formáty (VOBSUB, PGS, SUB, atd.)",
"Option3D": "3D",
"OptionAlbum": "Album",
"OptionAllowMediaPlaybackTranscodingHelp": "Omezení přístupu k překódování může způsobit selhání přehrávání v aplikacích Jellyfin kvůli nepodporovaným formátům médií.",
"OptionAllowSyncTranscoding": "Povolit stahování a synchronizaci médií, které vyžaduje překódování",
- "OptionBluray": "Bluray",
+ "OptionBluray": "Blu-ray",
"OptionCaptionInfoExSamsung": "CaptionInfoEx (Samsung)",
"OptionDownloadBannerImage": "Banner",
"OptionDownloadBoxImage": "Box",
@@ -1456,7 +1456,7 @@
"OptionIsHD": "HD",
"OptionIsSD": "SD",
"OptionLoginAttemptsBeforeLockout": "Určuje, kolik chybných pokusů o přihlášení lze provést před zablokováním.",
- "OptionLoginAttemptsBeforeLockoutHelp": "0 znamená zdědění výchozí hodnoty 3 pro non-admin a 5 pro admin, -1 deaktivuje uzamykání",
+ "OptionLoginAttemptsBeforeLockoutHelp": "0 znamená zdědění výchozí hodnoty 3 pokusů pro běžné uživatele a 5 pro administrátory. Nastavení na -1 deaktivuje funkci.",
"OptionMax": "Max",
"OptionProfileAudio": "Audio",
"OptionProfileVideo": "Video",
@@ -1489,14 +1489,14 @@
"Sort": "Třídit",
"StatsForNerds": "Statistiky pro šprty",
"SubtitleAppearanceSettingsAlsoPassedToCastDevices": "Tato nastavení platí také pro jakékoli přehrávání na Chromecastu spuštěné tímto zařízením.",
- "SubtitleAppearanceSettingsDisclaimer": "Tato nastavení se nevztahuje na grafické titulky (PGS, DVD atd.) nebo titulky, které mají vlastní vložené styly (ASS / SSA).",
+ "SubtitleAppearanceSettingsDisclaimer": "Tato nastavení se nevztahuje na grafické titulky (PGS, DVD atd.) nebo ASS/SSA titulky, které mají vlastní vložené styly.",
"SubtitleDownloadersHelp": "Povolte a zařaďte preferované stahovače titulků v pořadí podle priority.",
"SubtitleSettings": "Nastavení titulků",
"SubtitleSettingsIntro": "Chcete-li nastavit výchozí vzhled a jazyk titulků, zastavte přehrávání videa a klepněte na ikonu uživatele v pravé horní části aplikace.",
"TV": "TV",
"TabDirectPlay": "Přímé přehrávání",
"TabInfo": "Info",
- "TabLiveTV": "Live TV",
+ "TabLiveTV": "Živá TV",
"TabMetadata": "Metadata",
"TabPlaylist": "Playlist",
"TabServer": "Server",
@@ -1504,10 +1504,10 @@
"ThemeSongs": "Tematická hudba",
"ThemeVideos": "Tematická videa",
"Trailers": "Trailery",
- "TvLibraryHelp": "Podívejte se na {0}průvodce pojmenováním TV Jellyfin{1}.",
+ "TvLibraryHelp": "Podívejte se na {0}průvodce pojmenováním TV pořadů{1}.",
"Uniform": "Uniformní",
"Unplayed": "Nepřehrané",
- "UserAgentHelp": "V případě potřeby zadejte vlastní hlavičku user agenta http.",
+ "UserAgentHelp": "Zadejte vlastní HTTP hlavičku user agenta.",
"ValueMinutes": "{0} min",
"ValueOneAlbum": "1 album",
"ValueOneSong": "1 skladba",
@@ -1518,8 +1518,8 @@
"HeaderHome": "Domů",
"DashboardOperatingSystem": "Operační systém: {0}",
"DashboardArchitecture": "Architektura: {0}",
- "LaunchWebAppOnStartup": "Spusťte webovou aplikaci Jellyfin ve svém webovém prohlížeči po nastartování Jellyfin serveru",
- "LaunchWebAppOnStartupHelp": "Toto otevře se webovou aplikaci ve vašem výchozím webovém prohlížeči, když se spustí server Jellyfin. K tomu nedochází při použití funkce restartování serveru.",
+ "LaunchWebAppOnStartup": "Spustit webové rozhraní po spustění serveru",
+ "LaunchWebAppOnStartupHelp": "Otevře se webový klient ve vašem výchozím webovém prohlížeči, když server se spustí. K tomu nedochází při použití funkce restartování serveru.",
"MessageNoServersAvailable": "Pomocí automatického zjišťování nebyly nalezeny žádné servery.",
"OptionBanner": "Banner",
"OptionList": "Seznam",
@@ -1532,5 +1532,27 @@
"MusicArtist": "Interpret",
"MusicVideo": "Videoklip",
"SubtitleOffset": "Nastavení titulků",
- "TabNetworking": "Vytváření sítí"
+ "TabNetworking": "Vytváření sítí",
+ "MusicLibraryHelp": "Prostudujte si {0}průvodce pojmenováním hudby{1}.",
+ "MoreMediaInfo": "Informace o médiu",
+ "LabelVideoBitrate": "Datový tok videa:",
+ "LabelTranscodingProgress": "Průběh překódování:",
+ "LabelTranscodingFramerate": "Snimková frekvence pro překódování:",
+ "LabelSize": "Velikost:",
+ "LabelPleaseRestart": "Změny se projeví až po ručním obnovení webového klienta.",
+ "LabelPlayMethod": "Způsob přehrání:",
+ "LabelPlayer": "Přehrávač:",
+ "LabelFolder": "Složka:",
+ "LabelBaseUrlHelp": "Zde můžete přidat vlastní podsložku aby bylo možné přistupovat na server z unikátnější adresy.",
+ "LabelBaseUrl": "Výchozí URL:",
+ "LabelBitrate": "Datový tok:",
+ "LabelAudioSampleRate": "Vzorkovací frekvence zvuku:",
+ "LabelAudioChannels": "Počet kanálů zvuku:",
+ "LabelAudioBitrate": "Datový tok zvuku:",
+ "LabelAudioBitDepth": "Bitová hloubka zvuku:",
+ "HeaderFavoriteBooks": "Oblíbené knihy",
+ "FetchingData": "Načtení dalších dat",
+ "CopyStreamURLSuccess": "Úspěšně zkopírovaná URL.",
+ "CopyStreamURL": "Kopírovat URL adresu streamu",
+ "ButtonAddImage": "Přidat obrázek"
}
diff --git a/src/strings/he.json b/src/strings/he.json
index bf17cc4e7..6add390ce 100644
--- a/src/strings/he.json
+++ b/src/strings/he.json
@@ -509,5 +509,8 @@
"Writer": "כותב",
"Albums": "אלבומים",
"Artists": "אמנים",
- "Books": "ספרים"
+ "Books": "ספרים",
+ "Absolute": "מוחלט",
+ "AccessRestrictedTryAgainLater": "הגישה כרגע מוגבלת. אנא נסה שוב מאוחר יותר.",
+ "AddedOnValue": "נוסף {0}"
}
diff --git a/src/strings/hu.json b/src/strings/hu.json
index 1b5a30771..8d60f299e 100644
--- a/src/strings/hu.json
+++ b/src/strings/hu.json
@@ -710,7 +710,7 @@
"HeaderActivity": "Tevékenység",
"HeaderAdditionalParts": "További részek",
"HeaderAdmin": "Adminisztrátor",
- "HeaderAlbumArtists": "Album Előadók",
+ "HeaderAlbumArtists": "Album előadók",
"HeaderAlert": "Figyelem",
"HeaderAllowMediaDeletionFrom": "Média törlés engedélyezése",
"HeaderApiKey": "API Kulcs",
@@ -1300,7 +1300,7 @@
"MessageNoServersAvailable": "Az automatikus kiszolgálókeresés nem talált szervert.",
"OptionLoginAttemptsBeforeLockout": "Meghatározza, hogy hány érvénytelen bejelentkezési kísérlet történhet zárolás előtt.",
"TabNetworking": "Hálózat",
- "HeaderFavoriteArtists": "Kedvenc Előadók",
+ "HeaderFavoriteArtists": "Kedvenc előadók",
"SmallCaps": "Kiskapitális",
"AllowOnTheFlySubtitleExtractionHelp": "A beágyazott feliratokat ki lehet távolítani a videókból és elküldeni a Jellyfin alkalmazásoknak sima szöveg formátumba, hogy ne legyen átkódolás. Néhány eszközön ez hosszú ideig is eltarthat, valamint a videó lejátszás megakadhat az eltávolítási folyamat futása közben. Ezt kikapcsolva a beágyazott feliratok videó átkódolással beégetésre kerülnek azon kliens eszközökre melyek nem támogatják a külső feliratokat.",
"Art": "ClearArt",
@@ -1321,10 +1321,10 @@
"HeaderContinueListening": "Folyamatban lévő zenék",
"HeaderDeleteTaskTrigger": "Feladatvezérlő törlése",
"HeaderFavoriteMovies": "Kedvenc Filmek",
- "HeaderFavoriteShows": "Kedvenc Sorozatok",
- "HeaderFavoriteEpisodes": "Kedvenc Epizódok",
- "HeaderFavoriteAlbums": "Kedvenc Albumok",
- "HeaderFavoriteSongs": "Kedvenc Dalok",
+ "HeaderFavoriteShows": "Kedvenc sorozatok",
+ "HeaderFavoriteEpisodes": "Kedvenc epizódok",
+ "HeaderFavoriteAlbums": "Kedvenc albumok",
+ "HeaderFavoriteSongs": "Kedvenc dalok",
"HeaderFavoriteVideos": "Kedvenc Videók",
"HeaderGuideProviders": "TV műsorújság Szolgáltatók",
"HeaderHome": "Kezdőlap",
diff --git a/src/strings/nl.json b/src/strings/nl.json
index 9f31521cd..38f529af9 100644
--- a/src/strings/nl.json
+++ b/src/strings/nl.json
@@ -1327,5 +1327,6 @@
"LabelProfileVideoCodecs": "Video codecs:",
"LabelProtocolInfo": "Protocol info:",
"LabelServerName": "Server naam:",
- "LabelSkin": "Skin:"
+ "LabelSkin": "Skin:",
+ "ButtonAddImage": "Voeg afbeelding toe"
}
diff --git a/src/strings/tr.json b/src/strings/tr.json
index e2dde0392..f517eb10e 100644
--- a/src/strings/tr.json
+++ b/src/strings/tr.json
@@ -439,5 +439,121 @@
"EnableNextVideoInfoOverlay": "Oynatma sırasında bir sonraki video bilgisini göster",
"EnablePhotosHelp": "Görüntüler diğer medya dosyalarıyla birlikte algılanacak ve gösterilecektir.",
"EnableCinemaMode": "Sinema Modu",
- "EnableColorCodedBackgrounds": "Renk kodlu arka planlar"
+ "EnableColorCodedBackgrounds": "Renk kodlu arka planlar",
+ "HeaderGuideProviders": "TV Rehberi Veri Sağlayıcıları",
+ "HeaderGenres": "Türler",
+ "HeaderForgotPassword": "Parolanızı mı unuttunuz",
+ "HeaderForKids": "Çocuklar için",
+ "HeaderFetcherSettings": "Alıcı Ayarları",
+ "HeaderFetchImages": "Görüntüleri Getir:",
+ "HeaderFeatures": "Özellikleri",
+ "HeaderFeatureAccess": "Özellik Erişimi",
+ "HeaderFavoriteVideos": "Favori Videolar",
+ "HeaderFavoriteMovies": "Favori Filmler",
+ "HeaderFavoriteBooks": "favori kitaplar",
+ "HeaderExternalIds": "Dış kimlikler:",
+ "HeaderError": "Hata",
+ "HeaderEpisodes": "Bölümler",
+ "HeaderEnabledFieldsHelp": "Kilitlemek ve verilerinin değişmesini önlemek için bir alanın işaretini kaldırın.",
+ "HeaderEnabledFields": "Etkin Alanlar",
+ "HeaderEditImages": "Görüntüleri Düzenle",
+ "HeaderDownloadSync": "İndir ve Eşitle",
+ "HeaderDisplay": "Görüntüle",
+ "HeaderDirectPlayProfileHelp": "Aygıtın yerel olarak hangi biçimlerde kullanılabileceğini göstermek için doğrudan oynatma profilleri ekleyin.",
+ "HeaderDirectPlayProfile": "Doğrudan Oyun Profili",
+ "HeaderDevices": "Cihazlar",
+ "HeaderDeveloperInfo": "Geliştirici Bilgisi",
+ "HeaderDetectMyDevices": "Cihazlarımı Algıla",
+ "HeaderDeleteTaskTrigger": "Görev Tetikleyicisini Sil",
+ "HeaderDeleteProvider": "Sağlayıcıyı Sil",
+ "HeaderDeleteItems": "Ürünleri sil",
+ "HeaderDeleteItem": "Öğeyi sil",
+ "HeaderDeleteDevice": "Cihazı Sil",
+ "HeaderDefaultRecordingSettings": "Varsayılan Kayıt Ayarları",
+ "HeaderDateIssued": "Çıkış Tarihi",
+ "HeaderContinueListening": "Dinlemeye Devam Et",
+ "HeaderContainerProfileHelp": "Konteyner profilleri, belirli formatları oynatırken cihazın sınırlamalarını gösterir. Bir sınırlama uygulanırsa, format doğrudan oynatma için yapılandırılmış olsa bile ortam kodlanır.",
+ "HeaderContainerProfile": "Konteyner Profili",
+ "HeaderConnectionFailure": "Bağlantı hatası",
+ "HeaderConnectToServer": "Sunucuya bağlan",
+ "HeaderConfirmRevokeApiKey": "API Anahtarını İptal Et",
+ "HeaderConfirmProfileDeletion": "Profil Silme İşlemini Onayla",
+ "HeaderConfirmPluginInstallation": "Eklenti Yüklemesini Onayla",
+ "HeaderConfigureRemoteAccess": "Uzaktan Erişimi Yapılandırma",
+ "HeaderCodecProfileHelp": "Codec profilleri, belirli kodlayıcıları oynatırken cihazın sınırlamalarını gösterir. Eğer bir sınırlama uygulanırsa, kodeğin doğrudan oynaması için yapılandırılmış olsa bile, ortam kodlanır.",
+ "HeaderChapterImages": "Bölüm Görüntüleri",
+ "HeaderChannelAccess": "Kanal erişimi",
+ "HeaderCastCrew": "Kast ekibi",
+ "HeaderCastAndCrew": "Kast ekibi",
+ "HeaderCancelSeries": "Serileri İptal Et",
+ "HeaderCancelRecording": "Kaydı İptal Et",
+ "HeaderBranding": "dağlama",
+ "HeaderBooks": "Kitaplar",
+ "HeaderBlockItemsWithNoRating": "Tanınmayan veya bilinmeyen derecelendirme bilgisine sahip öğeleri engelle:",
+ "HeaderAudioSettings": "Ses ayarları",
+ "HeaderAudioBooks": "Sesli Kitaplar",
+ "HeaderAppearsOn": "Görünür",
+ "HeaderApp": "Uygulama",
+ "HeaderApiKeysHelp": "Jellyfin Server ile iletişim kurabilmek için harici uygulamaların bir API anahtarına sahip olmaları gerekir. Anahtarlar bir Jellyfin hesabıyla giriş yaparak veya uygulamaya manuel olarak bir anahtar vererek verilir.",
+ "HeaderApiKeys": "API Anahtarları",
+ "HeaderApiKey": "API Anahtarı",
+ "HeaderAllowMediaDeletionFrom": "Medyadan Silinmeye İzin Ver",
+ "HeaderAlert": "Alarm",
+ "HeaderAlbums": "Albümler",
+ "HeaderAdmin": "Yönetici",
+ "HeaderAdditionalParts": "İlave parçalar",
+ "HeaderAddUpdateImage": "Resim Ekle / Güncelle",
+ "HeaderAddToPlaylist": "Oynatma listesine ekle",
+ "HeaderAddToCollection": "Koleksiyona ekle",
+ "HeaderAddScheduledTaskTrigger": "Tetikleyici ekle",
+ "HeaderActivity": "Aktivite",
+ "HeaderActiveDevices": "Aktif Cihazlar",
+ "HeaderAccessScheduleHelp": "Belirli saatlerle erişimi sınırlamak için bir erişim programı oluşturun.",
+ "HeaderAccessSchedule": "Erişim Takvimi",
+ "HardwareAccelerationWarning": "Donanım ivmesini etkinleştirmek bazı ortamlarda dengesizliğe neden olabilir. İşletim sisteminizin ve video sürücülerinizin tamamen güncel olduğundan emin olun. Bunu etkinleştirdikten sonra video oynatmakta zorluk çekiyorsanız, ayarı tekrar Auto (Otomatik) olarak değiştirmeniz gerekecektir.",
+ "HandledByProxy": "Ters proxy tarafından kullanılır",
+ "HDPrograms": "HD programlar",
+ "H264EncodingPresetHelp": "Performansı artırmak için daha hızlı bir değer veya kaliteyi artırmak için daha yavaş bir değer seçin.",
+ "H264CrfHelp": "Sabit Hız Faktörü (CRF), x264 kodlayıcı için varsayılan kalite ayarıdır. Değerleri 0 ile 51 arasında ayarlayabilirsiniz, burada daha düşük değerler daha iyi kaliteyle sonuçlanır (daha yüksek dosya boyutları pahasına). Aklı başında değerleri 18 ila 28 arasındadır. X264 için varsayılan 23, bu nedenle bunu başlangıç noktası olarak kullanabilirsiniz.",
+ "GuideProviderSelectListings": "İlan Seç",
+ "GuideProviderLogin": "Oturum aç",
+ "Guide": "Rehber",
+ "GuestStar": "Konuk sanatçı",
+ "GroupVersions": "Grup versiyonları",
+ "GroupBySeries": "Seriye göre gruplandır",
+ "GenresValue": "Türler: {0}",
+ "GenreValue": "Tür: {0}",
+ "General": "Genel",
+ "Fullscreen": "Tam ekran",
+ "FormatValue": "Biçim: {0}",
+ "FolderTypeUnset": "Karışık içerik",
+ "Filters": "Filtreler",
+ "File": "Dosya",
+ "FetchingData": "Ek veri alınıyor",
+ "Features": "Özellikleri",
+ "Favorite": "Favori",
+ "FastForward": "İleri sar",
+ "FFmpegSavePathNotFound": "Girdiğiniz yolu kullanarak FFmpeg'i bulamıyoruz. FFprobe da gereklidir ve aynı klasörde bulunmalıdır. Bu bileşenler normalde aynı indirmede birlikte paketlenmiştir. Lütfen yolu kontrol edip tekrar deneyin.",
+ "Extras": "Ekstralar",
+ "ExtractChapterImagesHelp": "Bölüm görüntülerini çıkarmak, müşterilerin grafiksel sahne seçim menülerini görüntülemesini sağlar. İşlem yavaş olabilir, kaynak yoğun olabilir ve birkaç gigabaytlık alan gerektirebilir. Videolar keşfedildiğinde ve ayrıca zamanlanmış bir görev olarak çalışır. Zamanlanmış, zamanlanmış görevler alanında yapılandırılabilir. Bu görevi yoğun kullanım saatlerinde yapmanız önerilmez.",
+ "ExtraLarge": "Ekstra büyük",
+ "ExitFullscreen": "Tam ekrandan çık",
+ "EveryNDays": "Her {0} günde",
+ "ErrorSavingTvProvider": "TV sağlayıcısını kaydederken bir hata oluştu. Lütfen erişilebilir olduğundan emin olun ve tekrar deneyin.",
+ "ErrorPleaseSelectLineup": "Lütfen bir grup seçin ve tekrar deneyin. Hiç bir sıralama yoksa, lütfen kullanıcı adınızın, şifrenizin ve posta kodunuzun doğru olup olmadığını kontrol edin.",
+ "ErrorMessageStartHourGreaterThanEnd": "Bitiş saati, başlangıç saatinden büyük olmalıdır.",
+ "ErrorGettingTvLineups": "TV dizilimini indirirken bir hata oluştu. Lütfen bilgilerinizin doğru olduğundan emin olun ve tekrar deneyin.",
+ "ErrorDeletingItem": "Öğe Jellyfin Sunucusundan silinirken bir hata oluştu. Lütfen Jellyfin Server'ın medya klasörüne yazma erişimi olup olmadığını kontrol edin ve tekrar deneyin.",
+ "ErrorAddingXmlTvFile": "XmlTV dosyasına erişilirken bir hata oluştu. Lütfen dosyanın var olduğundan emin olun ve tekrar deneyin.",
+ "ErrorAddingTunerDevice": "Tuner cihazı eklenirken bir hata oluştu. Lütfen erişilebilir olduğundan emin olun ve tekrar deneyin.",
+ "ErrorAddingMediaPathToVirtualFolder": "Medya yolu eklenirken bir hata oluştu. Lütfen yolun geçerli olduğundan ve Jellyfin Server işleminin o konuma erişebildiğinden emin olun.",
+ "ErrorAddingListingsToSchedulesDirect": "Dizilişi Schedules Direct hesabınıza eklerken bir hata oluştu. Schedules Direct, hesap başına yalnızca sınırlı sayıda kadroya izin verir. Devam etmeden önce Schedules Direct web sitesine giriş yapmanız ve başka girişleri hesabınızdan kaldırmanız gerekebilir.",
+ "Episodes": "Bölümler",
+ "EndsAtValue": "{0} konumundaki biter",
+ "EnableThemeVideosHelp": "Kitaplığa göz atarken tema videoları arka planda oynatın.",
+ "EnableThemeVideos": "Tema videoları",
+ "EnableThemeSongsHelp": "Kitaplığa göz atarken tema şarkıları arka planda çalın.",
+ "EnableThemeSongs": "Tema şarkıları",
+ "EnableStreamLoopingHelp": "Canlı akışlar yalnızca birkaç saniye veri içeriyorsa ve sürekli istenmesi gerekiyorsa bunu etkinleştirin. Gerekmediğinde bunu etkinleştirmek sorunlara neden olabilir.",
+ "EnableStreamLooping": "Otomatik döngü canlı akışları"
}
diff --git a/webpack.common.js b/webpack.common.js
index 26a38394c..89b0089d8 100644
--- a/webpack.common.js
+++ b/webpack.common.js
@@ -1,5 +1,13 @@
const path = require("path");
+const { CleanWebpackPlugin} = require("clean-webpack-plugin");
const CopyPlugin = require("copy-webpack-plugin");
+const Assets = [
+ "alameda/alameda.js",
+ "requirejs/require.js",
+ "libass-wasm/dist/subtitles-octopus-worker.js",
+ "libass-wasm/dist/subtitles-octopus-worker.data",
+ "libass-wasm/dist/subtitles-octopus-worker.wasm"
+];
module.exports = {
context: path.resolve(__dirname, "src"),
@@ -10,15 +18,18 @@ module.exports = {
]
},
plugins: [
- new CopyPlugin([
- {
- from: "**/*",
- to: "."
- },
- {
- context: path.resolve(__dirname),
- from: "node_modules/libass-wasm/dist/subtitles-octopus-worker.*",
- }
- ])
+ new CleanWebpackPlugin(),
+ new CopyPlugin([{
+ from: "**/*",
+ to: "."
+ }]),
+ new CopyPlugin(
+ Assets.map(asset => {
+ return {
+ from: path.resolve(__dirname, `./node_modules/${asset}`),
+ to: path.resolve(__dirname, './dist/libraries')
+ };
+ })
+ )
]
};