1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge pull request #722 from grafixeyehero/Deminify-part-4

Deminify part 4
This commit is contained in:
Vasily 2020-01-27 19:26:44 +03:00 committed by GitHub
commit e85ea5fe1c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 596 additions and 298 deletions

View file

@ -1,37 +1,44 @@
define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionseditor/libraryoptionseditor", "emby-toggle", "emby-input", "emby-select", "paper-icon-button-light", "listViewStyle", "formDialogStyle", "emby-button", "flexStyles"], function(loading, dialogHelper, dom, $, libraryoptionseditor) { define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionseditor/libraryoptionseditor", "emby-toggle", "emby-input", "emby-select", "paper-icon-button-light", "listViewStyle", "formDialogStyle", "emby-button", "flexStyles"], function (loading, dialogHelper, dom, $, libraryoptionseditor) {
"use strict"; "use strict";
function onAddLibrary() { function onAddLibrary() {
if (isCreating) return false; if (isCreating) {
return false;
}
if (pathInfos.length == 0) { if (pathInfos.length == 0) {
require(["alert"], function(alert) { require(["alert"], function (alert) {
alert({ alert({
text: Globalize.translate("PleaseAddAtLeastOneFolder"), text: Globalize.translate("PleaseAddAtLeastOneFolder"),
type: "error" type: "error"
})
}); });
});
return false; return false;
} }
isCreating = true; isCreating = true;
loading.show(); loading.show();
var dlg = dom.parentWithClass(this, "dlg-librarycreator"); var dlg = dom.parentWithClass(this, "dlg-librarycreator");
var name = $("#txtValue", dlg).val(); var name = $("#txtValue", dlg).val();
var type = $("#selectCollectionType", dlg).val(); var type = $("#selectCollectionType", dlg).val();
if (type == "mixed") type = null;
if (type == "mixed") {
type = null;
}
var libraryOptions = libraryoptionseditor.getLibraryOptions(dlg.querySelector(".libraryOptions")); var libraryOptions = libraryoptionseditor.getLibraryOptions(dlg.querySelector(".libraryOptions"));
libraryOptions.PathInfos = pathInfos; libraryOptions.PathInfos = pathInfos;
ApiClient.addVirtualFolder(name, type, currentOptions.refresh, libraryOptions).then(function() { ApiClient.addVirtualFolder(name, type, currentOptions.refresh, libraryOptions).then(function () {
hasChanges = true; hasChanges = true;
isCreating = false; isCreating = false;
loading.hide(); loading.hide();
dialogHelper.close(dlg); dialogHelper.close(dlg);
}, function() { }, function () {
require(["toast"], function(toast) { require(["toast"], function (toast) {
toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder")); toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
}); });
isCreating = false; isCreating = false;
loading.hide(); loading.hide();
}); });
@ -39,16 +46,17 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
} }
function getCollectionTypeOptionsHtml(collectionTypeOptions) { function getCollectionTypeOptionsHtml(collectionTypeOptions) {
return collectionTypeOptions.map(function(i) { return collectionTypeOptions.map(function (i) {
return '<option value="' + i.value + '">' + i.name + "</option>"; return '<option value="' + i.value + '">' + i.name + "</option>";
}).join(""); }).join("");
} }
function initEditor(page, collectionTypeOptions) { function initEditor(page, collectionTypeOptions) {
$("#selectCollectionType", page).html(getCollectionTypeOptionsHtml(collectionTypeOptions)).val("").on("change", function() { $("#selectCollectionType", page).html(getCollectionTypeOptionsHtml(collectionTypeOptions)).val("").on("change", function () {
var value = this.value; var value = this.value;
var dlg = $(this).parents(".dialog")[0]; var dlg = $(this).parents(".dialog")[0];
libraryoptionseditor.setContentType(dlg.querySelector(".libraryOptions"), value == "mixed" ? "" : value); libraryoptionseditor.setContentType(dlg.querySelector(".libraryOptions"), value == "mixed" ? "" : value);
if (value) { if (value) {
dlg.querySelector(".libraryOptions").classList.remove("hide"); dlg.querySelector(".libraryOptions").classList.remove("hide");
} else { } else {
@ -57,17 +65,17 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
if (value != "mixed") { if (value != "mixed") {
var index = this.selectedIndex; var index = this.selectedIndex;
if (index != -1) { if (index != -1) {
var name = this.options[index].innerHTML.replace("*", "").replace("&amp;", "&"); var name = this.options[index].innerHTML.replace("*", "").replace("&amp;", "&");
$("#txtValue", dlg).val(name); $("#txtValue", dlg).val(name);
var folderOption = collectionTypeOptions.filter(function(i) { var folderOption = collectionTypeOptions.filter(function (i) {
return i.value == value return i.value == value;
})[0]; })[0];
$(".collectionTypeFieldDescription", dlg).html(folderOption.message || "") $(".collectionTypeFieldDescription", dlg).html(folderOption.message || "");
} }
} }
}); });
page.querySelector(".btnAddFolder").addEventListener("click", onAddButtonClick); page.querySelector(".btnAddFolder").addEventListener("click", onAddButtonClick);
page.querySelector(".btnSubmit").addEventListener("click", onAddLibrary); page.querySelector(".btnSubmit").addEventListener("click", onAddLibrary);
page.querySelector(".folderList").addEventListener("click", onRemoveClick); page.querySelector(".folderList").addEventListener("click", onRemoveClick);
@ -81,40 +89,65 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
function onAddButtonClick() { function onAddButtonClick() {
var page = dom.parentWithClass(this, "dlg-librarycreator"); var page = dom.parentWithClass(this, "dlg-librarycreator");
require(["directorybrowser"], function(directoryBrowser) {
var picker = new directoryBrowser; require(["directorybrowser"], function (directoryBrowser) {
var picker = new directoryBrowser();
picker.show({ picker.show({
enableNetworkSharePath: true, enableNetworkSharePath: true,
callback: function(path, networkSharePath) { callback: function (path, networkSharePath) {
path && addMediaLocation(page, path, networkSharePath); if (path) {
addMediaLocation(page, path, networkSharePath);
}
picker.close(); picker.close();
} }
}) });
}) });
} }
function getFolderHtml(pathInfo, index) { function getFolderHtml(pathInfo, index) {
var html = ""; var html = "";
return html += '<div class="listItem listItem-border lnkPath" style="padding-left:.5em;">', html += '<div class="' + (pathInfo.NetworkPath ? "listItemBody two-line" : "listItemBody") + '">', html += '<div class="listItemBodyText">' + pathInfo.Path + "</div>", pathInfo.NetworkPath && (html += '<div class="listItemBodyText secondary">' + pathInfo.NetworkPath + "</div>"), html += "</div>", html += '<button type="button" is="paper-icon-button-light"" class="listItemButton btnRemovePath" data-index="' + index + '"><i class="md-icon">remove_circle</i></button>', html += "</div>" html += '<div class="listItem listItem-border lnkPath" style="padding-left:.5em;">';
html += '<div class="' + (pathInfo.NetworkPath ? "listItemBody two-line" : "listItemBody") + '">';
html += '<div class="listItemBodyText">' + pathInfo.Path + "</div>";
if (pathInfo.NetworkPath) {
html += '<div class="listItemBodyText secondary">' + pathInfo.NetworkPath + "</div>";
}
html += "</div>";
html += '<button type="button" is="paper-icon-button-light"" class="listItemButton btnRemovePath" data-index="' + index + '"><i class="md-icon">remove_circle</i></button>';
html += "</div>";
return html;
} }
function renderPaths(page) { function renderPaths(page) {
var foldersHtml = pathInfos.map(getFolderHtml).join(""); var foldersHtml = pathInfos.map(getFolderHtml).join("");
var folderList = page.querySelector(".folderList"); var folderList = page.querySelector(".folderList");
folderList.innerHTML = foldersHtml; folderList.innerHTML = foldersHtml;
foldersHtml ? folderList.classList.remove("hide") : folderList.classList.add("hide");
if (foldersHtml) {
folderList.classList.remove("hide");
} else {
folderList.classList.add("hide");
}
} }
function addMediaLocation(page, path, networkSharePath) { function addMediaLocation(page, path, networkSharePath) {
var pathLower = path.toLowerCase(); var pathLower = path.toLowerCase();
var pathFilter = pathInfos.filter(function(p) { var pathFilter = pathInfos.filter(function (p) {
return p.Path.toLowerCase() == pathLower; return p.Path.toLowerCase() == pathLower;
}); });
if (!pathFilter.length) { if (!pathFilter.length) {
var pathInfo = { var pathInfo = {
Path: path Path: path
}; };
networkSharePath && (pathInfo.NetworkPath = networkSharePath);
if (networkSharePath) {
pathInfo.NetworkPath = networkSharePath;
}
pathInfos.push(pathInfo); pathInfos.push(pathInfo);
renderPaths(page); renderPaths(page);
} }
@ -125,7 +158,7 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
var index = parseInt(button.getAttribute("data-index")); var index = parseInt(button.getAttribute("data-index"));
var location = pathInfos[index].Path; var location = pathInfos[index].Path;
var locationLower = location.toLowerCase(); var locationLower = location.toLowerCase();
pathInfos = pathInfos.filter(function(p) { pathInfos = pathInfos.filter(function (p) {
return p.Path.toLowerCase() != locationLower; return p.Path.toLowerCase() != locationLower;
}); });
renderPaths(dom.parentWithClass(button, "dlg-librarycreator")); renderPaths(dom.parentWithClass(button, "dlg-librarycreator"));
@ -136,21 +169,22 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
} }
function initLibraryOptions(dlg) { function initLibraryOptions(dlg) {
libraryoptionseditor.embed(dlg.querySelector(".libraryOptions")).then(function() { libraryoptionseditor.embed(dlg.querySelector(".libraryOptions")).then(function () {
$("#selectCollectionType", dlg).trigger("change"); $("#selectCollectionType", dlg).trigger("change");
onToggleAdvancedChange.call(dlg.querySelector(".chkAdvanced")); onToggleAdvancedChange.call(dlg.querySelector(".chkAdvanced"));
}) });
} }
function editor() { function editor() {
this.show = function(options) { this.show = function (options) {
return new Promise(function(resolve, reject) { return new Promise(function (resolve, reject) {
currentOptions = options; currentOptions = options;
currentResolve = resolve; currentResolve = resolve;
hasChanges = false; hasChanges = false;
var xhr = new XMLHttpRequest; var xhr = new XMLHttpRequest();
xhr.open("GET", "components/medialibrarycreator/medialibrarycreator.template.html", true); xhr.open("GET", "components/medialibrarycreator/medialibrarycreator.template.html", true);
xhr.onload = function(e) {
xhr.onload = function (e) {
var template = this.response; var template = this.response;
var dlg = dialogHelper.createDialog({ var dlg = dialogHelper.createDialog({
size: "medium-tall", size: "medium-tall",
@ -166,24 +200,23 @@ define(["loading", "dialogHelper", "dom", "jQuery", "components/libraryoptionsed
initEditor(dlg, options.collectionTypeOptions); initEditor(dlg, options.collectionTypeOptions);
dlg.addEventListener("close", onDialogClosed); dlg.addEventListener("close", onDialogClosed);
dialogHelper.open(dlg); dialogHelper.open(dlg);
dlg.querySelector(".btnCancel").addEventListener("click", function() { dlg.querySelector(".btnCancel").addEventListener("click", function () {
dialogHelper.close(dlg) dialogHelper.close(dlg);
}); });
pathInfos = []; pathInfos = [];
renderPaths(dlg); renderPaths(dlg);
initLibraryOptions(dlg); initLibraryOptions(dlg);
}; };
xhr.send(); xhr.send();
}); });
} };
} }
var pathInfos = []; var pathInfos = [];
var currentResolve; var currentResolve;
var currentOptions; var currentOptions;
var hasChanges = false; var hasChanges = false;
var isCreating = false; var isCreating = false;
return editor;
return editor
}); });

View file

@ -1,22 +1,22 @@
define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionseditor/libraryoptionseditor", "emby-button", "listViewStyle", "paper-icon-button-light", "formDialogStyle", "emby-toggle", "flexStyles"], function(jQuery, loading, dialogHelper, dom, libraryoptionseditor) { define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionseditor/libraryoptionseditor", "emby-button", "listViewStyle", "paper-icon-button-light", "formDialogStyle", "emby-toggle", "flexStyles"], function (jQuery, loading, dialogHelper, dom, libraryoptionseditor) {
"use strict"; "use strict";
function onEditLibrary() { function onEditLibrary() {
if (isCreating) return false; if (isCreating) {
return false;
}
isCreating = true; isCreating = true;
loading.show(); loading.show();
var dlg = dom.parentWithClass(this, "dlg-libraryeditor"); var dlg = dom.parentWithClass(this, "dlg-libraryeditor");
var libraryOptions = libraryoptionseditor.getLibraryOptions(dlg.querySelector(".libraryOptions")); var libraryOptions = libraryoptionseditor.getLibraryOptions(dlg.querySelector(".libraryOptions"));
libraryOptions = Object.assign(currentOptions.library.LibraryOptions || {}, libraryOptions); libraryOptions = Object.assign(currentOptions.library.LibraryOptions || {}, libraryOptions);
ApiClient.updateVirtualFolderOptions(currentOptions.library.ItemId, libraryOptions).then(function () {
ApiClient.updateVirtualFolderOptions(currentOptions.library.ItemId, libraryOptions).then(function() {
hasChanges = true; hasChanges = true;
isCreating = false; isCreating = false;
loading.hide(); loading.hide();
dialogHelper.close(dlg); dialogHelper.close(dlg);
}, function() { }, function () {
isCreating = false; isCreating = false;
loading.hide(); loading.hide();
}); });
@ -26,11 +26,11 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
function addMediaLocation(page, path, networkSharePath) { function addMediaLocation(page, path, networkSharePath) {
var virtualFolder = currentOptions.library; var virtualFolder = currentOptions.library;
var refreshAfterChange = currentOptions.refresh; var refreshAfterChange = currentOptions.refresh;
ApiClient.addMediaPath(virtualFolder.Name, path, networkSharePath, refreshAfterChange).then(function() { ApiClient.addMediaPath(virtualFolder.Name, path, networkSharePath, refreshAfterChange).then(function () {
hasChanges = true; hasChanges = true;
refreshLibraryFromServer(page); refreshLibraryFromServer(page);
}, function() { }, function () {
require(["toast"], function(toast) { require(["toast"], function (toast) {
toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder")); toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
}); });
}); });
@ -41,11 +41,11 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
ApiClient.updateMediaPath(virtualFolder.Name, { ApiClient.updateMediaPath(virtualFolder.Name, {
Path: path, Path: path,
NetworkPath: networkSharePath NetworkPath: networkSharePath
}).then(function() { }).then(function () {
hasChanges = true; hasChanges = true;
refreshLibraryFromServer(page); refreshLibraryFromServer(page);
}, function() { }, function () {
require(["toast"], function(toast) { require(["toast"], function (toast) {
toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder")); toast(Globalize.translate("ErrorAddingMediaPathToVirtualFolder"));
}); });
}); });
@ -54,19 +54,20 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
function onRemoveClick(btnRemovePath, location) { function onRemoveClick(btnRemovePath, location) {
var button = btnRemovePath; var button = btnRemovePath;
var virtualFolder = currentOptions.library; var virtualFolder = currentOptions.library;
require(["confirm"], function(confirm) {
require(["confirm"], function (confirm) {
confirm({ confirm({
title: Globalize.translate("HeaderRemoveMediaLocation"), title: Globalize.translate("HeaderRemoveMediaLocation"),
text: Globalize.translate("MessageConfirmRemoveMediaLocation"), text: Globalize.translate("MessageConfirmRemoveMediaLocation"),
confirmText: Globalize.translate("ButtonDelete"), confirmText: Globalize.translate("ButtonDelete"),
primary: "delete" primary: "delete"
}).then(function() { }).then(function () {
var refreshAfterChange = currentOptions.refresh; var refreshAfterChange = currentOptions.refresh;
ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).then(function() { ApiClient.removeMediaPath(virtualFolder.Name, location, refreshAfterChange).then(function () {
hasChanges = true; hasChanges = true;
refreshLibraryFromServer(dom.parentWithClass(button, "dlg-libraryeditor")); refreshLibraryFromServer(dom.parentWithClass(button, "dlg-libraryeditor"));
}, function() { }, function () {
require(["toast"], function(toast) { require(["toast"], function (toast) {
toast(Globalize.translate("DefaultErrorMessage")); toast(Globalize.translate("DefaultErrorMessage"));
}); });
}); });
@ -76,13 +77,19 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
function onListItemClick(e) { function onListItemClick(e) {
var listItem = dom.parentWithClass(e.target, "listItem"); var listItem = dom.parentWithClass(e.target, "listItem");
if (listItem) { if (listItem) {
var index = parseInt(listItem.getAttribute("data-index")); var index = parseInt(listItem.getAttribute("data-index"));
var pathInfos = (currentOptions.library.LibraryOptions || {}).PathInfos || []; var pathInfos = (currentOptions.library.LibraryOptions || {}).PathInfos || [];
var pathInfo = null == index ? {} : pathInfos[index] || {}; var pathInfo = null == index ? {} : pathInfos[index] || {};
var originalPath = pathInfo.Path || (null == index ? null : currentOptions.library.Locations[index]); var originalPath = pathInfo.Path || (null == index ? null : currentOptions.library.Locations[index]);
var btnRemovePath = dom.parentWithClass(e.target, "btnRemovePath"); var btnRemovePath = dom.parentWithClass(e.target, "btnRemovePath");
if (btnRemovePath) return void onRemoveClick(btnRemovePath, originalPath);
if (btnRemovePath) {
onRemoveClick(btnRemovePath, originalPath);
return;
}
showDirectoryBrowser(dom.parentWithClass(listItem, "dlg-libraryeditor"), originalPath, pathInfo.NetworkPath); showDirectoryBrowser(dom.parentWithClass(listItem, "dlg-libraryeditor"), originalPath, pathInfo.NetworkPath);
} }
} }
@ -94,9 +101,11 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
html += '<h3 class="listItemBodyText">'; html += '<h3 class="listItemBodyText">';
html += pathInfo.Path; html += pathInfo.Path;
html += "</h3>"; html += "</h3>";
if (pathInfo.NetworkPath) { if (pathInfo.NetworkPath) {
html += '<div class="listItemBodyText secondary">' + pathInfo.NetworkPath + "</div>"; html += '<div class="listItemBodyText secondary">' + pathInfo.NetworkPath + "</div>";
} }
html += "</div>"; html += "</div>";
html += '<button type="button" is="paper-icon-button-light" class="listItemButton btnRemovePath" data-index="' + index + '"><i class="md-icon">remove_circle</i></button>'; html += '<button type="button" is="paper-icon-button-light" class="listItemButton btnRemovePath" data-index="' + index + '"><i class="md-icon">remove_circle</i></button>';
html += "</div>"; html += "</div>";
@ -104,10 +113,11 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
} }
function refreshLibraryFromServer(page) { function refreshLibraryFromServer(page) {
ApiClient.getVirtualFolders().then(function(result) { ApiClient.getVirtualFolders().then(function (result) {
var library = result.filter(function(f) { var library = result.filter(function (f) {
return f.Name === currentOptions.library.Name return f.Name === currentOptions.library.Name;
})[0]; })[0];
if (library) { if (library) {
currentOptions.library = library; currentOptions.library = library;
renderLibrary(page, currentOptions); renderLibrary(page, currentOptions);
@ -117,16 +127,21 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
function renderLibrary(page, options) { function renderLibrary(page, options) {
var pathInfos = (options.library.LibraryOptions || {}).PathInfos || []; var pathInfos = (options.library.LibraryOptions || {}).PathInfos || [];
pathInfos.length || (pathInfos = options.library.Locations.map(function(p) {
if (!pathInfos.length) {
pathInfos = options.library.Locations.map(function (p) {
return { return {
Path: p Path: p
};
});
} }
}));
if (options.library.CollectionType === 'boxsets') { if (options.library.CollectionType === 'boxsets') {
page.querySelector(".folders").classList.add("hide"); page.querySelector(".folders").classList.add("hide");
} else { } else {
page.querySelector(".folders").classList.remove("hide"); page.querySelector(".folders").classList.remove("hide");
} }
page.querySelector(".folderList").innerHTML = pathInfos.map(getFolderHtml).join(""); page.querySelector(".folderList").innerHTML = pathInfos.map(getFolderHtml).join("");
} }
@ -135,24 +150,31 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
} }
function showDirectoryBrowser(context, originalPath, networkPath) { function showDirectoryBrowser(context, originalPath, networkPath) {
require(["directorybrowser"], function(directoryBrowser) { require(["directorybrowser"], function (directoryBrowser) {
var picker = new directoryBrowser; var picker = new directoryBrowser();
picker.show({ picker.show({
enableNetworkSharePath: !0, enableNetworkSharePath: true,
pathReadOnly: null != originalPath, pathReadOnly: null != originalPath,
path: originalPath, path: originalPath,
networkSharePath: networkPath, networkSharePath: networkPath,
callback: function(path, networkSharePath) { callback: function (path, networkSharePath) {
path && (originalPath ? updateMediaLocation(context, originalPath, networkSharePath) : addMediaLocation(context, path, networkSharePath)); if (path) {
if (originalPath) {
updateMediaLocation(context, originalPath, networkSharePath);
} else {
addMediaLocation(context, path, networkSharePath);
}
}
picker.close(); picker.close();
} }
}) });
}) });
} }
function onToggleAdvancedChange() { function onToggleAdvancedChange() {
var dlg = dom.parentWithClass(this, "dlg-libraryeditor"); var dlg = dom.parentWithClass(this, "dlg-libraryeditor");
libraryoptionseditor.setAdvancedVisible(dlg.querySelector(".libraryOptions"), this.checked) libraryoptionseditor.setAdvancedVisible(dlg.querySelector(".libraryOptions"), this.checked);
} }
function initEditor(dlg, options) { function initEditor(dlg, options) {
@ -161,7 +183,7 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
dlg.querySelector(".folderList").addEventListener("click", onListItemClick); dlg.querySelector(".folderList").addEventListener("click", onListItemClick);
dlg.querySelector(".chkAdvanced").addEventListener("change", onToggleAdvancedChange); dlg.querySelector(".chkAdvanced").addEventListener("change", onToggleAdvancedChange);
dlg.querySelector(".btnSubmit").addEventListener("click", onEditLibrary); dlg.querySelector(".btnSubmit").addEventListener("click", onEditLibrary);
libraryoptionseditor.embed(dlg.querySelector(".libraryOptions"), options.library.CollectionType, options.library.LibraryOptions).then(function() { libraryoptionseditor.embed(dlg.querySelector(".libraryOptions"), options.library.CollectionType, options.library.LibraryOptions).then(function () {
onToggleAdvancedChange.call(dlg.querySelector(".chkAdvanced")); onToggleAdvancedChange.call(dlg.querySelector(".chkAdvanced"));
}); });
} }
@ -171,14 +193,15 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
} }
function editor() { function editor() {
this.show = function(options) { this.show = function (options) {
var deferred = jQuery.Deferred(); var deferred = jQuery.Deferred();
currentOptions = options; currentOptions = options;
currentDeferred = deferred; currentDeferred = deferred;
hasChanges = false; hasChanges = false;
var xhr = new XMLHttpRequest; var xhr = new XMLHttpRequest();
xhr.open("GET", "components/medialibraryeditor/medialibraryeditor.template.html", true); xhr.open("GET", "components/medialibraryeditor/medialibraryeditor.template.html", true);
xhr.onload = function(e) {
xhr.onload = function (e) {
var template = this.response; var template = this.response;
var dlg = dialogHelper.createDialog({ var dlg = dialogHelper.createDialog({
size: "medium-tall", size: "medium-tall",
@ -195,21 +218,20 @@ define(["jQuery", "loading", "dialogHelper", "dom", "components/libraryoptionsed
initEditor(dlg, options); initEditor(dlg, options);
dlg.addEventListener("close", onDialogClosed); dlg.addEventListener("close", onDialogClosed);
dialogHelper.open(dlg); dialogHelper.open(dlg);
dlg.querySelector(".btnCancel").addEventListener("click", function() { dlg.querySelector(".btnCancel").addEventListener("click", function () {
dialogHelper.close(dlg); dialogHelper.close(dlg);
}); });
refreshLibraryFromServer(dlg); refreshLibraryFromServer(dlg);
}; };
xhr.send(); xhr.send();
return deferred.promise(); return deferred.promise();
} };
} }
var currentDeferred; var currentDeferred;
var currentOptions; var currentOptions;
var hasChanges = false; var hasChanges = false;
var isCreating = false; var isCreating = false;
return editor; return editor;
}); });

View file

@ -1,6 +1,7 @@
define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser, dom) { define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function (browser, dom) {
"use strict"; "use strict";
return function(options) {
return function (options) {
function getTouches(e) { function getTouches(e) {
return e.changedTouches || e.targetTouches || e.touches; return e.changedTouches || e.targetTouches || e.touches;
} }
@ -9,14 +10,13 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
options.target.classList.remove("transition"); options.target.classList.remove("transition");
var touches = getTouches(e); var touches = getTouches(e);
var touch = touches[0] || {}; var touch = touches[0] || {};
menuTouchStartX = touch.clientX; menuTouchStartX = touch.clientX;
menuTouchStartY = touch.clientY; menuTouchStartY = touch.clientY;
menuTouchStartTime = (new Date).getTime(); menuTouchStartTime = new Date().getTime();
} }
function setVelocity(deltaX) { function setVelocity(deltaX) {
var time = (new Date).getTime() - (menuTouchStartTime || 0); var time = new Date().getTime() - (menuTouchStartTime || 0);
velocity = Math.abs(deltaX) / time; velocity = Math.abs(deltaX) / time;
} }
@ -28,21 +28,36 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
var endY = touch.clientY || 0; var endY = touch.clientY || 0;
var deltaX = endX - (menuTouchStartX || 0); var deltaX = endX - (menuTouchStartX || 0);
var deltaY = endY - (menuTouchStartY || 0); var deltaY = endY - (menuTouchStartY || 0);
setVelocity(deltaX), isOpen && 1 !== dragMode && deltaX > 0 && (dragMode = 2), 0 === dragMode && (!isOpen || Math.abs(deltaX) >= 10) && Math.abs(deltaY) < 5 ? (dragMode = 1, scrollContainer.addEventListener("scroll", disableEvent), self.showMask()) : 0 === dragMode && Math.abs(deltaY) >= 5 && (dragMode = 2), 1 === dragMode && (newPos = currentPos + deltaX, self.changeMenuPos()) setVelocity(deltaX);
if (isOpen && 1 !== dragMode && deltaX > 0) {
dragMode = 2;
}
if (0 === dragMode && (!isOpen || Math.abs(deltaX) >= 10) && Math.abs(deltaY) < 5) {
dragMode = 1;
scrollContainer.addEventListener("scroll", disableEvent);
self.showMask();
} else if (0 === dragMode && Math.abs(deltaY) >= 5) {
dragMode = 2;
}
if (1 === dragMode) {
newPos = currentPos + deltaX;
self.changeMenuPos();
}
} }
function onMenuTouchEnd(e) { function onMenuTouchEnd(e) {
options.target.classList.add("transition"); options.target.classList.add("transition");
scrollContainer.removeEventListener("scroll", disableEvent); scrollContainer.removeEventListener("scroll", disableEvent);
dragMode = 0; dragMode = 0;
var touches = getTouches(e); var touches = getTouches(e);
var touch = touches[0] || {}; var touch = touches[0] || {};
var endX = touch.clientX || 0; var endX = touch.clientX || 0;
var endY = touch.clientY || 0; var endY = touch.clientY || 0;
var deltaX = endX - (menuTouchStartX || 0); var deltaX = endX - (menuTouchStartX || 0);
var deltaY = endY - (menuTouchStartY || 0); var deltaY = endY - (menuTouchStartY || 0);
currentPos = deltaX; currentPos = deltaX;
self.checkMenuState(deltaX, deltaY); self.checkMenuState(deltaX, deltaY);
} }
@ -53,10 +68,12 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
} else { } else {
if (((getTouches(e)[0] || {}).clientX || 0) <= options.handleSize) { if (((getTouches(e)[0] || {}).clientX || 0) <= options.handleSize) {
isPeeking = true; isPeeking = true;
if (e.type === "touchstart") { if (e.type === "touchstart") {
dom.removeEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {}); dom.removeEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {});
dom.addEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {}); dom.addEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {});
} }
onMenuTouchStart(e); onMenuTouchStart(e);
} }
} }
@ -65,38 +82,52 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
function onEdgeTouchMove(e) { function onEdgeTouchMove(e) {
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
onEdgeTouchStart(e); onEdgeTouchStart(e);
} }
function onEdgeTouchEnd(e) { function onEdgeTouchEnd(e) {
isPeeking && (isPeeking = !1, dom.removeEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {}), onMenuTouchEnd(e)) if (isPeeking) {
isPeeking = false;
dom.removeEventListener(edgeContainer, "touchmove", onEdgeTouchMove, {});
onMenuTouchEnd(e);
}
} }
function disableEvent(e) { function disableEvent(e) {
e.preventDefault(), e.stopPropagation() e.preventDefault();
e.stopPropagation();
} }
function onBackgroundTouchStart(e) { function onBackgroundTouchStart(e) {
var touches = getTouches(e); var touches = getTouches(e);
var touch = touches[0] || {}; var touch = touches[0] || {};
backgroundTouchStartX = touch.clientX, backgroundTouchStartTime = (new Date).getTime() backgroundTouchStartX = touch.clientX;
backgroundTouchStartTime = new Date().getTime();
} }
function onBackgroundTouchMove(e) { function onBackgroundTouchMove(e) {
var touches = getTouches(e); var touches = getTouches(e);
var touch = touches[0] || {}; var touch = touches[0] || {};
var endX = touch.clientX || 0; var endX = touch.clientX || 0;
if (endX <= options.width && self.isVisible) { if (endX <= options.width && self.isVisible) {
countStart++; countStart++;
var deltaX = endX - (backgroundTouchStartX || 0); var deltaX = endX - (backgroundTouchStartX || 0);
if (1 === countStart && (startPoint = deltaX), deltaX < 0 && 2 !== dragMode) {
dragMode = 1, newPos = deltaX - startPoint + options.width, self.changeMenuPos(); if (countStart == 1) {
var time = (new Date).getTime() - (backgroundTouchStartTime || 0); startPoint = deltaX;
velocity = Math.abs(deltaX) / time }
if (deltaX < 0 && dragMode !== 2) {
dragMode = 1;
newPos = deltaX - startPoint + options.width;
self.changeMenuPos();
var time = new Date().getTime() - (backgroundTouchStartTime || 0);
velocity = Math.abs(deltaX) / time;
} }
} }
e.preventDefault(), e.stopPropagation()
e.preventDefault();
e.stopPropagation();
} }
function onBackgroundTouchEnd(e) { function onBackgroundTouchEnd(e) {
@ -104,13 +135,18 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
var touch = touches[0] || {}; var touch = touches[0] || {};
var endX = touch.clientX || 0; var endX = touch.clientX || 0;
var deltaX = endX - (backgroundTouchStartX || 0); var deltaX = endX - (backgroundTouchStartX || 0);
self.checkMenuState(deltaX), countStart = 0 self.checkMenuState(deltaX);
countStart = 0;
} }
function onMaskTransitionEnd() { function onMaskTransitionEnd() {
var classList = mask.classList; var classList = mask.classList;
classList.contains("backdrop") || classList.add("hide")
if (!classList.contains("backdrop")) {
classList.add("hide");
} }
}
var self; var self;
var defaults; var defaults;
var mask; var mask;
@ -123,83 +159,195 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
var dragMode = 0; var dragMode = 0;
var scrollContainer = options.target.querySelector(".mainDrawer-scrollContainer"); var scrollContainer = options.target.querySelector(".mainDrawer-scrollContainer");
scrollContainer.classList.add("scrollY"); scrollContainer.classList.add("scrollY");
var TouchMenuLA = function() {
self = this, defaults = { var TouchMenuLA = function () {
self = this;
defaults = {
width: 260, width: 260,
handleSize: 10, handleSize: 10,
disableMask: !1, disableMask: false,
maxMaskOpacity: 0.5 maxMaskOpacity: 0.5
}, this.isVisible = !1, this.initialize()
}; };
TouchMenuLA.prototype.initElements = function() { this.isVisible = false;
options.target.classList.add("touch-menu-la"), options.target.style.width = options.width + "px", options.target.style.left = -options.width + "px", options.disableMask || (mask = document.createElement("div"), mask.className = "tmla-mask hide", document.body.appendChild(mask), dom.addEventListener(mask, dom.whichTransitionEvent(), onMaskTransitionEnd, { this.initialize();
passive: !0
}))
}; };
TouchMenuLA.prototype.initElements = function () {
options.target.classList.add("touch-menu-la");
options.target.style.width = options.width + "px";
options.target.style.left = -options.width + "px";
if (!options.disableMask) {
mask = document.createElement("div");
mask.className = "tmla-mask hide";
document.body.appendChild(mask);
dom.addEventListener(mask, dom.whichTransitionEvent(), onMaskTransitionEnd, {
passive: true
});
}
};
var menuTouchStartX; var menuTouchStartX;
var menuTouchStartY; var menuTouchStartY;
var menuTouchStartTime; var menuTouchStartTime;
var edgeContainer = document.querySelector(".mainDrawerHandle"); var edgeContainer = document.querySelector(".mainDrawerHandle");
var isPeeking = false; var isPeeking = false;
TouchMenuLA.prototype.animateToPosition = function(pos) {
requestAnimationFrame(function() { TouchMenuLA.prototype.animateToPosition = function (pos) {
options.target.style.transform = pos ? "translateX(" + pos + "px)" : "none" requestAnimationFrame(function () {
}) options.target.style.transform = pos ? "translateX(" + pos + "px)" : "none";
}, TouchMenuLA.prototype.changeMenuPos = function() { });
newPos <= options.width && this.animateToPosition(newPos)
}, TouchMenuLA.prototype.clickMaskClose = function() {
mask.addEventListener("click", function() {
self.close()
})
}, TouchMenuLA.prototype.checkMenuState = function(deltaX, deltaY) {
velocity >= 0.4 ? deltaX >= 0 || Math.abs(deltaY || 0) >= 70 ? self.open() : self.close() : newPos >= 100 ? self.open() : newPos && self.close()
}, TouchMenuLA.prototype.open = function() {
this.animateToPosition(options.width), currentPos = options.width, this.isVisible = !0, options.target.classList.add("drawer-open"), self.showMask(), self.invoke(options.onChange)
}, TouchMenuLA.prototype.close = function() {
this.animateToPosition(0), currentPos = 0, self.isVisible = !1, options.target.classList.remove("drawer-open"), self.hideMask(), self.invoke(options.onChange)
}, TouchMenuLA.prototype.toggle = function() {
self.isVisible ? self.close() : self.open()
}; };
TouchMenuLA.prototype.changeMenuPos = function () {
if (newPos <= options.width) {
this.animateToPosition(newPos);
}
};
TouchMenuLA.prototype.clickMaskClose = function () {
mask.addEventListener("click", function () {
self.close();
});
};
TouchMenuLA.prototype.checkMenuState = function (deltaX, deltaY) {
if (velocity >= 0.4) {
if (deltaX >= 0 || Math.abs(deltaY || 0) >= 70) {
self.open();
} else {
self.close();
}
} else {
if (newPos >= 100) {
self.open();
} else {
if (newPos) {
self.close();
}
}
}
};
TouchMenuLA.prototype.open = function () {
this.animateToPosition(options.width);
currentPos = options.width;
this.isVisible = true;
options.target.classList.add("drawer-open");
self.showMask();
self.invoke(options.onChange);
};
TouchMenuLA.prototype.close = function () {
this.animateToPosition(0);
currentPos = 0;
self.isVisible = false;
options.target.classList.remove("drawer-open");
self.hideMask();
self.invoke(options.onChange);
};
TouchMenuLA.prototype.toggle = function () {
if (self.isVisible) {
self.close();
} else {
self.open();
}
};
var backgroundTouchStartX; var backgroundTouchStartX;
var backgroundTouchStartTime; var backgroundTouchStartTime;
TouchMenuLA.prototype.showMask = function() {
mask.classList.remove("hide"), mask.offsetWidth, mask.classList.add("backdrop") TouchMenuLA.prototype.showMask = function () {
}, TouchMenuLA.prototype.hideMask = function() { mask.classList.remove("hide");
mask.classList.remove("backdrop") mask.offsetWidth;
}, TouchMenuLA.prototype.invoke = function(fn) { mask.classList.add("backdrop");
fn && fn.apply(self)
}; };
var _edgeSwipeEnabled;
return TouchMenuLA.prototype.setEdgeSwipeEnabled = function(enabled) { TouchMenuLA.prototype.hideMask = function () {
options.disableEdgeSwipe || browser.touch && (enabled ? _edgeSwipeEnabled || (_edgeSwipeEnabled = !0, dom.addEventListener(edgeContainer, "touchstart", onEdgeTouchStart, { mask.classList.add("hide");
passive: !0 mask.classList.remove("backdrop");
}), dom.addEventListener(edgeContainer, "touchend", onEdgeTouchEnd, { };
passive: !0
}), dom.addEventListener(edgeContainer, "touchcancel", onEdgeTouchEnd, { TouchMenuLA.prototype.invoke = function (fn) {
passive: !0 if (fn) {
})) : _edgeSwipeEnabled && (_edgeSwipeEnabled = !1, dom.removeEventListener(edgeContainer, "touchstart", onEdgeTouchStart, { fn.apply(self);
passive: !0
}), dom.removeEventListener(edgeContainer, "touchend", onEdgeTouchEnd, {
passive: !0
}), dom.removeEventListener(edgeContainer, "touchcancel", onEdgeTouchEnd, {
passive: !0
})))
}, TouchMenuLA.prototype.initialize = function() {
options = Object.assign(defaults, options || {}), browser.edge && (options.disableEdgeSwipe = !0), self.initElements(), browser.touch && (dom.addEventListener(options.target, "touchstart", onMenuTouchStart, {
passive: !0
}), dom.addEventListener(options.target, "touchmove", onMenuTouchMove, {
passive: !0
}), dom.addEventListener(options.target, "touchend", onMenuTouchEnd, {
passive: !0
}), dom.addEventListener(options.target, "touchcancel", onMenuTouchEnd, {
passive: !0
}), dom.addEventListener(mask, "touchstart", onBackgroundTouchStart, {
passive: !0
}), dom.addEventListener(mask, "touchmove", onBackgroundTouchMove, {}), dom.addEventListener(mask, "touchend", onBackgroundTouchEnd, {
passive: !0
}), dom.addEventListener(mask, "touchcancel", onBackgroundTouchEnd, {
passive: !0
})), self.clickMaskClose()
}, new TouchMenuLA
} }
};
var _edgeSwipeEnabled;
TouchMenuLA.prototype.setEdgeSwipeEnabled = function (enabled) {
if (!options.disableEdgeSwipe) {
if (browser.touch) {
if (enabled) {
if (!_edgeSwipeEnabled) {
_edgeSwipeEnabled = true;
dom.addEventListener(edgeContainer, "touchstart", onEdgeTouchStart, {
passive: true
});
dom.addEventListener(edgeContainer, "touchend", onEdgeTouchEnd, {
passive: true
});
dom.addEventListener(edgeContainer, "touchcancel", onEdgeTouchEnd, {
passive: true
});
}
} else {
if (_edgeSwipeEnabled) {
_edgeSwipeEnabled = false;
dom.removeEventListener(edgeContainer, "touchstart", onEdgeTouchStart, {
passive: true
});
dom.removeEventListener(edgeContainer, "touchend", onEdgeTouchEnd, {
passive: true
});
dom.removeEventListener(edgeContainer, "touchcancel", onEdgeTouchEnd, {
passive: true
});
}
}
}
}
};
TouchMenuLA.prototype.initialize = function () {
options = Object.assign(defaults, options || {});
if (browser.edge) {
options.disableEdgeSwipe = true;
}
self.initElements();
if (browser.touch) {
dom.addEventListener(options.target, "touchstart", onMenuTouchStart, {
passive: true
});
dom.addEventListener(options.target, "touchmove", onMenuTouchMove, {
passive: true
});
dom.addEventListener(options.target, "touchend", onMenuTouchEnd, {
passive: true
});
dom.addEventListener(options.target, "touchcancel", onMenuTouchEnd, {
passive: true
});
dom.addEventListener(mask, "touchstart", onBackgroundTouchStart, {
passive: true
});
dom.addEventListener(mask, "touchmove", onBackgroundTouchMove, {});
dom.addEventListener(mask, "touchend", onBackgroundTouchEnd, {
passive: true
});
dom.addEventListener(mask, "touchcancel", onBackgroundTouchEnd, {
passive: true
});
}
self.clickMaskClose();
};
return new TouchMenuLA();
};
}); });

View file

@ -1,23 +1,31 @@
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "cardStyle", "emby-checkbox"], function(appHost, appSettings, dom, connectionManager, loading, layoutManager, browser) { define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "cardStyle", "emby-checkbox"], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser) {
"use strict"; "use strict";
var enableFocusTransform = !browser.slow && !browser.edge; var enableFocusTransform = !browser.slow && !browser.edge;
function authenticateUserByName(page, apiClient, username, password) { function authenticateUserByName(page, apiClient, username, password) {
loading.show(); loading.show();
apiClient.authenticateUserByName(username, password).then(function(result) { apiClient.authenticateUserByName(username, password).then(function (result) {
var user = result.User; var user = result.User;
var serverId = getParameterByName("serverid"); var serverId = getParameterByName("serverid");
var newUrl = user.Policy.IsAdministrator && !serverId ? "dashboard.html" : "home.html"; var newUrl;
if (user.Policy.IsAdministrator && !serverId) {
newUrl = "dashboard.html";
} else {
newUrl = "home.html";
}
loading.hide(); loading.hide();
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient); Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
Dashboard.navigate(newUrl); Dashboard.navigate(newUrl);
}, function(response) { }, function (response) {
page.querySelector("#txtManualName").value = ""; page.querySelector("#txtManualName").value = "";
page.querySelector("#txtManualPassword").value = ""; page.querySelector("#txtManualPassword").value = "";
loading.hide(); loading.hide();
if (response.status === 401) { if (response.status === 401) {
require(["toast"], function(toast) { require(["toast"], function (toast) {
toast(Globalize.translate("MessageInvalidUser")); toast(Globalize.translate("MessageInvalidUser"));
}); });
} else { } else {
@ -34,8 +42,18 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
context.querySelector(".manualLoginForm").classList.remove("hide"); context.querySelector(".manualLoginForm").classList.remove("hide");
context.querySelector(".visualLoginForm").classList.add("hide"); context.querySelector(".visualLoginForm").classList.add("hide");
context.querySelector(".btnManual").classList.add("hide"); context.querySelector(".btnManual").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"); if (focusPassword) {
context.querySelector("#txtManualPassword").focus();
} else {
context.querySelector("#txtManualName").focus();
}
if (showCancel) {
context.querySelector(".btnCancel").classList.remove("hide");
} else {
context.querySelector(".btnCancel").classList.add("hide");
}
} }
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"]; var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
@ -49,22 +67,25 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
if (str) { if (str) {
var character = String(str.substr(0, 1).charCodeAt()); var character = String(str.substr(0, 1).charCodeAt());
var sum = 0; var sum = 0;
for (var i = 0; i < character.length; i++) { for (var i = 0; i < character.length; i++) {
sum += parseInt(character.charAt(i)); sum += parseInt(character.charAt(i));
} }
var index = String(sum).substr(-1); var index = String(sum).substr(-1);
return metroColors[index]; return metroColors[index];
} }
return getRandomMetroColor(); return getRandomMetroColor();
} }
function loadUserList(context, apiClient, users) { function loadUserList(context, apiClient, users) {
var html = ""; var html = "";
for (var i = 0; i < users.length; i++) { for (var i = 0; i < users.length; i++) {
var user = users[i]; var user = users[i];
// TODO move card creation code to Card component // TODO move card creation code to Card component
var cssClass = "card squareCard scalableCard squareCard-scalable"; var cssClass = "card squareCard scalableCard squareCard-scalable";
if (layoutManager.tv) { if (layoutManager.tv) {
@ -76,13 +97,13 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
} }
var cardBoxCssClass = "cardBox cardBox-bottompadded"; var cardBoxCssClass = "cardBox cardBox-bottompadded";
html += '<button type="button" class="' + cssClass + '">'; html += '<button type="button" class="' + cssClass + '">';
html += '<div class="' + cardBoxCssClass + '">'; html += '<div class="' + cardBoxCssClass + '">';
html += '<div class="cardScalable">'; html += '<div class="cardScalable">';
html += '<div class="cardPadder cardPadder-square"></div>'; html += '<div class="cardPadder cardPadder-square"></div>';
html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">'; html += '<div class="cardContent" data-haspw="' + user.HasPassword + '" data-username="' + user.Name + '" data-userid="' + user.Id + '">';
var imgUrl; var imgUrl;
if (user.PrimaryImageTag) { if (user.PrimaryImageTag) {
imgUrl = apiClient.getUserImageUrl(user.Id, { imgUrl = apiClient.getUserImageUrl(user.Id, {
width: 300, width: 300,
@ -95,6 +116,7 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
imgUrl = "assets/img/avatar.png"; imgUrl = "assets/img/avatar.png";
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>'; html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>';
} }
html += "</div>"; html += "</div>";
html += "</div>"; html += "</div>";
html += '<div class="cardFooter visualCardBox-cardFooter">'; html += '<div class="cardFooter visualCardBox-cardFooter">';
@ -103,13 +125,19 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
html += "</div>"; html += "</div>";
html += "</button>"; html += "</button>";
} }
context.querySelector("#divUsers").innerHTML = html; context.querySelector("#divUsers").innerHTML = html;
} }
return function(view, params) { return function (view, params) {
function getApiClient() { function getApiClient() {
var serverId = params.serverid; var serverId = params.serverid;
return serverId ? connectionManager.getOrCreateApiClient(serverId) : ApiClient;
if (serverId) {
return connectionManager.getOrCreateApiClient(serverId);
}
return ApiClient;
} }
function showVisualForm() { 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 card = dom.parentWithClass(e.target, "card");
var cardContent = card ? card.querySelector(".cardContent") : null; var cardContent = card ? card.querySelector(".cardContent") : null;
if (cardContent) { if (cardContent) {
var context = view; var context = view;
var id = cardContent.getAttribute("data-userid"); var id = cardContent.getAttribute("data-userid");
var name = cardContent.getAttribute("data-username"); var name = cardContent.getAttribute("data-username");
var haspw = cardContent.getAttribute("data-haspw"); var haspw = cardContent.getAttribute("data-haspw");
if (id === 'manual') { if (id === 'manual') {
context.querySelector("#txtManualName").value = ""; context.querySelector("#txtManualName").value = "";
showManualForm(context, true); 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); appSettings.enableAutoLogin(view.querySelector(".chkRememberLogin").checked);
var apiClient = getApiClient(); var apiClient = getApiClient();
authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value); authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value);
e.preventDefault(); e.preventDefault();
return false; return false;
}); });
view.querySelector(".btnForgotPassword").addEventListener("click", function () {
view.querySelector(".btnForgotPassword").addEventListener("click", function() {
Dashboard.navigate("forgotpassword.html"); Dashboard.navigate("forgotpassword.html");
}); });
view.querySelector(".btnCancel").addEventListener("click", showVisualForm); view.querySelector(".btnCancel").addEventListener("click", showVisualForm);
view.querySelector(".btnManual").addEventListener("click", function () {
view.querySelector(".btnManual").addEventListener("click", function() {
view.querySelector("#txtManualName").value = ""; view.querySelector("#txtManualName").value = "";
showManualForm(view, true); showManualForm(view, true);
}); });
view.addEventListener("viewshow", function (e) {
view.addEventListener("viewshow", function(e) {
loading.show(); loading.show();
if (!appHost.supports('multiserver')) { if (!appHost.supports('multiserver')) {
view.querySelector(".btnSelectServer").classList.add("hide"); view.querySelector(".btnSelectServer").classList.add("hide");
} }
var apiClient = getApiClient(); var apiClient = getApiClient();
apiClient.getPublicUsers().then(function(users) { apiClient.getPublicUsers().then(function (users) {
if (users.length) { if (users.length) {
showVisualForm(); showVisualForm();
loadUserList(view, apiClient, users); loadUserList(view, apiClient, users);
@ -176,13 +203,12 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
view.querySelector("#txtManualName").value = ""; view.querySelector("#txtManualName").value = "";
showManualForm(view, false, false); showManualForm(view, false, false);
} }
}).catch().then(function() { }).catch().then(function () {
loading.hide(); 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 || ""; view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || "";
}); });
}); });
} };
}); });

View file

@ -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"; "use strict";
function loadPage(page, config, languageOptions, systemInfo) { function loadPage(page, config, languageOptions, systemInfo) {
page.querySelector("#txtServerName").value = systemInfo.ServerName; page.querySelector("#txtServerName").value = systemInfo.ServerName;
$("#chkAutoRunWebApp", page).checked(config.AutoRunWebApp); $("#chkAutoRunWebApp", page).checked(config.AutoRunWebApp);
if (systemInfo.CanLaunchWebBrowser) { if (systemInfo.CanLaunchWebBrowser) {
page.querySelector("#fldAutoRunWebApp").classList.remove("hide"); page.querySelector("#fldAutoRunWebApp").classList.remove("hide");
} else { } else {
page.querySelector("#fldAutoRunWebApp").classList.add("hide"); page.querySelector("#fldAutoRunWebApp").classList.add("hide");
} }
page.querySelector("#txtCachePath").value = systemInfo.CachePath || ""; page.querySelector("#txtCachePath").value = systemInfo.CachePath || "";
$("#txtMetadataPath", page).val(systemInfo.InternalMetadataPath || ""); $("#txtMetadataPath", page).val(systemInfo.InternalMetadataPath || "");
$("#txtMetadataNetworkPath", page).val(systemInfo.MetadataNetworkPath || ""); $("#txtMetadataNetworkPath", page).val(systemInfo.MetadataNetworkPath || "");
$("#selectLocalizationLanguage", page).html(languageOptions.map(function(language) { $("#selectLocalizationLanguage", page).html(languageOptions.map(function (language) {
return '<option value="' + language.Value + '">' + language.Name + "</option>" return '<option value="' + language.Value + '">' + language.Name + "</option>";
})).val(config.UICulture); })).val(config.UICulture);
currentLanguage = config.UICulture; currentLanguage = config.UICulture;
if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) { if (systemInfo.CanSelfRestart || systemInfo.CanSelfUpdate) {
@ -21,6 +23,7 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
} else { } else {
$(".autoUpdatesContainer", page).addClass("hide"); $(".autoUpdatesContainer", page).addClass("hide");
} }
loading.hide(); loading.hide();
} }
@ -28,90 +31,94 @@ define(["jQuery", "loading", "fnchecked", "emby-checkbox", "emby-textarea", "emb
loading.show(); loading.show();
var form = this; var form = this;
$(form).parents(".page"); $(form).parents(".page");
return ApiClient.getServerConfiguration().then(function(config) { ApiClient.getServerConfiguration().then(function (config) {
config.ServerName = $("#txtServerName", form).val(); config.ServerName = $("#txtServerName", form).val();
config.UICulture = $("#selectLocalizationLanguage", form).val(); config.UICulture = $("#selectLocalizationLanguage", form).val();
config.CachePath = form.querySelector("#txtCachePath").value; config.CachePath = form.querySelector("#txtCachePath").value;
config.MetadataPath = $("#txtMetadataPath", form).val(); config.MetadataPath = $("#txtMetadataPath", form).val();
config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val(); config.MetadataNetworkPath = $("#txtMetadataNetworkPath", form).val();
var requiresReload = (config.UICulture !== currentLanguage); var requiresReload = config.UICulture !== currentLanguage;
config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked(); config.AutoRunWebApp = $("#chkAutoRunWebApp", form).checked();
ApiClient.updateServerConfiguration(config).then(function() { ApiClient.updateServerConfiguration(config).then(function() {
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) { ApiClient.getNamedConfiguration(brandingConfigKey).then(function(brandingConfig) {
brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value; brandingConfig.LoginDisclaimer = form.querySelector("#txtLoginDisclaimer").value;
brandingConfig.CustomCss = form.querySelector("#txtCustomCss").value; brandingConfig.CustomCss = form.querySelector("#txtCustomCss").value;
if (currentBrandingOptions && brandingConfig.CustomCss !== currentBrandingOptions.CustomCss) { if (currentBrandingOptions && brandingConfig.CustomCss !== currentBrandingOptions.CustomCss) {
requiresReload = true; requiresReload = true;
} }
ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(function() {
ApiClient.updateNamedConfiguration(brandingConfigKey, brandingConfig).then(function () {
Dashboard.processServerConfigurationUpdateResult(); Dashboard.processServerConfigurationUpdateResult();
if (requiresReload && !AppInfo.isNativeApp) { if (requiresReload && !AppInfo.isNativeApp) {
window.location.reload(true); window.location.reload(true);
} }
}); });
}) });
}) });
}), !1 });
return false;
} }
var currentBrandingOptions; var currentBrandingOptions;
var currentLanguage; var currentLanguage;
var brandingConfigKey = "branding"; var brandingConfigKey = "branding";
return function (view, params) {
return function(view, params) { $("#btnSelectCachePath", view).on("click.selectDirectory", function () {
$("#btnSelectCachePath", view).on("click.selectDirectory", function() { require(["directorybrowser"], function (directoryBrowser) {
require(["directorybrowser"], function(directoryBrowser) { var picker = new directoryBrowser();
var picker = new directoryBrowser;
picker.show({ picker.show({
callback: function(path) { callback: function (path) {
if (path) { if (path) {
view.querySelector("#txtCachePath").value = path; view.querySelector("#txtCachePath").value = path;
} }
picker.close(); picker.close();
}, },
validateWriteable: true, validateWriteable: true,
header: Globalize.translate("HeaderSelectServerCachePath"), header: Globalize.translate("HeaderSelectServerCachePath"),
instruction: Globalize.translate("HeaderSelectServerCachePathHelp") 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(); var picker = new directoryBrowser();
picker.show({ picker.show({
path: $("#txtMetadataPath", view).val(), path: $("#txtMetadataPath", view).val(),
networkSharePath: $("#txtMetadataNetworkPath", view).val(), networkSharePath: $("#txtMetadataNetworkPath", view).val(),
callback: function(path, networkPath) { callback: function (path, networkPath) {
if (path) { if (path) {
$("#txtMetadataPath", view).val(path); $("#txtMetadataPath", view).val(path);
} }
if (networkPath) { if (networkPath) {
$("#txtMetadataNetworkPath", view).val(networkPath); $("#txtMetadataNetworkPath", view).val(networkPath);
} }
picker.close(); picker.close();
}, },
validateWriteable: true, validateWriteable: true,
header: Globalize.translate("HeaderSelectMetadataPath"), header: Globalize.translate("HeaderSelectMetadataPath"),
instruction: Globalize.translate("HeaderSelectMetadataPathHelp"), instruction: Globalize.translate("HeaderSelectMetadataPathHelp"),
enableNetworkSharePath: true enableNetworkSharePath: true
})
})
}); });
});
});
$(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit); $(".dashboardGeneralForm", view).off("submit", onSubmit).on("submit", onSubmit);
view.addEventListener("viewshow", function() { view.addEventListener("viewshow", function () {
var promiseConfig = ApiClient.getServerConfiguration(); var promiseConfig = ApiClient.getServerConfiguration();
var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl("Localization/Options")); var promiseLanguageOptions = ApiClient.getJSON(ApiClient.getUrl("Localization/Options"));
var promiseSystemInfo = ApiClient.getSystemInfo(); 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]); loadPage(view, responses[0], responses[1], responses[2]);
}); });
ApiClient.getNamedConfiguration(brandingConfigKey).then(function(config) { ApiClient.getNamedConfiguration(brandingConfigKey).then(function (config) {
currentBrandingOptions = config; currentBrandingOptions = config;
view.querySelector("#txtLoginDisclaimer").value = config.LoginDisclaimer || ""; view.querySelector("#txtLoginDisclaimer").value = config.LoginDisclaimer || "";
view.querySelector("#txtCustomCss").value = config.CustomCss || ""; view.querySelector("#txtCustomCss").value = config.CustomCss || "";
}); });
}); });
} };
}); });

