| <template> | 
 |   <div id="terminal" ref="panel"></div> | 
 | </template> | 
 |  | 
 | <script> | 
 | import { AttachAddon } from 'xterm-addon-attach'; | 
 | import { FitAddon } from 'xterm-addon-fit'; | 
 | import { Terminal } from 'xterm'; | 
 |  | 
 | export default { | 
 |   name: 'SerialOverLanConsole', | 
 |   mounted() { | 
 |     this.openTerminal(); | 
 |   }, | 
 |   methods: { | 
 |     openTerminal() { | 
 |       const token = this.$store.getters['authentication/token']; | 
 |  | 
 |       const ws = new WebSocket(`wss://${window.location.host}/console0`, [ | 
 |         token | 
 |       ]); | 
 |  | 
 |       // Refer https://github.com/xtermjs/xterm.js/ for xterm implementation and addons. | 
 |  | 
 |       const term = new Terminal({ | 
 |         fontSize: 15, | 
 |         fontFamily: | 
 |           'SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace' | 
 |       }); | 
 |  | 
 |       const attachAddon = new AttachAddon(ws); | 
 |       term.loadAddon(attachAddon); | 
 |  | 
 |       const fitAddon = new FitAddon(); | 
 |       term.loadAddon(fitAddon); | 
 |  | 
 |       const SOL_THEME = { | 
 |         background: '#19273c', | 
 |         cursor: 'rgba(83, 146, 255, .5)', | 
 |         scrollbar: 'rgba(83, 146, 255, .5)' | 
 |       }; | 
 |       term.setOption('theme', SOL_THEME); | 
 |  | 
 |       term.open(this.$refs.panel); | 
 |       fitAddon.fit(); | 
 |  | 
 |       try { | 
 |         ws.onopen = function() { | 
 |           console.log('websocket console0/ opened'); | 
 |         }; | 
 |         ws.onclose = function(event) { | 
 |           console.log( | 
 |             'websocket console0/ closed. code: ' + | 
 |               event.code + | 
 |               ' reason: ' + | 
 |               event.reason | 
 |           ); | 
 |         }; | 
 |       } catch (error) { | 
 |         console.log(error); | 
 |       } | 
 |     } | 
 |   } | 
 | }; | 
 | </script> | 
 |  | 
 | <style scoped> | 
 | @import '~xterm/css/xterm.css'; | 
 |  | 
 | #terminal { | 
 |   height: 25em; | 
 |   overflow: hidden; | 
 | } | 
 | </style> |