mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge remote-tracking branch 'upstream/master' into material-icons
This commit is contained in:
commit
cdefae3dee
128 changed files with 5226 additions and 2581 deletions
|
@ -1,38 +1,29 @@
|
|||
define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emby-input", "emby-select", "emby-button"], function($, loading) {
|
||||
define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emby-input", "emby-select", "emby-button"], function ($, loading) {
|
||||
"use strict";
|
||||
|
||||
function loadPage(page, config, languageOptions, systemInfo) {
|
||||
page.querySelector("#txtServerName").value = systemInfo.ServerName;
|
||||
$("#chkAutoRunWebApp", page).checked(config.AutoRunWebApp);
|
||||
|
||||
if (systemInfo.CanLaunchWebBrowser) {
|
||||
page.querySelector("#fldAutoRunWebApp").classList.remove("hide");
|
||||
} else {
|
||||
page.querySelector("#fldAutoRunWebApp").classList.add("hide");
|
||||
}
|
||||
|
||||
page.querySelector("#txtCachePath").value = systemInfo.CachePath || "";
|
||||
$("#txtMetadataPath", page).val(systemInfo.InternalMetadataPath || "");
|
||||
$("#txtMetadataNetworkPath", page).val(systemInfo.MetadataNetworkPath || "");
|
||||
$("#selectLocalizationLanguage", page).html(languageOptions.map(function(language) {
|
||||
return '<option value="' + language.Value + '">' + language.Name + "</option>"
|
||||
$("#selectLocalizationLanguage", page).html(languageOptions.map(function (language) {
|
||||
return '<option value="' + language.Value + '">' + language.Name + "</option>";
|
||||
})).val(config.UICulture);
|
||||
currentLanguage = config.UICulture;
|
||||
if (systemInfo.CanSelfUpdate) {
|
||||
page.querySelector(".fldAutomaticUpdates").classList.remove("hide");
|
||||
} else {
|
||||
page.querySelector(".fldAutomaticUpdates").classList.add("hide");
|
||||
}
|
||||
$("#chkEnableAutomaticServerUpdates", page).checked(config.EnableAutoUpdate);
|
||||
$("#chkEnableAutomaticRestart", page).checked(config.EnableAutomaticRestart);
|
||||
if (systemInfo.CanSelfRestart) {
|
||||
page.querySelector("#fldEnableAutomaticRestart").classList.remove("hide");
|
||||
} else {
|
||||
page.querySelector("#fldEnableAutomaticRestart").classList.add("hide");
|
||||
}
|
||||
if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) {
|
||||
$(".autoUpdatesContainer", page).removeClass("hide");
|
||||
} else {
|
||||
$(".autoUpdatesContainer", page).addClass("hide");
|
||||
}
|
||||
|
||||
loading.hide();
|
||||
}
|
||||
|
||||
|
@ -40,92 +31,94 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
|
|||
loading.show();
|
||||
var form = this;
|
||||
$(form).parents(".page");
|
||||
return ApiClient.getServerConfiguration().then(function(config) {
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
config.ServerName = $("#txtServerName", form).val();
|
||||
config.UICulture = $("#selectLocalizationLanguage", form).val();
|
||||
config.CachePath = form.querySelector("#txtCachePath").value;
|
||||
config.MetadataPath = $("#txtMetadataPath", form).val();
|
||||
config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val();
|
||||
var requiresReload = (config.UICulture !== currentLanguage);
|
||||
var requiresReload = config.UICulture !== currentLanguage;
|
||||
config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked();
|
||||
config.EnableAutomaticRestart = $("#chkEnableAutomaticRestart", form).checked();
|
||||
config.EnableAutoUpdate = $("#chkEnableAutomaticServerUpdates", form).checked();
|
||||
ApiClient.updateServerConfiguration(config).then(function() {
|
||||
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) {
|
||||
brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value;
|
||||
brandingConfig.CustomCss = form.querySelector("#txtCustomCss").value;
|
||||
|
||||
if (currentBrandingOptions && brandingConfig.CustomCss !== currentBrandingOptions.CustomCss) {
|
||||
requiresReload = true;
|
||||
}
|
||||
ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(function() {
|
||||
|
||||
ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(function () {
|
||||
Dashboard.processServerConfigurationUpdateResult();
|
||||
|
||||
if (requiresReload && !AppInfo.isNativeApp) {
|
||||
window.location.reload(true);
|
||||
}
|
||||
});
|
||||
})
|
||||
})
|
||||
}), !1
|
||||
});
|
||||
});
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
var currentBrandingOptions;
|
||||
var currentLanguage;
|
||||
var brandingConfigKey = "branding";
|
||||
|
||||
return function(view, params) {
|
||||
$("#btnSelectCachePath", view).on("click.selectDirectory", function() {
|
||||
require(["directorybrowser"], function(directoryBrowser) {
|
||||
var picker = new directoryBrowser;
|
||||
return function (view, params) {
|
||||
$("#btnSelectCachePath", view).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
callback: function(path) {
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
view.querySelector("#txtCachePath").value = path;
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
validateWriteable: true,
|
||||
header: Globalize.translate("HeaderSelectServerCachePath"),
|
||||
instruction: Globalize.translate("HeaderSelectServerCachePathHelp")
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$("#btnSelectMetadataPath", view).on("click.selectDirectory", function() {
|
||||
require(["directorybrowser"], function(directoryBrowser) {
|
||||
$("#btnSelectMetadataPath", view).on("click.selectDirectory", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
path: $("#txtMetadataPath", view).val(),
|
||||
networkSharePath: $("#txtMetadataNetworkPath", view).val(),
|
||||
callback: function(path, networkPath) {
|
||||
callback: function (path, networkPath) {
|
||||
if (path) {
|
||||
$("#txtMetadataPath", view).val(path);
|
||||
}
|
||||
|
||||
if (networkPath) {
|
||||
$("#txtMetadataNetworkPath", view).val(networkPath);
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
validateWriteable: true,
|
||||
header: Globalize.translate("HeaderSelectMetadataPath"),
|
||||
instruction: Globalize.translate("HeaderSelectMetadataPathHelp"),
|
||||
enableNetworkSharePath: true
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
$(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function() {
|
||||
view.addEventListener("viewshow", function () {
|
||||
var promiseConfig = ApiClient.getServerConfiguration();
|
||||
var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl("Localization/Options"));
|
||||
var promiseSystemInfo = ApiClient.getSystemInfo();
|
||||
Promise.all([promiseConfig, promiseLanguageOptions, promiseSystemInfo]).then(function(responses) {
|
||||
Promise.all([promiseConfig, promiseLanguageOptions, promiseSystemInfo]).then(function (responses) {
|
||||
loadPage(view, responses[0], responses[1], responses[2]);
|
||||
});
|
||||
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(config) {
|
||||
ApiClient.getNamedConfiguration(brandingConfigKey).then(function (config) {
|
||||
currentBrandingOptions = config;
|
||||
view.querySelector("#txtLoginDisclaimer").value = config.LoginDisclaimer || "";
|
||||
view.querySelector("#txtCustomCss").value = config.CustomCss || "";
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -1,53 +1,61 @@
|
|||
define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"], function(loading, libraryMenu, globalize) {
|
||||
define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"], function (loading, libraryMenu, globalize) {
|
||||
"use strict";
|
||||
|
||||
function onSubmit(e) {
|
||||
var form = this;
|
||||
var localAddress = form.querySelector("#txtLocalAddress").value;
|
||||
var enableUpnp = form.querySelector("#chkEnableUpnp").checked;
|
||||
confirmSelections(localAddress, enableUpnp, function() {
|
||||
confirmSelections(localAddress, enableUpnp, function () {
|
||||
var validationResult = getValidationAlert(form);
|
||||
if (validationResult) return void alertText(validationResult);
|
||||
validateHttps(form).then(function() {
|
||||
|
||||
if (validationResult) {
|
||||
alertText(validationResult);
|
||||
return;
|
||||
}
|
||||
|
||||
validateHttps(form).then(function () {
|
||||
loading.show();
|
||||
ApiClient.getServerConfiguration().then(function(config) {
|
||||
config.LocalNetworkSubnets = form.querySelector("#txtLanNetworks").value.split(",").map(function(s) {
|
||||
return s.trim()
|
||||
}).filter(function(s) {
|
||||
return s.length > 0
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
config.LocalNetworkSubnets = form.querySelector("#txtLanNetworks").value.split(",").map(function (s) {
|
||||
return s.trim();
|
||||
}).filter(function (s) {
|
||||
return s.length > 0;
|
||||
});
|
||||
|
||||
config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function(s) {
|
||||
return s.trim()
|
||||
}).filter(function(s) {
|
||||
return s.length > 0
|
||||
config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function (s) {
|
||||
return s.trim();
|
||||
}).filter(function (s) {
|
||||
return s.length > 0;
|
||||
});
|
||||
|
||||
config.IsRemoteIPFilterBlacklist = "blacklist" === form.querySelector("#selectExternalAddressFilterMode").value;
|
||||
config.PublicPort = form.querySelector("#txtPublicPort").value;
|
||||
config.PublicHttpsPort = form.querySelector("#txtPublicHttpsPort").value;
|
||||
var httpsMode = form.querySelector("#selectHttpsMode").value;
|
||||
|
||||
switch (httpsMode) {
|
||||
case "proxy":
|
||||
config.EnableHttps = true;
|
||||
config.RequireHttps = false;
|
||||
config.IsBehindProxy = true;
|
||||
break;
|
||||
|
||||
case "required":
|
||||
config.EnableHttps = true;
|
||||
config.RequireHttps = true;
|
||||
config.IsBehindProxy = false;
|
||||
break;
|
||||
|
||||
case "enabled":
|
||||
config.EnableHttps = true;
|
||||
config.RequireHttps = false;
|
||||
config.IsBehindProxy = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
config.EnableHttps = false;
|
||||
config.RequireHttps = false;
|
||||
config.IsBehindProxy = false;
|
||||
}
|
||||
|
||||
config.HttpsPortNumber = form.querySelector("#txtHttpsPort").value;
|
||||
config.HttpServerPortNumber = form.querySelector("#txtPortNumber").value;
|
||||
config.EnableUPnP = enableUpnp;
|
||||
|
@ -57,47 +65,66 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
|||
config.CertificatePassword = form.querySelector("#txtCertPassword").value || null;
|
||||
config.LocalNetworkAddresses = localAddress ? [localAddress] : [];
|
||||
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse);
|
||||
})
|
||||
})
|
||||
}), e.preventDefault()
|
||||
});
|
||||
});
|
||||
});
|
||||
e.preventDefault();
|
||||
}
|
||||
|
||||
function triggerChange(select) {
|
||||
var evt = document.createEvent("HTMLEvents");
|
||||
evt.initEvent("change", !1, !0), select.dispatchEvent(evt)
|
||||
evt.initEvent("change", false, true);
|
||||
select.dispatchEvent(evt);
|
||||
}
|
||||
|
||||
function getValidationAlert(form) {
|
||||
return form.querySelector("#txtPublicPort").value === form.querySelector("#txtPublicHttpsPort").value ? "The public http and https ports must be different." : form.querySelector("#txtPortNumber").value === form.querySelector("#txtHttpsPort").value ? "The http and https ports must be different." : null
|
||||
if (form.querySelector("#txtPublicPort").value === form.querySelector("#txtPublicHttpsPort").value) {
|
||||
return "The public http and https ports must be different.";
|
||||
}
|
||||
|
||||
if (form.querySelector("#txtPortNumber").value === form.querySelector("#txtHttpsPort").value) {
|
||||
return "The http and https ports must be different.";
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
function validateHttps(form) {
|
||||
var certPath = form.querySelector("#txtCertificatePath").value || null;
|
||||
var httpsMode = form.querySelector("#selectHttpsMode").value;
|
||||
return "enabled" !== httpsMode && "required" !== httpsMode || certPath ? Promise.resolve() : new Promise(function(resolve, reject) {
|
||||
|
||||
if ("enabled" !== httpsMode && "required" !== httpsMode || certPath) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
|
||||
return new Promise(function (resolve, reject) {
|
||||
return alertText({
|
||||
title: globalize.translate("TitleHostingSettings"),
|
||||
text: globalize.translate("HttpsRequiresCert")
|
||||
}).then(reject, reject)
|
||||
})
|
||||
}).then(reject, reject);
|
||||
});
|
||||
}
|
||||
|
||||
function alertText(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["alert"], function(alert) {
|
||||
alert(options).then(resolve, reject)
|
||||
})
|
||||
})
|
||||
return new Promise(function (resolve, reject) {
|
||||
require(["alert"], function (alert) {
|
||||
alert(options).then(resolve, reject);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function confirmSelections(localAddress, enableUpnp, callback) {
|
||||
localAddress || !enableUpnp ? alertText({
|
||||
title: globalize.translate("TitleHostingSettings"),
|
||||
text: globalize.translate("SettingsWarning")
|
||||
}).then(callback) : callback()
|
||||
if (localAddress || !enableUpnp) {
|
||||
alertText({
|
||||
title: globalize.translate("TitleHostingSettings"),
|
||||
text: globalize.translate("SettingsWarning")
|
||||
}).then(callback);
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
}
|
||||
|
||||
return function(view, params) {
|
||||
return function (view, params) {
|
||||
function loadPage(page, config) {
|
||||
page.querySelector("#txtPortNumber").value = config.HttpServerPortNumber;
|
||||
page.querySelector("#txtPublicPort").value = config.PublicPort;
|
||||
|
@ -108,7 +135,17 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
|||
page.querySelector("#selectExternalAddressFilterMode").value = config.IsRemoteIPFilterBlacklist ? "blacklist" : "whitelist";
|
||||
page.querySelector("#chkRemoteAccess").checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess;
|
||||
var selectHttpsMode = page.querySelector("#selectHttpsMode");
|
||||
config.IsBehindProxy ? selectHttpsMode.value = "proxy" : config.RequireHttps ? selectHttpsMode.value = "required" : config.EnableHttps ? selectHttpsMode.value = "enabled" : selectHttpsMode.value = "disabled";
|
||||
|
||||
if (config.IsBehindProxy) {
|
||||
selectHttpsMode.value = "proxy";
|
||||
} else if (config.RequireHttps) {
|
||||
selectHttpsMode.value = "required";
|
||||
} else if (config.EnableHttps) {
|
||||
selectHttpsMode.value = "enabled";
|
||||
} else {
|
||||
selectHttpsMode.value = "disabled";
|
||||
}
|
||||
|
||||
page.querySelector("#txtHttpsPort").value = config.HttpsPortNumber;
|
||||
page.querySelector("#txtBaseUrl").value = config.BaseUrl || "";
|
||||
var txtCertificatePath = page.querySelector("#txtCertificatePath");
|
||||
|
@ -119,27 +156,50 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
|
|||
loading.hide();
|
||||
}
|
||||
|
||||
view.querySelector("#chkRemoteAccess").addEventListener("change", function() {
|
||||
this.checked ? (view.querySelector(".fldExternalAddressFilter").classList.remove("hide"), view.querySelector(".fldExternalAddressFilterMode").classList.remove("hide"), view.querySelector(".fldPublicPort").classList.remove("hide"), view.querySelector(".fldPublicHttpsPort").classList.remove("hide"), view.querySelector(".fldCertificatePath").classList.remove("hide"), view.querySelector(".fldCertPassword").classList.remove("hide"), view.querySelector(".fldHttpsMode").classList.remove("hide"), view.querySelector(".fldEnableUpnp").classList.remove("hide")) : (view.querySelector(".fldExternalAddressFilter").classList.add("hide"), view.querySelector(".fldExternalAddressFilterMode").classList.add("hide"), view.querySelector(".fldPublicPort").classList.add("hide"), view.querySelector(".fldPublicHttpsPort").classList.add("hide"), view.querySelector(".fldCertificatePath").classList.add("hide"), view.querySelector(".fldCertPassword").classList.add("hide"), view.querySelector(".fldHttpsMode").classList.add("hide"), view.querySelector(".fldEnableUpnp").classList.add("hide"))
|
||||
}), view.querySelector("#btnSelectCertPath").addEventListener("click", function() {
|
||||
require(["directorybrowser"], function(directoryBrowser) {
|
||||
var picker = new directoryBrowser;
|
||||
view.querySelector("#chkRemoteAccess").addEventListener("change", function () {
|
||||
if (this.checked) {
|
||||
view.querySelector(".fldExternalAddressFilter").classList.remove("hide");
|
||||
view.querySelector(".fldExternalAddressFilterMode").classList.remove("hide");
|
||||
view.querySelector(".fldPublicPort").classList.remove("hide");
|
||||
view.querySelector(".fldPublicHttpsPort").classList.remove("hide");
|
||||
view.querySelector(".fldCertificatePath").classList.remove("hide");
|
||||
view.querySelector(".fldCertPassword").classList.remove("hide");
|
||||
view.querySelector(".fldHttpsMode").classList.remove("hide");
|
||||
view.querySelector(".fldEnableUpnp").classList.remove("hide");
|
||||
} else {
|
||||
view.querySelector(".fldExternalAddressFilter").classList.add("hide");
|
||||
view.querySelector(".fldExternalAddressFilterMode").classList.add("hide");
|
||||
view.querySelector(".fldPublicPort").classList.add("hide");
|
||||
view.querySelector(".fldPublicHttpsPort").classList.add("hide");
|
||||
view.querySelector(".fldCertificatePath").classList.add("hide");
|
||||
view.querySelector(".fldCertPassword").classList.add("hide");
|
||||
view.querySelector(".fldHttpsMode").classList.add("hide");
|
||||
view.querySelector(".fldEnableUpnp").classList.add("hide");
|
||||
}
|
||||
});
|
||||
view.querySelector("#btnSelectCertPath").addEventListener("click", function () {
|
||||
require(["directorybrowser"], function (directoryBrowser) {
|
||||
var picker = new directoryBrowser();
|
||||
picker.show({
|
||||
includeFiles: !0,
|
||||
includeDirectories: !0,
|
||||
callback: function(path) {
|
||||
path && (view.querySelector("#txtCertificatePath").value = path), picker.close()
|
||||
includeFiles: true,
|
||||
includeDirectories: true,
|
||||
callback: function (path) {
|
||||
if (path) {
|
||||
view.querySelector("#txtCertificatePath").value = path;
|
||||
}
|
||||
|
||||
picker.close();
|
||||
},
|
||||
header: globalize.translate("HeaderSelectCertificatePath")
|
||||
})
|
||||
})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
view.querySelector(".dashboardHostingForm").addEventListener("submit", onSubmit), view.addEventListener("viewshow", function(e) {
|
||||
view.querySelector(".dashboardHostingForm").addEventListener("submit", onSubmit);
|
||||
view.addEventListener("viewshow", function (e) {
|
||||
loading.show();
|
||||
ApiClient.getServerConfiguration().then(function(config) {
|
||||
ApiClient.getServerConfiguration().then(function (config) {
|
||||
loadPage(view, config);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue