1 line
41 KiB
JavaScript
1 line
41 KiB
JavaScript
var __spreadArray=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||((o=o||Array.prototype.slice.call(t,0,r))[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))},ActionEditor={elements:{up:{container:document.querySelector(".event.up"),selector:document.querySelector(".event.up").querySelector(".actionselector"),actions:document.querySelector(".event.up").querySelector(".actions")},down:{container:document.querySelector(".event.down"),selector:document.querySelector(".event.down").querySelector(".actionselector"),actions:document.querySelector(".event.down").querySelector(".actions")},latch:{container:document.querySelector(".event.toggle"),selector:document.querySelector(".event.toggle").querySelector(".tlatch").querySelector(".actionselector"),actions:document.querySelector(".event.toggle").querySelector(".tlatch").querySelector(".actions")},unlatch:{container:document.querySelector(".event.toggle"),selector:document.querySelector(".event.toggle").querySelector(".tunlatch").querySelector(".actionselector"),actions:document.querySelector(".event.toggle").querySelector(".tunlatch").querySelector(".actions")}},openEditors:{up:{},down:{},latch:{},unlatch:{}},listeners:function(){function n(e,t,n){socket.emit("actioneditor","create",PageHandler.currentPageID,Editor.currentX,Editor.currentY,n,e,t,function(e){ActionEditor.openAction(e,n)})}ActionSelector?(ActionSelector.register(ActionEditor.elements.up.selector,function(e,t){return n(e,t,"up")}),ActionSelector.register(ActionEditor.elements.down.selector,function(e,t){return n(e,t,"down")}),ActionSelector.register(ActionEditor.elements.latch.selector,function(e,t){return n(e,t,"latch")}),ActionSelector.register(ActionEditor.elements.unlatch.selector,function(e,t){return n(e,t,"unlatch")})):setTimeout(ActionEditor.listeners,100)},open:function(e,t,n,o,r){for(var i in e)for(var l in ActionEditor.elements[i].actions.innerHTML="",e[i])ActionEditor.openAction(e[i][l],i)},openAction:function(e,t){var n=e.actionInstanceID,o=ce("div","actioncontainer",{actionInstanceID:n}),r=ce("div","header"),i=(r.appendChild(ce("div","integration",null,ActionSelector.maps.integrationNames[e.integrationID])),r.appendChild(ce("div","action",null,ActionSelector.maps.actionNames[e.actionID])),ce("div","buttons")),l=ce("div",["btn","logs"],null,"Logs"),c=(l.onclick=function(){return UndeckedNotification("Not implented yet","error")},ce("div",["btn","remove"],null,"Remove")),l=(c.onclick=function(){o.parentElement&&o.parentElement.removeChild(o),null!=ActionEditor.openEditors[t]&&null!=ActionEditor.openEditors[t][n]&&ActionEditor.openEditors[t][n].destroy(),socket.emit("actioneditor","remove",PageHandler.currentPageID,Editor.currentX,Editor.currentY,n,t),Editor.registerChange()},i.appendChild(l),i.appendChild(c),r.appendChild(i),o.appendChild(r),ce("div","fields"));o.appendChild(l),ActionEditor.elements[t].actions.appendChild(o),ActionEditor.openEditors[t][n]=new Action({integrationID:e.integrationID,actionID:e.actionID,actionType:t,keyX:Editor.currentX,keyY:Editor.currentY,actionInstanceID:n,pageID:PageHandler.currentPageID},l)},close:function(){for(var e in ActionEditor.openEditors)for(var t in ActionEditor.openEditors[e])ActionEditor.openEditors[e][t].destroy();ActionEditor.elements.up.actions.innerHTML="",ActionEditor.elements.down.actions.innerHTML=""}},Action=(ActionEditor.listeners(),function(){function e(e,t){var o=this;this.settings=e,this.container=t,socket.emit("actioneditor","start",this.settings,function(e,t,n){if(e)return UndeckedNotification(e,"error",5e3);o.actionEditorID=t,o.listeners(),o.emit("ready")})}return e.prototype.emit=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];socket.emit.apply(socket,__spreadArray(["actioneditor","instance",this.actionEditorID,e],t,!1))},e.prototype.listeners=function(){var r=this;socket.on("AE_".concat(this.actionEditorID),function(e){for(var t,n=[],o=1;o<arguments.length;o++)n[o-1]=arguments[o];"fields"===e&&(t=n[0],r.render(t))})},e.prototype.destroy=function(){this.container&&this.container.parentElement&&this.container.parentElement.removeChild(this.container),this.emit("close")},e.prototype.render=function(e){function m(e,t){var n=null!=e&&0<e.length?e.map(function(e){return h[e]}).join(", "):"None";t.innerHTML="",t.appendChild(ce("option","mutli",{value:e.join(",")},n))}function y(e){var n=[];return e.querySelectorAll(".option").forEach(function(e){var t=e.querySelector("input"),e=e.getAttribute("optionID");t.checked&&n.push(e)}),n}var f=this,h={};e.forEach(function(o){var e=f.container.querySelector(".field_".concat(o.id)),t=(null==e&&(e=ce("div",["field","field_".concat(o.id)]),f.container.appendChild(e)),e.querySelector(".fieldlabel"));if(null==t?(t=ce("div","fieldlabel",null,"".concat(o.name).concat(o.required?" *":"")),e.appendChild(t)):t.innerText="".concat(o.name).concat(o.required?" *":""),null==(r=e.querySelector(".input"))){switch(o.type){case"number":case"text":case"color":r=ce("input","input",{type:o.type,value:o.value}),e.appendChild(r);break;case"select":case"connection":if(null!=o.multi&&1==o.multi){var r,n=ce("div",["multiselect"]),i=((r=ce("select",["input","multiinput"])).onmouseup=function(e){e.preventDefault(),e.stopPropagation(),i.style.display="block",r.classList.add("open");function t(e){!e.target||(e=e.target).classList.contains("msdp")||e.classList.contains("multiinput")||(window.removeEventListener("click",t),i.style.display="none",r.classList.remove("open"))}window.addEventListener("click",t)},r.onmousedown=function(e){e.preventDefault(),e.stopPropagation()},n.appendChild(r),ce("div",["dropdown","msdp"])),l=ce("div",["inner","msdp"]);if(i.appendChild(l),n.appendChild(i),null!=o.values&&0<o.values.length)for(var c=0;c<o.values.length;c++)!function(e){var t,n;t=o.values[e],h[t.id]=o.values[e].text,e=ce("div",["option","msdp"],{optionID:t.id}),(n=ce("input","msdp",{type:"checkbox"})).checked=null!=o.value&&o.value.includes(t.id),e.onclick=function(){n.checked=!n.checked,m(y(l),r),f.emit("fields",f.export())},e.appendChild(n),e.appendChild(ce("div",["text","msdp"],null,t.text)),l.appendChild(e)}(c);m(o.value,r),e.appendChild(n)}else{if(r=ce("select","input"),null!=o.values&&0<o.values.length)for(c=0;c<o.values.length;c++){var a=ce("option",null,{value:o.values[c].id},o.values[c].text);o.value==o.values[c].id&&a.setAttribute("selected",""),r.appendChild(a)}e.appendChild(r)}}r&&(r.oninput=function(){return f.emit("fields",f.export())})}else if(r.value=o.value,"select"==o.type||"connection"==o.type){var s=[];if(null!=o.multi&&1==o.multi){var u=r.parentElement.querySelector(".inner");if(null!=o.values&&0<o.values.length)for(var d,c=0;c<o.values.length;c++)!function(e){var t,n;p=o.values[e],d=u.querySelector('.option[optionid="'.concat(p.id,'"]')),s.push(p.id),d?d.querySelector(".text").innerText=p.text:(h[(t=p).id]=o.values[e].text,e=ce("div",["option","msdp"],{optionID:t.id}),(n=ce("input","msdp",{type:"checkbox"})).checked=null!=o.value&&o.value.includes(t.id),e.onclick=function(){n.checked=!n.checked,m(y(u),r),f.emit("fields",f.export())},e.appendChild(n),e.appendChild(ce("div",["text","msdp"],null,t.text)),u.appendChild(e))}(c);else u.innerHTML="";u.querySelectorAll(".option").forEach(function(e){var t=e.getAttribute("optionID"),n=e.querySelector("input");s.includes(t)?n.checked=o.value.includes(t):e.parentElement.removeChild(e)})}else{if(null!=o.values&&0<o.values.length)for(c=0;c<o.values.length;c++){var p=o.values[c],g=r.querySelector('option[value="'.concat(p.id,'"]'));g?g.innerText=p.text:(g=ce("option",null,{value:p.id},p.text),r.appendChild(g)),s.push(p.id)}else r.innerHTML="";r.querySelectorAll("option").forEach(function(e){var t=e.getAttribute("value");e.removeAttribute("selected"),s.includes(t)?o.value==e&&e.setAttribute("selected",""):e.parentElement.removeChild(e)})}}}),this.lastFields=e},e.prototype.export=function(){for(var e=JSON.parse(JSON.stringify(this.lastFields)),t=0;t<e.length;t++){var n=e[t],n=this.container.querySelector(".field_".concat(n.id));!n||(n=n.querySelector(".input"))&&(n.classList.contains("multiinput")?e[t].value=n.value.split(","):e[t].value=n.value)}return e},e}()),ActionSelector={elements:{actiondialog:document.querySelector(".actiondialog")},fadeTimeout:null,maps:{integrationNames:{},actionNames:{}},init:function(){ActionSelector.elements.actiondialog.querySelectorAll(".item").forEach(function(e){var t=e.getAttribute("integrationID"),n=e.getAttribute("actionID"),o=e.querySelector(".integration").innerText.trim(),e=e.querySelector(".action").innerText.trim();null==ActionSelector.maps.integrationNames[t]&&(ActionSelector.maps.integrationNames[t]=o),null==ActionSelector.maps.actionNames[n]&&(ActionSelector.maps.actionNames[n]=e)})},register:function(e,t){e.onfocus=function(){return ActionSelector.show(e,t)},e.onblur=function(){return setTimeout(ActionSelector.hide,200)},e.oninput=function(){return ActionSelector.search(e.value)}},show:function(o,r){clearTimeout(ActionSelector.fadeTimeout),ActionSelector.search("");var e=o.getBoundingClientRect();ActionSelector.elements.actiondialog.style.top="".concat(e.top-31,"px"),ActionSelector.elements.actiondialog.style.left="".concat(e.left-10,"px"),ActionSelector.elements.actiondialog.style.width="".concat(e.width-4,"px"),ActionSelector.elements.actiondialog.style.maxHeight="".concat(Math.min(window.innerHeight-e.top,200),"px"),ActionSelector.elements.actiondialog.style.display="flex",ActionSelector.elements.actiondialog.style.transitionDuration=".3s",ActionSelector.elements.actiondialog.style.opacity="1",ActionSelector.elements.actiondialog.style.pointerEvents="auto",ActionSelector.elements.actiondialog.querySelectorAll(".item").forEach(function(n){n.onclick=function(){var e=n.getAttribute("integrationID"),t=n.getAttribute("actionID");r(e,t),o.value=""}})},hide:function(){ActionSelector.elements.actiondialog.style.transitionDuration=".3s",ActionSelector.elements.actiondialog.style.opacity="0",ActionSelector.elements.actiondialog.style.pointerEvents="none",clearTimeout(ActionSelector.fadeTimeout),ActionSelector.fadeTimeout=setTimeout(function(){ActionSelector.elements.actiondialog.style.display="none"},300)},search:function(o){ActionSelector.elements.actiondialog.querySelectorAll(".item").forEach(function(e){var t=e.querySelector(".integration"),n=e.querySelector(".action"),t=t.innerText.toLowerCase(),n=n.innerText.toLowerCase();o=o.toLowerCase(),t.includes(o)||n.includes(o)||0==o.length?e.classList.remove("hidden"):e.classList.add("hidden")})}},UndeckedClipboard=(ActionSelector.init(),new(function(){function e(){}return e.prototype.hasKeyInClipboard=function(){return null!=localStorage.getItem("clipboard")&&0<localStorage.getItem("clipboard").length},e.prototype.copyKey=function(e,t){localStorage.setItem("clipboard","key_copy_".concat(PageHandler.currentPageID,".").concat(e,".").concat(t)),UndeckedNotification("Key has been copied to clipboard")},e.prototype.copyGhostKey=function(e,t){localStorage.setItem("clipboard","key_ghost_".concat(PageHandler.currentPageID,".").concat(e,".").concat(t)),UndeckedNotification("Key has been copied to clipboard as a ghost")},e.prototype.cutKey=function(e,t){localStorage.setItem("clipboard","key_cut_".concat(PageHandler.currentPageID,".").concat(e,".").concat(t)),UndeckedNotification("Key has been cut to clipboard")},e.prototype.pasteKey=function(e,t){var n;this.hasKeyInClipboard()&&"key"==(n=this.decodeClipboard()).elementType&&(socket.emit("page","operation",n.operationType,n.id,n.x,n.y,PageHandler.currentPageID,e,t),"cut"==n.operationType&&localStorage.setItem("clipboard",""))},e.prototype.decodeClipboard=function(){var e,t={elementType:null,operationType:null,id:null,x:null,y:null};return this.hasKeyInClipboard()&&(e=localStorage.getItem("clipboard").split("_"),t.elementType=e[0],t.operationType=e[1],e=e[2].split("."),t.id=e[0],t.x=e[1],t.y=e[2]),t},e}())),responseToken=Math.random().toString(16).substr(2,8),socket=io("/"),fontSizeRatio=(socket.on("connect",function(){console.log("Connected to server"),socket.emit("init","home")}),null),renderQuality=null,__spreadArray=(socket.on("quality",function(t){document.querySelectorAll("canvas.ready").forEach(function(e){e.width=t,e.height=t;e=e.getContext("2d");e.textBaseline="middle",e.textAlign="center"}),fontSizeRatio=(renderQuality=t)/100}),socket.on("pagelist",function(t){!function e(){null!=fontSizeRatio?PageList.render(t):setTimeout(e,100)}()}),socket.on("connectedlist",function(e){return Connections.renderConnected(e)}),socket.on("page",function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];switch(e){case"updatename":var o=t[0],r=t[1];PageList.updateName(o,r);break;case"updatekey":var o=t[0],r=t[1],i=t[2],l=t[3],c=t[4];PageHandler.currentPageID==o&&(null!=PageHandler.currentPage.keys[i]&&null!=PageHandler.currentPage.keys[i][r]&&(PageHandler.currentPage.keys[i][r]=l),responseToken!=c&&(KeyHandler.render(r,i,l),null!=Editor.currentKey&&Editor.currentKey.id==l.id&&Editor.open(r,i,l)))}}),this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||((o=o||Array.prototype.slice.call(t,0,r))[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}),Connections={elements:{connectionbrowser:document.querySelector(".connectionbrowser"),table:document.querySelector(".connectedtable"),dialog:{container:document.querySelector(".connectiondialog"),dialog:document.querySelector(".connectiondialog").querySelector(".dialog"),fields:document.querySelector(".connectiondialog").querySelector(".fields"),message:document.querySelector(".connectiondialog").querySelector(".message"),link:document.querySelector(".connectiondialog").querySelector(".link"),cancel:document.querySelector(".connectiondialog").querySelector(".cn"),connect:document.querySelector(".connectiondialog").querySelector(".co")}},init:function(){Connections.elements.connectionbrowser.querySelectorAll(".available").forEach(function(e){var t=e.getAttribute("integrationID"),n=e.getAttribute("connectionType");e.querySelector(".button").onclick=function(){return Connections.requestNewDevice(t,n)}})},requestNewDevice:function(t,n){socket.emit("connections","request",t,n,function(e){e.fields&&0<e.fields.length?Connections.openDialog(t,n,e):UndeckedNotification("Unable to add a new device of this type.","error",5e3)})},openDialog:function(o,r,e){Connections.elements.dialog.fields.innerHTML="";e.fields=__spreadArray([{id:"_internal_name",name:"Connection Name",type:"text"}],e.fields,!0),null!=e.message?(Connections.elements.dialog.message.style.display="block",Connections.elements.dialog.message.innerText=e.message):Connections.elements.dialog.message.style.display="none",null!=e.link?(Connections.elements.dialog.link.style.display="inline-block",Connections.elements.dialog.link.innerText=e.link.title,Connections.elements.dialog.link.href=e.link.address):Connections.elements.dialog.link.style.display="none",e.fields.forEach(function(e){var t=ce("div",["field","field_".concat(e.id)]),n=(Connections.elements.dialog.fields.appendChild(t),ce("div","fieldlabel",null,"".concat(e.name))),o=(t.appendChild(n),null);switch(e.type){case"number":case"text":o=ce("input","input",{type:e.type,fieldID:e.id}),null!=e.value&&(o.value=e.value),t.appendChild(o);break;case"select":if(o=ce("select","input",{fieldID:e.id}),null!=e.values&&0<e.values.length)for(var r=0;r<e.values.length;r++){var i=ce("option",null,{value:e.values[r].id},e.values[r].text);null!=e.value&&e.values[r].id==e.value&&i.setAttribute("selected",""),o.appendChild(i)}t.appendChild(o)}}),Connections.elements.dialog.cancel.onclick=Connections.closeDialog,Connections.elements.dialog.connect.onclick=function(){for(var e={},t=Connections.elements.dialog.fields.querySelectorAll(".input"),n=0;n<t.length;n++)t[n].hasAttribute("fieldID")&&(e[t[n].getAttribute("fieldID")]=t[n].value);Connections.elements.dialog.dialog.style.display="none",socket.emit("connections","create",o,r,e,function(e,t){1==e?Connections.closeDialog():(Connections.elements.dialog.dialog.style.display="block",UndeckedNotification(null!=t?t:"Unable to validate connection","error",5e3))})},Connections.elements.dialog.dialog.style.display="block",Connections.elements.dialog.container.style.display="flex"},closeDialog:function(){Connections.elements.dialog.container.style.display="none"},renderConnected:function(e){for(var t=Connections.elements.table,n=0;n<e.length;n++){var o,r,i,l=e[n];null==t.querySelector('tr[connectionid="'.concat(l.connectionID,'"]'))&&(o=ce("tr",null,{connectionID:l.connectionID}),r=ce("td","status"),(i=ce("div","statuscontainer")).appendChild(ce("div",["value","online"])),r.appendChild(i),o.appendChild(r),o.appendChild(ce("td","name",null,l.name)),o.appendChild(ce("td","integration",null,l.integrationName)),o.appendChild(ce("td","type",null,l.connectionType)),t.appendChild(o))}}},ContextMenu=(Connections.init(),new(function(){function e(){var t=this;this.elements={menu:document.querySelector(".contextmenu"),items:{copy:document.querySelector(".contextmenu").querySelector(".copy"),paste:document.querySelector(".contextmenu").querySelector(".paste"),cut:document.querySelector(".contextmenu").querySelector(".cut"),ghost:document.querySelector(".contextmenu").querySelector(".ghost"),osc:document.querySelector(".contextmenu").querySelector(".osc"),http:document.querySelector(".contextmenu").querySelector(".http")}},this.open=!1,this.contextHolder=null,window.addEventListener("contextmenu",function(e){return t.handle(t.elements.menu,e)}),window.addEventListener("mousedown",function(e){1==t.open&&(e.target?(e=e.target).classList.contains("contextmenu")||null!=e.parentElement&&e.parentElement.classList.contains("contextmenu")?console.log(1):(console.log(2),t.close()):t.close())})}return e.prototype.setItems=function(e){for(var t in this.elements.items)e.includes(t)?this.elements.items[t].style.display="block":this.elements.items[t].style.display="none"},e.prototype.close=function(){this.elements.menu.style.display="none",null!=this.contextHolder&&(this.contextHolder.classList.remove("context"),this.contextHolder=null),this.open=!1},e.prototype.handle=function(e,t){var o=this;if(null!=t.target){var n,r=t.target,i={key:function(e){var t,n;if(e.hasAttribute("x")&&e.hasAttribute("y"))return t=e.getAttribute("x"),n=e.getAttribute("y"),e=["osc","http"],"empty"!=PageHandler.currentPage.keys[n][t].state.type&&e.push("copy","cut"),"custom"==PageHandler.currentPage.keys[n][t].state.type&&e.push("ghost"),UndeckedClipboard.hasKeyInClipboard()&&e.push("paste"),o.setItems(e),o.elements.items.copy.onclick=function(){UndeckedClipboard.copyKey(parseInt(t),parseInt(n)),o.close()},o.elements.items.cut.onclick=function(){UndeckedClipboard.cutKey(parseInt(t),parseInt(n)),o.close()},o.elements.items.paste.onclick=function(){UndeckedClipboard.pasteKey(parseInt(t),parseInt(n)),o.close()},o.elements.items.ghost.onclick=function(){UndeckedClipboard.copyGhostKey(parseInt(t),parseInt(n)),o.close()},0<e.length}};for(n in i)if(r.classList.contains(n))return t.preventDefault(),void(i[n](r)&&((this.contextHolder=r).classList.add("context"),setTimeout(function(){o.open=!0},100),e.style.left="".concat(t.pageX,"px"),e.style.top="".concat(t.pageY-50,"px"),e.style.display="block"))}},e}())),Editor={elements:{container:document.querySelector(".edit"),appearence:{text:{content:document.querySelector(".ap_text_value"),size:document.querySelector(".ap_text_size"),color:document.querySelector(".ap_text_color"),offsetX:document.querySelector(".ap_text_offsetx").querySelector('input[type="range"]'),offsetY:document.querySelector(".ap_text_offsety").querySelector('input[type="range"]')},background:{color:document.querySelector(".ap_background_color")},image:{size:document.querySelector(".ap_image_size").querySelector('input[type="range"]'),offsetX:document.querySelector(".ap_image_offsetx").querySelector('input[type="range"]'),offsetY:document.querySelector(".ap_image_offsety").querySelector('input[type="range"]'),rotation:document.querySelector(".ap_image_rotation").querySelector('input[type="range"]')}},imageui:{imagetypes:document.querySelector(".imagetype"),imageinfopanels:document.querySelector(".imagemenu").querySelector(".info"),imagepanels:document.querySelector(".row.image").querySelector(".panels"),advanced:document.querySelector(".row.image").querySelector(".advanced")},buttonui:{buttontypes:document.querySelector(".buttontype"),visual:document.querySelector(".vis"),actioninner:document.querySelector(".actioninner"),containerTitles:document.querySelector(".editcontainer").querySelectorAll(".containertitle")},checks:{toggle:{container:document.querySelector(".checks").querySelector(".check.toggle"),checkbox:document.querySelector(".checks").querySelector(".check.toggle").querySelector("input")},confirm:{container:document.querySelector(".checks").querySelector(".check.confirm"),checkbox:document.querySelector(".checks").querySelector(".check.confirm").querySelector("input")}}},currentX:null,currentY:null,currentKey:null,currentImageType:null,currentButtonType:null,isToggle:null,isConfirm:null,isOpen:!1,registerChange:function(){var e;null!=Editor.currentKey&&(e=Editor.export(),KeyHandler.render(Editor.currentX,Editor.currentY,e),socket.emit("page","setkey",PageHandler.currentPageID,Editor.currentX,Editor.currentY,e,responseToken))},listeners:function(){for(var e in Editor.elements.appearence)for(var t in Editor.elements.appearence[e]){t=Editor.elements.appearence[e][t];t.oninput=Editor.registerChange,"range"==t.type&&!function(e,t){e.addEventListener("input",function(){t.value=e.value}),t.addEventListener("input",function(){e.value=t.value,Editor.registerChange()})}(t,t.parentElement.querySelector('input[type="number"]'))}Editor.elements.imageui.imagetypes.querySelectorAll(".selectoritem").forEach(function(t){t.onclick=function(){var e=t.getAttribute("panel");Editor.selectImageTab(e)}}),Editor.elements.buttonui.buttontypes.querySelectorAll(".buttonitem").forEach(function(t){t.onclick=function(){var e=t.getAttribute("type");Editor.selectButtonType(e)}}),Editor.elements.checks.toggle.container.onclick=function(){return Editor.setActionOptions(!Editor.elements.checks.toggle.checkbox.checked,Editor.isConfirm)},Editor.elements.checks.confirm.container.onclick=function(){return Editor.setActionOptions(Editor.isToggle,!Editor.elements.checks.confirm.checkbox.checked)}},export:function(){return Editor.isOpen?{id:Editor.currentKey.id,actions:Editor.currentKey.actions,state:{type:Editor.currentButtonType,confirm:Editor.isConfirm,toggle:Editor.isToggle},appearence:{text:Editor.getElementCategoryValues("text"),background:Editor.getElementCategoryValues("background"),image:Editor.getElementCategoryValues("image")}}:null},open:function(e,t,n){Editor.isOpen&&Editor.close(),Editor.currentKey=n,Editor.currentX=e,Editor.currentY=t,Editor.isOpen=!0,document.querySelectorAll(".actionselector").forEach(function(e){e.value=""});var o=Editor.elements.appearence.text,r=Editor.getAppearenceCategory("text",n),o=(o.content.value=null!=r.value?r.value:"",o.size.value=null!=r.size?String(r.size):"10",o.color.value=null!=r.color?r.color:"#000000",o.offsetX.value=null!=r.offsetX?String(r.offsetX):"0",o.offsetX.parentElement.querySelector('input[type="number"]').value=null!=r.offsetX?String(r.offsetX):"0",o.offsetY.value=null!=r.offsetY?String(r.offsetY):"0",o.offsetY.parentElement.querySelector('input[type="number"]').value=null!=r.offsetY?String(r.offsetY):"0",Editor.elements.appearence.background),r=Editor.getAppearenceCategory("background",n),o=(o.color.value=null!=r.color?r.color:"#000000",Editor.elements.appearence.image),r=Editor.getAppearenceCategory("image",n),o=(o.size.value=null!=r.size?String(r.size):"100",o.size.parentElement.querySelector('input[type="number"]').value=null!=r.size?String(r.size):"100",o.rotation.value=null!=r.rotation?String(r.rotation):"0",o.rotation.parentElement.querySelector('input[type="number"]').value=null!=r.rotation?String(r.rotation):"0",o.offsetX.value=null!=r.offsetX?String(r.offsetX):"0",o.offsetX.parentElement.querySelector('input[type="number"]').value=null!=r.offsetX?String(r.offsetX):"0",o.offsetY.value=null!=r.offsetY?String(r.offsetY):"0",o.offsetY.parentElement.querySelector('input[type="number"]').value=null!=r.offsetY?String(r.offsetY):"0",null!=r.address?Editor.selectImageTab("upload",!0):null!=r.iconid&&(Editor.selectImageTab("icon",!0),Icons.select(r.iconid)),Editor.selectButtonType(n.state.type,!0),Editor.setActionOptions(n.state.toggle,n.state.confirm,!0),null!=n.actions?n.actions:{up:{},down:{}});ActionEditor.open(o,e,t,n,PageHandler.currentPageID),Editor.elements.container.classList.remove("disabled")},close:function(){Editor.isOpen=!1,Editor.currentKey=null,Editor.currentX=null,Editor.currentY=null,document.querySelectorAll(".actionselector").forEach(function(e){e.value=""});var e=Editor.elements.appearence.text;e.content.value="Button",e.size.value="20",e.color.value="#ffffff",Editor.elements.appearence.background.color.value="#000000",Editor.elements.container.classList.add("disabled"),Editor.selectImageTab("none",!0),ActionEditor.close(),Icons.deselect()},selectImageTab:function(t,e){void 0===e&&(e=!1),Editor.elements.imageui.imagetypes.querySelectorAll(".selectoritem").forEach(function(e){t==e.getAttribute("panel")?e.classList.add("selected"):e.classList.remove("selected")}),Editor.elements.imageui.imagepanels.querySelectorAll(".panel").forEach(function(e){t==e.getAttribute("panel")?e.classList.add("selected"):e.classList.remove("selected")}),Editor.elements.imageui.imageinfopanels.querySelectorAll(".infopanel").forEach(function(e){t==e.getAttribute("panel")?e.classList.add("selected"):e.classList.remove("selected")}),Editor.currentImageType="none"!=t?t:null,Editor.elements.imageui.advanced.style.display="none"==t?"none":"flex","icon"==t&&Icons.loadOnScreen(),0==e&&Editor.registerChange()},selectButtonType:function(t,e){switch(void 0===e&&(e=!1),"ghost"==t&&(t="custom"),Editor.elements.buttonui.buttontypes.querySelectorAll(".buttonitem").forEach(function(e){t==e.getAttribute("type")?e.classList.add("selected"):e.classList.remove("selected")}),Editor.currentButtonType=t){case"empty":case"pageup":case"pagedown":case"currentpage":Editor.elements.buttonui.visual.style.display="none",Editor.elements.buttonui.actioninner.style.display="none",Editor.elements.buttonui.containerTitles.forEach(function(e){return e.style.display="none"});break;case"custom":Editor.elements.buttonui.visual.style.display="block",Editor.elements.buttonui.actioninner.style.display="block",Editor.elements.buttonui.containerTitles.forEach(function(e){return e.style.display="flex"})}0==e&&Editor.registerChange()},setActionOptions:function(e,t,n){void 0===n&&(n=!1),e?(ActionEditor.elements.up.container.style.display="none",ActionEditor.elements.latch.container.style.display="block"):(ActionEditor.elements.up.container.style.display="block",ActionEditor.elements.latch.container.style.display="none"),ActionEditor.elements.down.container.style.display=t?"none":"block",Editor.isToggle=e,Editor.isConfirm=t,Editor.elements.checks.toggle.checkbox.checked=e,Editor.elements.checks.confirm.checkbox.checked=t,0==n&&Editor.registerChange()},getAppearenceCategory:function(e,t){switch(void 0===t&&(t=Editor.currentKey),e){case"text":return null!=t.appearence&&null!=t.appearence.text?t.appearence.text:{value:"",size:10,color:"#000000",offsetX:0,offsetY:0};case"background":return null!=t.appearence&&null!=t.appearence.background?t.appearence.background:{color:"#000000"};case"image":return null!=t.appearence&&null!=t.appearence.image?t.appearence.image:{offsetX:0,offsetY:0,size:100,rotation:0}}},getElementCategoryValues:function(e){switch(e){case"text":return{value:"empty"!=Editor.currentButtonType?Editor.elements.appearence.text.content.value:"",color:"empty"!=Editor.currentButtonType?Editor.elements.appearence.text.color.value:"#ffffff",size:"empty"!=Editor.currentButtonType?parseInt(Editor.elements.appearence.text.size.value):20,offsetX:"empty"!=Editor.currentButtonType?parseFloat(Editor.elements.appearence.text.offsetX.value):0,offsetY:"empty"!=Editor.currentButtonType?parseFloat(Editor.elements.appearence.text.offsetY.value):0};case"background":return{color:"empty"!=Editor.currentButtonType?Editor.elements.appearence.background.color.value:"#000000"};case"image":var t={size:"empty"!=Editor.currentButtonType?parseFloat(Editor.elements.appearence.image.size.value):100,rotation:"empty"!=Editor.currentButtonType?parseFloat(Editor.elements.appearence.image.rotation.value):0,offsetX:"empty"!=Editor.currentButtonType?parseFloat(Editor.elements.appearence.image.offsetX.value):0,offsetY:"empty"!=Editor.currentButtonType?parseFloat(Editor.elements.appearence.image.offsetY.value):0};return null!=Editor.currentImageType&&"empty"!=Editor.currentButtonType&&"icon"===Editor.currentImageType&&(t.iconid=Icons.currentSelected,t.iconstyle="white"),t}}},Icons=(Editor.listeners(),{elements:{container:document.querySelector(".panel.icons").querySelector(".list")},resizeTimeout:null,currentSelected:null,loadOnScreen:function(){Icons.elements.container.querySelectorAll(".icon").forEach(function(e){var t,n,o=e.getBoundingClientRect();o.top<window.innerHeight&&0<=o.bottom&&e.hasAttribute("notloaded")&&(e.removeAttribute("notloaded"),o=e.getAttribute("iconID"),t=e.querySelector("img.white"),n=e.querySelector("img.black"),t.src="/stc/materialicons/white/".concat(o,".png"),n.src="/stc/materialicons/black/".concat(o,".png"),t.style.opacity="1",n.style.opacity="0"),e.onclick=function(){return Icons.select(e.getAttribute("iconID"))}})},listeners:function(){var e=0;Icons.elements.container.onscroll=function(){5<++e&&(Icons.loadOnScreen(),e=0),clearTimeout(Icons.resizeTimeout),Icons.resizeTimeout=setTimeout(function(){Icons.loadOnScreen()},100)}},select:function(e,t){void 0===t&&(t=!1);for(var n=Icons.elements.container.querySelectorAll(".icon"),o=0;o<n.length;o++)e!=n[o].getAttribute("iconID")?n[o].classList.remove("selected"):n[o].classList.add("selected");Icons.currentSelected=e,0==t&&Editor.registerChange()},deselect:function(){for(var e=Icons.elements.container.querySelectorAll(".icon"),t=0;t<e.length;t++)e[t].classList.remove("selected");Icons.currentSelected=null}}),KeyHandler=(Icons.listeners(),window.addEventListener("keydown",function(e){var t,n;if(document.activeElement&&"INPUT"!=document.activeElement.nodeName)if(isWin()&&e.ctrlKey||isMac()&&e.metaKey)switch(e.key){case"c":e.preventDefault(),PageHandler.currentPageID&&1==KeyHandler.selected.length&&UndeckedClipboard.copyKey(parseInt(KeyHandler.selected[0].split(",")[0]),parseInt(KeyHandler.selected[0].split(",")[1]));break;case"x":e.preventDefault(),PageHandler.currentPageID&&1==KeyHandler.selected.length&&UndeckedClipboard.cutKey(parseInt(KeyHandler.selected[0].split(",")[0]),parseInt(KeyHandler.selected[0].split(",")[1]));break;case"v":e.preventDefault(),PageHandler.currentPageID&&1==KeyHandler.selected.length&&UndeckedClipboard.pasteKey(parseInt(KeyHandler.selected[0].split(",")[0]),parseInt(KeyHandler.selected[0].split(",")[1]));break;case"g":e.preventDefault(),PageHandler.currentPageID&&1==KeyHandler.selected.length&&UndeckedClipboard.copyGhostKey(parseInt(KeyHandler.selected[0].split(",")[0]),parseInt(KeyHandler.selected[0].split(",")[1]))}else"Delete"===e.key&&(t=parseInt(KeyHandler.selected[0].split(",")[0]),n=parseInt(KeyHandler.selected[0].split(",")[1]),socket.emit("page","operation","delete",PageHandler.currentPageID,t,n),Editor.close(),KeyHandler.select(String(t),String(n)))}),{elements:{keys:{}},selected:[],imagecache:{},ghostImage:null,init:function(){KeyHandler.ghostImage=new Image,KeyHandler.ghostImage.src="/stc/icon/ghost.png",KeyHandler.ghostImage.onload=function(){for(var e=0;e<4;e++){null==KeyHandler.elements.keys[e]&&(KeyHandler.elements.keys[e]={});for(var t=0;t<8;t++){var n=document.querySelector('.key[y="'.concat(e,'"][x="').concat(t,'"]'));n&&!function(e,t,n){var o=n.querySelector("canvas"),r=o.getContext("2d");KeyHandler.elements.keys[t][e]={key:n,canvas:o,context:r},r.textBaseline="middle",r.textAlign="center",n.onclick=function(){0==altDown?KeyHandler.select(String(e),String(t)):socket.emit("page","executekey",PageHandler.currentPageID,e,t)}}(t,e,n)}}}},clear:function(){for(var e in KeyHandler.elements.keys)for(var t in KeyHandler.elements.keys[e]){t=KeyHandler.elements.keys[e][t];t.context.clearRect(0,0,100,100),t.key.classList.remove("selected")}KeyHandler.selected=[],Editor.close()},render:function(e,t,n){var f,o;function r(t){if(null!=t.background&&(f.fillStyle=t.background.color,f.fillRect(0,0,renderQuality,renderQuality),f.fill()),null!=t.text){f.fillStyle=t.text.color,f.font="800 ".concat(t.text.size*fontSizeRatio,'px "Montserrat"');for(var e=t.text.value,n=t.text.size*fontSizeRatio,o=renderQuality/2+t.text.offsetX/100*(2*renderQuality),r=y=renderQuality/2+t.text.offsetY/100*renderQuality,i=e.replace(/\\n/g," \\n ").split(" "),l="",c=0,a=0;a<i.length;a++)0!=i[a].length&&(s=l+i[a]+" ",u=f.measureText(s).width,"\\n"!=i[a]?renderQuality<u&&0<a?(l=i[a]+" ",c+=n):l=s:(c+=n,l=""));l="",r-=c/2;for(var s,u,d=!1,a=0;a<i.length;a++)0!=i[a].length&&(s=l+i[a]+" ",u=f.measureText(s).width,"\\n"!=i[a]?renderQuality<u&&0<a?(f.fillText(l,o,r),l=i[a]+" ",r+=n):l=s:(f.fillText(l,o,r),l="",r+=d?2*n:n,d=d&&!1));f.fillText(l,o,r)}function p(e){f.save(),f.translate(o,y),f.rotate(t.image.rotation*Math.PI/180),f.drawImage(e,m/2-m,m/2-m,m,m),f.restore()}var g,m,y;null!=t.image&&(g=null!=t.image.address?t.image.address:null!=t.image.iconid?"/stc/materialicons/white/".concat(t.image.iconid,".png"):null,m=null!=t.image.size?t.image.size/100*renderQuality:renderQuality,g&&(o=renderQuality/2+t.image.offsetX/100*renderQuality,y=renderQuality/2+t.image.offsetY/100*renderQuality,null!=KeyHandler.imagecache[g]?p(KeyHandler.imagecache[g]):(KeyHandler.imagecache[g]=new Image,KeyHandler.imagecache[g].src=g,KeyHandler.imagecache[g].onload=function(){return p(KeyHandler.imagecache[g])}))),null!=t.system&&(null!=t.system.border&&(e=t.system.border.thickness/100*renderQuality,f.fillStyle=t.system.border.color,f.fillRect(0,0,renderQuality,e),f.rect(0,renderQuality-e,renderQuality,e),f.rect(0,0,e,renderQuality),f.rect(renderQuality-e,0,e,renderQuality),f.fill()),1==t.system.ghost&&(e=.5*renderQuality,f.save(),f.globalAlpha=.7,f.translate(renderQuality/2,renderQuality/2),f.drawImage(KeyHandler.ghostImage,e/2-e,e/2-e,e,e),f.restore()))}KeyHandler.elements.keys[String(t)]?KeyHandler.elements.keys[String(t)][String(e)]?((f=KeyHandler.elements.keys[String(t)][String(e)].context).clearRect(0,0,renderQuality,renderQuality),"custom"==n.state.type?r(o=n.appearence):"ghost"==n.state.type?((o=null==(o=n.appearence)?{}:o).system={ghost:!0},r(o)):"pageup"==n.state.type?r({text:{value:"Up",color:"#ffffff",size:18,offsetX:0,offsetY:25},background:{color:"#4676b7"},image:{size:100,rotation:0,offsetX:0,offsetY:-15,iconid:"keyboard_arrow_up",iconstyle:"white"},system:{border:{color:"#253e5e",thickness:8}}}):"pagedown"==n.state.type?r({text:{value:"Down",color:"#ffffff",size:18,offsetX:0,offsetY:-25},background:{color:"#4676b7"},image:{size:100,rotation:0,offsetX:0,offsetY:15,iconid:"keyboard_arrow_down",iconstyle:"white"},system:{border:{color:"#253e5e",thickness:8}}}):"currentpage"==n.state.type&&r({text:{value:"Page\\n\\n".concat(PageHandler.currentIndex+1),color:"#ffffff",size:22,offsetX:0,offsetY:0},background:{color:"#4676b7"},system:{border:{color:"#253e5e",thickness:8}}})):console.error("Invalid x '".concat(e,"'")):console.error("Invalid y '".concat(t,"'"))},select:function(t,n,e){var o;void 0===e&&(e=!1),null!=PageHandler.currentPage&&null!=PageHandler.currentPage.keys[n]&&null!=PageHandler.currentPage.keys[n][t]&&(o="".concat(t,",").concat(n),e?KeyHandler.selected.includes(o)||KeyHandler.selected.push(o):KeyHandler.selected=[o],document.querySelectorAll(".key").forEach(function(e){var t=e.getAttribute("x"),n=e.getAttribute("y"),t="".concat(t,",").concat(n);KeyHandler.selected.includes(t)?e.classList.add("selected"):e.classList.remove("selected")}),1<KeyHandler.selected.length?Editor.close():socket.emit("page","getkey",PageHandler.currentPageID,t,n,function(e){Editor.open(t,n,e)}))}}),altDown=(KeyHandler.init(),!1);function isMac(){return-1!=navigator.appVersion.indexOf("Mac")}function isWin(){return-1!=navigator.appVersion.indexOf("Win")}function isLinux(){return-1!=navigator.appVersion.indexOf("Linux")}function isUnix(){return-1!=navigator.appVersion.indexOf("X11")}function scaleOverview(){var e,t,n=document.querySelector(".overview"),o=n.querySelector(".deck");0<n.clientWidth?(e=n.clientWidth/(o.clientWidth+20),t=n.clientHeight/(o.clientHeight+20),o.clientHeight*e>n.clientHeight?o.style.transform="scale(".concat(t,")"):o.style.transform="scale(".concat(e,")")):setTimeout(scaleOverview,100)}window.addEventListener("keydown",function(e){"alt"!=e.key&&1!=e.altKey||(altDown=!0)}),window.addEventListener("keyup",function(e){"alt"!=e.key&&0!=e.altKey||(altDown=!1)}),document.querySelectorAll(".shortcutKey").forEach(function(e){isMac()?e.innerText="Command":e.innerText="Ctrl"}),window.addEventListener("resize",scaleOverview),scaleOverview();var PageHandler={elements:{pagename:document.querySelector(".pagename"),left:document.querySelector(".pageselector").querySelector(".box.left"),right:document.querySelector(".pageselector").querySelector(".box.right"),add:document.querySelector(".pageselector").querySelector(".box.add")},currentPageID:null,currentPage:null,currentIndex:null,request:function(n,o){socket.emit("page","request",n,function(e,t){e?UndeckedNotification("Error whilst getting page ".concat(n,": ").concat(e),"error",5e3):(PageHandler.currentIndex=o,PageHandler.render(t))})},render:function(e){for(var t in KeyHandler.clear(),PageHandler.currentPageID=e.pageID,PageHandler.currentPage=e,PageList.select(e.pageID),PageHandler.elements.pagename.value=e.name,PageHandler.elements.pagename.removeAttribute("disabled"),e.keys)for(var n in e.keys[t])KeyHandler.render(n,t,e.keys[t][n])},listeners:function(){PageHandler.elements.pagename.oninput=function(){null!=PageHandler.currentPageID&&0<PageHandler.elements.pagename.value.length&&socket.emit("page","setname",PageHandler.currentPageID,PageHandler.elements.pagename.value)},PageHandler.elements.add.onclick=function(){var e=prompt("New page name","Untitled page");e&&0<e.length&&socket.emit("page","create",e)},PageHandler.elements.left.onclick=function(){var e=document.querySelector(".pageitem.selected");e&&e.previousElementSibling&&e.previousElementSibling.click()},PageHandler.elements.right.onclick=function(){var e=document.querySelector(".pageitem.selected");e&&e.nextElementSibling&&e.nextElementSibling.click()}}},PageList=(PageHandler.listeners(),{elements:{container:document.querySelector(".pageselector")},order:null,firstRender:!0,render:function(e){var l=ce("div","list"),e=(PageList.order=e.map(function(e){return e.pageID}),e.forEach(function(n,e){var t=ce("div","pageitem",{pageID:n.pageID}),o=ce("div","name",null,n.name),o=(t.appendChild(o),ce("div","move")),r=ce("div",["moveitem","up"]),i=(r.appendChild(ce("img","normal",{src:"/stc/icon/up.png"})),r.appendChild(ce("img","selected",{src:"/stc/icon/up_gray.png"})),ce("div",["moveitem","down"]));i.appendChild(ce("img","normal",{src:"/stc/icon/down.png"})),i.appendChild(ce("img","selected",{src:"/stc/icon/down_gray.png"})),r.onclick=function(e){e.stopPropagation();var e=PageList.order.indexOf(n.pageID),t=Math.max(e-1,0);PageList.order.splice(e,1),PageList.order.splice(t,0,n.pageID),socket.emit("page","setorder",PageList.order)},i.onclick=function(e){e.stopPropagation();var e=PageList.order.indexOf(n.pageID),t=Math.max(e+1,0);PageList.order.splice(e,1),PageList.order.splice(t,0,n.pageID),socket.emit("page","setorder",PageList.order)},o.appendChild(r),o.appendChild(i),t.appendChild(o),t.onclick=function(){PageHandler.request(n.pageID,e)},l.appendChild(t),PageHandler.currentPageID==n.pageID&&PageHandler.request(n.pageID,e)}),PageList.elements.container.querySelector(".list"));e&&e.parentElement.removeChild(e),PageList.elements.container.appendChild(l)},select:function(t){var n=!1;return PageList.elements.container.querySelectorAll(".pageitem").forEach(function(e){e.getAttribute("pageID")==t?(e.classList.add("selected"),n=!0):e.classList.remove("selected")}),n&&(history.pushState(null,null,"/pages/".concat(t)),TabController.setTitle("Page ".concat(t))),n},updateName:function(e,t){e=PageList.elements.container.querySelector('.pageitem[pageid="'.concat(e,'"]'));e&&(e.querySelector(".name").innerText=t)}}),TabController={elements:{menu:document.querySelector(".tabmenu"),pages:document.querySelector(".tabpages")},setTitle:function(e){document.querySelector("title").innerText="Undecked - ".concat(e)},show:function(t){var e;TabController.elements.menu.querySelectorAll(".item").forEach(function(e){e.getAttribute("tab")==t?e.classList.add("active"):e.classList.remove("active")}),TabController.elements.pages.querySelectorAll(".item").forEach(function(e){e.getAttribute("tab")==t?e.classList.add("active"):e.classList.remove("active")}),"pages"==t?(e=PageHandler.currentPageID,history.pushState(null,null,"/pages/pageID"),TabController.setTitle("Page ".concat(e))):(history.pushState(null,null,"/".concat(t)),TabController.setTitle(t.charAt(0).toUpperCase()+t.slice(1)))},registerListeners:function(){TabController.elements.menu.querySelectorAll(".item").forEach(function(e){var t=e.getAttribute("tab");e.onclick=function(){TabController.show(t)}})},init:function(){var e=window.location.pathname.split("/"),t=(0<e.length&&e.splice(0,1),0<e.length?e[0]:null),e=1<e.length?e[1]:null;null!=PageList.order?null!=t&&0<t.length?"pages"==t?(PageList.select(e)?(e=PageList.order.indexOf(e),PageHandler.request(PageList.order[e],e)):PageHandler.request(PageList.order[0],0),TabController.show("pages")):(PageHandler.request(PageList.order[0],0),TabController.show(t)):(PageList.firstRender=!1,PageHandler.request(PageList.order[0],0),TabController.show("pages")):setTimeout(function(){TabController.init()},200)}};TabController.init(),TabController.registerListeners(); |