import { Widget } from '@lumino/widgets'; import * as CodeMirror from 'codemirror'; import 'codemirror/mode/lua/lua.js'; import 'codemirror/mode/javascript/javascript.js'; import 'codemirror/addon/fold/foldcode.js'; import 'codemirror/addon/fold/foldgutter.js'; // import 'codemirror/lib/codemirror.css'; // import 'codemirror/theme/monokai.css'; const TIC_SPECIALS = ["TIC", "SCN", "OVR", "btn", "btnp", "clip", "cls", "circ", "circb", "exit", "fget", "font", "fset", "key", "keyp", "line", "map", "memcpy", "memset", "mget", "mouse", "mset", "music", "peek", "peek4", "pix", "pmem", "poke", "poke4", "print", "rect", "rectb", "reset", "sfx", "spr", "sync", "time", "tstamp", "trace", "tri", "textri"], CM_OPTS = { mode: {'name': 'lua', 'specials': TIC_SPECIALS, 'fold': true}, // mode: {'name': 'lua'}, theme: 'default', lineNumbers: true, lineWrapping: true, // extraKeys: {"Ctrl-S": function(cm){ save(); }}, foldGutter: true, gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter"] }; export class EditorWidget extends Widget { static createNode() { let node = document.createElement('div'); let editor = document.createElement('div'); // let input = document.createElement('input'); // input.placeholder = 'Placeholder...'; // content.appendChild(input); node.appendChild(editor); return node; } constructor(name) { super({ node: EditorWidget.createNode() }); // let editor_div = this.node.getElementsByTagName('div')[0]; this.cm = CodeMirror(this.editorDiv, CM_OPTS); // window.code = this.cm; this.setFlag(Widget.Flag.DisallowLayout); this.addClass('content'); this.addClass(name.toLowerCase()); this.title.label = name; this.title.closable = false; this.title.caption = `Editor: ${name}`; } get editorDiv () { return this.node.getElementsByTagName('div')[0]; } get inputNode() { return this.node.getElementsByTagName('input')[0]; } setValue (text) { this.cm.setValue(text); // this.cm.update(); } getValue () { return this.cm.getValue(); } // onUpdateRequest (Message) { // } onAfterShow () { //console.log("editor.onAfterShow"); this.cm.refresh(); } onActivateRequest(Message) { // if (this.isAttached) { // this.inputNode.focus(); // } } }