mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge branch 'master' into synchronize-subtitles
This commit is contained in:
commit
4d8ec5b466
105 changed files with 2914 additions and 870 deletions
|
@ -2,32 +2,40 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
|||
"use strict";
|
||||
|
||||
function populateHistory(packageInfo, page) {
|
||||
for (var html = "", i = 0, length = Math.min(packageInfo.versions.length, 10); i < length; i++) {
|
||||
var html = "";
|
||||
var length = Math.min(packageInfo.versions.length, 10);
|
||||
for (var i = 0; i < length; i++) {
|
||||
var version = packageInfo.versions[i];
|
||||
html += '<h2 style="margin:.5em 0;">' + version.versionStr + " (" + version.classification + ")</h2>", html += '<div style="margin-bottom:1.5em;">' + version.description + "</div>"
|
||||
html += '<h2 style="margin:.5em 0;">' + version.versionStr + " (" + version.classification + ")</h2>";
|
||||
html += '<div style="margin-bottom:1.5em;">' + version.description + "</div>";
|
||||
}
|
||||
$("#revisionHistory", page).html(html)
|
||||
$("#revisionHistory", page).html(html);
|
||||
}
|
||||
|
||||
function populateVersions(packageInfo, page, installedPlugin) {
|
||||
for (var html = "", i = 0, length = packageInfo.versions.length; i < length; i++) {
|
||||
var html = "";
|
||||
for (var i = 0; i < packageInfo.versions.length; i++) {
|
||||
var version = packageInfo.versions[i];
|
||||
html += '<option value="' + version.versionStr + "|" + version.classification + '">' + version.versionStr + " (" + version.classification + ")</option>"
|
||||
html += '<option value="' + version.versionStr + "|" + version.classification + '">' + version.versionStr + " (" + version.classification + ")</option>";
|
||||
}
|
||||
var selectmenu = $("#selectVersion", page).html(html);
|
||||
installedPlugin || $("#pCurrentVersion", page).hide().html("");
|
||||
if (!installedPlugin) {
|
||||
$("#pCurrentVersion", page).hide().html("");
|
||||
}
|
||||
var packageVersion = packageInfo.versions.filter(function(current) {
|
||||
return "Release" == current.classification
|
||||
return "Release" == current.classification;
|
||||
})[0];
|
||||
if (packageVersion || (packageVersion = packageInfo.versions.filter(function(current) {
|
||||
return "Beta" == current.classification
|
||||
})[0]), packageVersion) {
|
||||
packageVersion = packageVersion || packageInfo.versions.filter(function(current) {
|
||||
return "Beta" == current.classification;
|
||||
})[0];
|
||||
|
||||
if (packageVersion) {
|
||||
var val = packageVersion.versionStr + "|" + packageVersion.classification;
|
||||
selectmenu.val(val)
|
||||
selectmenu.val(val);
|
||||
}
|
||||
}
|
||||
|
||||
function renderPackage(pkg, installedPlugins, pluginSecurityInfo, page) {
|
||||
function renderPackage(pkg, installedPlugins, page) {
|
||||
var installedPlugin = installedPlugins.filter(function(ip) {
|
||||
return ip.Name == pkg.name
|
||||
})[0];
|
||||
|
@ -79,62 +87,69 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
|
|||
}
|
||||
|
||||
function performInstallation(page, packageName, guid, updateClass, version) {
|
||||
var developer = $("#developer", page).html().toLowerCase(),
|
||||
alertCallback = function(confirmed) {
|
||||
confirmed && (loading.show(), page.querySelector("#btnInstall").disabled = !0, ApiClient.installPlugin(packageName, guid, updateClass, version).then(function() {
|
||||
loading.hide(), alertText(globalize.translate("PluginInstalledMessage"))
|
||||
}))
|
||||
};
|
||||
if ("luke" != developer && "ebr" != developer) {
|
||||
var developer = $("#developer", page).html().toLowerCase();
|
||||
var alertCallback = function() {
|
||||
loading.show();
|
||||
page.querySelector("#btnInstall").disabled = true;
|
||||
ApiClient.installPlugin(packageName, guid, updateClass, version).then(function() {
|
||||
loading.hide();
|
||||
alertText(globalize.translate("PluginInstalledMessage"));
|
||||
});
|
||||
};
|
||||
if (developer !== 'jellyfin') {
|
||||
loading.hide();
|
||||
var msg = globalize.translate("MessagePluginInstallDisclaimer");
|
||||
msg += "<br/>", msg += "<br/>", msg += globalize.translate("PleaseConfirmPluginInstallation"), require(["confirm"], function(confirm) {
|
||||
msg += "<br/>";
|
||||
msg += "<br/>";
|
||||
msg += globalize.translate("PleaseConfirmPluginInstallation");
|
||||
require(["confirm"], function(confirm) {
|
||||
confirm(msg, globalize.translate("HeaderConfirmPluginInstallation")).then(function() {
|
||||
alertCallback(!0)
|
||||
alertCallback();
|
||||
}, function() {
|
||||
alertCallback(!1)
|
||||
})
|
||||
})
|
||||
} else alertCallback(!0)
|
||||
console.log('plugin not installed');
|
||||
});
|
||||
});
|
||||
} else {
|
||||
alertCallback();
|
||||
}
|
||||
}
|
||||
|
||||
return function(view, params) {
|
||||
var onSubmit = function() {
|
||||
$(".addPluginForm", view).on("submit", function() {
|
||||
loading.show();
|
||||
var page = $(this).parents("#addPluginPage")[0],
|
||||
name = params.name,
|
||||
guid = params.guid;
|
||||
return ApiClient.getInstalledPlugins().then(function(plugins) {
|
||||
var installedPlugin = plugins.filter(function(ip) {
|
||||
return ip.Name == name
|
||||
})[0],
|
||||
vals = $("#selectVersion", page).val().split("|"),
|
||||
version = vals[0];
|
||||
installedPlugin && installedPlugin.Version == version ? (loading.hide(), Dashboard.alert({
|
||||
message: globalize.translate("MessageAlreadyInstalled"),
|
||||
title: globalize.translate("HeaderPluginInstallation")
|
||||
})) : performInstallation(page, name, guid, vals[1], version)
|
||||
}), !1
|
||||
};
|
||||
$(".addPluginForm", view).on("submit", onSubmit), view.addEventListener("viewshow", function() {
|
||||
var page = $(this).parents("#addPluginPage")[0];
|
||||
var name = params.name;
|
||||
var guid = params.guid;
|
||||
ApiClient.getInstalledPlugins().then(function(plugins) {
|
||||
var installedPlugin = plugins.filter(function(plugin) {
|
||||
return plugin.Name == name;
|
||||
})[0];
|
||||
var vals = $("#selectVersion", page).val().split("|");
|
||||
var version = vals[0];
|
||||
if (installedPlugin) {
|
||||
if (installedPlugin.Version === version) {
|
||||
loading.hide();
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessageAlreadyInstalled"),
|
||||
title: globalize.translate("HeaderPluginInstallation")
|
||||
});
|
||||
}
|
||||
} else {
|
||||
performInstallation(page, name, guid, vals[1], version);
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
view.addEventListener("viewshow", function() {
|
||||
var page = this;
|
||||
loading.show();
|
||||
var name = params.name,
|
||||
guid = params.guid,
|
||||
promise1 = ApiClient.getPackageInfo(name, guid),
|
||||
promise2 = ApiClient.getInstalledPlugins();
|
||||
connectionManager.getRegistrationInfo("themes", ApiClient, {
|
||||
viewOnly: !0
|
||||
}), Promise.all([promise1, promise2]).then(function(responses) {
|
||||
connectionManager.getRegistrationInfo("themes", ApiClient, {
|
||||
viewOnly: !0
|
||||
}).then(function() {
|
||||
renderPackage(responses[0], responses[1], {
|
||||
IsMBSupporter: !0
|
||||
}, page)
|
||||
}, function() {
|
||||
renderPackage(responses[0], responses[1], {}, page)
|
||||
})
|
||||
})
|
||||
var name = params.name;
|
||||
var guid = params.guid;
|
||||
var promise1 = ApiClient.getPackageInfo(name, guid);
|
||||
var promise2 = ApiClient.getInstalledPlugins();
|
||||
Promise.all([promise1, promise2]).then(function(responses) {
|
||||
renderPackage(responses[0], responses[1], page);
|
||||
});
|
||||
})
|
||||
}
|
||||
});
|
||||
|
|
|
@ -3,7 +3,7 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
|||
|
||||
function reloadList(page) {
|
||||
loading.show();
|
||||
var promise1 = ApiClient.getAvailablePlugins(query);
|
||||
var promise1 = ApiClient.getAvailablePlugins();
|
||||
var promise2 = ApiClient.getInstalledPlugins();
|
||||
Promise.all([promise1, promise2]).then(function (responses) {
|
||||
populateList({
|
||||
|
@ -33,19 +33,15 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
|||
function populateList(options) {
|
||||
var availablePlugins = options.availablePlugins;
|
||||
var installedPlugins = options.installedPlugins;
|
||||
var allPlugins = availablePlugins.filter(function (plugin) {
|
||||
plugin.category = plugin.category || "General";
|
||||
plugin.categoryDisplayName = getHeaderText(plugin.category);
|
||||
|
||||
if (!options.categories || -1 != options.categories.indexOf(plugin.category)) {
|
||||
if (!options.targetSystem || plugin.targetSystem == options.targetSystem) {
|
||||
return "UserInstalled" == plugin.type;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
var categories = [];
|
||||
availablePlugins.forEach(function (plugin, index, array) {
|
||||
plugin.category = plugin.category || 'General';
|
||||
plugin.categoryDisplayName = getHeaderText(plugin.category);
|
||||
array[index] = plugin;
|
||||
});
|
||||
|
||||
availablePlugins = allPlugins.sort(function (a, b) {
|
||||
availablePlugins.sort(function (a, b) {
|
||||
if (a.category > b.category) {
|
||||
return 1;
|
||||
} else if (b.category > a.category) {
|
||||
|
@ -59,45 +55,29 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
|||
return 0;
|
||||
});
|
||||
|
||||
var length;
|
||||
var plugin;
|
||||
var currentCategory;
|
||||
var currentCategory = null;
|
||||
var html = "";
|
||||
|
||||
var hasOpenTag = false;
|
||||
currentCategory = null;
|
||||
if (options.showCategory === false) {
|
||||
html += '<div class="itemsContainer vertical-wrap">';
|
||||
hasOpenTag = true;
|
||||
}
|
||||
for (var i = 0; i < availablePlugins.length; i++) {
|
||||
plugin = availablePlugins[i];
|
||||
var plugin = availablePlugins[i];
|
||||
var category = plugin.categoryDisplayName;
|
||||
|
||||
if (category != currentCategory) {
|
||||
if (false !== options.showCategory) {
|
||||
if (currentCategory) {
|
||||
hasOpenTag = false;
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
}
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">' + category + "</h2>";
|
||||
html += '<div class="itemsContainer vertical-wrap">';
|
||||
hasOpenTag = true;
|
||||
if (currentCategory) {
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
}
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards">' + category + "</h2>";
|
||||
html += '<div class="itemsContainer vertical-wrap">';
|
||||
currentCategory = category;
|
||||
}
|
||||
html += getPluginHtml(plugin, options, installedPlugins);
|
||||
}
|
||||
|
||||
if (hasOpenTag) {
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
}
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
|
||||
if (!availablePlugins.length && options.noItemsElement) {
|
||||
options.noItemsElement.classList.add("hide");
|
||||
options.noItemsElement.classList.remove("hide");
|
||||
}
|
||||
|
||||
options.catalogElement.innerHTML = html;
|
||||
|
@ -145,29 +125,19 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
|
|||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "plugins.html",
|
||||
href: "installedplugins.html",
|
||||
name: globalize.translate("TabMyPlugins")
|
||||
}, {
|
||||
href: "plugincatalog.html",
|
||||
href: "availableplugins.html",
|
||||
name: globalize.translate("TabCatalog")
|
||||
}];
|
||||
}
|
||||
|
||||
var query = {
|
||||
TargetSystems: "Server",
|
||||
IsAppStoreSafe: true,
|
||||
IsAdult: false
|
||||
};
|
||||
|
||||
window.PluginCatalog = {
|
||||
renderCatalog: populateList
|
||||
};
|
||||
|
||||
return function (view, params) {
|
||||
view.querySelector("#selectSystem").addEventListener("change", function () {
|
||||
query.TargetSystems = this.value;
|
||||
reloadList(view);
|
||||
});
|
||||
view.addEventListener("viewshow", function () {
|
||||
libraryMenu.setTabs("plugins", 1, getTabs);
|
||||
reloadList(this);
|
|
@ -712,7 +712,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
},
|
||||
systemUpdateTaskKey: "SystemUpdateTask",
|
||||
renderUrls: function (page, systemInfo) {
|
||||
var helpButton = '<a is="emby-linkbutton" class="raised raised-mini button-submit" href="https://web.archive.org/web/20181216120305/https://github.com/MediaBrowser/Wiki/wiki/Connectivity" target="_blank" style="margin-left:.7em;font-size:84%;padding:.2em .8em;">' + globalize.translate("ButtonHelp") + "</a>";
|
||||
var helpButton = '<a is="emby-linkbutton" class="raised raised-mini button-submit" href="https://jellyfin.readthedocs.io/en/latest/administrator-docs/connectivity" target="_blank" style="margin-left:.7em;font-size:84%;padding:.2em .8em;">' + globalize.translate("ButtonHelp") + "</a>";
|
||||
var localUrlElem = page.querySelector(".localUrl");
|
||||
var externalUrlElem = page.querySelector(".externalUrl");
|
||||
|
||||
|
@ -750,7 +750,7 @@ define(["datetime", "events", "itemHelper", "serverNotifications", "dom", "globa
|
|||
var page = dom.parentWithClass(btn, "page");
|
||||
buttonEnabled(page.querySelector("#btnRestartServer"), false);
|
||||
buttonEnabled(page.querySelector("#btnShutdown"), false);
|
||||
Dashboard.restartServer();
|
||||
ApiClient.restartServer();
|
||||
});
|
||||
});
|
||||
},
|
||||
|
|
|
@ -43,7 +43,7 @@ define(["loading", "dom", "libraryMenu", "globalize", "humanedate", "emby-button
|
|||
callback: function(id) {
|
||||
switch (id) {
|
||||
case "open":
|
||||
Dashboard.navigate("devices/device.html?id=" + deviceId);
|
||||
Dashboard.navigate("device.html?id=" + deviceId);
|
||||
break;
|
||||
case "delete":
|
||||
deleteDevice(view, deviceId)
|
||||
|
@ -57,7 +57,7 @@ define(["loading", "dom", "libraryMenu", "globalize", "humanedate", "emby-button
|
|||
var html = "";
|
||||
html += devices.map(function(device) {
|
||||
var deviceHtml = "";
|
||||
deviceHtml += "<div data-id='" + device.Id + "' class='card backdropCard'>", deviceHtml += '<div class="cardBox visualCardBox">', deviceHtml += '<div class="cardScalable">', deviceHtml += '<div class="cardPadder cardPadder-backdrop"></div>', deviceHtml += '<a is="emby-linkbutton" href="' + (canEdit ? "devices/device.html?id=" + device.Id : "#") + '" class="cardContent cardImageContainer">';
|
||||
deviceHtml += "<div data-id='" + device.Id + "' class='card backdropCard'>", deviceHtml += '<div class="cardBox visualCardBox">', deviceHtml += '<div class="cardScalable">', deviceHtml += '<div class="cardPadder cardPadder-backdrop"></div>', deviceHtml += '<a is="emby-linkbutton" href="' + (canEdit ? "device.html?id=" + device.Id : "#") + '" class="cardContent cardImageContainer">';
|
||||
var iconUrl = device.IconUrl;
|
||||
return iconUrl && -1 === iconUrl.indexOf("://") && (iconUrl = ApiClient.getUrl(iconUrl)), iconUrl ? (deviceHtml += '<div class="cardImage" style="background-image:url(\'' + iconUrl + "');background-size: auto 64%;background-position:center center;\">", deviceHtml += "</div>") : deviceHtml += '<i class="cardImageIcon md-icon">tablet_android</i>', deviceHtml += "</a>", deviceHtml += "</div>", deviceHtml += '<div class="cardFooter">', (canEdit || canDelete(device.Id)) && (deviceHtml += '<div style="text-align:right; float:right;padding-top:5px;">', deviceHtml += '<button type="button" is="paper-icon-button-light" data-id="' + device.Id + '" title="' + globalize.translate("Menu") + '" class="btnDeviceMenu"><i class="md-icon"></i></button>', deviceHtml += "</div>"), deviceHtml += "<div class='cardText'>", deviceHtml += device.Name, deviceHtml += "</div>", deviceHtml += "<div class='cardText cardText-secondary'>", deviceHtml += device.AppName + " " + device.AppVersion, deviceHtml += "</div>", deviceHtml += "<div class='cardText cardText-secondary'>", device.LastUserName && (deviceHtml += device.LastUserName, deviceHtml += ", " + humane_date(device.DateLastActivity)), deviceHtml += " ", deviceHtml += "</div>", deviceHtml += "</div>", deviceHtml += "</div>", deviceHtml += "</div>"
|
||||
}).join(""), page.querySelector(".devicesList").innerHTML = html
|
||||
|
|
|
@ -12,9 +12,12 @@ define([], function() {
|
|||
});
|
||||
if ("PinCode" == result.Action) {
|
||||
var msg = Globalize.translate("MessageForgotPasswordFileCreated");
|
||||
return msg += "<br/>", msg += "<br/>", msg += "<a href=\"forgotpasswordpin.html\">Enter PIN here to finish Password Reset</a>" ,msg += "<br/>",msg += result.PinFile, msg += "<br/>", void Dashboard.alert({
|
||||
return msg += "<br/>", msg += "<br/>", msg += "Enter PIN here to finish Password Reset<br/>" ,msg += "<br/>",msg += result.PinFile, msg += "<br/>", void Dashboard.alert({
|
||||
message: msg,
|
||||
title: Globalize.translate("HeaderForgotPassword")
|
||||
title: Globalize.translate("HeaderForgotPassword"),
|
||||
callback: function() {
|
||||
Dashboard.navigate("forgotpasswordpin.html")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
171
src/controllers/installedplugins.js
Normal file
171
src/controllers/installedplugins.js
Normal file
|
@ -0,0 +1,171 @@
|
|||
define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"], function(loading, libraryMenu, dom, globalize) {
|
||||
"use strict";
|
||||
|
||||
function deletePlugin(page, uniqueid, name) {
|
||||
var msg = globalize.translate("UninstallPluginConfirmation").replace("{0}", name);
|
||||
require(["confirm"], function(confirm) {
|
||||
confirm({
|
||||
title: globalize.translate("UninstallPluginHeader"),
|
||||
text: msg,
|
||||
primary: "cancel",
|
||||
confirmText: globalize.translate("UninstallPluginHeader")
|
||||
}).then(function() {
|
||||
loading.show();
|
||||
ApiClient.uninstallPlugin(uniqueid).then(function() {
|
||||
reloadList(page);
|
||||
});
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function showNoConfigurationMessage() {
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("NoPluginConfigurationMessage")
|
||||
});
|
||||
}
|
||||
|
||||
function showConnectMessage() {
|
||||
Dashboard.alert({
|
||||
message: globalize.translate("MessagePluginConfigurationRequiresLocalAccess")
|
||||
});
|
||||
}
|
||||
|
||||
function getPluginCardHtml(plugin, pluginConfigurationPages) {
|
||||
var configPage = pluginConfigurationPages.filter(function(pluginConfigurationPage) {
|
||||
return pluginConfigurationPage.PluginId == plugin.Id;
|
||||
})[0];
|
||||
var configPageUrl = configPage ? Dashboard.getConfigurationPageUrl(configPage.Name) : null;
|
||||
|
||||
var html = "";
|
||||
html += "<div data-id='" + plugin.Id + "' data-name='" + plugin.Name + "' class='card backdropCard'>";
|
||||
html += '<div class="cardBox visualCardBox">';
|
||||
html += '<div class="cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-backdrop"></div>';
|
||||
html += configPageUrl ? '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + configPageUrl + '">' : '<div class="cardContent noConfigPluginCard noHoverEffect cardImageContainer">';
|
||||
if (plugin.ImageUrl) {
|
||||
html += '<div class="cardImage coveredImage" style="background-image:url(\'' + plugin.ImageUrl + "');\">";
|
||||
html += "</div>";
|
||||
} else {
|
||||
html += '<i class="cardImageIcon md-icon"></i>';
|
||||
}
|
||||
html += configPageUrl ? "</a>" : "</div>";
|
||||
html += "</div>";
|
||||
html += '<div class="cardFooter">';
|
||||
html += '<div style="text-align:right; float:right;padding-top:5px;">';
|
||||
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><i class="md-icon">more_horiz</i></button>';
|
||||
html += "</div>";
|
||||
html += "<div class='cardText'>";
|
||||
html += configPage ? configPage.DisplayName || plugin.Name : plugin.Name;
|
||||
html += "</div>";
|
||||
html += "<div class='cardText cardText-secondary'>";
|
||||
html += plugin.Version;
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
return html;
|
||||
}
|
||||
|
||||
function renderPlugins(page, plugins) {
|
||||
ApiClient.getJSON(ApiClient.getUrl("web/configurationpages") + "?pageType=PluginConfiguration").then(function(configPages) {
|
||||
populateList(page, plugins, configPages);
|
||||
});
|
||||
}
|
||||
|
||||
function populateList(page, plugins, pluginConfigurationPages) {
|
||||
plugins = plugins.sort(function(plugin1, plugin2) {
|
||||
return plugin1.Name > plugin2.Name ? 1 : -1
|
||||
});
|
||||
var html = plugins.map(function(p) {
|
||||
return getPluginCardHtml(p, pluginConfigurationPages)
|
||||
}).join("");
|
||||
var installedPluginsElement = page.querySelector(".installedPlugins");
|
||||
installedPluginsElement.removeEventListener("click", onInstalledPluginsClick);
|
||||
installedPluginsElement.addEventListener("click", onInstalledPluginsClick);
|
||||
if (plugins.length) {
|
||||
installedPluginsElement.classList.add("itemsContainer");
|
||||
installedPluginsElement.classList.add("vertical-wrap");
|
||||
} else {
|
||||
html += '<div style="padding:5px;">';
|
||||
html += "<p>" + globalize.translate("MessageNoPluginsInstalled") + "</p>";
|
||||
html += '<p><a is="emby-linkbutton" class="button-link" href="availableplugins.html">';
|
||||
html += globalize.translate("BrowsePluginCatalogMessage");
|
||||
html += "</a></p>";
|
||||
html += "</div>";
|
||||
}
|
||||
installedPluginsElement.innerHTML = html;
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
function showPluginMenu(page, elem) {
|
||||
var card = dom.parentWithClass(elem, "card");
|
||||
var id = card.getAttribute("data-id");
|
||||
var name = card.getAttribute("data-name");
|
||||
var configHref = card.querySelector(".cardContent").getAttribute("href");
|
||||
var menuItems = [];
|
||||
if (configHref) {
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonSettings"),
|
||||
id: "open",
|
||||
ironIcon: "mode-edit"
|
||||
});
|
||||
}
|
||||
menuItems.push({
|
||||
name: globalize.translate("ButtonUninstall"),
|
||||
id: "delete",
|
||||
ironIcon: "delete"
|
||||
});
|
||||
require(["actionsheet"], function(actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: elem,
|
||||
callback: function(resultId) {
|
||||
switch (resultId) {
|
||||
case "open":
|
||||
Dashboard.navigate(configHref);
|
||||
break;
|
||||
case "delete":
|
||||
deletePlugin(page, id, name)
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function reloadList(page) {
|
||||
loading.show();
|
||||
ApiClient.getInstalledPlugins().then(function(plugins) {
|
||||
renderPlugins(page, plugins);
|
||||
});
|
||||
}
|
||||
|
||||
function getTabs() {
|
||||
return [{
|
||||
href: "installedplugins.html",
|
||||
name: globalize.translate("TabMyPlugins")
|
||||
}, {
|
||||
href: "availableplugins.html",
|
||||
name: globalize.translate("TabCatalog")
|
||||
}]
|
||||
}
|
||||
|
||||
function onInstalledPluginsClick(e) {
|
||||
if (dom.parentWithClass(e.target, "noConfigPluginCard")) {
|
||||
showNoConfigurationMessage();
|
||||
} else if (dom.parentWithClass(e.target, "connectModePluginCard")) {
|
||||
showConnectMessage();
|
||||
} else {
|
||||
var btnCardMenu = dom.parentWithClass(e.target, "btnCardMenu");
|
||||
btnCardMenu && showPluginMenu(dom.parentWithClass(btnCardMenu, "page"), btnCardMenu);
|
||||
}
|
||||
}
|
||||
|
||||
pageIdOn("pageshow", "pluginsPage", function() {
|
||||
libraryMenu.setTabs("plugins", 0, getTabs);
|
||||
reloadList(this);
|
||||
});
|
||||
|
||||
window.PluginsPage = {
|
||||
renderPlugins: renderPlugins
|
||||
}
|
||||
});
|
|
@ -967,7 +967,25 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
var stream = version.MediaStreams[i];
|
||||
if ("Data" != stream.Type) {
|
||||
html += '<div class="mediaInfoStream">';
|
||||
html += '<h3 class="mediaInfoStreamType">' + globalize.translate("MediaInfoStreamType" + stream.Type) + "</h3>";
|
||||
html += '<h3 class="mediaInfoStreamType">';
|
||||
switch (stream.Type) {
|
||||
case 'Audio':
|
||||
html += globalize.translate("MediaInfoStreamTypeAudio");
|
||||
break;
|
||||
case 'Subtitle':
|
||||
html += globalize.translate("MediaInfoStreamTypeSubtitle");
|
||||
break;
|
||||
case 'Video':
|
||||
html += globalize.translate("MediaInfoStreamTypeVideo");
|
||||
break;
|
||||
case 'Data':
|
||||
html += globalize.translate("MediaInfoStreamTypeData");
|
||||
break;
|
||||
case 'EmbeddedImage':
|
||||
html += globalize.translate("MediaInfoStreamTypeEmbeddedImage");
|
||||
break;
|
||||
}
|
||||
html += "</h3>";
|
||||
var attributes = [];
|
||||
stream.DisplayTitle && attributes.push(createAttribute("Title", stream.DisplayTitle)), stream.Language && "Video" != stream.Type && attributes.push(createAttribute(globalize.translate("MediaInfoLanguage"), stream.Language)), stream.Codec && attributes.push(createAttribute(globalize.translate("MediaInfoCodec"), stream.Codec.toUpperCase())), stream.CodecTag && attributes.push(createAttribute(globalize.translate("MediaInfoCodecTag"), stream.CodecTag)), null != stream.IsAVC && attributes.push(createAttribute("AVC", stream.IsAVC ? "Yes" : "No")), stream.Profile && attributes.push(createAttribute(globalize.translate("MediaInfoProfile"), stream.Profile)), stream.Level && attributes.push(createAttribute(globalize.translate("MediaInfoLevel"), stream.Level)), (stream.Width || stream.Height) && attributes.push(createAttribute(globalize.translate("MediaInfoResolution"), stream.Width + "x" + stream.Height)), stream.AspectRatio && "mjpeg" != stream.Codec && attributes.push(createAttribute(globalize.translate("MediaInfoAspectRatio"), stream.AspectRatio)), "Video" == stream.Type && (null != stream.IsAnamorphic && attributes.push(createAttribute(globalize.translate("MediaInfoAnamorphic"), stream.IsAnamorphic ? "Yes" : "No")), attributes.push(createAttribute(globalize.translate("MediaInfoInterlaced"), stream.IsInterlaced ? "Yes" : "No"))), (stream.AverageFrameRate || stream.RealFrameRate) && attributes.push(createAttribute(globalize.translate("MediaInfoFramerate"), stream.AverageFrameRate || stream.RealFrameRate)), stream.ChannelLayout && attributes.push(createAttribute(globalize.translate("MediaInfoLayout"), stream.ChannelLayout)), stream.Channels && attributes.push(createAttribute(globalize.translate("MediaInfoChannels"), stream.Channels + " ch")), stream.BitRate && "mjpeg" != stream.Codec && attributes.push(createAttribute(globalize.translate("MediaInfoBitrate"), parseInt(stream.BitRate / 1e3) + " kbps")), stream.SampleRate && attributes.push(createAttribute(globalize.translate("MediaInfoSampleRate"), stream.SampleRate + " Hz")), stream.VideoRange && "SDR" !== stream.VideoRange && attributes.push(createAttribute(globalize.translate("VideoRange"), stream.VideoRange)), stream.ColorPrimaries && attributes.push(createAttribute(globalize.translate("ColorPrimaries"), stream.ColorPrimaries)), stream.ColorSpace && attributes.push(createAttribute(globalize.translate("ColorSpace"), stream.ColorSpace)), stream.ColorTransfer && attributes.push(createAttribute(globalize.translate("ColorTransfer"), stream.ColorTransfer)), stream.BitDepth && attributes.push(createAttribute(globalize.translate("MediaInfoBitDepth"), stream.BitDepth + " bit")), stream.PixelFormat && attributes.push(createAttribute(globalize.translate("MediaInfoPixelFormat"), stream.PixelFormat)), stream.RefFrames && attributes.push(createAttribute(globalize.translate("MediaInfoRefFrames"), stream.RefFrames)), stream.NalLengthSize && attributes.push(createAttribute("NAL", stream.NalLengthSize)), "Video" != stream.Type && attributes.push(createAttribute(globalize.translate("MediaInfoDefault"), stream.IsDefault ? "Yes" : "No")), "Subtitle" == stream.Type && (attributes.push(createAttribute(globalize.translate("MediaInfoForced"), stream.IsForced ? "Yes" : "No")), attributes.push(createAttribute(globalize.translate("MediaInfoExternal"), stream.IsExternal ? "Yes" : "No"))), "Video" == stream.Type && version.Timestamp && attributes.push(createAttribute(globalize.translate("MediaInfoTimestamp"), version.Timestamp)), html += attributes.join("<br/>"), html += "</div>"
|
||||
}
|
||||
|
@ -1010,9 +1028,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
if (!people.length) return void page.querySelector("#castCollapsible").classList.add("hide");
|
||||
page.querySelector("#castCollapsible").classList.remove("hide");
|
||||
var castContent = page.querySelector("#castContent");
|
||||
enableScrollX() ? (castContent.classList.add("scrollX"), limit = 32) : castContent.classList.add("vertical-wrap");
|
||||
var limitExceeded = limit && people.length > limit;
|
||||
limitExceeded && (people = people.slice(0), people.length = Math.min(limit, people.length)), require(["peoplecardbuilder"], function(peoplecardbuilder) {
|
||||
require(["peoplecardbuilder"], function(peoplecardbuilder) {
|
||||
peoplecardbuilder.buildPeopleCards(people, {
|
||||
itemsContainer: castContent,
|
||||
coverImage: !0,
|
||||
|
@ -1020,9 +1036,7 @@ define(["loading", "appRouter", "layoutManager", "connectionManager", "cardBuild
|
|||
width: 160,
|
||||
shape: getPortraitShape()
|
||||
})
|
||||
});
|
||||
var morePeopleButton = page.querySelector(".morePeople");
|
||||
morePeopleButton && (limitExceeded && !enableScrollX() ? morePeopleButton.classList.remove("hide") : morePeopleButton.classList.add("hide"))
|
||||
})
|
||||
}
|
||||
|
||||
function itemDetailPage() {
|
||||
|
|
|
@ -284,12 +284,6 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
|||
getTabController(page, index, function (controller) {
|
||||
initialTabIndex = null;
|
||||
|
||||
if (1 === index) {
|
||||
document.body.classList.add("autoScrollY");
|
||||
} else {
|
||||
document.body.classList.remove("autoScrollY");
|
||||
}
|
||||
|
||||
if (-1 == renderedTabs.indexOf(index)) {
|
||||
if (1 === index) {
|
||||
renderedTabs.push(index);
|
||||
|
@ -362,7 +356,6 @@ define(["layoutManager", "userSettings", "inputManager", "loading", "globalize",
|
|||
if (currentTabController && currentTabController.onHide) {
|
||||
currentTabController.onHide();
|
||||
}
|
||||
document.body.classList.remove("autoScrollY");
|
||||
inputManager.off(window, onInputCommand);
|
||||
});
|
||||
view.addEventListener("viewdestroy", function (evt) {
|
||||
|
|
|
@ -1,91 +1,148 @@
|
|||
define(["appSettings", "dom", "connectionManager", "loading", "cardStyle", "emby-checkbox"], function(appSettings, dom, connectionManager, loading) {
|
||||
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "cardStyle", "emby-checkbox"], function(appHost, appSettings, dom, connectionManager, loading) {
|
||||
"use strict";
|
||||
|
||||
function authenticateUserByName(page, apiClient, username, password) {
|
||||
loading.show(), apiClient.authenticateUserByName(username, password).then(function(result) {
|
||||
var newUrl, user = result.User,
|
||||
serverId = getParameterByName("serverid");
|
||||
newUrl = user.Policy.IsAdministrator && !serverId ? "dashboard.html" : "home.html", loading.hide(), Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient), Dashboard.navigate(newUrl)
|
||||
loading.show();
|
||||
apiClient.authenticateUserByName(username, password).then(function(result) {
|
||||
var user = result.User;
|
||||
var serverId = getParameterByName("serverid");
|
||||
var newUrl = user.Policy.IsAdministrator && !serverId ? "dashboard.html" : "home.html";
|
||||
loading.hide();
|
||||
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
|
||||
Dashboard.navigate(newUrl);
|
||||
}, function(response) {
|
||||
page.querySelector("#txtManualName").value = "", page.querySelector("#txtManualPassword").value = "", loading.hide(), 401 == response.status ? require(["toast"], function(toast) {
|
||||
toast(Globalize.translate("MessageInvalidUser"))
|
||||
}) : showServerConnectionFailure()
|
||||
})
|
||||
}
|
||||
|
||||
function showServerConnectionFailure() {
|
||||
Dashboard.alert({
|
||||
message: Globalize.translate("MessageUnableToConnectToServer"),
|
||||
title: Globalize.translate("HeaderConnectionFailure")
|
||||
})
|
||||
page.querySelector("#txtManualName").value = "";
|
||||
page.querySelector("#txtManualPassword").value = "";
|
||||
loading.hide();
|
||||
if (response.status === 401) {
|
||||
require(["toast"], function(toast) {
|
||||
toast(Globalize.translate("MessageInvalidUser"));
|
||||
});
|
||||
} else {
|
||||
Dashboard.alert({
|
||||
message: Globalize.translate("MessageUnableToConnectToServer"),
|
||||
title: Globalize.translate("HeaderConnectionFailure")
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function showManualForm(context, showCancel, focusPassword) {
|
||||
context.querySelector(".chkRememberLogin").checked = appSettings.enableAutoLogin(), context.querySelector(".manualLoginForm").classList.remove("hide"), context.querySelector(".visualLoginForm").classList.add("hide"), focusPassword ? context.querySelector("#txtManualPassword").focus() : context.querySelector("#txtManualName").focus(), showCancel ? context.querySelector(".btnCancel").classList.remove("hide") : context.querySelector(".btnCancel").classList.add("hide")
|
||||
context.querySelector(".chkRememberLogin").checked = appSettings.enableAutoLogin();
|
||||
context.querySelector(".manualLoginForm").classList.remove("hide");
|
||||
context.querySelector(".visualLoginForm").classList.add("hide");
|
||||
focusPassword ? context.querySelector("#txtManualPassword").focus() : context.querySelector("#txtManualName").focus();
|
||||
showCancel ? context.querySelector(".btnCancel").classList.remove("hide") : context.querySelector(".btnCancel").classList.add("hide");
|
||||
}
|
||||
|
||||
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
|
||||
|
||||
function getRandomMetroColor() {
|
||||
var index = Math.floor(Math.random() * (metroColors.length - 1));
|
||||
return metroColors[index]
|
||||
return metroColors[index];
|
||||
}
|
||||
|
||||
function getMetroColor(str) {
|
||||
if (str) {
|
||||
for (var character = String(str.substr(0, 1).charCodeAt()), sum = 0, i = 0; i < character.length; i++) sum += parseInt(character.charAt(i));
|
||||
var character = String(str.substr(0, 1).charCodeAt());
|
||||
var sum = 0;
|
||||
for (var i = 0; i < character.length; i++) {
|
||||
sum += parseInt(character.charAt(i));
|
||||
}
|
||||
var index = String(sum).substr(-1);
|
||||
return metroColors[index]
|
||||
return metroColors[index];
|
||||
}
|
||||
return getRandomMetroColor()
|
||||
return getRandomMetroColor();
|
||||
}
|
||||
|
||||
function loadUserList(context, apiClient, users) {
|
||||
for (var html = "", i = 0, length = users.length; i < length; i++) {
|
||||
var html = "";
|
||||
for (var i = 0; i < users.length; i++) {
|
||||
var user = users[i];
|
||||
html += '<button type="button" class="card squareCard scalableCard squareCard-scalable"><div class="cardBox cardBox-bottompadded">', html += '<div class="cardScalable">', html += '<div class="cardPadder cardPadder-square"></div>', html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">';
|
||||
html += '<button type="button" class="card squareCard scalableCard squareCard-scalable"><div class="cardBox cardBox-bottompadded">';
|
||||
html += '<div class="cardScalable">';
|
||||
html += '<div class="cardPadder cardPadder-square"></div>';
|
||||
html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">';
|
||||
var imgUrl;
|
||||
if (user.PrimaryImageTag) imgUrl = apiClient.getUserImageUrl(user.Id, {
|
||||
width: 300,
|
||||
tag: user.PrimaryImageTag,
|
||||
type: "Primary"
|
||||
}), html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>";
|
||||
else {
|
||||
if (user.PrimaryImageTag) {
|
||||
imgUrl = apiClient.getUserImageUrl(user.Id, {
|
||||
width: 300,
|
||||
tag: user.PrimaryImageTag,
|
||||
type: "Primary"
|
||||
});
|
||||
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>";
|
||||
} else {
|
||||
var background = getMetroColor(user.Id);
|
||||
imgUrl = "img/logindefault.png", html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>'
|
||||
imgUrl = "img/logindefault.png";
|
||||
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>';
|
||||
}
|
||||
html += "</div>", html += "</div>", html += '<div class="cardFooter visualCardBox-cardFooter">', html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + "</div>", html += "</div>", html += "</div>", html += "</button>"
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += '<div class="cardFooter visualCardBox-cardFooter">';
|
||||
html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + "</div>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += "</button>";
|
||||
}
|
||||
context.querySelector("#divUsers").innerHTML = html
|
||||
context.querySelector("#divUsers").innerHTML = html;
|
||||
}
|
||||
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
|
||||
|
||||
return function(view, params) {
|
||||
function getApiClient() {
|
||||
var serverId = params.serverid;
|
||||
return serverId ? connectionManager.getOrCreateApiClient(serverId) : ApiClient
|
||||
return serverId ? connectionManager.getOrCreateApiClient(serverId) : ApiClient;
|
||||
}
|
||||
|
||||
function showVisualForm() {
|
||||
view.querySelector(".visualLoginForm").classList.remove("hide"), view.querySelector(".manualLoginForm").classList.add("hide")
|
||||
view.querySelector(".visualLoginForm").classList.remove("hide");
|
||||
view.querySelector(".manualLoginForm").classList.add("hide");
|
||||
}
|
||||
|
||||
view.querySelector("#divUsers").addEventListener("click", function(e) {
|
||||
var card = dom.parentWithClass(e.target, "card"),
|
||||
cardContent = card ? card.querySelector(".cardContent") : null;
|
||||
var card = dom.parentWithClass(e.target, "card");
|
||||
var cardContent = card ? card.querySelector(".cardContent") : null;
|
||||
if (cardContent) {
|
||||
var context = view,
|
||||
id = cardContent.getAttribute("data-userid"),
|
||||
name = cardContent.getAttribute("data-username"),
|
||||
haspw = cardContent.getAttribute("data-haspw");
|
||||
"manual" == id ? (context.querySelector("#txtManualName").value = "", showManualForm(context, !0)) : "false" == haspw ? authenticateUserByName(context, getApiClient(), name, "") : (context.querySelector("#txtManualName").value = name, context.querySelector("#txtManualPassword").value = "", showManualForm(context, !0, !0))
|
||||
var context = view;
|
||||
var id = cardContent.getAttribute("data-userid");
|
||||
var name = cardContent.getAttribute("data-username");
|
||||
var haspw = cardContent.getAttribute("data-haspw");
|
||||
if (id === 'manual') {
|
||||
context.querySelector("#txtManualName").value = "";
|
||||
showManualForm(context, true);
|
||||
} else if (haspw == 'false') {
|
||||
authenticateUserByName(context, getApiClient(), name, "");
|
||||
} else {
|
||||
context.querySelector("#txtManualName").value = name;
|
||||
context.querySelector("#txtManualPassword").value = "";
|
||||
showManualForm(context, true, true);
|
||||
}
|
||||
}
|
||||
}), view.querySelector(".manualLoginForm").addEventListener("submit", function(e) {
|
||||
});
|
||||
|
||||
view.querySelector(".manualLoginForm").addEventListener("submit", function(e) {
|
||||
appSettings.enableAutoLogin(view.querySelector(".chkRememberLogin").checked);
|
||||
var apiClient = getApiClient();
|
||||
return authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value), e.preventDefault(), !1
|
||||
}), view.querySelector(".btnForgotPassword").addEventListener("click", function() {
|
||||
Dashboard.navigate("forgotpassword.html")
|
||||
}), view.querySelector(".btnCancel").addEventListener("click", showVisualForm), view.querySelector(".btnManual").addEventListener("click", function() {
|
||||
view.querySelector("#txtManualName").value = "", showManualForm(view, !0)
|
||||
}), view.addEventListener("viewshow", function(e) {
|
||||
authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value);
|
||||
e.preventDefault();
|
||||
return false;
|
||||
});
|
||||
|
||||
view.querySelector(".btnForgotPassword").addEventListener("click", function() {
|
||||
Dashboard.navigate("forgotpassword.html");
|
||||
});
|
||||
|
||||
view.querySelector(".btnCancel").addEventListener("click", showVisualForm);
|
||||
|
||||
view.querySelector(".btnManual").addEventListener("click", function() {
|
||||
view.querySelector("#txtManualName").value = "";
|
||||
showManualForm(view, true);
|
||||
});
|
||||
|
||||
view.addEventListener("viewshow", function(e) {
|
||||
loading.show();
|
||||
if (!appHost.supports('multiserver')) {
|
||||
view.querySelector(".btnSelectServer").classList.add("hide");
|
||||
}
|
||||
var apiClient = getApiClient();
|
||||
apiClient.getPublicUsers().then(function(users) {
|
||||
if (users.length) {
|
||||
|
@ -105,7 +162,7 @@ define(["appSettings", "dom", "connectionManager", "loading", "cardStyle", "emby
|
|||
});
|
||||
|
||||
apiClient.getJSON(apiClient.getUrl("Branding/Configuration")).then(function(options) {
|
||||
view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || ""
|
||||
view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || "";
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -1,29 +1,33 @@
|
|||
define(["datetime", "loading", "apphost", "listViewStyle", "emby-button", "flexStyles"], function(datetime, loading, appHost) {
|
||||
"use strict";
|
||||
return function(view, params) {
|
||||
view.querySelector("#chkDebugLog").addEventListener("change", function() {
|
||||
ApiClient.getServerConfiguration().then(function(config) {
|
||||
config.EnableDebugLevelLogging = view.querySelector("#chkDebugLog").checked, ApiClient.updateServerConfiguration(config)
|
||||
})
|
||||
}), view.addEventListener("viewbeforeshow", function() {
|
||||
view.addEventListener("viewbeforeshow", function() {
|
||||
loading.show();
|
||||
var apiClient = ApiClient;
|
||||
apiClient.getJSON(apiClient.getUrl("System/Logs")).then(function(logs) {
|
||||
var html = "";
|
||||
html += '<div class="paperList">', html += logs.map(function(log) {
|
||||
html += '<div class="paperList">';
|
||||
html += logs.map(function(log) {
|
||||
var logUrl = apiClient.getUrl("System/Logs/Log", {
|
||||
name: log.Name
|
||||
});
|
||||
logUrl += "&api_key=" + apiClient.accessToken();
|
||||
var logHtml = "";
|
||||
logHtml += '<a is="emby-linkbutton" href="' + logUrl + '" target="_blank" class="listItem listItem-border" style="color:inherit;">', logHtml += '<div class="listItemBody two-line">', logHtml += "<h3 class='listItemBodyText'>" + log.Name + "</h3>";
|
||||
var date = datetime.parseISO8601Date(log.DateModified, !0),
|
||||
text = datetime.toLocaleDateString(date);
|
||||
return text += " " + datetime.getDisplayTime(date), logHtml += '<div class="listItemBodyText secondary">' + text + "</div>", logHtml += "</div>", logHtml += "</a>"
|
||||
}).join(""), html += "</div>", view.querySelector(".serverLogs").innerHTML = html, loading.hide()
|
||||
}), apiClient.getServerConfiguration().then(function(config) {
|
||||
view.querySelector("#chkDebugLog").checked = config.EnableDebugLevelLogging
|
||||
})
|
||||
})
|
||||
logHtml += '<a is="emby-linkbutton" href="' + logUrl + '" target="_blank" class="listItem listItem-border" style="color:inherit;">';
|
||||
logHtml += '<div class="listItemBody two-line">';
|
||||
logHtml += "<h3 class='listItemBodyText'>" + log.Name + "</h3>";
|
||||
var date = datetime.parseISO8601Date(log.DateModified, true);
|
||||
var text = datetime.toLocaleDateString(date);
|
||||
text += " " + datetime.getDisplayTime(date);
|
||||
logHtml += '<div class="listItemBodyText secondary">' + text + "</div>";
|
||||
logHtml += "</div>";
|
||||
logHtml += "</a>";
|
||||
return logHtml;
|
||||
}).join("");
|
||||
html += "</div>";
|
||||
view.querySelector(".serverLogs").innerHTML = html;
|
||||
loading.hide();
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
|
@ -31,7 +31,7 @@ define(["apphost", "connectionManager", "listViewStyle", "emby-button"], functio
|
|||
});
|
||||
|
||||
Dashboard.getCurrentUser().then(function(user) {
|
||||
page.querySelector(".headerUser").innerHTML = user.Name;
|
||||
page.querySelector(".headerUsername").innerHTML = user.Name;
|
||||
if (user.Policy.IsAdministrator) {
|
||||
page.querySelector(".adminSection").classList.remove("hide");
|
||||
} else {
|
||||
|
|
|
@ -370,7 +370,7 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
|
|||
if ("osd" === currentVisibleMenu) {
|
||||
hideOsd();
|
||||
} else if (!currentVisibleMenu) {
|
||||
showOsd();
|
||||
showOsd();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1207,7 +1207,6 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
|
|||
dom.addEventListener(document, window.PointerEvent ? "pointermove" : "mousemove", onPointerMove, {
|
||||
passive: true
|
||||
});
|
||||
document.body.classList.add("autoScrollY");
|
||||
showOsd();
|
||||
inputManager.on(window, onInputCommand);
|
||||
dom.addEventListener(window, "keydown", onWindowKeyDown, {
|
||||
|
@ -1228,7 +1227,6 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
|
|||
dom.removeEventListener(document, window.PointerEvent ? "pointermove" : "mousemove", onPointerMove, {
|
||||
passive: true
|
||||
});
|
||||
document.body.classList.remove("autoScrollY");
|
||||
inputManager.off(window, onInputCommand);
|
||||
events.off(playbackManager, "playerchange", onPlayerChange);
|
||||
releaseCurrentPlayer();
|
||||
|
@ -1293,6 +1291,9 @@ define(["playbackManager", "dom", "inputmanager", "datetime", "itemHelper", "med
|
|||
|
||||
if (browser.touch) {
|
||||
dom.addEventListener(view, "dblclick", onDoubleClick, {});
|
||||
} else {
|
||||
var options = { passive: true };
|
||||
dom.addEventListener(view, "dblclick", function () { playbackManager.toggleFullscreen(currentPlayer); }, options);
|
||||
}
|
||||
|
||||
view.querySelector(".buttonMute").addEventListener("click", function () {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue