diff options
| -rw-r--r-- | editor/editor.d.ts | 5 | ||||
| -rw-r--r-- | editor/editor.js | 89 | ||||
| -rw-r--r-- | editor/editor.ts | 108 | ||||
| -rw-r--r-- | editor/example.html | 12 |
4 files changed, 135 insertions, 79 deletions
diff --git a/editor/editor.d.ts b/editor/editor.d.ts index 5e781e5..9685f61 100644 --- a/editor/editor.d.ts +++ b/editor/editor.d.ts @@ -21,10 +21,11 @@ export declare class Editor implements IEditor { OpenFile(path: string): Response; SaveFile(node: IVfsNode): Response; initStyle(): void; - insertNewline(x: number): void; + insertNewline(x: number, text: string): void; onClickText(text: HTMLElement): void; - onKeydownText(x: number, text: HTMLElement, ev: KeyboardEvent): boolean; + onKeydownText(x: number, text: HTMLElement, ev: KeyboardEvent): boolean | undefined; onMouseDownAtLine(x: number): void; onMouseUpAtLine(x: number): void; render(): void; + setCaret(elText: HTMLElement, off: number): void; } diff --git a/editor/editor.js b/editor/editor.js index 25c7b24..db6e1f9 100644 --- a/editor/editor.js +++ b/editor/editor.js @@ -54,16 +54,17 @@ var Editor = /** @class */ (function () { Editor.prototype.initStyle = function () { var style = document.createElement("style"); style.type = "text/css"; - style.innerText = "\n\t\t\t[contenteditable] {\n\t\t\t\toutline: 0px solid transparent;\n\t\t\t}\n\t\t\t.wui-editor {\n\t\t\t\tbackground-color: cornsilk;\n\t\t\t\tfont-family: monospace;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.wui-editor-line {\n\t\t\t\tdisplay: table;\n\t\t\t}\n\t\t\t.wui-line-number:hover {\n\t\t\t\tbackground-color: lightsalmon;\n\t\t\t}\n\t\t\t.wui-line-number {\n\t\t\t\tdisplay: table-cell;\n\t\t\t\tpadding: 4px 1em 4px 4px;\n\t\t\t\ttext-align: right;\n\t\t\t\twidth: 3em;\n\t\t\t\tcursor: pointer;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t\t-moz-user-select: none;\n\t\t\t\t-ms-user-select: none;\n\t\t\t\tuser-select: none;\n\t\t\t}\n\t\t\t.wui-line-text {\n\t\t\t\tdisplay: table-cell;\n\t\t\t\tpadding: 4px;\n\t\t\t\tborder-color: lightblue;\n\t\t\t\tborder-width: 0px;\n\t\t\t\tborder-style: solid;\n\t\t\t\twhite-space: pre-wrap;\n\t\t\t}\n\t\t"; + style.innerText = "\n\t\t\t[contenteditable] {\n\t\t\t\toutline: 0px solid transparent;\n\t\t\t}\n\t\t\t.wui-editor {\n\t\t\t\tbackground-color: cornsilk;\n\t\t\t\tfont-family: monospace;\n\t\t\t\twidth: 100%;\n\t\t\t}\n\t\t\t.wui-editor-line {\n\t\t\t\tdisplay: table;\n\t\t\t}\n\t\t\t.wui-line-number {\n\t\t\t\t-moz-user-select: none;\n\t\t\t\t-ms-user-select: none;\n\t\t\t\t-webkit-user-select: none;\n\t\t\t\tcolor: dimgrey;\n\t\t\t\tcursor: pointer;\n\t\t\t\tdisplay: table-cell;\n\t\t\t\tpadding: 4px 1em 4px 4px;\n\t\t\t\ttext-align: right;\n\t\t\t\tuser-select: none;\n\t\t\t\twidth: 3em;\n\t\t\t}\n\t\t\t.wui-line-number:hover {\n\t\t\t\tbackground-color: lightsalmon;\n\t\t\t}\n\t\t\t.wui-line-text {\n\t\t\t\tdisplay: table-cell;\n\t\t\t\tpadding: 4px;\n\t\t\t\tborder-color: lightblue;\n\t\t\t\tborder-width: 0px;\n\t\t\t\tborder-style: solid;\n\t\t\t\twhite-space: pre-wrap;\n\t\t\t}\n\t\t"; document.head.appendChild(style); }; - Editor.prototype.insertNewline = function (x) { - var newline = new EditorLine(x, "", this); + Editor.prototype.insertNewline = function (x, text) { + var newline = new EditorLine(x, text, this); for (var y = x; y < this.lines.length; y++) { this.lines[y].setNumber(y + 2); } this.lines.splice(x, 0, newline); this.render(); + this.setCaret(newline.elText, 0); }; Editor.prototype.onClickText = function (text) { this.sel = window.getSelection(); @@ -77,21 +78,13 @@ var Editor = /** @class */ (function () { if (!this.sel) { return false; } + ev.preventDefault(); var elText = this.lines[x - 1].elText; var off = this.sel.focusOffset; if (off > elText.innerText.length) { off = elText.innerText.length; } - if (elText.firstChild) { - this.range.setStart(elText.firstChild, off); - } - else { - this.range.setStart(elText, off); - } - this.range.collapse(true); - this.sel.removeAllRanges(); - this.sel.addRange(this.range); - ev.preventDefault(); + this.setCaret(elText, off); break; case "ArrowDown": if (x == this.lines.length - 1) { @@ -100,25 +93,50 @@ var Editor = /** @class */ (function () { if (!this.sel) { return false; } + ev.preventDefault(); elText = this.lines[x + 1].elText; off = this.sel.focusOffset; if (off > elText.innerText.length) { off = elText.innerText.length; } - if (elText.firstChild) { - this.range.setStart(elText.firstChild, off); + this.setCaret(elText, off); + break; + case "Backspace": + if (x == 0) { + return; } - else { - this.range.setStart(elText, off); + if (!this.sel) { + return; + } + off = this.sel.focusOffset; + if (off > 0) { + return; } - this.range.collapse(true); - this.sel.removeAllRanges(); - this.sel.addRange(this.range); ev.preventDefault(); + // Join current line with previous. + var lineCurr = this.lines[x].elText; + var linePrev = this.lines[x - 1].elText; + off = linePrev.innerText.length; + linePrev.innerText = linePrev.innerText + lineCurr.innerText; + // Remove the current line + this.lines.splice(x, 1); + // Reset the line numbers. + for (; x < this.lines.length; x++) { + this.lines[x].setNumber(x + 1); + } + this.render(); + this.setCaret(linePrev, off); break; case "Enter": - this.insertNewline(x + 1); + if (!this.sel) { + return; + } ev.preventDefault(); + off = this.sel.focusOffset; + var text_1 = this.lines[x].elText.innerText; + var newText = text_1.slice(off, text_1.length); + this.lines[x].elText.innerText = text_1.slice(0, off); + this.insertNewline(x + 1, newText); break; case "Tab": if (!this.sel) { @@ -126,18 +144,9 @@ var Editor = /** @class */ (function () { } elText = this.lines[x].elText; off = this.sel.focusOffset; - var text_1 = elText.innerText; + text_1 = elText.innerText; elText.innerText = text_1.slice(0, off) + "\t" + text_1.slice(off, text_1.length); - off += 1; - if (elText.firstChild) { - this.range.setStart(elText.firstChild, off); - } - else { - this.range.setStart(elText, off); - } - this.range.collapse(true); - this.sel.removeAllRanges(); - this.sel.addRange(this.range); + this.setCaret(elText, off + 1); ev.preventDefault(); break; } @@ -175,6 +184,20 @@ var Editor = /** @class */ (function () { this.el.appendChild(line.el); } }; + Editor.prototype.setCaret = function (elText, off) { + if (!this.sel) { + return; + } + if (elText.firstChild) { + this.range.setStart(elText.firstChild, off); + } + else { + this.range.setStart(elText, off); + } + this.range.collapse(true); + this.sel.removeAllRanges(); + this.sel.addRange(this.range); + }; return Editor; }()); exports.Editor = Editor; @@ -212,4 +235,4 @@ var EditorLine = /** @class */ (function () { }; return EditorLine; }()); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBO0lBWUMsZ0JBQW1CLElBQWE7UUFBYixTQUFJLEdBQUosSUFBSSxDQUFTO1FBUnhCLGVBQVUsR0FBb0IsSUFBSSxDQUFBO1FBQ2xDLGVBQVUsR0FBdUIsSUFBSSxDQUFBO1FBQ3JDLGVBQVUsR0FBVyxDQUFDLENBQUE7UUFDdEIsYUFBUSxHQUFXLENBQUMsQ0FBQTtRQUNwQixVQUFLLEdBQWlCLEVBQUUsQ0FBQTtRQUN4QixRQUFHLEdBQXFCLElBQUksQ0FBQTtRQUluQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBO1FBRW5DLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN2RCxPQUFNO1NBQ047UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRW5DLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCx5QkFBUSxHQUFSLFVBQVMsSUFBWTtRQUNwQixJQUFJLEdBQUcsR0FBYTtZQUNuQixJQUFJLEVBQUUsR0FBRztTQUNULENBQUE7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZ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
\ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWRpdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBO0lBWUMsZ0JBQW1CLElBQWE7UUFBYixTQUFJLEdBQUosSUFBSSxDQUFTO1FBUnhCLGVBQVUsR0FBb0IsSUFBSSxDQUFBO1FBQ2xDLGVBQVUsR0FBdUIsSUFBSSxDQUFBO1FBQ3JDLGVBQVUsR0FBVyxDQUFDLENBQUE7UUFDdEIsYUFBUSxHQUFXLENBQUMsQ0FBQTtRQUNwQixVQUFLLEdBQWlCLEVBQUUsQ0FBQTtRQUN4QixRQUFHLEdBQXFCLElBQUksQ0FBQTtRQUluQyxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUE7UUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBO1FBRW5DLElBQUksQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN2RCxPQUFNO1NBQ047UUFFRCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFaEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBRW5DLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFBO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BDLENBQUM7SUFFRCx5QkFBUSxHQUFSLFVBQVMsSUFBWTtRQUNwQixJQUFJLEdBQUcsR0FBYTtZQUNuQixJQUFJLEVBQUUsR0FBRztTQUNULENBQUE7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTtZ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
\ No newline at end of file diff --git a/editor/editor.ts b/editor/editor.ts index 048440e..b428e87 100644 --- a/editor/editor.ts +++ b/editor/editor.ts @@ -90,19 +90,20 @@ export class Editor implements IEditor { .wui-editor-line { display: table; } - .wui-line-number:hover { - background-color: lightsalmon; - } .wui-line-number { + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + color: dimgrey; + cursor: pointer; display: table-cell; padding: 4px 1em 4px 4px; text-align: right; - width: 3em; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; user-select: none; + width: 3em; + } + .wui-line-number:hover { + background-color: lightsalmon; } .wui-line-text { display: table-cell; @@ -116,13 +117,14 @@ export class Editor implements IEditor { document.head.appendChild(style) } - insertNewline(x: number) { - let newline = new EditorLine(x, "", this) + insertNewline(x: number, text: string) { + let newline = new EditorLine(x, text, this) for (let y = x; y < this.lines.length; y++) { this.lines[y].setNumber(y + 2) } this.lines.splice(x, 0, newline) this.render() + this.setCaret(newline.elText, 0) } onClickText(text: HTMLElement) { @@ -138,21 +140,15 @@ export class Editor implements IEditor { if (!this.sel) { return false } + ev.preventDefault() let elText = this.lines[x - 1].elText let off = this.sel.focusOffset if (off > elText.innerText.length) { off = elText.innerText.length } - if (elText.firstChild) { - this.range.setStart(elText.firstChild, off) - } else { - this.range.setStart(elText, off) - } - this.range.collapse(true) - this.sel.removeAllRanges() - this.sel.addRange(this.range) - ev.preventDefault() + this.setCaret(elText, off) break + case "ArrowDown": if (x == this.lines.length - 1) { return false @@ -160,25 +156,56 @@ export class Editor implements IEditor { if (!this.sel) { return false } + ev.preventDefault() elText = this.lines[x + 1].elText off = this.sel.focusOffset if (off > elText.innerText.length) { off = elText.innerText.length } - if (elText.firstChild) { - this.range.setStart(elText.firstChild, off) - } else { - this.range.setStart(elText, off) + this.setCaret(elText, off) + break + + case "Backspace": + if (x == 0) { + return + } + if (!this.sel) { + return + } + off = this.sel.focusOffset + if (off > 0) { + return } - this.range.collapse(true) - this.sel.removeAllRanges() - this.sel.addRange(this.range) ev.preventDefault() + + // Join current line with previous. + let lineCurr = this.lines[x].elText + let linePrev = this.lines[x - 1].elText + off = linePrev.innerText.length + linePrev.innerText = linePrev.innerText + lineCurr.innerText + + // Remove the current line + this.lines.splice(x, 1) + + // Reset the line numbers. + for (; x < this.lines.length; x++) { + this.lines[x].setNumber(x + 1) + } + this.render() + this.setCaret(linePrev, off) break case "Enter": - this.insertNewline(x + 1) + if (!this.sel) { + return + } ev.preventDefault() + + off = this.sel.focusOffset + let text = this.lines[x].elText.innerText + let newText = text.slice(off, text.length) + this.lines[x].elText.innerText = text.slice(0, off) + this.insertNewline(x + 1, newText) break case "Tab": @@ -188,20 +215,11 @@ export class Editor implements IEditor { elText = this.lines[x].elText off = this.sel.focusOffset - let text = elText.innerText + text = elText.innerText elText.innerText = text.slice(0, off) + "\t" + text.slice(off, text.length) - off += 1 - if (elText.firstChild) { - this.range.setStart(elText.firstChild, off) - } else { - this.range.setStart(elText, off) - } - this.range.collapse(true) - this.sel.removeAllRanges() - this.sel.addRange(this.range) + this.setCaret(elText, off + 1) ev.preventDefault() - break } return true @@ -240,6 +258,20 @@ export class Editor implements IEditor { this.el.appendChild(line.el) } } + + setCaret(elText: HTMLElement, off: number) { + if (!this.sel) { + return + } + if (elText.firstChild) { + this.range.setStart(elText.firstChild, off) + } else { + this.range.setStart(elText, off) + } + this.range.collapse(true) + this.sel.removeAllRanges() + this.sel.addRange(this.range) + } } class EditorLine { diff --git a/editor/example.html b/editor/example.html index 0d232f3..344bd1b 100644 --- a/editor/example.html +++ b/editor/example.html @@ -48,14 +48,14 @@ sudo systemctl status stackdriver-collectd ##---- Connect telegraf with collectd -{{.Val "influxdb::dir"}}/bin/influx bucket create \ - --name stackdriver_collectd \ - --description "stackdriver collectd" \ - --org {{.Val "influxdb::org"}} \ - --token {{.Val "influxdb:telegraf:token"}} \ +{{.Val "influxdb::dir"}}/bin/influx bucket create \\ + --name stackdriver_collectd \\ + --description "stackdriver collectd" \\ + --org {{.Val "influxdb::org"}} \\ + --token {{.Val "influxdb:telegraf:token"}} \\ --retention "3d" -#put: {{.BaseDir}}/_template/etc/telegraf/telegraf.d/stackdriver-collectd.conf \ +#put: {{.BaseDir}}/_template/etc/telegraf/telegraf.d/stackdriver-collectd.conf \\ {{.Val "influxdb::dir"}}/etc/telegraf/telegraf.d/stackdriver-collectd.conf sudo systemctl restart telegraf |
