';
html += '
';
html += '
';
html += '
';
var imgUrl;
+
if (user.PrimaryImageTag) {
imgUrl = apiClient.getUserImageUrl(user.Id, {
width: 300,
@@ -95,6 +116,7 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
imgUrl = "assets/img/avatar.png";
html += '
';
}
+
html += "
";
html += "
";
html += '";
html += "";
}
+
context.querySelector("#divUsers").innerHTML = html;
}
- return function(view, params) {
+ return function (view, params) {
function getApiClient() {
var serverId = params.serverid;
- return serverId ? connectionManager.getOrCreateApiClient(serverId) : ApiClient;
+
+ if (serverId) {
+ return connectionManager.getOrCreateApiClient(serverId);
+ }
+
+ return ApiClient;
}
function showVisualForm() {
@@ -122,14 +150,16 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
});
}
- view.querySelector("#divUsers").addEventListener("click", function(e) {
+ view.querySelector("#divUsers").addEventListener("click", function (e) {
var card = dom.parentWithClass(e.target, "card");
var cardContent = card ? card.querySelector(".cardContent") : null;
+
if (cardContent) {
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);
@@ -142,33 +172,30 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
}
}
});
-
- view.querySelector(".manualLoginForm").addEventListener("submit", function(e) {
+ view.querySelector(".manualLoginForm").addEventListener("submit", function (e) {
appSettings.enableAutoLogin(view.querySelector(".chkRememberLogin").checked);
var apiClient = getApiClient();
authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value);
e.preventDefault();
return false;
});
-
- view.querySelector(".btnForgotPassword").addEventListener("click", function() {
+ view.querySelector(".btnForgotPassword").addEventListener("click", function () {
Dashboard.navigate("forgotpassword.html");
});
-
view.querySelector(".btnCancel").addEventListener("click", showVisualForm);
-
- view.querySelector(".btnManual").addEventListener("click", function() {
+ view.querySelector(".btnManual").addEventListener("click", function () {
view.querySelector("#txtManualName").value = "";
showManualForm(view, true);
});
-
- view.addEventListener("viewshow", function(e) {
+ 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) {
+ apiClient.getPublicUsers().then(function (users) {
if (users.length) {
showVisualForm();
loadUserList(view, apiClient, users);
@@ -176,13 +203,12 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
view.querySelector("#txtManualName").value = "";
showManualForm(view, false, false);
}
- }).catch().then(function() {
+ }).catch().then(function () {
loading.hide();
});
-
- apiClient.getJSON(apiClient.getUrl("Branding/Configuration")).then(function(options) {
+ apiClient.getJSON(apiClient.getUrl("Branding/Configuration")).then(function (options) {
view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || "";
});
});
- }
+ };
});
diff --git a/src/controllers/dashboard/general.js b/src/controllers/dashboard/general.js
index 34b275ba27..7eed352329 100644
--- a/src/controllers/dashboard/general.js
+++ b/src/controllers/dashboard/general.js
@@ -1,19 +1,21 @@
-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 '
"
+ $("#selectLocalizationLanguage", page).html(languageOptions.map(function (language) {
+ return '
";
})).val(config.UICulture);
currentLanguage = config.UICulture;
if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) {
@@ -21,6 +23,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
} else {
$(".autoUpdatesContainer", page).addClass("hide");
}
+
loading.hide();
}
@@ -28,90 +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();
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 || "";
});
});
- }
+ };
});
diff --git a/src/controllers/dashboard/networking.js b/src/controllers/dashboard/networking.js
index a6e42967a4..b9f990d629 100644
--- a/src/controllers/dashboard/networking.js
+++ b/src/controllers/dashboard/networking.js
@@ -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);
});
});
- }
+ };
});
diff --git a/src/scripts/librarymenu.js b/src/scripts/librarymenu.js
index e3d6c8d190..63827fd698 100644
--- a/src/scripts/librarymenu.js
+++ b/src/scripts/librarymenu.js
@@ -1,6 +1,38 @@
define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "viewManager", "libraryBrowser", "appRouter", "apphost", "playbackManager", "browser", "globalize", "scripts/imagehelper", "paper-icon-button-light", "material-icons", "scrollStyles", "flexStyles"], function (dom, layoutManager, inputManager, connectionManager, events, viewManager, libraryBrowser, appRouter, appHost, playbackManager, browser, globalize, imageHelper) {
"use strict";
+ function renderHeader() {
+ var html = "";
+ html += '";
+ html += '";
+
+ skinHeader.classList.add("skinHeader-withBackground");
+ skinHeader.classList.add("skinHeader-blurred");
+ skinHeader.innerHTML = html;
+
+ headerHomeButton = skinHeader.querySelector(".headerHomeButton");
+ headerUserButton = skinHeader.querySelector(".headerUserButton");
+ headerCastButton = skinHeader.querySelector(".headerCastButton");
+ headerSearchButton = skinHeader.querySelector(".headerSearchButton");
+
+ lazyLoadViewMenuBarImages();
+ bindMenuEvents();
+ }
+
function getCurrentApiClient() {
if (currentUser && currentUser.localUser) {
return connectionManager.getApiClient(currentUser.localUser.ServerId);
@@ -840,37 +872,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
updateLibraryNavLinks(page);
});
- (function () {
- var html = "";
- html += '";
- html += '";
-
- skinHeader.classList.add("skinHeader-withBackground");
- skinHeader.classList.add("skinHeader-blurred");
- skinHeader.innerHTML = html;
-
- headerHomeButton = skinHeader.querySelector(".headerHomeButton");
- headerUserButton = skinHeader.querySelector(".headerUserButton");
- headerCastButton = skinHeader.querySelector(".headerCastButton");
- headerSearchButton = skinHeader.querySelector(".headerSearchButton");
-
- lazyLoadViewMenuBarImages();
- bindMenuEvents();
- })();
+ renderHeader();
events.on(connectionManager, "localusersignedin", function (e, user) {
currentDrawerType = null;