From 0cb8d73e934e5cee5dbf5f8b39f3f3c0d554d71a Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Sat, 26 Dec 2015 11:00:50 -0600 Subject: [PATCH] Fix NanoUI runtimes when data is null; touch up code --- code/game/machinery/alarm.dm | 13 +++++++------ code/modules/client/client procs.dm | 10 +++++----- code/modules/nano/nanoui.dm | 17 ++++++----------- nano/assets/nanoui.js | 4 ++-- nano/scripts/constants.coffee | 1 + nano/scripts/nanoui.coffee | 12 ++++++++++-- nano/templates/air_alarm.dot | 2 +- 7 files changed, 32 insertions(+), 27 deletions(-) diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index a28dfac40fc..c27fb9ecb99 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -194,13 +194,14 @@ ui.open() /obj/machinery/alarm/get_ui_data(mob/user) - var/data = list() - data["locked"] = locked - data["siliconUser"] = user.has_unlimited_silicon_privilege - data["screen"] = screen - data["dangerous"] = emagged + var/data = list( + "locked" = locked, + "siliconUser" = user.has_unlimited_silicon_privilege, + "screen" = screen, + "emagged" = emagged + ) populate_status(data) - if (!locked || user.has_unlimited_silicon_privilege) + if(!locked || user.has_unlimited_silicon_privilege) populate_controls(data) return data diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 849c5c59dd1..73b99c574ad 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -22,23 +22,23 @@ /client/Topic(href, href_list, hsrc) if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null return - // NanoUI - if(href_list["nano_error"]) - src << href_list["nano_error"] - throw EXCEPTION("NanoUI: [href_list["nano_error"]]") // asset_cache if(href_list["asset_cache_confirm_arrival"]) //src << "ASSET JOB [href_list["asset_cache_confirm_arrival"]] ARRIVED." var/job = text2num(href_list["asset_cache_confirm_arrival"]) completed_asset_jobs += job return - //Admin PM + // Admin PM if(href_list["priv_msg"]) if (href_list["ahelp_reply"]) cmd_ahelp_reply(href_list["priv_msg"]) return cmd_admin_pm(href_list["priv_msg"],null) return + // NanoUI + if(href_list["nano_error"]) + src << href_list["nano_error"] + throw EXCEPTION("NanoUI: [href_list["nano_error"]]") //Logs all hrefs if(config && config.log_hrefs && href_logfile) diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index d3953961e1a..b9467a00573 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -226,12 +226,8 @@ "title" = title, "status" = status, "layout" = layout, + "window" = window_id, "ref" = "\ref[src]", - "window" = list( - "width" = width, - "height" = height, - "ref" = window_id - ), "user" = list( "name" = user.name, "fancy" = user.client.prefs.nanoui_fancy, @@ -269,8 +265,8 @@ * private * * Handle clicks from the NanoUI. - * Call the src_object's Topic() if status is NANO_INTERACTIVE. - * If the src_object's Topic() returns 1, update all UIs attacked to it. + * Call the src_object's ui_act() if status is NANO_INTERACTIVE. + * If the src_object's ui_act() returns 1, update all UIs attacked to it. **/ /datum/nanoui/Topic(href, href_list) update_status(push = 0) // Update the window state. @@ -280,10 +276,9 @@ var/action = href_list["nano"] // Pull the action out. href_list -= "nano" - var/update = src_object.ui_act(action, href_list, state) // Call Topic() on the src_object. - + var/update = src_object.ui_act(action, href_list, state) // Call ui_act() on the src_object. if(src_object && update) - SSnano.update_uis(src_object) // If we have a src_object and its Topic() told us to update. + SSnano.update_uis(src_object) // If we have a src_object and its ui_act() told us to update. /** * private @@ -313,7 +308,7 @@ **/ /datum/nanoui/proc/push_data(data, force = 0) update_status(push = 0) // Update the window state. - if(status == NANO_DISABLED && !force) + if(status <= NANO_DISABLED && !force) return // Cannot update UI, we have no visibility. var/list/send_data = get_send_data(data) // Get the data to send. diff --git a/nano/assets/nanoui.js b/nano/assets/nanoui.js index 06406a35377..dc85d8e8795 100644 --- a/nano/assets/nanoui.js +++ b/nano/assets/nanoui.js @@ -1,3 +1,3 @@ !function(e){function t(e,t,n,a){for(var r,i=n.slice(),l=s(t,e),o=0,c=i.length;c>o&&(handler=i[o],"object"==typeof handler&&"function"==typeof handler.handleEvent?handler.handleEvent(l):handler.call(e,l),!l.stoppedImmediatePropagation);o++);return r=!l.stoppedPropagation,a&&r&&e.parentNode?e.parentNode.dispatchEvent(l):!l.defaultPrevented}function n(e,t){return{configurable:!0,get:e,set:t}}function a(e,t,a){var s=b(t||e,a);g(e,"textContent",n(function(){return s.get.call(this)},function(e){s.set.call(this,e)}))}function s(e,t){return e.currentTarget=t,e.eventPhase=e.target===e.currentTarget?2:3,e}function r(e,t){for(var n=e.length;n--&&e[n]!==t;);return n}function i(){if("BR"===this.tagName)return"\n";for(var e=this.firstChild,t=[];e;)8!==e.nodeType&&7!==e.nodeType&&t.push(e.textContent),e=e.nextSibling;return t.join("")}function l(e){var t=document.createEvent("Event");t.initEvent("input",!0,!0),(e.srcElement||e.fromElement||document).dispatchEvent(t)}function o(e){!p&&x.test(document.readyState)&&(p=!p,document.detachEvent(h,o),e=document.createEvent("Event"),e.initEvent(f,!0,!0),document.dispatchEvent(e))}function c(e){for(var t;t=this.lastChild;)this.removeChild(t);null!=e&&this.appendChild(document.createTextNode(e))}function u(t,n){return n||(n=e.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var d=!0,p=!1,h="onreadystatechange",f="DOMContentLoaded",v="__IE8__"+Math.random(),g=Object.defineProperty||function(e,t,n){e[t]=n.value},m=Object.defineProperties||function(t,n){for(var a in n)if(y.call(n,a))try{g(t,a,n[a])}catch(s){e.console&&console.log(a+" failed on object:",t,s.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,k=e.Element.prototype,w=e.Text.prototype,E=/^[a-z]+$/,x=/loaded|complete/,T={},S=document.createElement("div"),_=document.documentElement,O=_.removeAttribute,P=_.setAttribute;a(e.HTMLCommentElement.prototype,k,"nodeValue"),a(e.HTMLScriptElement.prototype,null,"text"),a(w,null,"nodeValue"),a(e.HTMLTitleElement.prototype,null,"text"),g(e.HTMLStyleElement.prototype,"textContent",function(e){return n(function(){return e.get.call(this.styleSheet)},function(t){e.set.call(this.styleSheet,t)})}(b(e.CSSStyleSheet.prototype,"cssText"))),m(k,{textContent:{get:i,set:c},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;n>t;t++)if(1==e[t].nodeType)return e[t]}},lastElementChild:{get:function(){for(var e=this.childNodes||[],t=e.length;t--;)if(1==e[t].nodeType)return e[t]}},oninput:{get:function(){return this._oninput||null},set:function(e){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=e,e&&this.addEventListener("input",e))}},previousElementSibling:{get:function(){for(var e=this.previousSibling;e&&1!=e.nodeType;)e=e.previousSibling;return e}},nextElementSibling:{get:function(){for(var e=this.nextSibling;e&&1!=e.nodeType;)e=e.nextSibling;return e}},childElementCount:{get:function(){for(var e=0,t=this.childNodes||[],n=t.length;n--;e+=1==t[n].nodeType);return e}},addEventListener:{value:function(e,n,a){var s,i,o=this,c="on"+e,d=o[v]||g(o,v,{value:{}})[v],p=d[c]||(d[c]={}),h=p.h||(p.h=[]);if(!y.call(p,"w")){if(p.w=function(e){return e[v]||t(o,u(o,e),h,!1)},!y.call(T,c))if(E.test(e)){try{s=document.createEventObject(),s[v]=!0,9!=o.nodeType&&null==o.parentNode&&S.appendChild(o),(i=o.getAttribute(c))&&O.call(o,c),o.fireEvent(c,s),T[c]=!0}catch(s){for(T[c]=!1;S.hasChildNodes();)S.removeChild(S.firstChild)}null!=i&&P.call(o,c,i)}else T[c]=!1;(p.n=T[c])&&o.attachEvent(c,p.w)}r(h,n)<0&&h[a?"unshift":"push"](n),"input"===e&&o.attachEvent("onkeyup",l)}},dispatchEvent:{value:function(e){var n,a=this,s="on"+e.type,r=a[v],i=r&&r[s],l=!!i;return e.target||(e.target=a),l?i.n?a.fireEvent(s,e):t(a,e,i.h,!0):(n=a.parentNode)?n.dispatchEvent(e):!0,!e.defaultPrevented}},removeEventListener:{value:function(e,t,n){var a=this,s="on"+e,i=a[v],l=i&&i[s],o=l&&l.h,c=o?r(o,t):-1;c>-1&&o.splice(c,1)}}}),m(w,{addEventListener:{value:k.addEventListener},dispatchEvent:{value:k.dispatchEvent},removeEventListener:{value:k.removeEventListener}}),m(e.XMLHttpRequest.prototype,{addEventListener:{value:function(e,t,n){var a=this,s="on"+e,i=a[v]||g(a,v,{value:{}})[v],l=i[s]||(i[s]={}),o=l.h||(l.h=[]);r(o,t)<0&&(a[s]||(a[s]=function(){var t=document.createEvent("Event");t.initEvent(e,!0,!0),a.dispatchEvent(t)}),o[n?"unshift":"push"](t))}},dispatchEvent:{value:function(e){var n=this,a="on"+e.type,s=n[v],r=s&&s[a],i=!!r;return i&&(r.n?n.fireEvent(a,e):t(n,e,r.h,!0))}},removeEventListener:{value:k.removeEventListener}}),m(e.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(e,t,n){this.type=e,this.bubbles=!!t,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),m(e.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?i.call(this):null},set:function(e){11===this.nodeType&&c.call(this,e)}},addEventListener:{value:function(t,n,a){var s=this;k.addEventListener.call(s,t,n,a),d&&t===f&&!x.test(s.readyState)&&(d=!1,s.attachEvent(h,o),e==top&&!function r(e){try{s.documentElement.doScroll("left"),o()}catch(t){setTimeout(r,50)}}())}},dispatchEvent:{value:k.dispatchEvent},removeEventListener:{value:k.removeEventListener},createEvent:{value:function(e){var t;if("Event"!==e)throw new Error("unsupported "+e);return t=document.createEventObject(),t.timeStamp=(new Date).getTime(),t}}}),m(e.Window.prototype,{getComputedStyle:{value:function(){function e(e){this._=e}function t(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,s=/\-([a-z])/g,r=function(e,t){return t.toUpperCase()};return e.prototype.getPropertyValue=function(e){var t,i,l,o=this._,c=o.style,u=o.currentStyle,d=o.runtimeStyle;return e=("float"===e?"style-float":e).replace(s,r),t=u?u[e]:c[e],n.test(t)&&!a.test(e)&&(i=c.left,l=d&&d.left,l&&(d.left=u.left),c.left="fontSize"===e?"1em":t,t=c.pixelLeft+"px",c.left=i,l&&(d.left=l)),null==t?t:t+""||"auto"},t.prototype.getPropertyValue=function(){return null},function(n,a){return a?new t(n):new e(n)}}()},addEventListener:{value:function(n,a,s){var i,l=e,o="on"+n;l[o]||(l[o]=function(e){return t(l,u(l,e),i,!1)}),i=l[o][v]||(l[o][v]=[]),r(i,a)<0&&i[s?"unshift":"push"](a)}},dispatchEvent:{value:function(t){var n=e["on"+t.type];return n?n.call(e,t)!==!1&&!t.defaultPrevented:!0}},removeEventListener:{value:function(t,n,a){var s="on"+t,i=(e[s]||Object)[v],l=i?r(i,n):-1;l>-1&&i.splice(l,1)}}}),function(e,t,n){for(n=0;n0||-1)*Math.floor(Math.abs(t))),t},ToPrimitive:function(t){var n,a,s;if(A(t))return t;if(a=t.valueOf,e(a)&&(n=a.call(t),A(n)))return n;if(s=t.toString,e(s)&&(n=s.call(t),A(n)))return n;throw new TypeError},ToObject:function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return a(e)},ToUint32:function(e){return e>>>0}},I=function(){};j(r,{bind:function(t){var n=this;if(!e(n))throw new TypeError("Function.prototype.bind called on incompatible "+n);for(var s,r=u.call(arguments,1),i=function(){if(this instanceof s){var e=n.apply(this,f.call(r,u.call(arguments)));return a(e)===e?e:this}return n.apply(t,f.call(r,u.call(arguments)))},l=g(0,n.length-r.length),o=[],c=0;l>c;c++)p.call(o,"$"+c);return s=Function("binder","return function ("+o.join(",")+"){ return binder.apply(this, arguments); }")(i),n.prototype&&(I.prototype=n.prototype,s.prototype=new I,I.prototype=null),s}});var R=v.bind(s.hasOwnProperty),z=v.bind(s.toString),q=v.bind(l.slice),F=v.bind(l.split),U=v.bind(l.indexOf),B=v.bind(p),H=t.isArray||function(e){return"[object Array]"===z(e)},V=1!==[].unshift(0);j(n,{unshift:function(){return h.apply(this,arguments),this.length}},V),j(t,{isArray:H});var $=a("a"),W="a"!==$[0]||!(0 in $),J=function(e){var t=!0,n=!0;return e&&(e.call("foo",function(e,n,a){"object"!=typeof a&&(t=!1)}),e.call([1],function(){"use strict";n="string"==typeof this},"x")),!!e&&t&&n};j(n,{forEach:function(t){var n,a=D.ToObject(this),s=W&&P(this)?F(this,""):a,r=-1,i=D.ToUint32(s.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.forEach callback must be a function");for(;++r1&&(a=arguments[1]),!e(n))throw new TypeError("Array.prototype.map callback must be a function");for(var o=0;i>o;o++)o in r&&("undefined"==typeof a?l[o]=n(r[o],o,s):l[o]=n.call(a,r[o],o,s));return l}},!J(n.map)),j(n,{filter:function(t){var n,a,s=D.ToObject(this),r=W&&P(this)?F(this,""):s,i=D.ToUint32(r.length),l=[];if(arguments.length>1&&(a=arguments[1]),!e(t))throw new TypeError("Array.prototype.filter callback must be a function");for(var o=0;i>o;o++)o in r&&(n=r[o],("undefined"==typeof a?t(n,o,s):t.call(a,n,o,s))&&B(l,n));return l}},!J(n.filter)),j(n,{every:function(t){var n,a=D.ToObject(this),s=W&&P(this)?F(this,""):a,r=D.ToUint32(s.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.every callback must be a function");for(var i=0;r>i;i++)if(i in s&&!("undefined"==typeof n?t(s[i],i,a):t.call(n,s[i],i,a)))return!1;return!0}},!J(n.every)),j(n,{some:function(t){var n,a=D.ToObject(this),s=W&&P(this)?F(this,""):a,r=D.ToUint32(s.length);if(arguments.length>1&&(n=arguments[1]),!e(t))throw new TypeError("Array.prototype.some callback must be a function");for(var i=0;r>i;i++)if(i in s&&("undefined"==typeof n?t(s[i],i,a):t.call(n,s[i],i,a)))return!0;return!1}},!J(n.some));var G=!1;n.reduce&&(G="object"==typeof n.reduce.call("es5",function(e,t,n,a){return a})),j(n,{reduce:function(t){var n=D.ToObject(this),a=W&&P(this)?F(this,""):n,s=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduce callback must be a function");if(0===s&&1===arguments.length)throw new TypeError("reduce of empty array with no initial value");var r,i=0;if(arguments.length>=2)r=arguments[1];else for(;;){if(i in a){r=a[i++];break}if(++i>=s)throw new TypeError("reduce of empty array with no initial value")}for(;s>i;i++)i in a&&(r=t(r,a[i],i,n));return r}},!G);var X=!1;n.reduceRight&&(X="object"==typeof n.reduceRight.call("es5",function(e,t,n,a){return a})),j(n,{reduceRight:function(t){var n=D.ToObject(this),a=W&&P(this)?F(this,""):n,s=D.ToUint32(a.length);if(!e(t))throw new TypeError("Array.prototype.reduceRight callback must be a function");if(0===s&&1===arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var r,i=s-1;if(arguments.length>=2)r=arguments[1];else for(;;){if(i in a){r=a[i--];break}if(--i<0)throw new TypeError("reduceRight of empty array with no initial value")}if(0>i)return r;do i in a&&(r=t(r,a[i],i,n));while(i--);return r}},!X);var Z=n.indexOf&&-1!==[0,1].indexOf(1,2);j(n,{indexOf:function(e){var t=W&&P(this)?F(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=0;for(arguments.length>1&&(a=D.ToInteger(arguments[1])),a=a>=0?a:g(0,n+a);n>a;a++)if(a in t&&t[a]===e)return a;return-1}},Z);var Y=n.lastIndexOf&&-1!==[0,1].lastIndexOf(0,-3);j(n,{lastIndexOf:function(e){var t=W&&P(this)?F(this,""):D.ToObject(this),n=D.ToUint32(t.length);if(0===n)return-1;var a=n-1;for(arguments.length>1&&(a=m(a,D.ToInteger(arguments[1]))),a=a>=0?a:n-Math.abs(a);a>=0;a--)if(a in t&&e===t[a])return a;return-1}},Y);var K=function(){var e=[1,2],t=e.splice();return 2===e.length&&H(t)&&0===t.length}();j(n,{splice:function(e,t){return 0===arguments.length?[]:d.apply(this,arguments)}},!K);var Q=function(){var e={};return n.splice.call(e,0,0,1),1===e.length}();j(n,{splice:function(e,t){if(0===arguments.length)return[];var n=arguments;return this.length=g(D.ToInteger(this.length),0),arguments.length>0&&"number"!=typeof t&&(n=u.call(arguments),n.length<2?B(n,this.length-e):n[1]=D.ToInteger(t)),d.apply(this,n)}},!Q);var ee=function(){var e=new t(1e5);return e[8]="x",e.splice(1,1),7===e.indexOf("x")}(),te=function(){var e=256,t=[];return t[e]="a",t.splice(e+1,0,"b"),"a"===t[e]}();j(n,{splice:function(e,t){for(var n,a=D.ToObject(this),s=[],r=D.ToUint32(a.length),l=D.ToInteger(e),o=0>l?g(r+l,0):m(l,r),c=m(g(D.ToInteger(t),0),r-o),d=0;c>d;)n=i(o+d),R(a,n)&&(s[d]=a[n]),d+=1;var p,h=u.call(arguments,2),f=h.length;if(c>f){for(d=o;r-c>d;)n=i(d+c),p=i(d+f),R(a,n)?a[p]=a[n]:delete a[p],d+=1;for(d=r;d>r-c+f;)delete a[d-1],d-=1}else if(f>c)for(d=r-c;d>o;)n=i(d+c-1),p=i(d+f-1),R(a,n)?a[p]=a[n]:delete a[p],d-=1;d=o;for(var v=0;v=0&&!H(t)&&e(t.callee)},be=ge(arguments)?ge:me;j(a,{keys:function(t){var n=e(t),a=be(t),s=null!==t&&"object"==typeof t,r=s&&P(t);if(!s&&!n&&!a)throw new TypeError("Object.keys called on a non-object");var l=[],o=oe&&n;if(r&&ce||a)for(var c=0;cp;p++){var h=fe[p];d&&"constructor"===h||!R(t,h)||B(l,h)}return l}});var ye=a.keys&&function(){return 2===a.keys(arguments).length}(1,2),ke=a.keys&&function(){var e=a.keys(arguments);return 1!==arguments.length||1!==e.length||1!==e[0]}(1),we=a.keys;j(a,{keys:function(e){return we(be(e)?u.call(e):e)}},!ye||ke);var Ee=-621987552e5,xe="-000001",Te=Date.prototype.toISOString&&-1===new Date(Ee).toISOString().indexOf(xe),Se=Date.prototype.toISOString&&"1969-12-31T23:59:59.999Z"!==new Date(-1).toISOString();j(Date.prototype,{toISOString:function(){var e,t,n,a,s;if(!isFinite(this))throw new RangeError("Date.prototype.toISOString called on non-finite value.");for(a=this.getUTCFullYear(),s=this.getUTCMonth(),a+=Math.floor(s/12),s=(s%12+12)%12,e=[s+1,this.getUTCDate(),this.getUTCHours(),this.getUTCMinutes(),this.getUTCSeconds()],a=(0>a?"-":a>9999?"+":"")+q("00000"+Math.abs(a),a>=0&&9999>=a?-4:-6),t=e.length;t--;)n=e[t],10>n&&(e[t]="0"+n);return a+"-"+u.call(e,0,2).join("-")+"T"+u.call(e,2).join(":")+"."+q("000"+this.getUTCMilliseconds(),-3)+"Z"}},Te||Se);var _e=function(){try{return Date.prototype.toJSON&&null===new Date(NaN).toJSON()&&-1!==new Date(Ee).toJSON().indexOf(xe)&&Date.prototype.toJSON.call({toISOString:function(){return!0}})}catch(e){return!1}}();_e||(Date.prototype.toJSON=function(t){var n=a(this),s=D.ToPrimitive(n);if("number"==typeof s&&!isFinite(s))return null;var r=n.toISOString;if(!e(r))throw new TypeError("toISOString property is not callable");return r.call(n)});var Oe=1e15===Date.parse("+033658-09-27T01:46:40.000Z"),Pe=!isNaN(Date.parse("2012-04-04T24:00:00.500Z"))||!isNaN(Date.parse("2012-11-31T23:59:59.000Z"))||!isNaN(Date.parse("2012-12-31T23:59:60.000Z")),Ce=isNaN(Date.parse("2000-01-01T00:00:00.000Z"));if(Ce||Pe||!Oe){var Le=Math.pow(2,31)-1,Me=(Math.floor(Le/1e3),N(new Date(1970,0,1,0,0,0,Le+1).getTime()));Date=function(e){var t=function(n,a,s,r,l,o,c){var u,d=arguments.length;if(this instanceof e){var p=o,h=c;if(Me&&d>=7&&c>Le){var f=Math.floor(c/Le)*Le,v=Math.floor(f/1e3);p+=v,h-=1e3*v}u=1===d&&i(n)===n?new e(t.parse(n)):d>=7?new e(n,a,s,r,l,p,h):d>=6?new e(n,a,s,r,l,p):d>=5?new e(n,a,s,r,l):d>=4?new e(n,a,s,r):d>=3?new e(n,a,s):d>=2?new e(n,a):d>=1?new e(n):new e}else u=e.apply(this,arguments);return A(u)||j(u,{constructor:t},!0),u},n=new RegExp("^(\\d{4}|[+-]\\d{6})(?:-(\\d{2})(?:-(\\d{2})(?:T(\\d{2}):(\\d{2})(?::(\\d{2})(?:(\\.\\d{1,}))?)?(Z|(?:([-+])(\\d{2}):(\\d{2})))?)?)?)?$"),a=[0,31,59,90,120,151,181,212,243,273,304,334,365],s=function(e,t){var n=t>1?1:0;return a[t]+Math.floor((e-1969+n)/4)-Math.floor((e-1901+n)/100)+Math.floor((e-1601+n)/400)+365*(e-1970)},r=function(t){var n=0,a=t;if(Me&&a>Le){var s=Math.floor(a/Le)*Le,r=Math.floor(s/1e3);n+=r,a-=1e3*r}return o(new e(1970,0,1,0,0,n,a))};for(var l in e)R(e,l)&&(t[l]=e[l]);j(t,{now:e.now,UTC:e.UTC},!0),t.prototype=e.prototype,j(t.prototype,{constructor:t},!0);var c=function(t){var a=n.exec(t);if(a){var i,l=o(a[1]),c=o(a[2]||1)-1,u=o(a[3]||1)-1,d=o(a[4]||0),p=o(a[5]||0),h=o(a[6]||0),f=Math.floor(1e3*o(a[7]||0)),v=Boolean(a[4]&&!a[8]),g="-"===a[9]?1:-1,m=o(a[10]||0),b=o(a[11]||0),y=p>0||h>0||f>0;return(y?24:25)>d&&60>p&&60>h&&1e3>f&&c>-1&&12>c&&24>m&&60>b&&u>-1&&u=-864e13&&864e13>=i)?i:NaN}return e.parse.apply(this,arguments)};return j(t,{parse:c}),t}(Date)}Date.now||(Date.now=function(){return(new Date).getTime()});var je=c.toFixed&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==0xde0b6b3a7640080.toFixed(0)),Ae={base:1e7,size:6,data:[0,0,0,0,0,0],multiply:function(e,t){for(var n=-1,a=t;++n=0;)n+=Ae.data[t],Ae.data[t]=Math.floor(n/e),n=n%e*Ae.base},numToString:function(){for(var e=Ae.size,t="";--e>=0;)if(""!==t||0===e||0!==Ae.data[e]){var n=i(Ae.data[e]);""===t?t=n:t+=q("0000000",0,7-n.length)+n}return t},pow:function Ze(e,t,n){return 0===t?n:t%2===1?Ze(e,t-1,n*e):Ze(e*e,t/2,n)},log:function(e){for(var t=0,n=e;n>=4096;)t+=12,n/=4096;for(;n>=2;)t+=1,n/=2;return t}},Ne=function(e){var t,n,a,s,r,l,c,u;if(t=o(e),t=N(t)?0:Math.floor(t),0>t||t>20)throw new RangeError("Number.toFixed called with invalid number of decimals");if(n=o(this),N(n))return"NaN";if(-1e21>=n||n>=1e21)return i(n);if(a="",0>n&&(a="-",n=-n),s="0",n>1e-21)if(r=Ae.log(n*Ae.pow(2,69,1))-69,l=0>r?n*Ae.pow(2,-r,1):n/Ae.pow(2,r,1),l*=4503599627370496,r=52-r,r>0){for(Ae.multiply(0,l),c=t;c>=7;)Ae.multiply(1e7,0),c-=7;for(Ae.multiply(Ae.pow(10,c,1),0),c=r-1;c>=23;)Ae.divide(1<<23),c-=23;Ae.divide(1<0?(u=s.length,s=t>=u?a+q("0.0000000000000000000",0,t-u+2)+s:a+q(s,0,u-t)+"."+q(s,u-t)):s=a+s,s};j(c,{toFixed:Ne},je);var De=function(){try{return"1"===1..toPrecision(void 0)}catch(e){return!0}}(),Ie=c.toPrecision;j(c,{toPrecision:function(e){return"undefined"==typeof e?Ie.call(this):Ie.call(this,e)}},De),2!=="ab".split(/(?:ab)*/).length||4!==".".split(/(.?)(.?)/).length||"t"==="tesst".split(/(s)*/)[1]||4!=="test".split(/(?:)/,-1).length||"".split(/.?/).length||".".split(/()()/).length>1?!function(){var e="undefined"==typeof/()??/.exec("")[1],t=Math.pow(2,32)-1;l.split=function(n,a){var s=this;if("undefined"==typeof n&&0===a)return[];if(!T(n))return F(this,n,a);var r,i,l,o,c=[],d=(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.unicode?"u":"")+(n.sticky?"y":""),h=0,f=new RegExp(n.source,d+"g");s+="",e||(r=new RegExp("^"+f.source+"$(?!\\s)",d));var v="undefined"==typeof a?t:D.ToUint32(a);for(i=f.exec(s);i&&(l=i.index+i[0].length,!(l>h&&(B(c,q(s,h,i.index)),!e&&i.length>1&&i[0].replace(r,function(){for(var e=1;e1&&i.index=v)));)f.lastIndex===i.index&&f.lastIndex++,i=f.exec(s);return h===s.length?(o||!f.test(""))&&B(c,""):B(c,q(s,h)),c.length>v?q(c,0,v):c}}():"0".split(void 0,0).length&&(l.split=function(e,t){return"undefined"==typeof e&&0===t?[]:F(this,e,t)});var Re=l.replace,ze=function(){var e=[];return"x".replace(/x(.)?/g,function(t,n){B(e,n)}),1===e.length&&"undefined"==typeof e[0]}();ze||(l.replace=function(t,n){var a=e(n),s=T(t)&&/\)[*?]/.test(t.source);if(a&&s){var r=function(e){var a=arguments.length,s=t.lastIndex;t.lastIndex=0;var r=t.exec(e)||[];return t.lastIndex=s,B(r,arguments[a-2],arguments[a-1]),n.apply(this,r)};return Re.call(this,t,r)}return Re.call(this,t,n)});var qe=l.substr,Fe="".substr&&"b"!=="0b".substr(-1);j(l,{substr:function(e,t){var n=e;return 0>e&&(n=g(this.length+e,0)),qe.call(this,n,t)}},Fe);var Ue=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",Be="​",He="["+Ue+"]",Ve=new RegExp("^"+He+He+"*"),$e=new RegExp(He+He+"*$"),We=l.trim&&(Ue.trim()||!Be.trim());j(l,{trim:function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");return i(this).replace(Ve,"").replace($e,"")}},We);var Je=l.lastIndexOf&&-1!=="abcあい".lastIndexOf("あい",2);j(l,{lastIndexOf:function(e){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");for(var t=i(this),n=i(e),a=arguments.length>1?o(arguments[1]):NaN,s=N(a)?1/0:D.ToInteger(a),r=m(g(s,0),t.length),l=n.length,c=r+l;c>0;){c=g(0,c-l);var u=U(q(t,c,r+l),n);if(-1!==u)return c+u}return-1}},Je);var Ge=l.lastIndexOf;if(j(l,{lastIndexOf:function(e){return Ge.apply(this,arguments)}},1!==l.lastIndexOf.length),(8!==parseInt(Ue+"08")||22!==parseInt(Ue+"0x16"))&&(parseInt=function(e){var t=/^[\-+]?0[xX]/;return function(n,a){var s=i(n).trim(),r=o(a)||(t.test(s)?16:10);return e(s,r)}}(parseInt)),"RangeError: test"!==String(new RangeError("test"))){var Xe=(Error.prototype.toString,function(){if("undefined"==typeof this||null===this)throw new TypeError("can't convert "+this+" to object");var e=this.name;"undefined"==typeof e?e="Error":"string"!=typeof e&&(e=i(e));var t=this.message;return"undefined"==typeof t?t="":"string"!=typeof t&&(t=i(t)),e?t?e+": "+t:e:t});Error.prototype.toString=Xe}}),function(e,t){function n(e,t){var n=e.createElement("p"),a=e.getElementsByTagName("head")[0]||e.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function a(){var e=y.elements;return"string"==typeof e?e.split(" "):e}function s(e,t){var n=y.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof e&&(e=e.join(" ")),y.elements=n+" "+e,c(t)}function r(e){var t=b[e[g]];return t||(t={},m++,e[g]=m,b[m]=t),t}function i(e,n,a){if(n||(n=t),d)return n.createElement(e);a||(a=r(n));var s;return s=a.cache[e]?a.cache[e].cloneNode():v.test(e)?(a.cache[e]=a.createElem(e)).cloneNode():a.createElem(e),!s.canHaveChildren||f.test(e)||s.tagUrn?s:a.frag.appendChild(s)}function l(e,n){if(e||(e=t),d)return e.createDocumentFragment();n=n||r(e);for(var s=n.frag.cloneNode(),i=0,l=a(),o=l.length;o>i;i++)s.createElement(l[i]);return s}function o(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return y.shivMethods?i(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+a().join().replace(/[\w\-:]+/g,function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'})+");return n}")(y,t.frag)}function c(e){e||(e=t);var a=r(e);return!y.shivCSS||u||a.hasCSS||(a.hasCSS=!!n(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),d||o(e,a),e}var u,d,p="3.7.3",h=e.html5||{},f=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",m=0,b={};!function(){try{var e=t.createElement("a");e.innerHTML="",u="hidden"in e,d=1==e.childNodes.length||function(){t.createElement("a");var e=t.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(n){u=!0,d=!0}}();var y={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:p,shivCSS:h.shivCSS!==!1,supportsUnknownElements:d,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:i,createDocumentFragment:l,addElements:s};e.html5=y,c(t),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.MiniSignal=e()}}(function(){return function e(t,n,a){function s(i,l){if(!n[i]){if(!t[i]){var o="function"==typeof require&&require;if(!l&&o)return o(i,!0);if(r)return r(i,!0);var c=new Error("Cannot find module '"+i+"'");throw c.code="MODULE_NOT_FOUND",c}var u=n[i]={exports:{}};t[i][0].call(u.exports,function(e){var n=t[i][1][e];return s(n?n:e)},u,u.exports,e,t,n,a)}return n[i].exports}for(var r="function"==typeof require&&require,i=0;i-1}}([].indexOf||function(e){for(F=this.length;F--&&this[F]!==e;);return F}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t';var s=e.regions;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+='";a+="";var o=e.regions;if(o)for(var r,i=-1,c=o.length-1;c>i;){r=o[i+=1],a+=""}return a+="
'+r.name+"
";var u=r.accesses;if(u)for(var d,p=-1,h=u.length-1;h>p;)d=u[p+=1],a+=""+n.link(d.name,d.req?"check-square-o":"square-o","set",{access:d.id},null,d.req?"selected":null)+"
";a+="
"},TMPL.air_alarm=function(e,t,n){var a='
';if(a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Air Status

