1a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/* 2a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * noVNC: HTML5 VNC client 3a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Copyright (C) 2011 Joel Martin 4a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * Licensed under LGPL-3 (see LICENSE.txt) 5a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * 6a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat * See README.md for usage and integration instructions. 7a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 8a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 9a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat"use strict"; 10a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*jslint white: false, browser: true */ 11a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat/*global window, $D, Util, WebUtil, RFB, Display */ 12a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 13a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatvar UI = { 14a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 15a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatrfb_state : 'loaded', 16a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsettingsOpen : false, 17a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatconnSettingsOpen : false, 18a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatclipboardOpen: false, 19a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatkeyboardVisible: false, 20a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 21a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Render default UI and initialize settings menu 22a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatload: function() { 23a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var html = '', i, sheet, sheets, llevels; 24a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 25a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Stylesheet selection dropdown 26a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat sheet = WebUtil.selectStylesheet(); 27a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat sheets = WebUtil.getStylesheets(); 28a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for (i = 0; i < sheets.length; i += 1) { 29a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.addOption($D('noVNC_stylesheet'),sheets[i].title, sheets[i].title); 30a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 31a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 32a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Logging selection dropdown 33a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat llevels = ['error', 'warn', 'info', 'debug']; 34a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for (i = 0; i < llevels.length; i += 1) { 35a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.addOption($D('noVNC_logging'),llevels[i], llevels[i]); 36a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 37a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 38a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Settings with immediate effects 39a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('logging', 'warn'); 40a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.init_logging(UI.getSetting('logging')); 41a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 42a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('stylesheet', 'default'); 43a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.selectStylesheet(null); 44a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // call twice to get around webkit bug 45a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.selectStylesheet(UI.getSetting('stylesheet')); 46a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 47a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* Populate the controls if defaults are provided in the URL */ 48a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('host', window.location.hostname); 49a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('port', window.location.port); 50a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('password', ''); 51a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('encrypt', (window.location.protocol === "https:")); 52a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('true_color', true); 53a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('cursor', false); 54a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('shared', true); 55a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('view_only', false); 56a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('connectTimeout', 2); 57a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('path', 'websockify'); 58a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 59a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb = RFB({'target': $D('noVNC_canvas'), 60a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 'onUpdateState': UI.updateState, 61a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 'onClipboard': UI.clipReceive}); 62a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateVisualState(); 63a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 64a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Unfocus clipboard when over the VNC area 65a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //$D('VNC_screen').onmousemove = function () { 66a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // var keyboard = UI.rfb.get_keyboard(); 67a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // if ((! keyboard) || (! keyboard.get_focused())) { 68a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // $D('VNC_clipboard_text').blur(); 69a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // } 70a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // }; 71a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 72a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Show mouse selector buttons on touch screen devices 73a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ('ontouchstart' in document.documentElement) { 74a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Show mobile buttons 75a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_mobile_buttons').style.display = "inline"; 76a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setMouseButton(); 77a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Remove the address bar 78a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setTimeout(function() { window.scrollTo(0, 1); }, 100); 79a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.forceSetting('clip', true); 80a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_clip').disabled = true; 81a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 82a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.initSetting('clip', false); 83a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 84a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 85a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //iOS Safari does not support CSS position:fixed. 86a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //This detects iOS devices and enables javascript workaround. 87a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ((navigator.userAgent.match(/iPhone/i)) || 88a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (navigator.userAgent.match(/iPod/i)) || 89a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat (navigator.userAgent.match(/iPad/i))) { 90a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //UI.setOnscroll(); 91a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //UI.setResize(); 92a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 93a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 94a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_host').focus(); 95a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 96a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setViewClip(); 97a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Util.addEvent(window, 'resize', UI.setViewClip); 98a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 99a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Util.addEvent(window, 'beforeunload', function () { 100a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb_state === 'normal') { 101a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return "You are currently connected."; 102a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 103a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } ); 104a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 105a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Show description by default when hosted at for kanaka.github.com 106a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (location.host === "kanaka.github.com") { 107a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Open the description dialog 108a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_description').style.display = "block"; 109a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 110a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Open the connect panel on first load 111a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 112a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 113a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 114a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 115a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Read form control compatible setting from cookie 116a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatgetSetting: function(name) { 117a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var val, ctrl = $D('noVNC_' + name); 118a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = WebUtil.readCookie(name); 119a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (ctrl.type === 'checkbox') { 120a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (val.toLowerCase() in {'0':1, 'no':1, 'false':1}) { 121a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = false; 122a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 123a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = true; 124a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 125a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 126a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return val; 127a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 128a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 129a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Update cookie and form control setting. If value is not set, then 130a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// updates from control to current cookie setting. 131a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatupdateSetting: function(name, value) { 132a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 133a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var i, ctrl = $D('noVNC_' + name); 134a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Save the cookie for this session 135a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (typeof value !== 'undefined') { 136a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.createCookie(name, value); 137a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 138a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 139a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Update the settings control 140a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat value = UI.getSetting(name); 141a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 142a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (ctrl.type === 'checkbox') { 143a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ctrl.checked = value; 144a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 145a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else if (typeof ctrl.options !== 'undefined') { 146a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for (i = 0; i < ctrl.options.length; i += 1) { 147a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (ctrl.options[i].value === value) { 148a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ctrl.selectedIndex = i; 149a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 150a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 151a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 152a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 153a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /*Weird IE9 error leads to 'null' appearring 154a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat in textboxes instead of ''.*/ 155a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (value === null) { 156a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat value = ""; 157a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 158a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat ctrl.value = value; 159a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 160a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 161a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 162a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Save control setting to cookie 163a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsaveSetting: function(name) { 164a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var val, ctrl = $D('noVNC_' + name); 165a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (ctrl.type === 'checkbox') { 166a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = ctrl.checked; 167a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else if (typeof ctrl.options !== 'undefined') { 168a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = ctrl.options[ctrl.selectedIndex].value; 169a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 170a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = ctrl.value; 171a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 172a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.createCookie(name, val); 173a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Util.Debug("Setting saved '" + name + "=" + val + "'"); 174a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return val; 175a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 176a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 177a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Initial page load read/initialization of settings 178a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatinitSetting: function(name, defVal) { 179a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var val; 180a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 181a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Check Query string followed by cookie 182a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = WebUtil.getQueryVar(name); 183a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (val === null) { 184a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat val = WebUtil.readCookie(name, defVal); 185a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 186a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting(name, val); 187a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Util.Debug("Setting '" + name + "' initialized to '" + val + "'"); 188a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return val; 189a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 190a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 191a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Force a setting to be a certain value 192a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatforceSetting: function(name, val) { 193a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting(name, val); 194a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return val; 195a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 196a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 197a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 198a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Show the clipboard panel 199a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehattoggleClipboardPanel: function() { 200a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Close the description panel 201a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_description').style.display = "none"; 202a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Close settings if open 203a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.settingsOpen === true) { 204a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.settingsApply(); 205a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.closeSettingsMenu(); 206a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 207a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Close connection settings if open 208a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.connSettingsOpen === true) { 209a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 210a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 211a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Toggle Clipboard Panel 212a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.clipboardOpen === true) { 213a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_clipboard').style.display = "none"; 214a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('clipboardButton').className = "noVNC_status_button"; 215a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.clipboardOpen = false; 216a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 217a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_clipboard').style.display = "block"; 218a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('clipboardButton').className = "noVNC_status_button_selected"; 219a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.clipboardOpen = true; 220a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 221a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 222a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 223a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Show the connection settings panel/menu 224a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehattoggleConnectPanel: function() { 225a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Close the description panel 226a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_description').style.display = "none"; 227a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Close connection settings if open 228a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.settingsOpen === true) { 229a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.settingsApply(); 230a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.closeSettingsMenu(); 231a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('connectButton').className = "noVNC_status_button"; 232a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 233a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.clipboardOpen === true) { 234a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleClipboardPanel(); 235a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 236a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 237a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Toggle Connection Panel 238a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.connSettingsOpen === true) { 239a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_controls').style.display = "none"; 240a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('connectButton').className = "noVNC_status_button"; 241a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.connSettingsOpen = false; 242a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 243a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_controls').style.display = "block"; 244a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('connectButton').className = "noVNC_status_button_selected"; 245a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.connSettingsOpen = true; 246a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_host').focus(); 247a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 248a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 249a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 250a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Toggle the settings menu: 251a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// On open, settings are refreshed from saved cookies. 252a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// On close, settings are applied 253a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehattoggleSettingsPanel: function() { 254a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Close the description panel 255a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_description').style.display = "none"; 256a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.settingsOpen) { 257a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.settingsApply(); 258a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.closeSettingsMenu(); 259a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 260a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('encrypt'); 261a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('true_color'); 262a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb.get_display().get_cursor_uri()) { 263a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('cursor'); 264a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 265a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('cursor', false); 266a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_cursor').disabled = true; 267a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 268a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('clip'); 269a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('shared'); 270a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('view_only'); 271a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('connectTimeout'); 272a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('path'); 273a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('stylesheet'); 274a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('logging'); 275a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 276a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.openSettingsMenu(); 277a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 278a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 279a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 280a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Open menu 281a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatopenSettingsMenu: function() { 282a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Close the description panel 283a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_description').style.display = "none"; 284a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.clipboardOpen === true) { 285a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleClipboardPanel(); 286a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 287a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Close connection settings if open 288a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.connSettingsOpen === true) { 289a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 290a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 291a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_settings').style.display = "block"; 292a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('settingsButton').className = "noVNC_status_button_selected"; 293a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.settingsOpen = true; 294a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 295a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 296a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Close menu (without applying settings) 297a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatcloseSettingsMenu: function() { 298a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_settings').style.display = "none"; 299a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('settingsButton').className = "noVNC_status_button"; 300a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.settingsOpen = false; 301a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 302a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 303a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Save/apply settings when 'Apply' button is pressed 304a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsettingsApply: function() { 305a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Util.Debug(">> settingsApply"); 306a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('encrypt'); 307a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('true_color'); 308a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb.get_display().get_cursor_uri()) { 309a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('cursor'); 310a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 311a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('clip'); 312a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('shared'); 313a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('view_only'); 314a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('connectTimeout'); 315a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('path'); 316a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('stylesheet'); 317a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.saveSetting('logging'); 318a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 319a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Settings with immediate (non-connected related) effect 320a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.selectStylesheet(UI.getSetting('stylesheet')); 321a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat WebUtil.init_logging(UI.getSetting('logging')); 322a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setViewClip(); 323a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setViewDrag(UI.rfb.get_viewportDrag()); 324a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Util.Debug("<< settingsApply"); 325a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 326a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 327a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 328a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 329a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetPassword: function() { 330a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.sendPassword($D('noVNC_password').value); 331a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Reset connect button. 332a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_connect_button').value = "Connect"; 333a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_connect_button').onclick = UI.Connect; 334a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Hide connection panel. 335a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 336a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return false; 337a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 338a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 339a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsendCtrlAltDel: function() { 340a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.sendCtrlAltDel(); 341a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 342a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 343a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetMouseButton: function(num) { 344a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var b, blist = [0, 1,2,4], button; 345a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 346a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (typeof num === 'undefined') { 347a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Disable mouse buttons 348a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat num = -1; 349a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 350a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb) { 351a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_mouse().set_touchButton(num); 352a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 353a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 354a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat for (b = 0; b < blist.length; b++) { 355a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button = $D('noVNC_mouse_button' + blist[b]); 356a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (blist[b] === num) { 357a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button.style.display = ""; 358a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 359a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button.style.display = "none"; 360a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat /* 361a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button.style.backgroundColor = "black"; 362a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button.style.color = "lightgray"; 363a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button.style.backgroundColor = ""; 364a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat button.style.color = ""; 365a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat */ 366a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 367a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 368a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 369a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 370a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatupdateState: function(rfb, state, oldstate, msg) { 371a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var s, sb, c, d, cad, vd, klass; 372a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb_state = state; 373a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s = $D('noVNC_status'); 374a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat sb = $D('noVNC_status_bar'); 375a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat switch (state) { 376a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'failed': 377a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'fatal': 378a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat klass = "noVNC_status_error"; 379a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 380a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'normal': 381a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat klass = "noVNC_status_normal"; 382a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 383a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'disconnected': 384a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_logo').style.display = "block"; 385a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Fall through 386a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'loaded': 387a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat klass = "noVNC_status_normal"; 388a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 389a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'password': 390a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 391a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 392a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_connect_button').value = "Send Password"; 393a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_connect_button').onclick = UI.setPassword; 394a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_password').focus(); 395a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 396a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat klass = "noVNC_status_warn"; 397a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 398a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat default: 399a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat klass = "noVNC_status_warn"; 400a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 401a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 402a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 403a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (typeof(msg) !== 'undefined') { 404a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s.setAttribute("class", klass); 405a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat sb.setAttribute("class", klass); 406a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat s.innerHTML = msg; 407a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 408a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 409a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateVisualState(); 410a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 411a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 412a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Disable/enable controls depending on connection state 413a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatupdateVisualState: function() { 414a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var connected = UI.rfb_state === 'normal' ? true : false; 415a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 416a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Util.Debug(">> updateVisualState"); 417a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_encrypt').disabled = connected; 418a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_true_color').disabled = connected; 419a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb && UI.rfb.get_display() && 420a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_display().get_cursor_uri()) { 421a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_cursor').disabled = connected; 422a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 423a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('cursor', false); 424a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_cursor').disabled = true; 425a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 426a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_shared').disabled = connected; 427a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_view_only').disabled = connected; 428a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_connectTimeout').disabled = connected; 429a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_path').disabled = connected; 430a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 431a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (connected) { 432a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setViewClip(); 433a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setMouseButton(1); 434a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('clipboardButton').style.display = "inline"; 435a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('showKeyboard').style.display = "inline"; 436a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('sendCtrlAltDelButton').style.display = "inline"; 437a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 438a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setMouseButton(); 439a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('clipboardButton').style.display = "none"; 440a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('showKeyboard').style.display = "none"; 441a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('sendCtrlAltDelButton').style.display = "none"; 442a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 443a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // State change disables viewport dragging. 444a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // It is enabled (toggled) by direct click on the button 445a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setViewDrag(false); 446a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 447a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat switch (UI.rfb_state) { 448a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'fatal': 449a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'failed': 450a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'loaded': 451a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat case 'disconnected': 452a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('connectButton').style.display = ""; 453a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('disconnectButton').style.display = "none"; 454a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 455a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat default: 456a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('connectButton').style.display = "none"; 457a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('disconnectButton').style.display = ""; 458a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat break; 459a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 460a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 461a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Util.Debug("<< updateVisualState"); 462a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 463a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 464a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 465a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatclipReceive: function(rfb, text) { 466a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Util.Debug(">> UI.clipReceive: " + text.substr(0,40) + "..."); 467a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_clipboard_text').value = text; 468a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Util.Debug("<< UI.clipReceive"); 469a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 470a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 471a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 472a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatconnect: function() { 473a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var host, port, password, path; 474a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 475a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.closeSettingsMenu(); 476a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 477a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 478a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat host = $D('noVNC_host').value; 479a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat port = $D('noVNC_port').value; 480a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat password = $D('noVNC_password').value; 481a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat path = $D('noVNC_path').value; 482a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if ((!host) || (!port)) { 483a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat throw("Must set host and port"); 484a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 485a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 486a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_encrypt(UI.getSetting('encrypt')); 487a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_true_color(UI.getSetting('true_color')); 488a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_local_cursor(UI.getSetting('cursor')); 489a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_shared(UI.getSetting('shared')); 490a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_view_only(UI.getSetting('view_only')); 491a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_connectTimeout(UI.getSetting('connectTimeout')); 492a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 493a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.connect(host, port, password, path); 494a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Close dialog. 495a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setTimeout(UI.setBarPosition, 100); 496a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_logo').style.display = "none"; 497a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 498a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 499a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehatdisconnect: function() { 500a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.closeSettingsMenu(); 501a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.disconnect(); 502a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 503a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_logo').style.display = "block"; 504a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.connSettingsOpen = false; 505a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.toggleConnectPanel(); 506a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 507a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 508a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatdisplayBlur: function() { 509a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_keyboard().set_focused(false); 510a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_mouse().set_focused(false); 511a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 512a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 513a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatdisplayFocus: function() { 514a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_keyboard().set_focused(true); 515a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_mouse().set_focused(true); 516a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 517a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 518a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatclipClear: function() { 519a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_clipboard_text').value = ""; 520a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.clipboardPasteFrom(""); 521a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 522a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 523a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatclipSend: function() { 524a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var text = $D('noVNC_clipboard_text').value; 525a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Util.Debug(">> UI.clipSend: " + text.substr(0,40) + "..."); 526a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.clipboardPasteFrom(text); 527a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat Util.Debug("<< UI.clipSend"); 528a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 529a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 530a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 531a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Enable/disable and configure viewport clipping 532a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetViewClip: function(clip) { 533a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var display, cur_clip, pos, new_w, new_h; 534a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 535a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb) { 536a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat display = UI.rfb.get_display(); 537a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 538a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat return; 539a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 540a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 541a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat cur_clip = display.get_viewport(); 542a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 543a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (typeof(clip) !== 'boolean') { 544a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Use current setting 545a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat clip = UI.getSetting('clip'); 546a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 547a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 548a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (clip && !cur_clip) { 549a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Turn clipping on 550a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('clip', true); 551a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else if (!clip && cur_clip) { 552a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // Turn clipping off 553a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.updateSetting('clip', false); 554a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat display.set_viewport(false); 555a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_canvas').style.position = 'static'; 556a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat display.viewportChange(); 557a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 558a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.getSetting('clip')) { 559a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // If clipping, update clipping settings 560a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_canvas').style.position = 'absolute'; 561a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat pos = Util.getPosition($D('noVNC_canvas')); 562a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat new_w = window.innerWidth - pos.x; 563a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat new_h = window.innerHeight - pos.y; 564a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat display.set_viewport(true); 565a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat display.viewportChange(0, 0, new_w, new_h); 566a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 567a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 568a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 569a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// Toggle/set/unset the viewport drag/move button 570a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetViewDrag: function(drag) { 571a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var vmb = $D('noVNC_view_drag_button'); 572a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (!UI.rfb) { return; } 573a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 574a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (UI.rfb_state === 'normal' && 575a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.get_display().get_viewport()) { 576a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vmb.style.display = "inline"; 577a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 578a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vmb.style.display = "none"; 579a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 580a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 581a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (typeof(drag) === "undefined") { 582a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat // If not specified, then toggle 583a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat drag = !UI.rfb.get_viewportDrag(); 584a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 585a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if (drag) { 586a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vmb.className = "noVNC_status_button_selected"; 587a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_viewportDrag(true); 588a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else { 589a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat vmb.className = "noVNC_status_button"; 590a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.rfb.set_viewportDrag(false); 591a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 592a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 593a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 594a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// On touch devices, show the OS keyboard 595a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatshowKeyboard: function() { 596a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat if(UI.keyboardVisible === false) { 597a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('keyboardinput').focus(); 598a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.keyboardVisible = true; 599a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('showKeyboard').className = "noVNC_status_button_selected"; 600a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } else if(UI.keyboardVisible === true) { 601a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('keyboardinput').blur(); 602a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('showKeyboard').className = "noVNC_status_button"; 603a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.keyboardVisible = false; 604a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat } 605a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 606a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 607a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatkeyInputBlur: function() { 608a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('showKeyboard').className = "noVNC_status_button"; 609a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //Weird bug in iOS if you change keyboardVisible 610a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //here it does not actually occur so next time 611a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat //you click keyboard icon it doesnt work. 612a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat setTimeout(function() { UI.setKeyboard(); },100); 613a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 614a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 615a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetKeyboard: function() { 616a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.keyboardVisible = false; 617a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 618a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 619a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat// iOS < Version 5 does not support position fixed. Javascript workaround: 620a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetOnscroll: function() { 621a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat window.onscroll = function() { 622a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setBarPosition(); 623a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat }; 624a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 625a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 626a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetResize: function () { 627a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat window.onResize = function() { 628a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat UI.setBarPosition(); 629a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat }; 630a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 631a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 632a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat//Helper to add options to dropdown. 633a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehataddOption: function(selectbox,text,value ) 634a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat{ 635a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var optn = document.createElement("OPTION"); 636a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat optn.text = text; 637a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat optn.value = value; 638a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat selectbox.options.add(optn); 639a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}, 640a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 641a430b2b5ca4f0967836f5820e8f03adc17fc0a24San MehatsetBarPosition: function() { 642a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC-control-bar').style.top = (window.pageYOffset) + 'px'; 643a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC_mobile_buttons').style.left = (window.pageXOffset) + 'px'; 644a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 645a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat var vncwidth = $D('noVNC_screen').style.offsetWidth; 646a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat $D('noVNC-control-bar').style.width = vncwidth + 'px'; 647a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat} 648a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 649a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat}; 650a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 651a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 652a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 653a430b2b5ca4f0967836f5820e8f03adc17fc0a24San Mehat 654