'use strict'; /** BSD-2-Clause license * * Copyright (c) 2018-2023 NST , sss , smake . * */ function RDPStart(uri, title){ uri = wsBase document.querySelector('.rdp_connect_dialog').style.display = 'none'; if (title === undefined) { // title = "Portal rdp session " + $('rdphost').value.trim(); title = "Portal remote session"; } if(!embedded){ $('dvLoading').setStyles({'visibility':'visible'}); } var controls = document.querySelector('#extracommands'); rdp = new webrdp.RDP(uri, $('screen'), controls, !RIMtablet, RIMtablet, vkbd); rdp.addEvent('alert', function(msg) { popUpMessage('error', msg, 5); }); rdp.addEvent('connected', function() { cleanPopUpDeck(); document.title = title; var button = $("rdpconnect"); button.removeEvents(); window.removeEvent('resize', OnDesktopSize); button.value = 'Disconnect'; button.addEvent('click', rdp.Disconnect.bind(rdp)); window.addEvent("beforeunload", rdp.Disconnect.bind(rdp)); }); rdp.addEvent('disconnected', function() { showDialog(true); if(embedded){ $('maindialog').addClass('invisible'); noInstancePopUp() } var button = $("rdpconnect"); button.removeEvents(); button.value = 'Connect'; button.addEvent('click', function(){RDPStart();}); OnDesktopSize(); window.addEvent('resize', OnDesktopSize); if(!embedded) { document.querySelector('.rdp_connect_dialog').style.display = 'block'; } }); rdp.addEvent('mouserelease', ResetRdpMouseFlags); rdp.addEvent('touch2', function() { ShowMouseHelper($('mousehelper').hasClass('invisible')); }); rdp.addEvent('touch3', function() { vkbd.toggle(); }); rdp.addEvent('touch4', function() { if (confirm('Are you sure you want to disconnect?')) { rdp.Disconnect(); } }); showDialog(false); // rdp.log.loglevel = "debug"; rdp.Run(); } function SetRdpMouseFlags() { var mf = { 'r': $('rclick').checked, 'm': $('mclick').checked, 'a': $('aclick').checked, 's': $('sclick').checked, 'c': $('cclick').checked, }; rdp.SetArtificialMouseFlags(mf); } function ResetRdpMouseFlags() { $('rclick').checked = false; $('mclick').checked = false; $('aclick').checked = false; $('sclick').checked = false; $('cclick').checked = false; rdp.SetArtificialMouseFlags(null); } function ShowMouseHelper(show) { var mh = $('mousehelper'); inDrag = false; if (show) { mh.setStyles({'position':'absolute','top':mhy,'left':mhx,'z-index':999}); mh.addEvent('mousedown',DragStart); $('rclick').addEvent('change', SetRdpMouseFlags); $('mclick').addEvent('change', SetRdpMouseFlags); $('aclick').addEvent('change', SetRdpMouseFlags); $('sclick').addEvent('change', SetRdpMouseFlags); $('cclick').addEvent('change', SetRdpMouseFlags); mh.removeClass('invisible'); } else { mh.removeEvents(); mh.addClass('invisible'); $('rclick').removeEvents(); $('mclick').removeEvents(); $('aclick').removeEvents(); $('sclick').removeEvents(); $('cclick').removeEvents(); } } function OnDesktopSize() { ResizeCanvas($('dtsize').value); DrawLogo(); } function DragStart(evt) { var mh = $('mousehelper'); if (!mh.hasClass('invisible')) { inDrag = true; dragX = evt.page.x; dragY = evt.page.y; window.addEvent('mouseup',DragEnd); window.addEvent('touchmove',DragMove); } } function DragEnd(evt) { inDrag = false; var mh = $('mousehelper'); window.removeEvent('touchmove',DragMove); window.removeEvent('mouseup',DragEnd); } function DragMove(evt) { if (inDrag) { var dx = evt.page.x - dragX; var dy = evt.page.y - dragY; dragX = evt.page.x; dragY = evt.page.y; var mh = $('mousehelper'); if (!mh.hasClass('invisible')) { mhx += dx; mhy += dy; mh.setStyles({'top':mhy,'left':mhx}); } } } function DrawLogo() { var logo = new Element('img', {'src': 'c_none.png'}); logo.addEvent('load', function() { var screen = document.getElementById('screen'); var scaleWCoeficient = 0.5; var scaleHCoeficient = 0.5; var iw = this.width * scaleWCoeficient; var ih = this.height * scaleHCoeficient; var scale = (screen.height - 20) / ih; screen.getContext('2d').drawImage( this, 10, 10, Math.round(iw * scale), Math.round(ih * scale) ); }.bind(logo)); } function ResizeCanvas(sz) { var w, h; if (sz == 'auto') { w = window.getCoordinates().width; h = window.getCoordinates().height; if (RIMtablet) { // Toplevel bar not removable h -= 31; } if (w % 2) { w -= 1; } } else { var sza = sz.split('x'); var w = sza[0]; var h = sza[1]; } $('screen').width = w - 10; $('screen').height = h - 50; $('screen').style["margin"] = "0 auto"; } var sendDisconnect = function() { if (confirm('Закончить сессию ?')) { $('extracommands').setStyles({'visibility':'hidden'}); rdp.Disconnect(); window.close(); } } var altTabOn = false; function altTabEvent(){ if(altTabOn){ altTabOn = false; rdp.SendKey(2);//alt+tab release $('alttab').removeClass('extracommandshold'); } else{ altTabOn = true; rdp.SendKey(1);//alt+tab $('alttab').addClass('extracommandshold'); } } function showDialog(show) { if (show) { ShowMouseHelper(false); var dlg = $('maindialog'); var x = Math.round((window.getCoordinates().width - dlg.getCoordinates().width) / 2) + 'px'; var y = Math.round((window.getCoordinates().height - dlg.getCoordinates().height) / 2) + 'px'; $('extracommands').setStyles( { 'visibility':'hidden' }); $('dvLoading').setStyles( { 'visibility':'hidden' }); DrawLogo(); dlg.setStyles({ 'position': 'absolute', 'top': y, 'left': x, 'z-index': 999 }).removeClass('invisible'); } else { $('maindialog').addClass('invisible'); $('extracommands').setStyles( { 'visibility':'visible' }); $('ctrlaltdelete').addEvent('click', function(){ rdp.SendKey(0); }); $('alttab').addEvent('click', altTabEvent); $('disconnect').addEvent('click', sendDisconnect); } } function settingsGetJSON(){ var screen = document.getElementById('screen'); return { "backend_settings": { "host" : $('rdphost').value.trim() ,"port" : parseInt($('rdpport').value.trim()) ,"pcb" : $('rdppcb').value.trim() ,"user" : $('rdpuser').value.trim() ,"password" : $('rdppass').value ,"perf" : parseInt($('perf').value.trim()) ,"fntlm" : parseInt($('fntlm').value.trim()) ,"nowallp": parseInt($('nowallp').checked ? '1' : '0') ,"nowdrag": parseInt($('nowdrag').checked ? '1' : '0') ,"nomani" : parseInt($('nomani').checked ? '1' : '0') ,"notheme": parseInt($('notheme').checked ? '1' : '0') ,"nonla" : parseInt($('nonla').checked ? '1' : '0') ,"notls" : parseInt($('notls').checked ? '1' : '0') ,"dtsize" : screen.width + 'x' + screen.height } ,"session_settings": { "token" : location.search.substring(1) ,"proto" : "rdp" } }; }