const UI_INITIAL_GUI=200,UI_RELOAD=201,UPDATE_OFFSET=100,UI_EXTEND_GUI=210,UI_TITEL=0,UI_PAD=1,UPDATE_PAD=101,UI_CPAD=2,UPDATE_CPAD=102,UI_BUTTON=3,UPDATE_BUTTON=103,UI_LABEL=4,UPDATE_LABEL=104,UI_SWITCHER=5,UPDATE_SWITCHER=105,UI_SLIDER=6,UPDATE_SLIDER=106,UI_NUMBER=7,UPDATE_NUMBER=107,UI_TEXT_INPUT=8,UPDATE_TEXT_INPUT=108,UI_GRAPH=9,ADD_GRAPH_POINT=10,CLEAR_GRAPH=109,UI_TAB=11,UPDATE_TAB=111,UI_SELECT=12,UPDATE_SELECT=112,UI_OPTION=13,UPDATE_OPTION=113,UI_MIN=14,UPDATE_MIN=114,UI_MAX=15,UPDATE_MAX=115,UI_STEP=16,UPDATE_STEP=116,UI_GAUGE=17,UPDATE_GAUGE=117,UI_ACCEL=18,UPDATE_ACCEL=118,UI_SEPARATOR=19,UPDATE_SEPARATOR=119,UI_TIME=20,UPDATE_TIME=120,UI_FILEDISPLAY=21,UPDATE_FILEDISPLAY=121,UI_FRAGMENT=98,UP=0,DOWN=1,LEFT=2,RIGHT=3,CENTER=4,C_TURQUOISE=0,C_EMERALD=1,C_PETERRIVER=2,C_WETASPHALT=3,C_SUNFLOWER=4,C_CARROT=5,C_ALIZARIN=6,C_DARK=7,C_NONE=255;var websock,websockConnected,WebSocketTimer,rangeSlider,addToHTML,elementHTML,processEnabled,controlAssemblyArray=new Object,FragmentAssemblyTimer=new Array,graphData=new Array,hasAccel=!1,sliderContinuous=!1;function colorClass(e){switch(e=Number(e),e){case C_TURQUOISE:return"turquoise";case C_EMERALD:return"emerald";case C_PETERRIVER:return"peterriver";case C_WETASPHALT:return"wetasphalt";case C_SUNFLOWER:return"sunflower";case C_CARROT:return"carrot";case C_ALIZARIN:return"alizarin";case C_DARK:case C_NONE:return"dark";default:return""}}websockConnected=!1,WebSocketTimer=null;function requestOrientationPermission(){}function saveGraphData(){localStorage.setItem("espuigraphs",JSON.stringify(graphData))}function restoreGraphData(e){var t=localStorage.getItem("espuigraphs",graphData);if(t!=null){t=JSON.parse(t);let n=t[e];return Array.isArray(n)?n:[]}return[]}function restart(){$(document).add("*").off(),$("#row").html(""),conStatusError(),start()}function conStatusError(){FragmentAssemblyTimer.forEach(e=>{clearInterval(e)}),FragmentAssemblyTimer=new Array,controlAssemblyArray=new Array,!0===websockConnected&&(websockConnected=!1,websock.close(),$("#conStatus").removeClass("color-green"),$("#conStatus").addClass("color-red"),$("#conStatus").html("Error / No Connection ↻"),$("#conStatus").off(),$("#conStatus").on({click:restart}))}function handleVisibilityChange(){!websockConnected&&!document.hidden&&restart()}function start(){let n=window.location.hostname,e=window.location.port;document.addEventListener("visibilitychange",handleVisibilityChange,!1),e!=""||e!=80||e!=443?websock=new WebSocket("ws://"+n+":"+e+"/ws"):websock=new WebSocket("ws://"+n+"/ws"),null===WebSocketTimer&&(WebSocketTimer=setInterval(function(){websock.readyState===3&&restart()},5e3)),websock.onopen=function(){console.log("websock open"),$("#conStatus").addClass("color-green"),$("#conStatus").text("Connected"),websockConnected=!0,FragmentAssemblyTimer.forEach(e=>{clearInterval(e)}),FragmentAssemblyTimer=new Array,controlAssemblyArray=new Array},websock.onclose=function(){console.log("websock close"),conStatusError(),FragmentAssemblyTimer.forEach(e=>{clearInterval(e)}),FragmentAssemblyTimer=new Array,controlAssemblyArray=new Array},websock.onerror=function(){console.log("websock Error"),restart(),FragmentAssemblyTimer.forEach(e=>{clearInterval(e)}),FragmentAssemblyTimer=new Array,controlAssemblyArray=new Array};var t=function(e){try{var s,o,i,a,r,c,l,d,n=JSON.parse(e.data)}catch(e){console.error(e),websock.send("uiok:"+0);return}switch(l=document.body,d="",n.type){case UI_INITIAL_GUI:$("#row").html(""),$("#tabsnav").html(""),$("#tabscontent").html(""),n.sliderContinuous&&(sliderContinuous=n.sliderContinuous),n.controls.forEach(e=>{var n={data:JSON.stringify(e)};t(n)}),n.totalcontrols>n.controls.length-1&&websock.send("uiok:"+(n.controls.length-1));break;case UI_EXTEND_GUI:n.controls.forEach(e=>{var n={data:JSON.stringify(e)};t(n)}),n.totalcontrols>n.startindex+(n.controls.length-1)&&websock.send("uiok:"+(n.startindex+(n.controls.length-1)));break;case UI_RELOAD:window.location.reload();break;case UI_TITEL:document.title=n.label,$("#mainHeader").html(n.label);break;case UI_LABEL:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GAUGE:case UI_SEPARATOR:n.visible&&addToHTML(n);break;case UI_BUTTON:n.visible&&(addToHTML(n),$("#btn"+n.id).on({touchstart:function(e){e.preventDefault(),$(this).addClass("pressed"),buttonclick(n.id,!0)},touchend:function(e){e.preventDefault(),$(this).removeClass("pressed"),buttonclick(n.id,!1)}}));break;case UI_SWITCHER:n.visible&&(addToHTML(n),switcher(n.id,n.value));break;case UI_CPAD:case UI_PAD:n.visible&&(addToHTML(n),$("#pf"+n.id).on({touchstart:function(e){e.preventDefault(),$(this).parent().addClass("pressed"),padclick(UP,n.id,!0)},touchend:function(e){e.preventDefault(),$(this).parent().removeClass("pressed"),padclick(UP,n.id,!1)}}),$("#pl"+n.id).on({touchstart:function(e){e.preventDefault(),$(this).parent().addClass("pressed"),padclick(LEFT,n.id,!0)},touchend:function(e){e.preventDefault(),$(this).parent().removeClass("pressed"),padclick(LEFT,n.id,!1)}}),$("#pr"+n.id).on({touchstart:function(e){e.preventDefault(),$(this).parent().addClass("pressed"),padclick(RIGHT,n.id,!0)},touchend:function(e){e.preventDefault(),$(this).parent().removeClass("pressed"),padclick(RIGHT,n.id,!1)}}),$("#pb"+n.id).on({touchstart:function(e){e.preventDefault(),$(this).parent().addClass("pressed"),padclick(DOWN,n.id,!0)},touchend:function(e){e.preventDefault(),$(this).parent().removeClass("pressed"),padclick(DOWN,n.id,!1)}}),$("#pc"+n.id).on({touchstart:function(e){e.preventDefault(),$(this).addClass("pressed"),padclick(CENTER,n.id,!0)},touchend:function(e){e.preventDefault(),$(this).removeClass("pressed"),padclick(CENTER,n.id,!1)}}));break;case UI_SLIDER:n.visible&&(addToHTML(n),rangeSlider(!sliderContinuous));break;case UI_TAB:n.visible&&($("#tabsnav").append("
  • "+n.value+"
  • "),$("#tabscontent").append("
    "),$("#tablink"+n.id).on({touchend:function(){tabclick(n.id)},mouseup:function(){tabclick(n.id)}}),tabs=$(".tabscontent").tabbedContent({loop:!0}).data("api"),$("a").filter(function(){return $(this).attr("href")==="#click-to-switch"}).on("click",function(e){var t=prompt("Tab to switch to (number or id)?");tabs.switchTab(t)||alert("That tab does not exist :\\"),e.preventDefault()}));break;case UI_OPTION:n.parentControl&&(i=$("#select"+n.parentControl),i.append(""));break;case UI_MIN:n.parentControl&&($("#sl"+n.parentControl).length?$("#sl"+n.parentControl).attr("min",n.value):$("#num"+n.parentControl).length&&$("#num"+n.parentControl).attr("min",n.value));break;case UI_MAX:n.parentControl&&($("#sl"+n.parentControl).length?$("#sl"+n.parentControl).attr("max",n.value):$("#text"+n.parentControl).length?$("#text"+n.parentControl).attr("maxlength",n.value):$("#num"+n.parentControl).length&&$("#num"+n.parentControl).attr("max",n.value));break;case UI_STEP:n.parentControl&&($("#sl"+n.parentControl).length?$("#sl"+n.parentControl).attr("step",n.value):$("#num"+n.parentControl).length&&$("#num"+n.parentControl).attr("step",n.value));break;case UI_GRAPH:n.visible&&(addToHTML(n),graphData[n.id]=restoreGraphData(n.id),renderGraphSvg(graphData[n.id],"graph"+n.id));break;case ADD_GRAPH_POINT:a=(new Date).getTime(),graphData[n.id].push({x:a,y:n.value}),saveGraphData(),renderGraphSvg(graphData[n.id],"graph"+n.id);break;case CLEAR_GRAPH:graphData[n.id]=[],saveGraphData(),renderGraphSvg(graphData[n.id],"graph"+n.id);break;case UI_ACCEL:if(hasAccel)break;hasAccel=!0,n.visible&&(addToHTML(n),requestOrientationPermission());break;case UI_FILEDISPLAY:n.visible&&(addToHTML(n),FileDisplayUploadFile(n));break;case UPDATE_LABEL:$("#l"+n.id).html(n.value),n.hasOwnProperty("elementStyle")&&$("#l"+n.id).attr("style",n.elementStyle);break;case UPDATE_SWITCHER:switcher(n.id,n.value=="0"?0:1),n.hasOwnProperty("elementStyle")&&$("#sl"+n.id).attr("style",n.elementStyle);break;case UPDATE_SLIDER:$("#sl"+n.id).attr("value",n.value),slider_move($("#sl"+n.id).parent().parent(),n.value,"100",!1),n.hasOwnProperty("elementStyle")&&$("#sl"+n.id).attr("style",n.elementStyle);break;case UPDATE_NUMBER:$("#num"+n.id).val(n.value),n.hasOwnProperty("elementStyle")&&$("#num"+n.id).attr("style",n.elementStyle);break;case UPDATE_TEXT_INPUT:$("#text"+n.id).val(n.value),n.hasOwnProperty("elementStyle")&&$("#text"+n.id).attr("style",n.elementStyle),n.hasOwnProperty("inputType")&&$("#text"+n.id).attr("type",n.inputType);break;case UPDATE_SELECT:$("#select"+n.id).val(n.value),n.hasOwnProperty("elementStyle")&&$("#select"+n.id).attr("style",n.elementStyle);break;case UPDATE_BUTTON:$("#btn"+n.id).val(n.value),$("#btn"+n.id).text(n.value),n.hasOwnProperty("elementStyle")&&$("#btn"+n.id).attr("style",n.elementStyle);break;case UPDATE_PAD:case UPDATE_CPAD:break;case UPDATE_GAUGE:$("#gauge"+n.id).val(n.value),n.hasOwnProperty("elementStyle")&&$("#gauge"+n.id).attr("style",n.elementStyle);break;case UPDATE_ACCEL:break;case UPDATE_TIME:r=(new Date).toISOString(),websock.send("time:"+r+":"+n.id);break;case UPDATE_FILEDISPLAY:FileDisplayUploadFile(n);break;case UI_FRAGMENT:let l=n.length,s=n.offset,o=s+l,d=n.total,u=l+s,h=d===u;if(!n.hasOwnProperty("control")){console.error("UI_FRAGMENT:Missing control record, skipping control");break}let e=n.control;if(StopFragmentAssemblyTimer(n.control.id),0===s){controlAssemblyArray[e.id]=n,controlAssemblyArray[e.id].offset=o,StartFragmentAssemblyTimer(e.id);let t=JSON.stringify({id:e.id,offset:o});websock.send("uifragmentok:"+0+": "+t+":");break}if("undefined"==typeof controlAssemblyArray[e.id]){console.error("Missing first fragment for control: "+e.id),StartFragmentAssemblyTimer(e.id);let t=JSON.stringify({id:e.id,offset:0});websock.send("uifragmentok:"+0+": "+t+":");break}if(s!==controlAssemblyArray[e.id].offset){console.error("Wrong next fragment. Expected: "+controlAssemblyArray[e.id].offset+" Got: "+s),StartFragmentAssemblyTimer(e.id);let t=JSON.stringify({id:e.id,offset:controlAssemblyArray[e.id].length+controlAssemblyArray[e.id].offset});websock.send("uifragmentok:"+0+": "+t+":");break}if(controlAssemblyArray[e.id].control.value+=e.value,controlAssemblyArray[e.id].offset=o,!0===h)c={data:JSON.stringify(controlAssemblyArray[e.id].control)},t(c),controlAssemblyArray[e.id]=null;else{StartFragmentAssemblyTimer(e.id);let t=JSON.stringify({id:e.id,offset:o});websock.send("uifragmentok:"+0+": "+t+":")}break;default:console.error("Unknown type or event");break}n.type>=UI_TITEL&&n.type=UPDATE_OFFSET&&n.type0){var t,n=$(e.hasOwnProperty("parentControl")?"#tab"+e.parentControl:"#row"),s="";switch(e.type){case UI_LABEL:case UI_BUTTON:case UI_SWITCHER:case UI_CPAD:case UI_PAD:case UI_SLIDER:case UI_NUMBER:case UI_TEXT_INPUT:case UI_SELECT:case UI_GRAPH:case UI_GAUGE:case UI_ACCEL:case UI_FILEDISPLAY:t="two columns "+panelwide+" card tcenter "+colorClass(e.color),s="
    "+e.label+"

    "+elementHTML(e)+"
    ";break;case UI_SEPARATOR:t="sectionbreak columns",s="
    "+e.label+"

    ";break;case UI_TIME:break}n.append(s)}else n=$("#id"+e.parentControl),n.append(elementHTML(e))},elementHTML=function(e){var t=e.id,n=e.hasOwnProperty("elementStyle")?" style='"+e.elementStyle+"' ":"",s=e.hasOwnProperty("inputType")?" type='"+e.inputType+"' ":"";switch(e.type){case UI_LABEL:return""+e.value+"";case UI_FILEDISPLAY:return"";case UI_BUTTON:return"";case UI_SWITCHER:return"";case UI_CPAD:case UI_PAD:return"";case UI_SLIDER:return"
    "+e.value+"
    ";case UI_NUMBER:return"";case UI_TEXT_INPUT:return"";case UI_SELECT:return"";case UI_ACCEL:return"ACCEL // Not implemented fully!
    ";default:return""}},processEnabled=function(e){switch(e.type){case UI_SWITCHER:case UPDATE_SWITCHER:e.enabled?($("#sl"+e.id).removeClass("disabled"),$("#s"+e.id).prop("disabled",!1)):($("#sl"+e.id).addClass("disabled"),$("#s"+e.id).prop("disabled",!0));break;case UI_SLIDER:case UPDATE_SLIDER:$("#sl"+e.id).prop("disabled",!e.enabled);break;case UI_NUMBER:case UPDATE_NUMBER:$("#num"+e.id).prop("disabled",!e.enabled);break;case UI_TEXT_INPUT:case UPDATE_TEXT_INPUT:$("#text"+e.id).prop("disabled",!e.enabled);break;case UI_SELECT:case UPDATE_SELECT:$("#select"+e.id).prop("disabled",!e.enabled);break;case UI_BUTTON:case UPDATE_BUTTON:$("#btn"+e.id).prop("disabled",!e.enabled);break;case UI_PAD:case UI_CPAD:case UPDATE_PAD:case UPDATE_CPAD:case UI_FILEDISPLAY:case UPDATE_FILEDISPLAY:e.enabled?$("#id"+e.id+" nav").removeClass("disabled"):$("#id"+e.id+" nav").addClass("disabled");break}}