',e.environment_data){var s=e.environment_data;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+='
'+r.name+':
',a+=2==r.danger_level?'':1==r.danger_level?'':'',a+=""+n.fixed(r.value,2)+r.unit+"
";a+='
Local Status:
',a+=2==e.danger_level?'Danger (Internals Required)':1==e.danger_level?'Caution':'Optimal',a+='
Area Status:
',a+=e.atmos_alarm?'Atmosphere Alarm':e.fire_alarm?'Fire Alarm':'Nominal',a+="
"}else a+='
Warning: Cannot obtain air sample for analysis.
';if(e.dangerous&&(a+='
Warning: Safety measures offline. Device may exhibit abnormal behavior.
'),a+="
",!e.locked||e.siliconUser)if(1!=e.screen&&(a+=""+n.link("Back","arrow-left","screen",{screen:1})),1==e.screen)a+='

Air Controls

',a+=e.atmos_alarm?""+n.link("Area Atmospheric Alarm","close","reset",null,null,"caution"):""+n.link("Area Atmospheric Alarm","hand-stop-o","alarm"),a+='
',a+=3!=e.mode?""+n.link("Panic Siphon","exclamation","mode",{mode:3}):""+n.link("Panic Siphon","close","mode",{mode:1},null,"danger"),a+='
'+n.link("Vent Controls","sign-out","screen",{screen:2})+'
'+n.link("Scrubber Controls","filter","screen",{screen:3})+'
'+n.link("Set Environmental Mode","cog","screen",{screen:4})+'
'+n.link("Set Alarm Threshold","bar-chart","screen",{screen:5})+"
";else if(2==e.screen){var o=e.vents;if(o)for(var c,i=-1,u=o.length-1;u>i;)c=o[i+=1],a+='

