30 lines
882 B
JavaScript
30 lines
882 B
JavaScript
|
import { Terminal } from 'xterm';
|
||
|
import { AttachAddon } from 'xterm-addon-attach';
|
||
|
import { FitAddon } from 'xterm-addon-fit';
|
||
|
|
||
|
window.customElements.define('console-component', class extends HTMLElement {
|
||
|
constructor(host, server, token) {
|
||
|
super();
|
||
|
this.shadow = this.attachShadow({mode: 'open'});
|
||
|
this.render();
|
||
|
this.term = new Terminal();
|
||
|
const fitAddon = new FitAddon();
|
||
|
this.term.loadAddon(fitAddon);
|
||
|
fitAddon.fit();
|
||
|
term.open(document.getElementById('terminal'));
|
||
|
this.connect();
|
||
|
|
||
|
}
|
||
|
|
||
|
connect() {
|
||
|
this.socket = new WebSocket(`wss://${host}/server/${server}/logs?token=${token}`);
|
||
|
const attachAddon = new AttachAddon(socket);
|
||
|
term.loadAddon(attachAddon);
|
||
|
}
|
||
|
render() {
|
||
|
this.shadow.innerHTML = `
|
||
|
<div id="terminal"></div>
|
||
|
`;
|
||
|
}
|
||
|
|
||
|
});
|