Consolidate all modules to single out file.

This commit is contained in:
Jared 2020-09-21 07:56:23 -07:00 committed by Jared Goodwin
parent d73bc004d9
commit 905be25995
38 changed files with 424 additions and 21720 deletions

2
.gitignore vendored
View File

@ -281,3 +281,5 @@ Server/wwwroot/Downloads/Win-x86/Remotely_Desktop.exe
/Desktop.Win.Wrapper/Remotely_Desktop.zip
/Server/Remotely.db-wal
/Server/Remotely.db-shm
/Server/wwwroot/out.js
/Server/wwwroot/out.js.map

View File

@ -92,7 +92,15 @@
</div>
</div>
<script type="module" src="~/src/Pages/ApiTokens.js">
<script>
require.config({
paths: {
"App": "/out"
}
});
require(["App"], function (remotely) {
remotely.App.Pages.ApiTokens.Init();
});
</script>
}

View File

@ -223,7 +223,15 @@
}
<script type="module" src="~/src/Pages/OrganizationManagement.js">
<script>
require.config({
paths: {
"App": "/out"
}
});
require(["App"], function (remotely) {
remotely.App.Pages.OrganizationManagement.Init();
});
</script>
}

View File

@ -263,13 +263,21 @@
</div>
</div>
<script type="module" src="~/src/Pages/ServerConfig.js"></script>
<script>
require.config({
paths: {
"App": "/out"
}
});
require(["App"], function (remotely) {
remotely.App.Pages.ServerConfig.Init();
});
</script>
<style>
input[type='checkbox'] {
width: 25px;
height: 25px;
}
</style>
}

View File

