diff --git a/forge.config.js b/forge.config.js index 1e2d745a..63d12edd 100644 --- a/forge.config.js +++ b/forge.config.js @@ -1,9 +1,9 @@ var AllowedFirstParts = { "package.json": true, - "dist": true, - "static": true, - "node_modules": true, - "bin": true, + dist: true, + static: true, + node_modules: true, + bin: true, }; var AllowedNodeModules = { @@ -39,7 +39,6 @@ function ignoreFn(path) { if (!AllowedNodeModules[nodeModule]) { return true; } - } return false; } @@ -75,19 +74,19 @@ module.exports = { rebuildConfig: {}, makers: [ { - name: '@electron-forge/maker-squirrel', + name: "@electron-forge/maker-squirrel", config: {}, }, { - name: '@electron-forge/maker-zip', - platforms: ['darwin'], + name: "@electron-forge/maker-zip", + platforms: ["darwin"], }, { - name: '@electron-forge/maker-deb', + name: "@electron-forge/maker-deb", config: {}, }, { - name: '@electron-forge/maker-rpm', + name: "@electron-forge/maker-rpm", config: {}, }, ], diff --git a/src/bookmarks.tsx b/src/bookmarks.tsx index c7c9c7db..af7b2ae2 100644 --- a/src/bookmarks.tsx +++ b/src/bookmarks.tsx @@ -1,48 +1,48 @@ import * as React from "react"; import * as mobxReact from "mobx-react"; import * as mobx from "mobx"; -import {sprintf} from "sprintf-js"; -import {boundMethod} from "autobind-decorator"; -import {v4 as uuidv4} from "uuid"; +import { sprintf } from "sprintf-js"; +import { boundMethod } from "autobind-decorator"; +import { v4 as uuidv4 } from "uuid"; import dayjs from "dayjs"; -import {If, For, When, Otherwise, Choose} from "tsx-control-statements/components"; +import { If, For, When, Otherwise, Choose } from "tsx-control-statements/components"; import cn from "classnames"; -import type {BookmarkType} from "./types"; -import {GlobalModel, GlobalCommandRunner} from "./model"; -import {CmdStrCode, Markdown} from "./elements"; +import type { BookmarkType } from "./types"; +import { GlobalModel, GlobalCommandRunner } from "./model"; +import { CmdStrCode, Markdown } from "./elements"; @mobxReact.observer -class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> { +class Bookmark extends React.Component<{ bookmark: BookmarkType }, {}> { @boundMethod - handleDeleteClick() : void { - let {bookmark} = this.props; + handleDeleteClick(): void { + let { bookmark } = this.props; let model = GlobalModel.bookmarksModel; model.handleDeleteBookmark(bookmark.bookmarkid); } @boundMethod - handleEditClick() : void { - let {bookmark} = this.props; + handleEditClick(): void { + let { bookmark } = this.props; let model = GlobalModel.bookmarksModel; model.handleEditBookmark(bookmark.bookmarkid); } @boundMethod - handleEditCancel() : void { + handleEditCancel(): void { let model = GlobalModel.bookmarksModel; model.cancelEdit(); return; } @boundMethod - handleEditUpdate() : void { + handleEditUpdate(): void { let model = GlobalModel.bookmarksModel; model.confirmEdit(); return; } @boundMethod - handleDescChange(e : any) : void { + handleDescChange(e: any): void { let model = GlobalModel.bookmarksModel; mobx.action(() => { model.tempDesc.set(e.target.value); @@ -50,7 +50,7 @@ class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> { } @boundMethod - handleCmdChange(e : any) : void { + handleCmdChange(e: any): void { let model = GlobalModel.bookmarksModel; mobx.action(() => { model.tempCmd.set(e.target.value); @@ -58,57 +58,76 @@ class Bookmark extends React.Component<{bookmark : BookmarkType}, {}> { } @boundMethod - handleClick() : void { - let {bookmark} = this.props; + handleClick(): void { + let { bookmark } = this.props; let model = GlobalModel.bookmarksModel; model.selectBookmark(bookmark.bookmarkid); } @boundMethod - handleUse() : void { - let {bookmark} = this.props; + handleUse(): void { + let { bookmark } = this.props; let model = GlobalModel.bookmarksModel; model.useBookmark(bookmark.bookmarkid); } @boundMethod - clickCopy() : void { + clickCopy(): void { let bm = this.props.bookmark; let model = GlobalModel.bookmarksModel; model.handleCopyBookmark(bm.bookmarkid); } - + render() { let bm = this.props.bookmark; let model = GlobalModel.bookmarksModel; - let isSelected = (model.activeBookmark.get() == bm.bookmarkid); + let isSelected = model.activeBookmark.get() == bm.bookmarkid; let markdown = bm.description ?? ""; let hasDesc = markdown != ""; - let isEditing = (model.editingBookmark.get() == bm.bookmarkid); - let isCopied = mobx.computed(() => (model.copiedIndicator.get() == bm.bookmarkid)).get(); + let isEditing = model.editingBookmark.get() == bm.bookmarkid; + let isCopied = mobx.computed(() => model.copiedIndicator.get() == bm.bookmarkid).get(); if (isEditing) { return ( -
-
+
+
- - + +
); } @@ -586,25 +661,25 @@ class TextAreaInput extends React.Component<{onHeightChange : () => void}, {}> { @mobxReact.observer class InfoMsg extends React.Component<{}, {}> { - getAfterSlash(s : string) : string { + getAfterSlash(s: string): string { if (s.startsWith("^/")) { return s.substr(1); } let slashIdx = s.lastIndexOf("/"); - if (slashIdx == s.length-1) { - slashIdx = s.lastIndexOf("/", slashIdx-1); + if (slashIdx == s.length - 1) { + slashIdx = s.lastIndexOf("/", slashIdx - 1); } if (slashIdx == -1) { return s; } - return s.substr(slashIdx+1); + return s.substr(slashIdx + 1); } - hasSpace(s : string) : boolean { + hasSpace(s: string): boolean { return s.indexOf(" ") != -1; } - handleCompClick(s : string) : void { + handleCompClick(s: string): void { // TODO -> complete to this completion } @@ -613,9 +688,9 @@ class InfoMsg extends React.Component<{}, {}> { let inputModel = model.inputModel; let infoMsg = inputModel.infoMsg.get(); let infoShow = inputModel.infoShow.get(); - let line : string = null; - let istr : string = null; - let idx : number = 0; + let line: string = null; + let istr: string = null; + let idx: number = 0; let titleStr = null; let remoteEditKey = "inforemoteedit"; if (infoMsg != null) { @@ -623,7 +698,7 @@ class InfoMsg extends React.Component<{}, {}> { } let activeScreen = model.getActiveScreen(); return ( -
+
{titleStr} @@ -632,16 +707,17 @@ class InfoMsg extends React.Component<{}, {}> {
- - - - {infoMsg.infomsg} + + {infoMsg.infomsg}
- started sharing screen at [link] + started sharing screen at{" "} + + [link] +
@@ -654,7 +730,15 @@ class InfoMsg extends React.Component<{}, {}> { 0}>
-
this.handleCompClick(istr)} key={idx} className={cn("info-comp", {"has-space": this.hasSpace(istr)}, {"metacmd-comp": istr.startsWith("^")})}> +
this.handleCompClick(istr)} + key={idx} + className={cn( + "info-comp", + { "has-space": this.hasSpace(istr) }, + { "metacmd-comp": istr.startsWith("^") } + )} + > {this.getAfterSlash(istr)}
@@ -677,10 +761,10 @@ class InfoMsg extends React.Component<{}, {}> { @mobxReact.observer class HistoryInfo extends React.Component<{}, {}> { - lastClickHNum : string = null; - lastClickTs : number = 0; - containingText : mobx.IObservableValue = mobx.observable.box(""); - + lastClickHNum: string = null; + lastClickTs: number = 0; + containingText: mobx.IObservableValue = mobx.observable.box(""); + componentDidMount() { let inputModel = GlobalModel.inputModel; let hitem = inputModel.getHistorySelectedItem(); @@ -693,7 +777,7 @@ class HistoryInfo extends React.Component<{}, {}> { } @boundMethod - handleItemClick(hitem : HistoryItem) { + handleItemClick(hitem: HistoryItem) { let inputModel = GlobalModel.inputModel; let selItem = inputModel.getHistorySelectedItem(); if (this.lastClickHNum == hitem.historynum && selItem != null && selItem.historynum == hitem.historynum) { @@ -713,35 +797,40 @@ class HistoryInfo extends React.Component<{}, {}> { }, 3000); } - renderRemote(hitem : HistoryItem) : any { + renderRemote(hitem: HistoryItem): any { if (hitem.remote == null || isBlank(hitem.remote.remoteid)) { - return sprintf("%-15s ", "") + return sprintf("%-15s ", ""); } let r = GlobalModel.getRemote(hitem.remote.remoteid); if (r == null) { - return sprintf("%-15s ", "???") + return sprintf("%-15s ", "???"); } let rname = ""; if (!isBlank(r.remotealias)) { rname = r.remotealias; - } - else { + } else { rname = r.remotecanonicalname; } if (!isBlank(hitem.remote.name)) { rname = rname + ":" + hitem.remote.name; } - let rtn = sprintf("%-15s ", "[" + truncateWithTDots(rname, 13) + "]") + let rtn = sprintf("%-15s ", "[" + truncateWithTDots(rname, 13) + "]"); return rtn; } - renderHInfoText(hitem : HistoryItem, opts : HistoryQueryOpts, isSelected : boolean, snames : Record, scrNames : Record) : string { + renderHInfoText( + hitem: HistoryItem, + opts: HistoryQueryOpts, + isSelected: boolean, + snames: Record, + scrNames: Record + ): string { let remoteStr = ""; if (!opts.limitRemote) { remoteStr = this.renderRemote(hitem); } - let selectedStr = (isSelected ? "*" : " "); - let lineNumStr = (hitem.linenum > 0 ? "(" + hitem.linenum + ")" : ""); + let selectedStr = isSelected ? "*" : " "; + let lineNumStr = hitem.linenum > 0 ? "(" + hitem.linenum + ")" : ""; if (isBlank(opts.queryType) || opts.queryType == "screen") { return selectedStr + sprintf("%7s", lineNumStr) + " " + remoteStr; } @@ -771,22 +860,49 @@ class HistoryInfo extends React.Component<{}, {}> { } } let ssStr = sessionStr + screenStr; - return selectedStr + sprintf("%15s ", sessionStr) + " " + sprintf("%15s", screenStr) + sprintf("%7s", lineNumStr) + " " + remoteStr; + return ( + selectedStr + + sprintf("%15s ", sessionStr) + + " " + + sprintf("%15s", screenStr) + + sprintf("%7s", lineNumStr) + + " " + + remoteStr + ); } return "-"; } - renderHItem(hitem : HistoryItem, opts : HistoryQueryOpts, isSelected : boolean, snames : Record, scrNames : Record) : any { + renderHItem( + hitem: HistoryItem, + opts: HistoryQueryOpts, + isSelected: boolean, + snames: Record, + scrNames: Record + ): any { let lines = hitem.cmdstr.split("\n"); - let line : string = ""; + let line: string = ""; let idx = 0; let infoText = this.renderHInfoText(hitem, opts, isSelected, snames, scrNames); let infoTextSpacer = sprintf("%" + infoText.length + "s", ""); return ( -
this.handleItemClick(hitem)}> -
{infoText} {lines[0]}
+
this.handleItemClick(hitem)} + > +
+ {infoText} {lines[0]} +
-
{infoTextSpacer} {line}
+
+ {infoTextSpacer} {line} +
); @@ -799,19 +915,18 @@ class HistoryInfo extends React.Component<{}, {}> { render() { let inputModel = GlobalModel.inputModel; - let idx : number = 0; + let idx: number = 0; let selItem = inputModel.getHistorySelectedItem(); let hitems = inputModel.getFilteredHistoryItems(); hitems = hitems.slice().reverse(); - let hitem : HistoryItem = null; + let hitem: HistoryItem = null; let opts = inputModel.historyQueryOpts.get(); - let snames : Record = {}; - let scrNames : Record = {}; + let snames: Record = {}; + let scrNames: Record = {}; if (opts.queryType == "global") { scrNames = GlobalModel.getScreenNames(); snames = GlobalModel.getSessionNames(); - } - else if (opts.queryType == "session") { + } else if (opts.queryType == "session") { scrNames = GlobalModel.getScreenNames(); } return ( @@ -825,16 +940,22 @@ class HistoryInfo extends React.Component<{}, {}> {
[{opts.limitRemote ? "this" : "any"} remote ⌘R]
-
(ESC)
+
+ (ESC) +
-
- - [no history] - +
+ [no history] 0}> - {this.renderHItem(hitem, opts, (hitem == selItem), snames, scrNames)} + {this.renderHItem(hitem, opts, hitem == selItem, snames, scrNames)}
@@ -845,10 +966,10 @@ class HistoryInfo extends React.Component<{}, {}> { @mobxReact.observer class CmdInput extends React.Component<{}, {}> { - cmdInputRef : React.RefObject = React.createRef(); - + cmdInputRef: React.RefObject = React.createRef(); + @boundMethod - onInfoToggle() : void { + onInfoToggle(): void { GlobalModel.inputModel.toggleInfoMsg(); return; } @@ -871,51 +992,50 @@ class CmdInput extends React.Component<{}, {}> { })(); } - componentDidUpdate(prevProps, prevState, snapshot : {}) : void { + componentDidUpdate(prevProps, prevState, snapshot: {}): void { this.updateCmdInputHeight(); } @boundMethod - handleInnerHeightUpdate() : void { + handleInnerHeightUpdate(): void { this.updateCmdInputHeight(); } @boundMethod - clickFocusInputHint() : void { + clickFocusInputHint(): void { GlobalModel.inputModel.giveFocus(); } @boundMethod - clickHistoryHint(e : any) : void { + clickHistoryHint(e: any): void { e.preventDefault(); e.stopPropagation(); - + let inputModel = GlobalModel.inputModel; if (inputModel.historyShow.get()) { inputModel.resetHistory(); - } - else { + } else { inputModel.openHistory(); } } @boundMethod - clickConnectRemote(remoteId : string) : void { + clickConnectRemote(remoteId: string): void { GlobalCommandRunner.connectRemote(remoteId); } - + render() { let model = GlobalModel; let inputModel = model.inputModel; let screen = GlobalModel.getActiveScreen(); - let ri : RemoteInstanceType = null; - let rptr : RemotePtrType = null; + let ri: RemoteInstanceType = null; + let rptr: RemotePtrType = null; if (screen != null) { ri = screen.getCurRemoteInstance(); rptr = screen.curRemote.get(); } - let remote : RemoteType = null; - let feState : Record = null; + let remote: RemoteType = null; + let feState: Record = null; if (ri != null) { remote = GlobalModel.getRemote(ri.remoteid); feState = ri.festate; @@ -923,55 +1043,88 @@ class CmdInput extends React.Component<{}, {}> { let infoShow = inputModel.infoShow.get(); let historyShow = !infoShow && inputModel.historyShow.get(); let infoMsg = inputModel.infoMsg.get(); - let hasInfo = (infoMsg != null); + let hasInfo = infoMsg != null; let focusVal = inputModel.physicalInputFocused.get(); - let inputMode : string = inputModel.inputMode.get(); - let textAreaInputKey = (screen == null ? "null" : screen.screenId); + let inputMode: string = inputModel.inputMode.get(); + let textAreaInputKey = screen == null ? "null" : screen.screenId; return ( -
-
+
+
- + - +
- +
- +
- WARNING: [{GlobalModel.resolveRemoteIdToFullRef(remote.remoteid)}] is {remote.status} -
this.clickConnectRemote(remote.remoteid)}>connect now
+ WARNING:  + [{GlobalModel.resolveRemoteIdToFullRef(remote.remoteid)}] +  is {remote.status} + +
this.clickConnectRemote(remote.remoteid)} + > + connect now +
+
- +
-
+
{inputMode}
- +
- +
-
{inputModel.inputExpanded.get() ? "shrink" : "expand"} input ({renderCmdText("E")})
-
focus input ({renderCmdText("I")})
-
{historyShow ? "close history (esc)" : "show history (ctrl-r)"}
+
+ {inputModel.inputExpanded.get() ? "shrink" : "expand"} input ({renderCmdText("E")}) +
+ +
+ focus input ({renderCmdText("I")}) +
+
+ +
+ {" "} + {historyShow ? "close history (esc)" : "show history (ctrl-r)"} +
+
@@ -981,25 +1134,25 @@ class CmdInput extends React.Component<{}, {}> { // screen is not null @mobxReact.observer -class ScreenWindowView extends React.Component<{screen : Screen}, {}> { - rszObs : any; - windowViewRef : React.RefObject; +class ScreenWindowView extends React.Component<{ screen: Screen }, {}> { + rszObs: any; + windowViewRef: React.RefObject; - width : mobx.IObservableValue = mobx.observable.box(0, {name: "sw-view-width"}); - height : mobx.IObservableValue = mobx.observable.box(0, {name: "sw-view-height"}); - setSize_debounced : (width : number, height : number) => void; + width: mobx.IObservableValue = mobx.observable.box(0, { name: "sw-view-width" }); + height: mobx.IObservableValue = mobx.observable.box(0, { name: "sw-view-height" }); + setSize_debounced: (width: number, height: number) => void; - renderMode : OV = mobx.observable.box("normal", {name: "renderMode"}); - shareCopied : OV = mobx.observable.box(false, {name: "sw-shareCopied"}); + renderMode: OV = mobx.observable.box("normal", { name: "renderMode" }); + shareCopied: OV = mobx.observable.box(false, { name: "sw-shareCopied" }); - constructor(props : any) { + constructor(props: any) { super(props); this.setSize_debounced = debounce(1000, this.setSize.bind(this)); this.windowViewRef = React.createRef(); } - setSize(width : number, height : number) : void { - let {screen} = this.props; + setSize(width: number, height: number): void { + let { screen } = this.props; if (screen == null) { return; } @@ -1009,7 +1162,7 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { mobx.action(() => { this.width.set(width); this.height.set(height); - screen.screenSizeCallback({height: height, width: width}); + screen.screenSizeCallback({ height: height, width: width }); })(); } @@ -1030,7 +1183,7 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { } } - handleResize(entries : any) { + handleResize(entries: any) { if (entries.length == 0) { return; } @@ -1042,8 +1195,8 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { })(); } - getScreenLines() : ScreenLines { - let {screen} = this.props; + getScreenLines(): ScreenLines { + let { screen } = this.props; let win = GlobalModel.getScreenLinesById(screen.screenId); if (win == null) { win = GlobalModel.loadScreenLines(screen.screenId); @@ -1051,8 +1204,8 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { return win; } - getWindowViewStyle() : any { - return {position: "absolute", width: "100%", height: "100%", overflowX: "hidden"}; + getWindowViewStyle(): any { + return { position: "absolute", width: "100%", height: "100%", overflowX: "hidden" }; } @boundMethod @@ -1063,12 +1216,17 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { })(); } - renderError(message : string, fade : boolean) { - let {screen} = this.props; + renderError(message: string, fade: boolean) { + let { screen } = this.props; return ( -
+
-
+
{message}
@@ -1076,8 +1234,8 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { } @boundMethod - copyShareLink() : void { - let {screen} = this.props; + copyShareLink(): void { + let { screen } = this.props; let shareLink = screen.getWebShareUrl(); if (shareLink == null) { return; @@ -1090,29 +1248,27 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { mobx.action(() => { this.shareCopied.set(false); })(); - }, 600) + }, 600); } @boundMethod - openScreenSettings() : void { - let {screen} = this.props; + openScreenSettings(): void { + let { screen } = this.props; mobx.action(() => { - GlobalModel.screenSettingsModal.set({sessionId: screen.sessionId, screenId: screen.screenId}); + GlobalModel.screenSettingsModal.set({ sessionId: screen.sessionId, screenId: screen.screenId }); })(); } @boundMethod - buildLineComponent(lineProps : LineFactoryProps) : JSX.Element { - let {screen} = this.props; - let {line, ...restProps} = lineProps; - let realLine : LineType = (line as LineType); - return ( - - ); + buildLineComponent(lineProps: LineFactoryProps): JSX.Element { + let { screen } = this.props; + let { line, ...restProps } = lineProps; + let realLine: LineType = line as LineType; + return ; } render() { - let {screen} = this.props; + let { screen } = this.props; let win = this.getScreenLines(); if (win == null || !win.loaded.get()) { return this.renderError("...", true); @@ -1128,7 +1284,7 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { return this.renderError("loading client data", true); } let idx = 0; - let line : LineType = null; + let line: LineType = null; let session = GlobalModel.getSessionById(screen.sessionId); let isActive = screen.isActive(); let selectedLine = screen.getSelectedLine(); @@ -1136,44 +1292,63 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { let renderMode = this.renderMode.get(); return (
-
+
- + - +
-
+
-
web shared
+
+ web shared +
copy link - +
-
+
open settings - +
0}> - +
-
[session="{session.name.get()}" screen="{screen.name.get()}"]
+
+ + [session="{session.name.get()}" screen="{screen.name.get()}"] + +
@@ -1182,47 +1357,43 @@ class ScreenWindowView extends React.Component<{screen : Screen}, {}> { } @mobxReact.observer -class ScreenView extends React.Component<{screen : Screen}, {}> { +class ScreenView extends React.Component<{ screen: Screen }, {}> { render() { - let {screen} = this.props; + let { screen } = this.props; if (screen == null) { - return ( -
- (no screen found) -
- ); + return
(no screen found)
; } let fontSize = GlobalModel.termFontSize.get(); return (
- +
); } } @mobxReact.observer -class ScreenTabs extends React.Component<{session : Session}, {}> { - tabsRef : React.RefObject = React.createRef(); - lastActiveScreenId : string = null; - scrolling : OV = mobx.observable.box(false, {name: "screentabs-scrolling"}); +class ScreenTabs extends React.Component<{ session: Session }, {}> { + tabsRef: React.RefObject = React.createRef(); + lastActiveScreenId: string = null; + scrolling: OV = mobx.observable.box(false, { name: "screentabs-scrolling" }); - stopScrolling_debounced : () => void; + stopScrolling_debounced: () => void; - constructor(props : any) { + constructor(props: any) { super(props); this.stopScrolling_debounced = debounce(1500, this.stopScrolling.bind(this)); } - + @boundMethod handleNewScreen() { - let {session} = this.props; + let { session } = this.props; GlobalCommandRunner.createNewScreen(); } @boundMethod - handleSwitchScreen(screenId : string) { - let {session} = this.props; + handleSwitchScreen(screenId: string) { + let { session } = this.props; if (session == null) { return; } @@ -1236,15 +1407,17 @@ class ScreenTabs extends React.Component<{session : Session}, {}> { GlobalCommandRunner.switchScreen(screenId); } - componentDidMount() : void { + componentDidMount(): void { this.componentDidUpdate(); } - componentDidUpdate() : void { - let {session} = this.props; + componentDidUpdate(): void { + let { session } = this.props; let activeScreenId = session.activeScreenId.get(); if (activeScreenId != this.lastActiveScreenId && this.tabsRef.current) { - let tabElem = this.tabsRef.current.querySelector(sprintf(".screen-tab[data-screenid=\"%s\"]", activeScreenId)); + let tabElem = this.tabsRef.current.querySelector( + sprintf('.screen-tab[data-screenid="%s"]', activeScreenId) + ); if (tabElem != null) { tabElem.scrollIntoView(); } @@ -1252,7 +1425,7 @@ class ScreenTabs extends React.Component<{session : Session}, {}> { this.lastActiveScreenId = activeScreenId; } - stopScrolling() : void { + stopScrolling(): void { mobx.action(() => { this.scrolling.set(false); })(); @@ -1269,25 +1442,43 @@ class ScreenTabs extends React.Component<{session : Session}, {}> { } @boundMethod - openScreenSettings(e : any, screen : Screen) : void { + openScreenSettings(e: any, screen: Screen): void { e.preventDefault(); e.stopPropagation(); mobx.action(() => { - GlobalModel.screenSettingsModal.set({sessionId: screen.sessionId, screenId: screen.screenId}); + GlobalModel.screenSettingsModal.set({ sessionId: screen.sessionId, screenId: screen.screenId }); })(); } - renderTab(screen : Screen, activeScreenId : string, index : number) : any { + renderTab(screen: Screen, activeScreenId: string, index: number): any { let tabIndex = null; - if (index+1 <= 9) { - tabIndex = (
{renderCmdText(String(index+1))}
); + if (index + 1 <= 9) { + tabIndex =
{renderCmdText(String(index + 1))}
; } - let settings = (
this.openScreenSettings(e, screen)} title="Settings" className="tab-gear">
); - let archived = (screen.archived.get() ? () : null); + let settings = ( +
this.openScreenSettings(e, screen)} title="Settings" className="tab-gear"> + +
+ ); + let archived = screen.archived.get() ? ( + + ) : null; - let webShared = (screen.isWebShared() ? () : null); + let webShared = screen.isWebShared() ? ( + + ) : null; return ( -
this.handleSwitchScreen(screen.screenId)} onContextMenu={(event) => this.openScreenSettings(event, screen)}> +
this.handleSwitchScreen(screen.screenId)} + onContextMenu={(event) => this.openScreenSettings(event, screen)} + >
{archived} {webShared} @@ -1300,11 +1491,11 @@ class ScreenTabs extends React.Component<{session : Session}, {}> { } render() { - let {session} = this.props; + let { session } = this.props; if (session == null) { return null; } - let screen : Screen = null; + let screen: Screen = null; let index = 0; let showingScreens = []; let activeScreenId = session.activeScreenId.get(); @@ -1327,14 +1518,17 @@ class ScreenTabs extends React.Component<{session : Session}, {}> { }); return (
-
+
{this.renderTab(screen, activeScreenId, index)}
- +
-
move left {renderCmdText("[")}
@@ -1359,13 +1553,13 @@ class SessionView extends React.Component<{}, {}> { if (cmdInputHeight == 0) { cmdInputHeight = 110; } - let isHidden = (GlobalModel.activeMainView.get() != "session"); + let isHidden = GlobalModel.activeMainView.get() != "session"; return ( -
- - -
- +
+ + +
+
); } @@ -1373,7 +1567,7 @@ class SessionView extends React.Component<{}, {}> { @mobxReact.observer class MainSideBar extends React.Component<{}, {}> { - collapsed : mobx.IObservableValue = mobx.observable.box(false); + collapsed: mobx.IObservableValue = mobx.observable.box(false); @boundMethod toggleCollapsed() { @@ -1382,7 +1576,7 @@ class MainSideBar extends React.Component<{}, {}> { })(); } - handleSessionClick(sessionId : string) { + handleSessionClick(sessionId: string) { GlobalCommandRunner.switchSession(sessionId); } @@ -1400,7 +1594,7 @@ class MainSideBar extends React.Component<{}, {}> { })(); } - remoteDisplayName(remote : RemoteType) : any { + remoteDisplayName(remote: RemoteType): any { if (!isBlank(remote.remotealias)) { return ( <> @@ -1409,20 +1603,20 @@ class MainSideBar extends React.Component<{}, {}> { ); } - return ({remote.remotecanonicalname}); + return {remote.remotecanonicalname}; } - clickRemote(remote : RemoteType) { + clickRemote(remote: RemoteType) { GlobalCommandRunner.showRemote(remote.remoteid); } @boundMethod - handleAddRemote() : void { + handleAddRemote(): void { GlobalCommandRunner.openCreateRemote(); } @boundMethod - handleHistoryClick() : void { + handleHistoryClick(): void { if (GlobalModel.activeMainView.get() == "history") { mobx.action(() => { GlobalModel.activeMainView.set("session"); @@ -1433,13 +1627,13 @@ class MainSideBar extends React.Component<{}, {}> { } @boundMethod - handlePlaybookClick() : void { + handlePlaybookClick(): void { console.log("playbook click"); return; } @boundMethod - handleBookmarksClick() : void { + handleBookmarksClick(): void { if (GlobalModel.activeMainView.get() == "bookmarks") { GlobalModel.showSessionView(); return; @@ -1448,7 +1642,7 @@ class MainSideBar extends React.Component<{}, {}> { } @boundMethod - handleWebSharingClick() : void { + handleWebSharingClick(): void { if (GlobalModel.activeMainView.get() == "webshare") { GlobalModel.showSessionView(); return; @@ -1457,26 +1651,26 @@ class MainSideBar extends React.Component<{}, {}> { } @boundMethod - handleWelcomeClick() : void { + handleWelcomeClick(): void { mobx.action(() => { GlobalModel.welcomeModalOpen.set(true); })(); } @boundMethod - handleSettingsClick() : void { + handleSettingsClick(): void { mobx.action(() => { GlobalModel.clientSettingsModal.set(true); })(); } @boundMethod - handleConnectionsClick() : void { + handleConnectionsClick(): void { GlobalModel.remotesModalModel.openModal(); } @boundMethod - openSessionSettings(e : any, session : Session) : void { + openSessionSettings(e: any, session: Session): void { e.preventDefault(); e.stopPropagation(); mobx.action(() => { @@ -1489,17 +1683,17 @@ class MainSideBar extends React.Component<{}, {}> { let activeSessionId = model.activeSessionId.get(); let activeWindow = model.getScreenLinesForActiveScreen(); let activeScreen = model.getActiveScreen(); - let activeRemoteId : string = null; + let activeRemoteId: string = null; if (activeScreen != null) { let rptr = activeScreen.curRemote.get(); if (rptr != null && !isBlank(rptr.remoteid)) { activeRemoteId = rptr.remoteid; } } - let session : Session = null; + let session: Session = null; let remotes = model.remotes ?? []; - let remote : RemoteType = null; - let idx : number = 0; + let remote: RemoteType = null; + let idx: number = 0; remotes = sortAndFilterRemotes(remotes); let sessionList = []; for (let session of model.sessionList) { @@ -1509,91 +1703,173 @@ class MainSideBar extends React.Component<{}, {}> { } let isCollapsed = this.collapsed.get(); let mainView = GlobalModel.activeMainView.get(); - let activePlaybookId : string = null; + let activePlaybookId: string = null; return ( -
+
-

- {(isCollapsed ? "[p]" : "[prompt]")} +

+ {isCollapsed ? "[p]" : "[prompt]"}

- - + + + + + +
-

- Sessions -

+

Sessions

-
    -
  • HISTORY ⌘H
  • + -

    - Playbooks -

    +

    Playbooks

    - focus={activeScreen.focusType.get()}
    - sline={activeScreen.getSelectedLine()}
    - termfocus={activeScreen.termLineNumFocus.get()}
    + focus={activeScreen.focusType.get()} +
    + sline={activeScreen.getSelectedLine()} +
    + termfocus={activeScreen.termLineNumFocus.get()} +
    -
      -
    • WELCOME
    • +

      - this.clickLinks()}>LINKS + this.clickLinks()}> + LINKS{" "} + +

      -
        +

        @@ -1601,13 +1877,20 @@ class MainSideBar extends React.Component<{}, {}> {

        @@ -1619,9 +1902,9 @@ class MainSideBar extends React.Component<{}, {}> { @mobxReact.observer class DisconnectedModal extends React.Component<{}, {}> { - logRef : any = React.createRef(); - showLog : mobx.IObservableValue = mobx.observable.box(false) - + logRef: any = React.createRef(); + showLog: mobx.IObservableValue = mobx.observable.box(false); + @boundMethod restartServer() { GlobalModel.restartLocalServer(); @@ -1645,16 +1928,16 @@ class DisconnectedModal extends React.Component<{}, {}> { } @boundMethod - handleShowLog() : void { + handleShowLog(): void { mobx.action(() => { this.showLog.set(!this.showLog.get()); })(); } - + render() { let model = GlobalModel; - let logLine : string = null; - let idx : number = 0; + let logLine: string = null; + let idx: number = 0; return (
        @@ -1666,30 +1949,32 @@ class DisconnectedModal extends React.Component<{}, {}> {
        -
        {logLine}
        +
        + {logLine} +