'+c.long_name+'

Power:
',a+=c.power?""+n.link("On","power-off","adjust",{id_tag:c.id_tag,command:"power",val:0},null,null):""+n.link("Off","close","adjust",{id_tag:c.id_tag,command:"power",val:1},null,"danger"),a+='
Mode:
',a+="release"==c.direction?'Pressurizing':'Siphoning',a+='
Pressure Checks:
'+n.link("Internal","sign-in","adjust",{id_tag:c.id_tag,command:"incheck",val:c.checks},null,c.incheck?"selected":null)+n.link("External","sign-out","adjust",{id_tag:c.id_tag,command:"excheck",val:c.checks},null,c.excheck?"selected":null)+'
Set Pressure:
'+n.link(n.fixed(c.external),"pencil","adjust",{id_tag:c.id_tag,command:"set_external_pressure"})+n.link("Reset","refresh","adjust",{id_tag:c.id_tag,command:"reset_external_pressure"},c.extdefault?"disabled":null)+"
";e.vents.length||(a+='No vents connected.')}else if(3==e.screen){var d=e.scrubbers;if(d)for(var p,i=-1,h=d.length-1;h>i;)p=d[i+=1],a+='

'+p.long_name+'

Power:
',a+=p.power?""+n.link("On","power-off","adjust",{id_tag:p.id_tag,command:"power",val:0},null,null):""+n.link("Off","close","adjust",{id_tag:p.id_tag,command:"power",val:1},null,"danger"),a+='
Mode:
',a+=p.scrubbing?""+n.link("Scrubbing","filter","adjust",{id_tag:p.id_tag,command:"scrubbing",val:0},null,null):""+n.link("Siphoning","sign-in","adjust",{id_tag:p.id_tag,command:"scrubbing",val:1},null,"danger"),a+='
Range:
',a+=p.widenet?""+n.link("Extended","expand","adjust",{id_tag:p.id_tag,command:"widenet",val:0},null,"caution"):""+n.link("Normal","compress","adjust",{id_tag:p.id_tag,command:"widenet",val:1},null,null),a+='
Filters:
'+n.link("CO2",p.filter_co2?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"co2_scrub",val:p.filter_co2?0:1},null,p.filter_co2?"selected":null)+n.link("N2O",p.filter_n2o?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"n2o_scrub",val:p.filter_n2o?0:1},null,p.filter_n2o?"selected":null)+n.link("Plasma",p.filter_toxins?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"tox_scrub",val:p.filter_toxins?0:1},null,p.filter_toxins?"selected":null)+"
";e.scrubbers.length||(a+='No scrubbers connected.')}else if(4==e.screen){a+='

