Restructured loading of editor modes; changed LSP config loading

This commit is contained in:
itdominator 2025-07-06 15:05:12 -05:00
parent 27c4cda01a
commit 9e01628ffb
9 changed files with 64 additions and 44 deletions

View File

@ -7,6 +7,7 @@ import { ServiceMessage } from '../../types/service-message.type';
import { EditorSettings } from "../../configs/editor.config"; import { EditorSettings } from "../../configs/editor.config";
import { NewtonFile } from '../../types/file.type'; import { NewtonFile } from '../../types/file.type';
import { EditorType } from '../../types/editor.type';
@ -38,7 +39,7 @@ export class EditorsService {
} }
public set(uuid: string, component: CodeViewComponent) { public set(uuid: string, component: CodeViewComponent) {
if (component.isMiniMap) { if (component.mode == EditorType.MiniMap) {
this.miniMapView = component; this.miniMapView = component;
return; return;
} }

View File

@ -19,12 +19,11 @@ export class LspManagerService {
constructor() { constructor() {
this.loadLSPService();
} }
private loadLSPService() { public loadLspConfigData(): Promise<string | void> {
this.getLspConfigData().then((lspConfigData: string) => { return this.getLspConfigData().then((lspConfigData: string) => {
this.lspConfigData = JSON.parse(lspConfigData); this.lspConfigData = JSON.parse(lspConfigData);
if (this.lspConfigData["message"]) { if (this.lspConfigData["message"]) {
@ -35,6 +34,8 @@ export class LspManagerService {
this.lspConfigData = {}; this.lspConfigData = {};
} }
return lspConfigData;
}); });
} }

View File

@ -0,0 +1,5 @@
export abstract class EditorType {
static MiniMap: string = "mini-map";
static ReadOnly: string = "read-only";
static Standalone: string = "standalone";
}

View File

@ -19,9 +19,9 @@ import { ServiceMessage } from '../../common/types/service-message.type';
@Directive() @Directive()
export class CodeViewBase { export class CodeViewBase {
public uuid: string = uuid.v4(); public uuid: string = uuid.v4();
@Input() public isDefault: boolean = false; @Input() public isDefault: boolean = false;
@Input() public isMiniMap: boolean = false; @Input() public mode: string = "";
public leftSiblingUUID!: string; public leftSiblingUUID!: string;
public rightSiblingUUID!: string; public rightSiblingUUID!: string;
@ -185,6 +185,11 @@ export class CodeViewBase {
window.main.toggleFullScreen(); window.main.toggleFullScreen();
} }
public setAsReadOnly() {
this.editor.setReadOnly(true);
this.editor.setShowPrintMargin(false);
}
public setAsMiniMapView() { public setAsMiniMapView() {
this.editor.renderer.showLineNumbers = false; this.editor.renderer.showLineNumbers = false;
this.editor.renderer.setShowGutter(false); this.editor.renderer.setShowGutter(false);

View File

@ -16,6 +16,7 @@ import "ace-builds/src-min-noconflict/theme-gruvbox";
import { CodeViewBase } from './view.base'; import { CodeViewBase } from './view.base';
import { NewtonFile } from '../../common/types/file.type'; import { NewtonFile } from '../../common/types/file.type';
import { EditorType } from '../../common/types/editor.type';
import { ServiceMessage } from '../../common/types/service-message.type'; import { ServiceMessage } from '../../common/types/service-message.type';
@ -47,26 +48,7 @@ export class CodeViewComponent extends CodeViewBase {
private loadAce(): void { private loadAce(): void {
this.configAceAndBindToElement() this.configAceAndBindToElement()
this.setupRequestedMode();
if (this.isDefault) {
this.editorsService.setActiveEditor(this.uuid);
this.addActiveStyling();
this.editor.focus();
}
if (this.isMiniMap) {
this.setAsMiniMapView();
return;
}
let message = new ServiceMessage();
message.action = "register-editor";
message.rawData = this;
this.lspManagerService.sendMessage(message);
this.loadAceKeyBindings();
this.loadAceEventBindings();
} }
private configAceAndBindToElement(): void { private configAceAndBindToElement(): void {
@ -76,10 +58,34 @@ export class CodeViewComponent extends CodeViewBase {
this.editor = ace.edit( this.editorElm.nativeElement ); this.editor = ace.edit( this.editorElm.nativeElement );
this.editor.setOptions( this.editorSettings.CONFIG ); this.editor.setOptions( this.editorSettings.CONFIG );
this.editorsService.set(this.uuid, this);
if (this.isDefault) {
this.editorsService.set(this.uuid, this);
this.editorsService.setActiveEditor(this.uuid);
this.addActiveStyling();
this.editor.focus();
}
} }
private loadAceKeyBindings(): void { private setupRequestedMode() {
switch(this.mode) {
case EditorType.Standalone:
// Note: Ace editor without any additional Newton setup...
break;
case EditorType.MiniMap:
this.setAsMiniMapView();
break;
case EditorType.ReadOnly:
this.setAsReadOnly();
break;
default:
this.loadNewtonKeyBindings();
this.loadNewtonEventBindings();
break;
}
}
private loadNewtonKeyBindings(): void {
let keyBindings = []; let keyBindings = [];
for (let i = 0; i < this.editorSettings.KEYBINDINGS.length; i++) { for (let i = 0; i < this.editorSettings.KEYBINDINGS.length; i++) {
let keyBinding = this.editorSettings.KEYBINDINGS[i]; let keyBinding = this.editorSettings.KEYBINDINGS[i];
@ -111,7 +117,7 @@ export class CodeViewComponent extends CodeViewBase {
this.editor.commands.addCommands( keyBindings ); this.editor.commands.addCommands( keyBindings );
} }
private loadAceEventBindings(): void { private loadNewtonEventBindings(): void {
// Note: https://ajaxorg.github.io/ace-api-docs/interfaces/ace.Ace.EditorEvents.html // Note: https://ajaxorg.github.io/ace-api-docs/interfaces/ace.Ace.EditorEvents.html
this.editor.on("focus", (e) => { this.editor.on("focus", (e) => {

View File

@ -4,7 +4,7 @@
<code-view [isDefault]="true"></code-view> <code-view [isDefault]="true"></code-view>
<hr class="col vr-pane-handle" pane-handle /> <hr class="col vr-pane-handle" pane-handle />
<code-view></code-view> <code-view></code-view>
<code-view [isMiniMap]="true"></code-view> <code-view [mode]="'mini-map'"></code-view>
</div> </div>
<div> <div>

View File

@ -1,3 +1,4 @@
.lsp-config-text { .lsp-config-text {
display: grid;
min-height: 25em; min-height: 25em;
} }

View File

@ -19,9 +19,9 @@
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<textarea #lspConfigText class="form-control form-control-sm lsp-config-text" placeholder="LSP Config..."> </textarea> <code-view #editorComponent [mode]="'standalone'" class="lsp-config-text"></code-view>
</div> </div>
</div> </div>
</div> </div>

View File

@ -3,6 +3,8 @@ import { Subject, takeUntil } from 'rxjs';
import { LspManagerService } from '../../common/services/editor/lsp-manager/lsp-manager.service'; import { LspManagerService } from '../../common/services/editor/lsp-manager/lsp-manager.service';
import { CodeViewComponent } from '../code-view/view.component';
import { ServiceMessage } from '../../common/types/service-message.type'; import { ServiceMessage } from '../../common/types/service-message.type';
@ -11,6 +13,7 @@ import { ServiceMessage } from '../../common/types/service-message.type';
selector: 'lsp-manager', selector: 'lsp-manager',
standalone: true, standalone: true,
imports: [ imports: [
CodeViewComponent
], ],
templateUrl: './lsp-manager.component.html', templateUrl: './lsp-manager.component.html',
styleUrl: './lsp-manager.component.css', styleUrl: './lsp-manager.component.css',
@ -25,8 +28,8 @@ export class LspManagerComponent {
private lspManagerService: LspManagerService = inject(LspManagerService); private lspManagerService: LspManagerService = inject(LspManagerService);
@HostBinding("class.hidden") isHidden: boolean = true; @HostBinding("class.hidden") isHidden: boolean = true;
@ViewChild('lspConfigText') lspConfigText!: ElementRef; @ViewChild('editorComponent') editorComponent!: CodeViewComponent;
private editors: any = {}; lspTextEditor!: any;
private editor: any; private editor: any;
@ -35,7 +38,12 @@ export class LspManagerComponent {
private ngAfterViewInit(): void { private ngAfterViewInit(): void {
this.lspConfigText.nativeElement.value = this.lspManagerService.lspConfigData; this.lspTextEditor = this.editorComponent.editor;
this.lspManagerService.loadLspConfigData().then((lspConfigData) => {
this.lspTextEditor.session.setMode("ace/mode/json");
this.lspTextEditor.session.setValue(lspConfigData);
});
this.loadSubscribers(); this.loadSubscribers();
} }
@ -53,8 +61,6 @@ export class LspManagerComponent {
this.toggleLspManager(message); this.toggleLspManager(message);
} else if (message.action === "set-active-editor") { } else if (message.action === "set-active-editor") {
this.setActiveEditor(message); this.setActiveEditor(message);
} else if (message.action === "register-editor") {
this.registerEditor(message);
} }
}); });
} }
@ -76,12 +82,7 @@ export class LspManagerComponent {
} }
private setActiveEditor(message: ServiceMessage) { private setActiveEditor(message: ServiceMessage) {
this.editor = this.editors[message.editorUUID]; this.editor = message.rawData;
}
private registerEditor(message: ServiceMessage) {
let _editor = message.rawData;
this.editors[_editor.uuid] = _editor.editor;
} }
} }