1
0
mirror of https://github.com/sehugg/8bitworkshop.git synced 2024-05-28 23:41:32 +00:00
8bitworkshop/gen/chunk-3XE5YOCV.js.map

8 lines
14 KiB
Plaintext

{
"version": 3,
"sources": ["../src/common/teletype.ts"],
"sourcesContent": ["\nimport { InputResponse } from \"./basic/runtime\";\n\nexport class TeleType {\n page: HTMLElement;\n fixed: boolean;\n ncols: number = 80;\n scrolldiv: HTMLElement;\n bell; // Audio\n\n curline: HTMLElement;\n curstyle: number;\n reverse: boolean;\n col: number;\n row: number;\n lines: HTMLElement[];\n ncharsout : number;\n\n constructor(page: HTMLElement, fixed: boolean) {\n this.page = page;\n this.fixed = fixed;\n this.clear();\n }\n clear() {\n this.curline = null;\n this.curstyle = 0;\n this.reverse = false;\n this.col = 0;\n this.row = -1;\n this.lines = [];\n this.ncharsout = 0;\n $(this.page).empty();\n this.showPrintHead(true);\n }\n ensureline() {\n if (this.curline == null) {\n this.curline = this.lines[++this.row];\n if (this.curline == null) {\n this.curline = $('<div class=\"transcript-line\"/>')[0];\n this.page.appendChild(this.curline);\n this.lines[this.row] = this.curline;\n this.scrollToBottom();\n }\n }\n }\n flushline() {\n this.curline = null;\n this.col = 0;\n this.movePrintHead(false);\n }\n addtext(line: string, style: number) {\n this.ensureline();\n if (line.length) {\n // in fixed mode, only do characters\n if (this.fixed && line.length > 1) {\n for (var i = 0; i < line.length; i++)\n this.addtext(line[i], style);\n return;\n }\n // process control codes\n if (line.length == 1) {\n var ch = line.charCodeAt(0);\n switch (ch) {\n case 7: if (this.bell) this.bell.play(); break;\n case 8: if (this.col > 0) this.col--; break;\n case 12: this.formfeed(); break;\n case 13: this.col = 0; break;\n }\n if (ch < 32) return; // ignore non-printables\n }\n var span = $(\"<span/>\").text(line);\n for (var i = 0; i < 8; i++) {\n if (style & (1 << i))\n span.addClass(\"transcript-style-\" + (1 << i));\n }\n if (this.reverse) span.addClass(\"transcript-reverse\");\n //span.data('vmip', this.vm.pc);\n // in fixed mode, we can overwrite individual characters\n if (this.fixed && line.length == 1 && this.col < this.curline.childNodes.length) {\n this.curline.replaceChild(span[0], this.curline.childNodes[this.col]);\n } else {\n span.appendTo(this.curline);\n }\n this.col += line.length;\n // wrap @ 80 columns (TODO: const)\n if (this.fixed && this.col >= this.ncols) this.flushline();\n this.ncharsout += line.length;\n this.movePrintHead(true);\n }\n }\n newline() {\n this.flushline();\n this.ensureline();\n }\n print(val: string) {\n // split by newlines\n var lines = val.split(\"\\n\");\n for (var i = 0; i < lines.length; i++) {\n if (i > 0) this.newline();\n this.addtext(lines[i], this.curstyle);\n }\n }\n move_cursor(col: number, row: number) {\n if (!this.fixed) return; // fixed windows only\n // ensure enough row elements\n while (this.lines.length <= row) {\n this.flushline();\n this.ensureline();\n }\n // select row element\n this.curline = this.lines[row];\n this.row = row;\n // get children in row (individual text cells)\n var children = $(this.curline).children();\n // add whitespace to line?\n if (children.length > col) {\n this.col = col;\n } else {\n while (this.col < col)\n this.addtext(' ', this.curstyle);\n }\n }\n setrows(size: number) {\n if (!this.fixed) return; // fixed windows only\n // truncate rows?\n var allrows = $(this.page).children();\n if (allrows.length > size) {\n this.flushline();\n allrows.slice(size).remove();\n this.lines = this.lines.slice(0, size);\n //this.move_cursor(0,0); \n }\n }\n formfeed() {\n for (var i=0; i<60; i++) { this.newline(); this.ensureline(); }\n }\n scrollToBottom() {\n this.curline.scrollIntoView();\n }\n movePrintHead(printing: boolean) {\n /*\n var ph = $(\"#printhead\"); // TODO: speed?\n var x = $(this.page).position().left + this.col * ($(this.page).width() / 80) - 200;\n ph.stop().animate({left: x}, {duration:20});\n //ph.offset({left: x});\n if (printing) ph.addClass(\"printing\");\n else ph.removeClass(\"printing\");\n */\n }\n showPrintHead(show: boolean) {\n /*\n var ph = $(\"#printhead\"); // TODO: speed?\n if (show) ph.show(); else ph.hide();\n */\n }\n resize(columns: number) {\n // set font size proportional to window width\n var charwidth = $(this.page).width() * 1.6 / columns;\n $(this.page).css('font-size', charwidth + 'px');\n this.scrollToBottom();\n }\n saveState() {\n return {\n curstyle: this.curstyle,\n reverse: this.reverse,\n col: this.col,\n row: this.row,\n ncharsout : this.ncharsout,\n lines: this.lines.map((line) => line.cloneNode(true)),\n }\n }\n loadState(state) {\n this.curstyle = state.curstyle;\n this.reverse = state.reverse;\n this.col = state.col;\n this.row = state.row;\n this.ncharsout = state.ncharsout;\n $(this.page).empty();\n for (var i=0; i<state.lines.length; i++) {\n this.page.appendChild(state.lines[i]);\n }\n this.lines = state.lines;\n this.curline = state.lines[this.row];\n }\n}\n\nexport class TeleTypeWithKeyboard extends TeleType {\n input : HTMLInputElement;\n msecPerLine : number = 100; // IBM 1403\n keepinput : boolean = true;\n keephandler : boolean = true;\n uppercaseOnly : boolean = false;\n splitInput : boolean = false;\n resolveInput : (InputResponse) => void;\n\n focused : boolean = true;\n scrolling : number = 0;\n waitingfor : string;\n lastInputRequestTime : number;\n\n constructor(page: HTMLElement, fixed: boolean, input: HTMLInputElement) {\n super(page, fixed);\n this.input = input;\n this.input.onkeypress = (e) => {\n this.sendkey(e);\n };\n this.input.onfocus = (e) => {\n this.focused = true;\n console.log('inputline gained focus');\n };\n $(\"#workspace\").on('click', (e) => {\n this.focused = false;\n console.log('inputline lost focus');\n });\n this.page.onclick = (e) => {\n this.input.focus();\n };\n }\n clear() {\n super.clear();\n this.hideinput();\n this.waitingfor = null;\n }\n focusinput() {\n this.ensureline();\n this.showPrintHead(false);\n // don't steal focus while editing\n if (this.keepinput)\n $(this.input).css('visibility', 'visible');\n else\n $(this.input).appendTo(this.curline).show()[0];\n // scroll to bottom\n this.scrollToBottom();\n // refocus?\n if (this.focused) {\n $(this.input).focus();\n }\n // change size\n if (this.waitingfor == 'char')\n $(this.input).addClass('transcript-input-char')\n else\n $(this.input).removeClass('transcript-input-char')\n this.lastInputRequestTime = Date.now();\n }\n hideinput() {\n this.showPrintHead(true);\n if (this.keepinput)\n $(this.input).css('visibility','hidden');\n else\n $(this.input).appendTo($(this.page).parent()).hide();\n }\n clearinput() {\n this.input.value = '';\n this.waitingfor = null;\n }\n cancelinput() {\n this.sendinput('');\n }\n sendkey(e: KeyboardEvent) {\n if (this.waitingfor == 'line') {\n if (e.key == \"Enter\") {\n this.sendinput(this.input.value.toString());\n }\n } else if (this.waitingfor == 'char') {\n this.sendchar(e.keyCode);\n e.preventDefault();\n }\n }\n sendinput(s: string) {\n if (this.resolveInput) {\n var elapsed = Date.now() - this.lastInputRequestTime;\n if (this.uppercaseOnly) s = s.toUpperCase(); // TODO: always uppercase?\n this.addtext(s, 4);\n this.flushline();\n this.clearinput();\n this.hideinput(); // keep from losing input handlers\n var vals = this.splitInput ? s.split(',') : null;\n this.resolveInput({line:s, vals:vals, elapsed:elapsed/1000});\n if (!this.keephandler) this.resolveInput = null;\n }\n }\n sendchar(code: number) {\n this.sendinput(String.fromCharCode(code));\n }\n ensureline() {\n if (!this.keepinput) $(this.input).hide();\n super.ensureline();\n }\n scrollToBottom() {\n if (this.scrolldiv) {\n this.scrolling++;\n var top = $(this.page).height() + $(this.input).height();\n $(this.scrolldiv).stop().animate({scrollTop: top}, this.msecPerLine, 'swing', () => {\n this.scrolling = 0;\n this.ncharsout = 0;\n });\n } else {\n this.input.scrollIntoView();\n }\n }\n isBusy() {\n // stop execution when scrolling and printing non-newlines\n return this.scrolling > 0 && this.ncharsout > 0;\n }\n}\n"],
"mappings": "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",
"names": []
}