Environmental Modes

';var f=e.modes;if(f)for(var v,i=-1,g=f.length-1;g>i;)v=f[i+=1],a+='
'+n.link(v.name,v.selected?"check-square-o":"square-o","mode",{mode:v.mode},null,v.selected?v.danger?"danger":"selected":null)+"
";a+="
"}else if(5==e.screen){a+='

Alarm Thresholds

';var m=e.thresholds;if(m)for(var b,i=-1,y=m.length-1;y>i;){b=m[i+=1],a+="";var k=b.settings;if(k)for(var w,E=-1,x=k.length-1;x>E;)w=k[E+=1],a+="";a+=""}a+="
min2min1max1max2
"+b.name+""+n.link(w.selected>=0?n.round(100*w.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:w.env,"var":w.val})+"
"}return a},TMPL.apc=function(e,t,n){var a='
';a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.malfStatus>=2?"linkOff":e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Power Status

Main Breaker:
',a+=e.locked&&!e.siliconUser?e.isOperating?'On':'Off':""+n.link("On","power-off","breaker",null,e.isOperating?"selected":null)+n.link("Off","close","breaker",null,e.isOperating?null:"selected"),a+='
External Power:
',a+=2==e.externalPower?'Good':1==e.externalPower?'Low':'None',a+='
Power Cell:
',a+=null!=e.powerCellStatus?""+n.bar(e.powerCellStatus,0,100,e.powerCellStatus>=50?"good":e.powerCellStatus>=25?"average":"bad",n.fixed(e.powerCellStatus)+"%"):'Power cell removed.',a+="
",null!=e.powerCellStatus&&(a+='
Charge Mode:
',a+=e.locked&&!e.siliconUser?e.chargeMode?'Auto':'Off':""+n.link("Auto","refresh","chargemode",null,e.chargeMode?"selected":null)+n.link("Off","close","chargemode",null,e.chargeMode?null:"selected"),a+=" ",a+=e.chargingStatus>1?'[Fully Charged]':1==e.chargingStatus?'[Charging]':'[Not Charging]',a+="
"),a+='

Power Channels

';var s=e.powerChannels;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+="";return a+='
"+r.title+":"+r.powerLoad+" W",r.status<=1?a+='Off':r.status>=2&&(a+='On'),a+="",a+=1==r.status||3==r.status?"[Auto]":"[Manual]",a+='',(!e.locked||e.siliconUser)&&(a+=""+n.link("Auto","refresh","channel",r.topicParams.auto,1==r.status||3==r.status?"selected":null)+n.link("On","power-off","channel",r.topicParams.on,2==r.status?"selected":null)+n.link("Off","close","channel",r.topicParams.off,0==r.status?"selected":null)),a+="
Total Load:'+e.totalLoad+" W
",e.siliconUser&&(a+='

System Overrides

'+n.link("Overload Lighting Circuit","lightbulb-o","overload")+"
",1==e.malfStatus?a+=""+n.link("Override Programming","terminal","hack"):2==e.malfStatus?a+=""+n.link("Shunt Core Processes","caret-square-o-down","occupy"):3==e.malfStatus?a+=""+n.link("Return to Main Core","carat-square-o-left","deoccupy"):4==e.malfStatus&&(a+=""+n.link("Shunt Core Processes","caret-square-o-down")),a+="
"),a+='
Cover Lock:
',a+=e.locked&&!e.siliconUser?e.coverLocked?"Engaged":"Disengaged":""+n.link("Engaged","lock","lock",null,e.coverLocked?"selected":null)+n.link("Disengaged","unlock","lock",null,e.coverLocked?null:"selected"),a+="
"},TMPL.atmos_filter=function(e,t,n){var a='
Power:
'+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
Output Pressure:
'+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Filter:
'+n.link("Nothing",null,"filter",{mode:-1},-1==e.filter_type?"selected":null)+n.link("Plasma",null,"filter",{mode:0},0==e.filter_type?"selected":null)+n.link("O2",null,"filter",{mode:1},1==e.filter_type?"selected":null)+n.link("N2",null,"filter",{mode:2},2==e.filter_type?"selected":null)+n.link("CO2",null,"filter",{mode:3},3==e.filter_type?"selected":null)+n.link("N2O",null,"filter",{mode:4},4==e.filter_type?"selected":null)+"
";return a},TMPL.atmos_mixer=function(e,t,n){var a='
Power:
'+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
Output Pressure:
'+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Node 1:
'+n.link("","fast-backward","node1",{concentration:"-0.1"},null)+n.link("","backward","node1",{concentration:"-0.01"},null)+n.link("","forward","node1",{concentration:"0.01"},null)+n.link("","fast-forward","node1",{concentration:"0.1"},null)+''+e.node1_concentration+'%
Node 2:
'+n.link("","fast-backward","node2",{concentration:"-0.1"},null)+n.link("","backward","node2",{concentration:"-0.01"},null)+n.link("","forward","node2",{concentration:"0.01"},null)+n.link("","fast-forward","node2",{concentration:"0.1"},null)+''+e.node2_concentration+"%
";return a},TMPL.atmos_pump=function(e,t,n){var a='
Power:
'+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+"
";return a+=e.max_rate?'
Transfer Rate:
'+n.link("Set","pencil","transfer",{set:"custom"})+n.link("Max","plus","transfer",{set:"max"},e.transfer_rate==e.max_rate?"disabled":null)+''+e.transfer_rate+" L/s
":'
Output Pressure:
'+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+" kPa
",a+="
"},TMPL.canister=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a tank.":"The regulator is not connected to a tank.",a+='

Canister

'+n.link("Relabel","pencil","relabel",null,e.canLabel?null:"disabled")+'
Pressure:
'+e.tankPressure+' kPa
Port:
',a+=e.portConnected?'Connected':'Disconnected',a+='

Valve

Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.valveOpen?"selected":null)+n.link("Close","lock","valve",null,e.valveOpen?null:"selected")+'

Holding Tank

',a+=e.hasHoldingTank?"
"+n.link("Eject","eject","eject")+'
Label:
'+e.holdingTank.name+'
Tank Pressure:
'+e.holdingTank.tankPressure+" kPa
":'
No Holding Tank
',a+="
"},TMPL.chem_dispenser=function(e,t,n){var a='

Status

Energy:
'+n.bar(e.energy,0,e.maxEnergy,null,e.energy+" Units")+'
Amount:
',s=e.beakerTransferAmounts;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=""+n.link(r,"plus","amount",{set:r},e.amount==r?"selected":null);a+='

Dispense

';var o=e.chemicals;if(o)for(var c,i=-1,u=o.length-1;u>i;)c=o[i+=1],a+=""+n.link(c.title,"tint","dispense",c.commands,null,"gridable");a+='

Beaker