@ -260,16 +260,16 @@
<p>&copy; @DateTimeOffset.Now.Year - Translucency Software</p>
</div>
</footer>
<script src="~/lib/require.js"></script>
<script defer>
<script src="~/lib/require.js"></script>
<script>
require.config({
paths: {
"RemoteControl/App": "outViewer"
"App": "out"
}
});
require(["RemoteControl/App"], function (remotely) {
remotely.ViewerApp.Init();
require(["App"], function (remotely) {
remotely.App.Viewer.Init();
});
</script>

View File

@ -24,7 +24,7 @@
@if (user is RemotelyUser)
{
switch (user.UserOptions.Theme)
{
case Remotely.Shared.Enums.Theme.Light:
@ -70,6 +70,9 @@
<script src="~/lib/signalr/msgpack5.min.js"></script>
<script src="~/lib/signalr/signalr-protocol-msgpack.min.js"></script>
</environment>
<script src="~/lib/require.js"></script>
</head>
<body>
<header>

View File

@ -71,20 +71,15 @@
</div>
<script src="~/lib/require.js"></script>
<script defer>
<script>
require.config({
paths: {
"Main/App": "outMain"
"App": "out"
}
});
require(["Main/App"], function (remotely) {
console.log("app loaded");
console.log(remotely);
remotely.MainApp.Init();
document.querySelector(".loading-wheel").remove();
document.querySelector(".work-area").classList.remove("hidden");
require(["App"], function (remotely) {
remotely.App.Main.Init();
});
</script>

View File

@ -27,4 +27,14 @@
</div>
</div>
<script type="module" src="~/src/Pages/IndexNotLoggedIn.js"></script>
<script>
require.config({
paths: {
"App": "out"
}
});
require(["App"], function (remotely) {
remotely.App.Pages.IndexNotLoggedIn.Init();
});
</script>

View File

@ -39,6 +39,10 @@
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="3.1.7" />
<PackageReference Include="Microsoft.Extensions.Logging.EventLog" Version="3.1.7" />
<PackageReference Include="Microsoft.TypeScript.MSBuild" Version="4.0.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="3.1.4" PrivateAssets="All" />
<PackageReference Include="NETStandard.Library" Version="2.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />

View File

@ -31,7 +31,7 @@
"MaxConcurrentUpdates": 10,
"MaxOrganizationCount": 1,
"RedirectToHttps": false,
"RemoteControlNotifyUser": true,
"RemoteControlNotifyUser": true,
"RemoteControlSessionLimit": 3,
"RemoteControlRequiresAuthentication": true,
"Require2FA": false,

View File

@ -3,14 +3,14 @@
"name": "asp.net",
"private": true,
"devDependencies": {
"@microsoft/signalr": "^3.1.5",
"@microsoft/signalr-protocol-msgpack": "^3.1.5",
"@types/bootstrap": "^4.5.0",
"@types/jquery": "^3.5.1",
"msgpack5": "^4.2.1",
"typescript": "^4.0.3"
"@types/jquery": "^3.5.1"
},
"dependencies": {
"@microsoft/signalr": "^3.1.5",
"@microsoft/signalr-protocol-msgpack": "^3.1.5",
"msgpack5": "^4.2.1",
"typescript": "^4.0.3",
"@msgpack/msgpack": "^1.12.2",
"jquery": "^3.5.1"
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

17
Server/wwwroot/src/App.ts Normal file
View File

@ -0,0 +1,17 @@
import { MainApp } from "./Main/App";
import { ViewerApp } from "./RemoteControl/App";
import { ApiTokens } from "./Pages/ApiTokens";
import { IndexNotLoggedIn } from "./Pages/IndexNotLoggedIn";
import { OrganizationManagement } from "./Pages/OrganizationManagement";
import { ServerConfig } from "./Pages/ServerConfig";
export const App = {
Main: MainApp,
Viewer: ViewerApp,
Pages: {
ApiTokens: ApiTokens,
IndexNotLoggedIn: IndexNotLoggedIn,
OrganizationManagement: OrganizationManagement,
ServerConfig: ServerConfig
}
}

View File

@ -30,5 +30,7 @@ export const MainApp = {
UI.ConsoleTextArea.focus();
ApplyInputEventHandlers();
HubConnection.Connect();
document.querySelector(".loading-wheel").remove();
document.querySelector(".work-area").classList.remove("hidden");
}
}

View File

@ -1,20 +0,0 @@
document.querySelectorAll(".delete-form").forEach((deleteForm) => {
deleteForm.addEventListener("submit", ev => {
var result = confirm("Are you sure you want to delete this API token?");
if (result) {
deleteForm.removeEventListener("submit", undefined);
deleteForm.submit();
}
});
});
document.querySelectorAll(".rename-form").forEach((renameForm) => {
renameForm.addEventListener("submit", ev => {
var result = prompt("Enter a new name for the token");
if (result) {
renameForm.querySelector('input[name="Input.TokenName"]').value = result;
renameForm.removeEventListener("submit", undefined);
renameForm.submit();
}
});
});
//# sourceMappingURL=ApiTokens.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"ApiTokens.js","sourceRoot":"","sources":["ApiTokens.ts"],"names":[],"mappings":"AAAA,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,UAA2B,EAAE,EAAE;IAC9E,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE;QACvC,IAAI,MAAM,GAAG,OAAO,CAAC,iDAAiD,CAAC,CAAC;QACxE,IAAI,MAAM,EAAE;YACR,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpD,UAAU,CAAC,MAAM,EAAE,CAAC;SACvB;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,UAA2B,EAAE,EAAE;IAC9E,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE;QACvC,IAAI,MAAM,GAAG,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACtD,IAAI,MAAM,EAAE;YACP,UAAU,CAAC,aAAa,CAAC,+BAA+B,CAAsB,CAAC,KAAK,GAAG,MAAM,CAAC;YAC/F,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YACpD,UAAU,CAAC,MAAM,EAAE,CAAC;SACvB;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}

View File

@ -1,20 +1,24 @@
document.querySelectorAll(".delete-form").forEach((deleteForm: HTMLFormElement) => {
deleteForm.addEventListener("submit", ev => {
var result = confirm("Are you sure you want to delete this API token?");
if (result) {
deleteForm.removeEventListener("submit", undefined);
deleteForm.submit();
}
});
});
export const ApiTokens = {
Init() {
document.querySelectorAll(".delete-form").forEach((deleteForm: HTMLFormElement) => {
deleteForm.addEventListener("submit", ev => {
var result = confirm("Are you sure you want to delete this API token?");
if (result) {
deleteForm.removeEventListener("submit", undefined);
deleteForm.submit();
}
});
});
document.querySelectorAll(".rename-form").forEach((renameForm: HTMLFormElement) => {
renameForm.addEventListener("submit", ev => {
var result = prompt("Enter a new name for the token");
if (result) {
(renameForm.querySelector('input[name="Input.TokenName"]') as HTMLInputElement).value = result;
renameForm.removeEventListener("submit", undefined);
renameForm.submit();
}
});
});
document.querySelectorAll(".rename-form").forEach((renameForm: HTMLFormElement) => {
renameForm.addEventListener("submit", ev => {
var result = prompt("Enter a new name for the token");
if (result) {
(renameForm.querySelector('input[name="Input.TokenName"]') as HTMLInputElement).value = result;
renameForm.removeEventListener("submit", undefined);
renameForm.submit();
}
});
});
}
}

View File

@ -1,41 +0,0 @@
function typeText(textParts, header) {
var currentText = textParts[0];
textParts[0] = currentText.slice(1);
if (currentText.length > 0) {
if (currentText.split('').some(x => x != " ")) {
header.innerHTML += currentText.charAt(0);
window.setTimeout(() => {
typeText(textParts, header);
}, 100);
}
else {
header.innerHTML = header.innerHTML.slice(0, -1);
window.setTimeout(() => {
typeText(textParts, header);
}, 50);
}
}
else {
textParts.shift();
if (textParts.length > 0) {
var timeout = 100;
if (textParts[0].split('').every(x => x == " ")) {
timeout = 800;
}
console.log(timeout);
window.setTimeout(() => {
typeText(textParts, header);
}, timeout);
}
}
}
var text = [
"Remote desktop",
" ",
" scripting",
" ",
"ly"
];
var header = document.getElementById("remotelyHeader");
typeText(text, header);
//# sourceMappingURL=IndexNotLoggedIn.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"IndexNotLoggedIn.js","sourceRoot":"","sources":["IndexNotLoggedIn.ts"],"names":[],"mappings":"AAAA,SAAS,QAAQ,CAAC,SAAmB,EAAE,MAA0B;IAC7D,IAAI,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/B,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;QACxB,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;YAC3C,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC,EAAE,GAAG,CAAC,CAAA;SACV;aACI;YACD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC,EAAE,EAAE,CAAC,CAAA;SACT;KACJ;SACI;QACD,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,IAAI,OAAO,GAAG,GAAG,CAAC;YAElB,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE;gBAC7C,OAAO,GAAG,GAAG,CAAC;aACjB;YACD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;gBACnB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAChC,CAAC,EAAE,OAAO,CAAC,CAAC;SACf;KACJ;AACL,CAAC;AAED,IAAI,IAAI,GAAG;IACP,gBAAgB;IAChB,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,IAAI;CACP,CAAC;AAEF,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,gBAAgB,CAAuB,CAAC;AAE7E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC"}

View File

@ -1,4 +1,12 @@
function typeText(textParts: string[], header: HTMLHeadingElement) {
export const IndexNotLoggedIn = {
Init() {
var header = document.getElementById("remotelyHeader") as HTMLHeadingElement;
typeText(text, header);
}
}
function typeText(textParts: string[], header: HTMLHeadingElement) {
var currentText = textParts[0];
textParts[0] = currentText.slice(1);
@ -29,7 +37,7 @@
window.setTimeout(() => {
typeText(textParts, header);
}, timeout);
}
}
}
}
@ -39,8 +47,4 @@ var text = [
" scripting",
" ",
"ly"
];
var header = document.getElementById("remotelyHeader") as HTMLHeadingElement;
typeText(text, header);
];

View File

@ -1,269 +0,0 @@
import { ShowModal } from "../Shared/UI.js";
document.getElementById("usersHelpButton").addEventListener("click", (ev) => {
ShowModal("Users", `All users for the organization are managed here.<br><br>
Administrators will have access to this management screen as well as all computers.`);
});
document.getElementById("invitesHelpButton").addEventListener("click", (ev) => {
ShowModal("Invitations", `All pending invitations will be shown here and can be revoked by deleting them.<br><br>
If a user does not exist, sending an invite will create their account and add them to the current organization.
A password reset URL can be generated from the user table.
<br><br>
The Admin checkbox determines if the new user will have administrator privileges in this organization.`);
});
document.getElementById("deviceGroupHelpButton").addEventListener("click", (ev) => {
ShowModal("Device Groups", `Device groups can be used to organize and filter computers on the grid.`);
});
document.getElementById("addUsersToDeviceGroupButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("deviceGroupList");
if (selectList.selectedOptions.length == 0) {
return;
}
if (selectList.selectedOptions.length > 1) {
ShowModal("Device Group Users", "You can only edit users for 1 device group at a time.");
return;
}
var groupID = selectList.selectedOptions[0].value;
var modalDiv = document.querySelector(`.modal[group='${groupID}']`);
$(modalDiv)["modal"]("show");
});
document.getElementById("removeDeviceGroupButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("deviceGroupList");
var selectedValues = [];
for (var i = 0; i < selectList.selectedOptions.length; i++) {
selectedValues.push(selectList.selectedOptions[i].value);
}
selectedValues.forEach(x => {
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
document.querySelector(`#deviceGroupList option[value='${x}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", location.origin + "/api/OrganizationManagement/DeviceGroup");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(x));
});
});
document.getElementById("deviceGroupInput").addEventListener("keypress", (e) => {
if (e.key.toLowerCase() == "enter") {
document.getElementById("addDeviceGroupButton").click();
}
});
document.querySelectorAll(".remove-user-from-device-group-button").forEach((x) => {
x.addEventListener("click", clickEv => {
var groupID = clickEv.currentTarget.getAttribute("group");
var selectList = document.querySelector(`.modal[group='${groupID}'] select.device-group-user-list`);
var selectedValues = [];
for (var i = 0; i < selectList.selectedOptions.length; i++) {
selectedValues.push(selectList.selectedOptions[i].value);
}
selectedValues.forEach(user => {
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
selectList.querySelector(`option[value='${user}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", location.origin + `/api/OrganizationManagement/DeviceGroup/${groupID}/Users/`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(user));
});
});
});
document.querySelectorAll(".add-user-to-devicegroup-button").forEach((x) => {
x.addEventListener("click", (clickEv) => {
var groupID = clickEv.currentTarget.getAttribute("group");
var modal = document.querySelector(`.modal[group='${groupID}']`);
var selectList = modal.querySelector(`select.device-group-user-list`);
var userInput = modal.querySelector(`input.add-user-to-devicegroup-input`);
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
var option = document.createElement("option");
option.value = xhr.responseText;
option.text = userInput.value;
selectList.options.add(option);
userInput.value = "";
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("post", location.origin + `/api/OrganizationManagement/DeviceGroup/${groupID}/Users/`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(userInput.value));
});
});
document.querySelectorAll(".add-user-to-devicegroup-input").forEach(x => {
x.addEventListener("keypress", (ev) => {
if (ev.key.toLowerCase() == "enter") {
var groupID = ev.currentTarget.getAttribute("group");
document.querySelector(`.add-user-to-devicegroup-button[group='${groupID}']`).click();
}
});
});
document.getElementById("organizationNameInput").addEventListener("input", (ev) => {
var addon = ev.currentTarget.parentElement.querySelector(".fa");
addon.classList.remove("fa-check-circle");
addon.classList.add("fa-edit");
});
document.getElementById("organizationNameInput").addEventListener("blur", (ev) => {
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
var addon = ev.target.parentElement.querySelector(".fa");
addon.classList.remove("fa-edit");
addon.classList.add("fa-check-circle");
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("put", location.origin + "/api/OrganizationManagement/Name");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(ev.currentTarget.value));
});
document.querySelectorAll(".user-is-admin-checkbox").forEach((checkbox) => {
checkbox.addEventListener("change", (ev) => {
var userID = checkbox.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("post", location.origin + `/api/OrganizationManagement/ChangeIsAdmin/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(ev.currentTarget.checked));
});
});
document.querySelectorAll(".reset-password-button").forEach((resetButton) => {
resetButton.addEventListener("click", (ev) => {
var userID = resetButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
ShowModal("Password Reset", `<div class="mb-3">
<span>Password Reset URL: </span>
<a target="_blank" href="${xhr.responseText}">Copy This Link</a>
</div>
<div>
NOTE: You must log out before visiting the reset URL. It's only valid for the selected user.
</div>
`);
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("get", `${location.origin}/api/OrganizationManagement/GenerateResetUrl/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
});
});
document.querySelectorAll(".delete-user-button").forEach((removeButton) => {
removeButton.addEventListener("click", (ev) => {
var result = confirm("Are you sure you want to delete this user?");
if (result) {
var userID = removeButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
document.querySelector(`tr[user='${userID}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", `${location.origin}/api/OrganizationManagement/DeleteUser/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
});
});
document.querySelectorAll(".delete-invite-button").forEach((deleteButton) => {
deleteButton.addEventListener("click", (ev) => {
deleteInvite(ev);
});
});
function deleteInvite(ev) {
var inviteID = ev.currentTarget.getAttribute("invite");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
var row = document.querySelector(`tr[invite='${inviteID}']`);
row.remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
};
xhr.onerror = () => {
showError(xhr);
};
xhr.open("delete", location.origin + `/api/OrganizationManagement/DeleteInvite/${inviteID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
function showError(xhr) {
console.error(xhr);
ShowModal("Error", "There was an error saving the data.", "", () => { location.reload(); });
}
//# sourceMappingURL=OrganizationManagement.js.map

File diff suppressed because one or more lines are too long

View File

@ -1,88 +1,164 @@
import { ShowModal } from "../Shared/UI.js";
export const OrganizationManagement = {
Init() {
document.getElementById("usersHelpButton").addEventListener("click", (ev) => {
ShowModal("Users", `All users for the organization are managed here.<br><br>
document.getElementById("usersHelpButton").addEventListener("click", (ev) => {
ShowModal("Users", `All users for the organization are managed here.<br><br>
Administrators will have access to this management screen as well as all computers.`);
});
document.getElementById("invitesHelpButton").addEventListener("click", (ev) => {
ShowModal("Invitations", `All pending invitations will be shown here and can be revoked by deleting them.<br><br>
});
document.getElementById("invitesHelpButton").addEventListener("click", (ev) => {
ShowModal("Invitations", `All pending invitations will be shown here and can be revoked by deleting them.<br><br>
If a user does not exist, sending an invite will create their account and add them to the current organization.
A password reset URL can be generated from the user table.
<br><br>
The Admin checkbox determines if the new user will have administrator privileges in this organization.`);
});
});
document.getElementById("deviceGroupHelpButton").addEventListener("click", (ev) => {
ShowModal("Device Groups", `Device groups can be used to organize and filter computers on the grid.`);
});
document.getElementById("deviceGroupHelpButton").addEventListener("click", (ev) => {
ShowModal("Device Groups", `Device groups can be used to organize and filter computers on the grid.`);
});
document.getElementById("addUsersToDeviceGroupButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("deviceGroupList") as HTMLSelectElement;
if (selectList.selectedOptions.length == 0) {
return;
}
if (selectList.selectedOptions.length > 1) {
ShowModal("Device Group Users", "You can only edit users for 1 device group at a time.");
return;
}
var groupID = selectList.selectedOptions[0].value;
var modalDiv = document.querySelector(`.modal[group='${groupID}']`) as HTMLDivElement;
$(modalDiv)["modal"]("show");
});
document.getElementById("removeDeviceGroupButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("deviceGroupList") as HTMLSelectElement;
var selectedValues = [];
for (var i = 0; i < selectList.selectedOptions.length; i++) {
selectedValues.push(selectList.selectedOptions[i].value);
}
selectedValues.forEach(x => {
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
document.querySelector(`#deviceGroupList option[value='${x}']`).remove();
document.getElementById("addUsersToDeviceGroupButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("deviceGroupList") as HTMLSelectElement;
if (selectList.selectedOptions.length == 0) {
return;
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
if (selectList.selectedOptions.length > 1) {
ShowModal("Device Group Users", "You can only edit users for 1 device group at a time.");
return;
}
else {
showError(xhr);
var groupID = selectList.selectedOptions[0].value;
var modalDiv = document.querySelector(`.modal[group='${groupID}']`) as HTMLDivElement;
$(modalDiv).modal("show");
});
document.getElementById("removeDeviceGroupButton").addEventListener("click", (ev) => {
var selectList = document.getElementById("deviceGroupList") as HTMLSelectElement;
var selectedValues = [];
for (var i = 0; i < selectList.selectedOptions.length; i++) {
selectedValues.push(selectList.selectedOptions[i].value);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("delete", location.origin + "/api/OrganizationManagement/DeviceGroup");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(x));
})
});
document.getElementById("deviceGroupInput").addEventListener("keypress", (e) => {
if (e.key.toLowerCase() == "enter") {
document.getElementById("addDeviceGroupButton").click();
}
})
document.querySelectorAll(".remove-user-from-device-group-button").forEach((x:HTMLElement) => {
x.addEventListener("click", clickEv => {
var groupID = (clickEv.currentTarget as HTMLButtonElement).getAttribute("group");
var selectList = document.querySelector(`.modal[group='${groupID}'] select.device-group-user-list`) as HTMLSelectElement;
var selectedValues = [];
for (var i = 0; i < selectList.selectedOptions.length; i++) {
selectedValues.push(selectList.selectedOptions[i].value);
}
selectedValues.forEach(x => {
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
document.querySelector(`#deviceGroupList option[value='${x}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("delete", location.origin + "/api/OrganizationManagement/DeviceGroup");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(x));
})
});
document.getElementById("deviceGroupInput").addEventListener("keypress", (e) => {
if (e.key.toLowerCase() == "enter") {
document.getElementById("addDeviceGroupButton").click();
}
})
selectedValues.forEach(user => {
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
document.querySelectorAll(".remove-user-from-device-group-button").forEach((x: HTMLElement) => {
x.addEventListener("click", clickEv => {
var groupID = (clickEv.currentTarget as HTMLButtonElement).getAttribute("group");
var selectList = document.querySelector(`.modal[group='${groupID}'] select.device-group-user-list`) as HTMLSelectElement;
var selectedValues = [];
for (var i = 0; i < selectList.selectedOptions.length; i++) {
selectedValues.push(selectList.selectedOptions[i].value);
}
selectedValues.forEach(user => {
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
selectList.querySelector(`option[value='${user}']`).remove()
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("delete", location.origin + `/api/OrganizationManagement/DeviceGroup/${groupID}/Users/`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(user));
})
})
});
document.querySelectorAll(".add-user-to-devicegroup-button").forEach((x: HTMLElement) => {
x.addEventListener("click", (clickEv) => {
var groupID = (clickEv.currentTarget as HTMLButtonElement).getAttribute("group");
var modal = document.querySelector(`.modal[group='${groupID}']`);
var selectList = modal.querySelector(`select.device-group-user-list`) as HTMLSelectElement;
var userInput = modal.querySelector(`input.add-user-to-devicegroup-input`) as HTMLInputElement;
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
var option = document.createElement("option");
option.value = xhr.responseText;
option.text = userInput.value;
selectList.options.add(option)
userInput.value = "";
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("post", location.origin + `/api/OrganizationManagement/DeviceGroup/${groupID}/Users/`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(userInput.value));
});
})
document.querySelectorAll(".add-user-to-devicegroup-input").forEach(x => {
x.addEventListener("keypress", (ev: KeyboardEvent) => {
if (ev.key.toLowerCase() == "enter") {
var groupID = (ev.currentTarget as HTMLInputElement).getAttribute("group");
(document.querySelector(`.add-user-to-devicegroup-button[group='${groupID}']`) as HTMLButtonElement).click();
}
})
})
document.getElementById("organizationNameInput").addEventListener("input", (ev) => {
var addon = (ev.currentTarget as HTMLInputElement).parentElement.querySelector(".fa");
addon.classList.remove("fa-check-circle");
addon.classList.add("fa-edit");
});
document.getElementById("organizationNameInput").addEventListener("blur", (ev) => {
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
selectList.querySelector(`option[value='${user}']`).remove()
var addon = (ev.target as HTMLInputElement).parentElement.querySelector(".fa");
addon.classList.remove("fa-edit");
addon.classList.add("fa-check-circle");
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
@ -94,116 +170,43 @@ document.querySelectorAll(".remove-user-from-device-group-button").forEach((x:HT
xhr.onerror = () => {
showError(xhr);
}
xhr.open("delete", location.origin + `/api/OrganizationManagement/DeviceGroup/${groupID}/Users/`);
xhr.open("put", location.origin + "/api/OrganizationManagement/Name");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(user));
})
})
});
document.querySelectorAll(".add-user-to-devicegroup-button").forEach((x: HTMLElement) => {
x.addEventListener("click", (clickEv) => {
var groupID = (clickEv.currentTarget as HTMLButtonElement).getAttribute("group");
var modal = document.querySelector(`.modal[group='${groupID}']`);
var selectList = modal.querySelector(`select.device-group-user-list`) as HTMLSelectElement;
var userInput = modal.querySelector(`input.add-user-to-devicegroup-input`) as HTMLInputElement;
let xhr = new XMLHttpRequest();
xhr.onload = (ev) => {
console.log(ev.srcElement);
if (xhr.status == 200) {
var option = document.createElement("option");
option.value = xhr.responseText;
option.text = userInput.value;
selectList.options.add(option)
userInput.value = "";
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("post", location.origin + `/api/OrganizationManagement/DeviceGroup/${groupID}/Users/`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(userInput.value));
});
})
xhr.send(JSON.stringify((ev.currentTarget as HTMLInputElement).value));
});
document.querySelectorAll(".add-user-to-devicegroup-input").forEach(x => {
x.addEventListener("keypress", (ev: KeyboardEvent) => {
if (ev.key.toLowerCase() == "enter") {
var groupID = (ev.currentTarget as HTMLInputElement).getAttribute("group");
(document.querySelector(`.add-user-to-devicegroup-button[group='${groupID}']`) as HTMLButtonElement).click();
}
})
})
document.querySelectorAll(".user-is-admin-checkbox").forEach((checkbox: HTMLInputElement) => {
checkbox.addEventListener("change", (ev) => {
var userID = checkbox.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
document.getElementById("organizationNameInput").addEventListener("input", (ev) => {
var addon = (ev.currentTarget as HTMLInputElement).parentElement.querySelector(".fa");
addon.classList.remove("fa-check-circle");
addon.classList.add("fa-edit");
});
document.getElementById("organizationNameInput").addEventListener("blur", (ev) => {
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
var addon = (ev.target as HTMLInputElement).parentElement.querySelector(".fa");
addon.classList.remove("fa-edit");
addon.classList.add("fa-check-circle");
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("put", location.origin + "/api/OrganizationManagement/Name");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify((ev.currentTarget as HTMLInputElement).value));
});
document.querySelectorAll(".user-is-admin-checkbox").forEach((checkbox: HTMLInputElement) => {
checkbox.addEventListener("change", (ev) => {
var userID = checkbox.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("post", location.origin + `/api/OrganizationManagement/ChangeIsAdmin/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify((ev.currentTarget as HTMLInputElement).checked));
})
});
document.querySelectorAll(".reset-password-button").forEach((resetButton: HTMLButtonElement) => {
resetButton.addEventListener("click", (ev) => {
var userID = resetButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
ShowModal("Password Reset",
`<div class="mb-3">
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("post", location.origin + `/api/OrganizationManagement/ChangeIsAdmin/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify((ev.currentTarget as HTMLInputElement).checked));
})
});
document.querySelectorAll(".reset-password-button").forEach((resetButton: HTMLButtonElement) => {
resetButton.addEventListener("click", (ev) => {
var userID = resetButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
ShowModal("Password Reset",
`<div class="mb-3">
<span>Password Reset URL: </span>
<a target="_blank" href="${xhr.responseText}">Copy This Link</a>
</div>
@ -212,54 +215,57 @@ document.querySelectorAll(".reset-password-button").forEach((resetButton: HTMLBu
NOTE: You must log out before visiting the reset URL. It's only valid for the selected user.
</div>
`)
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("get", `${location.origin}/api/OrganizationManagement/GenerateResetUrl/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
})
});
document.querySelectorAll(".delete-user-button").forEach((removeButton: HTMLButtonElement) => {
removeButton.addEventListener("click", (ev) => {
var result = confirm("Are you sure you want to delete this user?");
if (result) {
var userID = removeButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
document.querySelector(`tr[user='${userID}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
xhr.onerror = () => {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("delete", `${location.origin}/api/OrganizationManagement/DeleteUser/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
})
});
xhr.open("get", `${location.origin}/api/OrganizationManagement/GenerateResetUrl/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
})
});
document.querySelectorAll(".delete-user-button").forEach((removeButton: HTMLButtonElement) => {
removeButton.addEventListener("click", (ev) => {
var result = confirm("Are you sure you want to delete this user?");
if (result) {
var userID = removeButton.getAttribute("user");
var xhr = new XMLHttpRequest();
xhr.onload = () => {
if (xhr.status == 200) {
document.querySelector(`tr[user='${userID}']`).remove();
}
else if (xhr.status == 400) {
ShowModal("Invalid Request", xhr.responseText);
}
else {
showError(xhr);
}
}
xhr.onerror = () => {
showError(xhr);
}
xhr.open("delete", `${location.origin}/api/OrganizationManagement/DeleteUser/${userID}`);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send();
}
})
});
document.querySelectorAll(".delete-invite-button").forEach((deleteButton: HTMLButtonElement) => {
deleteButton.addEventListener("click", (ev) => {
deleteInvite(ev);
})
})
document.querySelectorAll(".delete-invite-button").forEach((deleteButton: HTMLButtonElement) => {
deleteButton.addEventListener("click", (ev) => {
deleteInvite(ev);
})
})
}
}
function deleteInvite(ev: MouseEvent) {
var inviteID = (ev.currentTarget as HTMLButtonElement).getAttribute("invite");

View File

@ -1,90 +0,0 @@
var serverConfigForm = document.getElementById("serverConfigForm");
var serverConfigSaveButton = document.getElementById("serverConfigSaveButton");
var trustedCorsAddButton = document.getElementById("trustedCorsAddButton");
var trustedCorsRemoveButton = document.getElementById("trustedCorsRemoveButton");
var trustedCorsInput = document.getElementById("trustedCorsInput");
var trustedCorsSelect = document.getElementById("trustedCorsSelect");
var knownProxiesAddButton = document.getElementById("knownProxiesAddButton");
var knownProxiesRemoveButton = document.getElementById("knownProxiesRemoveButton");
var knownProxiesInput = document.getElementById("knownProxiesInput");
var knownProxiesSelect = document.getElementById("knownProxiesSelect");
var serverAdminsAddButton = document.getElementById("serverAdminsAddButton");
var serverAdminsRemoveButton = document.getElementById("serverAdminsRemoveButton");
var serverAdminsInput = document.getElementById("serverAdminsInput");
var serverAdminsSelect = document.getElementById("serverAdminsSelect");
serverConfigSaveButton.addEventListener("click", e => {
for (var i = 0; i < trustedCorsSelect.options.length; i++) {
trustedCorsSelect.options[i].selected = true;
}
for (var i = 0; i < knownProxiesSelect.options.length; i++) {
knownProxiesSelect.options[i].selected = true;
}
for (var i = 0; i < serverAdminsSelect.options.length; i++) {
serverAdminsSelect.options[i].selected = true;
}
serverConfigForm.submit();
});
trustedCorsAddButton.addEventListener("click", ev => {
if (trustedCorsInput.value.length > 0) {
var option = document.createElement("option");
option.value = trustedCorsInput.value;
option.text = trustedCorsInput.value;
trustedCorsSelect.add(option);
trustedCorsInput.value = "";
}
});
trustedCorsInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
trustedCorsAddButton.click();
}
});
trustedCorsRemoveButton.addEventListener("click", ev => {
while (trustedCorsSelect.selectedOptions.length > 0) {
trustedCorsSelect.selectedOptions[0].remove();
}
});
knownProxiesAddButton.addEventListener("click", ev => {
if (knownProxiesInput.value.length > 0) {
var option = document.createElement("option");
option.value = knownProxiesInput.value;
option.text = knownProxiesInput.value;
knownProxiesSelect.add(option);
knownProxiesInput.value = "";
}
});
knownProxiesInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
knownProxiesAddButton.click();
}
});
knownProxiesRemoveButton.addEventListener("click", ev => {
while (knownProxiesSelect.selectedOptions.length > 0) {
knownProxiesSelect.selectedOptions[0].remove();
}
});
serverAdminsAddButton.addEventListener("click", ev => {
if (serverAdminsInput.value.length > 0) {
var option = document.createElement("option");
option.value = serverAdminsInput.value;
option.text = serverAdminsInput.value;
serverAdminsSelect.add(option);
serverAdminsInput.value = "";
}
});
serverAdminsInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
serverAdminsAddButton.click();
}
});
serverAdminsRemoveButton.addEventListener("click", ev => {
while (serverAdminsSelect.selectedOptions.length > 0) {
serverAdminsSelect.selectedOptions[0].remove();
}
});
//# sourceMappingURL=ServerConfig.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"ServerConfig.js","sourceRoot":"","sources":["ServerConfig.ts"],"names":[],"mappings":"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"}

View File

@ -16,90 +16,95 @@ var serverAdminsRemoveButton = document.getElementById("serverAdminsRemoveButton
var serverAdminsInput = document.getElementById("serverAdminsInput") as HTMLInputElement;
var serverAdminsSelect = document.getElementById("serverAdminsSelect") as HTMLSelectElement;
serverConfigSaveButton.addEventListener("click", e => {
for (var i = 0; i < trustedCorsSelect.options.length; i++) {
trustedCorsSelect.options[i].selected = true;
}
for (var i = 0; i < knownProxiesSelect.options.length; i++) {
knownProxiesSelect.options[i].selected = true;
}
for (var i = 0; i < serverAdminsSelect.options.length; i++) {
serverAdminsSelect.options[i].selected = true;
}
export const ServerConfig = {
Init() {
serverConfigSaveButton.addEventListener("click", e => {
for (var i = 0; i < trustedCorsSelect.options.length; i++) {
trustedCorsSelect.options[i].selected = true;
}
for (var i = 0; i < knownProxiesSelect.options.length; i++) {
knownProxiesSelect.options[i].selected = true;
}
for (var i = 0; i < serverAdminsSelect.options.length; i++) {
serverAdminsSelect.options[i].selected = true;
}
serverConfigForm.submit();
});
serverConfigForm.submit();
});
trustedCorsAddButton.addEventListener("click", ev => {
if (trustedCorsInput.value.length > 0) {
var option = document.createElement("option");
option.value = trustedCorsInput.value;
option.text = trustedCorsInput.value;
trustedCorsSelect.add(option);
trustedCorsInput.value = "";
}
});
trustedCorsAddButton.addEventListener("click", ev => {
if (trustedCorsInput.value.length > 0) {
var option = document.createElement("option");
option.value = trustedCorsInput.value;
option.text = trustedCorsInput.value;
trustedCorsSelect.add(option);
trustedCorsInput.value = "";
}
});
trustedCorsInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
trustedCorsAddButton.click();
}
})
trustedCorsInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
trustedCorsAddButton.click();
}
})
trustedCorsRemoveButton.addEventListener("click", ev => {
while (trustedCorsSelect.selectedOptions.length > 0) {
trustedCorsSelect.selectedOptions[0].remove();
}
});
trustedCorsRemoveButton.addEventListener("click", ev => {
while (trustedCorsSelect.selectedOptions.length > 0) {
trustedCorsSelect.selectedOptions[0].remove();
}
});
knownProxiesAddButton.addEventListener("click", ev => {
if (knownProxiesInput.value.length > 0) {
var option = document.createElement("option");
option.value = knownProxiesInput.value;
option.text = knownProxiesInput.value;
knownProxiesSelect.add(option);
knownProxiesInput.value = "";
}
});
knownProxiesAddButton.addEventListener("click", ev => {
if (knownProxiesInput.value.length > 0) {
var option = document.createElement("option");
option.value = knownProxiesInput.value;
option.text = knownProxiesInput.value;
knownProxiesSelect.add(option);
knownProxiesInput.value = "";
}
});
knownProxiesInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
knownProxiesAddButton.click();
}
})
knownProxiesInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
knownProxiesAddButton.click();
}
})
knownProxiesRemoveButton.addEventListener("click", ev => {
while (knownProxiesSelect.selectedOptions.length > 0) {
knownProxiesSelect.selectedOptions[0].remove();
}
});
knownProxiesRemoveButton.addEventListener("click", ev => {
while (knownProxiesSelect.selectedOptions.length > 0) {
knownProxiesSelect.selectedOptions[0].remove();
}
});
serverAdminsAddButton.addEventListener("click", ev => {
if (serverAdminsInput.value.length > 0) {
var option = document.createElement("option");
option.value = serverAdminsInput.value;
option.text = serverAdminsInput.value;
serverAdminsSelect.add(option);
serverAdminsInput.value = "";
}
});
serverAdminsAddButton.addEventListener("click", ev => {
if (serverAdminsInput.value.length > 0) {
var option = document.createElement("option");
option.value = serverAdminsInput.value;
option.text = serverAdminsInput.value;
serverAdminsSelect.add(option);
serverAdminsInput.value = "";
}
});
serverAdminsInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
serverAdminsAddButton.click();
}
})
serverAdminsInput.addEventListener("keypress", ev => {
if (ev.key.toLowerCase() == "enter") {
ev.preventDefault();
ev.stopPropagation();
serverAdminsAddButton.click();
}
})
serverAdminsRemoveButton.addEventListener("click", ev => {
while (serverAdminsSelect.selectedOptions.length > 0) {
serverAdminsSelect.selectedOptions[0].remove();
}
});
serverAdminsRemoveButton.addEventListener("click", ev => {
while (serverAdminsSelect.selectedOptions.length > 0) {
serverAdminsSelect.selectedOptions[0].remove();
}
});
}

