beccabroek | 457ca04 | 2018-09-07 17:18:24 -0500 | [diff] [blame] | 1 | import {Terminal} from 'xterm'; |
| 2 | import style from 'xterm/dist/xterm.css'; |
| 3 | import * as attach from 'xterm/lib/addons/attach/attach'; |
| 4 | import * as fit from 'xterm/lib/addons/fit/fit'; |
| 5 | |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 6 | |
| 7 | window.angular && (function(angular) { |
| 8 | 'use strict'; |
| 9 | |
| 10 | angular.module('app.common.directives').directive('serialConsole', [ |
| 11 | function() { |
| 12 | return { |
| 13 | 'restrict': 'E', |
| 14 | 'template': require('./serial-console.html'), |
beccabroek | a788cf0 | 2018-09-04 09:38:13 -0500 | [diff] [blame] | 15 | 'scope': {'path': '=', 'showTabBtn': '=?'}, |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 16 | 'controller': [ |
| 17 | '$scope', '$window', 'dataService', |
| 18 | function($scope, $window, dataService) { |
| 19 | $scope.dataService = dataService; |
| 20 | |
beccabroek | 457ca04 | 2018-09-07 17:18:24 -0500 | [diff] [blame] | 21 | // See https://github.com/xtermjs/xterm.js/ for available xterm |
| 22 | // options |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 23 | |
beccabroek | 457ca04 | 2018-09-07 17:18:24 -0500 | [diff] [blame] | 24 | Terminal.applyAddon(attach); // Apply the `attach` addon |
| 25 | Terminal.applyAddon(fit); // Apply the `fit` addon |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 26 | |
beccabroek | 457ca04 | 2018-09-07 17:18:24 -0500 | [diff] [blame] | 27 | var term = new Terminal(); |
| 28 | term.open(document.getElementById('terminal')); |
| 29 | term.fit(); |
| 30 | var SOL_THEME = { |
| 31 | background: '#19273c', |
| 32 | cursor: 'rgba(83, 146, 255, .5)', |
| 33 | scrollbar: 'rgba(83, 146, 255, .5)' |
| 34 | }; |
| 35 | term.setOption('theme', SOL_THEME); |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 36 | var hostname = dataService.getHost().replace('https://', ''); |
| 37 | var host = 'wss://' + hostname + '/console0'; |
| 38 | var ws = new WebSocket(host); |
beccabroek | 457ca04 | 2018-09-07 17:18:24 -0500 | [diff] [blame] | 39 | term.attach(ws); |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 40 | ws.onopen = function() { |
| 41 | console.log('websocket opened'); |
| 42 | }; |
| 43 | ws.onclose = function(event) { |
| 44 | console.log( |
| 45 | 'websocket closed. code: ' + event.code + |
| 46 | ' reason: ' + event.reason); |
| 47 | }; |
beccabroek | a788cf0 | 2018-09-04 09:38:13 -0500 | [diff] [blame] | 48 | $scope.openTerminalWindow = function() { |
| 49 | $window.open( |
| 50 | '#/server-control/remote-console-window', |
| 51 | 'Remote Console Window', |
| 52 | 'directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=yes,width=600,height=550'); |
| 53 | }; |
beccabroek | 75697f9 | 2018-09-04 09:34:44 -0500 | [diff] [blame] | 54 | } |
| 55 | ] |
| 56 | }; |
| 57 | } |
| 58 | ]); |
| 59 | })(window.angular); |