'+n.link("Eject","eject","eject",null,e.isBeakerLoaded?null:"disabled")+'
';var d=e.beakerTransferAmounts;if(d)for(var r,i=-1,p=d.length-1;p>i;)r=d[i+=1],a+=""+n.link(r,"minus","remove",{amount:r});if(a+='
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){a+=""+e.beakerCurrentVolume+"/"+e.beakerMaxVolume+" Units
";var h=e.beakerContents;if(h)for(var f,i=-1,v=h.length-1;v>i;)f=h[i+=1],a+=''+f.volume+" units of "+f.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.chem_heater=function(e,t,n){var a='

Status

Power:
'+n.link(e.isActive?"On":"Off",e.isActive?"power-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
Target:
'+n.link(e.targetTemp+"K","pencil","temperature")+'

Beaker

'+n.link("Eject","eject","eject",null,e.isBeakerLoaded?null:"disabled")+'
Contents:
';if(e.isBeakerLoaded)if(a+="Temperature: "+e.currentTemp+"K
",e.beakerContents.length){var s=e.beakerContents;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=''+r.volume+" units of "+r.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.cryo=function(e,t,n){var a='

Occupant

Occupant:
';if(a+=e.hasOccupant?""+e.occupant.name+"":'No Occupant',a+="
",e.hasOccupant&&(a+='
State:
',a+=0==e.occupant.stat?'Conscious':1==e.occupant.stat?'Unconscious':'Dead',a+='
Temperature:
'+n.round(e.occupant.bodyTemperature)+" K
"),e.hasOccupant&&e.occupant.stat<2&&(a+='
Health:
'+n.bar(e.occupant.health,e.occupant.minHealth,e.occupant.Maxhealth,e.occupant.health>=0?"good":"average",n.round(e.occupant.health))+'
Brute:
'+n.bar(e.occupant.bruteLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.bruteLoss))+'
Respiratory:
'+n.bar(e.occupant.oxyLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.oxyLoss))+'
Toxin:
'+n.bar(e.occupant.toxLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.toxLoss))+'
Burn:
'+n.bar(e.occupant.fireLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.fireLoss))+"
"),a+='

Cell

Power:
',a+=e.isOperating?""+n.link("On","power-off","off"):""+n.link("Off","close","on"),a+='
Temperature:
'+e.cellTemperature+' K
Door:
',a+=e.isOpen?""+n.link("Open","unlock","close"):""+n.link("Closed","lock","open"),a+=e.autoEject?""+n.link("Auto","sign-out","autoeject"):""+n.link("Manual","sign-in","autoeject"),a+='

Beaker

'+n.link("Eject","eject","ejectbeaker",null,e.isBeakerLoaded?null:"disabled")+'
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){var s=e.beakerContents;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=''+r.volume+" units of "+r.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.smes=function(e,t,n){var a='

Storage

Stored Energy:
'+n.bar(e.capacityPercent,0,100,e.capacityPercent>=50?"good":e.capacityPercent>=15?"average":"bad",n.round(e.capacityPercent)+"%")+'

Input

Charge Mode:
'+n.link("Auto","refresh","tryinput",null,e.inputAttempt?"selected":null)+n.link("Off","close","tryinput",null,e.inputAttempt?null:"selected")+" ";return a+=e.capacityPercent>=99?"[Fully Charged]":e.inputting?"[Charging]":"[Not Charging]",a+='
Input Setting:
'+n.bar(e.inputLevel,0,e.inputLevelMax,null,e.inputLevel+" W")+'
Adjust Input:
'+n.link("","fast-backward","input",{set:"min"},e.inputLevel?null:"selected")+n.link("","backward","input",{set:"minus"},e.inputLevel?null:"disabled")+n.link("Set","pencil","input",{set:"custom"},null)+n.link("","forward","input",{set:"plus"},e.inputLevel==e.inputLevelMax?"disabled":null)+n.link("","fast-forward","input",{set:"max"},e.inputLevel==e.inputLevelMax?"selected":null)+'
Available:
'+e.inputAvailable+' W

Output

Charge Mode:
'+n.link("On","power-off","tryoutput",null,e.outputAttempt?"selected":null)+n.link("Off","close","tryoutput",null,e.outputAttempt?null:"selected")+" ",a+=e.outputting?'[Sending]':e.charge>0?'[Not Sending]':'[No Charge]',a+='
Output Setting:
'+n.bar(e.outputLevel,0,e.outputLevelMax,null,e.outputLevel+" W")+'
Adjust Output:
'+n.link("","fast-backward","output",{set:"min"},e.outputLevel?null:"selected")+n.link("","backward","output",{set:"minus"},e.outputLevel?null:"disabled")+n.link("Set","pencil","output",{set:"custom"},null)+n.link("","forward","output",{set:"plus"},e.outputLevel==e.outputLevelMax?"disabled":null)+n.link("","fast-forward","output",{set:"max"},e.outputLevel==e.outputLevelMax?"selected":null)+'
Outputting:
'+e.outputUsed+" W
"},TMPL.solar_control=function(e,t,n){var a='

Status

Generated Power:
'+e.generated+' W
Orientation:
'+e.angle+"° ("+e.direction+')
Adjust:
'+n.link("15°","step-backward","control",{cdir:"-15"})+n.link("1°","backward","control",{cdir:"-1"})+n.link("1°","forward","control",{cdir:"1"})+n.link("15°","step-forward","control",{cdir:"15"})+'

Tracking

Tracker Mode:
'+n.link("Off","close","tracking",{mode:"0"},0==e.tracking_state?"selected":"")+n.link("Timed","clock-o","tracking",{mode:"1"},1==e.tracking_state?"selected":"");return a+=e.connected_tracker?""+n.link("Auto","refresh","tracking",{mode:"2"},2==e.tracking_state?"selected":""):""+n.link("Auto","refresh",null,null,"disabled"),a+='
Tracking Rate:
'+e.tracking_rate+" deg/h ("+e.rotating_way+')
Adjust:
'+n.link("180°","fast-backward","control",{tdir:"-180"})+n.link("30°","step-backward","control",{tdir:"-30"})+n.link("1°","backward","control",{tdir:"-1"})+n.link("1°","forward","control",{tdir:"1"})+n.link("30°","step-forward","control",{tdir:"30"})+n.link("180°","fast-forward","control",{tdir:"180"})+'

Devices

Search:
'+n.link("Refresh","refresh","refresh")+'
Solar Tracker:
',a+=e.connected_tracker?'Found':'Not Found',a+='
Solars Panels:
'+e.connected_panels+" Connected
"},TMPL.space_heater=function(e,t,n){var a='

Status

Power:
'+n.link("On","power-off","power",null,e.on?"selected":null)+n.link("Off","close","power",null,e.on?null:"selected")+'
Stored Energy:
';return a+=e.hasPowercell?""+n.bar(e.powerLevel,0,100,"good",e.powerLevel+"%"):'No power cell loaded.',a+="
",e.open&&(a+='
Cell:
',a+=e.hasPowercell?""+n.link("Eject","eject","ejectcell"):""+n.link("Install","eject","installcell"),a+="
"),a+='

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(a+='
Adjustment:
'+n.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+n.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+n.link("Set","pencil","temp",{set:"custom"},null)+n.link("","forward","temp",{set:5},e.targetTemp
"),a+='
Operational Mode:
', -a+=e.open?""+n.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+n.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+n.link("Auto","arrows-v","mode",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto',a+="
"},TMPL.tanks=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",a+='
Tank Pressure:
'+n.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+n.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},TMPL._nanotrasen=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.Chrome=function(){function t(t,n){this.nanoui=t,this.handleResize=e(this.handleResize,this),this.handleDrag=e(this.handleDrag,this),this.calcOffsets=e(this.calcOffsets,this),this.nanoui.updated.add(this.linkStatus),this.nanoui.updated.add(this.windowStatus),this.nanoui.rendered.add(this.handleLinks),n.config.user.fancy&&(this.dragging=!1,this.resizing=!1,this.switchChrome(),this.calcOffsets(),this.handleButtons(),this.handleDrag(),this.handleResize())}return t.prototype.linkStatus=function(e){var t;return t=document.queryAll(".link"),e.config.status!==NANO.INTERACTIVE?t.forEach(function(e){return e.className="link disabled"}):void 0},t.prototype.windowStatus=function(e){var t;return t=document.queryAll(".statusicon"),t.forEach(function(t){var n;switch(e.config.status){case NANO.INTERACTIVE:n="good";break;case NANO.UPDATE:n="average";break;default:n="bad"}return t.classList.remove("good","bad","average"),t.classList.add(n)})},t.prototype.handleLinks=function(e){var t;return t=function(){var t,n;return t=this.getAttribute("data-action"),n=JSON.parse(this.getAttribute("data-params")),null!=t&&null!=n&&e.config.status===NANO.INTERACTIVE?nanoui.act(t,n):void 0},document.queryAll(".link.active").forEach(function(e){return e.addEventListener("click",t)})},t.prototype.switchChrome=function(){var e;return this.nanoui.winset("titlebar",0),this.nanoui.winset("can-resize",0),e=document.queryAll(".fancy"),e.forEach(function(e){return e.classList.remove("fancy")})},t.prototype.calcOffsets=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.nanoui.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.nanoui.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},t.prototype.handleButtons=function(){var e,t;return e=document.queryAll(".close"),e.forEach(function(e){return e.addEventListener("click",function(e){return function(){return e.nanoui.close()}}(this))}),t=document.queryAll(".minimize"),t.forEach(function(e){return e.addEventListener("click",function(e){return function(){return e.nanoui.minimize()}}(this))})},t.prototype.handleDrag=function(){var e,t;return e=function(e){return function(t){var n,a;return null==t&&(t=window.event),e.dragging?(null==e.xDrag&&(e.xDrag=t.screenX),null==e.yDrag&&(e.yDrag=t.screenY),n=t.screenX-e.xDrag+(window.screenLeft-e.xOffset),a=t.screenY-e.yDrag+(window.screenTop-e.yOffset),e.nanoui.setPos(n,a),e.xDrag=t.screenX,e.yDrag=t.screenY):void 0}}(this),t=document.query("#titlebar"),document.addEventListener("mousemove",e),t.addEventListener("mousedown",function(e){return function(){return e.dragging=!0}}(this)),document.addEventListener("mouseup",function(e){return function(){return e.dragging=!1,delete e.xDrag,delete e.yDrag}}(this))},t.prototype.handleResize=function(){var e,t;return t=function(e){return function(t){var n,a;return null==t&&(t=window.event),e.resizing?(null==e.xResize&&(e.xResize=t.screenX),null==e.yResize&&(e.yResize=t.screenY),n=Math.max(250,t.screenX-e.xResize+window.innerWidth),a=Math.max(250,t.screenY-e.yResize+window.innerHeight),e.nanoui.setSize(n,a),e.xResize=t.screenX,e.yResize=t.screenY):void 0}}(this),e=document.query("#resize"),document.addEventListener("mousemove",t),e.addEventListener("mousedown",function(e){return function(){return e.resizing=!0}}(this)),document.addEventListener("mouseup",function(e){return function(){return e.resizing=!1,delete e.xResize,delete e.yResize}}(this))},t}()}.call(this),function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0}}.call(this),function(){this.helpers={link:function(e,t,n,a,s,r){return null==e&&(e=""),null==t&&(t=""),null==n&&(n=""),null==a&&(a={}),null==s&&(s=""),null==r&&(r=""),a=JSON.stringify(a),t&&(t="",r+=" iconed"),s?""+t+e+"":""+t+e+""},bar:function(e,t,n,a,s){var r;return null==e&&(e=0),null==t&&(t=0),null==n&&(n=100),null==a&&(a=""),null==s&&(s=""),n>t?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),r=Math.round((e-t)/(n-t)*100),"
"+s+"
"},round:function(e){return Math.round(e)},fixed:function(e,t){return null==t&&(t=1),Number(Math.round(e+"e"+t)+"e-"+t)},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)}}}.call(this),function(){var e,t=function(e,t){return function(){return e.apply(t,arguments)}};e=function(){function e(){this.minimize=t(this.minimize,this),this.close=t(this.close,this),this.focusMap=t(this.focusMap,this),this.setSize=t(this.setSize,this),this.setPos=t(this.setPos,this),this.winset=t(this.winset,this),this.act=t(this.act,this),this.render=t(this.render,this),this.update=t(this.update,this);var e,n;this.laidout=!1,this.dragging=!1,this.resizing=!1;try{this.data=JSON.parse(document.query("#data").getAttribute("data-initial"))}catch(n){e=n,this.error(e)}null!=this.data&&"data"in this.data&&"config"in this.data||this.error("Initial data did not load correctly."),this.render(this.data),this.chrome=new Chrome(this,this.data),this.initialized.dispatch(this.data),this.incoming.add(this.update)}return e.prototype.initialized=new MiniSignal,e.prototype.incoming=new MiniSignal,e.prototype.update=function(e){var t,n;try{this.data=JSON.parse(e)}catch(n){t=n,this.error(t)}return this.render(this.data),this.updated.dispatch(this.data)},e.prototype.updated=new MiniSignal,e.prototype.render=function(e){var t,n,a,s;try{return this.laidout||(this.laidout=!0,document.query("body").classList.add(e.config.layout),s=TMPL[e.config.templates.layout](e.data,e.config,helpers),document.query("#layout").innerHTML=s),t=TMPL[e.config.templates.content](e.data,e.config,helpers),document.query("#content").innerHTML=t,this.rendered.dispatch(this.data)}catch(a){return n=a,this.error(n)}},e.prototype.rendered=new MiniSignal,e.prototype.href=function(e,t){return null==e&&(e={}),null==t&&(t=""),"byond://"+t+"?"+Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&")},e.prototype.act=function(e,t){return null==t&&(t={}),t.src=this.data.config.ref,t.nano=e,location.href=this.href(t,null)},e.prototype.error=function(e){return location.href=this.href({nano_error:e},null)},e.prototype.winset=function(e,t,n){var a;return null==n&&(n=this.data.config.window.ref),location.href=this.href((a={},a[n+"."+e]=t,a),"winset")},e.prototype.setPos=function(e,t){return this.winset("pos",e+","+t)},e.prototype.setSize=function(e,t){return this.winset("size",e+","+t)},e.prototype.focusMap=function(){return this.winset("focus",1,"mapwindow.map")},e.prototype.close=function(){return this.winset("is-visible","false"),location.href=this.href({command:"nanoclose "+this.data.config.ref},"winset")},e.prototype.minimize=function(){return this.winset("is-minimized","true")},e}(),this.nanoui=new e}.call(this); \ No newline at end of file +return function(n){var a,s,r,i,l,o,c=this.parentNode;if(c){for(r=this.getAttribute("id")||g,i=r===g?r:r.replace(N,D),o=n.split(","),s=0;s-1}}([].indexOf||function(e){for(F=this.length;F--&&this[F]!==e;);return F}),item:function(e){return this[e]||null},remove:function(){for(var e,t=0;t';var s=e.regions;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+='";a+="";var o=e.regions;if(o)for(var r,i=-1,c=o.length-1;c>i;){r=o[i+=1],a+=""}return a+="
'+r.name+"
";var u=r.accesses;if(u)for(var d,p=-1,h=u.length-1;h>p;)d=u[p+=1],a+=""+n.link(d.name,d.req?"check-square-o":"square-o","set",{access:d.id},null,d.req?"selected":null)+"
";a+="
"},TMPL.air_alarm=function(e,t,n){var a='
';if(a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Air Status

',e.environment_data){var s=e.environment_data;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+='
'+r.name+':
',a+=2==r.danger_level?'':1==r.danger_level?'':'',a+=""+n.fixed(r.value,2)+r.unit+"
";a+='
Local Status:
',a+=2==e.danger_level?'Danger (Internals Required)':1==e.danger_level?'Caution':'Optimal',a+='
Area Status:
',a+=e.atmos_alarm?'Atmosphere Alarm':e.fire_alarm?'Fire Alarm':'Nominal',a+="
"}else a+='
Warning: Cannot obtain air sample for analysis.
';if(e.emagged&&(a+='
Warning: Safety measures offline. Device may exhibit abnormal behavior.
'),a+="
",!e.locked||e.siliconUser)if(1!=e.screen&&(a+=""+n.link("Back","arrow-left","screen",{screen:1})),1==e.screen)a+='

Air Controls

',a+=e.atmos_alarm?""+n.link("Area Atmospheric Alarm","close","reset",null,null,"caution"):""+n.link("Area Atmospheric Alarm","hand-stop-o","alarm"),a+='
',a+=3!=e.mode?""+n.link("Panic Siphon","exclamation","mode",{mode:3}):""+n.link("Panic Siphon","close","mode",{mode:1},null,"danger"),a+='
'+n.link("Vent Controls","sign-out","screen",{screen:2})+'
'+n.link("Scrubber Controls","filter","screen",{screen:3})+'
'+n.link("Set Environmental Mode","cog","screen",{screen:4})+'
'+n.link("Set Alarm Threshold","bar-chart","screen",{screen:5})+"
";else if(2==e.screen){var o=e.vents;if(o)for(var c,i=-1,u=o.length-1;u>i;)c=o[i+=1],a+='

'+c.long_name+'

Power:
',a+=c.power?""+n.link("On","power-off","adjust",{id_tag:c.id_tag,command:"power",val:0},null,null):""+n.link("Off","close","adjust",{id_tag:c.id_tag,command:"power",val:1},null,"danger"),a+='
Mode:
',a+="release"==c.direction?'Pressurizing':'Siphoning',a+='
Pressure Checks:
'+n.link("Internal","sign-in","adjust",{id_tag:c.id_tag,command:"incheck",val:c.checks},null,c.incheck?"selected":null)+n.link("External","sign-out","adjust",{id_tag:c.id_tag,command:"excheck",val:c.checks},null,c.excheck?"selected":null)+'
Set Pressure:
'+n.link(n.fixed(c.external),"pencil","adjust",{id_tag:c.id_tag,command:"set_external_pressure"})+n.link("Reset","refresh","adjust",{id_tag:c.id_tag,command:"reset_external_pressure"},c.extdefault?"disabled":null)+"
";e.vents.length||(a+='No vents connected.')}else if(3==e.screen){var d=e.scrubbers;if(d)for(var p,i=-1,h=d.length-1;h>i;)p=d[i+=1],a+='

'+p.long_name+'

Power:
',a+=p.power?""+n.link("On","power-off","adjust",{id_tag:p.id_tag,command:"power",val:0},null,null):""+n.link("Off","close","adjust",{id_tag:p.id_tag,command:"power",val:1},null,"danger"),a+='
Mode:
',a+=p.scrubbing?""+n.link("Scrubbing","filter","adjust",{id_tag:p.id_tag,command:"scrubbing",val:0},null,null):""+n.link("Siphoning","sign-in","adjust",{id_tag:p.id_tag,command:"scrubbing",val:1},null,"danger"),a+='
Range:
',a+=p.widenet?""+n.link("Extended","expand","adjust",{id_tag:p.id_tag,command:"widenet",val:0},null,"caution"):""+n.link("Normal","compress","adjust",{id_tag:p.id_tag,command:"widenet",val:1},null,null),a+='
Filters:
'+n.link("CO2",p.filter_co2?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"co2_scrub",val:p.filter_co2?0:1},null,p.filter_co2?"selected":null)+n.link("N2O",p.filter_n2o?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"n2o_scrub",val:p.filter_n2o?0:1},null,p.filter_n2o?"selected":null)+n.link("Plasma",p.filter_toxins?"check-square-o":"square-o","adjust",{id_tag:p.id_tag,command:"tox_scrub",val:p.filter_toxins?0:1},null,p.filter_toxins?"selected":null)+"
";e.scrubbers.length||(a+='No scrubbers connected.')}else if(4==e.screen){a+='

Environmental Modes

';var f=e.modes;if(f)for(var v,i=-1,g=f.length-1;g>i;)v=f[i+=1],a+='
'+n.link(v.name,v.selected?"check-square-o":"square-o","mode",{mode:v.mode},null,v.selected?v.danger?"danger":"selected":null)+"
";a+="
"}else if(5==e.screen){a+='

Alarm Thresholds

';var m=e.thresholds;if(m)for(var b,i=-1,y=m.length-1;y>i;){b=m[i+=1],a+="";var k=b.settings;if(k)for(var w,E=-1,x=k.length-1;x>E;)w=k[E+=1],a+="";a+=""}a+="
min2min1max1max2
"+b.name+""+n.link(w.selected>=0?n.round(100*w.selected)/100:"Off",null,"adjust",{command:"set_threshold",env:w.env,"var":w.val})+"
"}return a},TMPL.apc=function(e,t,n){var a='
';a+=e.siliconUser?'
Interface Lock:
'+n.link("Engaged","lock","toggleaccess",null,e.locked?"selected":null)+n.link("Disengaged","unlock","toggleaccess",null,e.malfStatus>=2?"linkOff":e.locked?null:"selected")+"
":e.locked?"Swipe an ID card to unlock this interface.":"Swipe an ID card to lock this interface.",a+='

Power Status

Main Breaker:
',a+=e.locked&&!e.siliconUser?e.isOperating?'On':'Off':""+n.link("On","power-off","breaker",null,e.isOperating?"selected":null)+n.link("Off","close","breaker",null,e.isOperating?null:"selected"),a+='
External Power:
',a+=2==e.externalPower?'Good':1==e.externalPower?'Low':'None',a+='
Power Cell:
',a+=null!=e.powerCellStatus?""+n.bar(e.powerCellStatus,0,100,e.powerCellStatus>=50?"good":e.powerCellStatus>=25?"average":"bad",n.fixed(e.powerCellStatus)+"%"):'Power cell removed.',a+="
",null!=e.powerCellStatus&&(a+='
Charge Mode:
',a+=e.locked&&!e.siliconUser?e.chargeMode?'Auto':'Off':""+n.link("Auto","refresh","chargemode",null,e.chargeMode?"selected":null)+n.link("Off","close","chargemode",null,e.chargeMode?null:"selected"),a+=" ",a+=e.chargingStatus>1?'[Fully Charged]':1==e.chargingStatus?'[Charging]':'[Not Charging]',a+="
"),a+='

Power Channels

';var s=e.powerChannels;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+="";return a+='
"+r.title+":"+r.powerLoad+" W",r.status<=1?a+='Off':r.status>=2&&(a+='On'),a+="",a+=1==r.status||3==r.status?"[Auto]":"[Manual]",a+='',(!e.locked||e.siliconUser)&&(a+=""+n.link("Auto","refresh","channel",r.topicParams.auto,1==r.status||3==r.status?"selected":null)+n.link("On","power-off","channel",r.topicParams.on,2==r.status?"selected":null)+n.link("Off","close","channel",r.topicParams.off,0==r.status?"selected":null)),a+="
Total Load:'+e.totalLoad+" W
",e.siliconUser&&(a+='

System Overrides

'+n.link("Overload Lighting Circuit","lightbulb-o","overload")+"
",1==e.malfStatus?a+=""+n.link("Override Programming","terminal","hack"):2==e.malfStatus?a+=""+n.link("Shunt Core Processes","caret-square-o-down","occupy"):3==e.malfStatus?a+=""+n.link("Return to Main Core","carat-square-o-left","deoccupy"):4==e.malfStatus&&(a+=""+n.link("Shunt Core Processes","caret-square-o-down")),a+="
"),a+='
Cover Lock:
',a+=e.locked&&!e.siliconUser?e.coverLocked?"Engaged":"Disengaged":""+n.link("Engaged","lock","lock",null,e.coverLocked?"selected":null)+n.link("Disengaged","unlock","lock",null,e.coverLocked?null:"selected"),a+="
"},TMPL.atmos_filter=function(e,t,n){var a='
Power:
'+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
Output Pressure:
'+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Filter:
'+n.link("Nothing",null,"filter",{mode:-1},-1==e.filter_type?"selected":null)+n.link("Plasma",null,"filter",{mode:0},0==e.filter_type?"selected":null)+n.link("O2",null,"filter",{mode:1},1==e.filter_type?"selected":null)+n.link("N2",null,"filter",{mode:2},2==e.filter_type?"selected":null)+n.link("CO2",null,"filter",{mode:3},3==e.filter_type?"selected":null)+n.link("N2O",null,"filter",{mode:4},4==e.filter_type?"selected":null)+"
";return a},TMPL.atmos_mixer=function(e,t,n){var a='
Power:
'+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+'
Output Pressure:
'+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+' kPa
Node 1:
'+n.link("","fast-backward","node1",{concentration:"-0.1"},null)+n.link("","backward","node1",{concentration:"-0.01"},null)+n.link("","forward","node1",{concentration:"0.01"},null)+n.link("","fast-forward","node1",{concentration:"0.1"},null)+''+e.node1_concentration+'%
Node 2:
'+n.link("","fast-backward","node2",{concentration:"-0.1"},null)+n.link("","backward","node2",{concentration:"-0.01"},null)+n.link("","forward","node2",{concentration:"0.01"},null)+n.link("","fast-forward","node2",{concentration:"0.1"},null)+''+e.node2_concentration+"%
";return a},TMPL.atmos_pump=function(e,t,n){var a='
Power:
'+n.link(e.on?"On":"Off",e.on?"power-off":"close","power")+"
";return a+=e.max_rate?'
Transfer Rate:
'+n.link("Set","pencil","transfer",{set:"custom"})+n.link("Max","plus","transfer",{set:"max"},e.transfer_rate==e.max_rate?"disabled":null)+''+e.transfer_rate+" L/s
":'
Output Pressure:
'+n.link("Set","pencil","pressure",{set:"custom"})+n.link("Max","plus","pressure",{set:"max"},e.set_pressure==e.max_pressure?"disabled":null)+''+e.set_pressure+" kPa
",a+="
"},TMPL.canister=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a tank.":"The regulator is not connected to a tank.",a+='

Canister

'+n.link("Relabel","pencil","relabel",null,e.canLabel?null:"disabled")+'
Pressure:
'+e.tankPressure+' kPa
Port:
',a+=e.portConnected?'Connected':'Disconnected',a+='

Valve

Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.valveOpen?"selected":null)+n.link("Close","lock","valve",null,e.valveOpen?null:"selected")+'