View File

@ -1,18 +0,0 @@
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es2017",
"module": "ESNext",
"allowJs": false,
"moduleResolution": "Node"
},
"exclude": [
"node_modules",
"obj",
"bin"
],
"compileOnSave": true
}

View File

@ -13,7 +13,7 @@ export var StatusMessage = document.getElementById("statusMessage") as HTMLDivEl
export var ScreenViewer = document.getElementById("screenViewer") as HTMLCanvasElement;
export var VideoScreenViewer = document.getElementById("videoScreenViewer") as HTMLVideoElement;
export var ScreenViewerWrapper = document.getElementById("screenViewerWrapper") as HTMLDivElement;
export var Screen2DContext = ScreenViewer.getContext("2d");
export var Screen2DContext = ScreenViewer ? ScreenViewer.getContext("2d") : null;
export var HorizontalBars = document.querySelectorAll(".horizontal-button-bar");
export var ConnectBox = document.getElementById("connectBox") as HTMLDivElement;
export var ScreenSelectBar = document.getElementById("screenSelectBar") as HTMLDivElement;

View File

@ -1,19 +0,0 @@
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": true,
"target": "es2017",
"module": "AMD",
"allowJs": false,
"outFile": "../../outViewer.js",
"moduleResolution": "Node"
},
"exclude": [
"node_modules",
"obj",
"bin"
],
"compileOnSave": true
}

