';
-
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 e704b964aa..cfe7efbe73 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 94d7eb70ea..36f2cf88a6 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 b4e320e6e4..e9239693d8 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 95350120c5..ae708bcd4e 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 cc4693096a..fbb3af1205 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 bb5e70695a..aba741d64c 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 0319d59a79..f3dfd2706e 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 ac010a9b34..e0f8ea4ef8 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 e7dccc7be1..47b1c899b9 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 0ab31f291d..b1dd70ebd6 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 fed9b72146..d2adcb2da2 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 f9653fe260..a88f49d186 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 6991f63caa..37416dd3b7 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 = "";
+ }
}
}
@@ -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: layoutManager.tv ? "resume" : "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 aac1818592..d15ebd2444 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 cc2eda5053..3e310a17a3 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 3c8b3f4109..f7c2f1baaa 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 f82b150a21..ed3ae24087 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 24ece42dbe..3ee56a2a95 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 5acd9f326c..9c95cfa91f 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 4fc51467e6..509b7f521c 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 40617cdb90..a58917f22d 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 422257e33d..2b11071c75 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 d268be2991..03cad1a907 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 43082e6844..55a86d4be7 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 1de17ae836..20049837dd 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 1e83f11f3c..d5bd96d349 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 78fd601fd7..80197b01cc 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 e0a5947ca6..b4e30602fd 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 2bab767735..82c0b6a12d 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 2d1fdda63c..3e62298613 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 8a562c532d..ac45d9a15b 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 b28385169d..5159f635f8 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 f66afcdb20..ed1efc0a6a 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 511ace73a7..964896077b 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 5dee7c5f52..fc3371833d 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 f03abe75ff..4806195edd 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 a9333ba5a3..70e6adaf61 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 7f1b9b3f11..6fcdb2a79c 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 35a780949d..76c704f7eb 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 32838c6de3..7dae03cb3d 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 b188a8b318..b260ef5751 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 385ab69ca2..80ecb13f00 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 2b43215c93..fb3b8112dc 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 1f783631fb..42d9d89f7a 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 e9559155e1..956b8fa6fa 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 006f41e6ce..2a1ed56bf4 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 9de1461b3d..1386e76a31 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 ac832a915e..adccd98234 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 bfa33401f4..3c000a8e72 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 9d6a79a5ef..162e6fcb34 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 6f19a68422..6c85034458 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 4b4440f96a..f91e874a89 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 a7147ddda3..5794d58723 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 6bac0011d2..d9fa2ab998 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 856470948a..f2463ad8df 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 81d949e1a9..205265efcd 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 0709e8dae9..fb6a3f94cd 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 8352e90c3e..38418f5190 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 10fa6fc4f3..ec80679f8c 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 381dc8cea9..2a862912d5 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 d1eef004f6..30ca063278 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 180af64b58..8242a16cb4 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";
});