mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
commit
0d8bc6fb46
17 changed files with 1018 additions and 493 deletions
|
@ -1,8 +1,9 @@
|
||||||
define(["loading"], function(loading) {
|
define(["loading"], function (loading) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function onFinish() {
|
function onFinish() {
|
||||||
loading.show(), ApiClient.ajax({
|
loading.show();
|
||||||
|
ApiClient.ajax({
|
||||||
url: ApiClient.getUrl("Startup/Complete"),
|
url: ApiClient.getUrl("Startup/Complete"),
|
||||||
type: "POST"
|
type: "POST"
|
||||||
}).then(function() {
|
}).then(function() {
|
||||||
|
@ -10,7 +11,8 @@ define(["loading"], function(loading) {
|
||||||
window.location.href = "index.html";
|
window.location.href = "index.html";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return function(view, params) {
|
|
||||||
|
return function (view, params) {
|
||||||
view.querySelector(".btnWizardNext").addEventListener("click", onFinish);
|
view.querySelector(".btnWizardNext").addEventListener("click", onFinish);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,31 +1,39 @@
|
||||||
define(["loading", "emby-checkbox", "emby-button", "emby-select"], function(loading) {
|
define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loading) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function save(page) {
|
function save(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var apiClient = ApiClient,
|
var apiClient = ApiClient;
|
||||||
config = {};
|
var config = {};
|
||||||
config.EnableRemoteAccess = page.querySelector("#chkRemoteAccess").checked, config.EnableAutomaticPortMapping = page.querySelector("#chkEnableUpnp").checked, apiClient.ajax({
|
config.EnableRemoteAccess = page.querySelector("#chkRemoteAccess").checked;
|
||||||
|
config.EnableAutomaticPortMapping = page.querySelector("#chkEnableUpnp").checked;
|
||||||
|
apiClient.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
data: config,
|
data: config,
|
||||||
url: apiClient.getUrl("Startup/RemoteAccess")
|
url: apiClient.getUrl("Startup/RemoteAccess")
|
||||||
}).then(function() {
|
}).then(function () {
|
||||||
loading.hide(), navigateToNextPage()
|
loading.hide();
|
||||||
})
|
navigateToNextPage();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function navigateToNextPage() {
|
function navigateToNextPage() {
|
||||||
Dashboard.navigate("wizardfinish.html")
|
Dashboard.navigate("wizardfinish.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSubmit(e) {
|
function onSubmit(e) {
|
||||||
return save(this), e.preventDefault(), !1
|
save(this);
|
||||||
}
|
e.preventDefault();
|
||||||
return function(view, params) {
|
return false;
|
||||||
view.querySelector(".wizardSettingsForm").addEventListener("submit", onSubmit), view.addEventListener("viewshow", function() {
|
|
||||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")
|
|
||||||
}), view.addEventListener("viewhide", function() {
|
|
||||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return function (view, params) {
|
||||||
|
view.querySelector(".wizardSettingsForm").addEventListener("submit", onSubmit);
|
||||||
|
view.addEventListener("viewshow", function () {
|
||||||
|
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||||
|
});
|
||||||
|
view.addEventListener("viewhide", function () {
|
||||||
|
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||||
|
});
|
||||||
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,67 +1,84 @@
|
||||||
define(["loading", "emby-checkbox", "emby-button", "emby-select"], function(loading) {
|
define(["loading", "emby-checkbox", "emby-button", "emby-select"], function (loading) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function save(page) {
|
function save(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var apiClient = ApiClient;
|
var apiClient = ApiClient;
|
||||||
apiClient.getJSON(apiClient.getUrl("Startup/Configuration")).then(function(config) {
|
apiClient.getJSON(apiClient.getUrl("Startup/Configuration")).then(function (config) {
|
||||||
config.PreferredMetadataLanguage = page.querySelector("#selectLanguage").value, config.MetadataCountryCode = page.querySelector("#selectCountry").value, apiClient.ajax({
|
config.PreferredMetadataLanguage = page.querySelector("#selectLanguage").value;
|
||||||
|
config.MetadataCountryCode = page.querySelector("#selectCountry").value;
|
||||||
|
apiClient.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
data: config,
|
data: config,
|
||||||
url: apiClient.getUrl("Startup/Configuration")
|
url: apiClient.getUrl("Startup/Configuration")
|
||||||
}).then(function() {
|
}).then(function () {
|
||||||
loading.hide(), navigateToNextPage()
|
loading.hide();
|
||||||
})
|
navigateToNextPage();
|
||||||
})
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function populateLanguages(select, languages) {
|
function populateLanguages(select, languages) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += "<option value=''></option>";
|
html += "<option value=''></option>";
|
||||||
|
|
||||||
for (var i = 0, length = languages.length; i < length; i++) {
|
for (var i = 0, length = languages.length; i < length; i++) {
|
||||||
var culture = languages[i];
|
var culture = languages[i];
|
||||||
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>"
|
html += "<option value='" + culture.TwoLetterISOLanguageName + "'>" + culture.DisplayName + "</option>";
|
||||||
}
|
}
|
||||||
select.innerHTML = html
|
|
||||||
|
select.innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function populateCountries(select, allCountries) {
|
function populateCountries(select, allCountries) {
|
||||||
var html = "";
|
var html = "";
|
||||||
html += "<option value=''></option>";
|
html += "<option value=''></option>";
|
||||||
|
|
||||||
for (var i = 0, length = allCountries.length; i < length; i++) {
|
for (var i = 0, length = allCountries.length; i < length; i++) {
|
||||||
var culture = allCountries[i];
|
var culture = allCountries[i];
|
||||||
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>"
|
html += "<option value='" + culture.TwoLetterISORegionName + "'>" + culture.DisplayName + "</option>";
|
||||||
}
|
}
|
||||||
select.innerHTML = html
|
|
||||||
|
select.innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function reloadData(page, config, cultures, countries) {
|
function reloadData(page, config, cultures, countries) {
|
||||||
populateLanguages(page.querySelector("#selectLanguage"), cultures), populateCountries(page.querySelector("#selectCountry"), countries), page.querySelector("#selectLanguage").value = config.PreferredMetadataLanguage, page.querySelector("#selectCountry").value = config.MetadataCountryCode, loading.hide()
|
populateLanguages(page.querySelector("#selectLanguage"), cultures);
|
||||||
|
populateCountries(page.querySelector("#selectCountry"), countries);
|
||||||
|
page.querySelector("#selectLanguage").value = config.PreferredMetadataLanguage;
|
||||||
|
page.querySelector("#selectCountry").value = config.MetadataCountryCode;
|
||||||
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload(page) {
|
function reload(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var apiClient = ApiClient,
|
var apiClient = ApiClient;
|
||||||
promise1 = apiClient.getJSON(apiClient.getUrl("Startup/Configuration")),
|
var promise1 = apiClient.getJSON(apiClient.getUrl("Startup/Configuration"));
|
||||||
promise2 = apiClient.getCultures(),
|
var promise2 = apiClient.getCultures();
|
||||||
promise3 = apiClient.getCountries();
|
var promise3 = apiClient.getCountries();
|
||||||
Promise.all([promise1, promise2, promise3]).then(function(responses) {
|
Promise.all([promise1, promise2, promise3]).then(function (responses) {
|
||||||
reloadData(page, responses[0], responses[1], responses[2])
|
reloadData(page, responses[0], responses[1], responses[2]);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function navigateToNextPage() {
|
function navigateToNextPage() {
|
||||||
Dashboard.navigate("wizardremoteaccess.html")
|
Dashboard.navigate("wizardremoteaccess.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSubmit(e) {
|
function onSubmit(e) {
|
||||||
return save(this), e.preventDefault(), !1
|
save(this);
|
||||||
|
e.preventDefault();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return function(view, params) {
|
|
||||||
view.querySelector(".wizardSettingsForm").addEventListener("submit", onSubmit), view.addEventListener("viewshow", function() {
|
return function (view, params) {
|
||||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader"), reload(this)
|
view.querySelector(".wizardSettingsForm").addEventListener("submit", onSubmit);
|
||||||
}), view.addEventListener("viewhide", function() {
|
view.addEventListener("viewshow", function () {
|
||||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")
|
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||||
})
|
reload(this);
|
||||||
}
|
});
|
||||||
});
|
view.addEventListener("viewhide", function () {
|
||||||
|
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
|
@ -1,41 +1,48 @@
|
||||||
define(["jQuery", "loading", "emby-button", "emby-select"], function($, loading) {
|
define(["jQuery", "loading", "emby-button", "emby-select"], function ($, loading) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadPage(page, config, languageOptions) {
|
function loadPage(page, config, languageOptions) {
|
||||||
$("#selectLocalizationLanguage", page).html(languageOptions.map(function(l) {
|
$("#selectLocalizationLanguage", page).html(languageOptions.map(function (l) {
|
||||||
return '<option value="' + l.Value + '">' + l.Name + "</option>"
|
return '<option value="' + l.Value + '">' + l.Name + "</option>";
|
||||||
})).val(config.UICulture), loading.hide()
|
})).val(config.UICulture);
|
||||||
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function save(page) {
|
function save(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var apiClient = ApiClient;
|
var apiClient = ApiClient;
|
||||||
apiClient.getJSON(apiClient.getUrl("Startup/Configuration")).then(function(config) {
|
apiClient.getJSON(apiClient.getUrl("Startup/Configuration")).then(function (config) {
|
||||||
config.UICulture = $("#selectLocalizationLanguage", page).val(), apiClient.ajax({
|
config.UICulture = $("#selectLocalizationLanguage", page).val();
|
||||||
|
apiClient.ajax({
|
||||||
type: "POST",
|
type: "POST",
|
||||||
data: config,
|
data: config,
|
||||||
url: apiClient.getUrl("Startup/Configuration")
|
url: apiClient.getUrl("Startup/Configuration")
|
||||||
}).then(function() {
|
}).then(function () {
|
||||||
Dashboard.navigate("wizarduser.html")
|
Dashboard.navigate("wizarduser.html");
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSubmit() {
|
function onSubmit() {
|
||||||
return save($(this).parents(".page")), !1
|
save($(this).parents(".page"));
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return function(view, params) {
|
|
||||||
$(".wizardStartForm", view).on("submit", onSubmit), view.addEventListener("viewshow", function() {
|
return function (view, params) {
|
||||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader"), loading.show();
|
$(".wizardStartForm", view).on("submit", onSubmit);
|
||||||
var page = this,
|
view.addEventListener("viewshow", function () {
|
||||||
apiClient = ApiClient,
|
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||||
promise1 = apiClient.getJSON(apiClient.getUrl("Startup/Configuration")),
|
loading.show();
|
||||||
promise2 = apiClient.getJSON(apiClient.getUrl("Localization/Options"));
|
var page = this;
|
||||||
Promise.all([promise1, promise2]).then(function(responses) {
|
var apiClient = ApiClient;
|
||||||
loadPage(page, responses[0], responses[1])
|
var promise1 = apiClient.getJSON(apiClient.getUrl("Startup/Configuration"));
|
||||||
})
|
var promise2 = apiClient.getJSON(apiClient.getUrl("Localization/Options"));
|
||||||
}), view.addEventListener("viewhide", function() {
|
Promise.all([promise1, promise2]).then(function (responses) {
|
||||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")
|
loadPage(page, responses[0], responses[1]);
|
||||||
})
|
});
|
||||||
}
|
});
|
||||||
});
|
view.addEventListener("viewhide", function () {
|
||||||
|
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "emby-button"], function(loading, globalize) {
|
define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "emby-button"], function (loading, globalize) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getApiClient() {
|
function getApiClient() {
|
||||||
|
@ -30,13 +30,15 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||||
|
|
||||||
function onSubmit(e) {
|
function onSubmit(e) {
|
||||||
var form = this;
|
var form = this;
|
||||||
|
|
||||||
if (form.querySelector("#txtManualPassword").value != form.querySelector("#txtPasswordConfirm").value) {
|
if (form.querySelector("#txtManualPassword").value != form.querySelector("#txtPasswordConfirm").value) {
|
||||||
require(["toast"], function(toast) {
|
require(["toast"], function (toast) {
|
||||||
toast(Globalize.translate("PasswordMatchError"));
|
toast(Globalize.translate("PasswordMatchError"));
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
submit(form);
|
submit(form);
|
||||||
}
|
}
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -45,20 +47,21 @@ define(["loading", "globalize", "dashboardcss", "emby-input", "emby-button", "em
|
||||||
loading.show();
|
loading.show();
|
||||||
var page = this;
|
var page = this;
|
||||||
var apiClient = getApiClient();
|
var apiClient = getApiClient();
|
||||||
apiClient.getJSON(apiClient.getUrl("Startup/User")).then(function(user) {
|
apiClient.getJSON(apiClient.getUrl("Startup/User")).then(function (user) {
|
||||||
page.querySelector("#txtUsername").value = user.Name || "";
|
page.querySelector("#txtUsername").value = user.Name || "";
|
||||||
page.querySelector("#txtManualPassword").value = user.Password || "";
|
page.querySelector("#txtManualPassword").value = user.Password || "";
|
||||||
loading.hide();
|
loading.hide();
|
||||||
})
|
|
||||||
}
|
|
||||||
return function(view, params) {
|
|
||||||
view.querySelector(".wizardUserForm").addEventListener("submit", onSubmit);
|
|
||||||
view.addEventListener("viewshow", function() {
|
|
||||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")
|
|
||||||
});
|
});
|
||||||
view.addEventListener("viewhide", function() {
|
}
|
||||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")
|
|
||||||
|
return function (view, params) {
|
||||||
|
view.querySelector(".wizardUserForm").addEventListener("submit", onSubmit);
|
||||||
|
view.addEventListener("viewshow", function () {
|
||||||
|
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||||
|
});
|
||||||
|
view.addEventListener("viewhide", function () {
|
||||||
|
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||||
});
|
});
|
||||||
view.addEventListener("viewshow", onViewShow);
|
view.addEventListener("viewshow", onViewShow);
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,53 +1,76 @@
|
||||||
define(["backdrop", "userSettings", "libraryMenu"], function(backdrop, userSettings, libraryMenu) {
|
define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSettings, libraryMenu) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function enabled() {
|
function enabled() {
|
||||||
return userSettings.enableBackdrops()
|
return userSettings.enableBackdrops();
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBackdropItemIds(apiClient, userId, types, parentId) {
|
function getBackdropItemIds(apiClient, userId, types, parentId) {
|
||||||
var key = "backdrops2_" + userId + (types || "") + (parentId || ""),
|
var key = "backdrops2_" + userId + (types || "") + (parentId || "");
|
||||||
data = cache[key];
|
var data = cache[key];
|
||||||
if (data) return console.log("Found backdrop id list in cache. Key: " + key), data = JSON.parse(data), Promise.resolve(data);
|
|
||||||
|
if (data) {
|
||||||
|
console.log("Found backdrop id list in cache. Key: " + key);
|
||||||
|
data = JSON.parse(data);
|
||||||
|
return Promise.resolve(data);
|
||||||
|
}
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
SortBy: "IsFavoriteOrLiked,Random",
|
SortBy: "IsFavoriteOrLiked,Random",
|
||||||
Limit: 20,
|
Limit: 20,
|
||||||
Recursive: !0,
|
Recursive: true,
|
||||||
IncludeItemTypes: types,
|
IncludeItemTypes: types,
|
||||||
ImageTypes: "Backdrop",
|
ImageTypes: "Backdrop",
|
||||||
ParentId: parentId,
|
ParentId: parentId,
|
||||||
EnableTotalRecordCount: !1
|
EnableTotalRecordCount: false
|
||||||
};
|
};
|
||||||
return apiClient.getItems(apiClient.getCurrentUserId(), options).then(function(result) {
|
return apiClient.getItems(apiClient.getCurrentUserId(), options).then(function (result) {
|
||||||
var images = result.Items.map(function(i) {
|
var images = result.Items.map(function (i) {
|
||||||
return {
|
return {
|
||||||
Id: i.Id,
|
Id: i.Id,
|
||||||
tag: i.BackdropImageTags[0],
|
tag: i.BackdropImageTags[0],
|
||||||
ServerId: i.ServerId
|
ServerId: i.ServerId
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
return cache[key] = JSON.stringify(images), images
|
cache[key] = JSON.stringify(images);
|
||||||
})
|
return images;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function showBackdrop(type, parentId) {
|
function showBackdrop(type, parentId) {
|
||||||
var apiClient = window.ApiClient;
|
var apiClient = window.ApiClient;
|
||||||
apiClient && getBackdropItemIds(apiClient, apiClient.getCurrentUserId(), type, parentId).then(function(images) {
|
|
||||||
images.length ? backdrop.setBackdrops(images.map(function(i) {
|
if (apiClient) {
|
||||||
return i.BackdropImageTags = [i.tag], i
|
getBackdropItemIds(apiClient, apiClient.getCurrentUserId(), type, parentId).then(function (images) {
|
||||||
})) : backdrop.clear()
|
if (images.length) {
|
||||||
})
|
backdrop.setBackdrops(images.map(function (i) {
|
||||||
|
i.BackdropImageTags = [i.tag];
|
||||||
|
return i;
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
backdrop.clear();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var cache = {};
|
var cache = {};
|
||||||
pageClassOn("pageshow", "page", function() {
|
pageClassOn("pageshow", "page", function () {
|
||||||
var page = this;
|
var page = this;
|
||||||
if (!page.classList.contains("selfBackdropPage"))
|
|
||||||
if (page.classList.contains("backdropPage"))
|
if (!page.classList.contains("selfBackdropPage")) {
|
||||||
|
if (page.classList.contains("backdropPage")) {
|
||||||
if (enabled()) {
|
if (enabled()) {
|
||||||
var type = page.getAttribute("data-backdroptype"),
|
var type = page.getAttribute("data-backdroptype");
|
||||||
parentId = page.classList.contains("globalBackdropPage") ? "" : libraryMenu.getTopParentId();
|
var parentId = page.classList.contains("globalBackdropPage") ? "" : libraryMenu.getTopParentId();
|
||||||
showBackdrop(type, parentId)
|
showBackdrop(type, parentId);
|
||||||
} else page.classList.remove("backdropPage"), backdrop.clear();
|
} else {
|
||||||
else backdrop.clear()
|
page.classList.remove("backdropPage");
|
||||||
})
|
backdrop.clear();
|
||||||
});
|
}
|
||||||
|
} else {
|
||||||
|
backdrop.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -1,40 +1,90 @@
|
||||||
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "emby-itemscontainer", "emby-button"], function(connectionManager, listView, cardBuilder, imageLoader, libraryBrowser) {
|
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "emby-itemscontainer", "emby-button"], function (connectionManager, listView, cardBuilder, imageLoader, libraryBrowser) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function renderItems(page, item) {
|
function renderItems(page, item) {
|
||||||
var sections = [];
|
var sections = [];
|
||||||
item.ArtistCount && sections.push({
|
|
||||||
name: Globalize.translate("TabArtists"),
|
if (item.ArtistCount) {
|
||||||
type: "MusicArtist"
|
sections.push({
|
||||||
}), item.ProgramCount && "Person" == item.Type && sections.push({
|
name: Globalize.translate("TabArtists"),
|
||||||
name: Globalize.translate("HeaderUpcomingOnTV"),
|
type: "MusicArtist"
|
||||||
type: "Program"
|
});
|
||||||
}), item.MovieCount && sections.push({
|
}
|
||||||
name: Globalize.translate("TabMovies"),
|
|
||||||
type: "Movie"
|
if (item.ProgramCount && "Person" == item.Type) {
|
||||||
}), item.SeriesCount && sections.push({
|
sections.push({
|
||||||
name: Globalize.translate("TabShows"),
|
name: Globalize.translate("HeaderUpcomingOnTV"),
|
||||||
type: "Series"
|
type: "Program"
|
||||||
}), item.EpisodeCount && sections.push({
|
});
|
||||||
name: Globalize.translate("TabEpisodes"),
|
}
|
||||||
type: "Episode"
|
|
||||||
}), item.TrailerCount && sections.push({
|
if (item.MovieCount) {
|
||||||
name: Globalize.translate("TabTrailers"),
|
sections.push({
|
||||||
type: "Trailer"
|
name: Globalize.translate("TabMovies"),
|
||||||
}), item.AlbumCount && sections.push({
|
type: "Movie"
|
||||||
name: Globalize.translate("TabAlbums"),
|
});
|
||||||
type: "MusicAlbum"
|
}
|
||||||
}), item.MusicVideoCount && sections.push({
|
|
||||||
name: Globalize.translate("TabMusicVideos"),
|
if (item.SeriesCount) {
|
||||||
type: "MusicVideo"
|
sections.push({
|
||||||
});
|
name: Globalize.translate("TabShows"),
|
||||||
|
type: "Series"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.EpisodeCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabEpisodes"),
|
||||||
|
type: "Episode"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.TrailerCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabTrailers"),
|
||||||
|
type: "Trailer"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.AlbumCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabAlbums"),
|
||||||
|
type: "MusicAlbum"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.MusicVideoCount) {
|
||||||
|
sections.push({
|
||||||
|
name: Globalize.translate("TabMusicVideos"),
|
||||||
|
type: "MusicVideo"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var elem = page.querySelector("#childrenContent");
|
var elem = page.querySelector("#childrenContent");
|
||||||
elem.innerHTML = sections.map(function(section) {
|
elem.innerHTML = sections.map(function (section) {
|
||||||
var html = "",
|
var html = "";
|
||||||
sectionClass = "verticalSection";
|
var sectionClass = "verticalSection";
|
||||||
return "Audio" === section.type && (sectionClass += " verticalSection-extrabottompadding"), html += '<div class="' + sectionClass + '" data-type="' + section.type + '">', html += '<div class="sectionTitleContainer sectionTitleContainer-cards">', html += '<h2 class="sectionTitle sectionTitle-cards padded-left">', html += section.name, html += "</h2>", html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + Globalize.translate("ButtonMore") + "</button></a>", html += "</div>", html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">', html += "</div>", html += "</div>"
|
|
||||||
|
if ("Audio" === section.type) {
|
||||||
|
sectionClass += " verticalSection-extrabottompadding";
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<div class="' + sectionClass + '" data-type="' + section.type + '">';
|
||||||
|
html += '<div class="sectionTitleContainer sectionTitleContainer-cards">';
|
||||||
|
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">';
|
||||||
|
html += section.name;
|
||||||
|
html += "</h2>";
|
||||||
|
html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + Globalize.translate("ButtonMore") + "</button></a>";
|
||||||
|
html += "</div>";
|
||||||
|
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">';
|
||||||
|
html += "</div>";
|
||||||
|
return html += "</div>";
|
||||||
}).join("");
|
}).join("");
|
||||||
for (var sectionElems = elem.querySelectorAll(".verticalSection"), i = 0, length = sectionElems.length; i < length; i++) renderSection(page, item, sectionElems[i], sectionElems[i].getAttribute("data-type"))
|
var sectionElems = elem.querySelectorAll(".verticalSection");
|
||||||
|
|
||||||
|
for (var i = 0, length = sectionElems.length; i < length; i++) {
|
||||||
|
renderSection(page, item, sectionElems[i], sectionElems[i].getAttribute("data-type"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderSection(page, item, element, type) {
|
function renderSection(page, item, element, type) {
|
||||||
|
@ -50,16 +100,17 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "StartDate"
|
SortBy: "StartDate"
|
||||||
}, {
|
}, {
|
||||||
shape: "backdrop",
|
shape: "backdrop",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayMoreButton: !0,
|
overlayMoreButton: true,
|
||||||
preferThumb: !0,
|
preferThumb: true,
|
||||||
overlayText: !1,
|
overlayText: false,
|
||||||
showAirTime: !0,
|
showAirTime: true,
|
||||||
showAirDateTime: !0,
|
showAirDateTime: true,
|
||||||
showChannelName: !0
|
showChannelName: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Movie":
|
case "Movie":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -71,13 +122,14 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayMoreButton: !0,
|
overlayMoreButton: true,
|
||||||
overlayText: !1,
|
overlayText: false,
|
||||||
showYear: !0
|
showYear: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicVideo":
|
case "MusicVideo":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -89,11 +141,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Trailer":
|
case "Trailer":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -105,11 +158,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Series":
|
case "Series":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -121,11 +175,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayMoreButton: !0
|
overlayMoreButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicAlbum":
|
case "MusicAlbum":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -137,14 +192,15 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "ProductionYear,Sortname"
|
SortBy: "ProductionYear,Sortname"
|
||||||
}, {
|
}, {
|
||||||
shape: "square",
|
shape: "square",
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
showYear: !0,
|
showYear: true,
|
||||||
coverImage: !0,
|
coverImage: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "MusicArtist":
|
case "MusicArtist":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -156,14 +212,15 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "square",
|
shape: "square",
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
showParentTitle: !0,
|
showParentTitle: true,
|
||||||
coverImage: !0,
|
coverImage: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Episode":
|
case "Episode":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -175,12 +232,13 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
SortBy: "SortName"
|
SortBy: "SortName"
|
||||||
}, {
|
}, {
|
||||||
shape: "backdrop",
|
shape: "backdrop",
|
||||||
showTitle: !0,
|
showTitle: true,
|
||||||
showParentTitle: !0,
|
showParentTitle: true,
|
||||||
centerText: !0,
|
centerText: true,
|
||||||
overlayPlayButton: !0
|
overlayPlayButton: true
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "Audio":
|
case "Audio":
|
||||||
loadItems(element, item, type, {
|
loadItems(element, item, type, {
|
||||||
MediaTypes: "",
|
MediaTypes: "",
|
||||||
|
@ -190,57 +248,122 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
||||||
AlbumArtistIds: "",
|
AlbumArtistIds: "",
|
||||||
SortBy: "AlbumArtist,Album,SortName"
|
SortBy: "AlbumArtist,Album,SortName"
|
||||||
}, {
|
}, {
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
action: "playallfromhere",
|
action: "playallfromhere",
|
||||||
smallIcon: !0,
|
smallIcon: true,
|
||||||
artist: !0
|
artist: true
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadItems(element, item, type, query, listOptions) {
|
function loadItems(element, item, type, query, listOptions) {
|
||||||
query = getQuery(query, item), getItemsFunction(query, item)(query.StartIndex, query.Limit, query.Fields).then(function(result) {
|
query = getQuery(query, item);
|
||||||
|
getItemsFunction(query, item)(query.StartIndex, query.Limit, query.Fields).then(function (result) {
|
||||||
var html = "";
|
var html = "";
|
||||||
|
|
||||||
if (query.Limit && result.TotalRecordCount > query.Limit) {
|
if (query.Limit && result.TotalRecordCount > query.Limit) {
|
||||||
var link = element.querySelector("a");
|
var link = element.querySelector("a");
|
||||||
link.classList.remove("hide"), link.setAttribute("href", getMoreItemsHref(item, type))
|
link.classList.remove("hide");
|
||||||
} else element.querySelector("a").classList.add("hide");
|
link.setAttribute("href", getMoreItemsHref(item, type));
|
||||||
|
} else {
|
||||||
|
element.querySelector("a").classList.add("hide");
|
||||||
|
}
|
||||||
|
|
||||||
listOptions.items = result.Items;
|
listOptions.items = result.Items;
|
||||||
var itemsContainer = element.querySelector(".itemsContainer");
|
var itemsContainer = element.querySelector(".itemsContainer");
|
||||||
"Audio" == type ? (html = listView.getListViewHtml(listOptions), itemsContainer.classList.remove("vertical-wrap"), itemsContainer.classList.add("vertical-list")) : (html = cardBuilder.getCardsHtml(listOptions), itemsContainer.classList.add("vertical-wrap"), itemsContainer.classList.remove("vertical-list")), itemsContainer.innerHTML = html, imageLoader.lazyChildren(itemsContainer)
|
|
||||||
})
|
if ("Audio" == type) {
|
||||||
|
html = listView.getListViewHtml(listOptions);
|
||||||
|
itemsContainer.classList.remove("vertical-wrap");
|
||||||
|
itemsContainer.classList.add("vertical-list");
|
||||||
|
} else {
|
||||||
|
html = cardBuilder.getCardsHtml(listOptions);
|
||||||
|
itemsContainer.classList.add("vertical-wrap");
|
||||||
|
itemsContainer.classList.remove("vertical-list");
|
||||||
|
}
|
||||||
|
|
||||||
|
itemsContainer.innerHTML = html;
|
||||||
|
imageLoader.lazyChildren(itemsContainer);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getMoreItemsHref(item, type) {
|
function getMoreItemsHref(item, type) {
|
||||||
return "Genre" == item.Type ? "list.html?type=" + type + "&genreId=" + item.Id + "&serverId=" + item.ServerId : "MusicGenre" == item.Type ? "list.html?type=" + type + "&musicGenreId=" + item.Id + "&serverId=" + item.ServerId : "Studio" == item.Type ? "list.html?type=" + type + "&studioId=" + item.Id + "&serverId=" + item.ServerId : "MusicArtist" == item.Type ? "list.html?type=" + type + "&artistId=" + item.Id + "&serverId=" + item.ServerId : "Person" == item.Type ? "list.html?type=" + type + "&personId=" + item.Id + "&serverId=" + item.ServerId : "list.html?type=" + type + "&parentId=" + item.Id + "&serverId=" + item.ServerId
|
if ("Genre" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&genreId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("MusicGenre" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&musicGenreId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Studio" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&studioId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("MusicArtist" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&artistId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ("Person" == item.Type) {
|
||||||
|
return "list.html?type=" + type + "&personId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "list.html?type=" + type + "&parentId=" + item.Id + "&serverId=" + item.ServerId;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addCurrentItemToQuery(query, item) {
|
function addCurrentItemToQuery(query, item) {
|
||||||
"Person" == item.Type ? query.PersonIds = item.Id : "Genre" == item.Type ? query.GenreIds = item.Id : "MusicGenre" == item.Type ? query.GenreIds = item.Id : "Studio" == item.Type ? query.StudioIds = item.Id : "MusicArtist" == item.Type && (connectionManager.getApiClient(item.ServerId).isMinServerVersion("3.4.1.18") ? query.AlbumArtistIds = item.Id : query.ArtistIds = item.Id)
|
if (item.Type == "Person") {
|
||||||
|
query.PersonIds = item.Id;
|
||||||
|
} else if (item.Type == "Genre") {
|
||||||
|
query.Genres = item.Name;
|
||||||
|
} else if (item.Type == "MusicGenre") {
|
||||||
|
query.Genres = item.Name;
|
||||||
|
} else if (item.Type == "GameGenre") {
|
||||||
|
query.Genres = item.Name;
|
||||||
|
} else if (item.Type == "Studio") {
|
||||||
|
query.StudioIds = item.Id;
|
||||||
|
} else if (item.Type == "MusicArtist") {
|
||||||
|
query.AlbumArtistIds = item.Id;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQuery(options, item) {
|
function getQuery(options, item) {
|
||||||
var query = {
|
var query = {
|
||||||
SortOrder: "Ascending",
|
SortOrder: "Ascending",
|
||||||
IncludeItemTypes: "",
|
IncludeItemTypes: "",
|
||||||
Recursive: !0,
|
Recursive: true,
|
||||||
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio,BasicSyncInfo",
|
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio,BasicSyncInfo",
|
||||||
Limit: 100,
|
Limit: 100,
|
||||||
StartIndex: 0,
|
StartIndex: 0,
|
||||||
CollapseBoxSetItems: !1
|
CollapseBoxSetItems: false
|
||||||
};
|
};
|
||||||
return query = Object.assign(query, options || {}), addCurrentItemToQuery(query, item), query
|
query = Object.assign(query, options || {});
|
||||||
|
addCurrentItemToQuery(query, item);
|
||||||
|
return query;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getItemsFunction(options, item) {
|
function getItemsFunction(options, item) {
|
||||||
var query = getQuery(options, item);
|
var query = getQuery(options, item);
|
||||||
return function(index, limit, fields) {
|
return function (index, limit, fields) {
|
||||||
query.StartIndex = index, query.Limit = limit, fields && (query.Fields += "," + fields);
|
query.StartIndex = index;
|
||||||
|
query.Limit = limit;
|
||||||
|
|
||||||
|
if (fields) {
|
||||||
|
query.Fields += "," + fields;
|
||||||
|
}
|
||||||
|
|
||||||
var apiClient = connectionManager.getApiClient(item.ServerId);
|
var apiClient = connectionManager.getApiClient(item.ServerId);
|
||||||
return "MusicArtist" === query.IncludeItemTypes ? (query.IncludeItemTypes = null, apiClient.getAlbumArtists(apiClient.getCurrentUserId(), query)) : apiClient.getItems(apiClient.getCurrentUserId(), query)
|
|
||||||
}
|
if ("MusicArtist" === query.IncludeItemTypes) {
|
||||||
|
query.IncludeItemTypes = null;
|
||||||
|
return apiClient.getAlbumArtists(apiClient.getCurrentUserId(), query);
|
||||||
|
}
|
||||||
|
|
||||||
|
return apiClient.getItems(apiClient.getCurrentUserId(), query);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
window.ItemsByName = {
|
window.ItemsByName = {
|
||||||
renderItems: renderItems
|
renderItems: renderItems
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,101 +1,198 @@
|
||||||
define(["userSettings"], function(userSettings) {
|
define(["userSettings"], function (userSettings) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var libraryBrowser = {
|
var libraryBrowser = {
|
||||||
getSavedQueryKey: function(modifier) {
|
getSavedQueryKey: function (modifier) {
|
||||||
return window.location.href.split("#")[0] + (modifier || "")
|
return window.location.href.split("#")[0] + (modifier || "");
|
||||||
},
|
},
|
||||||
loadSavedQueryValues: function(key, query) {
|
loadSavedQueryValues: function (key, query) {
|
||||||
var values = userSettings.get(key);
|
var values = userSettings.get(key);
|
||||||
return values ? (values = JSON.parse(values), Object.assign(query, values)) : query
|
|
||||||
|
if (values) {
|
||||||
|
values = JSON.parse(values);
|
||||||
|
return Object.assign(query, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
return query;
|
||||||
},
|
},
|
||||||
saveQueryValues: function(key, query) {
|
saveQueryValues: function (key, query) {
|
||||||
var values = {};
|
var values = {};
|
||||||
query.SortBy && (values.SortBy = query.SortBy), query.SortOrder && (values.SortOrder = query.SortOrder), userSettings.set(key, JSON.stringify(values))
|
|
||||||
|
if (query.SortBy) {
|
||||||
|
values.SortBy = query.SortBy;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (query.SortOrder) {
|
||||||
|
values.SortOrder = query.SortOrder;
|
||||||
|
}
|
||||||
|
|
||||||
|
userSettings.set(key, JSON.stringify(values));
|
||||||
},
|
},
|
||||||
saveViewSetting: function(key, value) {
|
saveViewSetting: function (key, value) {
|
||||||
userSettings.set(key + "-_view", value)
|
userSettings.set(key + "-_view", value);
|
||||||
},
|
},
|
||||||
getSavedView: function(key) {
|
getSavedView: function (key) {
|
||||||
return userSettings.get(key + "-_view")
|
return userSettings.get(key + "-_view");
|
||||||
},
|
},
|
||||||
showLayoutMenu: function(button, currentLayout, views) {
|
showLayoutMenu: function (button, currentLayout, views) {
|
||||||
var dispatchEvent = !0;
|
var dispatchEvent = true;
|
||||||
views || (dispatchEvent = !1, views = button.getAttribute("data-layouts"), views = views ? views.split(",") : ["List", "Poster", "PosterCard", "Thumb", "ThumbCard"]);
|
|
||||||
var menuItems = views.map(function(v) {
|
if (!views) {
|
||||||
|
dispatchEvent = false;
|
||||||
|
views = button.getAttribute("data-layouts");
|
||||||
|
views = views ? views.split(",") : ["List", "Poster", "PosterCard", "Thumb", "ThumbCard"];
|
||||||
|
}
|
||||||
|
|
||||||
|
var menuItems = views.map(function (v) {
|
||||||
return {
|
return {
|
||||||
name: Globalize.translate("Option" + v),
|
name: Globalize.translate("Option" + v),
|
||||||
id: v,
|
id: v,
|
||||||
selected: currentLayout == v
|
selected: currentLayout == v
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
require(["actionsheet"], function(actionsheet) {
|
|
||||||
|
require(["actionsheet"], function (actionsheet) {
|
||||||
actionsheet.show({
|
actionsheet.show({
|
||||||
items: menuItems,
|
items: menuItems,
|
||||||
positionTo: button,
|
positionTo: button,
|
||||||
callback: function(id) {
|
callback: function (id) {
|
||||||
button.dispatchEvent(new CustomEvent("layoutchange", {
|
button.dispatchEvent(new CustomEvent("layoutchange", {
|
||||||
detail: {
|
detail: {
|
||||||
viewStyle: id
|
viewStyle: id
|
||||||
},
|
},
|
||||||
bubbles: !0,
|
bubbles: true,
|
||||||
cancelable: !1
|
cancelable: false
|
||||||
})), dispatchEvent || window.$ && $(button).trigger("layoutchange", [id])
|
}));
|
||||||
|
|
||||||
|
if (!dispatchEvent) {
|
||||||
|
if (window.$) {
|
||||||
|
$(button).trigger("layoutchange", [id]);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
getQueryPagingHtml: function(options) {
|
getQueryPagingHtml: function (options) {
|
||||||
var startIndex = options.startIndex,
|
var startIndex = options.startIndex;
|
||||||
limit = options.limit,
|
var limit = options.limit;
|
||||||
totalRecordCount = options.totalRecordCount,
|
var totalRecordCount = options.totalRecordCount;
|
||||||
html = "",
|
var html = "";
|
||||||
recordsEnd = Math.min(startIndex + limit, totalRecordCount),
|
var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
|
||||||
showControls = limit < totalRecordCount;
|
var showControls = limit < totalRecordCount;
|
||||||
|
|
||||||
if (html += '<div class="listPaging">', showControls) {
|
if (html += '<div class="listPaging">', showControls) {
|
||||||
html += '<span style="vertical-align:middle;">';
|
html += '<span style="vertical-align:middle;">';
|
||||||
html += (totalRecordCount ? startIndex + 1 : 0) + "-" + recordsEnd + " of " + totalRecordCount, html += "</span>"
|
html += (totalRecordCount ? startIndex + 1 : 0) + "-" + recordsEnd + " of " + totalRecordCount;
|
||||||
|
html += "</span>";
|
||||||
}
|
}
|
||||||
return (showControls || options.viewButton || options.filterButton || options.sortButton || options.addLayoutButton) && (html += '<div style="display:inline-block;">', showControls && (html += '<button is="paper-icon-button-light" class="btnPreviousPage autoSize" ' + (startIndex ? "" : "disabled") + '><i class="md-icon"></i></button>', html += '<button is="paper-icon-button-light" class="btnNextPage autoSize" ' + (startIndex + limit >= totalRecordCount ? "disabled" : "") + '><i class="md-icon"></i></button>'), options.addLayoutButton && (html += '<button is="paper-icon-button-light" title="' + Globalize.translate("ButtonSelectView") + '" class="btnChangeLayout autoSize" data-layouts="' + (options.layouts || "") + '" onclick="LibraryBrowser.showLayoutMenu(this, \'' + (options.currentLayout || "") + '\');"><i class="md-icon"></i></button>'), options.sortButton && (html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + Globalize.translate("ButtonSort") + '"><i class="md-icon"></i></button>'), options.filterButton && (html += '<button is="paper-icon-button-light" class="btnFilter autoSize" title="' + Globalize.translate("ButtonFilter") + '"><i class="md-icon"></i></button>'), html += "</div>"), html += "</div>"
|
|
||||||
|
if (showControls || options.viewButton || options.filterButton || options.sortButton || options.addLayoutButton) {
|
||||||
|
html += '<div style="display:inline-block;">';
|
||||||
|
|
||||||
|
if (showControls) {
|
||||||
|
html += '<button is="paper-icon-button-light" class="btnPreviousPage autoSize" ' + (startIndex ? "" : "disabled") + '><i class="md-icon"></i></button>';
|
||||||
|
html += '<button is="paper-icon-button-light" class="btnNextPage autoSize" ' + (startIndex + limit >= totalRecordCount ? "disabled" : "") + '><i class="md-icon"></i></button>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.addLayoutButton) {
|
||||||
|
html += '<button is="paper-icon-button-light" title="' + Globalize.translate("ButtonSelectView") + '" class="btnChangeLayout autoSize" data-layouts="' + (options.layouts || "") + '" onclick="LibraryBrowser.showLayoutMenu(this, \'' + (options.currentLayout || "") + '\');"><i class="md-icon"></i></button>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.sortButton) {
|
||||||
|
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + Globalize.translate("ButtonSort") + '"><i class="md-icon"></i></button>';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.filterButton) {
|
||||||
|
html += '<button is="paper-icon-button-light" class="btnFilter autoSize" title="' + Globalize.translate("ButtonFilter") + '"><i class="md-icon"></i></button>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += "</div>";
|
||||||
|
}
|
||||||
|
|
||||||
|
return html += "</div>";
|
||||||
},
|
},
|
||||||
showSortMenu: function(options) {
|
showSortMenu: function (options) {
|
||||||
require(["dialogHelper", "emby-radio"], function(dialogHelper) {
|
require(["dialogHelper", "emby-radio"], function (dialogHelper) {
|
||||||
function onSortByChange() {
|
function onSortByChange() {
|
||||||
var newValue = this.value;
|
var newValue = this.value;
|
||||||
|
|
||||||
if (this.checked) {
|
if (this.checked) {
|
||||||
var changed = options.query.SortBy != newValue;
|
var changed = options.query.SortBy != newValue;
|
||||||
options.query.SortBy = newValue.replace("_", ","), options.query.StartIndex = 0, options.callback && changed && options.callback()
|
options.query.SortBy = newValue.replace("_", ",");
|
||||||
|
options.query.StartIndex = 0;
|
||||||
|
|
||||||
|
if (options.callback && changed) {
|
||||||
|
options.callback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onSortOrderChange() {
|
function onSortOrderChange() {
|
||||||
var newValue = this.value;
|
var newValue = this.value;
|
||||||
|
|
||||||
if (this.checked) {
|
if (this.checked) {
|
||||||
var changed = options.query.SortOrder != newValue;
|
var changed = options.query.SortOrder != newValue;
|
||||||
options.query.SortOrder = newValue, options.query.StartIndex = 0, options.callback && changed && options.callback()
|
options.query.SortOrder = newValue;
|
||||||
|
options.query.StartIndex = 0;
|
||||||
|
|
||||||
|
if (options.callback && changed) {
|
||||||
|
options.callback();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var dlg = dialogHelper.createDialog({
|
var dlg = dialogHelper.createDialog({
|
||||||
removeOnClose: !0,
|
removeOnClose: true,
|
||||||
modal: !1,
|
modal: false,
|
||||||
entryAnimationDuration: 160,
|
entryAnimationDuration: 160,
|
||||||
exitAnimationDuration: 200
|
exitAnimationDuration: 200
|
||||||
});
|
});
|
||||||
dlg.classList.add("ui-body-a"), dlg.classList.add("background-theme-a"), dlg.classList.add("formDialog");
|
dlg.classList.add("ui-body-a");
|
||||||
|
dlg.classList.add("background-theme-a");
|
||||||
|
dlg.classList.add("formDialog");
|
||||||
var html = "";
|
var html = "";
|
||||||
html += '<div style="margin:0;padding:1.25em 1.5em 1.5em;">', html += '<h2 style="margin:0 0 .5em;">', html += Globalize.translate("HeaderSortBy"), html += "</h2>";
|
html += '<div style="margin:0;padding:1.25em 1.5em 1.5em;">';
|
||||||
var i, length, isChecked;
|
html += '<h2 style="margin:0 0 .5em;">';
|
||||||
for (html += "<div>", i = 0, length = options.items.length; i < length; i++) {
|
html += Globalize.translate("HeaderSortBy");
|
||||||
var option = options.items[i],
|
html += "</h2>";
|
||||||
radioValue = option.id.replace(",", "_");
|
var i, length;
|
||||||
isChecked = (options.query.SortBy || "").replace(",", "_") == radioValue ? " checked" : "", html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortBy" data-id="' + option.id + '" value="' + radioValue + '" class="menuSortBy" ' + isChecked + " /><span>" + option.name + "</span></label>"
|
var isChecked;
|
||||||
|
html += '<div>';
|
||||||
|
for (i = 0, length = options.items.length; i < length; i++) {
|
||||||
|
var option = options.items[i];
|
||||||
|
var radioValue = option.id.replace(",", "_");
|
||||||
|
isChecked = (options.query.SortBy || "").replace(",", "_") == radioValue ? " checked" : "";
|
||||||
|
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortBy" data-id="' + option.id + '" value="' + radioValue + '" class="menuSortBy" ' + isChecked + " /><span>" + option.name + "</span></label>";
|
||||||
}
|
}
|
||||||
html += "</div>", html += '<h2 style="margin: 1em 0 .5em;">', html += Globalize.translate("HeaderSortOrder"), html += "</h2>", html += "<div>", isChecked = "Ascending" == options.query.SortOrder ? " checked" : "", html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Ascending" class="menuSortOrder" ' + isChecked + " /><span>" + Globalize.translate("OptionAscending") + "</span></label>", isChecked = "Descending" == options.query.SortOrder ? " checked" : "", html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Descending" class="menuSortOrder" ' + isChecked + " /><span>" + Globalize.translate("OptionDescending") + "</span></label>", html += "</div>", html += "</div>", dlg.innerHTML = html, dialogHelper.open(dlg);
|
|
||||||
|
html += "</div>";
|
||||||
|
html += '<h2 style="margin: 1em 0 .5em;">';
|
||||||
|
html += Globalize.translate("HeaderSortOrder");
|
||||||
|
html += "</h2>";
|
||||||
|
html += "<div>";
|
||||||
|
isChecked = "Ascending" == options.query.SortOrder ? " checked" : "";
|
||||||
|
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Ascending" class="menuSortOrder" ' + isChecked + " /><span>" + Globalize.translate("OptionAscending") + "</span></label>";
|
||||||
|
isChecked = "Descending" == options.query.SortOrder ? " checked" : "";
|
||||||
|
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Descending" class="menuSortOrder" ' + isChecked + " /><span>" + Globalize.translate("OptionDescending") + "</span></label>";
|
||||||
|
html += "</div>";
|
||||||
|
html += "</div>";
|
||||||
|
dlg.innerHTML = html;
|
||||||
|
dialogHelper.open(dlg);
|
||||||
var sortBys = dlg.querySelectorAll(".menuSortBy");
|
var sortBys = dlg.querySelectorAll(".menuSortBy");
|
||||||
for (i = 0, length = sortBys.length; i < length; i++) sortBys[i].addEventListener("change", onSortByChange);
|
|
||||||
|
for (i = 0, length = sortBys.length; i < length; i++) {
|
||||||
|
sortBys[i].addEventListener("change", onSortByChange);
|
||||||
|
}
|
||||||
|
|
||||||
var sortOrders = dlg.querySelectorAll(".menuSortOrder");
|
var sortOrders = dlg.querySelectorAll(".menuSortOrder");
|
||||||
for (i = 0, length = sortOrders.length; i < length; i++) sortOrders[i].addEventListener("change", onSortOrderChange)
|
|
||||||
})
|
for (i = 0, length = sortOrders.length; i < length; i++) {
|
||||||
|
sortOrders[i].addEventListener("change", onSortOrderChange);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
return window.LibraryBrowser = libraryBrowser, libraryBrowser
|
window.LibraryBrowser = libraryBrowser;
|
||||||
});
|
return libraryBrowser;
|
||||||
|
});
|
||||||
|
|
|
@ -105,6 +105,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
|
|
||||||
function bindMenuEvents() {
|
function bindMenuEvents() {
|
||||||
mainDrawerButton = document.querySelector(".mainDrawerButton");
|
mainDrawerButton = document.querySelector(".mainDrawerButton");
|
||||||
|
|
||||||
if (mainDrawerButton) {
|
if (mainDrawerButton) {
|
||||||
mainDrawerButton.addEventListener("click", toggleMainDrawer);
|
mainDrawerButton.addEventListener("click", toggleMainDrawer);
|
||||||
}
|
}
|
||||||
|
@ -198,18 +199,21 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
html += '<h3 class="sidebarHeader">';
|
html += '<h3 class="sidebarHeader">';
|
||||||
html += globalize.translate("HeaderUser");
|
html += globalize.translate("HeaderUser");
|
||||||
html += "</h3>";
|
html += "</h3>";
|
||||||
|
|
||||||
if (appHost.supports("multiserver")) {
|
if (appHost.supports("multiserver")) {
|
||||||
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder" data-itemid="selectserver" href="selectserver.html?showuser=1"><i class="md-icon navMenuOptionIcon">wifi</i><span class="navMenuOptionText">' + globalize.translate("ButtonSelectServer") + "</span></a>";
|
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder" data-itemid="selectserver" href="selectserver.html?showuser=1"><i class="md-icon navMenuOptionIcon">wifi</i><span class="navMenuOptionText">' + globalize.translate("ButtonSelectServer") + "</span></a>";
|
||||||
}
|
}
|
||||||
|
|
||||||
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder btnLogout" data-itemid="logout" href="#"><i class="md-icon navMenuOptionIcon">exit_to_app</i><span class="navMenuOptionText">' + globalize.translate("ButtonSignOut") + "</span></a>";
|
html += '<a is="emby-linkbutton" class="navMenuOption lnkMediaFolder btnLogout" data-itemid="logout" href="#"><i class="md-icon navMenuOptionIcon">exit_to_app</i><span class="navMenuOptionText">' + globalize.translate("ButtonSignOut") + "</span></a>";
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// add buttons to navigation drawer
|
// add buttons to navigation drawer
|
||||||
navDrawerScrollContainer.innerHTML = html;
|
navDrawerScrollContainer.innerHTML = html;
|
||||||
|
|
||||||
// bind logout button click to method
|
// bind logout button click to method
|
||||||
var btnLogout = navDrawerScrollContainer.querySelector(".btnLogout");
|
var btnLogout = navDrawerScrollContainer.querySelector(".btnLogout");
|
||||||
|
|
||||||
if (btnLogout) {
|
if (btnLogout) {
|
||||||
btnLogout.addEventListener("click", onLogoutClick);
|
btnLogout.addEventListener("click", onLogoutClick);
|
||||||
}
|
}
|
||||||
|
@ -250,6 +254,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
pageUrls = pageUrls.split("|");
|
pageUrls = pageUrls.split("|");
|
||||||
selected = pageUrls.filter(isUrlInCurrentView).length > 0;
|
selected = pageUrls.filter(isUrlInCurrentView).length > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected) {
|
if (selected) {
|
||||||
link.classList.add("navMenuOption-selected");
|
link.classList.add("navMenuOption-selected");
|
||||||
var title = "";
|
var title = "";
|
||||||
|
@ -377,6 +382,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
function addPluginPagesToMainMenu(links, pluginItems, section) {
|
function addPluginPagesToMainMenu(links, pluginItems, section) {
|
||||||
for (var i = 0, length = pluginItems.length; i < length; i++) {
|
for (var i = 0, length = pluginItems.length; i < length; i++) {
|
||||||
var pluginItem = pluginItems[i];
|
var pluginItem = pluginItems[i];
|
||||||
|
|
||||||
if (pluginItem.EnableInMainMenu && pluginItem.MenuSection === section) {
|
if (pluginItem.EnableInMainMenu && pluginItem.MenuSection === section) {
|
||||||
links.push({
|
links.push({
|
||||||
name: pluginItem.DisplayName,
|
name: pluginItem.DisplayName,
|
||||||
|
@ -416,15 +422,14 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
return getToolsMenuLinks(apiClient).then(function (items) {
|
return getToolsMenuLinks(apiClient).then(function (items) {
|
||||||
var item;
|
var item;
|
||||||
var menuHtml = "";
|
var menuHtml = "";
|
||||||
|
|
||||||
menuHtml += '<div class="drawerContent">';
|
menuHtml += '<div class="drawerContent">';
|
||||||
|
|
||||||
for (var i = 0; i < items.length; i++) {
|
for (var i = 0; i < items.length; i++) {
|
||||||
item = items[i];
|
item = items[i];
|
||||||
|
|
||||||
if (item.href) {
|
if (item.href) {
|
||||||
menuHtml += getToolsLinkHtml(item);
|
menuHtml += getToolsLinkHtml(item);
|
||||||
}
|
} else if (item.name) {
|
||||||
else if (item.name) {
|
|
||||||
menuHtml += '<h3 class="sidebarHeader">';
|
menuHtml += '<h3 class="sidebarHeader">';
|
||||||
menuHtml += item.name;
|
menuHtml += item.name;
|
||||||
menuHtml += "</h3>";
|
menuHtml += "</h3>";
|
||||||
|
@ -460,8 +465,8 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
|
|
||||||
for (var i = 0, length = items.length; i < length; i++) {
|
for (var i = 0, length = items.length; i < length; i++) {
|
||||||
var view = items[i];
|
var view = items[i];
|
||||||
|
|
||||||
list.push(view);
|
list.push(view);
|
||||||
|
|
||||||
if ("livetv" == view.CollectionType) {
|
if ("livetv" == view.CollectionType) {
|
||||||
view.ImageTags = {};
|
view.ImageTags = {};
|
||||||
view.icon = "live_tv";
|
view.icon = "live_tv";
|
||||||
|
@ -484,8 +489,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
if (elem) {
|
if (elem) {
|
||||||
if (show) {
|
if (show) {
|
||||||
elem.classList.remove("hide");
|
elem.classList.remove("hide");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
elem.classList.add("hide");
|
elem.classList.add("hide");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -503,15 +507,13 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
// FIXME: Potentially the same as above
|
// FIXME: Potentially the same as above
|
||||||
if (user.Policy.EnableContentDownloading) {
|
if (user.Policy.EnableContentDownloading) {
|
||||||
showBySelector(".lnkSyncToOtherDevices", true);
|
showBySelector(".lnkSyncToOtherDevices", true);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
showBySelector(".lnkSyncToOtherDevices", false);
|
showBySelector(".lnkSyncToOtherDevices", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user.Policy.EnableContentDownloading && appHost.supports("sync")) {
|
if (user.Policy.EnableContentDownloading && appHost.supports("sync")) {
|
||||||
showBySelector(".libraryMenuDownloads", true);
|
showBySelector(".libraryMenuDownloads", true);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
showBySelector(".libraryMenuDownloads", false);
|
showBySelector(".libraryMenuDownloads", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -529,9 +531,11 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
html += items.map(function (i) {
|
html += items.map(function (i) {
|
||||||
var icon = i.icon || imageHelper.getLibraryIcon(i.CollectionType);
|
var icon = i.icon || imageHelper.getLibraryIcon(i.CollectionType);
|
||||||
var itemId = i.Id;
|
var itemId = i.Id;
|
||||||
|
|
||||||
if (i.onclick) {
|
if (i.onclick) {
|
||||||
i.onclick;
|
i.onclick;
|
||||||
}
|
}
|
||||||
|
|
||||||
return '<a is="emby-linkbutton" data-itemid="' + itemId + '" class="lnkMediaFolder navMenuOption" href="' + getItemHref(i, i.CollectionType) + '"><i class="md-icon navMenuOptionIcon">' + icon + '</i><span class="sectionName navMenuOptionText">' + i.Name + "</span></a>";
|
return '<a is="emby-linkbutton" data-itemid="' + itemId + '" class="lnkMediaFolder navMenuOption" href="' + getItemHref(i, i.CollectionType) + '"><i class="md-icon navMenuOptionIcon">' + icon + '</i><span class="sectionName navMenuOptionText">' + i.Name + "</span></a>";
|
||||||
}).join("");
|
}).join("");
|
||||||
libraryMenuOptions.innerHTML = html;
|
libraryMenuOptions.innerHTML = html;
|
||||||
|
@ -592,23 +596,17 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
|
|
||||||
if (isChannelsPage && "channels" === itemId) {
|
if (isChannelsPage && "channels" === itemId) {
|
||||||
lnkMediaFolder.classList.add("navMenuOption-selected");
|
lnkMediaFolder.classList.add("navMenuOption-selected");
|
||||||
}
|
} else if (isLiveTvPage && "livetv" === itemId) {
|
||||||
else if (isLiveTvPage && "livetv" === itemId) {
|
|
||||||
lnkMediaFolder.classList.add("navMenuOption-selected");
|
lnkMediaFolder.classList.add("navMenuOption-selected");
|
||||||
}
|
} else if (isEditorPage && "editor" === itemId) {
|
||||||
else if (isEditorPage && "editor" === itemId) {
|
|
||||||
lnkMediaFolder.classList.add("navMenuOption-selected");
|
lnkMediaFolder.classList.add("navMenuOption-selected");
|
||||||
}
|
} else if (isMySyncPage && "manageoffline" === itemId && -1 != window.location.href.toString().indexOf("mode=download")) {
|
||||||
else if (isMySyncPage && "manageoffline" === itemId && -1 != window.location.href.toString().indexOf("mode=download")) {
|
|
||||||
lnkMediaFolder.classList.add("navMenuOption-selected");
|
lnkMediaFolder.classList.add("navMenuOption-selected");
|
||||||
}
|
} else if (isMySyncPage && "syncotherdevices" === itemId && -1 == window.location.href.toString().indexOf("mode=download")) {
|
||||||
else if (isMySyncPage && "syncotherdevices" === itemId && -1 == window.location.href.toString().indexOf("mode=download")) {
|
|
||||||
lnkMediaFolder.classList.add("navMenuOption-selected");
|
lnkMediaFolder.classList.add("navMenuOption-selected");
|
||||||
}
|
} else if (id && itemId == id) {
|
||||||
else if (id && itemId == id) {
|
|
||||||
lnkMediaFolder.classList.add("navMenuOption-selected");
|
lnkMediaFolder.classList.add("navMenuOption-selected");
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
lnkMediaFolder.classList.remove("navMenuOption-selected");
|
lnkMediaFolder.classList.remove("navMenuOption-selected");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -667,8 +665,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
|
|
||||||
if (title) {
|
if (title) {
|
||||||
LibraryMenu.setTitle(title);
|
LibraryMenu.setTitle(title);
|
||||||
}
|
} else if (page.classList.contains("standalonePage")) {
|
||||||
else if (page.classList.contains("standalonePage")) {
|
|
||||||
LibraryMenu.setDefaultTitle();
|
LibraryMenu.setDefaultTitle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -697,6 +694,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
function refreshLibraryDrawer(user) {
|
function refreshLibraryDrawer(user) {
|
||||||
loadNavDrawer();
|
loadNavDrawer();
|
||||||
currentDrawerType = "library";
|
currentDrawerType = "library";
|
||||||
|
|
||||||
if (user) {
|
if (user) {
|
||||||
Promise.resolve(user);
|
Promise.resolve(user);
|
||||||
} else {
|
} else {
|
||||||
|
@ -729,9 +727,11 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
require(["navdrawer"], function (navdrawer) {
|
require(["navdrawer"], function (navdrawer) {
|
||||||
navDrawerInstance = new navdrawer(getNavDrawerOptions());
|
navDrawerInstance = new navdrawer(getNavDrawerOptions());
|
||||||
|
|
||||||
if (!layoutManager.tv) {
|
if (!layoutManager.tv) {
|
||||||
navDrawerElement.classList.remove("hide");
|
navDrawerElement.classList.remove("hide");
|
||||||
}
|
}
|
||||||
|
|
||||||
resolve(navDrawerInstance);
|
resolve(navDrawerInstance);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,57 +1,95 @@
|
||||||
define(["layoutManager", "datetime", "cardBuilder", "apphost"], function(layoutManager, datetime, cardBuilder, appHost) {
|
define(["layoutManager", "datetime", "cardBuilder", "apphost"], function (layoutManager, datetime, cardBuilder, appHost) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return !layoutManager.desktop
|
return !layoutManager.desktop;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getBackdropShape() {
|
function getBackdropShape() {
|
||||||
return enableScrollX() ? "overflowBackdrop" : "backdrop"
|
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTimersHtml(timers, options) {
|
function getTimersHtml(timers, options) {
|
||||||
options = options || {};
|
options = options || {};
|
||||||
var i, length, items = timers.map(function(t) {
|
var i;
|
||||||
return t.Type = "Timer", t
|
var length;
|
||||||
}),
|
var items = timers.map(function (t) {
|
||||||
groups = [],
|
t.Type = "Timer";
|
||||||
currentGroupName = "",
|
return t;
|
||||||
currentGroup = [];
|
});
|
||||||
|
var groups = [];
|
||||||
|
var currentGroupName = "";
|
||||||
|
var currentGroup = [];
|
||||||
|
|
||||||
for (i = 0, length = items.length; i < length; i++) {
|
for (i = 0, length = items.length; i < length; i++) {
|
||||||
var item = items[i],
|
var item = items[i];
|
||||||
dateText = "";
|
var dateText = "";
|
||||||
if (!1 !== options.indexByDate && item.StartDate) try {
|
|
||||||
var premiereDate = datetime.parseISO8601Date(item.StartDate, !0);
|
if (options.indexByDate !== false && item.StartDate) {
|
||||||
dateText = datetime.toLocaleDateString(premiereDate, {
|
try {
|
||||||
weekday: "long",
|
var premiereDate = datetime.parseISO8601Date(item.StartDate, true);
|
||||||
month: "short",
|
dateText = datetime.toLocaleDateString(premiereDate, {
|
||||||
day: "numeric"
|
weekday: "long",
|
||||||
})
|
month: "short",
|
||||||
} catch (err) {}
|
day: "numeric"
|
||||||
dateText != currentGroupName ? (currentGroup.length && groups.push({
|
});
|
||||||
|
} catch (err) {
|
||||||
|
console.log("Error parsing premiereDate:" + item.StartDate + "; error: " + err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dateText != currentGroupName) {
|
||||||
|
if (currentGroup.length) {
|
||||||
|
groups.push({
|
||||||
|
name: currentGroupName,
|
||||||
|
items: currentGroup
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
currentGroupName = dateText;
|
||||||
|
currentGroup = [item];
|
||||||
|
} else {
|
||||||
|
currentGroup.push(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentGroup.length) {
|
||||||
|
groups.push({
|
||||||
name: currentGroupName,
|
name: currentGroupName,
|
||||||
items: currentGroup
|
items: currentGroup
|
||||||
}), currentGroupName = dateText, currentGroup = [item]) : currentGroup.push(item)
|
});
|
||||||
}
|
}
|
||||||
currentGroup.length && groups.push({
|
|
||||||
name: currentGroupName,
|
|
||||||
items: currentGroup
|
|
||||||
});
|
|
||||||
var html = "";
|
var html = "";
|
||||||
|
|
||||||
for (i = 0, length = groups.length; i < length; i++) {
|
for (i = 0, length = groups.length; i < length; i++) {
|
||||||
var group = groups[i],
|
var group = groups[i];
|
||||||
supportsImageAnalysis = appHost.supports("imageanalysis"),
|
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||||
cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
|
var cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
|
||||||
if (cardLayout = !0, group.name && (html += '<div class="verticalSection">', html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + "</h2>"), enableScrollX()) {
|
|
||||||
|
cardLayout = true;
|
||||||
|
if (group.name) {
|
||||||
|
html += '<div class="verticalSection">';
|
||||||
|
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + "</h2>";
|
||||||
|
}
|
||||||
|
if (enableScrollX()) {
|
||||||
var scrollXClass = "scrollX hiddenScrollX";
|
var scrollXClass = "scrollX hiddenScrollX";
|
||||||
layoutManager.tv && (scrollXClass += " smoothScrollX"), html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' padded-left padded-right">'
|
|
||||||
} else html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
if (layoutManager.tv) {
|
||||||
|
scrollXClass += " smoothScrollX";
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' padded-left padded-right">';
|
||||||
|
} else {
|
||||||
|
html += '<div is="emby-itemscontainer" class="itemsContainer vertical-wrap padded-left padded-right">';
|
||||||
|
}
|
||||||
|
|
||||||
html += cardBuilder.getCardsHtml({
|
html += cardBuilder.getCardsHtml({
|
||||||
items: group.items,
|
items: group.items,
|
||||||
shape: cardLayout ? getBackdropShape() : enableScrollX() ? "autoOverflow" : "autoVertical",
|
shape: cardLayout ? getBackdropShape() : enableScrollX() ? "autoOverflow" : "autoVertical",
|
||||||
showParentTitleOrTitle: !0,
|
showParentTitleOrTitle: true,
|
||||||
showAirTime: !0,
|
showAirTime: true,
|
||||||
showAirEndTime: !0,
|
showAirEndTime: true,
|
||||||
showChannelName: !cardLayout,
|
showChannelName: !cardLayout,
|
||||||
cardLayout: cardLayout,
|
cardLayout: cardLayout,
|
||||||
centerText: !cardLayout,
|
centerText: !cardLayout,
|
||||||
|
@ -59,15 +97,22 @@ define(["layoutManager", "datetime", "cardBuilder", "apphost"], function(layoutM
|
||||||
cardFooterAside: "none",
|
cardFooterAside: "none",
|
||||||
preferThumb: !!cardLayout || "auto",
|
preferThumb: !!cardLayout || "auto",
|
||||||
defaultShape: cardLayout ? null : "portrait",
|
defaultShape: cardLayout ? null : "portrait",
|
||||||
coverImage: !0,
|
coverImage: true,
|
||||||
allowBottomPadding: !1,
|
allowBottomPadding: false,
|
||||||
overlayText: !1,
|
overlayText: false,
|
||||||
showChannelLogo: cardLayout
|
showChannelLogo: cardLayout
|
||||||
}), html += "</div>", group.name && (html += "</div>")
|
});
|
||||||
|
html += "</div>";
|
||||||
|
|
||||||
|
if (group.name) {
|
||||||
|
html += "</div>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return Promise.resolve(html)
|
|
||||||
|
return Promise.resolve(html);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.LiveTvHelpers = {
|
window.LiveTvHelpers = {
|
||||||
getTimersHtml: getTimersHtml
|
getTimersHtml: getTimersHtml
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,39 +1,50 @@
|
||||||
define(["listView"], function(listView) {
|
define(["listView"], function (listView) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function getFetchPlaylistItemsFn(itemId) {
|
function getFetchPlaylistItemsFn(itemId) {
|
||||||
return function() {
|
return function () {
|
||||||
var query = {
|
var query = {
|
||||||
Fields: "PrimaryImageAspectRatio,UserData",
|
Fields: "PrimaryImageAspectRatio,UserData",
|
||||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||||
UserId: ApiClient.getCurrentUserId()
|
UserId: ApiClient.getCurrentUserId()
|
||||||
};
|
};
|
||||||
return ApiClient.getJSON(ApiClient.getUrl("Playlists/" + itemId + "/Items", query))
|
return ApiClient.getJSON(ApiClient.getUrl("Playlists/" + itemId + "/Items", query));
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getItemsHtmlFn(itemId) {
|
function getItemsHtmlFn(itemId) {
|
||||||
return function(items) {
|
return function (items) {
|
||||||
return listView.getListViewHtml({
|
return listView.getListViewHtml({
|
||||||
items: items,
|
items: items,
|
||||||
showIndex: !1,
|
showIndex: false,
|
||||||
showRemoveFromPlaylist: !0,
|
showRemoveFromPlaylist: true,
|
||||||
playFromHere: !0,
|
playFromHere: true,
|
||||||
action: "playallfromhere",
|
action: "playallfromhere",
|
||||||
smallIcon: !0,
|
smallIcon: true,
|
||||||
dragHandle: !0,
|
dragHandle: true,
|
||||||
playlistId: itemId
|
playlistId: itemId
|
||||||
})
|
});
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
function init(page, item) {
|
function init(page, item) {
|
||||||
var elem = page.querySelector("#childrenContent .itemsContainer");
|
var elem = page.querySelector("#childrenContent .itemsContainer");
|
||||||
elem.classList.add("vertical-list"), elem.classList.remove("vertical-wrap"), elem.enableDragReordering(!0), elem.fetchData = getFetchPlaylistItemsFn(item.Id), elem.getItemsHtml = getItemsHtmlFn(item.Id)
|
elem.classList.add("vertical-list");
|
||||||
|
elem.classList.remove("vertical-wrap");
|
||||||
|
elem.enableDragReordering(true);
|
||||||
|
elem.fetchData = getFetchPlaylistItemsFn(item.Id);
|
||||||
|
elem.getItemsHtml = getItemsHtmlFn(item.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
window.PlaylistViewer = {
|
window.PlaylistViewer = {
|
||||||
render: function(page, item) {
|
render: function (page, item) {
|
||||||
page.playlistInit || (page.playlistInit = !0, init(page, item)), page.querySelector("#childrenContent").classList.add("verticalSection-extrabottompadding"), page.querySelector("#childrenContent .itemsContainer").refreshItems()
|
if (!page.playlistInit) {
|
||||||
|
page.playlistInit = true;
|
||||||
|
init(page, item);
|
||||||
|
}
|
||||||
|
|
||||||
|
page.querySelector("#childrenContent").classList.add("verticalSection-extrabottompadding");
|
||||||
|
page.querySelector("#childrenContent .itemsContainer").refreshItems();
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,124 +1,186 @@
|
||||||
define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "emby-itemscontainer"], function(loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader) {
|
define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "emby-itemscontainer"], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader) {
|
||||||
"use strict";
|
"use strict";
|
||||||
return function(view, params) {
|
|
||||||
|
return function (view, params) {
|
||||||
function getPageData(context) {
|
function getPageData(context) {
|
||||||
var key = getSavedQueryKey(context),
|
var key = getSavedQueryKey(context);
|
||||||
pageData = data[key];
|
var pageData = data[key];
|
||||||
return pageData || (pageData = data[key] = {
|
|
||||||
query: {
|
if (!pageData) {
|
||||||
SortBy: "SortName",
|
pageData = data[key] = {
|
||||||
SortOrder: "Ascending",
|
query: {
|
||||||
IncludeItemTypes: "Playlist",
|
SortBy: "SortName",
|
||||||
Recursive: !0,
|
SortOrder: "Ascending",
|
||||||
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete",
|
IncludeItemTypes: "Playlist",
|
||||||
StartIndex: 0,
|
Recursive: true,
|
||||||
Limit: 100
|
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete",
|
||||||
},
|
StartIndex: 0,
|
||||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
Limit: 100
|
||||||
}, pageData.query.ParentId = libraryMenu.getTopParentId(), libraryBrowser.loadSavedQueryValues(key, pageData.query)), pageData
|
},
|
||||||
|
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||||
|
};
|
||||||
|
pageData.query.ParentId = libraryMenu.getTopParentId();
|
||||||
|
libraryBrowser.loadSavedQueryValues(key, pageData.query);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pageData;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getQuery(context) {
|
function getQuery(context) {
|
||||||
return getPageData(context).query
|
return getPageData(context).query;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getSavedQueryKey(context) {
|
function getSavedQueryKey(context) {
|
||||||
return context.savedQueryKey || (context.savedQueryKey = libraryBrowser.getSavedQueryKey()), context.savedQueryKey
|
if (!context.savedQueryKey) {
|
||||||
|
context.savedQueryKey = libraryBrowser.getSavedQueryKey();
|
||||||
|
}
|
||||||
|
|
||||||
|
return context.savedQueryKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
function showLoadingMessage() {
|
function showLoadingMessage() {
|
||||||
loading.show()
|
loading.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
function hideLoadingMessage() {
|
function hideLoadingMessage() {
|
||||||
loading.hide()
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function onViewStyleChange() {
|
function onViewStyleChange() {
|
||||||
var viewStyle = getPageData(view).view,
|
var viewStyle = getPageData(view).view;
|
||||||
itemsContainer = view.querySelector(".itemsContainer");
|
var itemsContainer = view.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 = ""
|
|
||||||
|
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() {
|
function reloadItems() {
|
||||||
showLoadingMessage();
|
showLoadingMessage();
|
||||||
var query = getQuery(view),
|
var query = getQuery(view);
|
||||||
promise1 = ApiClient.getItems(Dashboard.getCurrentUserId(), query),
|
var promise1 = ApiClient.getItems(Dashboard.getCurrentUserId(), query);
|
||||||
promise2 = Dashboard.getCurrentUser();
|
var promise2 = Dashboard.getCurrentUser();
|
||||||
Promise.all([promise1, promise2]).then(function(responses) {
|
Promise.all([promise1, promise2]).then(function (responses) {
|
||||||
var result = responses[0];
|
var result = responses[0];
|
||||||
responses[1];
|
responses[1];
|
||||||
window.scrollTo(0, 0);
|
window.scrollTo(0, 0);
|
||||||
var html = "",
|
var html = "";
|
||||||
viewStyle = getPageData(view).view;
|
var viewStyle = getPageData(view).view;
|
||||||
view.querySelector(".listTopPaging").innerHTML = libraryBrowser.getQueryPagingHtml({
|
view.querySelector(".listTopPaging").innerHTML = libraryBrowser.getQueryPagingHtml({
|
||||||
startIndex: query.StartIndex,
|
startIndex: query.StartIndex,
|
||||||
limit: query.Limit,
|
limit: query.Limit,
|
||||||
totalRecordCount: result.TotalRecordCount,
|
totalRecordCount: result.TotalRecordCount,
|
||||||
viewButton: !1,
|
viewButton: false,
|
||||||
showLimit: !1,
|
showLimit: false,
|
||||||
updatePageSizeSetting: !1,
|
updatePageSizeSetting: false,
|
||||||
addLayoutButton: !0,
|
addLayoutButton: true,
|
||||||
layouts: "List,Poster,PosterCard,Thumb,ThumbCard",
|
layouts: "List,Poster,PosterCard,Thumb,ThumbCard",
|
||||||
currentLayout: viewStyle
|
currentLayout: viewStyle
|
||||||
}), result.TotalRecordCount ? (html = "List" == viewStyle ? listView.getListViewHtml({
|
});
|
||||||
items: result.Items,
|
|
||||||
sortBy: query.SortBy
|
if (result.TotalRecordCount) {
|
||||||
}) : "PosterCard" == viewStyle ? cardBuilder.getCardsHtml({
|
if (viewStyle == "List") {
|
||||||
items: result.Items,
|
html = listView.getListViewHtml({
|
||||||
shape: "square",
|
items: result.Items,
|
||||||
coverImage: !0,
|
sortBy: query.SortBy
|
||||||
showTitle: !0,
|
});
|
||||||
cardLayout: !0
|
} else if (viewStyle == "PosterCard") {
|
||||||
}) : "Thumb" == viewStyle ? cardBuilder.getCardsHtml({
|
html = cardBuilder.getCardsHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: "backdrop",
|
shape: "square",
|
||||||
showTitle: !0,
|
coverImage: true,
|
||||||
centerText: !0,
|
showTitle: true,
|
||||||
preferThumb: !0,
|
cardLayout: true
|
||||||
overlayPlayButton: !0
|
});
|
||||||
}) : "ThumbCard" == viewStyle ? cardBuilder.getCardsHtml({
|
} else if (viewStyle == "Thumb") {
|
||||||
items: result.Items,
|
html = cardBuilder.getCardsHtml({
|
||||||
shape: "backdrop",
|
items: result.Items,
|
||||||
showTitle: !0,
|
shape: "backdrop",
|
||||||
preferThumb: !0,
|
showTitle: true,
|
||||||
cardLayout: !0
|
centerText: true,
|
||||||
}) : cardBuilder.getCardsHtml({
|
preferThumb: true,
|
||||||
items: result.Items,
|
overlayPlayButton: true
|
||||||
shape: "square",
|
});
|
||||||
showTitle: !0,
|
} else if (viewStyle == "ThumbCard") {
|
||||||
coverImage: !0,
|
html = cardBuilder.getCardsHtml({
|
||||||
centerText: !0,
|
items: result.Items,
|
||||||
overlayPlayButton: !0
|
shape: "backdrop",
|
||||||
}), view.querySelector(".noItemsMessage").classList.add("hide")) : view.querySelector(".noItemsMessage").classList.remove("hide");
|
showTitle: true,
|
||||||
|
preferThumb: true,
|
||||||
|
cardLayout: true
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
html = cardBuilder.getCardsHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "square",
|
||||||
|
showTitle: true,
|
||||||
|
coverImage: true,
|
||||||
|
centerText: true,
|
||||||
|
overlayPlayButton: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
view.querySelector(".noItemsMessage").classList.add("hide");
|
||||||
|
} else {
|
||||||
|
view.querySelector(".noItemsMessage").classList.remove("hide");
|
||||||
|
}
|
||||||
|
|
||||||
var elem = view.querySelector(".itemsContainer");
|
var elem = view.querySelector(".itemsContainer");
|
||||||
elem.innerHTML = html, imageLoader.lazyChildren(elem);
|
elem.innerHTML = html;
|
||||||
|
imageLoader.lazyChildren(elem);
|
||||||
var btnNextPage = view.querySelector(".btnNextPage");
|
var btnNextPage = view.querySelector(".btnNextPage");
|
||||||
btnNextPage && btnNextPage.addEventListener("click", function() {
|
|
||||||
query.StartIndex += query.Limit, reloadItems()
|
if (btnNextPage) {
|
||||||
});
|
btnNextPage.addEventListener("click", function () {
|
||||||
|
query.StartIndex += query.Limit;
|
||||||
|
reloadItems();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var btnPreviousPage = view.querySelector(".btnPreviousPage");
|
var btnPreviousPage = view.querySelector(".btnPreviousPage");
|
||||||
btnPreviousPage && btnPreviousPage.addEventListener("click", function() {
|
|
||||||
query.StartIndex -= query.Limit, reloadItems()
|
if (btnPreviousPage) {
|
||||||
});
|
btnPreviousPage.addEventListener("click", function () {
|
||||||
|
query.StartIndex -= query.Limit;
|
||||||
|
reloadItems();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var btnChangeLayout = view.querySelector(".btnChangeLayout");
|
var btnChangeLayout = view.querySelector(".btnChangeLayout");
|
||||||
btnChangeLayout && btnChangeLayout.addEventListener("layoutchange", function(e) {
|
|
||||||
var layout = e.detail.viewStyle;
|
if (btnChangeLayout) {
|
||||||
getPageData(view).view = layout, libraryBrowser.saveViewSetting(getSavedQueryKey(view), layout), onViewStyleChange(), reloadItems()
|
btnChangeLayout.addEventListener("layoutchange", function (e) {
|
||||||
}), libraryBrowser.saveQueryValues(getSavedQueryKey(view), query), hideLoadingMessage()
|
var layout = e.detail.viewStyle;
|
||||||
})
|
getPageData(view).view = layout;
|
||||||
|
libraryBrowser.saveViewSetting(getSavedQueryKey(view), layout);
|
||||||
|
onViewStyleChange();
|
||||||
|
reloadItems();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
libraryBrowser.saveQueryValues(getSavedQueryKey(view), query);
|
||||||
|
hideLoadingMessage();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var data = {};
|
var data = {};
|
||||||
view.addEventListener("viewbeforeshow", function() {
|
view.addEventListener("viewbeforeshow", function () {
|
||||||
reloadItems()
|
reloadItems();
|
||||||
}), view.querySelector(".btnNewPlaylist").addEventListener("click", function() {
|
});
|
||||||
require(["playlistEditor"], function(playlistEditor) {
|
view.querySelector(".btnNewPlaylist").addEventListener("click", function () {
|
||||||
|
require(["playlistEditor"], function (playlistEditor) {
|
||||||
var serverId = ApiClient.serverInfo().Id;
|
var serverId = ApiClient.serverInfo().Id;
|
||||||
(new playlistEditor).show({
|
new playlistEditor().show({
|
||||||
items: [],
|
items: [],
|
||||||
serverId: serverId
|
serverId: serverId
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
}), onViewStyleChange()
|
});
|
||||||
}
|
onViewStyleChange();
|
||||||
});
|
};
|
||||||
|
});
|
||||||
|
|
|
@ -1,30 +1,54 @@
|
||||||
define(["searchFields", "searchResults", "events"], function(SearchFields, SearchResults, events) {
|
define(["searchFields", "searchResults", "events"], function (SearchFields, SearchResults, events) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function init(instance, tabContent, options) {
|
function init(instance, tabContent, options) {
|
||||||
tabContent.innerHTML = '<div class="padded-left padded-right searchFields"></div><div class="searchResults padded-top" style="padding-top:1.5em;"></div>', instance.searchFields = new SearchFields({
|
tabContent.innerHTML = '<div class="padded-left padded-right searchFields"></div><div class="searchResults padded-top" style="padding-top:1.5em;"></div>';
|
||||||
|
instance.searchFields = new SearchFields({
|
||||||
element: tabContent.querySelector(".searchFields")
|
element: tabContent.querySelector(".searchFields")
|
||||||
}), instance.searchResults = new SearchResults({
|
});
|
||||||
|
instance.searchResults = new SearchResults({
|
||||||
element: tabContent.querySelector(".searchResults"),
|
element: tabContent.querySelector(".searchResults"),
|
||||||
serverId: ApiClient.serverId(),
|
serverId: ApiClient.serverId(),
|
||||||
parentId: options.parentId,
|
parentId: options.parentId,
|
||||||
collectionType: options.collectionType
|
collectionType: options.collectionType
|
||||||
}), events.on(instance.searchFields, "search", function(e, value) {
|
});
|
||||||
instance.searchResults.search(value)
|
events.on(instance.searchFields, "search", function (e, value) {
|
||||||
})
|
instance.searchResults.search(value);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function SearchTab(view, tabContent, options) {
|
function SearchTab(view, tabContent, options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
options = options || {}, init(this, tabContent, options), self.preRender = function() {}, self.renderTab = function() {
|
options = options || {};
|
||||||
|
init(this, tabContent, options);
|
||||||
|
|
||||||
|
self.preRender = function () {};
|
||||||
|
|
||||||
|
self.renderTab = function () {
|
||||||
var searchFields = this.searchFields;
|
var searchFields = this.searchFields;
|
||||||
searchFields && searchFields.focus()
|
|
||||||
}
|
if (searchFields) {
|
||||||
|
searchFields.focus();
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
return SearchTab.prototype.destroy = function() {
|
|
||||||
|
SearchTab.prototype.destroy = function () {
|
||||||
var searchFields = this.searchFields;
|
var searchFields = this.searchFields;
|
||||||
searchFields && searchFields.destroy(), this.searchFields = null;
|
|
||||||
|
if (searchFields) {
|
||||||
|
searchFields.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchFields = null;
|
||||||
var searchResults = this.searchResults;
|
var searchResults = this.searchResults;
|
||||||
searchResults && searchResults.destroy(), this.searchResults = null
|
|
||||||
}, SearchTab
|
if (searchResults) {
|
||||||
});
|
searchResults.destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.searchResults = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
return SearchTab;
|
||||||
|
});
|
||||||
|
|
|
@ -1,48 +1,119 @@
|
||||||
define(["events", "userSettings", "serverNotifications", "connectionManager", "emby-button"], function(events, userSettings, serverNotifications, connectionManager) {
|
define(["events", "userSettings", "serverNotifications", "connectionManager", "emby-button"], function (events, userSettings, serverNotifications, connectionManager) {
|
||||||
"use strict";
|
"use strict";
|
||||||
return function(options) {
|
|
||||||
|
return function (options) {
|
||||||
function pollTasks() {
|
function pollTasks() {
|
||||||
connectionManager.getApiClient(serverId).getScheduledTasks({
|
connectionManager.getApiClient(serverId).getScheduledTasks({
|
||||||
IsEnabled: !0
|
IsEnabled: true
|
||||||
}).then(updateTasks)
|
}).then(updateTasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateTasks(tasks) {
|
function updateTasks(tasks) {
|
||||||
var task = tasks.filter(function(t) {
|
var task = tasks.filter(function (t) {
|
||||||
return t.Key == options.taskKey
|
return t.Key == options.taskKey;
|
||||||
})[0];
|
})[0];
|
||||||
if (options.panel && (task ? options.panel.classList.remove("hide") : options.panel.classList.add("hide")), task) {
|
|
||||||
"Idle" == task.State ? button.removeAttribute("disabled") : button.setAttribute("disabled", "disabled"), button.setAttribute("data-taskid", task.Id);
|
if (options.panel) {
|
||||||
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
|
if (task) {
|
||||||
if (options.progressElem && (options.progressElem.value = progress, "Running" == task.State ? options.progressElem.classList.remove("hide") : options.progressElem.classList.add("hide")), options.lastResultElem) {
|
options.panel.classList.remove('hide');
|
||||||
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : "";
|
} else {
|
||||||
"Failed" == lastResult ? options.lastResultElem.html('<span style="color:#FF0000;">(' + Globalize.translate("LabelFailed") + ")</span>") : "Cancelled" == lastResult ? options.lastResultElem.html('<span style="color:#0026FF;">(' + Globalize.translate("LabelCancelled") + ")</span>") : "Aborted" == lastResult ? options.lastResultElem.html('<span style="color:#FF0000;">' + Globalize.translate("LabelAbortedByServerShutdown") + "</span>") : options.lastResultElem.html(lastResult)
|
options.panel.classList.add('hide');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!task) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (task.State == 'Idle') {
|
||||||
|
button.removeAttribute("disabled");
|
||||||
|
} else {
|
||||||
|
button.setAttribute("disabled", "disabled");
|
||||||
|
}
|
||||||
|
|
||||||
|
button.setAttribute("data-taskid", task.Id);
|
||||||
|
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
|
||||||
|
|
||||||
|
if (options.progressElem) {
|
||||||
|
options.progressElem.value = progress;
|
||||||
|
|
||||||
|
if (task.State == 'Running') {
|
||||||
|
options.progressElem.classList.remove('hide');
|
||||||
|
} else {
|
||||||
|
options.progressElem.classList.add('hide');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.lastResultElem) {
|
||||||
|
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : '';
|
||||||
|
|
||||||
|
if (lastResult == "Failed") {
|
||||||
|
options.lastResultElem.html('<span style="color:#FF0000;">(' + Globalize.translate('LabelFailed') + ')</span>');
|
||||||
|
} else if (lastResult == "Cancelled") {
|
||||||
|
options.lastResultElem.html('<span style="color:#0026FF;">(' + Globalize.translate('LabelCancelled') + ')</span>');
|
||||||
|
} else if (lastResult == "Aborted") {
|
||||||
|
options.lastResultElem.html('<span style="color:#FF0000;">' + Globalize.translate('LabelAbortedByServerShutdown') + '</span>');
|
||||||
|
} else {
|
||||||
|
options.lastResultElem.html(lastResult);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onScheduledTaskMessageConfirmed(id) {
|
function onScheduledTaskMessageConfirmed(id) {
|
||||||
connectionManager.getApiClient(serverId).startScheduledTask(id).then(pollTasks)
|
connectionManager.getApiClient(serverId).startScheduledTask(id).then(pollTasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
function onButtonClick() {
|
function onButtonClick() {
|
||||||
onScheduledTaskMessageConfirmed(this.getAttribute("data-taskid"))
|
onScheduledTaskMessageConfirmed(this.getAttribute("data-taskid"));
|
||||||
}
|
}
|
||||||
|
|
||||||
function onScheduledTasksUpdate(e, apiClient, info) {
|
function onScheduledTasksUpdate(e, apiClient, info) {
|
||||||
apiClient.serverId() === serverId && updateTasks(info)
|
if (apiClient.serverId() === serverId) {
|
||||||
|
updateTasks(info);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var pollInterval;
|
||||||
|
var button = options.button;
|
||||||
|
var serverId = ApiClient.serverId();
|
||||||
|
|
||||||
function onPollIntervalFired() {
|
function onPollIntervalFired() {
|
||||||
connectionManager.getApiClient(serverId).isMessageChannelOpen() || pollTasks()
|
if (!connectionManager.getApiClient(serverId).isMessageChannelOpen()) {
|
||||||
|
pollTasks();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var pollInterval, button = options.button,
|
|
||||||
serverId = ApiClient.serverId();
|
function startInterval() {
|
||||||
options.panel && options.panel.classList.add("hide"), "off" == options.mode ? (button.removeEventListener("click", onButtonClick), events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate), function() {
|
|
||||||
connectionManager.getApiClient(serverId).sendMessage("ScheduledTasksInfoStop"), pollInterval && clearInterval(pollInterval)
|
|
||||||
}()) : (button.addEventListener("click", onButtonClick), pollTasks(), function() {
|
|
||||||
var apiClient = connectionManager.getApiClient(serverId);
|
var apiClient = connectionManager.getApiClient(serverId);
|
||||||
pollInterval && clearInterval(pollInterval), apiClient.sendMessage("ScheduledTasksInfoStart", "1000,1000"), pollInterval = setInterval(onPollIntervalFired, 1e4)
|
|
||||||
}(), events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate))
|
if (pollInterval) {
|
||||||
}
|
clearInterval(pollInterval);
|
||||||
});
|
}
|
||||||
|
apiClient.sendMessage("ScheduledTasksInfoStart", "1000,1000");
|
||||||
|
pollInterval = setInterval(onPollIntervalFired, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function stopInterval() {
|
||||||
|
connectionManager.getApiClient(serverId).sendMessage("ScheduledTasksInfoStop");
|
||||||
|
|
||||||
|
if (pollInterval) {
|
||||||
|
clearInterval(pollInterval);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.panel) {
|
||||||
|
options.panel.classList.add("hide");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.mode == 'off') {
|
||||||
|
button.removeEventListener("click", onButtonClick);
|
||||||
|
events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||||
|
stopInterval();
|
||||||
|
} else {
|
||||||
|
button.addEventListener("click", onButtonClick);
|
||||||
|
pollTasks();
|
||||||
|
startInterval();
|
||||||
|
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
|
@ -1,15 +1,27 @@
|
||||||
define(["userSettings", "skinManager", "connectionManager", "events"], function(userSettings, skinManager, connectionManager, events) {
|
define(["userSettings", "skinManager", "connectionManager", "events"], function (userSettings, skinManager, connectionManager, events) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var currentViewType;
|
var currentViewType;
|
||||||
pageClassOn("viewbeforeshow", "page", function() {
|
pageClassOn("viewbeforeshow", "page", function () {
|
||||||
var classList = this.classList,
|
var classList = this.classList;
|
||||||
viewType = classList.contains("type-interior") || classList.contains("wizardPage") ? "a" : "b";
|
var viewType = classList.contains("type-interior") || classList.contains("wizardPage") ? "a" : "b";
|
||||||
|
|
||||||
if (viewType !== currentViewType) {
|
if (viewType !== currentViewType) {
|
||||||
currentViewType = viewType;
|
currentViewType = viewType;
|
||||||
var theme, context;
|
var theme;
|
||||||
"a" === viewType ? (theme = userSettings.dashboardTheme(), context = "serverdashboard") : theme = userSettings.theme(), skinManager.setTheme(theme, context)
|
var context;
|
||||||
|
|
||||||
|
if ("a" === viewType) {
|
||||||
|
theme = userSettings.dashboardTheme();
|
||||||
|
context = "serverdashboard";
|
||||||
|
} else {
|
||||||
|
theme = userSettings.theme();
|
||||||
|
}
|
||||||
|
|
||||||
|
skinManager.setTheme(theme, context);
|
||||||
}
|
}
|
||||||
}), events.on(connectionManager, "localusersignedin", function(e, user) {
|
});
|
||||||
currentViewType = null
|
events.on(connectionManager, "localusersignedin", function (e, user) {
|
||||||
})
|
currentViewType = null;
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -1,20 +1,30 @@
|
||||||
define(["jQuery", "loading", "libraryMenu"], function($, loading, libraryMenu) {
|
define(["jQuery", "loading", "libraryMenu"], function ($, loading, libraryMenu) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loadUser(page, user) {
|
function loadUser(page, user) {
|
||||||
libraryMenu.setTitle(user.Name), "Guest" == user.ConnectLinkType ? $(".connectMessage", page).show() : $(".connectMessage", page).hide(), loading.hide()
|
libraryMenu.setTitle(user.Name);
|
||||||
|
|
||||||
|
if ("Guest" == user.ConnectLinkType) {
|
||||||
|
$(".connectMessage", page).show();
|
||||||
|
} else {
|
||||||
|
$(".connectMessage", page).hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
loading.hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadData(page) {
|
function loadData(page) {
|
||||||
loading.show();
|
loading.show();
|
||||||
var userId = getParameterByName("userId");
|
var userId = getParameterByName("userId");
|
||||||
ApiClient.getUser(userId).then(function(user) {
|
ApiClient.getUser(userId).then(function (user) {
|
||||||
loadUser(page, user)
|
loadUser(page, user);
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
$(document).on("pageinit", "#userPasswordPage", function() {
|
|
||||||
$(".adminUpdatePasswordForm").off("submit", UpdatePasswordPage.onSubmit).on("submit", UpdatePasswordPage.onSubmit), $(".adminLocalAccessForm").off("submit", UpdatePasswordPage.onLocalAccessSubmit).on("submit", UpdatePasswordPage.onLocalAccessSubmit)
|
$(document).on("pageinit", "#userPasswordPage", function () {
|
||||||
}).on("pagebeforeshow", "#userPasswordPage", function() {
|
$(".adminUpdatePasswordForm").off("submit", UpdatePasswordPage.onSubmit).on("submit", UpdatePasswordPage.onSubmit);
|
||||||
loadData(this)
|
$(".adminLocalAccessForm").off("submit", UpdatePasswordPage.onLocalAccessSubmit).on("submit", UpdatePasswordPage.onLocalAccessSubmit);
|
||||||
})
|
}).on("pagebeforeshow", "#userPasswordPage", function () {
|
||||||
});
|
loadData(this);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -1,17 +1,27 @@
|
||||||
define(["dom", "emby-button"], function(dom) {
|
define(["dom", "emby-button"], function (dom) {
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function onSubmit(e) {
|
function onSubmit(e) {
|
||||||
return dom.parentWithClass(this, "page").querySelector(".chkAccept").checked ? Dashboard.navigate("wizardfinish.html") : Dashboard.alert({
|
if (dom.parentWithClass(this, "page").querySelector(".chkAccept").checked) {
|
||||||
message: Globalize.translate("MessagePleaseAcceptTermsOfServiceBeforeContinuing"),
|
Dashboard.navigate("wizardfinish.html");
|
||||||
title: ""
|
} else {
|
||||||
}), e.preventDefault(), !1
|
Dashboard.alert({
|
||||||
|
message: Globalize.translate("MessagePleaseAcceptTermsOfServiceBeforeContinuing"),
|
||||||
|
title: ""
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return function(view, params) {
|
|
||||||
view.querySelector(".wizardAgreementForm").addEventListener("submit", onSubmit), view.addEventListener("viewshow", function() {
|
return function (view, params) {
|
||||||
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader")
|
view.querySelector(".wizardAgreementForm").addEventListener("submit", onSubmit);
|
||||||
}), view.addEventListener("viewhide", function() {
|
view.addEventListener("viewshow", function () {
|
||||||
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader")
|
document.querySelector(".skinHeader").classList.add("noHomeButtonHeader");
|
||||||
})
|
});
|
||||||
}
|
view.addEventListener("viewhide", function () {
|
||||||
});
|
document.querySelector(".skinHeader").classList.remove("noHomeButtonHeader");
|
||||||
|
});
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue