]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/VNCConsole.js
ui/vnc: reload IFrame-embedded noVNC on VM startup
[pve-manager.git] / www / manager6 / VNCConsole.js
1 Ext.define('PVE.noVncConsole', {
2 extend: 'Ext.panel.Panel',
3 alias: 'widget.pveNoVncConsole',
4
5 nodename: undefined,
6 vmid: undefined,
7 cmd: undefined,
8
9 consoleType: undefined, // lxc, kvm, shell, cmd
10 xtermjs: false,
11
12 layout: 'fit',
13 border: false,
14
15 initComponent: function() {
16 var me = this;
17
18 if (!me.nodename) {
19 throw "no node name specified";
20 }
21
22 if (!me.consoleType) {
23 throw "no console type specified";
24 }
25
26 if (!me.vmid && me.consoleType !== 'shell' && me.consoleType !== 'cmd') {
27 throw "no VM ID specified";
28 }
29
30 // always use same iframe, to avoid running several noVnc clients
31 // at same time (to avoid performance problems)
32 var box = Ext.create('Ext.ux.IFrame', { itemid : "vncconsole" });
33
34 var type = me.xtermjs ? 'xtermjs' : 'novnc';
35 Ext.apply(me, {
36 items: box,
37 listeners: {
38 activate: function() {
39 var sp = Ext.state.Manager.getProvider();
40 var queryDict = {
41 console: me.consoleType, // kvm, lxc, upgrade or shell
42 vmid: me.vmid,
43 node: me.nodename,
44 cmd: me.cmd,
45 resize: sp.get('novnc-scaling', 'scale'),
46 };
47 queryDict[type] = 1;
48 PVE.Utils.cleanEmptyObjectKeys(queryDict);
49 var url = '/?' + Ext.Object.toQueryString(queryDict);
50 box.load(url);
51 }
52 }
53 });
54
55 me.callParent();
56
57 me.on('afterrender', function() {
58 me.focus();
59 });
60 },
61
62 reloadConsole: function() {
63 // reload IFrame content to forcibly reconnect VNC/xterm.js to VM
64 var box = this.down();
65 box.getWin().location.reload();
66 }
67 });
68