+novnc (0.2) maverick; urgency=low
+
+ * Mobile device support with viewport clipping
+ * Much better styling that also works on mobile devices well
+ * Update websockify to support latest WebSocket protocol HyBi 13
+ (i.e. support IETF 6455)
+ * Better support in websockify for python 2.4 through 3.2
+ * Support VMWare ESX and Intel AMT KVM
+ * View only mode
+
+ -- Joel Martin <github@martintribe.org> Tue, 05 Jul 2011 01:00:00 -0600
+
novnc (0.1) maverick; urgency=low
* First upstream release
utils/wsproxy.py /usr/share/novnc/utils
utils/rebind.c /usr/share/novnc/utils
utils/rebind.so /usr/share/novnc/utils
+images /usr/share/novnc
images/favicon.ico /usr/share/novnc
include/base64.js /usr/share/novnc/include
include/des.js /usr/share/novnc/include
}
#noVNC_controls {
+ display:none;
margin-top:77px;
right:12px;
position:fixed;
right:15px;
}
+#noVNC_description {
+ display:none;
+ position:fixed;
+
+ margin-top:77px;
+ right:20px;
+ left:20px;
+ padding:15px;
+ color:#000;
+ background:#eee; /* default background for browsers without gradient support */
+
+ border:2px solid #E0E0E0;
+ -webkit-border-radius:10px;
+ -moz-border-radius:10px;
+ border-radius:10px;
+}
+
#noVNC_clipboard {
display:none;
margin-top:77px;
padding = (data.charAt(i) === pad);
// Skip illegal characters and whitespace
if (c === -1) {
- console.error("Illegal character '" + data.charCodeAt(i) + "'");
+ console.error("Illegal character code " + data.charCodeAt(i) + " at position " + i);
continue;
}
rfb_state : 'loaded',
settingsOpen : false,
-connSettingsOpen : true,
+connSettingsOpen : false,
clipboardOpen: false,
keyboardVisible: false,
UI.initSetting('host', '');
UI.initSetting('port', '');
UI.initSetting('password', '');
- UI.initSetting('encrypt', false);
+ UI.initSetting('encrypt', (window.location.protocol === "https:"));
UI.initSetting('true_color', true);
UI.initSetting('cursor', false);
UI.initSetting('shared', true);
UI.initSetting('view_only', false);
UI.initSetting('connectTimeout', 2);
- UI.initSetting('path', '');
+ UI.initSetting('path', 'websockify');
UI.rfb = RFB({'target': $D('noVNC_canvas'),
'onUpdateState': UI.updateState,
}
} );
+ // Show description by default when hosted at for kanaka.github.com
+ if (location.host === "kanaka.github.com") {
+ // Open the description dialog
+ $D('noVNC_description').style.display = "block";
+ } else {
+ // Open the connect panel on first load
+ UI.toggleConnectPanel();
+ }
},
// Read form control compatible setting from cookie
// Show the clipboard panel
toggleClipboardPanel: function() {
+ // Close the description panel
+ $D('noVNC_description').style.display = "none";
//Close settings if open
if (UI.settingsOpen === true) {
UI.settingsApply();
// Show the connection settings panel/menu
toggleConnectPanel: function() {
+ // Close the description panel
+ $D('noVNC_description').style.display = "none";
//Close connection settings if open
if (UI.settingsOpen === true) {
UI.settingsApply();
// On open, settings are refreshed from saved cookies.
// On close, settings are applied
toggleSettingsPanel: function() {
+ // Close the description panel
+ $D('noVNC_description').style.display = "none";
if (UI.settingsOpen) {
UI.settingsApply();
UI.closeSettingsMenu();
// Open menu
openSettingsMenu: function() {
+ // Close the description panel
+ $D('noVNC_description').style.display = "none";
if (UI.clipboardOpen === true) {
UI.toggleClipboardPanel();
}
if (connected) {
UI.setViewClip();
UI.setMouseButton(1);
+ $D('clipboardButton').style.display = "inline";
$D('showKeyboard').style.display = "inline";
$D('sendCtrlAltDelButton').style.display = "inline";
} else {
UI.setMouseButton();
+ $D('clipboardButton').style.display = "none";
$D('showKeyboard').style.display = "none";
$D('sendCtrlAltDelButton').style.display = "none";
}
(num ) & 0xFF );
};
+// IE does not support map (even in IE9)
+//This prototype is provided by the Mozilla foundation and
+//is distributed under the MIT license.
+//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license
+if (!Array.prototype.map)
+{
+ Array.prototype.map = function(fun /*, thisp*/)
+ {
+ var len = this.length;
+ if (typeof fun != "function")
+ throw new TypeError();
+
+ var res = new Array(len);
+ var thisp = arguments[1];
+ for (var i = 0; i < len; i++)
+ {
+ if (i in this)
+ res[i] = fun.call(thisp, this[i], i, this);
+ }
+
+ return res;
+ };
+}
+
/*
* ------------------------------------------------------
* Namespaced in Util
* Simple DOM selector by ID
*/
if (!window.$D) {
- $D = function (id) {
+ window.$D = function (id) {
if (document.getElementById) {
return document.getElementById(id);
} else if (document.all) {
except ssl.SSLError:
_, x, _ = sys.exc_info()
if x.args[0] == ssl.SSL_ERROR_EOF:
- raise self.EClose("")
+ if len(x.args) > 1:
+ raise self.EClose(x.args[1])
+ else:
+ raise self.EClose("Got SSL_ERROR_EOF")
else:
raise
title="Settings"
onclick="UI.toggleSettingsPanel();" />
<input type="image" src="images/connect.png"
- id="connectButton" class="noVNC_status_button_selected"
+ id="connectButton" class="noVNC_status_button"
title="Connect"
onclick="UI.toggleConnectPanel()" />
<input type="image" src="images/disconnect.png"
onclick="UI.disconnect()" />
</div>
+ <!-- Description Panel -->
+ <!-- Shown by default when hosted at for kanaka.github.com -->
+ <div id="noVNC_description" style="display:none;" 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 type="button" value="Close"
+ onclick="UI.toggleConnectPanel();">
+ </div>
+
<!-- Clipboard Panel -->
<div id="noVNC_clipboard" class="triangle-right top">
<textarea id="noVNC_clipboard_text" rows=5
<li><input id="noVNC_shared" type="checkbox"> Shared Mode</li>
<li><input id="noVNC_view_only" type="checkbox"> View Only</li>
<li><input id="noVNC_connectTimeout" type="input"> Connect Timeout (s)</li>
- <li><input id="noVNC_path" type="input"> Path</li>
+ <li><input id="noVNC_path" type="input" value="websockify"> Path</li>
<hr>
<!-- Stylesheet selection dropdown -->
<li><label><strong>Style: </strong>
host = WebUtil.getQueryVar('host', null);
port = WebUtil.getQueryVar('port', null);
password = WebUtil.getQueryVar('password', '');
- path = WebUtil.getQueryVar('path', '');
+ path = WebUtil.getQueryVar('path', 'websockify');
if ((!host) || (!port)) {
updateState('failed',
"Must specify host and port in URL");
}
rfb = new RFB({'target': $D('noVNC_canvas'),
- 'encrypt': WebUtil.getQueryVar('encrypt', false),
+ 'encrypt': WebUtil.getQueryVar('encrypt',
+ (window.location.protocol === "https:")),
'true_color': WebUtil.getQueryVar('true_color', true),
'local_cursor': WebUtil.getQueryVar('cursor', true),
'shared': WebUtil.getQueryVar('shared', true),