var LN = (function(){ var appInterface; var defaultOptions = { url: null, wsUpdate: null, }; class LNInterface { constructor(opt){ var self = this; this.options = {} Object.assign(this.options,opt); if (this.options.url == null) this.options.url = this.constructURL(); this.rpcCallbacks = []; this.rpcNextID = 1; } connect(){ var self = this; this.close(); this.websocket = new WebSocket(this.options.url); this.websocket.onclose = function(e){ self.options.wsClose && self.options.wsClose(e); } this.websocket.onerror = function(e){ self.options.wsError && self.options.wsError(e); } this.websocket.onmessage = function(e){ try{ var j = JSON.parse(e.data); if (j.state){ self.options.wsUpdate && self.options.wsUpdate(j.state); } else if (j.id) { for (var n=0;n cb(x.responseText,null); x.onerror = () => cb(null, { status: x.status, statusText: x.statusText }); x.open("GET", url); x.send(); } } close(){ try { this.websocket && this.websocket.close(); } catch (e){ } this.websocket = null; } option(optname,optvalue){ if (arguments.length == 1) { return this.options[optname]; } else { this.options[optname] = optvalue; return this; } } constructURL(){ var pageURI = window.location; var scheme = pageURI.scheme == "https" ? "wss:" : "ws:"; var host = pageURI.host; return scheme + "//" + host + "/socket"; } } return function(options){ if (!appInterface) appInterface = new LNInterface(options); return appInterface; }; })(); /* Object.values = function(o) { var values = []; for(var property in o) { values.push(o[property]); } return values; } function encodeID( t ) { return ("" + t).replace( /[\.\/]/g, "_"); } var lagDetector = null; function updateState(state) { try { if (lagDetector) clearTimeout(lagDetector); $("#ServerTime").text("ServerTime: " + moment(state.currentTime).format()); lagDetector = setTimeout(function(){ $("#ServerTime").text("Server lag detected"); }, 2000); } catch (e) { $("#ServerTime").text("Server state unexpected!"); } } function SKYAPI(baseurl){ this.baseurl = baseurl; this.refresh = [] this.websocket = new WebSocket("ws://localhost:8080/socket"); this.websocket.onerror = function(e){ alert("WebSocket Error: " + e); } this.websocket.onmessage = function(e){ var j = JSON.parse(e.data); if (j.state){ updateState(j.state); } } this.setBaseURL = function(url){ this.baseurl = url; } this.addRefresh = function( rh, seconds = null ){ this.refresh.push( { interval: seconds ? seconds : 5, refresh: rh } ); } this.get = function(page, json, handler = null){ return this.__request("GET", page, json, handler); } this.post = function(page, json, handler = null){ return this.__request("POST", page, json, handler); } this.put = function(page, json, handler = null){ return this.__request("PUT", page, json, handler); } this.__request = function(method, page, json, handler = null){ if (page[0] == '/') page = page.substr(1); var x = new XMLHttpRequest(); if (handler != null) { x.onload = function(){ var responseText = x.responseText; if (json && !content) handler( JSON.parse( responseText ) ); else handler( responseText ); } } x.open(method, this.baseurl + page); if (json) x.send(JSON.stringify(json)); else x.send(); } this.getJson = function(page, handler){ var j = function(t){ handler(JSON.parse(t)); }; return this.get( page, null, j ); } this.call = function(endpoint,method,parameters = [], receiver = null){ var x = new XMLHttpRequest(); x.open("POST", this.baseurl + endpoint, (receiver != null)); x.setRequestHeader("content-type","application/json"); if (receiver) { x.onload = function(){ var r = JSON.parse(this.responseText).Result; receiver(r); } x.onerror = function(){ receiver(false); } } var methodCall = { "MethodName": method, "Parameters": parameters } x.send(JSON.stringify(methodCall)); if (!receiver) { var result = JSON.parse(x.responseText); if (result.Exception != null) throw result.Exception; return result.Result; } return x; } this.loadPage = function (page) { if (page[0] == '/') page = page.substr(1); var x = new XMLHttpRequest(); x.open("GET", this.baseurl + page); x.setRequestHeader("x-template-unframed","unframed"); x.onload = function() { $("#content").empty(); $("#content").append(this.responseText); history.pushState(null, page, skyapi().baseurl + page); } this.refresh = [] x.send(); return false; } this.fireOnLoad = function(element){ if (element.onload != null) { element.onload(); } for (var n=0;n 1000000000) return ((value / 1000000000) | 0) + "G"; if (value > 1000000) return ((value / 1000000) | 0) + "M"; if (value > 1000) return ((value / 1000) | 0) + "k"; return value; } */