{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eslint/src/components/tools/lively-console.js"],"names":["Morph","cop","Files","Console","initialize","windowTitle","registerButtons","addEventListener","evt","onFocus","setAttribute","get","onEditorLoaded","onCommandLineLoaded","setCustomStyle","editor","setValue","setOption","focus","commandLine","getSubmorph","cm","text","getValue","logWithLeftAndRight","result","tryBoundEval","on","instance","change","newtext","join","replace","update","from","to","dispatchEvent","CustomEvent","onCommandLineKeyUp","keyCode","evalInput","onClear","src","eval","e","log","printError","err","getCursor","replaceSelection","widget","document","createElement","lively","components","openIn","body","then","comp","stack","remove","markText","replacedWith","handleMouseEvents","atomic","args","Array","arguments","lastLog","lastLogCounter","setLeftAnnotation","calledFrom","c","left","right","doc","getDoc","execCommand","length","forEach","ea","message","s","split","line","index","lines","innerHTML","setRightAnnotation","leftAnnotation","style","fontSize","whiteSpace","color","marginTop","marginLeft","classList","add","setGutterMarker","annotation","display","textContent","float","ref","parseSourceReference","url","preventDefault","openBrowser","marker","className","offset","Error","filter","match","slice","livelyMigrate","other","m","layer","window","refineObject","console","consoles","querySelectorAll","apply","withoutLayers","ConsoleLayer","proceed","beGlobal"],"mappings":"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","file":"lively-console.js","sourcesContent":["import Morph from \"src/components/widgets/lively-morph.js\"\nimport * as cop from \"src/client/ContextJS/src/contextjs.js\"\nimport Files from \"src/client/files.js\"\n\nexport default class Console extends Morph {\n\n  initialize() {\n    this.windowTitle = \"Console\"\n\n    // lineNumbers: true,\n    //   gutters: [\"rightgutter\", \"CodeMirror-linenumbers\", \"rightgutter\"],\n    //   mode: {name: \"javascript\", globalVars: true},\n    // });\n\n    this.registerButtons();\n\n    this.addEventListener(\"focus\", evt => this.onFocus(evt))\n    this.setAttribute('tabindex', 0)\n    this.get(\"#console\").addEventListener(\"editor-loaded\", () => this.onEditorLoaded())\n    this.get(\"#commandline\").addEventListener(\"editor-loaded\", () => this.onCommandLineLoaded())\n\n    this.get(\"#console\").setCustomStyle(`\n      .CodeMirror pre { \n        border-bottom: 1px solid lightgrey;\n        padding: 2px;\n        padding-left: 20px\n      }\n\n      .leftgutter {\n        width: 0px;\n        background-color: white;\n      }\n      .rightgutter {\n        width: 300px;\n      }\n    `)\n\n  }\n\n  onEditorLoaded() {\n    var editor = this.get('#console').editor\n    editor.setValue(\"\")\n\n    editor.setOption(\"lineNumbers\", false);\n    editor.setOption(\"lineWrapping\", true)\n    editor.setOption(\"readOnly\",  true);\n    editor.setOption(\"gutters\",  [\"leftgutter\"]);\n    editor.setOption(\"mode\",  null);\n\n\n  }\n\n  onFocus() {\n    this.get(\"#commandline\").editor && this.get(\"#commandline\").editor.focus()\n  }\n\n  onCommandLineLoaded() {\n    var commandLine = this.getSubmorph('#commandline');\n    var editor = commandLine.editor\n    editor.setValue(\"\")\n\n    editor.setOption(\"lineNumbers\", false);\n    editor.setOption(\"lineWrapping\", true);\n\n    editor.setOption(\"gutters\",  []);\n    editor.setOption(\"extraKeys\", {\n      \"Enter\": async (cm) => {\n          let text = editor.getValue()\n          this.logWithLeftAndRight([text], \"> \")\n          let result = await commandLine.tryBoundEval(text, false);\n          this.logWithLeftAndRight([result], \"< \")\n      },\n    })\n\n    editor.on(\"beforeChange\", function(instance, change) {\n        var newtext = change.text.join(\"\").replace(/\\n/g, \"\"); // remove ALL \\n !\n        change.update(change.from, change.to, [newtext]);\n        return true;\n    });\n\n\n    this.getSubmorph('#commandline').editor\n\n    this.getSubmorph('#commandline').setCustomStyle(`\n    .CodeMirror-hscrollbar {\n      display: none \n    }\n\n    .CodeMirror-scroll {\n      overflow: hidden  \n    }\n    `)\n\n    this.dispatchEvent(new CustomEvent(\"console-loaded\"));\n  }\n\n  onCommandLineKeyUp(evt) {\n    if(evt.keyCode == 13) { this.evalInput() }\n  }\n\n  onClear() {\n    this.getSubmorph('#console').editor.setValue(\"\")\n  }\n\n  evalInput() {\n    var src = this.getSubmorph('#commandline').editor.getValue()\n    try { var result = eval(src) } catch(e) { result = \"ERROR:\" + e }\n    this.log(\"\" + src)\n    this.log(\"// \" + result)\n  }\n\n  printError(editor, err) {\n    let from = editor.getCursor()\n    // editor.replaceSelection(\"\" + err.stack);\n    editor.replaceSelection(\"XXX\");\n    let to = editor.getCursor()\n\n    let widget = document.createElement(\"lively-error\")\n\n    lively.components.openIn(document.body, widget).then( comp => {\n      widget.stack =  err.stack\n    })\n    widget.remove()\n    editor.markText(from, to, {\n      replacedWith: widget,\n      handleMouseEvents: false,\n      atomic: true\n    })\n  }\n\n\n  log() {\n    var args = Array.from(arguments)\n\n    if (this.lastLog && (this.lastLog.join(\"\") == args.join(\"\"))) {\n      this.lastLogCounter++\n      // this.logWithLeftAndRight(args, \"\" + this.lastLogCounter, this.calledFrom(4))\n      this.setLeftAnnotation(\"\" +this.lastLogCounter)\n    } else {\n      this.logWithLeftAndRight(args, null, this.calledFrom(4))\n      this.lastLogCounter=1\n    }\n    this.lastLog = args\n\n  }\n\n  get editor() {\n    var c = this.getSubmorph('#console')\n    return c.editor\n  }\n\n  logWithLeftAndRight(args, left, right ) {\n    var editor = this.editor\n    if (!editor) return\n    var doc = editor.getDoc();\n\n    editor.execCommand(\"goDocEnd\")\n    if (editor.getValue().length  > 0)\n      editor.replaceSelection(\"\\n\")\n\n    args.forEach(ea => {\n      if (ea && ea.stack && ea.message) {\n        this.printError(editor, ea)\n      } else {\n        var s = \"\" + ea\n        s.split(\"\\n\").forEach((line, index, lines) => {\n          editor.replaceSelection(line);\n          if (index < lines.length - 1) {\n            var from = editor.getCursor()\n            editor.replaceSelection(\"\\n\")\n            var widget = document.createElement(\"span\")\n            widget.innerHTML =\"<br>\"\n            editor.markText(from,editor.getCursor(),\n            {\n              replacedWith: widget,\n              handleMouseEvents: false,\n              atomic: true\n            })\n          }\n        })\n        editor.replaceSelection(\" \")\n      }\n    })\n\n    if (right) {\n      this.setRightAnnotation(right)\n    }\n\n    if (left) {\n      this.setLeftAnnotation(left)\n    }\n    // session.insert({\n    //     row: session.getLength(),\n    //     column: 0\n    //   }, \"\\n\" + this.currentStack())\n\n    // this.getSubmorph('#console').editor.scrollToRow(1000000000000)\n  }\n\n  setLeftAnnotation(left) {\n    var editor = this.editor\n    var leftAnnotation = document.createElement(\"div\")\n    leftAnnotation.style.fontSize = \"8pt\"\n    leftAnnotation.style.whiteSpace = \"nowrap\"\n    leftAnnotation.innerHTML = \"<b>\" + left +\"<b>\"\n\n    leftAnnotation.style.color = \"gray\";\n    leftAnnotation.style.marginTop = \"2px\"\n\n    leftAnnotation.style.marginLeft = \"2px\"\n    leftAnnotation.classList.add(\"errorMark\")\n\n    editor.setGutterMarker(editor.getCursor().line , \"leftgutter\", leftAnnotation);\n  }\n\n  setRightAnnotation(right) {\n      var editor = this.editor\n      editor.replaceSelection(\" \")\n      var from = editor.getCursor()\n      editor.replaceSelection(right);\n      var to = editor.getCursor()\n\n      var annotation = document.createElement(\"a\")\n      annotation.style.display = \"inline-block\"\n      // annotation.style.position = \"relative\"\n      annotation.style.color = \"grey\"\n\n      annotation.textContent = \"\" + right\n\n      // annotation.style.position = \"relative\"\n      annotation.style.right = \"0px\"\n      // annotation.style.clear = \"both\"\n      annotation.style.float = \"right\"\n\n      var ref =  Files.parseSourceReference(right)\n      if (ref) {\n        annotation.textContent = \"\" + ref\n      }\n      var url = (ref && ref.url) || right\n\n      annotation.setAttribute(\"href\", \"\" + right)\n      annotation.addEventListener(\"click\", (evt) => {\n        evt.preventDefault()\n        lively.openBrowser(url, true, ref)\n        return true\n      }, true)\n\n\n      var marker = editor.markText(\n        from, to,\n        {\n          className: \"loglink\",\n          replacedWith: annotation,\n          handleMouseEvents: false\n        })\n\n      // annotation.style.left = (c.getBoundingClientRect().right - annotation.getBoundingClientRect().right - 20) + \"px\"\n  }\n\n  calledFrom(offset) {\n    try {\n      throw new Error(\"XYZError\")\n    } catch(e) {\n      // return e.stack\n      /// console.log(\"DEBUG \" + e.stack)\n      return e.stack.split(\"\\n\")\n        .filter(ea => !ea.match(\"src/client/ContextJS/src/Layers.js\") )\n        .filter(ea => !ea.match(\"XYZError\") )\n        .filter(ea => !ea.match(\"currentStack\"))\n        .filter(ea => !ea.match(\"notify\"))\n\n\n        .slice(offset,offset + 1)\n        // .map(ea => ea.replace(/\\(.*?\\)/,\"\"))\n        .join(\"\")\n        .replace(/.*\\(/,\"\")\n        .replace(/\\).*/,\"\")\n\n    }\n  }\n\n  livelyMigrate(other) {\n    this.addEventListener(\"console-loaded\", () => {\n\n      other.get(\"#console\").editor.getValue().split(\"\\n\").forEach( line => {\n        var m = line.match(/^(.*)(https?:\\/\\/.*[0-9]+:[0-9]+$)/)\n        if (m) {\n          this.logWithLeftAndRight([m[1]], null, m[2])\n        } else {\n          this.logWithLeftAndRight([line])\n        }\n      })\n\n      this.get(\"#commandline\").editor.setValue(other.get(\"#commandline\").editor.getValue())\n    })\n  }\n}\n\ncop.layer(window, \"ConsoleLayer\").refineObject(console, {\n  log() {\n    var consoles = document.body.querySelectorAll(\"lively-console\")\n    try {\n      var args = arguments\n      // #TODO chrome cuts off stack ath a given level so the information is lost\n      // if we increase it further with \"withoutLayers\"\n      // cop.withoutLayers([ConsoleLayer], () => {\n      try {\n        consoles.forEach(ea => ea.log.apply(ea, args))\n      } catch(e) {\n        cop.withoutLayers([ConsoleLayer], () => {\n          console.log(e)\n        })\n      }\n      // })\n    } finally {\n      return cop.proceed.apply(this, arguments)\n    }\n  }\n})\n\nConsoleLayer.beGlobal()\n\n\n\n\n"]}