(function() { var ConnectionDialog, CredentialDialog, RemoteDesktop; ConnectionDialog = class ConnectionDialog extends this.OS.GUI.BasicDialog { constructor() { super("ConnectionDialog", { tags: [ { tag: "afx-label", att: 'text="__(VNC server)" data-height="23" class="header"' }, { tag: "input", att: 'data-height="30"' }, { tag: "afx-label", att: 'text="__(Bits per pixel)" data-height="23" class="header"' }, { tag: "afx-list-view", att: 'dropdown="true" data-height="30"' }, { tag: "afx-label", att: 'text="__(Compression)" data-height="23" class="header"' }, { tag: "afx-list-view", att: 'dropdown="true" data-height="30"' }, { tag: "afx-label", att: 'text="__(JPEG quality)" data-height="23" class="header"' }, { tag: "afx-slider", att: 'max="100" data-height="30"' }, { tag: "div", att: ' data-height="5"' } ], width: 350, height: 280, resizable: false, buttons: [ { label: "__(Connect)", onclick: function(d) { var data; if (!d.handler) { return; } data = { server: (d.find("content1")).value, bbp: ((d.find("content3")).get("selected")).value, flag: ((d.find("content5")).get("selected")).value, quality: (d.find("content7")).get("value") }; d.handler(data); return d.quit(); } }, { label: "__(Cancel)", onclick: function(d) { return d.quit(); } } ], filldata: function(d) { (d.find("content1")).value = "/opt/www/vnc.conf"; (d.find("content3")).set("items", [ { text: "16 bits", value: 16 }, { text: "32 bits", value: 32, selected: true } ]); (d.find("content5")).set("items", [ { text: "No compression", value: 0 }, { text: "JPEG", value: 1 }, { text: "zLib", value: 2 }, { text: "JPEG & zLib", value: 3, selected: true } ]); return (d.find("content7")).set("value", 40); } }); } }; CredentialDialog = class CredentialDialog extends this.OS.GUI.BasicDialog { constructor() { super("ConnectionDialog", { tags: [ { tag: "afx-label", att: 'text="__(User name)" data-height="23" class="header"' }, { tag: "input", att: 'data-height="30"' }, { tag: "afx-label", att: 'text="__(Password)" data-height="23" class="header"' }, { tag: "input", att: 'data-height="30" type="password"' }, { tag: "div", att: ' data-height="5"' } ], width: 350, height: 150, resizable: false, buttons: [ { label: "__(Ok)", onclick: function(d) { var data; if (!d.handler) { return d.quit(); } data = { username: (d.find("content1")).value, password: (d.find("content3")).value }; d.handler(data); return d.quit(); } }, { label: "__(Cancel)", onclick: function(d) { return d.quit(); } } ], filldata: function(d) { (d.find("content1")).value = "demo"; return (d.find("content3")).value = "demo"; } }); } }; RemoteDesktop = class RemoteDesktop extends this.OS.GUI.BaseApplication { constructor(args) { super("RemoteDesktop", args); } main() { var me; me = this; this.canvas = this.find("screen"); this.container = this.find("container"); this.client = new WVNC({ element: me.canvas, ws: 'wss://lxsang.me/wvnc', worker: `${me._api.handler.get}/${(me.meta().path)}/decoder.js` }); this.client.onerror = function(m) { me.error(m); return me.showConnectionDialog(); }; this.client.onresize = function() { return me.setScale(); }; this.client.onpassword = function() { return new Promise(function(r, e) { return me.openDialog("PromptDialog", function(d) { return r(d); }, __("VNC password"), { label: __("VNC password"), value: "demopass", type: "password" }); }); }; this.client.oncredential = function() { return new Promise(function(r, e) { return me.openDialog(new CredentialDialog, function(d) { return r(d.username, d.password); }, __("User credential")); }); }; this.on("resize", function(e) { return me.setScale(); }); this.on("focus", function(e) { return $(me.canvas).focus(); }); return this.client.init().then(function() { return me.showConnectionDialog(); }); } setScale() { var h, sx, sy, w; if (!(this.client && this.client.resolution)) { return; } w = $(this.container).width(); h = $(this.container).height(); sx = w / this.client.resolution.w; sy = h / this.client.resolution.h; if (sx > sy) { return this.client.setScale(sy); } else { return this.client.setScale(sx); } } menu() { var me; me = this; return [ { text: "__(Connection)", child: [ { text: "__(New Connection)", dataid: `${this.name}-new` }, { text: "__(Disconnect)", dataid: `${this.name}-close` } ], onmenuselect: function(e) { return me.actionConnection(); } } ]; } actionConnection(e) { if (this.client) { this.client.disconnect(); } return this.showConnectionDialog(); } showConnectionDialog() { var me; me = this; return this.openDialog(new ConnectionDialog, function(d) { return me.client.connect(d.server, d); }, __("Connection")); } cleanup() { if (this.client) { return this.client.disconnect(); } } }; this.OS.register("RemoteDesktop", RemoteDesktop); }).call(this); (function(){var e;e=function(){function e(e){var t,n;this.socket=void 0,this.ws=void 0,this.canvas=void 0,n="decoder.js",this.scale=1,e.ws&&(this.ws=e.ws),this.canvas=e.element,"string"==typeof this.canvas&&(this.canvas=document.getElementById(this.canvas)),e.worker&&(n=e.worker),this.decoder=new Worker(n),this.enableEvent=!0,(t=this).mouseMask=0,this.decoder.onmessage=function(e){return t.process(e.data)}}return e.prototype.init=function(){var n;return n=this,new Promise(function(e,t){return n.canvas?($(n.canvas).attr("tabindex","1"),n.initInputEvent(),e()):t("Canvas is not set")})},e.prototype.initInputEvent=function(){var e,n,o,s;if((o=this).canvas&&(n=function(e){var t;return t=o.canvas.getBoundingClientRect(),{x:Math.floor((e.clientX-t.left)/o.scale),y:Math.floor((e.clientY-t.top)/o.scale)}},s=function(e){var t;if(o.enableEvent)return t=n(e),o.sendPointEvent(t.x,t.y,o.mouseMask)},o.canvas))return o.canvas.oncontextmenu=function(e){return e.preventDefault(),!1},o.canvas.onmousemove=function(e){return s(e)},o.canvas.onmousedown=function(e){var t;return t=1<>8,o[2]=255&t,o[3]=t>>8,o[4]=n,this.socket.send(this.buildCommand(5,o))},e.prototype.sendKeyEvent=function(e,t){var n;if(this.socket&&this.enableEvent)return(n=new Uint8Array(3))[0]=255&e,n[1]=e>>8,n[2]=t,this.socket.send(this.buildCommand(6,n))},e.prototype.buildCommand=function(e,t){var n,o;switch(o=void 0,typeof t){case"string":o=(new TextEncoder).encode(t);break;case"number":o=new Uint8Array([t]);break;default:o=t}return(n=new Uint8Array(o.length+3))[0]=e,n[2]=o.length>>8,n[1]=15&o.length,n.set(o,3),n.buffer},e.prototype.oncopy=function(e){return console.log("Get clipboard text: "+e)},e.prototype.onpassword=function(){return new Promise(function(e,t){return t("onpassword is not implemented")})},e.prototype.sendTextAsClipboard=function(e){if(this.socket)return console.log("send ",e),this.socket.send(this.buildCommand(7,e))},e.prototype.oncredential=function(){return new Promise(function(e,t){return t("oncredential is not implemented")})},e.prototype.onerror=function(e){return console.log("Error",e)},e.prototype.onresize=function(){return console.log("resize")},e.prototype.consume=function(e){var t,n,o,s,a,r,i;switch(t=(n=new Uint8Array(e.data))[0],r=this,t){case 254:return n=n.subarray(1,n.length-1),o=new TextDecoder("utf-8"),this.onerror(o.decode(n));case 129:return console.log("Request for password"),this.enableEvent=!1,this.onpassword().then(function(e){return r.socket.send(r.buildCommand(2,e)),r.enableEvent=!0});case 130:return console.log("Request for login"),this.enableEvent=!1,this.oncredential().then(function(e,t){var n;return(n=new Uint8Array(e.length+t.length+1)).set((new TextEncoder).encode(e),0),n.set(["\0"],e.length),n.set((new TextEncoder).encode(t),e.length+1),r.socket.send(r.buildCommand(3,n)),r.enableEvent=!0});case 131:return i=n[1]|n[2]<<8,a=n[3]|n[4]<<8,s=n[5],this.initCanvas(i,a,s),this.socket.send(this.buildCommand(4,1)),this.onresize();case 132:return this.decoder.postMessage(n.buffer,[n.buffer]);case 133:return n=n.subarray(1),o=new TextDecoder("utf-8"),this.oncopy(o.decode(n)),this.socket.send(this.buildCommand(4,1));default:return console.log(t)}},e}(),window.WVNC=e}).call(this);