View File

@ -1,62 +0,0 @@
import { CreateGUID } from "./Utilities.js";
export var ToastsWrapper = document.getElementById("toastsWrapper");
export function ShowMessage(message) {
var messageDiv = document.createElement("div");
messageDiv.classList.add("toast-message");
messageDiv.innerHTML = message;
ToastsWrapper.appendChild(messageDiv);
window.setTimeout(() => {
messageDiv.remove();
}, 5000);
}
export function ShowModal(title, modalBodyHtml, buttonsHTML = "", onDismissCallback = null) {
var modalID = CreateGUID();
var modalHTML = `<div id="${modalID}" class="modal fade in" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">${title}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
${modalBodyHtml}
</div>
<div class="modal-footer">
${buttonsHTML}
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>`;
var wrapperDiv = document.createElement("div");
wrapperDiv.innerHTML = modalHTML;
document.body.appendChild(wrapperDiv);
$("#" + modalID).on("hidden.bs.modal", ev => {
try {
if (onDismissCallback) {
onDismissCallback();
}
}
finally {
ev.currentTarget.parentElement.remove();
}
});
$("#" + modalID)["modal"]("show");
return wrapperDiv;
}
export function ValidateInput(inputElement) {
if (!inputElement.checkValidity()) {
$(inputElement)["tooltip"]({
template: '<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner text-danger"></div></div>',
title: inputElement.validationMessage
});
$(inputElement)["tooltip"]("show");
return false;
}
else {
return true;
}
}
//# sourceMappingURL=UI.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"UI.js","sourceRoot":"","sources":["UI.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,CAAC,IAAI,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,eAAe,CAAmB,CAAC;AAEtF,MAAM,UAAU,WAAW,CAAC,OAAe;IACvC,IAAI,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,UAAU,CAAC,SAAS,GAAG,OAAO,CAAC;IAC/B,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QACnB,UAAU,CAAC,MAAM,EAAE,CAAC;IACxB,CAAC,EAAE,IAAI,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,aAAqB,EAAE,cAAsB,EAAE,EAAE,oBAAkC,IAAI;IAC5H,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;IAC3B,IAAI,SAAS,GAAG,YAAY,OAAO;;;;0CAIG,KAAK;;;;;;kBAM7B,aAAa;;;kBAGb,WAAW;;;;;eAKd,CAAC;IACZ,IAAI,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAC/C,UAAU,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,iBAAiB,EAAE,EAAE,CAAC,EAAE;QACxC,IAAI;YACA,IAAI,iBAAiB,EAAE;gBACnB,iBAAiB,EAAE,CAAC;aACvB;SACJ;gBACO;YACH,EAAE,CAAC,aAA6B,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;SAC5D;IACL,CAAC,CAAC,CAAC;IACH,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,YAA8B;IACxD,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE;QAC/B,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;YACvB,QAAQ,EAAE,kHAAkH;YAC5H,KAAK,EAAE,YAAY,CAAC,iBAAiB;SACxC,CAAC,CAAC;QACH,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC;KAChB;SACI;QACD,OAAO,IAAI,CAAC;KACf;AACL,CAAC"}