View file

@ -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"; "use strict";
function onSubmit(e) { function onSubmit(e) {
var form = this; var form = this;
var localAddress = form.querySelector("#txtLocalAddress").value; var localAddress = form.querySelector("#txtLocalAddress").value;
var enableUpnp = form.querySelector("#chkEnableUpnp").checked; var enableUpnp = form.querySelector("#chkEnableUpnp").checked;
confirmSelections(localAddress, enableUpnp, function() { confirmSelections(localAddress, enableUpnp, function () {
var validationResult = getValidationAlert(form); 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(); loading.show();
ApiClient.getServerConfiguration().then(function(config) { ApiClient.getServerConfiguration().then(function (config) {
config.LocalNetworkSubnets = form.querySelector("#txtLanNetworks").value.split(",").map(function(s) { config.LocalNetworkSubnets = form.querySelector("#txtLanNetworks").value.split(",").map(function (s) {
return s.trim() return s.trim();
}).filter(function(s) { }).filter(function (s) {
return s.length > 0 return s.length > 0;
}); });
config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function (s) {
config.RemoteIPFilter = form.querySelector("#txtExternalAddressFilter").value.split(",").map(function(s) { return s.trim();
return s.trim() }).filter(function (s) {
}).filter(function(s) { return s.length > 0;
return s.length > 0
}); });
config.IsRemoteIPFilterBlacklist = "blacklist" === form.querySelector("#selectExternalAddressFilterMode").value; config.IsRemoteIPFilterBlacklist = "blacklist" === form.querySelector("#selectExternalAddressFilterMode").value;
config.PublicPort = form.querySelector("#txtPublicPort").value; config.PublicPort = form.querySelector("#txtPublicPort").value;
config.PublicHttpsPort = form.querySelector("#txtPublicHttpsPort").value; config.PublicHttpsPort = form.querySelector("#txtPublicHttpsPort").value;
var httpsMode = form.querySelector("#selectHttpsMode").value; var httpsMode = form.querySelector("#selectHttpsMode").value;
switch (httpsMode) { switch (httpsMode) {
case "proxy": case "proxy":
config.EnableHttps = true; config.EnableHttps = true;
config.RequireHttps = false; config.RequireHttps = false;
config.IsBehindProxy = true; config.IsBehindProxy = true;
break; break;
case "required": case "required":
config.EnableHttps = true; config.EnableHttps = true;
config.RequireHttps = true; config.RequireHttps = true;
config.IsBehindProxy = false; config.IsBehindProxy = false;
break; break;
case "enabled": case "enabled":
config.EnableHttps = true; config.EnableHttps = true;
config.RequireHttps = false; config.RequireHttps = false;
config.IsBehindProxy = false; config.IsBehindProxy = false;
break; break;
default: default:
config.EnableHttps = false; config.EnableHttps = false;
config.RequireHttps = false; config.RequireHttps = false;
config.IsBehindProxy = false; config.IsBehindProxy = false;
} }
config.HttpsPortNumber = form.querySelector("#txtHttpsPort").value; config.HttpsPortNumber = form.querySelector("#txtHttpsPort").value;
config.HttpServerPortNumber = form.querySelector("#txtPortNumber").value; config.HttpServerPortNumber = form.querySelector("#txtPortNumber").value;
config.EnableUPnP = enableUpnp; config.EnableUPnP = enableUpnp;
@ -57,47 +65,66 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
config.CertificatePassword = form.querySelector("#txtCertPassword").value || null; config.CertificatePassword = form.querySelector("#txtCertPassword").value || null;
config.LocalNetworkAddresses = localAddress ? [localAddress] : []; config.LocalNetworkAddresses = localAddress ? [localAddress] : [];
ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse); ApiClient.updateServerConfiguration(config).then(Dashboard.processServerConfigurationUpdateResult, Dashboard.processErrorResponse);
}) });
}) });
}), e.preventDefault() });
e.preventDefault();
} }
function triggerChange(select) { function triggerChange(select) {
var evt = document.createEvent("HTMLEvents"); var evt = document.createEvent("HTMLEvents");
evt.initEvent("change", !1, !0), select.dispatchEvent(evt) evt.initEvent("change", false, true);
select.dispatchEvent(evt);
} }
function getValidationAlert(form) { 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) { function validateHttps(form) {
var certPath = form.querySelector("#txtCertificatePath").value || null; var certPath = form.querySelector("#txtCertificatePath").value || null;
var httpsMode = form.querySelector("#selectHttpsMode").value; 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({ return alertText({
title: globalize.translate("TitleHostingSettings"), title: globalize.translate("TitleHostingSettings"),
text: globalize.translate("HttpsRequiresCert") text: globalize.translate("HttpsRequiresCert")
}).then(reject, reject) }).then(reject, reject);
}) });
} }
function alertText(options) { function alertText(options) {
return new Promise(function(resolve, reject) { return new Promise(function (resolve, reject) {
require(["alert"], function(alert) { require(["alert"], function (alert) {
alert(options).then(resolve, reject) alert(options).then(resolve, reject);
}) });
}) });
} }
function confirmSelections(localAddress, enableUpnp, callback) { function confirmSelections(localAddress, enableUpnp, callback) {
localAddress || !enableUpnp ? alertText({ if (localAddress || !enableUpnp) {
alertText({
title: globalize.translate("TitleHostingSettings"), title: globalize.translate("TitleHostingSettings"),
text: globalize.translate("SettingsWarning") text: globalize.translate("SettingsWarning")
}).then(callback) : callback() }).then(callback);
} else {
callback();
}
} }
return function(view, params) { return function (view, params) {
function loadPage(page, config) { function loadPage(page, config) {
page.querySelector("#txtPortNumber").value = config.HttpServerPortNumber; page.querySelector("#txtPortNumber").value = config.HttpServerPortNumber;
page.querySelector("#txtPublicPort").value = config.PublicPort; 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("#selectExternalAddressFilterMode").value = config.IsRemoteIPFilterBlacklist ? "blacklist" : "whitelist";
page.querySelector("#chkRemoteAccess").checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess; page.querySelector("#chkRemoteAccess").checked = null == config.EnableRemoteAccess || config.EnableRemoteAccess;
var selectHttpsMode = page.querySelector("#selectHttpsMode"); 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("#txtHttpsPort").value = config.HttpsPortNumber;
page.querySelector("#txtBaseUrl").value = config.BaseUrl || ""; page.querySelector("#txtBaseUrl").value = config.BaseUrl || "";
var txtCertificatePath = page.querySelector("#txtCertificatePath"); var txtCertificatePath = page.querySelector("#txtCertificatePath");
@ -119,27 +156,50 @@ define(["loading", "libraryMenu", "globalize", "emby-checkbox", "emby-select"],
loading.hide(); loading.hide();
} }
view.querySelector("#chkRemoteAccess").addEventListener("change", function() { 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")) if (this.checked) {
}), view.querySelector("#btnSelectCertPath").addEventListener("click", function() { view.querySelector(".fldExternalAddressFilter").classList.remove("hide");
require(["directorybrowser"], function(directoryBrowser) { view.querySelector(".fldExternalAddressFilterMode").classList.remove("hide");
var picker = new directoryBrowser; 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({ picker.show({
includeFiles: !0, includeFiles: true,
includeDirectories: !0, includeDirectories: true,
callback: function(path) { callback: function (path) {
path && (view.querySelector("#txtCertificatePath").value = path), picker.close() if (path) {
view.querySelector("#txtCertificatePath").value = path;
}
picker.close();
}, },
header: globalize.translate("HeaderSelectCertificatePath") 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(); loading.show();
ApiClient.getServerConfiguration().then(function(config) { ApiClient.getServerConfiguration().then(function (config) {
loadPage(view, config); loadPage(view, config);
}); });
}); });
} };
}); });

View file

@ -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) { 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"; "use strict";
function renderHeader() {
var html = "";
html += '<div class="flex align-items-center flex-grow headerTop">';
html += '<div class="headerLeft">';
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonLeft headerBackButton hide"><i class="md-icon">' + (browser.safari ? "chevron_left" : "arrow_back") + "</i></button>";
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerHomeButton hide barsMenuButton headerButtonLeft"><i class="md-icon">home</i></button>';
html += '<button type="button" is="paper-icon-button-light" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft hide"><i class="md-icon">menu</i></button>';
html += '<h3 class="pageTitle"></h3>';
html += "</div>";
html += '<div class="headerRight">';
html += '<span class="headerSelectedPlayer"></span>';
html += '<button is="paper-icon-button-light" class="headerCastButton castButton headerButton headerButtonRight hide"><i class="md-icon">cast</i></button>';
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonRight headerSearchButton hide"><i class="md-icon">search</i></button>';
html += '<button is="paper-icon-button-light" class="headerButton headerButtonRight headerUserButton hide"><i class="md-icon">person</i></button>';
html += "</div>";
html += "</div>";
html += '<div class="headerTabs sectionTabs hide">';
html += "</div>";
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() { function getCurrentApiClient() {
if (currentUser && currentUser.localUser) { if (currentUser && currentUser.localUser) {
return connectionManager.getApiClient(currentUser.localUser.ServerId); return connectionManager.getApiClient(currentUser.localUser.ServerId);
@ -840,37 +872,7 @@ define(["dom", "layoutManager", "inputManager", "connectionManager", "events", "
updateLibraryNavLinks(page); updateLibraryNavLinks(page);
}); });
(function () { renderHeader();
var html = "";
html += '<div class="flex align-items-center flex-grow headerTop">';
html += '<div class="headerLeft">';
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonLeft headerBackButton hide"><i class="md-icon">' + (browser.safari ? "chevron_left" : "arrow_back") + "</i></button>";
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerHomeButton hide barsMenuButton headerButtonLeft"><i class="md-icon">home</i></button>';
html += '<button type="button" is="paper-icon-button-light" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft hide"><i class="md-icon">menu</i></button>';
html += '<h3 class="pageTitle"></h3>';
html += "</div>";
html += '<div class="headerRight">';
html += '<span class="headerSelectedPlayer"></span>';
html += '<button is="paper-icon-button-light" class="headerCastButton castButton headerButton headerButtonRight hide"><i class="md-icon">cast</i></button>';
html += '<button type="button" is="paper-icon-button-light" class="headerButton headerButtonRight headerSearchButton hide"><i class="md-icon">search</i></button>';
html += '<button is="paper-icon-button-light" class="headerButton headerButtonRight headerUserButton hide"><i class="md-icon">person</i></button>';
html += "</div>";
html += "</div>";
html += '<div class="headerTabs sectionTabs hide">';
html += "</div>";
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();
})();
events.on(connectionManager, "localusersignedin", function (e, user) { events.on(connectionManager, "localusersignedin", function (e, user) {
currentDrawerType = null; currentDrawerType = null;