diff options
Diffstat (limited to 'editor/editor.ts')
| -rw-r--r-- | editor/editor.ts | 68 |
1 files changed, 45 insertions, 23 deletions
diff --git a/editor/editor.ts b/editor/editor.ts index ca7c9ac..9e1e301 100644 --- a/editor/editor.ts +++ b/editor/editor.ts @@ -48,6 +48,34 @@ export class Editor { this.range = document.createRange() } + GetFile(): IVfsNode { + let node: IVfsNode = { + name: "", + path: "", + } + if (!this.activeFile) { + return node + } + let content = "" + for (let x = 0; x < this.lines.length; x++) { + if (x > 0) { + content += "\n" + } + content += this.lines[x].elText.innerText + } + node.name = this.activeFile.name + node.path = this.activeFile.path + node.content = content + return node + } + + GetSelectionRange(): SelectionRange { + return { + BeginAt: this.rangeBegin, + EndAt: this.rangeEnd, + } as SelectionRange + } + async OpenFile(path: string): Promise<Response> { if (!this.el) { return { code: 500 } as Response @@ -90,9 +118,14 @@ export class Editor { if (!this.el) { return } - for (let x = 0; x < this.el.children.length; x++) { + if (this.rangeEnd == 0) { + return + } + for (let x = this.rangeBegin; x <= this.rangeEnd; x++) { this.el.children[x].setAttribute("style", "") } + this.rangeBegin = 0 + this.rangeEnd = 0 } initStyle() { @@ -283,8 +316,7 @@ export class Editor { off = this.sel.focusOffset if (off > 0) { textAfter = - textBefore.slice(0, off - 1) + - textBefore.slice(off, textBefore.length) + textBefore.slice(0, off - 1) + textBefore.slice(off, textBefore.length) this.unre.DoUpdate(x, textBefore, textAfter) @@ -297,15 +329,10 @@ export class Editor { // Join current line with previous. let elTextPrev = this.lines[x - 1].elText - this.unre.DoJoin( - x - 1, - elTextPrev.innerText, - elTextCurr.innerText - ) + this.unre.DoJoin(x - 1, elTextPrev.innerText, elTextCurr.innerText) off = elTextPrev.innerText.length - elTextPrev.innerText = - elTextPrev.innerText + elTextCurr.innerText + elTextPrev.innerText = elTextPrev.innerText + elTextCurr.innerText this.rawLines[x - 1] = elTextPrev.innerText // Remove the current line @@ -325,10 +352,7 @@ export class Editor { elText = this.lines[x].elText off = this.sel.focusOffset textBefore = elText.innerText - textAfter = - textBefore.slice(0, off) + - "\t" + - textBefore.slice(off, textBefore.length) + textAfter = textBefore.slice(0, off) + "\t" + textBefore.slice(off, textBefore.length) this.unre.DoUpdate(x, textBefore, textAfter) elText.innerText = textAfter @@ -360,11 +384,7 @@ export class Editor { if (this.isKeyControl) { break } - this.unre.DoUpdate( - x, - this.rawLines[x], - this.lines[x].elText.innerText - ) + this.unre.DoUpdate(x, this.rawLines[x], this.lines[x].elText.innerText) this.rawLines[x] = this.lines[x].elText.innerText } return true @@ -439,10 +459,7 @@ export class Editor { this.el.children[y].setAttribute("style", "") } for (; y <= this.rangeEnd; y++) { - this.el.children[y].setAttribute( - "style", - "background-color:lightsalmon" - ) + this.el.children[y].setAttribute("style", "background-color:lightsalmon") } for (; y < this.el.children.length; y++) { this.el.children[y].setAttribute("style", "") @@ -650,3 +667,8 @@ interface ActionChanges { nextLine: number nextText: string } + +interface SelectionRange { + BeginAt: number + EndAt: number +} |
