mirror of
git://git.proxmox.com/git/novnc-pve.git
synced 2025-01-03 05:17:56 +03:00
remove old unused patches
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
742d9e9130
commit
4d91357934
207
debian/patches/customize-html-tpl.diff
vendored
207
debian/patches/customize-html-tpl.diff
vendored
@ -1,207 +0,0 @@
|
|||||||
--- a/index.html.tpl
|
|
||||||
+++ b/index.html.tpl
|
|
||||||
@@ -1,18 +1,7 @@
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
-
|
|
||||||
- <!--
|
|
||||||
- noVNC example: simple example using default UI
|
|
||||||
- Copyright (C) 2012 Joel Martin
|
|
||||||
- Copyright (C) 2013 Samuel Mannehed for Cendio AB
|
|
||||||
- noVNC is licensed under the MPL 2.0 (see LICENSE.txt)
|
|
||||||
- This file is licensed under the 2-Clause BSD license (see LICENSE.txt).
|
|
||||||
-
|
|
||||||
- Connect parameters are provided in query string:
|
|
||||||
- http://example.com/?host=HOST&port=PORT&encrypt=1&true_color=1
|
|
||||||
- -->
|
|
||||||
- <title>noVNC</title>
|
|
||||||
+ <title>[% nodename %] - Proxmox Console</title>
|
|
||||||
|
|
||||||
<meta charset="utf-8">
|
|
||||||
|
|
||||||
@@ -22,46 +11,39 @@
|
|
||||||
|
|
||||||
<!-- Apple iOS Safari settings -->
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
||||||
- <meta name="apple-mobile-web-app-capable" content="yes" />
|
|
||||||
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
||||||
- <!-- App Start Icon -->
|
|
||||||
- <link rel="apple-touch-startup-image" href="images/screen_320x460.png" />
|
|
||||||
- <!-- For iOS devices set the icon to use if user bookmarks app on their homescreen -->
|
|
||||||
- <link rel="apple-touch-icon" href="images/screen_57x57.png">
|
|
||||||
- <!--
|
|
||||||
- <link rel="apple-touch-icon-precomposed" href="images/screen_57x57.png" />
|
|
||||||
- -->
|
|
||||||
-
|
|
||||||
-
|
|
||||||
<!-- Stylesheets -->
|
|
||||||
- <link rel="stylesheet" href="include/base.css" />
|
|
||||||
- <link rel="alternate stylesheet" href="include/black.css" TITLE="Black" />
|
|
||||||
- <link rel="alternate stylesheet" href="include/blue.css" TITLE="Blue" />
|
|
||||||
-
|
|
||||||
- <!--
|
|
||||||
- <script type='text/javascript'
|
|
||||||
- src='http://getfirebug.com/releases/lite/1.2/firebug-lite-compressed.js'></script>
|
|
||||||
- -->
|
|
||||||
+ <link rel="stylesheet" href="/novnc/include/base.css" />
|
|
||||||
|
|
||||||
+ [% IF langfile %]
|
|
||||||
+ <script type='text/javascript' src='/pve2/locale/pve-lang-[% lang %].js'></script>
|
|
||||||
+ [% ELSE %]
|
|
||||||
+ <script type="text/javascript">function gettext(buf) { return buf; }</script>
|
|
||||||
+ [% END %]
|
|
||||||
+ <script type="text/javascript">
|
|
||||||
+if (typeof(PVE) === 'undefined') PVE = {};
|
|
||||||
+PVE.UserName = '[% username %]';
|
|
||||||
+PVE.CSRFPreventionToken = '[% token %]';
|
|
||||||
+INCLUDE_URI='/novnc/include/';
|
|
||||||
+ </script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<div id="noVNC-control-bar" class="noVNC_status_normal">
|
|
||||||
<!--noVNC Mobile Device only Buttons-->
|
|
||||||
<div class="noVNC-buttons-left">
|
|
||||||
- <input type="image" alt="viewport drag" src="images/drag.png"
|
|
||||||
+ <input type="image" alt="viewport drag" src="/novnc/images/drag.png"
|
|
||||||
id="noVNC_view_drag_button" class="noVNC_status_button"
|
|
||||||
title="Move/Drag Viewport">
|
|
||||||
<div id="noVNC_mobile_buttons">
|
|
||||||
- <input type="image" alt="No mousebutton" src="images/mouse_none.png"
|
|
||||||
+ <input type="image" alt="No mousebutton" src="/novnc/images/mouse_none.png"
|
|
||||||
id="noVNC_mouse_button0" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Left mousebutton" src="images/mouse_left.png"
|
|
||||||
+ <input type="image" alt="Left mousebutton" src="/novnc/images/mouse_left.png"
|
|
||||||
id="noVNC_mouse_button1" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Middle mousebutton" src="images/mouse_middle.png"
|
|
||||||
+ <input type="image" alt="Middle mousebutton" src="/novnc/images/mouse_middle.png"
|
|
||||||
id="noVNC_mouse_button2" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Right mousebutton" src="images/mouse_right.png"
|
|
||||||
+ <input type="image" alt="Right mousebutton" src="/novnc/images/mouse_right.png"
|
|
||||||
id="noVNC_mouse_button4" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Keyboard" src="images/keyboard.png"
|
|
||||||
+ <input type="image" alt="Keyboard" src="/novnc/images/keyboard.png"
|
|
||||||
id="showKeyboard" class="noVNC_status_button"
|
|
||||||
value="Keyboard" title="Show Keyboard"/>
|
|
||||||
<!-- Note that Google Chrome on Android doesn't respect any of these,
|
|
||||||
@@ -72,16 +54,18 @@
|
|
||||||
autocorrect="off" autocomplete="off" spellcheck="false"
|
|
||||||
mozactionhint="Enter"></textarea>
|
|
||||||
<div id="noVNC_extra_keys">
|
|
||||||
- <input type="image" alt="Extra keys" src="images/showextrakeys.png"
|
|
||||||
+ <input type="image" alt="Extra keys" src="/novnc/images/showextrakeys.png"
|
|
||||||
id="showExtraKeysButton" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Ctrl" src="images/ctrl.png"
|
|
||||||
+ <input type="image" alt="Ctrl" src="/novnc/images/ctrl.png"
|
|
||||||
id="toggleCtrlButton" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Alt" src="images/alt.png"
|
|
||||||
+ <input type="image" alt="Alt" src="/novnc/images/alt.png"
|
|
||||||
id="toggleAltButton" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Tab" src="images/tab.png"
|
|
||||||
+ <input type="image" alt="Tab" src="/novnc/images/tab.png"
|
|
||||||
id="sendTabButton" class="noVNC_status_button">
|
|
||||||
- <input type="image" alt="Esc" src="images/esc.png"
|
|
||||||
+ <input type="image" alt="Esc" src="/novnc/images/esc.png"
|
|
||||||
id="sendEscButton" class="noVNC_status_button">
|
|
||||||
+ <input type="image" alt="Ctrl+Alt+Del" src="/novnc/images/ctrlaltdel.png"
|
|
||||||
+ id="sendCtrlAltDelButton" class="noVNC_status_button">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@@ -90,43 +74,21 @@
|
|
||||||
|
|
||||||
<!--noVNC Buttons-->
|
|
||||||
<div class="noVNC-buttons-right">
|
|
||||||
- <input type="image" alt="Ctrl+Alt+Del" src="images/ctrlaltdel.png"
|
|
||||||
- id="sendCtrlAltDelButton" class="noVNC_status_button"
|
|
||||||
- title="Send Ctrl-Alt-Del" />
|
|
||||||
- <input type="image" alt="Shutdown/Reboot" src="images/power.png"
|
|
||||||
- id="xvpButton" class="noVNC_status_button"
|
|
||||||
- title="Shutdown/Reboot..." />
|
|
||||||
- <input type="image" alt="Clipboard" src="images/clipboard.png"
|
|
||||||
+ <input type="image" alt="Send keys" src="/novnc/images/showextrakeys.png"
|
|
||||||
+ id="showSendKeysButton" class="noVNC_status_button"
|
|
||||||
+ title="Send keys" />
|
|
||||||
+ <input type="image" alt="Clipboard" src="/novnc/images/clipboard.png"
|
|
||||||
id="clipboardButton" class="noVNC_status_button"
|
|
||||||
title="Clipboard" />
|
|
||||||
- <input type="image" alt="Fullscreen" src="images/fullscreen.png"
|
|
||||||
+ <input type="image" alt="Fullscreen" src="/novnc/images/fullscreen.png"
|
|
||||||
id="fullscreenButton" class="noVNC_status_button"
|
|
||||||
title="Fullscreen" />
|
|
||||||
- <input type="image" alt="Settings" src="images/settings.png"
|
|
||||||
- id="settingsButton" class="noVNC_status_button"
|
|
||||||
- title="Settings" />
|
|
||||||
- <input type="image" alt="Connect" src="images/connect.png"
|
|
||||||
- id="connectButton" class="noVNC_status_button"
|
|
||||||
- title="Connect" />
|
|
||||||
- <input type="image" alt="Disconnect" src="images/disconnect.png"
|
|
||||||
- id="disconnectButton" class="noVNC_status_button"
|
|
||||||
- title="Disconnect" />
|
|
||||||
+ <input type="image" alt="Commands" src="/novnc/images/power.png"
|
|
||||||
+ id="pveCommandsButton" class="noVNC_status_button"
|
|
||||||
+ title="Commands" />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- <!-- Description Panel -->
|
|
||||||
- <!-- Shown by default when hosted at for kanaka.github.com -->
|
|
||||||
<div id="noVNC_description" class="">
|
|
||||||
- noVNC is a browser based VNC client implemented using HTML5 Canvas
|
|
||||||
- and WebSockets. You will either need a VNC server with WebSockets
|
|
||||||
- support (such as <a href="http://libvncserver.sourceforge.net/">libvncserver</a>)
|
|
||||||
- or you will need to use
|
|
||||||
- <a href="https://github.com/kanaka/websockify">websockify</a>
|
|
||||||
- to bridge between your browser and VNC server. See the noVNC
|
|
||||||
- <a href="https://github.com/kanaka/noVNC">README</a>
|
|
||||||
- and <a href="http://kanaka.github.com/noVNC">website</a>
|
|
||||||
- for more information.
|
|
||||||
- <br />
|
|
||||||
- <input id="descriptionButton" type="button" value="Close">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Popup Status -->
|
|
||||||
@@ -142,14 +104,11 @@
|
|
||||||
value="Clear">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
- <!-- XVP Shutdown/Reboot Panel -->
|
|
||||||
- <div id="noVNC_xvp" class="triangle-right top">
|
|
||||||
- <span id="noVNC_xvp_menu">
|
|
||||||
- <input type="button" id="xvpShutdownButton" value="Shutdown" />
|
|
||||||
- <input type="button" id="xvpRebootButton" value="Reboot" />
|
|
||||||
- <input type="button" id="xvpResetButton" value="Reset" />
|
|
||||||
- </span>
|
|
||||||
- </div>
|
|
||||||
+ <!-- PVE command Panel -->
|
|
||||||
+ <div id="noVNC_pve_commands" class="triangle-right top">
|
|
||||||
+ <span id="noVNC_pve_command_menu">
|
|
||||||
+ </span>
|
|
||||||
+ </div>
|
|
||||||
|
|
||||||
<!-- Settings Panel -->
|
|
||||||
<div id="noVNC_settings" class="triangle-right top">
|
|
||||||
@@ -191,6 +150,12 @@
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
+ <!-- PVE Send Key Panel -->
|
|
||||||
+ <div id="noVNC_send_keys" class="triangle-right top">
|
|
||||||
+ <span id="noVNC_send_keys_panel">
|
|
||||||
+ </span>
|
|
||||||
+ </div>
|
|
||||||
+
|
|
||||||
<!-- Connection Panel -->
|
|
||||||
<div id="noVNC_controls" class="triangle-right top">
|
|
||||||
<ul>
|
|
||||||
@@ -215,8 +180,8 @@
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
- <script src="include/util.js"></script>
|
|
||||||
- <script src="include/ui.js"></script>
|
|
||||||
+ <script src="/novnc/include/util.js"></script>
|
|
||||||
+ <script src="/novnc/include/pveui.js"></script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@ -1,18 +0,0 @@
|
|||||||
--- a/pveui.js
|
|
||||||
+++ b/pveui.js
|
|
||||||
@@ -1156,6 +1156,7 @@
|
|
||||||
$D('toggleAltButton').style.display = "inline";
|
|
||||||
$D('sendTabButton').style.display = "inline";
|
|
||||||
$D('sendEscButton').style.display = "inline";
|
|
||||||
+ $D('sendCtrlAltDelButton').style.display = "inline";
|
|
||||||
$D('showExtraKeysButton').className = "noVNC_status_button_selected";
|
|
||||||
UI.extraKeysVisible = true;
|
|
||||||
} else if(UI.extraKeysVisible === true) {
|
|
||||||
@@ -1163,6 +1164,7 @@
|
|
||||||
$D('toggleAltButton').style.display = "";
|
|
||||||
$D('sendTabButton').style.display = "";
|
|
||||||
$D('sendEscButton').style.display = "";
|
|
||||||
+ $D('sendCtrlAltDelButton').style.display = "";
|
|
||||||
$D('showExtraKeysButton').className = "noVNC_status_button";
|
|
||||||
UI.extraKeysVisible = false;
|
|
||||||
}
|
|
195
debian/patches/fix-base-css.patch
vendored
195
debian/patches/fix-base-css.patch
vendored
@ -1,195 +0,0 @@
|
|||||||
--- a/include/base.css
|
|
||||||
+++ b/include/base.css
|
|
||||||
@@ -21,6 +21,28 @@
|
|
||||||
height:100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#noVNC_pve_commands {
|
|
||||||
+ display:none;
|
|
||||||
+ margin-top:73px;
|
|
||||||
+ right:30px;
|
|
||||||
+ position:fixed;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#noVNC_pve_commands.top:after {
|
|
||||||
+ right:0px;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#noVNC_send_keys {
|
|
||||||
+ display:none;
|
|
||||||
+ margin-top:73px;
|
|
||||||
+ right:30px;
|
|
||||||
+ position:fixed;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#noVNC_send_keys.top:after {
|
|
||||||
+ right:35px;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#noVNC_controls ul {
|
|
||||||
list-style: none;
|
|
||||||
margin: 0px;
|
|
||||||
@@ -56,9 +78,6 @@
|
|
||||||
#noVNC_view_drag_button {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
-#sendCtrlAltDelButton {
|
|
||||||
- display: none;
|
|
||||||
-}
|
|
||||||
#fullscreenButton {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
@@ -79,7 +98,7 @@
|
|
||||||
|
|
||||||
.noVNC-buttons-left {
|
|
||||||
float: left;
|
|
||||||
- z-index: 1;
|
|
||||||
+ z-index: 2;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -95,8 +114,7 @@
|
|
||||||
padding-top: 4px;
|
|
||||||
height:32px;
|
|
||||||
text-align: center;
|
|
||||||
- font-weight: bold;
|
|
||||||
- color: #fff;
|
|
||||||
+ color: #000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_settings_menu {
|
|
||||||
@@ -202,7 +220,6 @@
|
|
||||||
width:auto;
|
|
||||||
|
|
||||||
text-align:center;
|
|
||||||
- font-weight:bold;
|
|
||||||
word-wrap:break-word;
|
|
||||||
color:#fff;
|
|
||||||
background:rgba(0,0,0,0.65);
|
|
||||||
@@ -229,7 +246,7 @@
|
|
||||||
position:fixed;
|
|
||||||
}
|
|
||||||
#noVNC_clipboard.top:after {
|
|
||||||
- right:85px;
|
|
||||||
+ right:35px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#keyboardinput {
|
|
||||||
@@ -249,31 +266,13 @@
|
|
||||||
*/
|
|
||||||
|
|
||||||
.noVNC_status_normal {
|
|
||||||
- background: #b2bdcd; /* Old browsers */
|
|
||||||
- background: -moz-linear-gradient(top, #b2bdcd 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
|
|
||||||
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2bdcd), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
|
|
||||||
- background: -webkit-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
- background: -o-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
|
|
||||||
- background: -ms-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
|
|
||||||
- background: linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
|
|
||||||
+ background: #fff;
|
|
||||||
}
|
|
||||||
.noVNC_status_error {
|
|
||||||
- background: #f04040; /* Old browsers */
|
|
||||||
- background: -moz-linear-gradient(top, #f04040 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
|
|
||||||
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f04040), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
|
|
||||||
- background: -webkit-linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
- background: -o-linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
|
|
||||||
- background: -ms-linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
|
|
||||||
- background: linear-gradient(top, #f04040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
|
|
||||||
+ background: #ff6666;
|
|
||||||
}
|
|
||||||
.noVNC_status_warn {
|
|
||||||
- background: #f0f040; /* Old browsers */
|
|
||||||
- background: -moz-linear-gradient(top, #f0f040 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
|
|
||||||
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f0f040), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
|
|
||||||
- background: -webkit-linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
- background: -o-linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
|
|
||||||
- background: -ms-linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
|
|
||||||
- background: linear-gradient(top, #f0f040 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
|
|
||||||
+ background: #ffff80;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Control bar */
|
|
||||||
@@ -291,36 +290,25 @@
|
|
||||||
.noVNC_status_button {
|
|
||||||
padding: 4px 4px;
|
|
||||||
vertical-align: middle;
|
|
||||||
- border:1px solid #869dbc;
|
|
||||||
- -webkit-border-radius: 6px;
|
|
||||||
- -moz-border-radius: 6px;
|
|
||||||
- border-radius: 6px;
|
|
||||||
- background: #b2bdcd; /* Old browsers */
|
|
||||||
- background: -moz-linear-gradient(top, #b2bdcd 0%, #899cb3 49%, #7e93af 51%, #6e84a3 100%); /* FF3.6+ */
|
|
||||||
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b2bdcd), color-stop(49%,#899cb3), color-stop(51%,#7e93af), color-stop(100%,#6e84a3)); /* Chrome,Safari4+ */
|
|
||||||
- background: -webkit-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
- background: -o-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* Opera11.10+ */
|
|
||||||
- background: -ms-linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* IE10+ */
|
|
||||||
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b2bdcd', endColorstr='#6e84a3',GradientType=0 ); /* IE6-9 */
|
|
||||||
- background: linear-gradient(top, #b2bdcd 0%,#899cb3 49%,#7e93af 51%,#6e84a3 100%); /* W3C */
|
|
||||||
- /*box-shadow:inset 0.4px 0.4px 0.4px #000000;*/
|
|
||||||
+ height:20px;
|
|
||||||
+ margin: 3px 0;
|
|
||||||
+ border:1px solid #3892d4;
|
|
||||||
+ -webkit-border-radius: 3px;
|
|
||||||
+ -moz-border-radius: 3px;
|
|
||||||
+ border-radius: 3px;
|
|
||||||
+ background: #3892d4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC_status_button_selected {
|
|
||||||
padding: 4px 4px;
|
|
||||||
vertical-align: middle;
|
|
||||||
- border:1px solid #4366a9;
|
|
||||||
- -webkit-border-radius: 6px;
|
|
||||||
- -moz-border-radius: 6px;
|
|
||||||
- background: #779ced; /* Old browsers */
|
|
||||||
- background: -moz-linear-gradient(top, #779ced 0%, #3970e0 49%, #2160dd 51%, #2463df 100%); /* FF3.6+ */
|
|
||||||
- background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#779ced), color-stop(49%,#3970e0), color-stop(51%,#2160dd), color-stop(100%,#2463df)); /* Chrome,Safari4+ */
|
|
||||||
- background: -webkit-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* Chrome10+,Safari5.1+ */
|
|
||||||
- background: -o-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* Opera11.10+ */
|
|
||||||
- background: -ms-linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* IE10+ */
|
|
||||||
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#779ced', endColorstr='#2463df',GradientType=0 ); /* IE6-9 */
|
|
||||||
- background: linear-gradient(top, #779ced 0%,#3970e0 49%,#2160dd 51%,#2463df 100%); /* W3C */
|
|
||||||
- /*box-shadow:inset 0.4px 0.4px 0.4px #000000;*/
|
|
||||||
+ height:20px;
|
|
||||||
+ margin: 3px 0;
|
|
||||||
+ border:1px solid #3892d4;
|
|
||||||
+ -webkit-border-radius: 3px;
|
|
||||||
+ -moz-border-radius: 3px;
|
|
||||||
+ border-radius: 3px;
|
|
||||||
+ background: #3892d4;
|
|
||||||
}
|
|
||||||
|
|
||||||
.noVNC_status_button:disabled {
|
|
||||||
@@ -389,7 +377,7 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
#noVNC_logo {
|
|
||||||
- margin-top: 170px;
|
|
||||||
+ margin-top: 10px;
|
|
||||||
margin-left: 10px;
|
|
||||||
color:yellow;
|
|
||||||
text-align:left;
|
|
||||||
@@ -446,6 +434,7 @@
|
|
||||||
#toggleAltButton { display: inline; }
|
|
||||||
#sendTabButton { display: inline; }
|
|
||||||
#sendEscButton { display: inline; }
|
|
||||||
+#sendCtrlAltDelButton { display: inline; }
|
|
||||||
|
|
||||||
/* left-align the status text on lower resolutions */
|
|
||||||
@media screen and (max-width: 800px){
|
|
||||||
@@ -502,6 +491,14 @@
|
|
||||||
top: 135px;
|
|
||||||
left: 0px;
|
|
||||||
}
|
|
||||||
+ #sendCtrlAltDelButton {
|
|
||||||
+ display: none;
|
|
||||||
+ position: absolute;
|
|
||||||
+ top: 170px;
|
|
||||||
+ left: 0px;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (min-width: 321px) and (max-width: 480px) {
|
|
11
debian/patches/fix-ie11-resize.patch
vendored
11
debian/patches/fix-ie11-resize.patch
vendored
@ -1,11 +0,0 @@
|
|||||||
--- a/pveui.js
|
|
||||||
+++ b/pveui.js
|
|
||||||
@@ -115,7 +115,7 @@
|
|
||||||
setTimeout(function() { window.scrollTo(0, 1); }, 100);
|
|
||||||
UI.forceSetting('clip', true);
|
|
||||||
} else {
|
|
||||||
- UI.initSetting('clip', false);
|
|
||||||
+ UI.forceSetting('clip', false);
|
|
||||||
}
|
|
||||||
|
|
||||||
UI.setViewClip();
|
|
@ -1,13 +0,0 @@
|
|||||||
Index: new/include/websock.js
|
|
||||||
===================================================================
|
|
||||||
--- new.orig/include/websock.js 2014-06-13 07:20:22.000000000 +0200
|
|
||||||
+++ new/include/websock.js 2014-06-18 14:12:20.000000000 +0200
|
|
||||||
@@ -282,7 +282,7 @@
|
|
||||||
// TODO: this sucks, the property should exist on the prototype
|
|
||||||
// but it does not.
|
|
||||||
try {
|
|
||||||
- if (bt && ('binaryType' in (new WebSocket("ws://localhost:17523")))) {
|
|
||||||
+ if (bt && ('binaryType' in (new WebSocket("wss://localhost:17523")))) {
|
|
||||||
Util.Info("Detected binaryType support in WebSockets");
|
|
||||||
wsbt = true;
|
|
||||||
}
|
|
912
debian/patches/pveui.patch
vendored
912
debian/patches/pveui.patch
vendored
@ -1,912 +0,0 @@
|
|||||||
From 280c1f8b3c07fde35282cd46d965bc1bc8f5649d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alexandre Derumier <aderumier@odiso.com>
|
|
||||||
Date: Thu, 25 Jun 2015 02:50:03 +0200
|
|
||||||
Subject: [PATCH] pveui : add promox code
|
|
||||||
|
|
||||||
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
|
|
||||||
---
|
|
||||||
pveui.js | 724 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
|
|
||||||
1 file changed, 675 insertions(+), 49 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/pveui.js b/pveui.js
|
|
||||||
index cb5717c..ceaa4fc 100644
|
|
||||||
--- a/pveui.js
|
|
||||||
+++ b/pveui.js
|
|
||||||
@@ -39,10 +39,17 @@ var UI;
|
|
||||||
isTouchDevice: false,
|
|
||||||
rememberedClipSetting: null,
|
|
||||||
|
|
||||||
+ pveAllowMigratedVMTest: false, // set to true after a succesful conection
|
|
||||||
+ pveCommandsOpen: false,
|
|
||||||
+ consoletype: undefined,
|
|
||||||
+ vmid: undefined,
|
|
||||||
+ vmname: undefined,
|
|
||||||
+ nodename: undefined,
|
|
||||||
+ resize: undefined,
|
|
||||||
// Setup rfb object, load settings from browser storage, then call
|
|
||||||
// UI.init to setup the UI/menus
|
|
||||||
load: function (callback) {
|
|
||||||
- WebUtil.initSettings(UI.start, callback);
|
|
||||||
+ WebUtil.initSettings(UI.pve_start, callback);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Render default UI and initialize settings menu
|
|
||||||
@@ -54,13 +61,13 @@ var UI;
|
|
||||||
var sheets = WebUtil.getStylesheets();
|
|
||||||
var i;
|
|
||||||
for (i = 0; i < sheets.length; i += 1) {
|
|
||||||
- UI.addOption($D('noVNC_stylesheet'),sheets[i].title, sheets[i].title);
|
|
||||||
+ //UI.addOption($D('noVNC_stylesheet'),sheets[i].title, sheets[i].title);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Logging selection dropdown
|
|
||||||
var llevels = ['error', 'warn', 'info', 'debug'];
|
|
||||||
for (i = 0; i < llevels.length; i += 1) {
|
|
||||||
- UI.addOption($D('noVNC_logging'),llevels[i], llevels[i]);
|
|
||||||
+ //UI.addOption($D('noVNC_logging'),llevels[i], llevels[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Settings with immediate effects
|
|
||||||
@@ -84,20 +91,10 @@ var UI;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Populate the controls if defaults are provided in the URL */
|
|
||||||
- UI.initSetting('host', window.location.hostname);
|
|
||||||
- UI.initSetting('port', port);
|
|
||||||
- UI.initSetting('password', '');
|
|
||||||
- UI.initSetting('encrypt', (window.location.protocol === "https:"));
|
|
||||||
- UI.initSetting('true_color', true);
|
|
||||||
- UI.initSetting('cursor', !UI.isTouchDevice);
|
|
||||||
- UI.initSetting('resize', 'off');
|
|
||||||
- UI.initSetting('shared', true);
|
|
||||||
- UI.initSetting('view_only', false);
|
|
||||||
- UI.initSetting('path', 'websockify');
|
|
||||||
+
|
|
||||||
UI.initSetting('repeaterID', '');
|
|
||||||
|
|
||||||
- var autoconnect = WebUtil.getQueryVar('autoconnect', false);
|
|
||||||
+ var autoconnect = true;
|
|
||||||
if (autoconnect === 'true' || autoconnect == '1') {
|
|
||||||
autoconnect = true;
|
|
||||||
UI.connect();
|
|
||||||
@@ -140,7 +137,9 @@ var UI;
|
|
||||||
(document.documentElement.requestFullscreen ||
|
|
||||||
document.documentElement.mozRequestFullScreen ||
|
|
||||||
document.documentElement.webkitRequestFullscreen ||
|
|
||||||
- document.body.msRequestFullscreen)) {
|
|
||||||
+ document.body.msRequestFullscreen)
|
|
||||||
+ && UI.getSetting('resize') === 'scale'
|
|
||||||
+ ) {
|
|
||||||
$D('fullscreenButton').style.display = "inline";
|
|
||||||
Util.addEvent(window, 'fullscreenchange', UI.updateFullscreenButton);
|
|
||||||
Util.addEvent(window, 'mozfullscreenchange', UI.updateFullscreenButton);
|
|
||||||
@@ -177,13 +176,16 @@ var UI;
|
|
||||||
|
|
||||||
initRFB: function () {
|
|
||||||
try {
|
|
||||||
+ var scaleType = UI.getSetting('resize');
|
|
||||||
+
|
|
||||||
UI.rfb = new RFB({'target': $D('noVNC_canvas'),
|
|
||||||
'onUpdateState': UI.updateState,
|
|
||||||
'onXvpInit': UI.updateXvpVisualState,
|
|
||||||
'onClipboard': UI.clipReceive,
|
|
||||||
'onFBUComplete': UI.FBUComplete,
|
|
||||||
- 'onFBResize': UI.updateViewDrag,
|
|
||||||
- 'onDesktopName': UI.updateDocumentTitle});
|
|
||||||
+ 'onFBResize': (typeof scaleType !== 'undefined') ? UI.updateFBSize : UI.updateViewDrag
|
|
||||||
+ // 'onDesktopName': UI.updateDocumentTitle
|
|
||||||
+ });
|
|
||||||
return true;
|
|
||||||
} catch (exc) {
|
|
||||||
UI.updateState(null, 'fatal', null, 'Unable to create RFB client -- ' + exc);
|
|
||||||
@@ -211,31 +213,34 @@ var UI;
|
|
||||||
$D("sendEscButton").onclick = UI.sendEsc;
|
|
||||||
|
|
||||||
$D("sendCtrlAltDelButton").onclick = UI.sendCtrlAltDel;
|
|
||||||
- $D("xvpShutdownButton").onclick = UI.xvpShutdown;
|
|
||||||
- $D("xvpRebootButton").onclick = UI.xvpReboot;
|
|
||||||
- $D("xvpResetButton").onclick = UI.xvpReset;
|
|
||||||
- $D("noVNC_status").onclick = UI.togglePopupStatus;
|
|
||||||
+ //$D("xvpShutdownButton").onclick = UI.xvpShutdown;
|
|
||||||
+ //$D("xvpRebootButton").onclick = UI.xvpReboot;
|
|
||||||
+ //$D("xvpResetButton").onclick = UI.xvpReset;
|
|
||||||
+ //$D("noVNC_status").onclick = UI.togglePopupStatus;
|
|
||||||
$D("noVNC_popup_status").onclick = UI.togglePopupStatus;
|
|
||||||
- $D("xvpButton").onclick = UI.toggleXvpPanel;
|
|
||||||
+ //$D("xvpButton").onclick = UI.toggleXvpPanel;
|
|
||||||
$D("clipboardButton").onclick = UI.toggleClipboardPanel;
|
|
||||||
$D("fullscreenButton").onclick = UI.toggleFullscreen;
|
|
||||||
- $D("settingsButton").onclick = UI.toggleSettingsPanel;
|
|
||||||
- $D("connectButton").onclick = UI.toggleConnectPanel;
|
|
||||||
- $D("disconnectButton").onclick = UI.disconnect;
|
|
||||||
- $D("descriptionButton").onclick = UI.toggleConnectPanel;
|
|
||||||
+ //$D("settingsButton").onclick = UI.toggleSettingsPanel;
|
|
||||||
+ //$D("connectButton").onclick = UI.toggleConnectPanel;
|
|
||||||
+ //$D("disconnectButton").onclick = UI.disconnect;
|
|
||||||
+ //$D("descriptionButton").onclick = UI.toggleConnectPanel;
|
|
||||||
|
|
||||||
$D("noVNC_clipboard_text").onfocus = UI.displayBlur;
|
|
||||||
$D("noVNC_clipboard_text").onblur = UI.displayFocus;
|
|
||||||
$D("noVNC_clipboard_text").onchange = UI.clipSend;
|
|
||||||
$D("noVNC_clipboard_clear_button").onclick = UI.clipClear;
|
|
||||||
|
|
||||||
- $D("noVNC_settings_menu").onmouseover = UI.displayBlur;
|
|
||||||
- $D("noVNC_settings_menu").onmouseover = UI.displayFocus;
|
|
||||||
- $D("noVNC_apply").onclick = UI.settingsApply;
|
|
||||||
+ //$D("noVNC_settings_menu").onmouseover = UI.displayBlur;
|
|
||||||
+ //$D("noVNC_settings_menu").onmouseover = UI.displayFocus;
|
|
||||||
+ //$D("noVNC_apply").onclick = UI.settingsApply;
|
|
||||||
|
|
||||||
- $D("noVNC_connect_button").onclick = UI.connect;
|
|
||||||
+ //$D("noVNC_connect_button").onclick = UI.connect;
|
|
||||||
|
|
||||||
$D("noVNC_resize").onchange = UI.enableDisableViewClip;
|
|
||||||
+
|
|
||||||
+ $D("pveCommandsButton").onclick = UI.togglePVECommandPanel;
|
|
||||||
+ $D("showSendKeysButton").onclick = UI.togglePVESendKeysPanel;
|
|
||||||
},
|
|
||||||
|
|
||||||
onresize: function (callback) {
|
|
||||||
@@ -398,6 +403,9 @@ var UI;
|
|
||||||
toggleXvpPanel: function() {
|
|
||||||
// Close the description panel
|
|
||||||
$D('noVNC_description').style.display = "none";
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
// Close settings if open
|
|
||||||
if (UI.settingsOpen === true) {
|
|
||||||
UI.settingsApply();
|
|
||||||
@@ -413,12 +421,12 @@ var UI;
|
|
||||||
}
|
|
||||||
// Toggle XVP panel
|
|
||||||
if (UI.xvpOpen === true) {
|
|
||||||
- $D('noVNC_xvp').style.display = "none";
|
|
||||||
- $D('xvpButton').className = "noVNC_status_button";
|
|
||||||
+ //$D('noVNC_xvp').style.display = "none";
|
|
||||||
+ //$D('xvpButton').className = "noVNC_status_button";
|
|
||||||
UI.xvpOpen = false;
|
|
||||||
} else {
|
|
||||||
- $D('noVNC_xvp').style.display = "block";
|
|
||||||
- $D('xvpButton').className = "noVNC_status_button_selected";
|
|
||||||
+ //$D('noVNC_xvp').style.display = "block";
|
|
||||||
+ //$D('xvpButton').className = "noVNC_status_button_selected";
|
|
||||||
UI.xvpOpen = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
@@ -427,6 +435,12 @@ var UI;
|
|
||||||
toggleClipboardPanel: function() {
|
|
||||||
// Close the description panel
|
|
||||||
$D('noVNC_description').style.display = "none";
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ if (UI.sendKeysVisible === true) {
|
|
||||||
+ UI.togglePVESendKeysPanel();
|
|
||||||
+ }
|
|
||||||
// Close settings if open
|
|
||||||
if (UI.settingsOpen === true) {
|
|
||||||
UI.settingsApply();
|
|
||||||
@@ -497,6 +511,9 @@ var UI;
|
|
||||||
toggleConnectPanel: function() {
|
|
||||||
// Close the description panel
|
|
||||||
$D('noVNC_description').style.display = "none";
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
// Close connection settings if open
|
|
||||||
if (UI.settingsOpen === true) {
|
|
||||||
UI.settingsApply();
|
|
||||||
@@ -515,14 +532,14 @@ var UI;
|
|
||||||
// Toggle Connection Panel
|
|
||||||
if (UI.connSettingsOpen === true) {
|
|
||||||
$D('noVNC_controls').style.display = "none";
|
|
||||||
- $D('connectButton').className = "noVNC_status_button";
|
|
||||||
+ //$D('connectButton').className = "noVNC_status_button";
|
|
||||||
UI.connSettingsOpen = false;
|
|
||||||
UI.saveSetting('host');
|
|
||||||
UI.saveSetting('port');
|
|
||||||
//UI.saveSetting('password');
|
|
||||||
} else {
|
|
||||||
$D('noVNC_controls').style.display = "block";
|
|
||||||
- $D('connectButton').className = "noVNC_status_button_selected";
|
|
||||||
+ //$D('connectButton').className = "noVNC_status_button_selected";
|
|
||||||
UI.connSettingsOpen = true;
|
|
||||||
$D('noVNC_host').focus();
|
|
||||||
}
|
|
||||||
@@ -576,14 +593,14 @@ var UI;
|
|
||||||
UI.toggleXvpPanel();
|
|
||||||
}
|
|
||||||
$D('noVNC_settings').style.display = "block";
|
|
||||||
- $D('settingsButton').className = "noVNC_status_button_selected";
|
|
||||||
+ //$D('settingsButton').className = "noVNC_status_button_selected";
|
|
||||||
UI.settingsOpen = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
// Close menu (without applying settings)
|
|
||||||
closeSettingsMenu: function() {
|
|
||||||
$D('noVNC_settings').style.display = "none";
|
|
||||||
- $D('settingsButton').className = "noVNC_status_button";
|
|
||||||
+ //$D('settingsButton').className = "noVNC_status_button";
|
|
||||||
UI.settingsOpen = false;
|
|
||||||
},
|
|
||||||
|
|
||||||
@@ -676,10 +693,15 @@ var UI;
|
|
||||||
break;
|
|
||||||
case 'normal':
|
|
||||||
klass = "noVNC_status_normal";
|
|
||||||
+ UI.pveAllowMigratedVMTest = true;
|
|
||||||
break;
|
|
||||||
case 'disconnected':
|
|
||||||
$D('noVNC_logo').style.display = "block";
|
|
||||||
$D('noVNC_container').style.display = "none";
|
|
||||||
+ if (UI.pveAllowMigratedVMTest) {
|
|
||||||
+ UI.pveAllowMigratedVMTest = false;
|
|
||||||
+ UI.pve_detect_migrated_vm();
|
|
||||||
+ }
|
|
||||||
/* falls through */
|
|
||||||
case 'loaded':
|
|
||||||
klass = "noVNC_status_normal";
|
|
||||||
@@ -730,7 +752,7 @@ var UI;
|
|
||||||
if (connected) {
|
|
||||||
UI.setViewClip();
|
|
||||||
UI.setMouseButton(1);
|
|
||||||
- $D('clipboardButton').style.display = "inline";
|
|
||||||
+ $D('clipboardButton').style.display = (UI.consoletype !== 'kvm') ? "inline" : "none";
|
|
||||||
$D('showKeyboard').style.display = "inline";
|
|
||||||
$D('noVNC_extra_keys').style.display = "";
|
|
||||||
$D('sendCtrlAltDelButton').style.display = "inline";
|
|
||||||
@@ -751,18 +773,18 @@ var UI;
|
|
||||||
case 'fatal':
|
|
||||||
case 'failed':
|
|
||||||
case 'disconnected':
|
|
||||||
- $D('connectButton').style.display = "";
|
|
||||||
- $D('disconnectButton').style.display = "none";
|
|
||||||
+ //$D('connectButton').style.display = "";
|
|
||||||
+ //$D('disconnectButton').style.display = "none";
|
|
||||||
UI.connSettingsOpen = false;
|
|
||||||
UI.toggleConnectPanel();
|
|
||||||
break;
|
|
||||||
case 'loaded':
|
|
||||||
- $D('connectButton').style.display = "";
|
|
||||||
- $D('disconnectButton').style.display = "none";
|
|
||||||
+ //$D('connectButton').style.display = "";
|
|
||||||
+ //$D('disconnectButton').style.display = "none";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
- $D('connectButton').style.display = "none";
|
|
||||||
- $D('disconnectButton').style.display = "";
|
|
||||||
+ //$D('connectButton').style.display = "none";
|
|
||||||
+ //$D('disconnectButton').style.display = "";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -772,9 +794,9 @@ var UI;
|
|
||||||
// Disable/enable XVP button
|
|
||||||
updateXvpVisualState: function(ver) {
|
|
||||||
if (ver >= 1) {
|
|
||||||
- $D('xvpButton').style.display = 'inline';
|
|
||||||
+ //$D('xvpButton').style.display = 'inline';
|
|
||||||
} else {
|
|
||||||
- $D('xvpButton').style.display = 'none';
|
|
||||||
+ //$D('xvpButton').style.display = 'none';
|
|
||||||
// Close XVP panel if open
|
|
||||||
if (UI.xvpOpen === true) {
|
|
||||||
UI.toggleXvpPanel();
|
|
||||||
@@ -1200,7 +1222,611 @@ var UI;
|
|
||||||
|
|
||||||
var vncwidth = $D('noVNC_screen').style.offsetWidth;
|
|
||||||
$D('noVNC-control-bar').style.width = vncwidth + 'px';
|
|
||||||
- }
|
|
||||||
+ },
|
|
||||||
+ // Proxmox VE related code
|
|
||||||
+
|
|
||||||
+ urlEncode: function(object) {
|
|
||||||
+ var i,value, params = [];
|
|
||||||
+
|
|
||||||
+ for (i in object) {
|
|
||||||
+ if (object.hasOwnProperty(i)) {
|
|
||||||
+ value = object[i];
|
|
||||||
+ if (value === undefined) value = '';
|
|
||||||
+ params.push(encodeURIComponent(i) + '=' + encodeURIComponent(String(value)));
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return params.join('&');
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ API2Request: function(reqOpts) {
|
|
||||||
+
|
|
||||||
+ reqOpts.method = reqOpts.method || 'GET';
|
|
||||||
+
|
|
||||||
+ var xhr = new XMLHttpRequest();
|
|
||||||
+
|
|
||||||
+ xhr.onload = function() {
|
|
||||||
+ var scope = reqOpts.scope || this;
|
|
||||||
+ var result;
|
|
||||||
+ var errmsg;
|
|
||||||
+
|
|
||||||
+ if (xhr.readyState === 4) {
|
|
||||||
+ var ctype = xhr.getResponseHeader('Content-Type');
|
|
||||||
+ if (xhr.status === 200) {
|
|
||||||
+ if (ctype.match(/application\/json;/)) {
|
|
||||||
+ result = JSON.parse(xhr.responseText);
|
|
||||||
+ } else {
|
|
||||||
+ errmsg = 'got unexpected content type ' + ctype;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ errmsg = 'Error ' + xhr.status + ': ' + xhr.statusText;
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ errmsg = 'Connection error - server offline?';
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (errmsg !== undefined) {
|
|
||||||
+ if (reqOpts.failure) {
|
|
||||||
+ reqOpts.failure.call(scope, errmsg);
|
|
||||||
+ }
|
|
||||||
+ } else {
|
|
||||||
+ if (reqOpts.success) {
|
|
||||||
+ reqOpts.success.call(scope, result);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ if (reqOpts.callback) {
|
|
||||||
+ reqOpts.callback.call(scope, errmsg === undefined);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ var data = UI.urlEncode(reqOpts.params || {});
|
|
||||||
+
|
|
||||||
+ if (reqOpts.method === 'GET') {
|
|
||||||
+ xhr.open(reqOpts.method, "/api2/json" + reqOpts.url + '?' + data);
|
|
||||||
+ } else {
|
|
||||||
+ xhr.open(reqOpts.method, "/api2/json" + reqOpts.url);
|
|
||||||
+ }
|
|
||||||
+ xhr.setRequestHeader('Cache-Control', 'no-cache');
|
|
||||||
+ if (reqOpts.method === 'POST' || reqOpts.method === 'PUT') {
|
|
||||||
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
||||||
+ xhr.setRequestHeader('CSRFPreventionToken', PVE.CSRFPreventionToken);
|
|
||||||
+ xhr.send(data);
|
|
||||||
+ } else if (reqOpts.method === 'GET') {
|
|
||||||
+ xhr.send();
|
|
||||||
+ } else {
|
|
||||||
+ throw "unknown method";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ // show msg for 5 seconds
|
|
||||||
+ pve_show_msg: function(klass, msg, permanant) {
|
|
||||||
+ var oldklass = $D('noVNC-control-bar').getAttribute("class");
|
|
||||||
+ $D('noVNC-control-bar').setAttribute("class", klass);
|
|
||||||
+ var oldmsg = $D('noVNC_status').innerHTML;
|
|
||||||
+ $D('noVNC_status').innerHTML = msg;
|
|
||||||
+ if (typeof permanent !== 'undefined' && permanent) return;
|
|
||||||
+
|
|
||||||
+ setTimeout(function() {
|
|
||||||
+ var curmsg = $D('noVNC_status').innerHTML;
|
|
||||||
+ if (curmsg === msg) {
|
|
||||||
+ $D('noVNC_status').innerHTML = oldmsg;
|
|
||||||
+ }
|
|
||||||
+ var curklass = $D('noVNC-control-bar').getAttribute("class");
|
|
||||||
+ if (curklass === klass) {
|
|
||||||
+ $D('noVNC-control-bar').setAttribute("class", oldklass);
|
|
||||||
+ }
|
|
||||||
+ }, 5000);
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pve_detect_migrated_vm: function() {
|
|
||||||
+ if (!(UI.consoletype === 'kvm' || UI.consoletype === 'lxc')) {
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // try to detect migrated VM
|
|
||||||
+ UI.API2Request({
|
|
||||||
+ url: '/cluster/resources',
|
|
||||||
+ method: 'GET',
|
|
||||||
+ success: function(result) {
|
|
||||||
+ var list = result.data;
|
|
||||||
+ list.every(function(item) {
|
|
||||||
+ if ((item.type === 'qemu' || item.type === 'lxc') &&
|
|
||||||
+ (item.vmid == UI.vmid)) {
|
|
||||||
+ var url = "?" + UI.urlEncode({
|
|
||||||
+ console: UI.consoletype,
|
|
||||||
+ novnc: 1,
|
|
||||||
+ vmid: UI.vmid,
|
|
||||||
+ vmname: UI.vmname,
|
|
||||||
+ node: item.node,
|
|
||||||
+ resize: UI.resize
|
|
||||||
+ });
|
|
||||||
+ location.href = url;
|
|
||||||
+ return false; // break
|
|
||||||
+ }
|
|
||||||
+ return true;
|
|
||||||
+ });
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pve_vm_command: function(cmd, params, reload) {
|
|
||||||
+ var baseUrl;
|
|
||||||
+
|
|
||||||
+ if (UI.consoletype === 'kvm') {
|
|
||||||
+ baseUrl = '/nodes/' + UI.nodename + '/qemu/' + UI.vmid;
|
|
||||||
+ } else if (UI.consoletype === 'lxc') {
|
|
||||||
+ baseUrl = '/nodes/' + UI.nodename + '/lxc/' + UI.vmid;
|
|
||||||
+ } else {
|
|
||||||
+ throw "unknown VM type";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ UI.API2Request({
|
|
||||||
+ params: params,
|
|
||||||
+ url: baseUrl + "/status/" + cmd,
|
|
||||||
+ method: 'POST',
|
|
||||||
+ failure: function(msg) {
|
|
||||||
+ UI.pve_show_msg('noVNC_status_warn', msg);
|
|
||||||
+ },
|
|
||||||
+ success: function() {
|
|
||||||
+ UI.pve_show_msg('noVNC_status_normall', "VM command '" + cmd +"' successful");
|
|
||||||
+ if (reload) {
|
|
||||||
+ setTimeout(function() {
|
|
||||||
+ UI.pveReload();
|
|
||||||
+ }, 1000);
|
|
||||||
+ };
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdStart: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ UI.pve_vm_command('start', {}, true);
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdShutdown: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ var msg = gettext("Do you really want to shutdown VM {0}?");
|
|
||||||
+ msg = msg.replace(/\{0\}/, UI.vmid);
|
|
||||||
+
|
|
||||||
+ if (confirm(msg) === true) {
|
|
||||||
+ UI.pve_vm_command('shutdown');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdStop: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ var msg = gettext("Do you really want to stop VM {0}?");
|
|
||||||
+ msg = msg.replace(/\{0\}/, UI.vmid);
|
|
||||||
+
|
|
||||||
+ if (confirm(msg) === true) {
|
|
||||||
+ UI.pve_vm_command('stop');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdReset: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ var msg = gettext("Do you really want to reset VM {0}?");
|
|
||||||
+ msg = msg.replace(/\{0\}/, UI.vmid);
|
|
||||||
+
|
|
||||||
+ if (confirm(msg) === true) {
|
|
||||||
+ UI.pve_vm_command('reset');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdSuspend: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ var msg = gettext("Do you really want to suspend VM {0}?");
|
|
||||||
+ msg = msg.replace(/\{0\}/, UI.vmid);
|
|
||||||
+
|
|
||||||
+ if (confirm(msg) === true) {
|
|
||||||
+ UI.pve_vm_command('suspend');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdResume: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ UI.pve_vm_command('resume');
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveCmdReload: function() {
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ UI.pveReload();
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pveReload: function() {
|
|
||||||
+ location.reload();
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pve_send_key: function(keyname) {
|
|
||||||
+ var baseUrl;
|
|
||||||
+
|
|
||||||
+ if (UI.consoletype === 'kvm') {
|
|
||||||
+ baseUrl = '/nodes/' + UI.nodename + '/qemu/' + UI.vmid;
|
|
||||||
+ } else {
|
|
||||||
+ throw "send key not implemented";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ UI.API2Request({
|
|
||||||
+ params: { key: keyname },
|
|
||||||
+ url: baseUrl + '/sendkey',
|
|
||||||
+ method: 'PUT',
|
|
||||||
+ failure: function(msg) {
|
|
||||||
+ UI.pve_show_msg('noVNC_status_warn', msg);
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ pve_start: function(callback) {
|
|
||||||
+ UI.consoletype = WebUtil.getQueryVar('console');
|
|
||||||
+ UI.vmid = WebUtil.getQueryVar('vmid');
|
|
||||||
+ UI.vmname = WebUtil.getQueryVar('vmname');
|
|
||||||
+ UI.nodename = WebUtil.getQueryVar('node');
|
|
||||||
+ UI.resize = WebUtil.getQueryVar('resize');
|
|
||||||
+
|
|
||||||
+ var url;
|
|
||||||
+ var wsurl;
|
|
||||||
+ var params = { websocket: 1 };
|
|
||||||
+ var btn;
|
|
||||||
+
|
|
||||||
+ // add pve command buttons
|
|
||||||
+ var cmdpanel = $D('noVNC_pve_command_menu');
|
|
||||||
+ var buttonlist = [
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Start'),
|
|
||||||
+ handler: UI.pveCmdStart,
|
|
||||||
+ enable: { kvm: 1, lxc: 1 }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Shutdown'),
|
|
||||||
+ handler: UI.pveCmdShutdown,
|
|
||||||
+ enable: { kvm: 1, lxc: 1 }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Stop'),
|
|
||||||
+ handler: UI.pveCmdStop,
|
|
||||||
+ enable: { kvm: 1, lxc: 1 }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Reset'),
|
|
||||||
+ handler: UI.pveCmdReset,
|
|
||||||
+ enable: { kvm: 1 }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Suspend'),
|
|
||||||
+ handler: UI.pveCmdSuspend,
|
|
||||||
+ enable: { kvm: 1 }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Resume'),
|
|
||||||
+ handler: UI.pveCmdResume,
|
|
||||||
+ enable: { kvm: 1 }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: gettext('Reload'),
|
|
||||||
+ handler: UI.pveCmdReload,
|
|
||||||
+ enable: { any: 1 }
|
|
||||||
+ }
|
|
||||||
+ ];
|
|
||||||
+ buttonlist.forEach(function(btn) {
|
|
||||||
+ if (btn.enable.any || btn.enable[UI.consoletype]) {
|
|
||||||
+ var el = document.createElement('input');
|
|
||||||
+ el.setAttribute('type', 'button');
|
|
||||||
+ el.setAttribute('value', btn.text);
|
|
||||||
+ el.onclick = btn.handler;
|
|
||||||
+ el.style.display = "block";
|
|
||||||
+ el.style.width = "100%";
|
|
||||||
+ el.style.minWidth = "150px";
|
|
||||||
+ cmdpanel.appendChild(el);
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+
|
|
||||||
+ // add sendKeys buttons
|
|
||||||
+ var skpanel = $D('noVNC_send_keys_panel');
|
|
||||||
+
|
|
||||||
+ buttonlist = [
|
|
||||||
+ {
|
|
||||||
+ text: 'Tab', handler: function() {
|
|
||||||
+ UI.pve_send_key('tab');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-Delete', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-delete');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-Backspace', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-backspace');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F1', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f1');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F2', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f2');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F3', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f3');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F4', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f4');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F5', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f5');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F6', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f6');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F7', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f7');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F8', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f8');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F9', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f9');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F10', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f10');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F11', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f11');
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ {
|
|
||||||
+ text: 'Ctrl-Alt-F12', handler: function() {
|
|
||||||
+ UI.pve_send_key('ctrl-alt-f12');
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ ];
|
|
||||||
+
|
|
||||||
+ buttonlist.forEach(function(btn) {
|
|
||||||
+ var el = document.createElement('input');
|
|
||||||
+ el.setAttribute('type', 'button');
|
|
||||||
+ el.setAttribute('value', btn.text);
|
|
||||||
+ el.onclick = function(handler) {
|
|
||||||
+ return function() {
|
|
||||||
+ if (UI.sendKeysVisible === true) {
|
|
||||||
+ UI.togglePVESendKeysPanel();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ handler.call(this);
|
|
||||||
+ };
|
|
||||||
+ }(btn.handler);
|
|
||||||
+ el.style.display = "block";
|
|
||||||
+ el.style.width = "100%";
|
|
||||||
+ el.style.minWidth = "150px";
|
|
||||||
+ skpanel.appendChild(el);
|
|
||||||
+ });
|
|
||||||
+
|
|
||||||
+ var title;
|
|
||||||
+
|
|
||||||
+ if (UI.consoletype === 'kvm') {
|
|
||||||
+ var baseUrl = '/nodes/' + UI.nodename + '/qemu/' + UI.vmid;
|
|
||||||
+ url = baseUrl + '/vncproxy';
|
|
||||||
+ wsurl = baseUrl + '/vncwebsocket';
|
|
||||||
+ title = "VM " + UI.vmid;
|
|
||||||
+ if (UI.vmname) {
|
|
||||||
+ title += " ('" + UI.vmname + "')";
|
|
||||||
+ }
|
|
||||||
+ } else if (UI.consoletype === 'lxc') {
|
|
||||||
+ var baseUrl = '/nodes/' + UI.nodename + '/lxc/' + UI.vmid;
|
|
||||||
+ url = baseUrl + '/vncproxy';
|
|
||||||
+ wsurl = baseUrl + '/vncwebsocket';
|
|
||||||
+ title = "CT " + UI.vmid;
|
|
||||||
+ if (UI.vmname) {
|
|
||||||
+ title += " ('" + UI.vmname + "')";
|
|
||||||
+ }
|
|
||||||
+ } else if (UI.consoletype === 'shell') {
|
|
||||||
+ var baseUrl = '/nodes/' + UI.nodename;
|
|
||||||
+ url = baseUrl + '/vncshell';
|
|
||||||
+ wsurl = baseUrl + '/vncwebsocket';
|
|
||||||
+ title = "node '" + UI.nodename + "'";
|
|
||||||
+ } else if (UI.consoletype === 'upgrade') {
|
|
||||||
+ var baseUrl = '/nodes/' + UI.nodename;
|
|
||||||
+ url = baseUrl + '/vncshell';
|
|
||||||
+ wsurl = baseUrl + '/vncwebsocket';
|
|
||||||
+ params.upgrade = 1;
|
|
||||||
+ title = gettext('System upgrade on node {0}');
|
|
||||||
+ title = title.replace(/\{0\}/, UI.nodename);
|
|
||||||
+ } else {
|
|
||||||
+ throw "implement me";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ document.title = title;
|
|
||||||
+
|
|
||||||
+ var start_vnc_viewer = function(param) {
|
|
||||||
+ var wsparams = UI.urlEncode({
|
|
||||||
+ port: param.port,
|
|
||||||
+ vncticket: param.ticket
|
|
||||||
+ });
|
|
||||||
+
|
|
||||||
+ UI.updateSetting('host', window.location.hostname);
|
|
||||||
+ UI.updateSetting('port', window.location.port || 443);
|
|
||||||
+ UI.updateSetting('password', param.ticket);
|
|
||||||
+ UI.updateSetting('encrypt', true);
|
|
||||||
+ UI.updateSetting('true_color', true);
|
|
||||||
+ UI.updateSetting('cursor', !UI.isTouchDevice);
|
|
||||||
+ UI.updateSetting('shared', true);
|
|
||||||
+ UI.updateSetting('view_only', false);
|
|
||||||
+ UI.updateSetting('resize', UI.resize);
|
|
||||||
+
|
|
||||||
+ UI.updateSetting('path', 'api2/json' + wsurl + "?" + wsparams);
|
|
||||||
+
|
|
||||||
+ UI.start(callback);
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ UI.API2Request({
|
|
||||||
+ url: url,
|
|
||||||
+ method: 'POST',
|
|
||||||
+ params: params,
|
|
||||||
+ success: function(result) {
|
|
||||||
+ start_vnc_viewer(result.data);
|
|
||||||
+ },
|
|
||||||
+ failure: function(msg) {
|
|
||||||
+ UI.pve_show_msg('noVNC_status_error', msg, 1);
|
|
||||||
+ }
|
|
||||||
+ });
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ lastFBWidth: undefined,
|
|
||||||
+ lastFBHeight: undefined,
|
|
||||||
+ sizeUpdateTimer: undefined,
|
|
||||||
+
|
|
||||||
+ updateFBSize: function(rfb, width, height) {
|
|
||||||
+ try {
|
|
||||||
+ // Note1: CSS Canvas size is wrong by a few pixels in Chrome
|
|
||||||
+ // Note2: window size must be even number for firefox
|
|
||||||
+ UI.lastFBWidth = Math.floor((width + 1)/2)*2;;
|
|
||||||
+ UI.lastFBHeight = Math.floor((height + 1)/2)*2;
|
|
||||||
+
|
|
||||||
+ if (UI.sizeUpdateTimer !== undefined) {
|
|
||||||
+ clearInterval(UI.sizeUpdateTimer);
|
|
||||||
+ }
|
|
||||||
+ if (UI.getSetting('clip')) return;
|
|
||||||
+
|
|
||||||
+ var update_size = function() {
|
|
||||||
+ var oh;
|
|
||||||
+ var ow;
|
|
||||||
+
|
|
||||||
+ if (window.innerHeight) {
|
|
||||||
+ oh = window.innerHeight;
|
|
||||||
+ ow = window.innerWidth;
|
|
||||||
+ } else if (document.documentElement &&
|
|
||||||
+ document.documentElement.clientHeight) {
|
|
||||||
+ oh = document.documentElement.clientHeight;
|
|
||||||
+ ow = document.documentElement.clientWidth;
|
|
||||||
+ } else if (document.body) {
|
|
||||||
+ oh = document.body.clientHeight;
|
|
||||||
+ ow = document.body.clientWidth;
|
|
||||||
+ } else {
|
|
||||||
+ throw "can't get window size";
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ // see base.css/noVNC_screen_pad
|
|
||||||
+ var toolbar_height = 36;
|
|
||||||
+
|
|
||||||
+ var offsetw = UI.lastFBWidth - ow;
|
|
||||||
+ var offseth = UI.lastFBHeight + toolbar_height - oh;
|
|
||||||
+ if (offsetw !== 0 || offseth !== 0) {
|
|
||||||
+ //console.log("try resize by " + offsetw + " " + offseth);
|
|
||||||
+ window.resizeBy(offsetw, offseth);
|
|
||||||
+ }
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+ update_size();
|
|
||||||
+ UI.sizeUpdateTimer = setInterval(update_size, 1000);
|
|
||||||
+
|
|
||||||
+ } catch(e) {
|
|
||||||
+ console.log(e);
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+ // Open/close PVE commandand menu
|
|
||||||
+ togglePVECommandPanel: function() {
|
|
||||||
+ // Close the description panel
|
|
||||||
+ $D('noVNC_description').style.display = "none";
|
|
||||||
+ if (UI.sendKeysVisible === true) {
|
|
||||||
+ UI.togglePVESendKeysPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close clipboard panel if open
|
|
||||||
+ if (UI.clipboardOpen === true) {
|
|
||||||
+ UI.toggleClipboardPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close connection settings if open
|
|
||||||
+ if (UI.connSettingsOpen === true) {
|
|
||||||
+ UI.toggleConnectPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close popup status panel if open
|
|
||||||
+ if (UI.popupStatusOpen === true) {
|
|
||||||
+ UI.togglePopupStatusPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close XVP panel if open
|
|
||||||
+ if (UI.xvpOpen === true) {
|
|
||||||
+ UI.toggleXvpPanel();
|
|
||||||
+ }
|
|
||||||
+ if (UI.pveCommandsOpen) {
|
|
||||||
+ $D('noVNC_pve_commands').style.display = "none";
|
|
||||||
+ $D('pveCommandsButton').className = "noVNC_status_button";
|
|
||||||
+ UI.pveCommandsOpen = false;
|
|
||||||
+ } else {
|
|
||||||
+ $D('noVNC_pve_commands').style.display = "block";
|
|
||||||
+ $D('pveCommandsButton').className = "noVNC_status_button_selected";
|
|
||||||
+ UI.pveCommandsOpen = true;
|
|
||||||
+ }
|
|
||||||
+ },
|
|
||||||
+
|
|
||||||
+ // Open/close PVE SendKeys menu
|
|
||||||
+ togglePVESendKeysPanel: function() {
|
|
||||||
+ // Close the description panel
|
|
||||||
+ $D('noVNC_description').style.display = "none";
|
|
||||||
+ if (UI.pveCommandsOpen === true) {
|
|
||||||
+ UI.togglePVECommandPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close clipboard panel if open
|
|
||||||
+ if (UI.clipboardOpen === true) {
|
|
||||||
+ UI.toggleClipboardPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close connection settings if open
|
|
||||||
+ if (UI.connSettingsOpen === true) {
|
|
||||||
+ UI.toggleConnectPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close popup status panel if open
|
|
||||||
+ if (UI.popupStatusOpen === true) {
|
|
||||||
+ UI.togglePopupStatusPanel();
|
|
||||||
+ }
|
|
||||||
+ // Close XVP panel if open
|
|
||||||
+ if (UI.xvpOpen === true) {
|
|
||||||
+ UI.toggleXvpPanel();
|
|
||||||
+ }
|
|
||||||
+ if (UI.sendKeysVisible) {
|
|
||||||
+ $D('noVNC_send_keys').style.display = "none";
|
|
||||||
+ $D('showSendKeysButton').className = "noVNC_status_button";
|
|
||||||
+ UI.sendKeysVisible = false;
|
|
||||||
+ } else {
|
|
||||||
+ $D('noVNC_send_keys').style.display = "block";
|
|
||||||
+ $D('showSendKeysButton').className = "noVNC_status_button_selected";
|
|
||||||
+ UI.sendKeysVisible = true;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
|
|
||||||
};
|
|
||||||
})();
|
|
||||||
--
|
|
||||||
2.1.4
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user