Holding Tank

',a+=e.hasHoldingTank?"
"+n.link("Eject","eject","eject")+'
Label:
'+e.holdingTank.name+'
Tank Pressure:
'+e.holdingTank.tankPressure+" kPa
":'
No Holding Tank
',a+="
"},TMPL.chem_dispenser=function(e,t,n){var a='

Status

Energy:
'+n.bar(e.energy,0,e.maxEnergy,null,e.energy+" Units")+'
Amount:
',s=e.beakerTransferAmounts;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=""+n.link(r,"plus","amount",{set:r},e.amount==r?"selected":null);a+='

Dispense

';var o=e.chemicals;if(o)for(var c,i=-1,u=o.length-1;u>i;)c=o[i+=1],a+=""+n.link(c.title,"tint","dispense",c.commands,null,"gridable");a+='

Beaker

'+n.link("Eject","eject","eject",null,e.isBeakerLoaded?null:"disabled")+'
';var d=e.beakerTransferAmounts;if(d)for(var r,i=-1,p=d.length-1;p>i;)r=d[i+=1],a+=""+n.link(r,"minus","remove",{amount:r});if(a+='
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){a+=""+e.beakerCurrentVolume+"/"+e.beakerMaxVolume+" Units
";var h=e.beakerContents;if(h)for(var f,i=-1,v=h.length-1;v>i;)f=h[i+=1],a+=''+f.volume+" units of "+f.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.chem_heater=function(e,t,n){var a='

Status

Power:
'+n.link(e.isActive?"On":"Off",e.isActive?"power-off":"close","power",null,e.isBeakerLoaded?null:"disabled")+'
Target:
'+n.link(e.targetTemp+"K","pencil","temperature")+'

Beaker

'+n.link("Eject","eject","eject",null,e.isBeakerLoaded?null:"disabled")+'
Contents:
';if(e.isBeakerLoaded)if(a+="Temperature: "+e.currentTemp+"K
",e.beakerContents.length){var s=e.beakerContents;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=''+r.volume+" units of "+r.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.cryo=function(e,t,n){var a='

Occupant

Occupant:
';if(a+=e.hasOccupant?""+e.occupant.name+"":'No Occupant',a+="
",e.hasOccupant&&(a+='
State:
',a+=0==e.occupant.stat?'Conscious':1==e.occupant.stat?'Unconscious':'Dead',a+='
Temperature:
'+n.round(e.occupant.bodyTemperature)+" K
"),e.hasOccupant&&e.occupant.stat<2&&(a+='
Health:
'+n.bar(e.occupant.health,e.occupant.minHealth,e.occupant.Maxhealth,e.occupant.health>=0?"good":"average",n.round(e.occupant.health))+'
Brute:
'+n.bar(e.occupant.bruteLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.bruteLoss))+'
Respiratory:
'+n.bar(e.occupant.oxyLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.oxyLoss))+'
Toxin:
'+n.bar(e.occupant.toxLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.toxLoss))+'
Burn:
'+n.bar(e.occupant.fireLoss,0,e.occupant.maxHealth,"bad",n.round(e.occupant.fireLoss))+"
"),a+='

Cell

Power:
',a+=e.isOperating?""+n.link("On","power-off","off"):""+n.link("Off","close","on"),a+='
Temperature:
'+e.cellTemperature+' K
Door:
',a+=e.isOpen?""+n.link("Open","unlock","close"):""+n.link("Closed","lock","open"),a+=e.autoEject?""+n.link("Auto","sign-out","autoeject"):""+n.link("Manual","sign-in","autoeject"),a+='

Beaker

'+n.link("Eject","eject","ejectbeaker",null,e.isBeakerLoaded?null:"disabled")+'
Contents:
',e.isBeakerLoaded)if(e.beakerContents.length){var s=e.beakerContents;if(s)for(var r,i=-1,l=s.length-1;l>i;)r=s[i+=1],a+=''+r.volume+" units of "+r.name+"
"}else a+='Beaker Empty';else a+='No Beaker Loaded';return a+="
"},TMPL.smes=function(e,t,n){var a='

Storage

Stored Energy:
'+n.bar(e.capacityPercent,0,100,e.capacityPercent>=50?"good":e.capacityPercent>=15?"average":"bad",n.round(e.capacityPercent)+"%")+'

Input

Charge Mode:
'+n.link("Auto","refresh","tryinput",null,e.inputAttempt?"selected":null)+n.link("Off","close","tryinput",null,e.inputAttempt?null:"selected")+" ";return a+=e.capacityPercent>=99?"[Fully Charged]":e.inputting?"[Charging]":"[Not Charging]",a+='
Input Setting:
'+n.bar(e.inputLevel,0,e.inputLevelMax,null,e.inputLevel+" W")+'
Adjust Input:
'+n.link("","fast-backward","input",{set:"min"},e.inputLevel?null:"selected")+n.link("","backward","input",{set:"minus"},e.inputLevel?null:"disabled")+n.link("Set","pencil","input",{set:"custom"},null)+n.link("","forward","input",{set:"plus"},e.inputLevel==e.inputLevelMax?"disabled":null)+n.link("","fast-forward","input",{set:"max"},e.inputLevel==e.inputLevelMax?"selected":null)+'
Available:
'+e.inputAvailable+' W

Output

Charge Mode:
'+n.link("On","power-off","tryoutput",null,e.outputAttempt?"selected":null)+n.link("Off","close","tryoutput",null,e.outputAttempt?null:"selected")+" ",a+=e.outputting?'[Sending]':e.charge>0?'[Not Sending]':'[No Charge]',a+='
Output Setting:
'+n.bar(e.outputLevel,0,e.outputLevelMax,null,e.outputLevel+" W")+'
Adjust Output:
'+n.link("","fast-backward","output",{set:"min"},e.outputLevel?null:"selected")+n.link("","backward","output",{set:"minus"},e.outputLevel?null:"disabled")+n.link("Set","pencil","output",{set:"custom"},null)+n.link("","forward","output",{set:"plus"},e.outputLevel==e.outputLevelMax?"disabled":null)+n.link("","fast-forward","output",{set:"max"},e.outputLevel==e.outputLevelMax?"selected":null)+'
Outputting:
'+e.outputUsed+" W
"},TMPL.solar_control=function(e,t,n){var a='

Status

Generated Power:
'+e.generated+' W
Orientation:
'+e.angle+"° ("+e.direction+')
Adjust:
'+n.link("15°","step-backward","control",{cdir:"-15"})+n.link("1°","backward","control",{cdir:"-1"})+n.link("1°","forward","control",{cdir:"1"})+n.link("15°","step-forward","control",{cdir:"15"})+'

Tracking

Tracker Mode:
'+n.link("Off","close","tracking",{mode:"0"},0==e.tracking_state?"selected":"")+n.link("Timed","clock-o","tracking",{mode:"1"},1==e.tracking_state?"selected":"");return a+=e.connected_tracker?""+n.link("Auto","refresh","tracking",{mode:"2"},2==e.tracking_state?"selected":""):""+n.link("Auto","refresh",null,null,"disabled"),a+='
Tracking Rate:
'+e.tracking_rate+" deg/h ("+e.rotating_way+')
Adjust:
'+n.link("180°","fast-backward","control",{tdir:"-180"})+n.link("30°","step-backward","control",{tdir:"-30"})+n.link("1°","backward","control",{tdir:"-1"})+n.link("1°","forward","control",{tdir:"1"})+n.link("30°","step-forward","control",{tdir:"30"})+n.link("180°","fast-forward","control",{tdir:"180"})+'

Devices

Search:
'+n.link("Refresh","refresh","refresh")+'
Solar Tracker:
',a+=e.connected_tracker?'Found':'Not Found',a+='
Solars Panels:
'+e.connected_panels+" Connected
"},TMPL.space_heater=function(e,t,n){var a='

Status

Power:
'+n.link("On","power-off","power",null,e.on?"selected":null)+n.link("Off","close","power",null,e.on?null:"selected")+'
Stored Energy:
';return a+=e.hasPowercell?""+n.bar(e.powerLevel,0,100,"good",e.powerLevel+"%"):'No power cell loaded.',a+="
",e.open&&(a+='
Cell:
',a+=e.hasPowercell?""+n.link("Eject","eject","ejectcell"):""+n.link("Install","eject","installcell"),a+="
"),a+='

Thermostat