View File

@ -46,7 +46,7 @@ export function ShowModal(title: string, modalBodyHtml: string, buttonsHTML: str
(ev.currentTarget as HTMLElement).parentElement.remove();
}
});
$("#" + modalID)["modal"]("show");
$("#" + modalID).modal("show");
return wrapperDiv;
}

View File

@ -1,87 +0,0 @@
/**
* Splits a string into "parts" number of pieces. Once "parts" number is
* reached, additional occurrences of the splitter are ignored.
* @param splitter
* @param parts
*/
export function Split(originalString, splitter, parts) {
var returnArray = [];
var remainingString = originalString;
for (var i = 1; i < parts; i++) {
if (remainingString.indexOf(splitter) == -1) {
break;
}
returnArray.push(remainingString.slice(0, remainingString.indexOf(splitter)));
remainingString = remainingString.slice(remainingString.indexOf(splitter) + splitter.length);
}
returnArray.push(remainingString);
return returnArray;
}
export function CreateGUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
export function EncodeForHTML(text) {
var tempDiv = document.createElement("div");
tempDiv.innerText = text;
return tempDiv.innerHTML;
}
export function ParseSearchString() {
var queryStrings = {};
var queryArray = location.search.substring(1).split("&");
queryArray.forEach(value => {
var keyValue = value.split("=");
queryStrings[keyValue[0]] = keyValue[1];
});
return queryStrings;
}
export function GetDistanceBetween(fromX, fromY, toX, toY) {
return Math.sqrt(Math.pow(fromX - toX, 2) +
Math.pow(fromY - toY, 2));
}
export async function When(predicate, pollingTimeMs = 100) {
return new Promise((resolve, reject) => {
function checkCondition() {
if (predicate()) {
resolve();
}
else {
window.setTimeout(() => {
checkCondition();
}, pollingTimeMs);
}
}
checkCondition();
});
}
export function ConvertBase64ToUInt8Array(base64) {
var binaryString = window.atob(base64);
var bytes = new Uint8ClampedArray(binaryString.length);
for (var i = 0; i < binaryString.length; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes;
}
export function ConvertUInt8ArrayToBase64(array) {
var base64String = '';
for (var i = 0; i < array.byteLength; i++) {
base64String += String.fromCharCode(array[i]);
}
return btoa(base64String);
}
export function FormatScriptOutput(output) {
return EncodeForHTML(output).replace(/ /g, "&nbsp;").replace(/\n/g, "<br>");
}
export function FormatScriptOutputArray(output) {
return output.map(x => EncodeForHTML(x)).join("<br>");
}
export function RemoveFromArray(array, item) {
var index = array.indexOf(item);
if (index > -1) {
array.splice(index, 1);
}
}
;
//# sourceMappingURL=Utilities.js.map

View File

@ -1 +0,0 @@
{"version":3,"file":"Utilities.js","sourceRoot":"","sources":["Utilities.ts"],"names":[],"mappings":"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"}

View File

@ -7,7 +7,7 @@
"target": "es2017",
"module": "AMD",
"allowJs": false,
"outFile": "../../outMain.js",
"outFile": "../out.js",
"moduleResolution": "Node"
},
"exclude": [