Sorted command completions. Console tab notifies when new messages have arrived if another tab is selected. Desktop app prepends scheme to URL if missing. Increased upload size limit.

This commit is contained in:
Jared Goodwin 2019-03-15 22:56:44 -07:00
parent c59a18aff0
commit 2858731cd1
17 changed files with 146 additions and 81 deletions

1
.gitignore vendored
View File

@ -263,5 +263,6 @@ __pycache__/
/Remotely_Server/wwwroot/Downloads/*.exe
/Remotely_Server/wwwroot/Downloads/*.zip
/Remotely_Server/wwwroot/Downloads/*.appimage
/Remotely_Server/wwwroot/Downloads/CurrentAgentVersion.txt
/Remotely_Server/Server.db
/Remotely_Agent/Resources/*

View File

@ -54,6 +54,7 @@ namespace Remotely_Desktop.ViewModels
Config = Config.GetConfig();
while (string.IsNullOrWhiteSpace(Config.Host))
{
Config.Host = "https://";
PromptForHostName();
}
@ -135,6 +136,10 @@ namespace Remotely_Desktop.ViewModels
prompt.Owner = App.Current?.MainWindow;
prompt.ShowDialog();
var result = HostNamePromptViewModel.Current.Host.TrimEnd("/".ToCharArray());
if (!result.StartsWith("https://") && !result.StartsWith("http://"))
{
result = $"https://{result}";
}
if (result != Config.Host)
{
Config.Host = result;

View File

@ -2,8 +2,19 @@
<div class="work-area hidden">
<ul class="nav nav-tabs">
<li class="nav-item"><a class="nav-link active show" href="#consoleFrame" data-toggle="tab">Console</a></li>
<li class="nav-item"><a class="nav-link" href="#dataGridFrame" data-toggle="tab">Grid</a></li>
<li class="nav-item">
<a id="consoleTab" class="nav-link active show" href="#consoleFrame" data-toggle="tab">
Console
<span id="consoleAlert" class="badge badge-info badge-pill align-top" hidden>
<i class="fa fa-exclamation" aria-hidden="true"></i>
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#dataGridFrame" data-toggle="tab">
Grid
</a>
</li>
</ul>
<div id="tabContentWrapper">
<div class="tab-content">

View File

@ -4,6 +4,11 @@
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="100000000" />
</requestFiltering>
</security>
</system.webServer>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->

View File

@ -37,6 +37,23 @@ a.navbar-brand {
overflow-y: hidden;
margin-top: 10px
}
#consoleAlert {
animation-name: blink;
animation-direction: alternate-reverse;
animation-duration: 1s;
animation-iteration-count: infinite;
animation-timing-function: ease;
}
@keyframes blink {
from {
opacity: .25;
}
to {
opacity: 1;
}
}
#dataGridFrame {
max-height: calc(100vh - 250px);

View File

@ -1,6 +1,11 @@
import { UserSettings } from "./UserSettings.js";
import { Store } from "./Store.js";
import { WebCommands } from "./Commands/WebCommands.js";
import * as UI from "./UI.js";
import { CMDCommands } from "./Commands/CMDCommands.js";
import { PSCoreCommands } from "./Commands/PSCoreCommands.js";
import { WinPSCommands } from "./Commands/WinPSCommands.js";
import { BashCommands } from "./Commands/BashCommands.js";
var commandCompletionDisplayTimeout;
export function DisplayCommandCompletions(commands, relevantText) {
window.clearTimeout(commandCompletionDisplayTimeout);
@ -9,14 +14,14 @@ export function DisplayCommandCompletions(commands, relevantText) {
var commandCompletionItem = document.createElement("div");
commandCompletionItem.classList.add("command-completion-item");
commandCompletionItem.innerHTML = x.Name;
commandCompletionItem.onclick = function (e) {
commandCompletionItem.onclick = function () {
var commandText = UI.ConsoleTextArea.value;
var insertCommandStart = commandText.lastIndexOf(relevantText);
UI.ConsoleTextArea.value = commandText.substring(0, insertCommandStart) + commandCompletionItem.innerHTML;
UI.CommandCompletionDiv.classList.add("hidden");
UI.CommandInfoDiv.classList.add("hidden");
};
commandCompletionItem.onfocus = function (e) {
commandCompletionItem.onfocus = function () {
ShowCommandInfo(x);
};
UI.CommandCompletionDiv.appendChild(commandCompletionItem);
@ -46,13 +51,13 @@ export function DisplayParameterCompletions(command, parameters, commandText) {
var commandCompletionItem = document.createElement("div");
commandCompletionItem.classList.add("command-completion-item");
commandCompletionItem.innerHTML = param.Name;
commandCompletionItem.onclick = function (e) {
commandCompletionItem.onclick = function () {
var preParam = UI.ConsoleTextArea.value.substring(0, UI.ConsoleTextArea.value.lastIndexOf(" "));
UI.ConsoleTextArea.value = preParam.trim() + ` -${commandCompletionItem.innerText}`;
UI.CommandCompletionDiv.classList.add("hidden");
UI.CommandInfoDiv.classList.add("hidden");
};
commandCompletionItem.onfocus = function (e) {
commandCompletionItem.onfocus = function () {
ShowParameterInfo(param);
};
UI.CommandCompletionDiv.appendChild(commandCompletionItem);
@ -71,13 +76,13 @@ export function DisplayCommandShortcuts(shortcutText) {
var commandCompletionItem = document.createElement("div");
commandCompletionItem.classList.add("command-completion-item");
commandCompletionItem.innerHTML = x;
commandCompletionItem.onclick = function (e) {
commandCompletionItem.onclick = function () {
UI.CommandModeSelect.value = x;
UI.ConsoleTextArea.value = "";
UI.CommandCompletionDiv.classList.add("hidden");
UI.CommandInfoDiv.classList.add("hidden");
};
commandCompletionItem.onfocus = function (e) { };
commandCompletionItem.onfocus = function () { };
UI.CommandCompletionDiv.appendChild(commandCompletionItem);
});
if (!UI.CommandCompletionDiv.classList.contains("hidden") && matchingShortcuts.length > 0) {
@ -85,6 +90,32 @@ export function DisplayCommandShortcuts(shortcutText) {
PositionCommandCompletionWindow();
}
}
export function GetCommandCompletions(commandText) {
var commandList;
switch (UI.CommandModeSelect.value) {
case "Web":
commandList = WebCommands;
break;
case "CMD":
commandList = CMDCommands;
break;
case "PSCore":
commandList = PSCoreCommands;
break;
case "WinPS":
commandList = WinPSCommands;
break;
case "Bash":
commandList = BashCommands;
break;
default:
UI.CommandCompletionDiv.classList.add("hidden");
return;
}
var filteredList = commandList.filter(x => x.Name.toLowerCase().indexOf(commandText.toLowerCase()) > -1);
filteredList.sort((a, b) => a.Name.localeCompare(b.Name));
return filteredList;
}
export function SetCommandCompletionPositionToIncompleteParam(parameters) {
var lastParam = parameters[parameters.length - 1];
if (typeof lastParam != 'undefined' && lastParam.Value.length == 0) {

File diff suppressed because one or more lines are too long

View File

@ -1,13 +1,14 @@
import * as CommandProcessor from "./CommandProcessor.js";
import { UserSettings } from "./UserSettings.js";
import * as Utilities from "./Utilities.js";
import { UserSettings } from "./UserSettings.js";
import { Store } from "./Store.js";
import { ConsoleCommand } from "./Models/ConsoleCommand.js";
import { CommandLineParameter } from "./Models/CommandLineParameter.js";
import { WebCommands } from "./Commands/WebCommands.js";
import { Parameter } from "./Models/Parameter.js";
import { Main } from "./Main.js";
import * as UI from "./UI.js"
import { CMDCommands } from "./Commands/CMDCommands.js";
import { PSCoreCommands } from "./Commands/PSCoreCommands.js";
import { WinPSCommands } from "./Commands/WinPSCommands.js";
import { BashCommands } from "./Commands/BashCommands.js";
var commandCompletionDisplayTimeout;
@ -18,14 +19,14 @@ export function DisplayCommandCompletions(commands: Array<ConsoleCommand>, relev
var commandCompletionItem = document.createElement("div");
commandCompletionItem.classList.add("command-completion-item");
commandCompletionItem.innerHTML = x.Name;
commandCompletionItem.onclick = function (e) {
commandCompletionItem.onclick = function () {
var commandText = UI.ConsoleTextArea.value;
var insertCommandStart = commandText.lastIndexOf(relevantText);
UI.ConsoleTextArea.value = commandText.substring(0, insertCommandStart) + commandCompletionItem.innerHTML;
UI.CommandCompletionDiv.classList.add("hidden");
UI.CommandInfoDiv.classList.add("hidden");
};
commandCompletionItem.onfocus = function (e) {
commandCompletionItem.onfocus = function () {
ShowCommandInfo(x);
}
UI.CommandCompletionDiv.appendChild(commandCompletionItem);
@ -60,13 +61,13 @@ export function DisplayParameterCompletions(command: ConsoleCommand, parameters:
var commandCompletionItem = document.createElement("div");
commandCompletionItem.classList.add("command-completion-item");
commandCompletionItem.innerHTML = param.Name;
commandCompletionItem.onclick = function (e: MouseEvent) {
commandCompletionItem.onclick = function () {
var preParam = UI.ConsoleTextArea.value.substring(0, UI.ConsoleTextArea.value.lastIndexOf(" "));
UI.ConsoleTextArea.value = preParam.trim() + ` -${commandCompletionItem.innerText}`;
UI.CommandCompletionDiv.classList.add("hidden");
UI.CommandInfoDiv.classList.add("hidden");
};
commandCompletionItem.onfocus = function (e) {
commandCompletionItem.onfocus = function () {
ShowParameterInfo(param);
}
UI.CommandCompletionDiv.appendChild(commandCompletionItem);
@ -86,13 +87,13 @@ export function DisplayCommandShortcuts(shortcutText: string) {
var commandCompletionItem = document.createElement("div");
commandCompletionItem.classList.add("command-completion-item");
commandCompletionItem.innerHTML = x;
commandCompletionItem.onclick = function (e: MouseEvent) {
commandCompletionItem.onclick = function () {
UI.CommandModeSelect.value = x;
UI.ConsoleTextArea.value = "";
UI.CommandCompletionDiv.classList.add("hidden");
UI.CommandInfoDiv.classList.add("hidden");
};
commandCompletionItem.onfocus = function (e) {}
commandCompletionItem.onfocus = function () {}
UI.CommandCompletionDiv.appendChild(commandCompletionItem);
})
if (!UI.CommandCompletionDiv.classList.contains("hidden") && matchingShortcuts.length > 0) {
@ -101,6 +102,34 @@ export function DisplayCommandShortcuts(shortcutText: string) {
}
}
export function GetCommandCompletions(commandText: string): ConsoleCommand[] {
var commandList:ConsoleCommand[];
switch (UI.CommandModeSelect.value) {
case "Web":
commandList = WebCommands;
break;
case "CMD":
commandList = CMDCommands;
break;
case "PSCore":
commandList = PSCoreCommands;
break;
case "WinPS":
commandList = WinPSCommands;
break;
case "Bash":
commandList = BashCommands;
break;
default:
UI.CommandCompletionDiv.classList.add("hidden");
return;
}
var filteredList = commandList.filter(x => x.Name.toLowerCase().indexOf(commandText.toLowerCase()) > -1);
filteredList.sort((a, b) => a.Name.localeCompare(b.Name));
return filteredList;
}
export function SetCommandCompletionPositionToIncompleteParam(parameters: CommandLineParameter[]) {
var lastParam = parameters[parameters.length - 1];
if (typeof lastParam != 'undefined' && lastParam.Value.length == 0) {

View File

@ -1,14 +1,10 @@
import { WebCommands } from "./Commands/WebCommands.js";
import { UserSettings } from "./UserSettings.js";
import { CMDCommands } from "./Commands/CMDCommands.js";
import { PSCoreCommands } from "./Commands/PSCoreCommands.js";
import { BashCommands } from "./Commands/BashCommands.js";
import { Main } from "./Main.js";
import { CommandLineParameter } from "./Models/CommandLineParameter.js";
import * as UI from "./UI.js";
import { Store } from "./Store.js";
import { DisplayCommandShortcuts, DisplayCommandCompletions, DisplayParameterCompletions } from "./CommandCompletion.js";
import { WinPSCommands } from "./Commands/WinPSCommands.js";
import { DisplayCommandShortcuts, DisplayCommandCompletions, DisplayParameterCompletions, GetCommandCompletions } from "./CommandCompletion.js";
import { Connection } from "./BrowserSockets.js";
export function EvaluateCurrentCommandText() {
UI.AutoSizeTextArea();
@ -60,30 +56,6 @@ export function GetRelevantCommandText(commandText) {
}
return commandText;
}
export function GetCommandCompletions(commandText) {
var commandList;
switch (UI.CommandModeSelect.value) {
case "Web":
commandList = WebCommands;
break;
case "CMD":
commandList = CMDCommands;
break;
case "PSCore":
commandList = PSCoreCommands;
break;
case "WinPS":
commandList = WinPSCommands;
break;
case "Bash":
commandList = BashCommands;
break;
default:
UI.CommandCompletionDiv.classList.add("hidden");
return;
}
return commandList.filter(x => x.Name.toLowerCase().indexOf(commandText.toLowerCase()) > -1);
}
/** Checks the given string for a matching shortcut. */
export function GetCommandModeShortcut() {
switch (UI.ConsoleTextArea.value.toLowerCase()) {

File diff suppressed because one or more lines are too long

View File

@ -1,15 +1,10 @@
import { WebCommands } from "./Commands/WebCommands.js";
import { UserSettings } from "./UserSettings.js";
import { CMDCommands } from "./Commands/CMDCommands.js";
import { PSCoreCommands } from "./Commands/PSCoreCommands.js";
import { BashCommands } from "./Commands/BashCommands.js";
import { Main } from "./Main.js";
import { CommandLineParameter } from "./Models/CommandLineParameter.js";
import * as UI from "./UI.js";
import { Store } from "./Store.js";
import { ConsoleCommand } from "./Models/ConsoleCommand.js";
import { DisplayCommandShortcuts, DisplayCommandCompletions, DisplayParameterCompletions } from "./CommandCompletion.js";
import { WinPSCommands } from "./Commands/WinPSCommands.js";
import { DisplayCommandShortcuts, DisplayCommandCompletions, DisplayParameterCompletions, GetCommandCompletions } from "./CommandCompletion.js";
import { Connection } from "./BrowserSockets.js";
export function EvaluateCurrentCommandText() {
@ -63,31 +58,7 @@ export function GetRelevantCommandText(commandText:string) {
}
return commandText;
}
export function GetCommandCompletions(commandText:string): ConsoleCommand[] {
var commandList;
switch (UI.CommandModeSelect.value) {
case "Web":
commandList = WebCommands;
break;
case "CMD":
commandList = CMDCommands;
break;
case "PSCore":
commandList = PSCoreCommands;
break;
case "WinPS":
commandList = WinPSCommands;
break;
case "Bash":
commandList = BashCommands;
break;
default:
UI.CommandCompletionDiv.classList.add("hidden");
return;
}
return commandList.filter(x => x.Name.toLowerCase().indexOf(commandText.toLowerCase()) > -1);
}
/** Checks the given string for a matching shortcut. */
export function GetCommandModeShortcut() {

View File

@ -12,6 +12,7 @@ export function ApplyInputEventHandlers() {
inputOnFilterTextBox();
clickToggleAllDevices();
clickStartRemoteControlButton();
consoleTabSelected();
window.addEventListener("resize", ev => {
PositionCommandCompletionWindow();
});
@ -149,6 +150,11 @@ function inputOnFilterTextBox() {
});
});
}
function consoleTabSelected() {
$(UI.ConsoleTab).on("shown.bs.tab", () => {
UI.ConsoleAlert.hidden = true;
});
}
function clickToggleAllDevices() {
document.getElementById("toggleAllDevices").addEventListener("click", function (e) {
DataGrid.ToggleSelectAll();

File diff suppressed because one or more lines are too long

View File

@ -14,6 +14,7 @@ export function ApplyInputEventHandlers() {
inputOnFilterTextBox();
clickToggleAllDevices();
clickStartRemoteControlButton();
consoleTabSelected();
window.addEventListener("resize", ev => {
PositionCommandCompletionWindow();
@ -156,6 +157,11 @@ function inputOnFilterTextBox() {
})
})
}
function consoleTabSelected() {
$(UI.ConsoleTab).on("shown.bs.tab", () => {
UI.ConsoleAlert.hidden = true;
});
}
function clickToggleAllDevices() {
document.getElementById("toggleAllDevices").addEventListener("click", function (e) {
DataGrid.ToggleSelectAll();

View File

@ -13,6 +13,8 @@ export var TotalDevicesCount = document.querySelector("#totalDevicesSpan");
export var MeasurementCanvas = document.createElement("canvas");
export var MeasurementContext = MeasurementCanvas.getContext("2d");
export var TabContentWrapper = document.getElementById("tabContentWrapper");
export var ConsoleTab = document.getElementById("consoleTab");
export var ConsoleAlert = document.getElementById("consoleAlert");
export function AddConsoleOutput(strOutputMessage) {
var outputBlock = document.createElement("div");
outputBlock.classList.add("console-block");
@ -26,6 +28,9 @@ export function AddConsoleOutput(strOutputMessage) {
outputBlock.appendChild(output);
ConsoleOutputDiv.appendChild(outputBlock);
TabContentWrapper.scrollTop = TabContentWrapper.scrollHeight;
if (!ConsoleTab.classList.contains("active")) {
ConsoleAlert.hidden = false;
}
}
export function AddConsoleHTML(html) {
var contentWrapper = document.createElement("div");

View File

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

View File

@ -27,6 +27,8 @@ export var TotalDevicesCount = document.querySelector("#totalDevicesSpan") as HT
export var MeasurementCanvas = document.createElement("canvas");
export var MeasurementContext = MeasurementCanvas.getContext("2d");
export var TabContentWrapper = document.getElementById("tabContentWrapper") as HTMLDivElement;
export var ConsoleTab = document.getElementById("consoleTab") as HTMLAnchorElement;
export var ConsoleAlert = document.getElementById("consoleAlert") as HTMLAnchorElement;
export function AddConsoleOutput(strOutputMessage:string) {
@ -47,6 +49,10 @@ export function AddConsoleOutput(strOutputMessage:string) {
ConsoleOutputDiv.appendChild(outputBlock);
TabContentWrapper.scrollTop = TabContentWrapper.scrollHeight;
if (!ConsoleTab.classList.contains("active")) {
ConsoleAlert.hidden = false;
}
}
export function AddConsoleHTML(html: string) {
var contentWrapper = document.createElement("div");