diff options
Diffstat (limited to 'panes/tabVMConsoleRDP.html')
-rw-r--r-- | panes/tabVMConsoleRDP.html | 1008 |
1 files changed, 504 insertions, 504 deletions
diff --git a/panes/tabVMConsoleRDP.html b/panes/tabVMConsoleRDP.html index c38e66d..ac62f7b 100644 --- a/panes/tabVMConsoleRDP.html +++ b/panes/tabVMConsoleRDP.html @@ -1,504 +1,504 @@ -<!--
-
- VM Console tab
- Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com)
-
- $Id: tabVMConsoleRDP.html 595 2015-04-17 09:50:36Z imoore76 $
-
- -->
- <div id='vboxTabVMUnavailable' style='display: none' class='translate'>Virtual machine is not running or is not configured to accept RDP connections.</div>
- <div id='vboxRDPFormContainer' style='padding-top: 8px; display: none'>
- <form name="vboxRDPForm" id="vboxRDPForm">
- <div class='vboxInvisible' id='vboxRDPConnParams'>
-
- <span id='vboxConsoleLoginInfo'>
- <span class='translate'>User name</span>: <input class='vboxRDPSet' type=text size=20 name=logonUsername value="">
- <span class='translate'>Password</span>: <input class='vboxRDPSet' type=password size=20 name=logonPassword value="">
- </span>
-
- <span class='translate'>Requested desktop size</span>:
- <select id='vboxRDPSize' name='vboxRDPSizeSelect'>
- <option value='800x600'>800x600</option>
- <option value='1024x768'>1024x768</option>
- <option value='1280x1024'>1280x1024</option>
- </select>
-
- </div>
- <p>
- <input name=connectionButton type=button value="Connect" onclick="vboxRDPConnect();" />
- <input type='text' id='vboxConsoleAddr' name='serverAddress' class='vboxRDPSet' value='' />
- <!-- and hardcore web dev guys across the world frown ... //-->
-
- <input name=cadButton id='vboxConsoleCADButton' style='display: none' type=button value="Ctrl-Alt-Del" onClick="vboxRDPsendCAD()" />
- <input id='vboxVRDPDetachBtn' style='display: none' name='detach' type='button' value='Detach' onClick="vboxRDPDetach();" />
- <span id='vboxRDPStatus'></span>
- </p>
- </form>
- </div>
-
- <div id="FlashRDPContainer" style='width: 100%;'>
- <div id="FlashRDP" style='width: 100%;'></div>
- </div>
-
-
-<script type="text/javascript">
-
-var vboxRDPFlashLoaded = false;
-var vboxConsoleDetached = (vboxConsoleDetached || false);
-var vboxRDPFlashListenersAdded = false;
-
-$('#vboxRDPForm').on('submit',function(e){
- e.stopPropagation();
- e.preventDefault();
- return false;
-});
-
-// Custom resolutions
-if($("#vboxPane").data('vboxConfig').consoleResolutions) {
- var res = $("#vboxPane").data('vboxConfig').consoleResolutions;
- // first one must be valid
- if(res[0].split('x').length == 2) {
- document.vboxRDPForm.vboxRDPSizeSelect.options.length = 0;
- $(document.vboxRDPForm.vboxRDPSizeSelect).children().remove();
- for(var i = 0; i < res.length; i++) {
- document.vboxRDPForm.vboxRDPSizeSelect.options[i] = new Option(res[i],res[i]);
- }
- }
-}
-// Translations
-$('#vboxTabVMConsole').find(".translate").html(function(i,h){return trans(h,'VBoxConsoleWgt');}).removeClass('translate');
-$(document.vboxRDPForm.connectionButton).val(trans('Connect','VBoxConsoleWgt'));
-$(document.vboxRDPForm.cadButton).val(trans("Send Ctrl-Alt-Del",'VBoxConsoleWgt'));
-$(document.vboxRDPForm.vboxVRDPDetachBtn).val(trans("Detach",'VBoxConsoleWgt'));
-$("#vboxRDPStatus").html(trans("Loading ...",'UIVMDesktop'));
-if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text();
-
-// Disable / enable tab on selection list changes
-$('#vboxPane').on('vmSelectionListChanged', function(){
-
- var vm = vboxChooser.getSingleSelected();
-
- // Initially disable tab
- $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']);
-
- if(!vm || !vboxVMStates.isRunning(vm)) {
- $('#vboxRDPFormContainer').css({'display':'none'});
- $('#FlashRDPContainer').css({'visibility':'hidden'});
- $('#vboxTabVMUnavailable').css({'display':'none'});
-
- } else {
-
- // VM is running, get runtime data
- $.when(vboxVMDataMediator.getVMDataCombined(vm.id)).done(function(info) {
-
- if(info.VRDEServerInfo && info.VRDEServerInfo.port > 0 && info.VRDEServer.VRDEExtPack.indexOf("VNC") == -1) {
-
- $('#vboxRDPFormContainer').css({'display':''});
- $('#FlashRDPContainer').css({'visibility':'visible'});
- $('#vboxTabVMUnavailable').css({'display':'none'});
-
- $('#vboxTabVMConsole').parent().trigger('enableTab', ['vboxTabVMConsole']);
- }
-
- });
-
- }
-
-
-// Update on console info change
-}).on('vboxOnVRDEServerInfoChanged',function(e,eventData) {
-
- // Shorthand
- var vmid = eventData.machineId;
- var VRDEServerInfo = eventData.enrichmentData;
-
- var selVM = vboxChooser.getSingleSelected();
- var enabled = (selVM && selVM.id == vmid && vboxVMStates.isRunning(selVM) && VRDEServerInfo && VRDEServerInfo.port > 0);
-
- if(enabled) {
-
- $.when(vboxVMDataMediator.getVMDataCombined(vmid)).done(function(info) {
-
- enabled = (info.VRDEServerInfo && info.VRDEServerInfo.port > 0 && info.VRDEServer.VRDEExtPack.indexOf("VNC") == -1);
-
- if(enabled) {
-
- $('#vboxTabVMConsole').parent().trigger('enableTab', ['vboxTabVMConsole']);
-
- $('#vboxRDPFormContainer').css({'display':''});
- $('#FlashRDPContainer').css({'visibility':'visible'});
- $('#vboxTabVMUnavailable').css({'display':'none'});
-
-
- var chost = vboxGetVRDEHost(selVM);
- chost+=':'+VRDEServerInfo.port;
-
- if($(document.vboxRDPForm.serverAddress).val() != chost) {
-
- // console host changed
- vboxRDPDisconnect();
-
- }
- $(document.vboxRDPForm.serverAddress).val(chost);
- } else {
- $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']);
- }
-
- });
-
- } else {
-
- $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']);
- }
-
-// Update tab on machine state change
-}).on('vboxOnMachineStateChanged', function(e, eventData){
-
- var selVMId = vboxChooser.getSingleSelectedId();
- var enabled = (selVMId == eventData.machineId && vboxVMStates.isRunning({'state':eventData.state}));
-
- $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']);
-
- if(enabled) {
-
- // VM is running, get runtime data
- $.when(vboxVMDataMediator.getVMRuntimeData(eventData.machineId)).done(function(vm) {
-
- if(vm.VRDEServerInfo && vm.VRDEServerInfo.port > 0) {
-
- $('#vboxTabVMConsole').parent().trigger('enableTab', ['vboxTabVMConsole']);
-
- $('#vboxRDPFormContainer').css({'display':''});
- $('#FlashRDPContainer').css({'visibility':'visible'});
- $('#vboxTabVMUnavailable').css({'display':'none'});
-
- }
-
- });
-
- }
-
-// Clean up local data storage when a machine is unregistered
-}).on('vboxMachineRegistered', function(e, eventData) {
-
- if(!eventData.registered) {
- vboxSetLocalDataItem('vbox'+eventData.machineId+'ConsoleSize','',true);
- vboxSetLocalDataItem('vbox'+eventData.machineId+'ConsoleConnected','',true);
- }
-});
-
-/*
- * Populate console info values when this tab is shown
- */
-
-$('#vboxTabVMConsole').on('show',function(){
-
- var vm = vboxChooser.getSingleSelected();
-
- if(!vm || !vboxVMStates.isRunning(vm)) {
- $('#vboxRDPFormContainer').css({'display':'none'});
- $('#FlashRDPContainer').css({'visibility':'hidden'});
- $('#vboxTabVMUnavailable').css({'display':''});
- return;
- }
-
- $('#vboxConsoleLoginInfo').hide();
-
- /* Load runtime data. This will tell us if the VRDE server is actually active */
- /* And details. This will give us info about the VRDEServer configuration */
- $.when(vboxVMDataMediator.getVMRuntimeData(vm.id),vboxVMDataMediator.getVMDetails(vm.id))
- .done(function(runtimeData, detailsData) {
-
- /* Not active */
- if(!(runtimeData.VRDEServerInfo && runtimeData.VRDEServerInfo.port > 0)) {
- $('#vboxTabVMUnavailable').css({'display':''});
- $('#vboxTabVMConsole').parent().trigger('disableTab',['vboxTabVMConsole']);
- return;
- }
-
- // Hide login form if authtype is not set
- if(detailsData.VRDEServer.authType != 'Null') {
- $('#vboxConsoleLoginInfo').show();
- }
- $('#vboxConsoleLoginInfo').data('vboxVRDPauthType',detailsData.VRDEServer.authType);
-
- /* Active */
- $('#vboxRDPFormContainer').css({'display':''});
- $('#FlashRDPContainer').css({'visibility':'visible'});
- $('#vboxTabVMUnavailable').css({'display':'none'});
-
- vboxRDPDisconnect();
- $("#vboxRDPStatus").html('');
- if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text();
-
- var chost = vboxGetVRDEHost(detailsData);
- chost+=':'+runtimeData.VRDEServerInfo.port;
- $(document.vboxRDPForm.serverAddress).val(chost);
-
- // Set default console size for this VM?
- var cs = vboxGetLocalDataItem('vbox'+detailsData.id+'ConsoleSize');
- if(cs) {
- $(document.vboxRDPForm.vboxRDPSizeSelect).children('[value='+cs+']').first().prop('selected',true);
- }
-
- $('#vboxRDPFormContainer').css({'display':''});
-
- vboxRDPLoad();
- });
-
-});
-
-function vboxRDPLoad() {
-
- var flashvars = {};
- var params = {};
- params.wmode="opaque";
- params.menu="false";
- params.bgcolor="#e9e9e9";
- params.quality="low";
- params.allowScriptAccess="always";
- params.flashId="FlashRDP";
-
- var attributes = {};
- swfobject.embedSWF("rdpweb/RDPClientUI.swf", "FlashRDP", "100", "100", "9.0.0","", flashvars, params, attributes);
-
- var ua = swfobject.ua;
-
- // No flash installed
- if(!ua || ua.pv[0] == '0') {
- $('#vboxRDPFormContainer').css('display','none');
- $("#FlashRDP").css('width','100%').html("The Adobe Flash plugin is not installed.");
- }
-}
-
-function vboxRDPgetFlashProperty(name) {
- var flash = RDPWebClient.getFlashById("FlashRDP");
- try {
- return flash.getProperty(name);
- } catch (e) {
- return '';
- }
-}
-
-/*
- * RDP client event handlers.
- * They will be called when the flash movie is ready and some event occurs.
- * Note: the function name must be the "flash_id" + "event name".
- */
-function RDPWebEventLoaded(flashid) {
-
- vboxRDPFlashLoaded = true;
- $("#vboxRDPStatus").html(trans("Version",'UIVMDesktop') + ": " + vboxRDPgetFlashProperty("version"));
- if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text();
-
- var flash = RDPWebClient.getFlashById("FlashRDP");
-
- // Apply keyboard layout
- flash.setProperty("keyboardLayout", ($('#vboxPane').data('vboxConfig').consoleKeyboardLayout == 'DE' ? 'de' : 'en'));
-
- // Only do this once
- if(!vboxRDPFlashListenersAdded) {
-
- if (window.addEventListener) {
- window.addEventListener("contextmenu", function(event) { return RDPWebClient._MozillaContextMenu(event); }, true);
- window.addEventListener("mousedown", function(event) { return RDPWebClient._MozillaMouse(event, true); }, true);
- window.addEventListener("mouseup", function(event) { return RDPWebClient._MozillaMouse(event, false); }, true);
- flash.addEventListener("mouseout", function(event) { return RDPWebClient._MozillaMouseOut(event); }, true);
- } else {
- document.oncontextmenu = function() { return RDPWebClient._IEContextMenu(); };
- flash.parentNode.onmousedown = function() { return RDPWebClient._IEMouse(true); };
- flash.parentNode.onmouseup = function() { return RDPWebClient._IEMouse(false); };
- flash.onmouseout=function() {return RDPWebClient._IEMouseOut(); };
- }
-
- vboxRDPFlashListenersAdded = true;
-
- }
-
- // Connect if "detached"
- if(vboxConsoleDetached) {
- $('#vboxTabVMUnavailable').css({'display':'none'});
- $('#vboxRDPFormContainer').css({'display':'none'});
- $('#vboxRDPSize').val($(window.opener.document.getElementById('vboxRDPSize')).val());
- $('#vboxRDPFormContainer').find(".vboxRDPSet").each(function(){
- $(this).val(window.opener.document.forms['vboxRDPForm'][$(this).attr('name')].value);
- });
- $(window).on('resize',function(){
- var flash = RDPWebClient.getFlashById("FlashRDP");
- var wh = [ $(window).width()-2, $(window).height()-2 ];
- $(flash).css({'height':wh[1]+'px','width':wh[0]+'px'});
- $('#FlashRDP').css({'height':wh[1]+'px','width':wh[0]+'px'});
- flash.setProperty("displayWidth", wh[0]);
- flash.setProperty("displayHeight", wh[1]);
- $(flash).css({'display':'none'});
- $(flash).css({'display':'block'});
- });
- vboxRDPConnect();
- } else {
-
- $('#vboxRDPConnParams').show();
- $('#vboxRDPFormContainer').css('display','');
-
- // Did not explicitly disconnect from this VM and has no auth settings so reconnect
- if(vboxGetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected') == 'true' && $('#vboxConsoleLoginInfo').data('vboxVRDPauthType') == 'Null') {
- document.vboxRDPForm.connectionButton.click();
- }
- }
-}
-
-function RDPWebEventConnected(flashId) {
- $("#vboxRDPStatus").data('vmConnected',true);
- $("#vboxRDPStatus").html(trans("Connected to %1",'VBoxConsoleWgt').replace('%1',$(document.vboxRDPForm.serverAddress).val()));
- if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text();
- $('#vboxConsoleCADButton').show();
- $('#vboxVRDPDetachBtn').show();
-}
-
-function RDPWebEventServerRedirect(flashId) {
- $("#vboxRDPStatus").html(trans("Redirection by %1",'VBoxConsoleWgt').replace('%1',vboxRDPgetFlashProperty("serverAddress")));
- if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text();
-}
-
-function RDPWebEventDisconnected(flashId) {
-
- $("#vboxRDPStatus").data('vmConnected',false);
-
- $('#vboxRDPConnParams').show();
- $('#vboxVRDPDetachBtn').hide();
-
- /* RDP connection has been lost */
- $("#vboxRDPStatus").html(trans("Disconnect reason",'VBoxConsoleWgt')+":\n" + vboxRDPgetFlashProperty("lastError"));
- if(vboxConsoleDetached) {
- alert($("#vboxRDPStatus").text());
- window.close();
- }
- document.vboxRDPForm.connectionButton.value = trans("Connect",'VBoxConsoleWgt');
- document.vboxRDPForm.connectionButton.onclick=function() {
- vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleSize',$('#vboxRDPSize').val(),true);
- vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected','true',true);
- return vboxRDPConnect();
- };
- $('#vboxConsoleAddr').css('display','');
- $('#vboxConsoleCADButton').hide();
-
- $('#vboxRDPFormContainer').css({'display':''});
-}
-
-
-function vboxRDPConnect() {
-
- vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleSize',$('#vboxRDPSize').val(), true);
-
- if (!vboxRDPFlashLoaded) return false;
-
- var flash = RDPWebClient.getFlashById("FlashRDP");
- if (!flash) return;
-
- $('#vboxRDPConnParams').hide();
-
- document.vboxRDPForm.connectionButton.value = trans("Disconnect",'VBoxConsoleWgt');
- document.vboxRDPForm.connectionButton.onclick=function(){
- vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected');
- return vboxRDPDisconnect();
- };
-
- $('#vboxConsoleAddr').css('display','none');
- $('#FlashRDPContainer').css({'visibility':'visible'});
-
-
- var flash = RDPWebClient.getFlashById("FlashRDP");
-
- var wh = null;
- if(vboxConsoleDetached) {
- wh = [ $(document).width()-2, $(document).height()-2 ];
- } else {
- wh = $('#vboxRDPSize').val().split('x');
- }
- $(flash).css({'height':wh[1]+'px','width':wh[0]+'px'});
- flash.setProperty("displayWidth", wh[0]);
- flash.setProperty("displayHeight", wh[1]);
-
- /* Setup the client parameters. */
- $('#vboxRDPFormContainer').find(".vboxRDPSet").each(function(){
- flash.setProperty($(this).attr('name'),$(this).val());
- });
-
- $("#vboxRDPStatus").html(trans("Connecting to %1",'VBoxConsoleWgt').replace('%1',$(document.vboxRDPForm.serverAddress).val()) + "...");
- if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").html();
-
- /* Establish the connection. */
- flash.connect();
-
-}
-
-function vboxRDPDisconnect() {
- var flash = RDPWebClient.getFlashById("FlashRDP");
- if (flash) try { flash.disconnect(); } catch (err) {};
- /* Restore the "Connect" form. And resize flash*/
- document.vboxRDPForm.connectionButton.value = trans("Connect",'VBoxConsoleWgt');
- document.vboxRDPForm.connectionButton.onclick=function() {
- vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected','true',true);
- vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleSize',$('#vboxRDPSize').val(),true);
- vboxRDPConnect();this.blur();
- };
- $('#vboxConsoleCADButton').hide();
- $(flash).css({'height':'100px','width':'100px'});
- $('#vboxConsoleAddr').css('display','');
-
-}
-
-function vboxRDPsendCAD() {
- var flash = RDPWebClient.getFlashById("FlashRDP");
- if (flash) flash.keyboardSendCAD();
-}
-
-function vboxRDPDetach() {
-
- vboxRDPDisconnect();
-
- var vmname = vboxChooser.getSingleSelected().name;
- var wh = $('#vboxRDPSize').val().split('x');
- var newwin = window.open('about:blank','vboxConsoleDetachedWin'+vmname.replace(/[^a-zA-Z0-9]/g,'_'),'toolbar=0,menubar=0,location=0,directories=0,status=true,resize=true,width='+(parseInt(wh[0])+20)+',height='+(parseInt(wh[1])+20)+'');
-
- newwin.document.open();
- newwin.document.write('<html><head><title>'+vmname + ' - ' + trans('Console','UIVMDesktop')+'</title></head><body style="margin: 0px; border: 0px; padding: 0px; overflow: hidden;"><div style="margin: 0px; border: 0px; padding: 0px" id="vboxPane"><img src="images/spinner.gif" /></div></body></html>');
- newwin.document.close();
- newwin.trans = function(t) { return t; };
- var newHead = newwin.document.getElementsByTagName('HEAD')[0];
-
- var headTags = document.getElementsByTagName('HEAD')[0].getElementsByTagName('SCRIPT');
- for(var i = 0; i < headTags.length; i++) {
-
- // Ignore runtime scripts
- if(!$(headTags[i]).attr('src')) continue;
-
- var script = newwin.document.createElement('script');
- script.setAttribute('type','text/javascript');
- script.setAttribute('src',$(headTags[i]).attr('src'));
- newHead.appendChild(script);
- }
- // Load self
- var script = newwin.document.createElement('script');
- script.setAttribute('type','text/javascript');
- script.text = "var vboxConsoleDetached = true;\
- function vboxConsoleCheckLoad() {\
- if(vboxLoader && jQuery) vboxConsoleDetachedOnload();\
- else setTimeout(\"vboxConsoleCheckLoad()\",1000);\
- }\
- function vboxConsoleDetachedOnload(){\
- l = new vboxLoader();\
- l.add('getConfig',function(d){$('#vboxPane').data('vboxConfig',d.responseData);});\
- l.addFile('panes/tabVMConsoleRDP.html',function(d){$('#vboxPane').children().remove();$('#vboxPane').append(d);$('#vboxTabVMConsole').css('display','');vboxRDPLoad();});\
- l.run();};\
- setTimeout(\"vboxConsoleCheckLoad()\",1000);";
- newHead.appendChild(script);
-
-}
-
-</script>
-
-
-<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank">
- this frame prevents back forward cache in Safari
-</iframe>
-
+<!-- + + VM Console tab + Copyright (C) 2010-2015 Ian Moore (imoore76 at yahoo dot com) + + $Id: tabVMConsoleRDP.html 595 2015-04-17 09:50:36Z imoore76 $ + + --> + <div id='vboxTabVMUnavailable' style='display: none' class='translate'>Virtual machine is not running or is not configured to accept RDP connections.</div> + <div id='vboxRDPFormContainer' style='padding-top: 8px; display: none'> + <form name="vboxRDPForm" id="vboxRDPForm"> + <div class='vboxInvisible' id='vboxRDPConnParams'> + + <span id='vboxConsoleLoginInfo'> + <span class='translate'>User name</span>: <input class='vboxRDPSet' type=text size=20 name=logonUsername value=""> + <span class='translate'>Password</span>: <input class='vboxRDPSet' type=password size=20 name=logonPassword value=""> + </span> + + <span class='translate'>Requested desktop size</span>: + <select id='vboxRDPSize' name='vboxRDPSizeSelect'> + <option value='800x600'>800x600</option> + <option value='1024x768'>1024x768</option> + <option value='1280x1024'>1280x1024</option> + </select> + + </div> + <p> + <input name=connectionButton type=button value="Connect" onclick="vboxRDPConnect();" /> + <input type='text' id='vboxConsoleAddr' name='serverAddress' class='vboxRDPSet' value='' /> + <!-- and hardcore web dev guys across the world frown ... //--> + + <input name=cadButton id='vboxConsoleCADButton' style='display: none' type=button value="Ctrl-Alt-Del" onClick="vboxRDPsendCAD()" /> + <input id='vboxVRDPDetachBtn' style='display: none' name='detach' type='button' value='Detach' onClick="vboxRDPDetach();" /> + <span id='vboxRDPStatus'></span> + </p> + </form> + </div> + + <div id="FlashRDPContainer" style='width: 100%;'> + <div id="FlashRDP" style='width: 100%;'></div> + </div> + + +<script type="text/javascript"> + +var vboxRDPFlashLoaded = false; +var vboxConsoleDetached = (vboxConsoleDetached || false); +var vboxRDPFlashListenersAdded = false; + +$('#vboxRDPForm').on('submit',function(e){ + e.stopPropagation(); + e.preventDefault(); + return false; +}); + +// Custom resolutions +if($("#vboxPane").data('vboxConfig').consoleResolutions) { + var res = $("#vboxPane").data('vboxConfig').consoleResolutions; + // first one must be valid + if(res[0].split('x').length == 2) { + document.vboxRDPForm.vboxRDPSizeSelect.options.length = 0; + $(document.vboxRDPForm.vboxRDPSizeSelect).children().remove(); + for(var i = 0; i < res.length; i++) { + document.vboxRDPForm.vboxRDPSizeSelect.options[i] = new Option(res[i],res[i]); + } + } +} +// Translations +$('#vboxTabVMConsole').find(".translate").html(function(i,h){return trans(h,'VBoxConsoleWgt');}).removeClass('translate'); +$(document.vboxRDPForm.connectionButton).val(trans('Connect','VBoxConsoleWgt')); +$(document.vboxRDPForm.cadButton).val(trans("Send Ctrl-Alt-Del",'VBoxConsoleWgt')); +$(document.vboxRDPForm.vboxVRDPDetachBtn).val(trans("Detach",'VBoxConsoleWgt')); +$("#vboxRDPStatus").html(trans("Loading ...",'UIVMDesktop')); +if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text(); + +// Disable / enable tab on selection list changes +$('#vboxPane').on('vmSelectionListChanged', function(){ + + var vm = vboxChooser.getSingleSelected(); + + // Initially disable tab + $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']); + + if(!vm || !vboxVMStates.isRunning(vm)) { + $('#vboxRDPFormContainer').css({'display':'none'}); + $('#FlashRDPContainer').css({'visibility':'hidden'}); + $('#vboxTabVMUnavailable').css({'display':'none'}); + + } else { + + // VM is running, get runtime data + $.when(vboxVMDataMediator.getVMDataCombined(vm.id)).done(function(info) { + + if(info.VRDEServerInfo && info.VRDEServerInfo.port > 0 && info.VRDEServer.VRDEExtPack.indexOf("VNC") == -1) { + + $('#vboxRDPFormContainer').css({'display':''}); + $('#FlashRDPContainer').css({'visibility':'visible'}); + $('#vboxTabVMUnavailable').css({'display':'none'}); + + $('#vboxTabVMConsole').parent().trigger('enableTab', ['vboxTabVMConsole']); + } + + }); + + } + + +// Update on console info change +}).on('vboxOnVRDEServerInfoChanged',function(e,eventData) { + + // Shorthand + var vmid = eventData.machineId; + var VRDEServerInfo = eventData.enrichmentData; + + var selVM = vboxChooser.getSingleSelected(); + var enabled = (selVM && selVM.id == vmid && vboxVMStates.isRunning(selVM) && VRDEServerInfo && VRDEServerInfo.port > 0); + + if(enabled) { + + $.when(vboxVMDataMediator.getVMDataCombined(vmid)).done(function(info) { + + enabled = (info.VRDEServerInfo && info.VRDEServerInfo.port > 0 && info.VRDEServer.VRDEExtPack.indexOf("VNC") == -1); + + if(enabled) { + + $('#vboxTabVMConsole').parent().trigger('enableTab', ['vboxTabVMConsole']); + + $('#vboxRDPFormContainer').css({'display':''}); + $('#FlashRDPContainer').css({'visibility':'visible'}); + $('#vboxTabVMUnavailable').css({'display':'none'}); + + + var chost = vboxGetVRDEHost(selVM); + chost+=':'+VRDEServerInfo.port; + + if($(document.vboxRDPForm.serverAddress).val() != chost) { + + // console host changed + vboxRDPDisconnect(); + + } + $(document.vboxRDPForm.serverAddress).val(chost); + } else { + $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']); + } + + }); + + } else { + + $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']); + } + +// Update tab on machine state change +}).on('vboxOnMachineStateChanged', function(e, eventData){ + + var selVMId = vboxChooser.getSingleSelectedId(); + var enabled = (selVMId == eventData.machineId && vboxVMStates.isRunning({'state':eventData.state})); + + $('#vboxTabVMConsole').parent().trigger('disableTab', ['vboxTabVMConsole']); + + if(enabled) { + + // VM is running, get runtime data + $.when(vboxVMDataMediator.getVMRuntimeData(eventData.machineId)).done(function(vm) { + + if(vm.VRDEServerInfo && vm.VRDEServerInfo.port > 0) { + + $('#vboxTabVMConsole').parent().trigger('enableTab', ['vboxTabVMConsole']); + + $('#vboxRDPFormContainer').css({'display':''}); + $('#FlashRDPContainer').css({'visibility':'visible'}); + $('#vboxTabVMUnavailable').css({'display':'none'}); + + } + + }); + + } + +// Clean up local data storage when a machine is unregistered +}).on('vboxMachineRegistered', function(e, eventData) { + + if(!eventData.registered) { + vboxSetLocalDataItem('vbox'+eventData.machineId+'ConsoleSize','',true); + vboxSetLocalDataItem('vbox'+eventData.machineId+'ConsoleConnected','',true); + } +}); + +/* + * Populate console info values when this tab is shown + */ + +$('#vboxTabVMConsole').on('show',function(){ + + var vm = vboxChooser.getSingleSelected(); + + if(!vm || !vboxVMStates.isRunning(vm)) { + $('#vboxRDPFormContainer').css({'display':'none'}); + $('#FlashRDPContainer').css({'visibility':'hidden'}); + $('#vboxTabVMUnavailable').css({'display':''}); + return; + } + + $('#vboxConsoleLoginInfo').hide(); + + /* Load runtime data. This will tell us if the VRDE server is actually active */ + /* And details. This will give us info about the VRDEServer configuration */ + $.when(vboxVMDataMediator.getVMRuntimeData(vm.id),vboxVMDataMediator.getVMDetails(vm.id)) + .done(function(runtimeData, detailsData) { + + /* Not active */ + if(!(runtimeData.VRDEServerInfo && runtimeData.VRDEServerInfo.port > 0)) { + $('#vboxTabVMUnavailable').css({'display':''}); + $('#vboxTabVMConsole').parent().trigger('disableTab',['vboxTabVMConsole']); + return; + } + + // Hide login form if authtype is not set + if(detailsData.VRDEServer.authType != 'Null') { + $('#vboxConsoleLoginInfo').show(); + } + $('#vboxConsoleLoginInfo').data('vboxVRDPauthType',detailsData.VRDEServer.authType); + + /* Active */ + $('#vboxRDPFormContainer').css({'display':''}); + $('#FlashRDPContainer').css({'visibility':'visible'}); + $('#vboxTabVMUnavailable').css({'display':'none'}); + + vboxRDPDisconnect(); + $("#vboxRDPStatus").html(''); + if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text(); + + var chost = vboxGetVRDEHost(detailsData); + chost+=':'+runtimeData.VRDEServerInfo.port; + $(document.vboxRDPForm.serverAddress).val(chost); + + // Set default console size for this VM? + var cs = vboxGetLocalDataItem('vbox'+detailsData.id+'ConsoleSize'); + if(cs) { + $(document.vboxRDPForm.vboxRDPSizeSelect).children('[value='+cs+']').first().prop('selected',true); + } + + $('#vboxRDPFormContainer').css({'display':''}); + + vboxRDPLoad(); + }); + +}); + +function vboxRDPLoad() { + + var flashvars = {}; + var params = {}; + params.wmode="opaque"; + params.menu="false"; + params.bgcolor="#e9e9e9"; + params.quality="low"; + params.allowScriptAccess="always"; + params.flashId="FlashRDP"; + + var attributes = {}; + swfobject.embedSWF("rdpweb/RDPClientUI.swf", "FlashRDP", "100", "100", "9.0.0","", flashvars, params, attributes); + + var ua = swfobject.ua; + + // No flash installed + if(!ua || ua.pv[0] == '0') { + $('#vboxRDPFormContainer').css('display','none'); + $("#FlashRDP").css('width','100%').html("The Adobe Flash plugin is not installed."); + } +} + +function vboxRDPgetFlashProperty(name) { + var flash = RDPWebClient.getFlashById("FlashRDP"); + try { + return flash.getProperty(name); + } catch (e) { + return ''; + } +} + +/* + * RDP client event handlers. + * They will be called when the flash movie is ready and some event occurs. + * Note: the function name must be the "flash_id" + "event name". + */ +function RDPWebEventLoaded(flashid) { + + vboxRDPFlashLoaded = true; + $("#vboxRDPStatus").html(trans("Version",'UIVMDesktop') + ": " + vboxRDPgetFlashProperty("version")); + if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text(); + + var flash = RDPWebClient.getFlashById("FlashRDP"); + + // Apply keyboard layout + flash.setProperty("keyboardLayout", ($('#vboxPane').data('vboxConfig').consoleKeyboardLayout == 'DE' ? 'de' : 'en')); + + // Only do this once + if(!vboxRDPFlashListenersAdded) { + + if (window.addEventListener) { + window.addEventListener("contextmenu", function(event) { return RDPWebClient._MozillaContextMenu(event); }, true); + window.addEventListener("mousedown", function(event) { return RDPWebClient._MozillaMouse(event, true); }, true); + window.addEventListener("mouseup", function(event) { return RDPWebClient._MozillaMouse(event, false); }, true); + flash.addEventListener("mouseout", function(event) { return RDPWebClient._MozillaMouseOut(event); }, true); + } else { + document.oncontextmenu = function() { return RDPWebClient._IEContextMenu(); }; + flash.parentNode.onmousedown = function() { return RDPWebClient._IEMouse(true); }; + flash.parentNode.onmouseup = function() { return RDPWebClient._IEMouse(false); }; + flash.onmouseout=function() {return RDPWebClient._IEMouseOut(); }; + } + + vboxRDPFlashListenersAdded = true; + + } + + // Connect if "detached" + if(vboxConsoleDetached) { + $('#vboxTabVMUnavailable').css({'display':'none'}); + $('#vboxRDPFormContainer').css({'display':'none'}); + $('#vboxRDPSize').val($(window.opener.document.getElementById('vboxRDPSize')).val()); + $('#vboxRDPFormContainer').find(".vboxRDPSet").each(function(){ + $(this).val(window.opener.document.forms['vboxRDPForm'][$(this).attr('name')].value); + }); + $(window).on('resize',function(){ + var flash = RDPWebClient.getFlashById("FlashRDP"); + var wh = [ $(window).width()-2, $(window).height()-2 ]; + $(flash).css({'height':wh[1]+'px','width':wh[0]+'px'}); + $('#FlashRDP').css({'height':wh[1]+'px','width':wh[0]+'px'}); + flash.setProperty("displayWidth", wh[0]); + flash.setProperty("displayHeight", wh[1]); + $(flash).css({'display':'none'}); + $(flash).css({'display':'block'}); + }); + vboxRDPConnect(); + } else { + + $('#vboxRDPConnParams').show(); + $('#vboxRDPFormContainer').css('display',''); + + // Did not explicitly disconnect from this VM and has no auth settings so reconnect + if(vboxGetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected') == 'true' && $('#vboxConsoleLoginInfo').data('vboxVRDPauthType') == 'Null') { + document.vboxRDPForm.connectionButton.click(); + } + } +} + +function RDPWebEventConnected(flashId) { + $("#vboxRDPStatus").data('vmConnected',true); + $("#vboxRDPStatus").html(trans("Connected to %1",'VBoxConsoleWgt').replace('%1',$(document.vboxRDPForm.serverAddress).val())); + if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text(); + $('#vboxConsoleCADButton').show(); + $('#vboxVRDPDetachBtn').show(); +} + +function RDPWebEventServerRedirect(flashId) { + $("#vboxRDPStatus").html(trans("Redirection by %1",'VBoxConsoleWgt').replace('%1',vboxRDPgetFlashProperty("serverAddress"))); + if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").text(); +} + +function RDPWebEventDisconnected(flashId) { + + $("#vboxRDPStatus").data('vmConnected',false); + + $('#vboxRDPConnParams').show(); + $('#vboxVRDPDetachBtn').hide(); + + /* RDP connection has been lost */ + $("#vboxRDPStatus").html(trans("Disconnect reason",'VBoxConsoleWgt')+":\n" + vboxRDPgetFlashProperty("lastError")); + if(vboxConsoleDetached) { + alert($("#vboxRDPStatus").text()); + window.close(); + } + document.vboxRDPForm.connectionButton.value = trans("Connect",'VBoxConsoleWgt'); + document.vboxRDPForm.connectionButton.onclick=function() { + vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleSize',$('#vboxRDPSize').val(),true); + vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected','true',true); + return vboxRDPConnect(); + }; + $('#vboxConsoleAddr').css('display',''); + $('#vboxConsoleCADButton').hide(); + + $('#vboxRDPFormContainer').css({'display':''}); +} + + +function vboxRDPConnect() { + + vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleSize',$('#vboxRDPSize').val(), true); + + if (!vboxRDPFlashLoaded) return false; + + var flash = RDPWebClient.getFlashById("FlashRDP"); + if (!flash) return; + + $('#vboxRDPConnParams').hide(); + + document.vboxRDPForm.connectionButton.value = trans("Disconnect",'VBoxConsoleWgt'); + document.vboxRDPForm.connectionButton.onclick=function(){ + vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected'); + return vboxRDPDisconnect(); + }; + + $('#vboxConsoleAddr').css('display','none'); + $('#FlashRDPContainer').css({'visibility':'visible'}); + + + var flash = RDPWebClient.getFlashById("FlashRDP"); + + var wh = null; + if(vboxConsoleDetached) { + wh = [ $(document).width()-2, $(document).height()-2 ]; + } else { + wh = $('#vboxRDPSize').val().split('x'); + } + $(flash).css({'height':wh[1]+'px','width':wh[0]+'px'}); + flash.setProperty("displayWidth", wh[0]); + flash.setProperty("displayHeight", wh[1]); + + /* Setup the client parameters. */ + $('#vboxRDPFormContainer').find(".vboxRDPSet").each(function(){ + flash.setProperty($(this).attr('name'),$(this).val()); + }); + + $("#vboxRDPStatus").html(trans("Connecting to %1",'VBoxConsoleWgt').replace('%1',$(document.vboxRDPForm.serverAddress).val()) + "..."); + if(vboxConsoleDetached) window.status = $("#vboxRDPStatus").html(); + + /* Establish the connection. */ + flash.connect(); + +} + +function vboxRDPDisconnect() { + var flash = RDPWebClient.getFlashById("FlashRDP"); + if (flash) try { flash.disconnect(); } catch (err) {}; + /* Restore the "Connect" form. And resize flash*/ + document.vboxRDPForm.connectionButton.value = trans("Connect",'VBoxConsoleWgt'); + document.vboxRDPForm.connectionButton.onclick=function() { + vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleConnected','true',true); + vboxSetLocalDataItem('vbox'+vboxChooser.getSingleSelectedId()+'ConsoleSize',$('#vboxRDPSize').val(),true); + vboxRDPConnect();this.blur(); + }; + $('#vboxConsoleCADButton').hide(); + $(flash).css({'height':'100px','width':'100px'}); + $('#vboxConsoleAddr').css('display',''); + +} + +function vboxRDPsendCAD() { + var flash = RDPWebClient.getFlashById("FlashRDP"); + if (flash) flash.keyboardSendCAD(); +} + +function vboxRDPDetach() { + + vboxRDPDisconnect(); + + var vmname = vboxChooser.getSingleSelected().name; + var wh = $('#vboxRDPSize').val().split('x'); + var newwin = window.open('about:blank','vboxConsoleDetachedWin'+vmname.replace(/[^a-zA-Z0-9]/g,'_'),'toolbar=0,menubar=0,location=0,directories=0,status=true,resize=true,width='+(parseInt(wh[0])+20)+',height='+(parseInt(wh[1])+20)+''); + + newwin.document.open(); + newwin.document.write('<html><head><title>'+vmname + ' - ' + trans('Console','UIVMDesktop')+'</title></head><body style="margin: 0px; border: 0px; padding: 0px; overflow: hidden;"><div style="margin: 0px; border: 0px; padding: 0px" id="vboxPane"><img src="images/spinner.gif" /></div></body></html>'); + newwin.document.close(); + newwin.trans = function(t) { return t; }; + var newHead = newwin.document.getElementsByTagName('HEAD')[0]; + + var headTags = document.getElementsByTagName('HEAD')[0].getElementsByTagName('SCRIPT'); + for(var i = 0; i < headTags.length; i++) { + + // Ignore runtime scripts + if(!$(headTags[i]).attr('src')) continue; + + var script = newwin.document.createElement('script'); + script.setAttribute('type','text/javascript'); + script.setAttribute('src',$(headTags[i]).attr('src')); + newHead.appendChild(script); + } + // Load self + var script = newwin.document.createElement('script'); + script.setAttribute('type','text/javascript'); + script.text = "var vboxConsoleDetached = true;\ + function vboxConsoleCheckLoad() {\ + if(vboxLoader && jQuery) vboxConsoleDetachedOnload();\ + else setTimeout(\"vboxConsoleCheckLoad()\",1000);\ + }\ + function vboxConsoleDetachedOnload(){\ + l = new vboxLoader();\ + l.add('getConfig',function(d){$('#vboxPane').data('vboxConfig',d.responseData);});\ + l.addFile('panes/tabVMConsoleRDP.html',function(d){$('#vboxPane').children().remove();$('#vboxPane').append(d);$('#vboxTabVMConsole').css('display','');vboxRDPLoad();});\ + l.run();};\ + setTimeout(\"vboxConsoleCheckLoad()\",1000);"; + newHead.appendChild(script); + +} + +</script> + + +<iframe style="height:0px;width:0px;visibility:hidden" src="about:blank"> + this frame prevents back forward cache in Safari +</iframe> + |