Current Temp:
'+e.currentTemp+'°C
Target Temp:
'+e.targetTemp+"°C
",e.open&&(a+='
Adjustment:
'+n.link("","fast-backward","temp",{set:-20},e.targetTemp>e.minTemp?null:"disabled")+n.link("","backward","temp",{set:-5},e.targetTemp>e.minTemp?null:"disabled")+n.link("Set","pencil","temp",{set:"custom"},null)+n.link("","forward","temp",{set:5},e.targetTemp
"),a+='
Operational Mode:
', +a+=e.open?""+n.link("Heat","long-arrow-up","mode",{mode:"heat"},"heat"!=e.mode?null:"selected")+n.link("Cool","long-arrow-down","mode",{mode:"cool"},"cool"!=e.mode?null:"selected")+n.link("Auto","arrows-v","mode",{mode:"auto"},"heat"==e.mode||"cool"==e.mode?null:"selected"):"heat"==e.mode?'Heat':"cool"==e.mode?'Cool':'Auto',a+="
"},TMPL.tanks=function(e,t,n){var a='
';return a+=e.hasHoldingTank?"The regulator is connected to a mask.":"The regulator is not connected to a mask.",a+='
Tank Pressure:
'+n.bar(e.tankPressure,0,1013,e.tankPressure>200?"good":e.tankPressure>100?"average":"bad",e.tankPressure+" kPa")+'
Release Pressure:
'+n.bar(e.releasePressure,e.minReleasePressure,e.maxReleasePressure,null,e.releasePressure+" kPa")+'
Pressure Regulator:
'+n.link("Reset","refresh","pressure",{set:"reset"},e.releasePressure!=e.defaultReleasePressure?null:"disabled")+n.link("Min","minus","pressure",{set:"min"},e.releasePressure>e.minReleasePressure?null:"disabled")+n.link("Set","pencil","pressure",{set:"custom"},null)+n.link("Max","plus","pressure",{set:"max"},e.releasePressure
Valve:
'+n.link("Open","unlock","valve",null,e.maskConnected?e.valveOpen?"selected":null:"disabled")+n.link("Close","lock","valuve",null,e.valveOpen?null:"selected")+"
"},TMPL._generic=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},TMPL._nanotrasen=function(e,t,n){var a="
"+t.title+"
Initiating...
";return a},function(){var e=function(e,t){return function(){return e.apply(t,arguments)}};this.Chrome=function(){function t(t,n){this.nanoui=t,this.handleResize=e(this.handleResize,this),this.handleDrag=e(this.handleDrag,this),this.calcOffsets=e(this.calcOffsets,this),this.nanoui.updated.add(this.linkStatus),this.nanoui.updated.add(this.windowStatus),this.nanoui.rendered.add(this.handleLinks),n.config.user.fancy&&(this.dragging=!1,this.resizing=!1,this.switchChrome(),this.calcOffsets(),this.handleButtons(),this.handleDrag(),this.handleResize())}return t.prototype.linkStatus=function(e){var t;return t=document.queryAll(".link"),e.config.status!==NANO.INTERACTIVE?t.forEach(function(e){return e.className="link disabled"}):void 0},t.prototype.windowStatus=function(e){var t;return t=document.queryAll(".statusicon"),t.forEach(function(t){var n;switch(e.config.status){case NANO.INTERACTIVE:n="good";break;case NANO.UPDATE:n="average";break;default:n="bad"}return t.classList.remove("good","bad","average"),t.classList.add(n)})},t.prototype.handleLinks=function(e){var t;return t=function(){var t,n;return t=this.getAttribute("data-action"),n=JSON.parse(this.getAttribute("data-params")),null!=t&&null!=n&&e.config.status===NANO.INTERACTIVE?nanoui.act(t,n):void 0},document.queryAll(".link.active").forEach(function(e){return e.addEventListener("click",t)})},t.prototype.switchChrome=function(){var e;return this.nanoui.winset("titlebar",0),this.nanoui.winset("can-resize",0),e=document.queryAll(".fancy"),e.forEach(function(e){return e.classList.remove("fancy")})},t.prototype.calcOffsets=function(){return this.xOriginal=window.screenLeft,this.yOriginal=window.screenTop,this.nanoui.setPos(0,0),this.xOffset=window.screenLeft,this.yOffset=window.screenTop,this.nanoui.setPos(this.xOriginal-this.xOffset,this.yOriginal-this.yOffset)},t.prototype.handleButtons=function(){var e,t;return e=document.queryAll(".close"),e.forEach(function(e){return e.addEventListener("click",function(e){return function(){return e.nanoui.close()}}(this))}),t=document.queryAll(".minimize"),t.forEach(function(e){return e.addEventListener("click",function(e){return function(){return e.nanoui.minimize()}}(this))})},t.prototype.handleDrag=function(){var e,t;return e=function(e){return function(t){var n,a;return null==t&&(t=window.event),e.dragging?(null==e.xDrag&&(e.xDrag=t.screenX),null==e.yDrag&&(e.yDrag=t.screenY),n=t.screenX-e.xDrag+(window.screenLeft-e.xOffset),a=t.screenY-e.yDrag+(window.screenTop-e.yOffset),e.nanoui.setPos(n,a),e.xDrag=t.screenX,e.yDrag=t.screenY):void 0}}(this),t=document.query("#titlebar"),document.addEventListener("mousemove",e),t.addEventListener("mousedown",function(e){return function(){return e.dragging=!0}}(this)),document.addEventListener("mouseup",function(e){return function(){return e.dragging=!1,delete e.xDrag,delete e.yDrag}}(this))},t.prototype.handleResize=function(){var e,t;return t=function(e){return function(t){var n,a;return null==t&&(t=window.event),e.resizing?(null==e.xResize&&(e.xResize=t.screenX),null==e.yResize&&(e.yResize=t.screenY),n=Math.max(250,t.screenX-e.xResize+window.innerWidth),a=Math.max(250,t.screenY-e.yResize+window.innerHeight),e.nanoui.setSize(n,a),e.xResize=t.screenX,e.yResize=t.screenY):void 0}}(this),e=document.query("#resize"),document.addEventListener("mousemove",t),e.addEventListener("mousedown",function(e){return function(){return e.resizing=!0}}(this)),document.addEventListener("mouseup",function(e){return function(){return e.resizing=!1,delete e.xResize,delete e.yResize}}(this))},t}()}.call(this),function(){this.NANO={INTERACTIVE:2,UPDATE:1,DISABLED:0,CLOSE:-1}}.call(this),function(){this.helpers={link:function(e,t,n,a,s,r){return null==e&&(e=""),null==t&&(t=""),null==n&&(n=""),null==a&&(a={}),null==s&&(s=""),null==r&&(r=""),a=JSON.stringify(a),t&&(t="",r+=" iconed"),s?""+t+e+"":""+t+e+""},bar:function(e,t,n,a,s){var r;return null==e&&(e=0),null==t&&(t=0),null==n&&(n=100),null==a&&(a=""),null==s&&(s=""),n>t?t>e?e=t:e>n&&(e=n):e>t?e=t:n>e&&(e=n),r=Math.round((e-t)/(n-t)*100),"
"+s+"
"},round:function(e){return Math.round(e)},fixed:function(e,t){return null==t&&(t=1),Number(Math.round(e+"e"+t)+"e-"+t)},floor:function(e){return Math.floor(e)},ceil:function(e){return Math.ceil(e)}}}.call(this),function(){var e,t=function(e,t){return function(){return e.apply(t,arguments)}};e=function(){function e(){this.minimize=t(this.minimize,this),this.close=t(this.close,this),this.focusMap=t(this.focusMap,this),this.setSize=t(this.setSize,this),this.setPos=t(this.setPos,this),this.winset=t(this.winset,this),this.act=t(this.act,this),this.render=t(this.render,this),this.update=t(this.update,this);var e,n;this.laidout=!1,this.dragging=!1,this.resizing=!1;try{this.data=JSON.parse(document.query("#data").getAttribute("data-initial"))}catch(n){e=n,this.error(e)}null!=this.data&&"data"in this.data&&"config"in this.data||this.error("Initial data did not load correctly."),this.render(this.data),this.chrome=new Chrome(this,this.data),this.initialized.dispatch(this.data),this.incoming.add(this.update)}return e.prototype.initialized=new MiniSignal,e.prototype.incoming=new MiniSignal,e.prototype.update=function(e){var t,n,a;try{t=JSON.parse(e),null==t.data&&(null!=this.data.data?t.data=this.data.data:t.data={}),this.data=t}catch(a){n=a,this.error(n)}return this.render(this.data),this.updated.dispatch(this.data)},e.prototype.updated=new MiniSignal,e.prototype.render=function(e){var t,n,a,s;try{return this.laidout||(this.laidout=!0,document.query("body").classList.add(e.config.layout),s=TMPL[e.config.templates.layout](e.data,e.config,helpers),document.query("#layout").innerHTML=s),t=TMPL[e.config.templates.content](e.data,e.config,helpers),document.query("#content").innerHTML=t,this.rendered.dispatch(this.data)}catch(a){return n=a,this.error(n)}},e.prototype.rendered=new MiniSignal,e.prototype.href=function(e,t){return null==e&&(e={}),null==t&&(t=""),"byond://"+t+"?"+Object.keys(e).map(function(t){return encodeURIComponent(t)+"="+encodeURIComponent(e[t])}).join("&")},e.prototype.act=function(e,t){return null==t&&(t={}),t.src=this.data.config.ref,t.nano=e,location.href=this.href(t,null)},e.prototype.error=function(e){return location.href=this.href({nano_error:e},null)},e.prototype.winset=function(e,t,n){var a;return null==n&&(n=this.data.config.window),location.href=this.href((a={},a[n+"."+e]=t,a),"winset")},e.prototype.setPos=function(e,t){return this.winset("pos",e+","+t)},e.prototype.setSize=function(e,t){return this.winset("size",e+","+t)},e.prototype.focusMap=function(){return this.winset("focus",1,"mapwindow.map")},e.prototype.close=function(){return this.winset("is-visible","false"),location.href=this.href({command:"nanoclose "+this.data.config.ref},"winset")},e.prototype.minimize=function(){return this.winset("is-minimized","true")},e}(),this.nanoui=new e}.call(this); \ No newline at end of file diff --git a/nano/scripts/constants.coffee b/nano/scripts/constants.coffee index 10635ae11ad..825a336af65 100644 --- a/nano/scripts/constants.coffee +++ b/nano/scripts/constants.coffee @@ -2,3 +2,4 @@ INTERACTIVE: 2 UPDATE: 1 DISABLED: 0 + CLOSE: -1 diff --git a/nano/scripts/nanoui.coffee b/nano/scripts/nanoui.coffee index 403edcecb15..1f7e917ff00 100644 --- a/nano/scripts/nanoui.coffee +++ b/nano/scripts/nanoui.coffee @@ -22,7 +22,15 @@ class NanoUI update: (dataString) => try - @data = JSON.parse dataString + data = JSON.parse dataString + + if not data.data? + if @data.data? + data.data = @data.data + else + data.data = {} + + @data = data catch error @error error @render @data @@ -59,7 +67,7 @@ class NanoUI location.href = @href {nano_error: error}, null winset: (key, value, window) => - window = @data.config.window.ref unless window? + window = @data.config.window unless window? location.href = @href {"#{window}.#{key}": value}, "winset" setPos: (x, y) => @winset "pos", "#{x},#{y}" diff --git a/nano/templates/air_alarm.dot b/nano/templates/air_alarm.dot index 8b67c9716c1..364767cbfc9 100644 --- a/nano/templates/air_alarm.dot +++ b/nano/templates/air_alarm.dot @@ -62,7 +62,7 @@ Warning: Cannot obtain air sample for analysis. {{?}} - {{? data.dangerous}} + {{? data.emagged}}
Warning: Safety measures offline. Device may exhibit abnormal behavior.