diff --git a/static/css/index.css b/static/css/index.css index ed39b9f..39cba0e 100644 --- a/static/css/index.css +++ b/static/css/index.css @@ -419,8 +419,10 @@ header [class*=" icon-"] { border-left: 1px solid #ccc; } .ui-project-terminal { + padding: 0 10px; background-color: #181818; border-left: 1px dashed #ccc; + font-family: Consolas, sans-serif; } .ui-control-bar .ui-button-orange { margin: 0 10px 0 0; diff --git a/static/js/components/app-main/index.js b/static/js/components/app-main/index.js index 5cd1d7c..028dc38 100644 --- a/static/js/components/app-main/index.js +++ b/static/js/components/app-main/index.js @@ -8,7 +8,7 @@ var fs = require('fs'); var path = require('path'); var util = require('../../util'); var Vue = require('../../vue/vue'); -var Terminal = require('../../terminal/termlib'); +var Terminal = require('../../terminal'); const EMPTYPROJECT = { name: '', @@ -80,13 +80,43 @@ module.exports = Vue.component('app-main', { if (!window.AppRuntime[this.project.name]) { var xterm = new Terminal({ - x: 220, - y: 70, - termDiv: this.$els.terminal + cols: 220, + rows: 70 }); xterm.open(); - xterm.write('aasdsad'); + this.$els.terminal.appendChild(xterm.element); + + [ + '\u001b[92m\'use strict\'\u001b[39m\u001b[90m;\u001b[39m', + '\u001b[90m/*jshint browser:true */\u001b[39m', + '', + '\u001b[32mvar\u001b[39m \u001b[37mTerminal\u001b[39m \u001b[93m=\u001b[39m \u001b[37mrequire\u001b[39m\u001b[90m(\u001b[39m\u001b[92m\'./term\'\u001b[39m\u001b[90m)\u001b[39m', + ' \u001b[32m,\u001b[39m \u001b[37mthrough\u001b[39m \u001b[93m=\u001b[39m \u001b[37mrequire\u001b[39m\u001b[90m(\u001b[39m\u001b[92m\'through\'\u001b[39m\u001b[90m)\u001b[39m', + ' \u001b[90m;\u001b[39m', + '', + '\u001b[37mmodule\u001b[39m\u001b[32m.\u001b[39m\u001b[37mexports\u001b[39m \u001b[93m=\u001b[39m \u001b[94mfunction\u001b[39m \u001b[90m(\u001b[39m\u001b[37mcols\u001b[39m\u001b[32m,\u001b[39m \u001b[37mrows\u001b[39m\u001b[32m,\u001b[39m \u001b[37mhandler\u001b[39m\u001b[90m)\u001b[39m \u001b[33m{\u001b[39m', + ' \u001b[32mvar\u001b[39m \u001b[37mterm\u001b[39m \u001b[93m=\u001b[39m \u001b[31mnew\u001b[39m \u001b[37mTerminal\u001b[39m\u001b[90m(\u001b[39m\u001b[37mcols\u001b[39m\u001b[32m,\u001b[39m \u001b[37mrows\u001b[39m\u001b[32m,\u001b[39m \u001b[37mhandler\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + ' \u001b[37mterm\u001b[39m\u001b[32m.\u001b[39m\u001b[37mopen\u001b[39m\u001b[90m(\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + ' ', + ' \u001b[32mvar\u001b[39m \u001b[37mhypernal\u001b[39m \u001b[93m=\u001b[39m \u001b[37mthrough\u001b[39m\u001b[90m(\u001b[39m\u001b[37mterm\u001b[39m\u001b[32m.\u001b[39m\u001b[37mwrite\u001b[39m\u001b[32m.\u001b[39m\u001b[37mbind\u001b[39m\u001b[90m(\u001b[39m\u001b[37mterm\u001b[39m\u001b[90m)\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + ' \u001b[37mhypernal\u001b[39m\u001b[32m.\u001b[39m\u001b[37mappendTo\u001b[39m \u001b[93m=\u001b[39m \u001b[94mfunction\u001b[39m \u001b[90m(\u001b[39m\u001b[37melem\u001b[39m\u001b[90m)\u001b[39m \u001b[33m{\u001b[39m', + ' \u001b[94mif\u001b[39m \u001b[90m(\u001b[39m\u001b[94mtypeof\u001b[39m \u001b[37melem\u001b[39m \u001b[93m===\u001b[39m \u001b[92m\'string\'\u001b[39m\u001b[90m)\u001b[39m \u001b[37melem\u001b[39m \u001b[93m=\u001b[39m \u001b[37mdocument\u001b[39m\u001b[32m.\u001b[39m\u001b[37mquerySelector\u001b[39m\u001b[90m(\u001b[39m\u001b[37melem\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + '', + ' \u001b[37melem\u001b[39m\u001b[32m.\u001b[39m\u001b[37mappendChild\u001b[39m\u001b[90m(\u001b[39m\u001b[37mterm\u001b[39m\u001b[32m.\u001b[39m\u001b[37melement\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + ' \u001b[37mterm\u001b[39m\u001b[32m.\u001b[39m\u001b[37melement\u001b[39m\u001b[32m.\u001b[39m\u001b[37mstyle\u001b[39m\u001b[32m.\u001b[39m\u001b[37mposition\u001b[39m \u001b[93m=\u001b[39m \u001b[92m\'relative\'\u001b[39m\u001b[90m;\u001b[39m', + ' \u001b[33m}\u001b[39m\u001b[90m;\u001b[39m', + '', + ' \u001b[37mhypernal\u001b[39m\u001b[32m.\u001b[39m\u001b[37mwriteln\u001b[39m \u001b[93m=\u001b[39m \u001b[94mfunction\u001b[39m \u001b[90m(\u001b[39m\u001b[37mline\u001b[39m\u001b[90m)\u001b[39m \u001b[33m{\u001b[39m', + ' \u001b[37mterm\u001b[39m\u001b[32m.\u001b[39m\u001b[37mwriteln\u001b[39m\u001b[90m(\u001b[39m\u001b[37mline\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + ' \u001b[33m}\u001b[39m\u001b[90m;\u001b[39m', + '', + ' \u001b[37mhypernal\u001b[39m\u001b[32m.\u001b[39m\u001b[37mwrite\u001b[39m \u001b[93m=\u001b[39m \u001b[37mterm\u001b[39m\u001b[32m.\u001b[39m\u001b[37mwrite\u001b[39m\u001b[32m.\u001b[39m\u001b[37mbind\u001b[39m\u001b[90m(\u001b[39m\u001b[37mterm\u001b[39m\u001b[90m)\u001b[39m\u001b[90m;\u001b[39m', + '', + ' \u001b[31mreturn\u001b[39m \u001b[37mhypernal\u001b[39m\u001b[90m;\u001b[39m', + '\u001b[33m}\u001b[39m\u001b[90m;\u001b[39m', + '' + ].forEach(function (line){ xterm.writeln(line); }); window.AppRuntime[this.project.name] = { name: name, diff --git a/static/js/terminal/index.js b/static/js/terminal/index.js index d145511..f9431bb 100644 --- a/static/js/terminal/index.js +++ b/static/js/terminal/index.js @@ -6,6 +6,7 @@ module.exports = Terminal; function Terminal(opts){ opts = opts || {}; + if (!(this instanceof Terminal)) return new Terminal(opts); this.cols = opts.cols || 500; @@ -37,13 +38,13 @@ function Terminal(opts){ this.charsets = [null]; // misc - this.element; - this.children; - this.refreshStart; - this.refreshEnd; - this.savedX; - this.savedY; - this.savedCols; + this.element = null; + this.children = null; + this.refreshStart = null; + this.refreshEnd = null; + this.savedX = null; + this.savedY = null; + this.savedCols = null; // stream this.readable = true; @@ -58,12 +59,15 @@ function Terminal(opts){ this.postfix = ''; this.lines = []; + var i = this.rows; + while (i--) { this.lines.push(this.blankLine()); } - this.tabs; + this.tabs = null; + this.setupStops(); }