Files
yunkong2.admin/www/js/app.js
2018-09-14 21:50:50 +08:00

3 lines
384 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"use strict";Array.prototype.remove=function(){for(var e,t,n=arguments,i=n.length;i&&this.length;)for(e=n[--i];-1!==(t=this.indexOf(e));)this.splice(t,1);return this},console.debug||(console.debug=console.log),"undefined"==typeof Number&&(console.log("define Number"),Number=function(e){return parseFloat(e)}),Object.assign||(Object.assign=$.extend);var $iframeDialog=null,configNotSaved=null,showConfig=null,defaults={},customPostInits={},FORBIDDEN_CHARS=/[\]\[*,;'"`<>\\\s?]/g,adapterRedirect=function(e,t){e&&setTimeout(function(){e+=document.location.pathname,e+=document.location.hash,document.location.href=e},t||5e3)},gMain=null;function detectIE(){var e=window.navigator.userAgent,t=e.indexOf("MSIE ");if(0<t)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(0<e.indexOf("Trident/")){var n=e.indexOf("rv:");return parseInt(e.substring(n+3,e.indexOf(".",n)),10)}var i=e.indexOf("Edge/");return 0<i&&parseInt(e.substring(i+5,e.indexOf(".",i)),10)}function Adapters(e){var H=this;function t(){H.$grid.show(),H.$tiles.html("").hide(),H.$tab.find("#main-toolbar-table-types-btn").hide(),H.$grid.data("inited")?(H.$tab.find("#btn_collapse_adapters").show(),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_list_adapters").show()):(H.$grid.data("inited",!0),H.$grid.fancytree({extensions:["table","gridnav","filter","themeroller"],checkbox:!1,strings:{noData:_("No data")},table:{indentation:5},show:function(e,t,n){H.sortTree()},source:H.tree,renderColumns:function(e,t){var n=t.node,i=$(n.tr).find(">td"),a=H.data[n.key];function s(e){return'<div class="text-ellipsis">'+e+"</div>"}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("<div"),r=0<=o?a.desc.substr(0,o):a.desc;i.eq(1).html(s(a.desc)).attr("title",r).css({"white-space":"nowrap",position:"relative","font-weight":a.bold?"bold":null}).find(">div>div").css("height: 22px !important"),u(2,a.keywords).attr("title",a.keywords),i.eq(3).html(a.installed),i.eq(4).html(a.version),u(5,a.license),u(6,a.install),H.initButtons(n.key),H.isCollapsed[a.group]&&(H.isCollapsed[a.group]=!1,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}else{i.eq(0).css({"font-weight":"bold"}),i.eq(0).find("img").remove(),i.eq(0).find("span.fancytree-title").attr("style","padding-left: 0px !important");for(var c=0;c<H.tree.length;c++)if(H.tree[c].key===n.key){i.eq(1).html(H.tree[c].desc||"").css({overflow:"hidden","white-space":"nowrap",position:"relative"});for(var l=0,d=0;d<H.tree[c].children.length;d++)H.data[H.tree[c].children[d].key].installed&&l++;H.tree[c].installed=l,n.data.installed=l,'[<span title="'+_("Installed from group")+'">'+l+'</span> / <span title="'+_("Total count in group")+'">'+H.tree[c].children.length+"</span>]",i.eq(1).html(s('<span class="dark-green">'+l+"</span> "+_("of")+'<span class="dark-blue"> '+H.tree[c].children.length+"</span> "+_("Adapters from this Group installed")));break}}function u(e,t){return i.eq(e).html(s(t))}},gridnav:{autofocusInput:!1,handleCursorKeys:!0},filter:{mode:"hide",autoApply:!0},collapse:function(e,t){H.isCollapsed[t.node.key]||(H.isCollapsed[t.node.key]=!0,H.main.saveConfig("adaptersIsCollapsed",JSON.stringify(H.isCollapsed)))}}),H.$tab.find("#btn_collapse_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!1)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_expand_adapters").show().off("click").on("click",function(){H.$tab.find(".process-adapters").show(),setTimeout(function(){H.$grid.fancytree("getRootNode").visit(function(e){(!H.filterVals.length||e.match||e.subMatch)&&e.setExpanded(!0)}),H.$tab.find(".process-adapters").hide()},100)}),H.$tab.find("#btn_list_adapters").show().off("click").on("click",function(){var e=H.$tab.find(".process-adapters");e.show(),H.isList=!H.isList,H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),$(this).attr("title",_("list"))):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3"),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show(),$(this).attr("title",_("tree"))),H.main.saveConfig("adaptersIsList",H.isList),e.show(),setTimeout(function(){H._postInit(!0),e.hide()},200)})),H.isList?(H.$tab.find("#btn_list_adapters").addClass("red lighten-3").attr("title",_("tree")),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide()):(H.$tab.find("#btn_list_adapters").removeClass("red lighten-3").attr("title",_("list")),H.$tab.find("#btn_expand_adapters").show(),H.$tab.find("#btn_collapse_adapters").show()),H.$tab.find(".filter-input").trigger("change")}function n(){H.$grid.hide(),H.$tiles.show(),H.$tab.find("#main-toolbar-table-types-btn").show(),H.$tab.find("#btn_list_adapters").hide(),H.$tab.find("#btn_collapse_adapters").hide(),H.$tab.find("#btn_expand_adapters").hide(),H.$tab.find(".filter-input").trigger("change")}function i(){H.onlyUpdatable?(H.$tab.find("#btn_filter_updates").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_upgrade_all").hide(),H.$tab.find("#btn_filter_updates").removeClass("red lighten-3"))}function a(){H.main.config.expertMode?(H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),H.$tab.find("#btn_upgrade_all").show()):(H.$tab.find("#btn_adapters_expert_mode").removeClass("red lighten-3"),i())}function G(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&B({key:e.data("id")})?(t=!0,e.show()):e.hide()}):H.currentType?(H.$tiles.find(".tile").hide(),H.$tiles.find(".class-"+H.currentType).show(),H.$tiles.find(".tile").each(function(){if($(this).is(":visible"))return!(t=!0)})):H.$tiles.find(".tile").show().each(function(){if($(this).is(":visible"))return!(t=!0)}),t?H.$tiles.find(".filtered-out").hide():H.$tiles.find(".filtered-out").show()}function B(e){if(H.currentFilter){if(!H.data[e.key])return!1;var t=H.data[e.key].title;t&&"object"==typeof t&&(t=t[systemLang]||t.en);var n=H.data[e.key].desc;return n&&"object"==typeof n&&(n=n[systemLang]||n.en),!!(H.data[e.key].name&&-1!==H.data[e.key].name.toLowerCase().indexOf(H.currentFilter)||t&&-1!==t.toLowerCase().indexOf(H.currentFilter)||H.data[e.key].keywords&&-1!==H.data[e.key].keywords.toLowerCase().indexOf(H.currentFilter)||n&&-1!==n.toLowerCase().indexOf(H.currentFilter))}return!0}function F(e,t){var n="";if(t.news)for(var i in t.news)if(t.news.hasOwnProperty(i)){if(systemLang===i&&(n+=(n?"\n":"")+t.news[i]),"en"===i||"ru"===i||"de"===i)continue;if(i===e)break;n+=(n?"\n":"")+(t.news[i][systemLang]||t.news[i].en)}return n}function Z(e){if(!e)return"";var t;if(e instanceof Array){t={};for(var n=0;n<e.length;n++)if("string"!=typeof e[n])for(var i in e[n])e[n].hasOwnProperty(i)&&(t[i]=e[n][i])}else t=e;for(var a in t)if(t.hasOwnProperty(a))if("js-controller"===a){if(!semver.satisfies(H.main.objects["system.host."+H.main.currentHost].common.installedVersion,t[a]))return _("Invalid version of %s. Required %s",a,t[a])}else{if(!H.main.objects["system.adapter."+a]||!H.main.objects["system.adapter."+a].common||!H.main.objects["system.adapter."+a].common.installedVersion)return _("No version of %s",a);if(!semver.satisfies(H.main.objects["system.adapter."+a].common.installedVersion,t[a]))return _("Invalid version of %s",a)}return""}function J(e,t,n,i,a,s,o){if(o=o||Date.now(),!e)return"";"string"!=typeof e&&"number"!=typeof e||(e=new Date(e));var r=o.getTime()-e.getTime(),c=Math.floor(r/864e5);if(0===c)return o.getDate()===e.getDate()?t:n;if(1===c)return o.getDate()-e.getDate()==1?n:a.replace("%d",c+1);var l=c%10,d=c%100;return(d<10||20<d)&&2<=l&&l<=4?a.replace("%d",c):(d<10||20<d)&&1===l?i.replace("%d",c):s.replace("%d",c)}function W(e,t,n){var i="";return t||"string"==typeof e?(t||(i+='<div class="group-upload-progress"'),!0):(n=e,e=null),n&&(i+='<table style="height: 3px; " title="'+_("Upload")+" "+n+'%" class="no-space" style="width:100%; height: 100%; opacity: 0.7"><tr style="height: 100%" class="no-space"><td class="no-space" style="width:'+n+'%;background: blue"></td><td style="width:'+(100-n)+'%;opacity: 0.1" class="no-space"></td></tr></table>'),i}this.curRepository=null,this.curRepoLastUpdate=null,this.curInstalled=null,this.curRepoLastHost=null,this.list=[],this.$tab=$("#tab-adapters"),this.$grid=this.$tab.find("#grid-adapters"),this.$tiles=this.$tab.find("#grid-adapters-tiles"),this.$installDialog=$("#dialog-install-url"),this.main=e,this.tree=[],this.data={},this.urls={},this.groupImages={"common adapters_group":"img/common.png",general_group:"img/common.png",hardware_group:"img/hardware.png",lighting_group:"img/hardware.png",energy_group:"img/hardware.png",household_group:"img/hardware.png","iot-systems_group":"img/hardware.png","climate-control_group":"img/hardware.png",infrastructure_group:"img/hardware.png",garden_group:"img/hardware.png",alarm_group:"img/hardware.png",script_group:"img/script.png",logic_group:"img/script.png",media_group:"img/media.png",multimedia_group:"img/media.png",communication_group:"img/communication.png",protocols_group:"img/communication.png",network_group:"img/communication.png",messaging_group:"img/communication.png",visualisation_group:"img/visualisation.png",visualization_group:"img/visualisation.png","visualization-icons_group":"img/visualisation.png","visualization-widgets_group":"img/visualisation.png",storage_group:"img/storage.png",weather_group:"img/weather.png",schedule_group:"img/schedule.png",vis_group:"img/vis.png","date-and-time_group":"img/service.png",geoposition_group:"img/service.png",utility_group:"img/service.png","misc-data_group":"img/service.png",service_group:"img/service.png","third-party_group":"img/service.png"},this.inited=!1,this.isList=!1,this.filterVals={length:0},this.onlyInstalled=!1,this.onlyUpdatable=!1,this.currentFilter="",this.currentType="",this.isCollapsed={},this.isTiles=!0,this.types={occ:"schedule"},this.prepare=function(){this.$tab.find("#btn_switch_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.isTiles=!H.isTiles,H.isTiles?(H.$tab.removeClass("view-table").addClass("view-tiles"),$(this).find("i").text("view_list")):($(this).find("i").text("view_module"),H.$tab.removeClass("view-tiles").addClass("view-table")),H.main.saveConfig("adaptersIsTiles",H.isTiles),setTimeout(function(){H.isTiles?n():t(),H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_adapters").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyInstalled=!H.onlyInstalled,H.onlyInstalled?H.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):H.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),H.main.saveConfig("adaptersOnlyInstalled",H.onlyInstalled),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},50)}),this.$tab.find("#btn_filter_updates").off("click").on("click",function(){H.$tab.find(".process-adapters").show(),H.onlyUpdatable=!H.onlyUpdatable,i(),H.main.saveConfig("adaptersOnlyUpdatable",H.onlyUpdatable),setTimeout(function(){H._postInit(!0),H.$tab.find(".process-adapters").hide()},200)}),this.$tab.find("#btn_filter_custom_url").off("click").on("click",function(){var e,t='<option value="">'+_("none")+"</option>",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i<n.length;i++){var a=H.urls[n[i]].match(/\.com\/([-_$§A-Za-z0-9]+)\/([-._$§A-Za-z0-9]+)\//);a&&2<=a.length&&(H.main.config.expertMode||-1===n[i].indexOf("js-controller"))&&(t+='<option value="https://github.com/'+a[1]+"/yunkong2."+n[i]+"/tarball/master "+n[i]+'">'+n[i]+"</option>")}H.$installDialog.find("#install-github-link").html(t).val(H.main.config.adaptersGithub||""),H.$installDialog.modal(),H.$installDialog.find(".btn-install").off("click").on("click",function(){var e,t,n;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))e=H.$installDialog.find("#install-url-link").val(),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var i=H.$installDialog.find("#install-github-link").val().split(" ");e=i[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+i[1]}e?H.main.cmdExec(null,'url "'+e+'"'+n+t,function(e){e||H.init(!0,!0)}):H.main.showError(_("Invalid link"))}),H.$installDialog.find("#install-github-link").select(),H.$installDialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),H.$installDialog.modal("open"),H.$installDialog.find(".tabs").mtabs({nShow:function(e){e&&H.main.saveConfig("adaptersInstallTab",$(e).attr("id"))}}),H.main.config.adaptersInstallTab&&!H.main.noSelect&&H.$installDialog.find(".tabs").mtabs("select",H.main.config.adaptersInstallTab)}),this.$tab.find("#btn_upgrade_all").off("click").on("click",function(){H.main.confirmMessage(_("Do you want to upgrade all adapters?"),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"upgrade",function(e){e||H._postInit(!0)})})}),this.$tab.find("#btn_adapters_expert_mode").on("click",function(){H.main.config.expertMode=!H.main.config.expertMode,H.main.saveConfig("expertMode",H.main.config.expertMode),H.updateExpertMode(),H.main.tabs.instances.updateExpertMode()}),H.main.config.expertMode&&H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),this.$installDialog.find("#install-github-link").on("change",function(){H.main.saveConfig("adaptersGithub",$(this).val())}),this.$installDialog.find("#install-url-link").on("keyup",function(e){13===e.which&&H.$installDialog.find("#dialog-install-url-button").trigger("click")}),this.isTiles=void 0===this.main.config.adaptersIsTiles||null===this.main.config.adaptersIsTiles||this.main.config.adaptersIsTiles,this.isList=this.main.config.adaptersIsList||!1,this.onlyInstalled=this.main.config.adaptersOnlyInstalled||!1,this.onlyUpdatable=this.main.config.adaptersOnlyUpdatable||!1,this.currentFilter=this.main.config.adaptersCurrentFilter||"",this.currentType=this.main.config.adaptersCurrentType||"",this.currentOrder=this.main.config.adaptersCurrentOrder||"a-z",this.isCollapsed=this.main.config.adaptersIsCollapsed?JSON.parse(this.main.config.adaptersIsCollapsed):{},this.currentFilter?(this.$tab.find(".filter-input").addClass("input-not-empty").val(H.currentFilter),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.onlyInstalled?this.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):this.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),this.onlyUpdatable?this.$tab.find("#btn_filter_updates").addClass("red lighten-3"):this.$tab.find("#btn_filter_updates").removeClass("red lighten-3"),"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find("#btn_switch_adapters").hide()),a(),this.$tab.find("#btn_refresh_adapters").on("click",function(){H.init(!0,!0)}),this.$tab.find(".filter-input").on("keyup",function(){$(this).trigger("change")}).on("change",function(e){H.filterTimer&&clearTimeout(H.filterTimer),H.filterTimer=setTimeout(function(){H.filterTimer=null,H.currentFilter=H.$tab.find(".filter-input").val().toLowerCase(),e&&e.target&&$(e.target)[H.currentFilter?"addClass":"removeClass"]("input-not-empty"),H.currentFilter?H.$tab.find(".filter-clear").show():H.$tab.find(".filter-clear").hide(),H.main.saveConfig("adaptersCurrentFilter",H.currentFilter),H.isTiles?G():H.$grid.fancytree("getTree").filterNodes(B,!1)},400)}),this.$tab.find(".filter-clear").on("click",function(){H.$tab.find(".filter-input").val("").trigger("change")}),this.isTiles?(this.$tab.find("#btn_switch_adapters").find("i").text("view_list"),H.$tab.removeClass("view-table").addClass("view-tiles"),n()):(H.$tab.removeClass("view-tiles").addClass("view-table"),t())},this.updateExpertMode=function(){this.init(!0),a()},this.getAdaptersInfo=function(e,t,n,i){if(e){if(!i)throw"Callback cannot be null or undefined";t&&(!this.curRepoLastUpdate||1e3<(new Date).getTime()-this.curRepoLastUpdate)&&(this.curRepository=null,this.curInstalled=null),this.curRunning?this.curRunning.push(i):(this.curRepository&&this.curRepoLastHost===e||(this.curRepository=null,this.main.socket.emit("sendToHost",e,"getRepository",{repo:this.main.systemConfig.common.activeRepo,update:n},function(e){"permissionError"===e&&(console.error('May not read "getRepository"'),e={}),H.curRepository=e||{},H.curRepository&&H.curInstalled&&H.curRunning&&(H.curRepoLastUpdate=(new Date).getTime(),setTimeout(function(){for(var e=0;e<H.curRunning.length;e++)H.curRunning[e](H.curRepository,H.curInstalled);H.curRunning=null},0))})),this.curInstalled&&this.curRepoLastHost===e||(this.curInstalled=null,this.main.socket.emit("sendToHost",e,"getInstalled",null,function(e){"permissionError"===e&&(console.error('May not read "getInstalled"'),e={}),H.curInstalled=e||{},H.curRepository&&H.curInstalled&&(H.curRepoLastUpdate=(new Date).getTime(),setTimeout(function(){for(var e=0;e<H.curRunning.length;e++)H.curRunning[e](H.curRepository,H.curInstalled);H.curRunning=null},0))})),this.curRepoLastHost=e,this.curInstalled&&this.curRepository?setTimeout(function(){if(H.curRunning){for(var e=0;e<H.curRunning.length;e++)H.curRunning[e](H.curRepository,H.curInstalled);H.curRunning=null}i&&i(H.curRepository,H.curInstalled)},0):this.curRunning=[i])}},this.enableColResize=function(){$.fn.colResizable&&this.$grid.is(":visible")&&this.$grid.colResizable({liveDrag:!0})},this.sortTree=function(){H.$grid.fancytree("getRootNode").sortChildren(function(e,t){var n=e.data.installed||0,i=(t.data.installed||0)-n;if(i)return i;var a=e.titleLang||e.title||"";"object"==typeof a&&(a=a[systemLang]||a.en);var s=t.titleLang||t.title||"";return"object"==typeof s&&(s=s[systemLang]||s.en),a=a.toLowerCase(),(s=s.toLowerCase())<a?1:a<s?-1:0},!0)},this._postInit=function(e,t){void 0!==this.$grid?(H.$tab.find(".process-adapters").show(),this.$grid.find("tbody").html(""),this.getAdaptersInfo(this.main.currentHost,e,t,function(e,t){var n,i,a,o,s=0,r=[],c=[],l=new Date,d={"add instance":_("add instance"),update:_("update"),upload:_("upload"),"Available version:":_("Available version:"),"Active instances":_("Active instances"),"Installed version":_("Installed version"),readme:_("readme"),"delete adapter":_("delete adapter"),"install specific version":_("install specific version"),all:_("all"),"Last update":_("Last update"),"Installations counter":_("Installation counter"),today:_("today"),yesterday:_("yesterday"),"1 %d days ago":_("1 %d days ago"),"2 %d days ago":_("2 %d days ago"),"5 %d days ago":_("5 %d days ago")};if(t){for(o in t)t.hasOwnProperty(o)&&(n=t[o])&&!n.controller&&"hosts"!==o&&r.push(o);r.sort()}for(o in H.urls={},e)e.hasOwnProperty(o)&&(t&&t[o]&&!t[o].versionDate&&(t[o].versionDate=e[o].versionDate),e[o].nogit||(H.urls[o]=e[o].meta),(n=e[o])&&!n.controller&&(i="",t&&t[o]||c.push(o)));function u(e,t,n,i){var a=function(e){if(e){var t=e.split(".");e="0"===t[0]&&"0"===t[1]&&"0"===t[2]?"planned":"0"===t[0]&&"0"===t[1]?"alpha":"0"===t[0]?"beta":"npm error"===e?"error":"stable"}return e}(e),s=a+"\n\r"+(n||"");return e='<table style="cursor: alias; width: 100%; text-align: center; border: 0; border-spacing: 0;'+(n?"color: blue;":"")+'" cellspacing="0" cellpadding="0" class="ui-widget"><tr class="'+a+'Bg"><td title="'+d["Available version:"]+" "+s+'" class="actual-version">'+e+'</td><td style="border: 0; padding: 0; width: 30px" class="update-version">',t&&(e+='<button class="adapter-update-submit small-button m" data-adapter-name="'+o+'" '+(i?' disabled title="'+i+'"':'title="'+d.update+'"')+'><i class="material-icons">refresh</i></button>'),e+="</td></tr></table>"}c.sort(),H.tree=[],H.data={};for(var m=0;m<r.length;m++)if(o=r[m],(n=t?t[o]:null)&&!n.controller&&"hosts"!==o){var g="",h="",f=n.icon;i="",e[o]&&e[o].version&&(i=e[o].version),e[o]&&e[o].extIcon&&(f=e[o].extIcon);var p=0,b=0;if(n.version){var M="",y=!1,v="";H.main.upToDate(i,n.version)||(M=F(n.version,e[o]),y=!0,v=Z(e[o].dependencies),s++),g='<table style="min-width: 80px; text-align: center; border: 0; border-spacing: 0;" cellspacing="0" cellpadding="0" class="ui-widget"><tr>';for(var w=0;w<H.main.instances.length;w++)H.main.objects[H.main.instances[w]]&&H.main.objects[H.main.instances[w]].common.name===o&&(p++,H.main.objects[H.main.instances[w]].common.enabled&&b++);if(p?(g+='<td style="border: 0; text-align: center; padding: 0; width: 40px">',b!==p&&(g+='<span title="'+_("Installed instances")+'">'+p+"</span>",b&&(g+=" ~ ")),b&&(g+='<span title="'+d["Active instances"]+'" class="true">'+b+"</span>"),g+="</td>"):g+='<td style="border: 0; padding: 0; width: 40px"></td>',g+='<td style="border: 0; padding: 0; width: 50px" title="'+d["Installed version"]+'">'+n.version+"</td>",h='<span class="installed" title="'+d["Installed version"]+'">'+n.version+"</span>",g+="</tr></table>",!y&&H.onlyUpdatable)continue}i=u(a=i,y,M,v);var j=(n.type||H.types[o]||"common adapters")+"_group";C=(C="object"==typeof n.desc?n.desc[systemLang]||n.desc.en:n.desc)||"",C+=W(j,o,H.main.states["system.adapter."+o+".upload"]?H.main.states["system.adapter."+o+".upload"].val:0);var N=n.titleLang||n.title;if(N="object"==typeof N?N[systemLang]||N.en:N,H.data[o]={image:f?'<img onerror="this.src=\'img/info-big.png\';" src="'+f+'" class="adapter-table-icon" />':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:'<button data-adapter-name="'+o+'" class="adapter-install-submit small-button m" title="'+d["add instance"]+'" data-adapter-desc="'+C+'"><i class="material-icons">add_circle_outline</i></button><button '+(n.readme?"":'disabled="disabled" ')+'data-adapter-name="'+o+'" data-adapter-url="'+(n.readme||"")+'" class="adapter-readme-submit small-button" title="'+d.readme+'"><i class="material-icons">help_outline</i></button>'+(H.main.config.expertMode?'<button data-adapter-name="'+o+'" class="adapter-upload-submit small-button" title="'+d.upload+'"><i class="material-icons">file_upload</i></button>':"")+"<button "+(g?"":'disabled="disabled" ')+'data-adapter-name="'+o+'" class="adapter-delete-submit small-button" title="'+d["delete adapter"]+'"><i class="material-icons">delete_forever</i></button>'+(H.main.config.expertMode?'<button data-adapter-name="'+o+'" data-target="adapters-menu" class="adapter-update-custom-submit small-button" title="'+d["install specific version"]+'"><i class="material-icons">add_to_photos</i></button>':""),group:j,license:n.license||"",licenseUrl:n.licenseUrl||""},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:f,title:H.data[o].title||o,key:o});else{for(var L=-1,T=0;T<H.tree.length;T++)if(H.tree[T].key===H.data[o].group){L=T;break}L<0&&(d[H.data[o].group]||(d[H.data[o].group]=_(H.data[o].group)),H.tree.push({title:d[H.data[o].group],desc:W(j),key:H.data[o].group,folder:!0,expanded:!H.isCollapsed[H.data[o].group],children:[],icon:H.groupImages[H.data[o].group]}),L=H.tree.length-1),H.tree[L].children.push({icon:f,title:H.data[o].title||o,key:o})}}if(!H.onlyInstalled&&!H.onlyUpdatable)for(m=0;m<c.length;m++)if((n=e[o=c[m]])&&!n.controller&&(i="",!t||!t[o])){n&&n.version&&(i=u(a=i=n.version));var C;j=(n.type||H.types[o]||"common adapters")+"_group";if(C=(C="object"==typeof n.desc?n.desc[systemLang]||n.desc.en:n.desc)||"",C+=W(j,o,H.main.states["system.adapter."+o+".upload"]?H.main.states["system.adapter."+o+".upload"].val:0),N="object"==typeof(N=n.titleLang||n.title)?N[systemLang]||N.en:N,H.data[o]={image:n.extIcon?'<img onerror="this.src=\'img/info-big.png\';" src="'+n.extIcon+'" class="adapter-table-icon" />':"",icon:n.extIcon,stat:n.stat,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:'<button data-adapter-name="'+o+'" class="adapter-install-submit small-button" title="'+d["add instance"]+'" data-adapter-desc="'+C+'"><i class="material-icons">add_circle_outline</i></button><button '+(n.readme?"":'disabled="disabled" ')+' data-adapter-name="'+o+'" data-adapter-url="'+(n.readme||"")+'" class="adapter-readme-submit small-button" title="'+d.readme+'"><i class="material-icons">help_outline</i></button><button data-adapter-name="'+o+'" class="adapter-delete-submit small-button hide" title="'+d["delete adapter"]+'"><i class="material-icons">delete_forever</i></button>'+(H.main.config.expertMode?'<button data-adapter-name="'+o+'" data-target="adapters-menu" class="adapter-update-custom-submit small-button" title="'+d["install specific version"]+'"><i class="material-icons">add_to_photos</i></button>':""),license:n.license||"",licenseUrl:n.licenseUrl||"",group:j},n.type||console.log('"'+o+'": "common adapters",'),n.type&&H.types[o]&&console.log('Adapter "'+o+'" has own type. Remove from admin.'),H.isList)H.tree.push({icon:n.extIcon,title:H.data[o].title||o,key:o});else{for(var D=-1,I=0;I<H.tree.length;I++)if(H.tree[I].key===H.data[o].group){D=I;break}D<0&&(d[H.data[o].group]||(d[H.data[o].group]=_(H.data[o].group)),H.tree.push({title:d[H.data[o].group],key:H.data[o].group,folder:!0,expanded:!H.isCollapsed[H.data[o].group],children:[],icon:H.groupImages[H.data[o].group]}),D=H.tree.length-1),H.tree[D].children.push({title:H.data[o].title||o,icon:n.extIcon,desc:W(j),key:o})}}if("popular"===H.currentOrder||"updated"===H.currentOrder){var k=Object.keys(H.data);"popular"===H.currentOrder?k.sort(function(e,t){return H.data[e].stat>H.data[t].stat?-1:H.data[e].stat<H.data[t].stat?1:0}):"updated"===H.currentOrder&&k.sort(function(e,t){return H.data[e].versionDate&&!H.data[t].versionDate?-1:!H.data[e].versionDate&&H.data[t].versionDate?1:H.data[e].versionDate>H.data[t].versionDate?-1:H.data[e].versionDate<H.data[t].versionDate?1:t<e?-1:e<t?1:0});for(var O={},E=0;E<k.length;E++)O[k[E]]=H.data[k[E]];H.data=O}if(H.isTiles&&("ie"!==H.main.browser||10<H.main.browserVersion)){var z="",A=[];for(var S in H.data)if(H.data.hasOwnProperty(S)){var x=H.data[S];-1===A.indexOf(x.group)&&A.push(x.group),z+='<div class="col s12 m6 l4 xl3 tile class-'+x.group+'" data-id="'+x.name+'">',z+=' <div class="card hoverable card-adapters">',z+=' <div class="card-header '+(x.updatable?"updatable":x.installed?"installed":"")+'"></div>',z+=' <div class="card-content">',z+=' <img onerror="this.src=\'img/info-big.png\';" class="card-profile-image" src="'+x.icon+'">',z+=' <span class="card-title grey-text text-darken-4">'+x.title+"</span>",z+=' <a title="info" class="btn-floating activator btnUp blue lighten-2 z-depth-3"><i class="material-icons">more_vert</i></a>',z+=' <ul class="ver">',z+=" <li>"+d["Available version:"]+' <span class="data '+(x.updatable?"updatable":"")+'" '+(x.news?' title="'+x.news+'"':"")+">"+x.rawVersion+"</span>"+(x.updatable?'<button class="adapter-update-submit small-button" data-adapter-name="'+S+'" '+(v?' disabled title="'+x.updatableError+'"':'title="'+d.update+'"')+'><i class="material-icons">refresh</i></button>':"")+"</li>",x.installed&&(z+=" <li>"+d["Installed version"]+': <span class="data">'+x.rawInstalled+"</span></li>"),x.instances&&(z+=" <li>"+_("Installed instances")+': <span class="data">'+x.instances+"</span></li>"),z+=" </ul>",z+=" </div>",z+=' <div class="footer right-align"></div>',z+=' <div class="card-reveal">',z+=' <i class="card-title material-icons right">close</i>',z+=" <p>"+x.desc+"</p>",z+=' <div class="card-reveal-buttons">',z+=x.install,z+=" </div>",z+=" </div>","popular"===H.currentOrder&&x.stat?z+=' <div class="stat" title="'+d["Installations counter"]+'">'+x.stat+"</div>":"updated"===H.currentOrder&&x.versionDate&&(z+=' <div class="last-update" title="'+d["Last update"]+'">'+J(x.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"</div>"),z+=" </div>",z+="</div>"}for(var Y in z+='<div class="col s12 m6 l4 xl3 filtered-out">',z+=' <div class="card hoverable card-adapters">',z+=' <div class="card-header"></div>',z+=' <div class="card-content">',z+=' <span class="card-title grey-text text-darken-4">'+_("Filtered out")+"</span>",z+=" </div>",z+=' <div class="footer right-align"></div>',z+=" </div>",z+="</div>",H.$tiles.html(z),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var R='<li class="main-toolbar-table-types-item" data-type=""><a>'+d.all+"</a></li>\n",Q=0;Q<A.length;Q++)R+='<li class="main-toolbar-table-types-item" data-type="'+A[Q]+'"><a>'+_(A[Q])+"</a></li>\n";var U=H.$tab.find("#main-toolbar-table-types");U.html(R),U.find(".main-toolbar-table-types-item").show().off("click").on("click",function(){H.currentType=$(this).data("type")||"",G(),H.$tab.find("#main-toolbar-table-types-btn").html(_(H.currentType||"all")),H.main.saveConfig("adaptersCurrentType",H.currentType)}),H.currentType&&!d[H.currentType]&&(d[H.currentType]=_(H.currentType)),H.$tab.find("#main-toolbar-table-types-btn").html(d[H.currentType||"all"]).dropdown({constrainWidth:!1,gutter:0}),(U=H.$tab.find("#main-toolbar-table-order")).find(".main-toolbar-table-order-item").off("click").on("click",function(){H.currentOrder=$(this).data("type")||"",H.$tab.find("#main-toolbar-table-order-btn").html(_(H.currentOrder||"a-z")),H.main.saveConfig("adaptersCurrentOrder",H.currentOrder),H._postInit()}),H.currentOrder&&!d[H.currentOrder]&&(d[H.currentOrder]=_(H.currentOrder)),H.$tab.find("#main-toolbar-table-order-btn").show().html(d[H.currentOrder||"a-z"]).dropdown({constrainWidth:!1,gutter:0}),G()}else{H.$tab.find("#main-toolbar-table-types-btn").hide(),H.$tab.find("#main-toolbar-table-order-btn").hide(),H.$grid.fancytree("getTree").reload(H.tree),H.$grid.find(".fancytree-icon").each(function(){$(this).attr("src")&&$(this).css({width:18,height:18}),$(this).on("hover",function(){var e='<div class="icon-large" style="left: '+Math.round($(this).position().left+$(this).width()+5)+'px;"><img src="'+$(this).attr("src")+'"/></div>',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})}),H.currentFilter&&H.$grid.fancytree("getTree").filterNodes(B,!1),H.sortTree(),H.enableColResize();var P=["tab-adapters-table-name","tab-adapters-table-description","tab-adapters-table-keywords","tab-adapters-table-installed","tab-adapters-table-available","tab-adapters-table-license","tab-adapters-table-install"];H.$grid.find("tbody tr").each(function(){var e=0;$(this).find("td").each(function(){$(this).addClass(P[e]),e++})})}H.$tab.find(".grid-main-div").removeClass("order-a-z order-popular order-updated").addClass(H.currentOrder?"order-"+H.currentOrder:""),H.$tab.find(".process-adapters").hide(),H.updateCounter(s)})):this.enableColResize(),this.restoreScroll()},this.saveScroll=function(){this.scrollTop=this.$tab.find(".grid-main-div").scrollTop()},this.restoreScroll=function(){this.scrollTop&&this.$tab.find(".grid-main-div").scrollTop(this.scrollTop)},this.updateCounter=function(e){if(void 0===e)this.getAdaptersInfo(this.main.currentHost,!1,!1,function(e,t){var n=0;for(var i in t)if(t.hasOwnProperty(i)){var a=t?t[i]:null;if(a&&!a.controller&&"hosts"!==i){var s="";e[i]&&e[i].version&&(s=e[i].version),a.version&&!H.main.upToDate(s,a.version)&&n++}}H.updateCounter(n)});else if(e){var t=$("#updates-for-adapters");t.length?t.text(e):$('<span id="updates-for-adapters" title="'+_("updates")+'" class="new badge updates-for-adapters" data-badge-caption="">'+e+"</span>").appendTo('.admin-sidemenu-items[data-tab="tab-adapters"] a')}else $("#updates-for-adapters").remove()},this.init=function(e,t){this.inited&&!e||(this.main.objectsLoaded?(this.inited||(this.inited=!0,this.main.subscribeObjects("system.host.*"),this.main.subscribeStates("system.host.*")),this.main.tabs.hosts.getHosts(function(){H._postInit(e,t)})):setTimeout(function(){H.init(e,t)},250))},this.destroy=function(){this.inited&&(this.saveScroll(),this.inited=!1,this.main.unsubscribeObjects("system.host.*"),this.main.unsubscribeStates("system.host.*"))},this.initButtons=function(r){this.$tab.find('.adapter-install-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var s=$(this).attr("data-adapter-name"),e=$(this).attr("data-adapter-desc");!function(e,t,n){if(H.main.tabs.hosts.list.length<=1&&!H.main.config.expertMode)return n(!0,H.main.currentHost,"");var i=$("#dialog-add-instance");i.find(".dialog-add-instance-name").html(e),i.find(".dialog-add-description").html(t);for(var a="",s=0;s<H.main.tabs.hosts.list.length;s++){var o=H.main.tabs.hosts.list[s];a+="<option "+(o.name===H.main.currentHost?"selected":"")+' value="'+o.name+'">'+o.name+"</option>"}H.main.tabs.hosts.list.length<=1?i.find(".dialog-add-instance-host").addClass("disabled").prop("disabled",!0):i.find(".dialog-add-instance-host").removeClass("disabled").prop("disabled",!1),i.find(".dialog-add-instance-host").html(a).select();for(var r=-1,c=[],l=0;l<H.main.tabs.instances.list.length;l++){var d=H.main.tabs.instances.list[l].split(".");if(d[d.length-2]===e){var u=parseInt(d[d.length-1],10);c.push(u),r<u&&(r=u)}}r+=10,a='<option selected value="">'+_("auto")+"</option>";for(var m=0;m<r;m++)-1===c.indexOf(m)&&(a+='<option value="'+m+'">'+m+"</option>");i.find(".dialog-add-instance-number").html(a).select(),i.find(".dialog-add-install-btn").off("click").on("click",function(e){n&&(n(!0,i.find(".dialog-add-instance-host").val(),i.find(".dialog-add-instance-number").val()),n=null),i.find(".dialog-add-cancel-btn").off("click"),i.find(".dialog-add-instance-number").off("click")}),i.find(".dialog-add-cancel-btn").off("click").on("click",function(e){n&&(n(!1),n=null),i.find(".dialog-add-cancel-btn").off("click"),i.find(".dialog-add-instance-number").off("click")}),i.modal({dismissible:!1,complete:function(){i.find(".dialog-add-instance-name").html("")}}).modal("open")}(s,e,function(e,i,a){e&&H.getAdaptersInfo(i,!1,!1,function(e,t){var n=e[s];n||(n=t[s]),n&&(n.license&&"MIT"!==n.license?function(i,a){var s=$("#dialog-license");if(!H.data[i].installed&&H.data[i].licenseUrl){var o=setTimeout(function(){a(!(o=null))},1e4);H.data[i].licenseUrl||(H.data[i].licenseUrl="https://raw.githubusercontent.com/yunkong2/yunkong2."+(H.data[i].name||i)+"/master/LICENSE"),"object"==typeof H.data[i].licenseUrl&&(H.data[i].licenseUrl=H.data[i].licenseUrl[systemLang]||H.data[i].licenseUrl.en),-1!==H.data[i].licenseUrl.indexOf("github.com")&&(H.data[i].licenseUrl=H.data[i].licenseUrl.replace("github.com","raw.githubusercontent.com").replace("/blob/","/")),H.main.socket.emit("httpGet",H.data[i].licenseUrl,function(e,t,n){o&&(clearTimeout(o),o=null,!e&&n?(s.css({"z-index":200}),n=(n=n.toString().replace(/\r\n/g,"<br>")).replace(/\n/g,"<br>"),s.find(".license_text").html(n),s.find(".license_agreement_name").text(_(" for %s",i)),s.modal({dismissible:!1,complete:function(){s.find(".license_text").html("")}}).modal("open"),s.find(".license_agree").off("click").on("click",function(e){a&&(a(!0),a=null),s.find(".license_agree").off("click"),s.find(".license_non_agree").off("click")}),s.find(".license_non_agree").off("click").on("click",function(e){a&&(a(!1),a=null),s.find(".license_agree").off("click"),s.find(".license_non_agree").off("click")})):(a&&a(!0),a=null))})}else a(!0)}(s,function(e){e&&H.main.cmdExec(null,"add "+s+" "+a+" --host "+i,function(e){e||H._postInit(!0)})}):H.main.cmdExec(null,"add "+s+" "+a+" --host "+i,function(e){e||H._postInit(!0)}))})})}),this.$tab.find('.adapter-delete-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var t=$(this).attr("data-adapter-name");H.main.confirmMessage(_("Are you sure you want to delete adapter %s?",t),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"del "+t,function(e){e||H._postInit(!0)})})}),this.$tab.find('.adapter-readme-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){H.main.navigate({tab:"adapters",dialog:"readme",params:$(this).data("adapter-name")})}),this.$tab.find('.adapter-update-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var e=$(this).attr("data-adapter-name");"admin"===e&&(H.main.waitForRestart=!0),H.main.cmdExec(null,"upgrade "+e,function(e){e||H._postInit(!0)})}),this.$tab.find('.adapter-upload-submit[data-adapter-name="'+r+'"]').off("click").on("click",function(){var e=$(this).attr("data-adapter-name");H.main.cmdExec(null,"upload "+e,function(e){e||H._postInit(!0)})});var e=this.$tab.find('.adapter-update-custom-submit[data-adapter-name="'+r+'"]');e.off("click").on("click",function(){var e=[];if(H.main.objects["system.adapter."+r].common.news){var t=H.main.objects["system.adapter."+r].common.news;for(var n in t)t.hasOwnProperty(n)&&e.push(n)}else e.push(H.main.objects["system.adapter."+r].common.version);for(var i='<div class="collection">',a=0;a<e.length;a++){var s=t[e[a]]?t[e[a]][systemLang]||t[e[a]].en:"";i+='<a data-version="'+e[a]+'" data-position="left" data-delay="50" title="'+s+'" data-adapter-name="'+$(this).data("adapter-name")+'" class="collection-item adapters-versions-link tooltipped"><span class="adapters-versions-link-version">'+e[a]+'</span> - <div class="adapters-versions-link-history">'+s+"</div></a>"}i+="</div>";var o=$("#adapters-menu");o.length||((o=$('<div id="adapters-menu" class="modal modal-fixed-footer"><div class="modal-content"><h4>Modal Header</h4><p></p></div><div class="modal-footer"><a class="modal-action modal-close waves-effect waves-green btn-flat ">'+_("Close")+"</a></div></div>")).appendTo($(".materialize-dialogs").first()),o.modal()),o.data("trigger",this),o.find("p").html(i),o.find("h4").html(_("Versions of %s",r)),o.find(".adapters-versions-link").off("click").on("click",function(){o.modal("close");var e=$(this).data("adapter-name"),t=$(this).data("version");t&&e&&H.main.cmdExec(null,"upgrade "+e+"@"+t,function(e){e||H._postInit(!0)})}),o.modal("open")}),H.main.objects["system.adapter."+r]||e.hide()},this.objectChange=function(e,t){if(e.match(/^system\.adapter\.[a-zA-Z0-9-_]+$/)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var n=this.list.indexOf(e);-1!==n&&this.list.splice(n,1)}void 0!==this.$grid&&this.$grid[0]._isInited&&this.init(!0)}},this.stateChange=function(e,t){if(e&&t){var n=e.match(/^system\.adapter\.([\w\d-]+)\.upload$/);if(n){var i=this.$tab.find('.adapter-upload-progress[data-adapter-name="'+n[1]+'"]'),a=W(t.val);i.html(a).css({opacity:t.val?.7:0}),this.$tab.find('.group-upload-progress[data-adapter-group="'+i.data("adapter-group")+'"]').html(a).css({opacity:t.val?.7:0})}}}}function Config(e){var t=this;this.$dialog=$("#dialog-config"),this.$configFrame=this.$dialog.find("#config-iframe"),this.main=e,this.prepare=function(){$iframeDialog=this},this.init=function(){if(!this.inited){this.inited=!0;var e=this.main.navigateGetParams(),t=e.split(".");this.main.objects[e]&&this.main.objects[e].common&&this.main.objects[e].common.materialize?this.$configFrame.attr("src","adapter/"+t[2]+"/index_m.html?"+t[3]):this.$configFrame.attr("src","adapter/"+t[2]+"/?"+t[3]);var n=e.replace(/^system\.adapter\./,"");this.$dialog.data("name",n),this.$dialog.find(".title").html(_("Adapter configuration")+": "+n)}},this.allStored=function(){return!window.frames["config-iframe"].changed},this.close=function(){t.main.navigate()},this.destroy=function(){if(this.inited&&(this.inited=!1,this.$configFrame.attr("src",""),void 0!==showConfig&&showConfig&&showConfig.length)){var e=showConfig.shift();setTimeout(function(){t.main.navigate({tab:"instances",dialog:"config",params:e})},1e3)}}}function Customs(C){var m,g,h,f,T,D,I,k,O,E,z,A,S="__different__",x=this;function Y(e){if(e)x.historyTimeout&&clearTimeout(x.historyTimeout);else if(x.historyTimeout)return;x.historyTimeout=setTimeout(function(){x.historyTimeout=null,z&&x.loadHistoryTable(z.data("id"),!0)},e||5e3)}function R(t,n){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom_m.html",success:function(e){n(null,e)},error:function(e){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom.html",success:function(e){n(null,e)},error:function(e){n(e.responseText)}})}})}function Q(e){e.stopPropagation(),e.preventDefault();var t=x.$dialog.find("#customs-tabs"),c=t.data("ids");x.currentCustoms=null;var l=_(S);if(t.find("input, select").each(function(){var e=$(this).data("instance"),t=$(this).data("field");if(t){var n;if("checkbox"===$(this).attr("type")){if(this.indeterminate)return;n=$(this).prop("checked")}else n=$(this).val();if(n!==l){null===n&&(n=""),void 0===n&&(n=""),"false"===n&&(n=!1),"true"===n&&(n=!0);var i=parseFloat(n);n.toString().replace(/^\+/,"").replace(/([0-9]+(\.[0-9]+[1-9])?)(\.?0+$)/,"$1")===i.toString()&&(n=i);for(var a=0;a<c.length;a++){var s=x.main.objects[c[a]].common.custom;if(void 0===(s=x.main.objects[c[a]].common.custom=s||{})[e]){var o,r=e.split(".")[0];o=defaults[r]?"function"==typeof defaults[r]?defaults[r](x.main.objects[c[a]],x.main.objects["system.adapter."+e]):defaults[r]:x.defaults[r],s[e]=o||{}}s[e][t]=n}}}}),c){x.$dialog.find(".dialog-system-buttons .btn-save").addClass("disabled");for(var n=0;n<c.length;n++){var i=!1,a=x.main.objects[c[n]].common.custom;for(var s in a)a.hasOwnProperty(s)&&(a[s].enabled?i=!0:delete a[s]);i||(x.main.objects[c[n]].common.custom=null)}x.setCustoms(c,function(){x.loadHistoryChart(),x.main.navigate()})}}function U(e){switch(e){case"tab-customs-settings":x.loadHistoryChart();break;case"tab-customs-table":z.select(),x.loadHistoryChart();break;case"tab-customs-chart":x.$dialog.find("#tab-customs-chart .select-instance").select();var t=x.$dialog.find("#tabs-customs");x.loadHistoryChart(t.data("id"))}}return this.main=C,this.$dialog=$("#dialog-customs"),this.customEnabled=null,this.currentCustoms=null,this.check=function(){for(var e=0;e<this.main.instances.length;e++)if(this.main.objects[this.main.instances[e]].common&&("storage"===this.main.objects[this.main.instances[e]].common.type||this.main.objects[this.main.instances[e]].common.supportCustoms)&&this.main.objects[this.main.instances[e]].common.enabled)return null!==this.customEnabled&&!0!==this.customEnabled?(this.customEnabled=!0,this.inited&&this.init(null,!0)):this.customEnabled=!0,void!0;null!==this.customEnabled&&!1!==this.customEnabled?(this.customEnabled=!1,this.inited&&this.init(null,!0)):this.customEnabled=!1},this.stateChange=function(e){this.currentCustoms===e&&Y()},this.initCustomsTabs=function(e,t){var s=this.$dialog.find("#customs-tabs");e=e||[],s.html("");var o=_(S);this.defaults={};var n=this.main.config["object-customs-collapsed"];n=n?n.split(","):[];for(var r={},i=null,a=null,c=0;c<t.length;c++){var l=t[c].replace(/^system\.adapter\./,"");r[l]={};for(var d=0;d<e.length;d++){var u=C.objects[e[d]].common.custom,m=u?u[l]:null;if(C.objects[e[d]].common&&(null===i?i=C.objects[e[d]].common.type:""!==i&&i!==C.objects[e[d]].common.type&&(i=""),null===a?a=C.objects[e[d]].common.role:""!==a&&a!==C.objects[e[d]].common.role&&(a="")),m)for(var g in m)m.hasOwnProperty(g)&&(void 0===r[l][g]?r[l][g]=m[g]:r[l][g]!==m[g]&&(r[l][g]=S));else{var h=l.split(".")[0],f=null;for(var p in f=defaults[h]?"function"==typeof defaults[h]?defaults[h](x.main.objects[e[d]],x.main.objects["system.adapter."+l]):defaults[h]:this.defaults[h])f.hasOwnProperty(p)&&(void 0===r[l][p]?r[l][p]=f[p]:r[l][p]!==f[p]&&(r[l][p]=S))}}}for(var b=0;b<t.length;b++){var y=t[b].split("."),v=y[2],w=y[3],j=v+"."+w,N=this.main.objects["system.adapter."+v].common.icon;N="/adapter/"+v+"/"+N;var L='<li data-adapter="'+j+'" class="'+(-1===n.indexOf(j)?"active":"")+'"> <div class="collapsible-header"> <img src="'+N+'" />'+_("Settings for %s",j)+' <span class="activated" data-adapter="'+j+'" style="opacity: '+(!r[j]||!0!==r[j].enabled&&r[j].enabled!==S?"0":"1")+'">'+_("active")+'</span> </div> <div class="customs-settings collapsible-body">'+$('script[data-template-name="'+v+'"]').html()+" </div></li>",T=$(L);this.defaults[v]={},T.find("input, select").each(function(){var e=$(this);e.attr("data-instance",v+"."+w);var t=e.attr("data-field"),n=e.attr("data-default");"true"===n&&(n=!0),"false"===n&&(n=!1),void 0!==n&&n.toString().replace(/\+/,"")===parseFloat(n).toString()&&(n=parseFloat(n)),x.defaults[v][t]=n,"enabled"===t&&e.on("click",function(e){e.stopPropagation(),$(this).prop("checked")})}),s.append(T),customPostInits.hasOwnProperty(v)&&"function"==typeof customPostInits[v]&&customPostInits[v](T,r[v+"."+w],x.main.objects["system.adapter."+v+"."+w],i,a)}s.find("input, select").each(function(){var e,n=$(this),t=n.data("instance"),i=t.split(".")[0],a=n.data("field");void 0!==r[t][a]?"checkbox"===n.attr("type")?r[t][a]===S?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===S?("number"===n.attr("type")&&n.attr("type","text"),"SELECT"===n.prop("tagName").toUpperCase()?(n.prepend('<option value="'+o+'">'+o+"</option>"),n.val(o)):n.val("").attr("placeholder",o)):n.val(r[t][a]):(x.defaults[i]&&void 0!==x.defaults[i][a]&&(e=x.defaults[i][a]),void 0!==e&&("checkbox"===n.attr("type")?n.prop("checked",e):n.val(e)));"checkbox"===n.attr("type")?n.on("change",function(){if(x.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled"),"enabled"===$(this).data("field")){var e=n.data("instance"),t=s.find('.activated[data-adapter="'+e+'"]');$(this).prop("checked")?t.css("opacity",1):t.css("opacity",0)}}):n.on("change",function(){x.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")})}),this.showCustomsData(1<e.length?null:e[0]),this.$dialog.find(".dialog-system-buttons .btn-save").addClass("disabled"),translateAll("#dialog-customs"),x.$dialog.find(".collapsible").collapsible({onOpenEnd:function(e){var t=x.main.config["object-customs-collapsed"];t=t?t.split(","):[];var n=$(e).data("adapter"),i=t.indexOf(n);-1!==i&&t.splice(i,1),x.main.saveConfig("object-customs-collapsed",t.join(","))},onCloseEnd:function(e){var t=x.main.config["object-customs-collapsed"];t=t?t.split(","):[];var n=$(e).data("adapter");-1===t.indexOf(n)&&t.push(n),x.main.saveConfig("object-customs-collapsed",t.join(","))}}),x.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||(e[0].indeterminate?(e[0].indeterminate=!1,e.prop("checked",!0).trigger("change")):e.prop("checked",!e.prop("checked")).trigger("change"))}),s.find("select").select(),M.updateTextFields("#dialog-customs"),this.resizeHistory()},this.loadHistoryTable=function(e,t,l){g=g||x.$dialog.find("#grid-history"),m=m||x.$dialog.find("#grid-history-body"),t||m.html('<tr><td colspan="5" style="text-align: center">'+_("Loading...")+"</td></tr>");var n={aggregate:"none",instance:z.val(),from:!0,ack:!0,q:!0};T||(T=this.$dialog.find("#tab-customs-table .datepicker.date-from"),D=this.$dialog.find("#tab-customs-table .datepicker.date-to"),I=this.$dialog.find("#tab-customs-table .timepicker.time-from"),k=this.$dialog.find("#tab-customs-table .timepicker.time-to"));var d,i=T.val()?M.Datepicker.getInstance(T).toString("yyyy.mm.dd"):"",a=I.val(),s=D.val()?M.Datepicker.getInstance(D).toString("yyyy.mm.dd"):"",o=k.val(),r=!0;if(s?(r=!1,(s=new Date(s)).setHours(23),s.setMinutes(59),s.setSeconds(59),s.setMilliseconds(999)):s=new Date,o){var c=o.split(":");s.setHours(c[0]),s.setMinutes(c[1]),s.setSeconds(59),s.setMilliseconds(999),r=!1}if(s=s.getTime(),r&&(s+=1e4),n.end=s,i||a){if(i=new Date(i||s),a){var u=a.split(":");i.setHours(u[0]),i.setMinutes(u[1])}else i.setHours(0),i.setMinutes(0);i.setSeconds(0),i.setMilliseconds(0),n.start=i.getTime()}else n.count=50;l&&(d=new Date(s).toISOString()+"_"+(n.start?new Date(n.start):n.count+"points")+"_"+e+"__"+n.instance+".csv"),C.socket.emit("getHistory",e,n,function(r,c){setTimeout(function(){var e,t,n,i="value;acknowledged;from;timestamp;lastchanged;\n";if(r)console.error(r),m.html('<tr><td colspan="5" style="text-align: center" class="error">'+r+"</td></tr>");else{var a="";if(c&&c.length){for(var s=c.length-1;0<=s;s--){var o=(c[s].from||"").replace("system.adapter.","").replace("system.","");a+='<tr class="'+(c[s].ts>f?"highlight":"")+'"> <td>'+c[s].val+"</td> <td>"+c[s].ack+"</td> <td>"+o+"</td> <td>"+C.formatDate(c[s].ts)+"</td> <td>"+C.formatDate(c[s].lc)+"</td></tr>\n",l&&(i+=c[s].val+";"+c[s].ack+";"+(o||"")+";"+(c[s].ts?new Date(c[s].ts).toISOString():"")+";"+(c[s].lc?new Date(c[s].lc).toISOString():"")+";\n")}f=c[c.length-1].ts}else a='<tr><td colspan="5" style="text-align: center">'+_("No data")+"</td></tr>";m.html(a)}!function e(){$.fn.colResizable&&(g.is(":visible")?(g.data("inited")||((h=new IobListHeader("grid-history-header",{list:g,colWidthOffset:1,prefix:"log-filter"})).add("text","val"),h.add("text","ack"),h.add("text","from"),h.add("text","ts"),h.add("text","lc")),g.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return h.syncHeader()}}),h.syncHeader()):setTimeout(function(){e()},200))}(),l&&(e=d,t=i,(n=document.createElement("a")).setAttribute("href","data:text/plain;charset=utf-8,"+encodeURIComponent(t)),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n))},0)})},this.loadHistoryChart=function(e){if(O||(O=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),E=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a<this.main.instances.length&&("flot"===this.main.objects[C.instances[a]].common.name&&this.main.objects[this.main.instances[a]].common.enabled?n="flot":!n&&"rickshaw"===this.main.objects[C.instances[a]].common.name&&this.main.objects[this.main.instances[a]].common.enabled?n="rickshaw":"web"===this.main.objects[this.main.instances[a]].common.name&&this.main.objects[this.main.instances[a]].common.enabled&&(t=this.main.objects[this.main.instances[a]].native.port,i=this.main.objects[this.main.instances[a]].native.secure),"flot"!==n||!t);a++);var s=this.$dialog.find("#iframe-history-chart"),o="http{isSecure}://{hostname}:{port}/{chart}/index.html?range=1440&zoom=true&axeX=lines&axeY=inside&hoverDetail=true&aggregate=onchange&chartType=step&live=30&instance={instance}&l%5B0%5D%5Bid%5D={id}&l%5B0%5D%5Boffset%5D=0&l%5B0%5D%5Baggregate%5D=minmax&l%5B0%5D%5Bcolor%5D=%231868a8&l%5B0%5D%5Bthickness%5D=1&l%5B0%5D%5Bshadowsize%5D=1&l%5B0%5D%5Bsmoothing%5D=0&l%5B0%5D%5BafterComma%5D=0&l%5B0%5D%5BignoreNull%5D=false&aggregateType=step&aggregateSpan=300&relativeEnd=now&timeType=relative&noBorder=noborder&bg=rgba(0%2C0%2C0%2C0)&timeFormat=%25H%3A%25M&useComma={comma}&noedit=false&animation=0";o=(o=(o=(o=(o=(o=(o=o.replace("{isSecure}",i?"s":"")).replace("{hostname}",location.hostname)).replace("{port}",t)).replace("{chart}",n)).replace("{instance}",x.$dialog.find("#tab-customs-chart .select-instance").val())).replace("{id}",encodeURI(e))).replace("{comma}",x.main.systemConfig&&x.main.systemConfig.common&&x.main.systemConfig.isFloatComma),s.attr("src",o)}else this.$dialog.find("#iframe-history-chart").attr("src","")},this.showCustomsData=function(e){var t=this.$dialog.find("#tabs-customs"),n=0,i=!1;if(U("tab-customs-settings"),e){t.data("id",e);for(var a=0;a<C.instances.length&&("flot"===C.objects[C.instances[a]].common.name&&C.objects[C.instances[a]].common.enabled?i="flot":!i&&"rickshaw"===C.objects[C.instances[a]].common.name&&C.objects[C.instances[a]].common.enabled?i="rickshaw":"web"===C.objects[C.instances[a]].common.name&&C.objects[C.instances[a]].common.enabled&&(n=C.objects[C.instances[a]].native.port),"flot"!==i||!n);a++);x.loadHistoryTable(e),t.find(".tabs .tab-table").removeClass("disabled"),n&&i&&x.currentCustoms?t.find(".tabs .tab-chart").removeClass("disabled"):t.find(".tabs .tab-chart").addClass("disabled")}else t.find(".tabs .tab-table").addClass("disabled"),t.find(".tabs .tab-chart").addClass("disabled")},this.setCustoms=function(t,n){var e=t.pop();e?(this.$dialog.find("#tab-customs-settings .title").html(_("Adapter settings for %s states",t.length)),x.main.socket.emit("setObject",e,this.main.objects[e],function(e){e?x.main.showMessage(_(e),_("Error"),"error_outline"):setTimeout(function(){x.setCustoms(t,n)},50)})):n&&n()},this.resizeHistory=function(){var e=this.$dialog.find("#iframe-history-chart");if(e.attr("src")){var t=e.data("timeout");t&&clearTimeout(t),e.data("timeout",setTimeout(function(){x.$dialog.find("#iframe-history-chart").data("timeout",null),x.loadHistoryChart(x.$dialog.find("#tabs-customs").data("id"))},1e3))}},this.allStored=function(){return x.$dialog.find(".dialog-system-buttons .btn-save").hasClass("disabled")},this.init=function(e,t){if(!this.inited||t){var n=this.main.navigateGetParams();n&&(n=n.split(",")),n&&n.length||(n=this.ids,this.ids=void 0);var i=[];this.defaults={};for(var a=0,s="",o=[],r=0;r<this.main.instances.length;r++){var c=this.main.objects[this.main.instances[r]];if(c&&c.common&&("storage"===c.common.type||c.common.supportCustoms)){i.push(this.main.instances[r]);var l=this.main.instances[r].split(".");-1===o.indexOf(l[2])&&(o.push(l[2]),a++,R(l[2],function(e,t){e&&console.error(e),t&&(s+=t),--a||(x.$dialog.find("#customs-templates").html(s),x.initCustomsTabs(n,i))}))}}var d,u=[];if(n)for(var m=n.length-1;0<=m;m--)if(this.main.objects[n[m]]){var g=this.main.objects[n[m]].common.custom;if(g){var h=!1;for(var f in g)g.hasOwnProperty(f)&&(!1===g[f].enabled?delete g[f]:(1===n.length&&u.push(f),h=!0));h||delete this.main.objects[n[m]].common.custom}}else console.warn("Null object: "+n[m]),n.splice(m,1);z=this.$dialog.find("#tab-customs-table .select-instance"),A=this.$dialog.find("#tab-customs-chart .select-instance");var p=this.$dialog.find("#tab-customs-table .refresh"),b=this.$dialog.find("#tab-customs-table .download"),M=this.$dialog.find("#tab-customs-chart .refresh");if(n&&1===n.length){d=_("Storage of %s",n[0]),this.currentCustoms=u.length?n[0]:null;for(var y="",v=0;v<u.length;v++){var w=this.main.objects["system.adapter."+u[v]];w&&w.common&&(w.common.enabled||this.main.states["system.adapter."+u[v]+".alive"]&&this.main.states["system.adapter."+u[v]+".alive"].val)&&(y+='<option value="'+u[v]+'" '+(v?"":"selected")+" >"+u[v]+"</option>\n")}if(y){z.data("id",n[0]).html(y).show().off("change").on("change",function(){x.main.saveConfig("object-history-table",z.val()),x.loadHistoryTable($(this).data("id"))}).select(),A.data("id",n[0]).html(y).show().off("change").on("change",function(){x.main.saveConfig("object-history-chart",A.val()),x.loadHistoryChart($(this).data("id"))}).select(),void 0!==this.main.config["object-history-table"]&&z.val(this.main.config["object-history-table"]),void 0!==this.main.config["object-history-chart"]&&A.val(this.main.config["object-history-chart"]),p.data("id",n[0]).show().off("click").on("click",function(){x.$dialog.find("#grid-history-body").html(""),x.loadHistoryTable($(this).data("id"))}),M.data("id",n[0]).show().off("click").on("click",function(){x.loadHistoryChart($(this).data("id"))}),b.data("id",n[0]).show().off("click").on("click",function(){x.loadHistoryTable($(this).data("id"),!1,!0)});var j=new Date;j.setDate(j.getDate()-1);for(var N={today:_("Today"),clear:_("Clear"),done:_("Ok"),months:[_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December")],monthsShort:[_("Jan"),_("Feb"),_("Mar"),_("Apr"),_("May"),_("Jun"),_("Jul"),_("Aug"),_("Sep"),_("Oct"),_("Nov"),_("Dec")],weekdaysShort:[_("Sun"),_("Mon"),_("Tue"),_("Wed"),_("Thu"),_("Fri"),_("Sat")],weekdays:[_("Sunday"),_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday")],weekdaysAbbrev:["S","M","T","W","T","F","S"]},L=0;L<N.weekdaysAbbrev.length;L++)N.weekdaysAbbrev[L]=N.weekdaysShort[L][0];T||(T=this.$dialog.find("#tab-customs-table .datepicker.date-from"),D=this.$dialog.find("#tab-customs-table .datepicker.date-to"),I=this.$dialog.find("#tab-customs-table .timepicker.time-from"),k=this.$dialog.find("#tab-customs-table .timepicker.time-to"),O=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),E=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),T.datepicker({defaultDate:j,showDaysInNextAndPreviousMonths:!0,minYear:2014,maxYear:2032,i18n:N,setDefaultDate:!0,firstDay:1,onSelect:function(e){T.datepicker("setInputValue"),T.datepicker("close")}}),T.on("change",function(){Y(1e3)}),I.timepicker({defaultTime:"00:00",twelveHour:!1,doneText:_("Ok"),clearText:_("Clear"),cancelText:_("Cancel"),autoClose:!0}),I.on("change",function(){Y(1e3)}),k.timepicker({defaultTime:"now",twelveHour:!1,doneText:_("Ok"),clearText:_("Clear"),cancelText:_("Cancel"),autoClose:!0}),k.on("change",function(){Y(1e3)}),D.datepicker({defaultDate:new Date,showDaysInNextAndPreviousMonths:!0,minYear:2014,maxYear:2032,i18n:N,setDefaultDate:!0,firstDay:1,onSelect:function(e){D.datepicker("setInputValue"),D.datepicker("close")}}),D.on("change",function(){Y(1e3)}),O.datepicker({defaultDate:j,showDaysInNextAndPreviousMonths:!0,minYear:2014,maxYear:2032,i18n:N,setDefaultDate:!0,firstDay:1,onSelect:function(e){O.datepicker("setInputValue"),O.datepicker("close")}}),O.on("change",function(){x.loadHistoryChart(A.data("id"))}),E.datepicker({defaultDate:new Date,showDaysInNextAndPreviousMonths:!0,minYear:2014,maxYear:2032,i18n:N,setDefaultDate:!0,firstDay:1,onSelect:function(e){E.datepicker("setInputValue"),E.datepicker("close")}}),E.on("change",function(){x.loadHistoryChart(A.data("id"))})}else z.hide(),A.hide(),p.hide(),M.hide(),b.hide();this.currentCustoms&&x.main.subscribeStates(this.currentCustoms),this.$dialog.find("#tab-customs-table .title").html(_("Values of %s",n[0])),this.$dialog.find("#tab-customs-chart .title").html(_("Chart for %s",n[0]))}else n&&(z.hide(),A.hide(),p.hide(),M.hide(),b.hide(),d=_("Storage of %s states",n.length),this.currentCustoms=null);this.$dialog.find("#tab-customs-settings .title").html(d),this.$dialog.find("#tabs-customs").find(".tabs").mtabs({onShow:function(e){e&&U($(e).attr("id"))}}),this.$dialog.find("#customs-tabs").data("ids",n),x.$dialog.find(".dialog-system-buttons .btn-save").off("click").on("click",Q),x.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),x.$dialog.find(".dialog-system-buttons .btn-save").hasClass("disabled")?(x.loadHistoryChart(),x.main.navigate()):x.main.confirmMessage(_("Are you sure? Changes are not saved."),_("Please confirm"),"error_outline",function(e){e&&(x.$dialog.find(".dialog-system-buttons .btn-save").addClass("disabled"),x.loadHistoryChart(),x.main.navigate())})})}},this.destroy=function(){this.inited&&(this.$dialog.find(".collapsible").collapsible("destroy"),this.inited=!1,this.loadHistoryChart(),this.currentCustoms&&x.main.unsubscribeStates(this.currentCustoms))},this}function EditObject(e){var c=this;function a(e,t,n,i){var a="";for(var s in t)if(t.hasOwnProperty(s)&&("common"!==n||"name"!==s&&"icon"!==s)){a+='<div class="row">\n<div class="col s11">\n',"state"===i&&"common"===n&&"type"===s?a+='<select class="object-tab-edit-string" data-attr="'+s+'"><option value="boolean" '+("boolean"===t[s]?"selected":"")+">"+_("boolean")+'</option><option value="string" '+("string"===t[s]?"selected":"")+">"+_("string")+'</option><option value="number" '+("number"===t[s]?"selected":"")+">"+_("number")+'</option><option value="array" '+("array"===t[s]?"selected":"")+">"+_("array")+'</option><option value="object" '+("object"===t[s]?"selected":"")+">"+_("object")+'</option><option value="mixed" '+("mixed"===t[s]?"selected":"")+">"+_("mixed")+"</option></select>":"string"==typeof t[s]?a+='<input type="text" class="object-tab-edit-string" data-attr="'+s+'" value="'+t[s]+'" />\n':"number"==typeof t[s]?a+='<input type="text" class="object-tab-edit-number" data-attr="'+s+'" value="'+t[s]+'" />\n':"boolean"==typeof t[s]?a+='<input type="checkbox" class="object-tab-edit-boolean filled-in" data-attr="'+s+'" '+(t[s]?"checked":"")+" />\n":a+='<textarea class="object-tab-edit-object" style="width: 100%" rows="3" data-attr="'+s+'">'+JSON.stringify(t[s],null,2)+"</textarea>\n";var o=s;"common"===n&&systemDictionary["common_"+s]&&systemDictionary["common_"+s][systemLang]&&(o=_("common_"+s)),"boolean"==typeof t[s]?a+="<span>"+o+"</span>\n":a+="<label>"+o+"</label>\n",a+='</div>\n<div class="col s1"><a class="btn-floating waves-effect waves-light red object-tab-field-delete" data-attr="'+s+'" data-part="'+n+'"><i class="material-icons">delete</i></a></div>\n',a+="</div>\n"}c.$dialog.find(e).html(a)}function n(e,t){var n=c.$dialog.find(e);n.find(".object-tab-edit-string").each(function(){t[$(this).data("attr")]=$(this).val()}),n.find(".object-tab-edit-number").each(function(){t[$(this).data("attr")]=parseFloat($(this).val())}),n.find(".object-tab-edit-boolean").each(function(){t[$(this).data("attr")]=$(this).prop("checked")});var i=null;if(n.find(".object-tab-edit-object").each(function(){try{t[$(this).data("attr")]=JSON.parse($(this).val())}catch(e){return i=$(this).data("attr"),!1}}),void 0!==t.write&&("false"!==t.write&&"0"!==t.write&&0!==t.write||(t.write=!1),"true"!==t.write&&"1"!==t.write&&1!==t.write||(t.write=!0)),void 0!==t.read&&("false"!==t.read&&"0"!==t.read&&0!==t.read||(t.read=!1),"true"!==t.read&&"1"!==t.read&&1!==t.read||(t.read=!0)),null===t.min&&delete t.min,void 0!==t.min){var a=parseFloat(t.min);a.toString()===t.min.toString()&&(t.min=a),"false"===t.min&&(t.min=!1),"true"===t.min&&(t.min=!0)}if(null===t.max&&delete t.max,void 0!==t.max){var s=parseFloat(t.max);s.toString()===t.max.toString()&&(t.max=s),"false"===t.max&&(t.max=!1),"true"===t.max&&(t.max=!0)}if(null===t.def&&delete t.def,void 0!==t.def){var o=parseFloat(t.def);o.toString()===t.def.toString()&&(t.def=o),"false"===t.def&&(t.def=!1),"true"===t.def&&(t.def=!0)}if(-1!==e.indexOf("common"))for(var r in t)t.hasOwnProperty(r)&&("true"===t[r]&&(t[r]=!0),"false"===t[r]&&(t[r]=!1),parseFloat(t[r]).toString()===t[r]&&(t[r]=parseFloat(t[r])));return i}function s(e,t,n){"boolean"==typeof t&&(n=t,t=3e3),c.main.showToast(c.$dialog,e,null,t,n)}this.$dialog=$("#dialog-editobject"),this.$dialogNewField=$("#dialog-new-field"),this.main=e,this.prepared=!1,this.inited=!1,this.$dialogSave=this.$dialog.find(".dialog-editobject-buttons .btn-save"),this.iconVal=null,this._prepare=function(){this.prepared||(this.prepared=!0,this.$dialogSave.on("click",function(){c.save()}),this.$dialog.find(".dialog-editobject-buttons .btn-cancel").on("click",function(){c.editor.setValue(""),c.$dialogSave.addClass("disabled"),c.main.navigate()}),this.$dialog.find(".btn-add-common").on("click",function(){c.$dialogNewField.find(".object-tab-new-icon").show(),c.$dialogNewField.modal("open");var e=c.$dialogNewField.find(".object-tab-new-name");e.data("type","common").focus(),e.hasClass("autocomplete")||(e.addClass("autocomplete"),e.mautocomplete({data:{type:null,desc:null,min:null,max:null,def:null,role:null,unit:null,read:null,write:null,states:null},minLength:0})),e.focus()}),this.$dialog.find(".btn-add-native").on("click",function(){c.$dialogNewField.find(".object-tab-new-icon").hide(),c.$dialogNewField.modal("open");var e=c.$dialogNewField.find(".object-tab-new-name");e.hasClass("autocomplete")&&(e.mautocomplete("destroy"),e.removeClass("autocomplete")),M.updateTextFields("#dialog-new-field"),e.data("type","native").focus()}),this.$dialogNewField.find(".object-tab-new-name").keypress(function(e){13===e.which&&c.$dialogNewField.find(".btn-add").trigger("click")}),this.editor||(this.editor=ace.edit("view-object-raw"),this.editor.getSession().setMode("ace/mode/json"),this.editor.$blockScrolling=!0,this.editor.getSession().on("change",function(){c.$dialogSave.removeClass("disabled")})),this.$dialogNewField.modal(),this.$dialog.find(".tabs").mtabs({onShow:function(e){if(e){var t=$(e).attr("id");if("object-tab-common"===t)s(_("Drop the icons here"));else if("object-tab-raw"===t){var n=c.saveFromTabs();if(!n)return!1;c.editor.setValue(JSON.stringify(n,null,2))}else if("object-tab-raw"===t){var i;try{i=JSON.parse(c.editor.getValue())}catch(e){return c.main.showMessage(e,_("Parse error"),"error_outline"),c.main.noSelect||c.$dialog.find(".tabs").mtabs("select","object-tab-raw"),!1}c.load(i)}return c.main.saveConfig("object-edit-active",t),!0}}}),this.$dialogNewField.find(".btn-add").on("click",function(e){e.preventDefault(),e.stopPropagation();var t=c.$dialogNewField.find(".object-tab-new-name"),n=t.data("type")||"common",i=t.val().trim(),a=c.saveFromTabs();i&&-1===i.indexOf(" ")?void 0===a[n][i]?(a[n][i]="",c.load(a),c.$dialogNewField.find(".object-tab-new-name").val(""),c.$dialogNewField.modal("close"),c.$dialogSave.removeClass("disabled")):c.main.showError(_("Field %s yet exists!",i)):c.main.showError(_("Invalid field name: %s",i))}),this.$dialogNewField.find(".btn-cancel").on("click",function(e){c.$dialogNewField.find(".object-tab-new-name").val("")}),this.$dialog.find(".edit-object-name").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),this.$dialog.find(".edit-object-type").on("change",function(){c.$dialogSave.removeClass("disabled")}),this.$dialog.find(".object-tab-rights input").on("change",function(){c.$dialogSave.removeClass("disabled")}),installFileUpload(this.$dialog.find("#object-tab-common"),5e4,function(e,t){if(e)s(e,!0);else{if(!t.match(/^data:image\//))return void s(_("Unsupported image format"),!0);c.$dialogSave.removeClass("disabled"),c.iconVal=t;var n=c.$dialog.find(".icon-editor");n.find(".icon").show().html('<img class="treetable-icon" />'),n.find(".icon .treetable-icon").attr("src",t)}}),this.$dialog.find(".icon-editor .icon-upload").off("click").on("click",function(){c.$dialog.find(".drop-file").trigger("click")}),this.$dialog.find(".icon-editor .icon-clear").off("click").on("click",function(){c.iconVal&&(c.iconVal=null,c.$dialog.find(".icon-editor").hide().appendTo(c.$dialog),c.$dialogSave.removeClass("disabled"))}))},this.init=function(){if(this._prepare(),!this.inited){this.inited=!0;var e=c.main.navigateGetParams(),t=!!(e||"").match(/,def$/);e=e.replace(/,def$/,"");var n=this.main.objects[e];if(n){void 0===this.main.config["object-edit-active"]||c.main.noSelect||this.$dialog.find(".tabs").mtabs("select",this.main.config["object-edit-active"]);for(var i,a="",s=0;s<this.main.tabs.users.list.length;s++)i=translateName(this.main.objects[this.main.tabs.users.list[s]].common.name),a+='<option value="'+this.main.tabs.users.list[s]+'">'+(i||this.main.tabs.users.list[s])+"</option>";for(this.$dialog.find(".object-tab-acl-owner").html(a),a="",s=0;s<this.main.tabs.users.groups.length;s++)i=translateName(this.main.objects[this.main.tabs.users.groups[s]].common.name),a+='<option value="'+this.main.tabs.users.groups[s]+'">'+(i||this.main.tabs.users.groups[s])+"</option>";this.$dialog.find(".object-tab-acl-group").html(a),this.load(n),t?this.$dialog.data("cb",function(n){"state"===n.type&&c.main.socket.emit("getState",n._id,function(e,t){t&&null!==t.val&&void 0!==t.val||c.main.socket.emit("setState",n._id,void 0===n.common.def?null:n.common.def,!0)})}):this.$dialog.data("cb",null),c.$dialogSave.addClass("disabled")}}},this.destroy=function(){this.inited&&(this.inited=!1)},this.load=function(e){if(e){e.common=e.common||{},e.native=e.native||{},e.acl=e.acl||{},this.$dialog.find(".title-id").text(e._id),this.$dialog.find(".edit-object-name").val(e.common?translateName(e.common.name):e._id),this.$dialog.find(".edit-object-type").val(e.type),this.$dialog.find(".object-tab-acl-owner").val(e.acl.owner||"system.user.admin"),this.$dialog.find(".object-tab-acl-group").val(e.acl.ownerGroup||"system.group.administrator"),this.$dialog.find(".icon-editor").hide().appendTo(this.$dialog),a(".object-tab-common-table",e.common||{},"common",e.type),a(".object-tab-native-table",e.native||{},"native",e.type),void 0!==e.common.icon?(this.iconVal=e.common.icon,this.$dialog.find(".object-tab-common-table").prepend(this.$dialog.find(".icon-editor").show()),this.$dialog.find(".icon-editor .icon").html(c.main.getIconFromObj(e))):this.iconVal=null,this.$dialog.find(".object-tab-field-delete").on("click",function(){var n=$(this).data("part"),i=$(this).data("attr");c.main.confirmMessage(_("Delete attribute"),_("Please confirm"),"error_outline",function(e){if(e){var t=c.saveFromTabs();delete t[n][i],c.load(t)}})}),e.acl=e.acl||{},void 0===e.acl.object&&(e.acl.object=1638),this.$dialog.find("#object-tab-acl-obj-owner-read").prop("checked",1024&e.acl.object),this.$dialog.find("#object-tab-acl-obj-owner-write").prop("checked",512&e.acl.object),this.$dialog.find("#object-tab-acl-obj-group-read").prop("checked",64&e.acl.object),this.$dialog.find("#object-tab-acl-obj-group-write").prop("checked",32&e.acl.object),this.$dialog.find("#object-tab-acl-obj-every-read").prop("checked",4&e.acl.object),this.$dialog.find("#object-tab-acl-obj-every-write").prop("checked",2&e.acl.object),"state"!==e.type?this.$dialog.find(".object-tab-acl-state").hide():(this.$dialog.find(".object-tab-acl-state").show(),void 0===e.acl.state&&(e.acl.state=1638),this.$dialog.find("#object-tab-acl-state-owner-read").prop("checked",1024&e.acl.state),this.$dialog.find("#object-tab-acl-state-owner-write").prop("checked",512&e.acl.state),this.$dialog.find("#object-tab-acl-state-group-read").prop("checked",64&e.acl.state),this.$dialog.find("#object-tab-acl-state-group-write").prop("checked",32&e.acl.state),this.$dialog.find("#object-tab-acl-state-every-read").prop("checked",4&e.acl.state),this.$dialog.find("#object-tab-acl-state-every-write").prop("checked",2&e.acl.state));var t=JSON.parse(JSON.stringify(e));if(this.editor.setValue(JSON.stringify(t,null,2)),t._id&&delete t._id,t.common&&delete t.common,t.type&&delete t.type,t.native&&delete t.native,t.acl&&delete t.acl,this.$dialog.find("#view-object-rest").val(JSON.stringify(t,null," ")),this.$dialog.find("select").select(),this.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),this.$dialog.find("input").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),this.$dialog.find("select").on("change",function(){c.$dialogSave.removeClass("disabled")}),this.$dialog.find("textarea").on("change",function(){c.$dialogSave.removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),void 0!==e.common.color){var n=Date.now(),i=this.$dialog.find('.object-tab-edit-string[data-attr="color"]').parent();i.prepend('<i class="material-icons prefix tab-enums-dialog-new-color-icon">color_lens</i><a class="btn edit-color translate">'+_("Color")+"</a>"),i.colorpicker({component:".btn",color:i,container:!0}).colorpicker("setValue",e.common.color||"#fff").on("showPicker.colorpicker",function(){}).on("changeColor.colorpicker",function(e){100<Date.now()-n&&i.find("input").val(e.color.toHex()).trigger("change")})}}},this.saveFromTabs=function(){var e;try{e=(e=this.$dialog.find("#view-object-rest").val())?JSON.parse(e):{}}catch(t){return this.main.showMessage(_("Cannot parse."),_("Error in %s",t),"error_outline"),!1}e.common={},e.native={},e.acl={},e._id=this.$dialog.find(".title-id").text(),e.common.name=this.$dialog.find(".edit-object-name").val(),e.type=this.$dialog.find(".edit-object-type").val();var t=n(".object-tab-common-table",e.common);return t?(this.main.showMessage(_("Cannot parse."),_("Error in %s",t),"error_outline"),!1):(t=n(".object-tab-native-table",e.native))?(this.main.showMessage(_("Cannot parse."),_("Error in %s",t),"error_outline"),!1):(e.acl.object=0,e.acl.object|=this.$dialog.find("#object-tab-acl-obj-owner-read").prop("checked")?1024:0,e.acl.object|=this.$dialog.find("#object-tab-acl-obj-owner-write").prop("checked")?512:0,e.acl.object|=this.$dialog.find("#object-tab-acl-obj-group-read").prop("checked")?64:0,e.acl.object|=this.$dialog.find("#object-tab-acl-obj-group-write").prop("checked")?32:0,e.acl.object|=this.$dialog.find("#object-tab-acl-obj-every-read").prop("checked")?4:0,e.acl.object|=this.$dialog.find("#object-tab-acl-obj-every-write").prop("checked")?2:0,e.acl.owner=this.$dialog.find(".object-tab-acl-owner").val(),e.acl.ownerGroup=this.$dialog.find(".object-tab-acl-group").val(),"state"===e.type&&(e.acl.state=0,e.acl.state|=this.$dialog.find("#object-tab-acl-state-owner-read").prop("checked")?1024:0,e.acl.state|=this.$dialog.find("#object-tab-acl-state-owner-write").prop("checked")?512:0,e.acl.state|=this.$dialog.find("#object-tab-acl-state-group-read").prop("checked")?64:0,e.acl.state|=this.$dialog.find("#object-tab-acl-state-group-write").prop("checked")?32:0,e.acl.state|=this.$dialog.find("#object-tab-acl-state-every-read").prop("checked")?4:0,e.acl.state|=this.$dialog.find("#object-tab-acl-state-every-write").prop("checked")?2:0),null!==this.iconVal&&void 0!==this.iconVal&&(e.common.icon=this.iconVal),e)},this.saveFromRaw=function(){var e;try{e=JSON.parse(this.editor.getValue())}catch(e){return this.main.showMessage(e,_("Parse error"),"error_outline"),c.main.noSelect||this.$dialog.find(".tabs").mtabs("select","object-tab-raw"),!1}return e},this.save=function(){if("object-tab-raw"===this.main.config["object-edit-active"]){var n=this.saveFromRaw();if(!n)return;this.main.socket.emit("setObject",n._id,n,function(e){if(e)c.main.showError(e);else{var t=c.$dialog.data("cb");t&&t(n),c.$dialogSave.addClass("disabled"),c.main.navigate()}})}else{var i=c.saveFromTabs();if(!i)return;this.main.socket.emit("getObject",i._id,function(e,t){if(e)return c.main.showError(e);t.common=i.common,t.native=i.native,t.acl=i.acl,c.main.socket.emit("setObject",i._id,t,function(e){if(e)c.main.showError(e);else{var t=c.$dialog.data("cb");t&&t(i),c.$dialogSave.addClass("disabled"),c.main.navigate()}})})}},this.allStored=function(){return c.$dialogSave.hasClass("disabled")}}function Enums(t){var g=this;this.main=t,this.list=[],this.$gridEnum=$("#tab-enums"),this.$gridList=this.$gridEnum.find(".tab-enums-list"),this.$grid=this.$gridEnum.find(".tab-enums-objects"),this.updateTimers=null,this.editMode=!1,this.isTiles=!1;var d=[],a={"enum.rooms":{_id:"enum.rooms",common:{icon:"home",name:{en:"Rooms",de:"Räume",ru:"Комнаты",pt:"Quartos",nl:"Kamers",fr:"Pièces",it:"Camere",es:"Habitaciones"},desc:{en:"List of the rooms",de:"Liste der Räumen",ru:"Список комнат",pt:"Lista dos quartos",nl:"Lijst met kamers",fr:"Liste des chambres",it:"Elenco delle stanze",es:"Lista de las habitaciones"},members:[],dontDelete:!0},type:"enum"},"enum.functions":{_id:"enum.functions",common:{icon:"lightbulb_outline",name:{en:"Functions",de:"Funktionen",ru:"функции",pt:"Funções",nl:"functies",fr:"Les fonctions",it:"funzioni",es:"Funciones"},desc:{en:"List of the functions",de:"Liste der Funktionen",ru:"Список функций",pt:"Lista das funções",nl:"Lijst met functies",fr:"Liste des fonctions",it:"Elenco delle funzioni",es:"Lista de las funciones"},members:[],dontDelete:!0},type:"enum"},"enum.favorites":{_id:"enum.favorites",common:{icon:"favorite_border",name:{en:"Favorites",de:"Favoriten",ru:"Избранные",pt:"Favoritos",nl:"favorieten",fr:"Favoris",it:"Preferiti",es:"Favoritos"},desc:{en:"List of favorites objects",de:"Liste der Favoritenobjekte",ru:"Список избранных объектов",pt:"Lista de objetos favoritos",nl:"Lijst met favorietenobjecten",fr:"Liste des objets favoris",it:"Elenco di oggetti preferiti",es:"Lista de objetos favoritos"},members:[]},type:"enum"}},s={"enum.rooms":{"enum.rooms.living_room":{_id:"enum.rooms.living_room",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4MC4wNDYgNDgwLjA0NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwLjA0NiA0ODAuMDQ2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PGc+PHBhdGggZD0iTTMyOC4wMzQsMzIwLjA0NmgtMjR2LTg4YzAtNC40MTgtMy41ODItOC04LThoLTI1NmMtNC40MTgsMC04LDMuNTgyLTgsOHY4OGgtMjRjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MTI4YzAsNC40MTgsMy41ODIsOCw4LDhoMjR2MTZoMTZ2LTE2aDI0MHYxNmgxNnYtMTZoMjRjNC40MTgsMCw4LTMuNTgyLDgtOHYtMTI4QzMzNi4wMzQsMzIzLjYyOCwzMzIuNDUyLDMyMC4wNDYsMzI4LjAzNCwzMjAuMDQ2eiBNODAuMDM0LDQ0OC4wNDZoLTY0di0xMTJoNjRWNDQ4LjA0NnogTTI0MC4wMzQsNDQ4LjA0NmgtMTQ0di02NGgxNDRWNDQ4LjA0NnogTTI0MC4wMzQsMzI4LjA0NnY0MGgtMTQ0di00MGMwLTQuNDE4LTMuNTgyLTgtOC04aC00MHYtODBoMjQwdjgwaC00MEMyNDMuNjE1LDMyMC4wNDYsMjQwLjAzNCwzMjMuNjI4LDI0MC4wMzQsMzI4LjA0NnogTTMyMC4wMzQsNDQ4LjA0NmgtNjR2LTExMmg2NFY0NDguMDQ2eiIvPjwvZz48L2c+PGc+PGc+PHBhdGggZD0iTTQ3OS45NTQsMTUxLjE2NmwtMTYtMTQ0Yy0wLjQ0Ny00LjA0MS0zLjg1NC03LjEwNC03LjkyLTcuMTJoLTExMmMtNC4wOTYtMC4wMjUtNy41NDksMy4wNDktOCw3LjEybC0xNiwxNDRjLTAuMjc2LDIuMjU4LDAuNDIyLDQuNTI4LDEuOTIsNi4yNGMxLjU1LDEuNzE4LDMuNzY3LDIuNjgsNi4wOCwyLjY0aDY0djI3MmgtMzJjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MzJjMCw0LjQxOCwzLjU4Miw4LDgsOGg4MGM0LjQxOCwwLDgtMy41ODIsOC04di0zMmMwLTQuNDE4LTMuNTgyLTgtOC04aC0zMnYtMjcyaDY0YzIuMjg1LDAuMDE3LDQuNDY5LTAuOTQzLDYtMi42NEM0NzkuNTMyLDE1NS42OTQsNDgwLjIzLDE1My40MjUsNDc5Ljk1NCwxNTEuMTY2eiBNNDMyLjAzNCw0NDguMDQ2djE2aC02NHYtMTZINDMyLjAzNHogTTMzNi45OTQsMTQ0LjA0NmwxNC4yNC0xMjhoOTcuNmwxNC4yNCwxMjhIMzM2Ljk5NHoiLz48L2c+PC9nPjxnPjxnPjxwYXRoIGQ9Ik0yNzIuMDM0LDQ4LjA0NmgtNTIuNzJsLTQ1LjYtNDUuNjhjLTMuMTExLTMuMTM3LTguMTc3LTMuMTU4LTExLjMxNC0wLjA0NmMtMC4wMTYsMC4wMTUtMC4wMzEsMC4wMzEtMC4wNDYsMC4wNDZsLTQ1LjYsNDUuNjhoLTUyLjcyYy00LjQxOCwwLTgsMy41ODItOCw4djEyOGMwLDQuNDE4LDMuNTgyLDgsOCw4aDIwOGM0LjQxOCwwLDgtMy41ODIsOC04di0xMjhDMjgwLjAzNCw1MS42MjgsMjc2LjQ1Miw0OC4wNDYsMjcyLjAzNCw0OC4wNDZ6IE0xNjguMDM0LDE5LjMyNmwyOC43MiwyOC43MmgtNTcuNDRMMTY4LjAzNCwxOS4zMjZ6IE0yNjQuMDM0LDE3Ni4wNDZoLTE5MnYtMTEyaDE5MlYxNzYuMDQ2eiIvPjwvZz48L2c+PGc+PGc+PHBhdGggZD0iTTg4LjAzNCw4MC4wNDZ2ODBoMTYwdi04MEg4OC4wMzR6IE0yMzIuMDM0LDE0NC4wNDZoLTEyOHYtNDhoMTI4VjE0NC4wNDZ6Ii8+PC9nPjwvZz48L3N2Zz4=",name:{en:"Living room",de:"Wohnzimmer",ru:"Гостиная",pt:"Sala de estar",nl:"Woonkamer",fr:"Salon",it:"Soggiorno",es:"Sala"},members:[]},type:"enum"},"enum.rooms.sleeping_room":{_id:"enum.rooms.sleeping_room",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2NCwyNjRWODhIMTZ2MTc2SDB2ODBoNDh2NDhoNjR2LTQ4aDI1NnY0OGg2NHYtNDhoNDh2LTgwSDQ2NHogTTMyLDEwNGg0MTZ2MTYwaC0xNnYtMjRjMC0yMi4wOTEtMTcuOTA5LTQwLTQwLTQwDQoJCWgtMTIuNDhjMi45MDgtNC44MzIsNC40NTYtMTAuMzYsNC40OC0xNmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJoLTY0Yy0xNy42NzMsMC0zMiwxNC4zMjctMzIsMzINCgkJYzAuMDI0LDUuNjQsMS41NzIsMTEuMTY4LDQuNDgsMTZoLTQwLjk2YzIuOTA4LTQuODMyLDQuNDU2LTEwLjM2LDQuNDgtMTZjMC0xNy42NzMtMTQuMzI3LTMyLTMyLTMyaC02NA0KCQljLTE3LjY3MywwLTMyLDE0LjMyNy0zMiwzMmMwLjAyNCw1LjY0LDEuNTcyLDExLjE2OCw0LjQ4LDE2SDg4Yy0yMi4wOTEsMC00MCwxNy45MDktNDAsNDB2MjRIMzJWMTA0eiBNMzkyLDIxNg0KCQljMTMuMjU1LDAsMjQsMTAuNzQ1LDI0LDI0djI0SDY0di0yNGMwLTEzLjI1NSwxMC43NDUtMjQsMjQtMjRIMzkyeiBNMTEyLDE4NGMwLTguODM3LDcuMTYzLTE2LDE2LTE2aDY0YzguODM3LDAsMTYsNy4xNjMsMTYsMTYNCgkJcy03LjE2MywxNi0xNiwxNmgtNjRDMTE5LjE2MywyMDAsMTEyLDE5Mi44MzcsMTEyLDE4NHogTTI3MiwxODRjMC04LjgzNyw3LjE2My0xNiwxNi0xNmg2NGM4LjgzNywwLDE2LDcuMTYzLDE2LDE2DQoJCXMtNy4xNjMsMTYtMTYsMTZoLTY0QzI3OS4xNjMsMjAwLDI3MiwxOTIuODM3LDI3MiwxODR6IE05NiwzNzZINjR2LTMyaDMyVjM3NnogTTQxNiwzNzZoLTMydi0zMmgzMlYzNzZ6IE00NjQsMzI4SDE2di00OGg0NDhWMzI4DQoJCXoiLz4NCjwvZz4NCjxnPg0KCTxyZWN0IHg9IjQ4IiB5PSIxMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNDE2IiB5PSIxMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iODAiIHk9IjEyMCIgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNDgiIHk9IjE1MiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjQwIi8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSI0MTYiIHk9IjE1MiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjQwIi8+DQo8L2c+DQoNCjwvc3ZnPg0K",name:{en:"Sleeping room",de:"Schlafzimmer",ru:"Спальня",pt:"Quarto de dormir",nl:"Slaapkamer",fr:"Chambre à coucher",it:"Camera da letto",es:"Dormitorio",pl:"Sypialnia"},members:[]},type:"enum"},"enum.rooms.kitchen":{_id:"enum.rooms.kitchen",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTAsMjA4djQ4aDE2djIyNGg0NDhWMjU2aDE2di00OEgweiBNMjA4LDQ2NEgzMlYyNTZoMTc2VjQ2NHogTTI4OCw0NjRoLTY0VjMyMGg2NFY0NjR6IE0zNjgsNDY0aC02NFYzMjBoNjRWNDY0eg0KCQkgTTQ0OCw0NjRoLTY0VjMyMGg2NFY0NjR6IE00NDgsMzA0SDIyNHYtNDhoMjI0VjMwNHogTTQ2NCwyNDBIMTZ2LTE2aDQ0OFYyNDB6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNNDgsMzM2djExMmgxNDRWMzM2SDQ4eiBNMTc2LDQzMkg2NHYtODBoMTEyVjQzMnoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik03MiwyNzJjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNHMxMC43NDUsMjQsMjQsMjRzMjQtMTAuNzQ1LDI0LTI0Uzg1LjI1NSwyNzIsNzIsMjcyeiBNNzIsMzA0Yy00LjQxOCwwLTgtMy41ODItOC04DQoJCQlzMy41ODItOCw4LThzOCwzLjU4Miw4LDhTNzYuNDE4LDMwNCw3MiwzMDR6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNMTY4LDI3MmMtMTMuMjU1LDAtMjQsMTAuNzQ1LTI0LDI0czEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRTMTgxLjI1NSwyNzIsMTY4LDI3MnogTTE2OCwzMDRjLTQuNDE4LDAtOC0zLjU4Mi04LTgNCgkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzE3Mi40MTgsMzA0LDE2OCwzMDR6Ii8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSIzMDQiIHk9IjI3MiIgd2lkdGg9IjY0IiBoZWlnaHQ9IjE2Ii8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSIyNTYiIHk9IjMzNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSIzMzYiIHk9IjM2OCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjMyIi8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSI0MDAiIHk9IjM2OCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjMyIi8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNMjA4LDB2ODYuMDhsLTI0LTQ4VjBINDB2MzguMDhMMC44OCwxMTYuNGMtMS45ODgsMy45NDYtMC40MDEsOC43NTYsMy41NDQsMTAuNzQ0QzUuNTM0LDEyNy43MDMsNi43NTgsMTI3Ljk5Niw4LDEyOGg0NzINCgkJVjBIMjA4eiBNNTYsMTZoMTEydjE2SDU2VjE2eiBNMjAuOTYsMTEybDMyLTY0aDExOC4wOGwzMiw2NEgyMC45NnogTTMzNiwxMTJIMjI0VjE2aDExMlYxMTJ6IE00NjQsMTEySDM1MlYxNmgxMTJWMTEyeiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iMzA0IiB5PSI4MCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ii8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSIzNjgiIHk9IjgwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiLz4NCjwvZz4NCjxnPg0KCTxyZWN0IHg9Ijk2IiB5PSIzNjgiIHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPC9zdmc+DQo=",name:{en:"Kitchen",de:"Küche",ru:"Кухня",pt:"Cozinha",nl:"Keuken",fr:"Cuisine",it:"Cucina",es:"Cocina",pl:"Kuchnia"},members:[]},type:"enum"},"enum.rooms.office":{_id:"enum.rooms.office",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJCTxwYXRoIGQ9Ik0yMjQsMTIwdjExMmgyMjRWMTIwSDIyNHogTTQzMiwyMTZIMjQwdi04MGgxOTJWMjE2eiIvPg0KPC9nPg0KPGc+DQoJCTxwYXRoIGQ9Ik0zMzYsMTUyYy0xMy4yNTUsMC0yNCwxMC43NDUtMjQsMjRzMTAuNzQ1LDI0LDI0LDI0czI0LTEwLjc0NSwyNC0yNFMzNDkuMjU1LDE1MiwzMzYsMTUyeiBNMzM2LDE4NGMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzM0MC40MTgsMTg0LDMzNiwxODR6Ii8+DQo8L2c+DQo8Zz4NCgkJPHBhdGggZD0iTTE3Niw4OFY0OGMwLTQuNDE4LTMuNTgyLTgtOC04aC04VjE2YzAtNC40MTgtMy41ODItOC04LThINDBjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MjRoLThjLTQuNDE4LDAtOCwzLjU4Mi04LDh2NDBIMHYzODQNCgkJCWgyMDhWMjY0aDIwOHYyMDhoNjRWODhIMTc2eiBNNDgsMjRoOTZ2MTZINDhWMjR6IE0zMiw1NmgxMjh2MzJIMzJWNTZ6IE0xOTIsNDU2SDE2VjIwMGgxNzZWNDU2eiBNMTkyLDE4NEgxNnYtODBoMTc2VjE4NHoNCgkJCSBNNDY0LDQ1NmgtMzJWMjY0aDMyVjQ1NnogTTQ2NCwyNDhIMjA4VjEwNGgyNTZWMjQ4eiIvPg0KPC9nPg0KPGc+DQoJCTxyZWN0IHg9IjgwIiB5PSIxMzYiIHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJCTxwYXRoIGQ9Ik0xNTIsMjE2Yy0xMy4yNTUsMC0yNCwxMC43NDUtMjQsMjRzMTAuNzQ1LDI0LDI0LDI0czI0LTEwLjc0NSwyNC0yNFMxNjUuMjU1LDIxNiwxNTIsMjE2eiBNMTUyLDI0OGMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzE1Ni40MTgsMjQ4LDE1MiwyNDh6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==",name:{en:"Office",de:"Büro",ru:"офис",pt:"Escritório",nl:"Kantoor",fr:"Bureau",it:"Ufficio",es:"Oficina",pl:"Gabinet"},members:[]},type:"enum"},"enum.rooms.nursery":{_id:"enum.rooms.nursery",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQwLDQzMmMtMTMuMjU1LDAtMjQsMTAuNzQ1LTI0LDI0czEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRTNTMuMjU1LDQzMiw0MCw0MzJ6IE00MCw0NjRjLTQuNDE4LDAtOC0zLjU4Mi04LTgNCgkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzQ0LjQxOCw0NjQsNDAsNDY0eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQ0MCw0MzJjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNHMxMC43NDUsMjQsMjQsMjRzMjQtMTAuNzQ1LDI0LTI0UzQ1My4yNTUsNDMyLDQ0MCw0MzJ6IE00NDAsNDY0Yy00LjQxOCwwLTgtMy41ODItOC04DQoJCXMzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOFM0NDQuNDE4LDQ2NCw0NDAsNDY0eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQxNiwxMTJ2NDhINjR2LTQ4SDE2djMyMGg0OHYtNDhoMzUydjQ4aDQ4VjExMkg0MTZ6IE00OCw0MTZIMzJWMTI4aDE2VjQxNnogTTY0LDIwOGgyNHY4MEg2NFYyMDh6IE02NCwzMDRoMjR2MzJINjRWMzA0DQoJCXogTTQxNiwzNjhINjR2LTE2aDM1MlYzNjh6IE0xMjAsMzA0djMyaC0xNnYtMzJIMTIweiBNMTA0LDI4OHYtODBoMTZ2ODBIMTA0eiBNMTUyLDMwNHYzMmgtMTZ2LTMySDE1MnogTTEzNiwyODh2LTgwaDE2djgwSDEzNnoNCgkJIE0xODQsMzA0djMyaC0xNnYtMzJIMTg0eiBNMTY4LDI4OHYtODBoMTZ2ODBIMTY4eiBNMjE2LDMwNHYzMmgtMTZ2LTMySDIxNnogTTIwMCwyODh2LTgwaDE2djgwSDIwMHogTTI0OCwzMDR2MzJoLTE2di0zMkgyNDh6DQoJCSBNMjMyLDI4OHYtODBoMTZ2ODBIMjMyeiBNMjgwLDMwNHYzMmgtMTZ2LTMySDI4MHogTTI2NCwyODh2LTgwaDE2djgwSDI2NHogTTMxMiwzMDR2MzJoLTE2di0zMkgzMTJ6IE0yOTYsMjg4di04MGgxNnY4MEgyOTZ6DQoJCSBNMzQ0LDMwNHYzMmgtMTZ2LTMySDM0NHogTTMyOCwyODh2LTgwaDE2djgwSDMyOHogTTM3NiwzMDR2MzJoLTE2di0zMkgzNzZ6IE0zNjAsMjg4di04MGgxNnY4MEgzNjB6IE00MTYsMzM2aC0yNHYtMzJoMjRWMzM2eg0KCQkgTTQxNiwyODhoLTI0di04MGgyNFYyODh6IE00MTYsMTkySDY0di0xNmgzNTJWMTkyeiBNNDQ4LDQxNmgtMTZWMTI4aDE2VjQxNnoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik0yOTYsNTAuNzJjLTQuNTA5LDAuMDM0LTguOTE3LDEuMzM3LTEyLjcyLDMuNzZjLTEwLjMxMy03LjY4MS0yMi40OTUtMTIuNDYtMzUuMjgtMTMuODRWMGgtMTZ2NDAuNjQNCgkJYy0xMi43ODUsMS4zOC0yNC45NjcsNi4xNTktMzUuMjgsMTMuODRjLTMuODAzLTIuNDIzLTguMjExLTMuNzI2LTEyLjcyLTMuNzZjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNGMwLDEzLjI1NSwxMC43NDUsMjQsMjQsMjQNCgkJczI0LTEwLjc0NSwyNC0yNGMtMC4wMTUtMi43MjMtMC40NzUtNS40MjUtMS4zNi04YzE5Ljg1NS0xNC41NjUsNDYuODY1LTE0LjU2NSw2Ni43MiwwYy0wLjg4NSwyLjU3NS0xLjM0NSw1LjI3Ny0xLjM2LDgNCgkJYzAsMTMuMjU1LDEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRDMzIwLDYxLjQ2NSwzMDkuMjU1LDUwLjcyLDI5Niw1MC43MnogTTE4NCw4Mi43MmMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQljMC00LjQxOCwzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOEMxOTIsNzkuMTM4LDE4OC40MTgsODIuNzIsMTg0LDgyLjcyeiBNMjk2LDgyLjcyYy00LjQxOCwwLTgtMy41ODItOC04YzAtNC40MTgsMy41ODItOCw4LTgNCgkJczgsMy41ODIsOCw4QzMwNCw3OS4xMzgsMzAwLjQxOCw4Mi43MiwyOTYsODIuNzJ6Ii8+DQo8L2c+DQoNCjwvc3ZnPg0K",name:{en:"Nursery",de:"Kinderzimmer",ru:"Детская",pt:"Berçário",nl:"Kwekerij",fr:"Garderie",it:"Asilo nido",es:"Guardería",pl:"Żłobek"},members:[]},type:"enum"},"enum.rooms.wc":{_id:"enum.rooms.wc",common:{icon:"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjU2cHgiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik00NTEsMzE3di0zMGMwLTI0LjgxMy0yMC4xODctNDUtNDUtNDVIMjI2Yy01LjI1OSwwLTEwLjMwNSwwLjkxNS0xNSwyLjU4Vjg3LjQyYzE3LjQ1OS02LjE5MiwzMC0yMi44NjUsMzAtNDIuNDIgICAgYzAtMjQuODEzLTIwLjE4Ny00NS00NS00NUg3NmMtOC4yODQsMC0xNSw2LjcxNi0xNSwxNWMwLDI3LjcxLDAsMjQ2LjM4NSwwLDI3MmMwLDE5LjU1NSwxMi41NDEsMzYuMjI4LDMwLDQyLjQyVjM3NyAgICBjMCwyNy41MTksMTAuODU1LDUzLjkyNywzMCw3My40ODJWNDk3YzAsOC4yODQsNi43MTYsMTUsMTUsMTVjMTcuMzMsMCwyNTQuODQ2LDAsMjcwLDBjOC4yODQsMCwxNS02LjcxNiwxNS0xNXMtNi43MTYtMTUtMTUtMTUgICAgaC00NXYtMTcuOTkxQzQxNS45ODgsNDM1Ljk0Myw0NTEsMzc5LjI4Myw0NTEsMzE3eiBNMjI2LDI3MmgxODBjOC4yNzEsMCwxNSw2LjcyOSwxNSwxNXYxNUgyMTF2LTE1ICAgIEMyMTEsMjc4LjcyOSwyMTcuNzI5LDI3MiwyMjYsMjcyeiBNOTEsMzBoMTA1YzguMjcxLDAsMTUsNi43MjksMTUsMTVzLTYuNzI5LDE1LTE1LDE1SDkxVjMweiBNMTA2LDMwMmMtOC4yNzEsMC0xNS02LjcyOS0xNS0xNSAgICBWOTBoOTBjMCwxNy4zOSwwLDIwMC4yNzEsMCwyMTJIMTA2eiBNMzM5Ljk5NCw0NDAuNzczYy01LjQ2MywyLjM4Ny04Ljk5NCw3Ljc4My04Ljk5NCwxMy43NDVWNDgySDE1MXYtMzcuOTE3ICAgIGMwLTQuMjY3LTEuODE3LTguMzMyLTQuOTk2LTExLjE3N0MxMzAuMTEzLDQxOC42ODQsMTIxLDM5OC4zMDcsMTIxLDM3N3YtNDUuMWMzNC41MzUsMCwyOTYuNTQ1LDAsMjk5LjE2OCwwICAgIEM0MTQuODY0LDM3OS40OTMsMzg0LjU3NSw0MjEuMjk1LDMzOS45OTQsNDQwLjc3M3oiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K",name:{en:"WC",de:"Toilette",ru:"Туалет",pt:"Banheiro",nl:"WC",fr:"Toilettes",it:"Bagno",es:"Baño",pl:"Toaleta"},members:[]},type:"enum"},"enum.rooms.garage":{_id:"enum.rooms.kitchen",common:{icon:"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4MC4wMTMgNDgwLjAxMyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwLjAxMyA0ODAuMDEzOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjI1NnB4IiBoZWlnaHQ9IjI1NnB4Ij4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMzkwLjk5OSwzMTYuOTUybC0zMC4yOTYtMjQuMjMyYy0xLjExMy0wLjg4Ny0xLjk2OS0yLjA1NS0yLjQ4LTMuMzg0bC0xMS42OC01NC40ICAgIGMtMi40MzItMTEuMDItMTIuMTc5LTE4Ljg4My0yMy40NjQtMTguOTI4SDE1Ni44MDdjLTExLjI2OC0wLjA1Mi0yMS4wMzYsNy43ODgtMjMuNDI0LDE4LjhsLTEyLDUzLjk1MiAgICBjLTAuNDAzLDEuNzgzLTEuMzk5LDMuMzc2LTIuODI0LDQuNTJsLTI5LjYsMjMuNjhjLTUuNjg3LDQuNTUyLTguOTg0LDExLjQ1Mi04Ljk1MiwxOC43MzZ2ODAuMzEyICAgIGMwLjAyMSw2Ljc4OCwyLjkzLDEzLjI0Niw4LDE3Ljc2djMwLjI0YzAsOC44MzcsNy4xNjMsMTYsMTYsMTZoMzJjOC44MzcsMCwxNi03LjE2MywxNi0xNnYtMjRoMTc2djI0YzAsOC44MzcsNy4xNjMsMTYsMTYsMTZoMzIgICAgYzguODM3LDAsMTYtNy4xNjMsMTYtMTZ2LTMwLjI0YzUuMDctNC41MTQsNy45NzktMTAuOTcyLDgtMTcuNzZ2LTgwLjMxMkM0MDAuMDI0LDMyOC40LDM5Ni43MDcsMzIxLjQ5NiwzOTAuOTk5LDMxNi45NTJ6ICAgICBNMjE4LjE0MywyMzguMzI4bDAtMC4wMDhsNC4yMDgtNi4zMmgxMDAuNzI4YzMuNzcyLTAuMDAxLDcuMDMyLDIuNjMyLDcuODI0LDYuMzJsMTAuNzA0LDQ5LjY4OEgyMjQuNzAzICAgIGM1Ljg4OC0xMS4wOTgsMy44NzEtMjQuNzM2LTQuOTc2LTMzLjY1NkMyMTUuNDYxLDI1MC4wNjQsMjE0Ljc5OSwyNDMuMzY4LDIxOC4xNDMsMjM4LjMyOHogTTE4NC4wNzksMjM4LjMyOHYtMC4wMDhsNC4yMDgtNi4zMiAgICBoMTUuMTQ0Yy01Ljg4LDExLjEwMS0zLjg2MSwyNC43MzYsNC45ODQsMzMuNjU2YzQuMjU4LDQuMjgsNC45MjYsMTAuOTYyLDEuNiwxNmwtNC4yMDgsNi4zMmgtMTUuMTYgICAgYzUuODgtMTEuMTAxLDMuODYxLTI0LjczNi00Ljk4NC0zMy42NTZDMTgxLjQxNCwyNTAuMDM3LDE4MC43NTMsMjQzLjM2MSwxODQuMDc5LDIzOC4zMjh6IE0xNDkuMDM5LDIzOC4yNjQgICAgYzAuNzkyLTMuNjU1LDQuMDI4LTYuMjYyLDcuNzY4LTYuMjU2aDEyLjU2Yy01Ljg4LDExLjEwMS0zLjg2MSwyNC43MzYsNC45ODQsMzMuNjU2YzQuMjU4LDQuMjgsNC45MjYsMTAuOTYyLDEuNiwxNmwtNC4yMDgsNi4zMiAgICBoLTMzLjc2TDE0OS4wMzksMjM4LjI2NHogTTEzNi4wMDcsNDY0LjAwOGgtMzJ2LTI0aDMyVjQ2NC4wMDh6IE0zNzYuMDA3LDQ2NC4wMDhoLTMydi0yNGgzMlY0NjQuMDA4eiBNMzg0LjAwNyw0MTYuMDA4ICAgIGMwLDQuNDE4LTMuNTgyLDgtOCw4aC0yNzJjLTQuNDE4LDAtOC0zLjU4Mi04LTh2LThoMjg4VjQxNi4wMDh6IE0zODQuMDA3LDM5Mi4wMDhoLTI4OHYtNTYuMzEyICAgIGMtMC4wMDYtMi40MzEsMS4xMDMtNC43MywzLjAwOC02LjI0bDI5LjYtMjMuNjhjMC42NDktMC41NTYsMS4yNjktMS4xNDYsMS44NTYtMS43NjhoMjE4LjkyOGMwLjQzMiwwLjQsMC44LDAuOCwxLjI5NiwxLjIgICAgbDMwLjMwNCwyNC4yNGMxLjksMS41MTcsMy4wMDcsMy44MTYsMy4wMDgsNi4yNDhWMzkyLjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0xMzIuMDA3LDMyOC4wMDhjLTE1LjQ2NCwwLTI4LDEyLjUzNi0yOCwyOGMwLDE1LjQ2NCwxMi41MzYsMjgsMjgsMjhzMjgtMTIuNTM2LDI4LTI4ICAgIEMxNjAuMDA3LDM0MC41NDQsMTQ3LjQ3MSwzMjguMDA4LDEzMi4wMDcsMzI4LjAwOHogTTEzMi4wMDcsMzY4LjAwOGMtNi42MjcsMC0xMi01LjM3My0xMi0xMmMwLTYuNjI3LDUuMzczLTEyLDEyLTEyICAgIGM2LjYyNywwLDEyLDUuMzczLDEyLDEyQzE0NC4wMDcsMzYyLjYzNSwxMzguNjM0LDM2OC4wMDgsMTMyLjAwNywzNjguMDA4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTM0OC4wMDcsMzI4LjAwOGMtMTUuNDY0LDAtMjgsMTIuNTM2LTI4LDI4YzAsMTUuNDY0LDEyLjUzNiwyOCwyOCwyOGMxNS40NjQsMCwyOC0xMi41MzYsMjgtMjggICAgQzM3Ni4wMDcsMzQwLjU0NCwzNjMuNDcxLDMyOC4wMDgsMzQ4LjAwNywzMjguMDA4eiBNMzQ4LjAwNywzNjguMDA4Yy02LjYyNywwLTEyLTUuMzczLTEyLTEyYzAtNi42MjcsNS4zNzMtMTIsMTItMTIgICAgYzYuNjI3LDAsMTIsNS4zNzMsMTIsMTJDMzYwLjAwNywzNjIuNjM1LDM1NC42MzQsMzY4LjAwOCwzNDguMDA3LDM2OC4wMDh6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMjg4LjAwNywzMjguMDA4aC05NmMtOC44MzcsMC0xNiw3LjE2My0xNiwxNnYyNGMwLDguODM3LDcuMTYzLDE2LDE2LDE2aDk2YzguODM3LDAsMTYtNy4xNjMsMTYtMTZ2LTI0ICAgIEMzMDQuMDA3LDMzNS4xNzEsMjk2Ljg0NCwzMjguMDA4LDI4OC4wMDcsMzI4LjAwOHogTTI4OC4wMDcsMzY4LjAwOGgtOTZ2LTI0aDk2VjM2OC4wMDh6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNNDc1Ljg3MSwxMjlsLTIzMi0xMjhjLTIuNDA1LTEuMzI3LTUuMzIzLTEuMzI3LTcuNzI4LDBsLTIzMiwxMjhjLTMuODcsMi4xMzEtNS4yODEsNi45OTYtMy4xNSwxMC44NjYgICAgYzEuNDA3LDIuNTU2LDQuMDk1LDQuMTQ0LDcuMDEzLDQuMTQyaDh2MzM2aDQ4di0yOTZoMzUydjI5Nmg0OHYtMzM2aDhjNC40MTgsMC4wMDMsOC4wMDMtMy41NzYsOC4wMDYtNy45OTUgICAgQzQ4MC4wMTUsMTMzLjA5NSw0NzguNDI3LDEzMC40MDcsNDc1Ljg3MSwxMjl6IE0yNDAuMDA3LDE3LjE1MmwyMDAuOTM2LDExMC44NTZIMzkuMDcxTDI0MC4wMDcsMTcuMTUyeiBNNDQ4LjAwNyw0NjQuMDA4aC0xNiAgICB2LTI5NmgtMzg0djI5NmgtMTZ2LTMyMGg0MTZWNDY0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0xNjguMDA3LDc1LjA2NHY0NC45NDRoNjRWNDMuMDY0TDE2OC4wMDcsNzUuMDY0eiBNMjE2LjAwNywxMDQuMDA4aC0zMlY4NC45NTJsMzItMTZWMTA0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0yNDguMDA3LDQzLjA2NHY3Ni45NDRoNjRWNzUuMDY0TDI0OC4wMDcsNDMuMDY0eiBNMjk2LjAwNywxMDQuMDA4aC0zMlY2OC45NTJsMzIsMTZWMTA0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K",name:{en:"Garage",de:"Garage",ru:"Гараж",pt:"Garagem",nl:"Garage",fr:"Garage",it:"Box auto",es:"Garaje",pl:"Garaż"},members:[]},type:"enum"}},"enum.functions":{"enum.functions.light":{_id:"enum.functions.light",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgJy0vL1czQy8vRFREIFNWRyAxLjEvL0VOJyAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIj4KICA8Zz4KICAgIDxnPgogICAgICA8cGF0aCBkPSJtMjU2LDkyLjNjLTc0LjIsMC0xMjcuOCw1NS4zLTEzNi4zLDExNC43LTUuMywzOS42IDcuNSw3OC4yIDM0LjEsMTA3LjQgMjMuNCwyNSAzNi4yLDU4LjQgMzYuMiw5Mi44bC0uMSw1NC4yYzAsMjEuOSAxOC4xLDM5LjYgNDAuNSwzOS42aDUyLjJjMjIuNCwwIDQwLjUtMTcuNyA0MC41LTM5LjZsLjEtNTQuMmMwLTM1LjQgMTEuNy02Ny44IDM0LjEtOTAuNyAyNC41LTI1IDM3LjMtNTcuMyAzNy4zLTkwLjctMC4xLTc0LjEtNjMtMTMzLjUtMTM4LjYtMTMzLjV6bTQ2LjgsMzY5LjFjMCwxMC40LTguNSwxOC44LTE5LjIsMTguOGgtNTIuMmMtMTAuNywwLTE5LjItOC4zLTE5LjItMTguOHYtMjRoOTAuNXYyNHptMzkuNi0xNTkuNWMtMjYuNiwyNy4xLTQwLjUsNjQuNi00MC41LDEwNS4zdjkuNGgtOTAuNXYtOS40YzAtMzguNi0xNi03Ny4xLTQyLjYtMTA2LjMtMjMuNC0yNS0zMy01Ny4zLTI4LjgtOTAuNyA3LjUtNTAgNTQtOTcgMTE2LjEtOTcgNjUsMCAxMTcuMiw1MS4xIDExNy4yLDExMi42IDAsMjguMS0xMC43LDU1LjItMzAuOSw3Ni4xeiIvPgogICAgICA8cmVjdCB3aWR0aD0iMjEuMyIgeD0iMjQ1LjMiIHk9IjExIiBoZWlnaHQ9IjUwIi8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzg1LjEsMTA3LjQgNDAwLDEyMi4zIDQzNi41LDg3LjIgNDIxLjUsNzIuMyAgICIvPgogICAgICA8cmVjdCB3aWR0aD0iNTIuMiIgeD0iNDQ4LjgiIHk9IjIzNi4yIiBoZWlnaHQ9IjIwLjkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjUyLjIiIHg9IjExIiB5PSIyMzYuMiIgaGVpZ2h0PSIyMC45Ii8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iOTAuMSw3Mi4yIDc1LjEsODcuMSAxMTEuNiwxMjIuMiAxMjYuNSwxMDcuMyAgICIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==",name:{en:"Light",de:"Licht",ru:"Свет",pt:"Luz",nl:"Licht",fr:"Lumière",it:"Soggiorno",es:"Luz"},members:[]},type:"enum"},"enum.functions.blinds":{_id:"enum.functions.blinds",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJCTxwYXRoIGQ9Ik0wLDB2NTEyaDUxMlYwSDB6IE00ODIsNDgySDMwVjMwaDQ1MlY0ODJ6Ii8+DQo8L2c+DQo8Zz4NCgkJPHBhdGggZD0iTTYwLDYwdjM5MmgzOTJWNjBINjB6IE0yNDEsNDIySDkwVjI3MWgxNTFWNDIyeiBNMjQxLDI0MUg5MFY5MGgxNTFWMjQxeiBNNDIyLDQyMkgyNzFWMjcxaDE1MVY0MjJ6IE00MjIsMjQxSDI3MVY5MGgxNTENCgkJCVYyNDF6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==",name:{en:"Blinds",de:"Rollladen",ru:"Жалюзи",pt:"Cortinas",nl:"blinds",fr:"Stores",it:"blinds",es:"Persianas",pl:"Żaluzje"},members:[]},type:"enum"},"enum.functions.weather":{_id:"enum.functions.weather",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNjAgNjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYwIDYwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNNTQuOTQ5LDI4LjI1MWMwLjAxOC0wLjA2OSwwLjAzOS0wLjEzNSwwLjA0Mi0wLjIwN0M1NC45OTIsMjguMDI5LDU1LDI4LjAxNiw1NSwyOEM1NSwxNC41NSw0NC4zMjMsMy41NTMsMzEsMy4wMjVWMQ0KCWMwLTAuNTUzLTAuNDQ4LTEtMS0xcy0xLDAuNDQ3LTEsMXYyLjAyNUMxNS42NzcsMy41NTMsNSwxNC41NSw1LDI4YzAsMC4wMTYsMC4wMDgsMC4wMjksMC4wMDksMC4wNDUNCgljMC4wMDMsMC4wNzEsMC4wMjMsMC4xMzcsMC4wNDIsMC4yMDdjMC4wMTYsMC4wNTksMC4wMjUsMC4xMTgsMC4wNSwwLjE3MmMwLjAyNSwwLjA1MywwLjA2NCwwLjA5NywwLjA5OCwwLjE0NQ0KCWMwLjA0MiwwLjA1OSwwLjA4MSwwLjExOCwwLjEzNSwwLjE2N2MwLjAxMSwwLjAxLDAuMDE2LDAuMDI1LDAuMDI4LDAuMDM1YzAuMDM2LDAuMDMsMC4wOCwwLjA0LDAuMTE4LDAuMDY0DQoJYzAuMDU5LDAuMDM3LDAuMTE1LDAuMDc0LDAuMTgyLDAuMDk4YzAuMDcsMC4wMjYsMC4xNDEsMC4wMzQsMC4yMTMsMC4wNDNDNS45MTgsMjguOTgsNS45NTYsMjksNiwyOQ0KCWMwLjAxNSwwLDAuMDI3LTAuMDA4LDAuMDQyLTAuMDA4YzAuMDc2LTAuMDAzLDAuMTQ3LTAuMDI0LDAuMjItMC4wNDRjMC4wNTQtMC4wMTUsMC4xMDktMC4wMjMsMC4xNTgtMC4wNDcNCgljMC4wNTctMC4wMjYsMC4xMDQtMC4wNjgsMC4xNTYtMC4xMDVjMC4wNTUtMC4wNCwwLjExMS0wLjA3NywwLjE1Ny0wLjEyN2MwLjAxMS0wLjAxMiwwLjAyNi0wLjAxNywwLjAzNy0wLjAzDQoJQzguMTgsMjYuOTM3LDEwLjAzOCwyNiwxMiwyNnMzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMTksMC4wMjMsMC4wNDgsMC4wMzIsMC4wNjksMC4wNTNjMC4wMjQsMC4wMjQsMC4wMzYsMC4wNTYsMC4wNjMsMC4wNzgNCgljMC4wNCwwLjAzMywwLjA4OCwwLjA0NSwwLjEzLDAuMDcxYzAuMDUxLDAuMDMxLDAuMDk4LDAuMDYyLDAuMTUyLDAuMDgyYzAuMDgyLDAuMDMyLDAuMTY0LDAuMDQ1LDAuMjQ5LDAuMDU0DQoJQzE3LjkzLDI4Ljk4MSwxNy45NjQsMjksMTgsMjljMC4wMTYsMCwwLjAzMS0wLjAwNywwLjA0Ni0wLjAwOGMwLjA1MS0wLjAwMiwwLjA5OC0wLjAxNSwwLjE0OC0wLjAyNQ0KCWMwLjA2OS0wLjAxNCwwLjEzNS0wLjAzLDAuMi0wLjA1OWMwLjA1LTAuMDIyLDAuMDk1LTAuMDUsMC4xNDEtMC4wODFjMC4wMzMtMC4wMjEsMC4wNy0wLjAzMiwwLjEwMS0wLjA1OA0KCWMwLjAyNC0wLjAyLDAuMDM1LTAuMDQ4LDAuMDU3LTAuMDdjMC4wMjMtMC4wMjMsMC4wNTQtMC4wMzUsMC4wNzUtMC4wNjFDMjAuMTgsMjYuOTM3LDIyLjAzOCwyNiwyNCwyNmMxLjg2LDAsMy42MiwwLjg1LDUsMi4zODZWNTUNCgljMCwxLjY1NC0xLjM0NiwzLTMsM3MtMy0xLjM0Ni0zLTNjMC0wLjU1My0wLjQ0OC0xLTEtMXMtMSwwLjQ0Ny0xLDFjMCwyLjc1NywyLjI0Myw1LDUsNXM1LTIuMjQzLDUtNVYyOC4zODYNCglDMzIuMzgsMjYuODUsMzQuMTQsMjYsMzYsMjZjMS45NjIsMCwzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMTksMC4wMjMsMC4wNDgsMC4wMzIsMC4wNjksMC4wNTMNCgljMC4wMjQsMC4wMjQsMC4wMzYsMC4wNTYsMC4wNjMsMC4wNzhjMC4wNCwwLjAzMywwLjA4OCwwLjA0NCwwLjEzLDAuMDdjMC4wNTEsMC4wMzEsMC4wOTgsMC4wNjIsMC4xNTMsMC4wODMNCgljMC4wODEsMC4wMzEsMC4xNjMsMC4wNDUsMC4yNDksMC4wNTRDNDEuOTMsMjguOTgxLDQxLjk2NCwyOSw0MiwyOWMwLjAxNiwwLDAuMDMxLTAuMDA3LDAuMDQ2LTAuMDA4DQoJYzAuMDUxLTAuMDAyLDAuMDk5LTAuMDE1LDAuMTQ5LTAuMDI2YzAuMDY4LTAuMDE0LDAuMTM0LTAuMDMsMC4xOTktMC4wNThjMC4wNTEtMC4wMjIsMC4wOTYtMC4wNTEsMC4xNDItMC4wODENCgljMC4wMzMtMC4wMjEsMC4wNy0wLjAzMiwwLjEwMS0wLjA1N2MwLjAyNC0wLjAyLDAuMDM1LTAuMDQ4LDAuMDU2LTAuMDdjMC4wMjMtMC4wMjMsMC4wNTQtMC4wMzUsMC4wNzYtMC4wNjENCglDNDQuMTgsMjYuOTM3LDQ2LjAzOCwyNiw0OCwyNnMzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMSwwLjAxMiwwLjAyNCwwLjAxNSwwLjAzNSwwLjAyN2MwLjA3LDAuMDc3LDAuMTU0LDAuMTM1LDAuMjQ1LDAuMTg4DQoJYzAuMDMxLDAuMDE4LDAuMDU1LDAuMDQ1LDAuMDg4LDAuMDU5QzUzLjcyMSwyOC45NjcsNTMuODU2LDI5LDU0LDI5aDBoMGMwLjEyMywwLDAuMjQ1LTAuMDI3LDAuMzYxLTAuMDczDQoJYzAuMDQ1LTAuMDE4LDAuMDgyLTAuMDQ3LDAuMTI0LTAuMDcxYzAuMDUxLTAuMDI5LDAuMTA2LTAuMDQ4LDAuMTUyLTAuMDg3YzAuMDEyLTAuMDEsMC4wMTctMC4wMjQsMC4wMjgtMC4wMzUNCgljMC4wNTQtMC4wNDksMC4wOTItMC4xMDcsMC4xMzUtMC4xNjdjMC4wMzQtMC4wNDgsMC4wNzMtMC4wOTMsMC4wOTgtMC4xNDVDNTQuOTI0LDI4LjM2OSw1NC45MzQsMjguMzEsNTQuOTQ5LDI4LjI1MXogTTQ4LDI0DQoJYy0yLjIxOCwwLTQuMzEyLDAuODk1LTYsMi41MzRDNDAuMzEyLDI0Ljg5NSwzOC4yMTgsMjQsMzYsMjRzLTQuMzEyLDAuODk1LTYsMi41MzRDMjguMzEyLDI0Ljg5NSwyNi4yMTgsMjQsMjQsMjQNCglzLTQuMzEyLDAuODk1LTYsMi41MzRDMTYuMzEyLDI0Ljg5NSwxNC4yMTgsMjQsMTIsMjRjLTEuNzUsMC0zLjQxOCwwLjU2Ni00Ljg3NSwxLjYwNUM4LjMyNywxNC4wNDQsMTguMTI3LDUsMzAsNQ0KCXMyMS42NzMsOS4wNDQsMjIuODc1LDIwLjYwNUM1MS40MTgsMjQuNTY2LDQ5Ljc1LDI0LDQ4LDI0eiIvPg0KPC9zdmc+DQo=",name:{en:"Weather",de:"Wetter",ru:"Погода",pt:"Clima",nl:"Weer",fr:"Météo",it:"Tempo metereologico",es:"Clima",pl:"Pogoda"},members:[]},type:"enum"},"enum.functions.heating":{_id:"enum.functions.heating",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ0MC4zNzEsMTU5LjI5MWM4LjA1MSwwLDE1LjQwMy0zLjAzNSwyMC45ODMtOC4wMTZINTA0LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNWMwLTQuMTQyLTMuMzU4LTcuNS03LjUtNy41aC0zMy43NjMNCgkJYzAuNzY0LTIuNzE2LDEuMTgyLTUuNTc2LDEuMTgyLTguNTMzYzAtMi45NTctMC40MTgtNS44MTYtMS4xODItOC41MzJINTA0LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNQ0KCQljMC00LjE0Mi0zLjM1OC03LjUtNy41LTcuNWgtNDMuMTQ2Yy01LjU4LTQuOTgxLTEyLjkzMi04LjAxNi0yMC45ODMtOC4wMTZjLTYuMTMzLDAtMTEuODU5LDEuNzY1LTE2LjcwNyw0LjgwNQ0KCQljLTEuMzQyLTExLjcxMS0xMS4zMDktMjAuODM3LTIzLjM3My0yMC44MzdoLTI0LjA0OWMtMTAuMzU0LDAtMTkuMTYsNi43MjQtMjIuMywxNi4wMzJoLTE5LjUzDQoJCWMtMy4xMzktOS4zMDgtMTEuOTQ2LTE2LjAzMi0yMi4zLTE2LjAzMmgtMjQuMDQ4Yy0xMC4zNTQsMC0xOS4xNiw2LjcyNC0yMi4zLDE2LjAzMmgtMTkuNTMNCgkJYy0zLjEzOS05LjMwOC0xMS45NDYtMTYuMDMyLTIyLjMtMTYuMDMyaC0yNC4wNDhjLTEwLjM1NCwwLTE5LjE2LDYuNzI0LTIyLjMsMTYuMDMyaC0xOS41Mw0KCQljLTMuMTM5LTkuMzA4LTExLjk0Ni0xNi4wMzItMjIuMy0xNi4wMzJoLTI0LjA0OWMtMTAuMzU0LDAtMTkuMTYsNi43MjQtMjIuMywxNi4wMzJINjkuODgNCgkJYy0zLjEzOS05LjMwOC0xMS45NDYtMTYuMDMyLTIyLjMtMTYuMDMySDIzLjUzMkMxMC41NTcsODAuMTYxLDAsOTAuNzE4LDAsMTAzLjY5M3YzMDQuNjEzYzAsMTIuOTc2LDEwLjU1NywyMy41MzIsMjMuNTMyLDIzLjUzMg0KCQlINDcuNThjMTAuMzU0LDAsMTkuMTYtNi43MjQsMjIuMy0xNi4wMzJoMTkuNTNjMy4xMzksOS4zMDgsMTEuOTQ2LDE2LjAzMiwyMi4zLDE2LjAzMmgyNC4wNDljMTAuMzU0LDAsMTkuMTYtNi43MjQsMjIuMy0xNi4wMzINCgkJaDE5LjUzYzMuMTM5LDkuMzA4LDExLjk0NiwxNi4wMzIsMjIuMywxNi4wMzJoMjQuMDQ4YzEwLjM1NCwwLDE5LjE2LTYuNzI0LDIyLjMtMTYuMDMyaDE5LjUzDQoJCWMzLjEzOSw5LjMwOCwxMS45NDYsMTYuMDMyLDIyLjMsMTYuMDMyaDI0LjA0OGMxMC4zNTQsMCwxOS4xNi02LjcyNCwyMi4zLTE2LjAzMmgxOS41M2MzLjEzOSw5LjMwOCwxMS45NDYsMTYuMDMyLDIyLjMsMTYuMDMyDQoJCWgyNC4wNDljMTIuOTc2LDAsMjMuNTMyLTEwLjU1NywyMy41MzItMjMuNTMydi0wLjUxNkg1MDQuNWM0LjE0MiwwLDcuNS0zLjM1OCw3LjUtNy41YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjVoLTgwLjY3N3YtMTcuMDY1DQoJCUg1MDQuNWM0LjE0MiwwLDcuNS0zLjM1OCw3LjUtNy41YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjVoLTgwLjY3N1YxNTQuNTg3QzQyOC42MzcsMTU3LjU2Niw0MzQuMzA2LDE1OS4yOTEsNDQwLjM3MSwxNTkuMjkxeg0KCQkgTTQ0MC4zNzEsMTExLjE5M2M5LjEyNSwwLDE2LjU0OCw3LjQyMywxNi41NDgsMTYuNTQ4cy03LjQyMywxNi41NDktMTYuNTQ4LDE2LjU0OXMtMTYuNTQ4LTcuNDI0LTE2LjU0OC0xNi41NDkNCgkJUzQzMS4yNDYsMTExLjE5Myw0NDAuMzcxLDExMS4xOTN6IE02My42MTMsMzM2LjY3NmMtNC4xNDIsMC03LjUsMy4zNTgtNy41LDcuNXY2NC4xM2MwLDQuNzA1LTMuODI4LDguNTMzLTguNTMyLDguNTMzSDIzLjUzMg0KCQljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTAzLjY5M2MwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMySDQ3LjU4YzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWMzEyLjExDQoJCWMwLDQuMTQyLDMuMzU4LDcuNSw3LjUsNy41YzQuMTQyLDAsNy41LTMuMzU4LDcuNS03LjVWMTU5LjI5aDE3LjA2NHYxOTMuNDE5SDcxLjExM3YtOC41MzMNCgkJQzcxLjExMywzNDAuMDM0LDY3Ljc1NSwzMzYuNjc2LDYzLjYxMywzMzYuNjc2eiBNODguMTc3LDQwMC44MDZINzEuMTEzdi0zMy4wOTdoMTcuMDY0VjQwMC44MDZ6IE04OC4xNzcsMTQ0LjI5SDcxLjExM3YtMzMuMDk3DQoJCWgxNy4wNjRWMTQ0LjI5eiBNMTQ0LjI5LDQwOC4zMDZjMC4wMDEsNC43MDUtMy44MjcsOC41MzMtOC41MzIsOC41MzNoLTI0LjA0OWMtNC43MDUsMC04LjUzMi0zLjgyOC04LjUzMi04LjUzMlYxMDMuNjkzDQoJCWMwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMyaDI0LjA0OWM0LjcwNSwwLDguNTMyLDMuODI4LDguNTMyLDguNTMyVjQwOC4zMDZ6IE0xNzYuMzU1LDQwMC44MDZoLTE3LjA2NHYtMzMuMDk3aDE3LjA2NA0KCQlWNDAwLjgwNnogTTE3Ni4zNTUsMzUyLjcxaC0xNy4wNjRWMTU5LjI5MWgxNy4wNjRWMzUyLjcxeiBNMTc2LjM1NSwxNDQuMjkxaC0xNy4wNjR2LTMzLjA5N2gxNy4wNjRWMTQ0LjI5MXogTTIzMi40NjgsNDA4LjMwNg0KCQljMCw0LjcwNS0zLjgyOCw4LjUzMy04LjUzMiw4LjUzM2gtMjQuMDQ4Yy00LjcwNSwwLTguNTMyLTMuODI4LTguNTMyLTguNTMyVjEwMy42OTNjMC00LjcwNSwzLjgyOC04LjUzMiw4LjUzMi04LjUzMmgyNC4wNDgNCgkJYzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWNDA4LjMwNnogTTI2NC41MzIsNDAwLjgwNmgtMTcuMDY0di0zMy4wOTdoMTcuMDY0VjQwMC44MDZ6IE0yNjQuNTMyLDM1Mi43MWgtMTcuMDY0VjE1OS4yOTENCgkJaDE3LjA2NFYzNTIuNzF6IE0yNjQuNTMyLDE0NC4yOTFoLTE3LjA2NHYtMzMuMDk3aDE3LjA2NFYxNDQuMjkxeiBNMzIwLjY0NSw0MDguMzA2YzAsNC43MDUtMy44MjgsOC41MzMtOC41MzIsOC41MzNoLTI0LjA0OA0KCQljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTAzLjY5M2MwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMyaDI0LjA0OGM0LjcwNSwwLDguNTMyLDMuODI4LDguNTMyLDguNTMyVjQwOC4zMDZ6DQoJCSBNMzM1LjY0NSwxMTEuMTkzaDE3LjA2NHYzMy4wOTdoLTE3LjA2NFYxMTEuMTkzeiBNMzUyLjcwOSw0MDAuODA3aC0xNy4wNjRWMzY3LjcxaDE3LjA2NFY0MDAuODA3eiBNNDA4LjgyMyw0MDguMzA3DQoJCWMwLDQuNzA1LTMuODI4LDguNTMyLTguNTMyLDguNTMyaC0yNC4wNDljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTk5Ljg5YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjUNCgkJYy00LjE0MiwwLTcuNSwzLjM1OC03LjUsNy41djE1Mi44MmgtMTcuMDY0VjE1OS4yOTFoMTcuMDY0djguNTMzYzAsNC4xNDIsMy4zNTgsNy41LDcuNSw3LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNXYtNjQuMTMNCgkJYzAtNC43MDUsMy44MjgtOC41MzIsOC41MzItOC41MzJoMjQuMDQ5YzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWNDA4LjMwN3oiLz4NCjwvZz4NCjwvc3ZnPg0K",name:{en:"Heating",de:"Heizung",ru:"Отопление",pt:"Aquecimento",nl:"Verwarming",fr:"Chauffage",it:"Riscaldamento",es:"Calefacción",pl:"Ogrzewanie"},members:[]},type:"enum"},"enum.functions.backlight":{_id:"enum.functions.backlight",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTExLjk5MSA1MTEuOTkxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTEuOTkxIDUxMS45OTE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik05MS40OSwzMzYuNTcybC0yMS4zMzMsNDIuNjY3Yy0yLjYyNCw1LjI2OS0wLjQ5MSwxMS42NjksNC43NzksMTQuMzE1YzEuNTM2LDAuNzQ3LDMuMTU3LDEuMTA5LDQuNzU3LDEuMTA5DQoJCWMzLjkwNCwwLDcuNjU5LTIuMTc2LDkuNTM2LTUuODg4bDIxLjMzMy00Mi42NjdjMi42NDUtNS4yNjksMC41MTItMTEuNjY5LTQuNzU3LTE0LjMxNQ0KCQlDMTAwLjU1NywzMjkuMTY5LDk0LjE1NywzMzEuMzI0LDkxLjQ5LDMzNi41NzJ6Ii8+DQoJPHBhdGggZD0iTTUwNy41NTQsMTgzLjM1NmMtMi43NzMtMi4wMjctNi4zMzYtMi41MzktOS42LTEuNDkzbC00OS40MDgsMTYuNDY5Yy0xMy4wOTksNC4zNzMtMjEuODg4LDE2LjU3Ni0yMS44ODgsMzAuMzc5djM2Ljg4NQ0KCQljLTI0LjMyLTQuOTQ5LTQyLjY2Ny0yNi40OTYtNDIuNjY3LTUyLjI0NXYtODUuMzMzYzAtMzEuMjMyLTEyLjEzOS02MC43MTUtMzQuMzA0LTgzLjExNQ0KCQljLTIyLjMxNS0yMi4xMDEtNTEuNzk3LTM0LjI0LTgzLjAyOS0zNC4yNGMtNjQuNjgzLDAtMTE3LjMzMyw1Mi42NTEtMTE3LjMzMywxMTcuMzMzdjUzLjMzM2gtMzJjLTE3LjY0MywwLTMyLDE0LjM1Ny0zMiwzMg0KCQl2NDAuMTQ5TDEuMTIyLDQyMS45MDVjLTEuNjQzLDMuMzA3LTEuNDcyLDcuMjMyLDAuNDQ4LDEwLjM2OGMxLjk2MywzLjEzNiw1LjM5Nyw1LjA1Niw5LjA4OCw1LjA1Nmg3NS43NTUNCgkJYzUuMjI3LDM2LjA5NiwzNi4wNzUsNjQsNzMuNTc5LDY0czY4LjM1Mi0yNy45MDQsNzMuNTc5LTY0aDc1Ljc1NWMwLjE0OSwwLDAuMzIsMC4wMjEsMC40MjcsMA0KCQljNS44ODgsMCwxMC42NjctNC43NzksMTAuNjY3LTEwLjY2N2MwLTIuNzUyLTEuMDI0LTUuMjQ4LTIuNzMxLTcuMTI1bC04My4wMjktMTY2LjA1OXYtNDAuMTQ5YzAtMTcuNjQzLTE0LjM1Ny0zMi0zMi0zMmgtMzINCgkJdi01My4zMzNjMC01Mi45MjgsNDMuMDcyLTk2LDk2LTk2YzI1LjU1NywwLDQ5LjcyOCw5Ljk2Myw2Ny45NDcsMjcuOTg5YzE4LjA5MSwxOC4yODMsMjguMDUzLDQyLjQ1MywyOC4wNTMsNjguMDExdjg1LjMzMw0KCQljMCwzNy41MDQsMjcuOTA0LDY4LjM1Miw2NCw3My41Nzl2MzkuMDRjMCwxMy43ODEsOC43ODksMjYuMDA1LDIxLjg2NywzMC4zNTdsNDkuNDA4LDE2LjQ2OQ0KCQljMS4xMzEsMC4zNjMsMi4yNjEsMC41NTUsMy4zOTIsMC41NTVjMi4yMTksMCw0LjM5NS0wLjY4Myw2LjIyOS0yLjAyN2MyLjc5NS0xLjk4NCw0LjQzNy01LjIwNSw0LjQzNy04LjY0VjE5MS45OTYNCgkJQzUxMS45OTEsMTg4LjU2MSw1MTAuMzQ5LDE4NS4zNCw1MDcuNTU0LDE4My4zNTZ6IE0xNTkuOTkxLDQ3OS45OTZjLTI1Ljc0OSwwLTQ3LjMxNy0xOC4zNDctNTIuMjY3LTQyLjY2N2gxMDQuNTMzDQoJCUMyMDcuMzA5LDQ2MS42NDksMTg1Ljc0MSw0NzkuOTk2LDE1OS45OTEsNDc5Ljk5NnogTTI5Mi4wODcsNDE1Ljk5NmgtNjguMDk2aC0xMjhIMjcuOTE3bDc0LjY2Ny0xNDkuMzMzaDExNC44MzcNCgkJTDI5Mi4wODcsNDE1Ljk5NnogTTIwMi42NTgsMjAyLjY2MmM1Ljg2NywwLDEwLjY2Nyw0LjgsMTAuNjY3LDEwLjY2N3YzMkgxMDYuNjU4di0zMmMwLTUuODY3LDQuOC0xMC42NjcsMTAuNjY3LTEwLjY2N0gyMDIuNjU4eg0KCQkgTTQ5MC42NTgsMzQ3Ljg3OGwtMzUuMzcxLTExLjgxOWMtNC4zNzMtMS40MjktNy4yOTYtNS41MDQtNy4yOTYtMTAuMTEydi05Ny4yNTljMC00LjYwOCwyLjkyMy04LjY2MSw3LjI5Ni0xMC4xMTINCgkJbDM1LjM3MS0xMS43OTdWMzQ3Ljg3OHoiLz4NCjwvZz4NCjwvc3ZnPg0K",name:{en:"Backlight",de:"Hintergrundbeleuchtung",ru:"Подсветка",pt:"Luz de fundo",nl:"Backlight",fr:"Rétro-éclairage",it:"Controluce",es:"Iluminar desde el fondo",pl:"Podświetlenie"},members:[]},type:"enum"},"enum.functions.household":{_id:"enum.functions.household",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgJy0vL1czQy8vRFREIFNWRyAxLjEvL0VOJyAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIj4KICA8Zz4KICAgIDxnPgogICAgICA8cGF0aCBkPSJtMjU2LDkyLjNjLTc0LjIsMC0xMjcuOCw1NS4zLTEzNi4zLDExNC43LTUuMywzOS42IDcuNSw3OC4yIDM0LjEsMTA3LjQgMjMuNCwyNSAzNi4yLDU4LjQgMzYuMiw5Mi44bC0uMSw1NC4yYzAsMjEuOSAxOC4xLDM5LjYgNDAuNSwzOS42aDUyLjJjMjIuNCwwIDQwLjUtMTcuNyA0MC41LTM5LjZsLjEtNTQuMmMwLTM1LjQgMTEuNy02Ny44IDM0LjEtOTAuNyAyNC41LTI1IDM3LjMtNTcuMyAzNy4zLTkwLjctMC4xLTc0LjEtNjMtMTMzLjUtMTM4LjYtMTMzLjV6bTQ2LjgsMzY5LjFjMCwxMC40LTguNSwxOC44LTE5LjIsMTguOGgtNTIuMmMtMTAuNywwLTE5LjItOC4zLTE5LjItMTguOHYtMjRoOTAuNXYyNHptMzkuNi0xNTkuNWMtMjYuNiwyNy4xLTQwLjUsNjQuNi00MC41LDEwNS4zdjkuNGgtOTAuNXYtOS40YzAtMzguNi0xNi03Ny4xLTQyLjYtMTA2LjMtMjMuNC0yNS0zMy01Ny4zLTI4LjgtOTAuNyA3LjUtNTAgNTQtOTcgMTE2LjEtOTcgNjUsMCAxMTcuMiw1MS4xIDExNy4yLDExMi42IDAsMjguMS0xMC43LDU1LjItMzAuOSw3Ni4xeiIvPgogICAgICA8cmVjdCB3aWR0aD0iMjEuMyIgeD0iMjQ1LjMiIHk9IjExIiBoZWlnaHQ9IjUwIi8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzg1LjEsMTA3LjQgNDAwLDEyMi4zIDQzNi41LDg3LjIgNDIxLjUsNzIuMyAgICIvPgogICAgICA8cmVjdCB3aWR0aD0iNTIuMiIgeD0iNDQ4LjgiIHk9IjIzNi4yIiBoZWlnaHQ9IjIwLjkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjUyLjIiIHg9IjExIiB5PSIyMzYuMiIgaGVpZ2h0PSIyMC45Ii8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iOTAuMSw3Mi4yIDc1LjEsODcuMSAxMTEuNiwxMjIuMiAxMjYuNSwxMDcuMyAgICIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==",name:{en:"Household",de:"Haushalt",ru:"Домашнее хозяйство",pt:"Casa",nl:"Huishouden",fr:"Ménage",it:"Domestico",es:"Casa",pl:"Gospodarstwo domowe"},members:[]},type:"enum"},"enum.functions.audio":{_id:"enum.functions.audio",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDc3LjIxNiA0NzcuMjE2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NzcuMjE2IDQ3Ny4yMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik00NTMuODU4LDEwNS4xMTZ2LTkxLjZjMC00LjMtMi4xLTguNC01LjUtMTAuOWMtMy41LTIuNS04LTMuMy0xMi4xLTJsLTI3Mi45LDg2LjdjLTUuNiwxLjgtOS40LDctOS40LDEyLjl2OTEuN3YwLjF2MTc1LjMNCgkJYy0xNC4zLTkuOS0zMi42LTE1LjMtNTEuOC0xNS4zYy0yMC4zLDAtMzkuNiw2LjEtNTQuMywxNy4xYy0xNS44LDExLjktMjQuNSwyOC0yNC41LDQ1LjVzOC43LDMzLjYsMjQuNSw0NS41DQoJCWMxNC43LDExLDMzLjksMTcuMSw1NC4zLDE3LjFzMzkuNi02LjEsNTQuMy0xNy4xYzE1LjgtMTEuOSwyNC41LTI4LDI0LjUtNDUuNXYtMjEyLjhsMjQ1LjktNzguMnYxNTYuNg0KCQljLTE0LjMtOS45LTMyLjYtMTUuMy01MS44LTE1LjNjLTIwLjMsMC0zOS42LDYuMS01NC4zLDE3LjFjLTE1LjgsMTEuOS0yNC41LDI4LTI0LjUsNDUuNXM4LjcsMzMuNiwyNC41LDQ1LjUNCgkJYzE0LjcsMTEsMzMuOSwxNy4xLDU0LjMsMTcuMXMzOS42LTYuMSw1NC4zLTE3LjFjMTUuOC0xMS45LDI0LjUtMjgsMjQuNS00NS41di0yMjIuMw0KCQlDNDUzLjg1OCwxMDUuMTE2LDQ1My44NTgsMTA1LjExNiw0NTMuODU4LDEwNS4xMTZ6IE0xMDIuMTU4LDQ1MC4yMTZjLTI4LjEsMC01MS44LTE2LjMtNTEuOC0zNS42YzAtMTkuMywyMy43LTM1LjYsNTEuOC0zNS42DQoJCXM1MS44LDE2LjMsNTEuOCwzNS42QzE1My45NTgsNDM0LjAxNiwxMzAuMjU4LDQ1MC4yMTYsMTAyLjE1OCw0NTAuMjE2eiBNMTgwLjk1OCwxNzMuNDE2di02My40bDI0NS45LTc4LjF2NjMuNEwxODAuOTU4LDE3My40MTZ6DQoJCSBNMzc1LjE1OCwzNjMuMTE2Yy0yOC4xLDAtNTEuOC0xNi4zLTUxLjgtMzUuNmMwLTE5LjMsMjMuNy0zNS42LDUxLjgtMzUuNnM1MS44LDE2LjMsNTEuOCwzNS42DQoJCUM0MjYuODU4LDM0Ni44MTYsNDAzLjE1OCwzNjMuMTE2LDM3NS4xNTgsMzYzLjExNnoiLz4NCjwvZz4NCjwvc3ZnPg0K",name:{en:"Audio/Music",de:"Audio/Musik",ru:"Аудио/Музыка",pt:"Áudio/Música",nl:"Audio/Muziek",fr:"Audio/Musique",it:"Audio/Musica",es:"Audio/Música",pl:"Audio/Muzyka"},members:[]},type:"enum"},"enum.functions.security":{_id:"enum.functions.security",common:{icon:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTI1Niw0MC4wMWMtNS41MzgsMC05Ljk5LDQuNDYtOS45OSw5Ljk5YzAsNS4xNDcsMy44NzIsOS40Myw4Ljk5LDkuOTM4YzUuOTI1LDAuNTg4LDEwLjk5LTQuMDI3LDEwLjk5LTkuOTM4DQoJCUMyNjUuOTksNDQuNDYyLDI2MS41Myw0MC4wMSwyNTYsNDAuMDF6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNNDU2LDYwYy0yNy41NywwLTUwLTIyLjQzLTUwLTUwYzAtNS41MjItNC40NzgtMTAtMTAtMTBIMTE2Yy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwYzAsMjcuNTctMjIuNDMsNTAtNTAsNTANCgkJYy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwdjE2My4xOWMwLDEyNy4xNzcsODIuODk1LDI0MS4xMzUsMjA3LjEyOCwyNzguMzg5YzAuOTM3LDAuMjgsMS45MDQsMC40MjEsMi44NzIsMC40MjENCgkJYzAuOTY4LDAsMS45MzctMC4xNDEsMi44NzMtMC40MjJDMzgwLjQxNSw0NzUuMTE5LDQ2NiwzNjMuMTQ5LDQ2NiwyMzMuMTlWNzBDNDY2LDY0LjQ3OCw0NjEuNTIyLDYwLDQ1Niw2MHogTTQ0NiwyMzMuMTkNCgkJYzAsMTE5LjQ0OC03Ni4yMjEsMjIyLjg5Mi0xOTAsMjU4LjM1M0MxNDMuMTI4LDQ1Ni4zNjUsNjYsMzUxLjk4NCw2NiwyMzMuMTlWNzkuMjg4Qzk2LjYxMSw3NC44OSwxMjAuODksNTAuNjExLDEyNS4yODgsMjANCgkJaDI2MS40MjRDMzkxLjExLDUwLjYxMSw0MTUuMzg5LDc0Ljg5LDQ0Niw3OS4yODhWMjMzLjE5eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQyMC4wMTIsOTIuNDljLTIwLjg1NC05LjEzMy0zNy4zNjktMjUuNjQ4LTQ2LjUwMi00Ni41MDJDMzcxLjkxNiw0Mi4zNSwzNjguMzIyLDQwLDM2NC4zNSw0MGgtNjguMzcNCgkJYy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwczQuNDc4LDEwLDEwLDEwaDYyLjA0N2MxMC41NjUsMjAuNjgxLDI3LjI5MiwzNy40MDcsNDcuOTczLDQ3Ljk3M1YyMzMuMTkNCgkJYzAsOTcuODYzLTU4Ljc0OSwxODIuMzAzLTE1MCwyMTYuMTA0Yy05MS4yNTEtMzMuODAyLTE1MC0xMTguMjQxLTE1MC0yMTYuMTA0VjEwNy45NzNDMTI2LjY4MSw5Ny40MDcsMTQzLjQwNyw4MC42ODEsMTUzLjk3Myw2MA0KCQloNjIuMDQ3YzUuNTIyLDAsMTAtNC40NzgsMTAtMTBzLTQuNDc4LTEwLTEwLTEwaC02OC4zN2MtMy45NzIsMC03LjU2NiwyLjM1MS05LjE2LDUuOTg4DQoJCWMtOS4xMzMsMjAuODU0LTI1LjY0OCwzNy4zNjktNDYuNTAyLDQ2LjUwMkM4OC4zNTEsOTQuMDg0LDg2LDk3LjY3OSw4NiwxMDEuNjV2MTMxLjU0YzAsMTA3LjIxMyw2Ni4zMTEsMjAwLjY1MywxNjYuNjY0LDIzNi4xNjYNCgkJYzEuMDc5LDAuMzgyLDIuMjA3LDAuNTczLDMuMzM2LDAuNTczYzEuMTI5LDAsMi4yNTctMC4xOTEsMy4zMzYtMC41NzNDMzU5LjYwNSw0MzMuODczLDQyNiwzNDAuNDksNDI2LDIzMy4xOVYxMDEuNjUNCgkJQzQyNiw5Ny42NzgsNDIzLjY0OSw5NC4wODQsNDIwLjAxMiw5Mi40OXoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik0yNTYsMTQ2Yy00OS42MjYsMC05MCw0MC4zNzQtOTAsOTBjMCw0OS42MjYsNDAuMzc0LDkwLDkwLDkwYzQ5LjYyNiwwLDkwLTQwLjM3NCw5MC05MEMzNDYsMTg2LjM3NCwzMDUuNjI2LDE0NiwyNTYsMTQ2eg0KCQkgTTI1NiwzMDZjLTM4LjU5OCwwLTcwLTMxLjQwMi03MC03MGMwLTM4LjU5OCwzMS40MDItNzAsNzAtNzBjMzguNTk4LDAsNzAsMzEuNDAyLDcwLDcwQzMyNiwyNzQuNTk4LDI5NC41OTgsMzA2LDI1NiwzMDZ6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNMzAzLjA3MSwyMDguOTI4Yy0zLjkwNi0zLjkwNC0xMC4yMzYtMy45MDQtMTQuMTQzLDBMMjQ2LDI1MS44NTdsLTEyLjkyOS0xMi45MjhjLTMuOTA2LTMuOTA0LTEwLjIzNi0zLjkwNC0xNC4xNDMsMA0KCQljLTMuOTA1LDMuOTA1LTMuOTA1LDEwLjIzNywwLDE0LjE0M2wyMCwyMEMyNDAuODgyLDI3NS4wMjMsMjQzLjQ0LDI3NiwyNDYsMjc2czUuMTE4LTAuOTc3LDcuMDcxLTIuOTI5bDUwLTUwDQoJCUMzMDYuOTc2LDIxOS4xNjYsMzA2Ljk3NiwyMTIuODM0LDMwMy4wNzEsMjA4LjkyOHoiLz4NCjwvZz4NCg0KPC9zdmc+DQo=",name:{en:"Security",de:"Sicherheit",ru:"Безопасность",pt:"Segurança",nl:"Veiligheid",fr:"Sécurité",it:"Sicurezza",es:"Seguridad",pl:"Bezpieczeństwo"},members:[]},type:"enum"}}},o=function(){if(g.$grid&&g.$grid.selectId)return o=g.$grid.selectId.bind(g.$grid),g.$grid.selectId.apply(g.$grid,arguments)};function h(e,t,n,i){if(d.length){var a=d.shift();"delObject"===a.name?g.main.socket.emit(a.name,a.id,function(){setTimeout(function(){h(void 0,void 0,void 0,i)},0)}):g.main.socket.emit(a.name,a.id,a.obj,function(){setTimeout(function(){h(void 0,void 0,void 0,i)},0)})}else!function a(s,o,r,c){if(s!==o&&g.main.objects[o])b(_("Name yet exists!"),!0),g.init(!0),c&&c();else if(s===o)!r||void 0===r.name&&void 0===r.icon&&void 0===r.color||d.push({name:"extendObject",id:s,obj:{common:r}}),c&&c();else if(g.main.objects[s]&&g.main.objects[s].common&&g.main.objects[s].common.nondeletable)b(_('Change of enum\'s id "%s" is not allowed!',s),!0),g.init(!0),c&&c();else{for(var e=s.length+1,l=[],t=0;t<g.list.length;t++)g.list[t].substring(0,e)===s+"."&&l.push(g.list[t]);g.main.socket.emit("getObject",s,function(e,i){setTimeout(function(){if(i){i._id=o,i._rev&&delete i._rev,r&&void 0!==r.name&&(i.common.name=r.name),r&&void 0!==r.icon&&(i.common.icon=r.icon),r&&void 0!==r.color&&(i.common.color=r.color),d.push({name:"delObject",id:s}),d.push({name:"setObject",id:o,obj:i});for(var e=0,t=0;t<l.length;t++){var n=l[t].replace(s+".",o+".");e++,a(l[t],n,null,function(){!--e&&c&&c()})}!l.length&&c&&c()}},0)})}}(e,t,n,function(){d.length?h(void 0,void 0,void 0,i):i&&i()})}function f(e){var t,n="";if(e){var i=e.replace(/[.#\\\/&?]+/g,"-");if(s[e])for(t in s[e])s[e].hasOwnProperty(t)&&-1===g.list.indexOf(t)&&(n+='<li class="new-group-item" data-id="'+t+'" data-enum="'+e+'"><a>'+g.main.getIconFromObj(s[e][t])+p(s[e][t])+"</a></li>");n&&(n+='<li class="divider"></li>'),n+='<li class="new-group-item" data-enum="'+e+'"><a><i class="material-icons">control_point</i><span>'+_("custom group")+"</span></a></li>",g.$gridEnum.find("#btn-new-group-"+i).html(n),g.$gridEnum.find('.btn-new-group-btn[data-target="btn-new-group-'+i+'"]').dropdown({constrainWidth:!1}),g.$gridEnum.find("#btn-new-group-"+i).find(".new-group-item").off("click").on("click",function(){var e=$(this).data("id"),t=$(this).data("enum");if(e){var n=t.replace(/[.#\\\/&?]+/g,"-");g.main.saveConfig("enums-active","enum-"+n),g.main.socket.emit("setObject",e,s[t][e],function(e){e&&g.main.showError(e)})}else v(null,t)})}else{for(t in a)a.hasOwnProperty(t)&&-1===g.list.indexOf(t)&&(n+='<li class="new-enum-item" data-id="'+t+'"><a>'+g.main.getIconFromObj(a[t])+p(a[t])+"</a></li>");n&&(n+='<li class="divider"></li>'),n+='<li class="new-enum-item"><a><i class="material-icons">control_point</i><span>'+_("custom enum")+"</span></a></li>",g.$gridEnum.find("#btn-new-enum").html(n),g.$gridEnum.find(".btn-new-enum-btn").dropdown({constrainWidth:!1}),g.$gridEnum.find(".new-enum-item").off("click").on("click",function(){var e=$(this).data("id");if(e){var t=e.replace(/[.#\\\/&?]+/g,"-");g.main.saveConfig("enums-active","enum-"+t),g.main.socket.emit("setObject",e,a[e],function(e){e&&g.main.showError(e)})}else v(null)})}}function p(e,t){var n;(n=t?e[t]:e)&&n.common&&n.common.name?n=translateName(n.common.name):n=(n=t.split(".").pop())[0].toUpperCase()+n.substring(1).toLowerCase();return n}function r(e,t,n){var i,a,s,o=g.main.objects[e],r=e.replace(/[.#\\\/&?]+/g,"-"),c='<div class="row enum-buttons" data-id="'+e+'"> <div class="col s12 "> <a class="btn-floating waves-effect waves-light blue btn-small dropdown-trigger btn-new-group-btn" title="'+_("New enum")+'" data-target="btn-new-group-'+r+'"><i class="material-icons">library_add</i></a> <ul id="btn-new-group-'+r+'" class="dropdown-content" data-id="'+e+'"></ul> <a class="btn-floating waves-effect waves-light btn-small btn-edit-category" title="'+_("Edit category")+'" data-id="'+e+'"> <i class="material-icons">edit</i> </a> <a class="btn-floating waves-effect btn-small waves-light red lighten-2 btn-del-category '+(o&&o.common&&(o.common.dontDelete||o.common["object-non-deletable"])?"disabled":"")+'" title="'+_("Delete category")+'" data-id="'+e+'"> <i class="material-icons">delete</i> </a> <div class="input-field"><input type="text" class="filter-input autocomplete" placeholder="'+_("Filter")+'"><label></label>\n <a class="filter-clear btn-floating btn-very-small red lighten-3" title="'+_("clear")+'"><i class="material-icons">clear</i></a></div>\n </div></div>';c+='<div class="row enum-body"><div class="col s12 enum-collection" data-id="'+e+'"><ul class="collection">';for(var l=0;l<g.list.length;l++)if(g.list[l].substring(0,e.length+1)===e+"."){var d=g.main.objects[g.list[l]],u="";if(d&&d.common&&d.common.color&&(u="background: "+d.common.color+"; ",g.main.invertColor(d.common.color)&&(!0,u+="color: white;")),c+='<li class="collection-item avatar" data-id="'+g.list[l]+'" style="'+u+'">'+g.main.getIcon(g.list[l],null,null,"icon")+'<span class="title">'+p(g.main.objects,g.list[l])+"</span><p>"+g.list[l]+"</p><br>",d&&d.common&&d.common.members&&d.common.members.length)for(var m=0;m<d.common.members.length;m++)c+=(i=d.common.members[m],a=g.list[l],s=void 0,s="",s+='<div class="chip" title="'+i+'">'+g.main.getIcon(i)+'<span><span class="chip-name">'+p(g.main.objects,i)+'</span></span><i class="close material-icons" data-enum="'+a+'" data-id="'+i+'">close</i></div>');c+='<a class="edit-content" data-id="'+g.list[l]+'"><i class="material-icons">edit</i></a>',c+='<a class="delete-content '+(d&&d.common&&(d.common.dontDelete||d.common["object-non-deletable"])?"disabled":"")+'" data-id="'+g.list[l]+'"><i class="material-icons">delete</i></a>',c+="</li>"}c+="</ul></div></div>",t.html(c),f(e),n&&t.find(".enum-collection").scrollTop(n),function(n){for(var e=g.$gridList.find('.enum-buttons[data-id="'+n+'"] .filter-input'),t={},i=0;i<g.list.length;i++){var a=g.list[i];if(a.substring(0,n.length+1)===n+"."){var s=p(g.main.objects,a),o=null;g.main.objects[a]&&g.main.objects[a].common&&g.main.objects[a].common.icon&&(o=g.main.objects[a].common.icon),t[s]=o}}var r=g.$gridList.find('.enum-buttons[data-id="'+n+'"] .filter-clear');e.mautocomplete({data:t,minLength:0,limit:10}).on("change",function(){var i,a,e,t=$(this).val();i=n,a=t,e=g.$gridList.find('.enum-collection[data-id="'+i+'"] .collection-item'),a?(a=a.toLowerCase(),e.each(function(){var e=$(this),t=e.data("id"),n=p(g.main.objects,t);-1!==n.toLowerCase().indexOf(a)?e.show():-1!==t.substring(i.length).toLowerCase().indexOf(a)?e.show():e.hide()})):e.show(),$(this).val()?r.show():r.hide(),g.main.saveConfig("filter-"+n,t)}).on("keyup",function(){$(this).trigger("change")}),r.off("click").on("click",function(){e.val("").trigger("change")}),g.main.config["filter-"+n]?e.val(g.main.config["filter-"+n]).trigger("change"):r.hide()}(e)}function n(){var e=g.$gridList.find(".tree-table-body");g.$gridList.removeClass("tree-table-list").addClass("tree-table-tiles"),g.$gridList.find(".tree-table-buttons").remove(),g.$gridList.prepend('<div class="row tree-table-buttons">\n <a class="btn-floating btn-small translateT btn-switch-tiles" title="'+_("change view mode")+'"><i class="material-icons">view_list</i></a>\n <a class="btn-floating waves-effect waves-light btn-small blue dropdown-trigger btn-new-enum-btn translationT" title="'+_("New enum")+'" data-target="btn-new-enum"><i class="material-icons">note_add</i></a>\n <ul id="btn-new-enum" class="dropdown-content"></ul>\n <a class="btn-floating waves-effect waves-light blue btn-small btn-edit translateT" title="'+_("Edit")+'" id="tab-enums-list-edit">\n <i class="material-icons">queue_play_next</i>\n </a>\n </div>');var t='<div class="col s12 cron-main-tab">';t+='<ul class="tabs">';for(var n=0;n<g.list.length;n++)if(2===g.list[n].split(".").length){var i=p(g.main.objects,g.list[n]);t+='<li class="tab col"><a href="#enum-'+encodeURIComponent(g.list[n]).replace(/[.%]/g,"-")+'">'+g.main.getIcon(g.list[n])+'<span class="name">'+i+"</span></a></li>"}t+="</ul>",t+="</div>";for(var a=0;a<g.list.length;a++)2===g.list[a].split(".").length&&(t+='<div id="enum-'+encodeURIComponent(g.list[a]).replace(/[.%]/g,"-")+'" class="col s12 page" data-id="'+g.list[a]+'" data-type="second">',t+="</div>");var s={};e.find(".enum-collection").each(function(){s[$(this).data("id")]=$(this).scrollTop()});try{var o=g.$gridEnum.find(".tree-table-body .collection").find(".collection-item");try{o.droppable("instance")&&o.droppable("destroy")}catch(n){console.error(n)}}catch(n){}e.html(t),0<e.find(".tabs li").length&&(e.find(".tabs").mtabs({onShow:function(e){g.main.saveConfig("enums-active",$(e).attr("id"))}}),g.main.config["enums-active"]&&!g.main.noSelect&&e.find(".tabs").mtabs("select",g.main.config["enums-active"])),e.find(".page").each(function(){r($(this).data("id"),$(this),s[$(this).data("id")])}),e.find(".btn-new-category").on("click",function(){v(null,$(this).data("id"))}),e.find(".btn-edit-category").on("click",function(){v($(this).data("id"))}),e.find(".btn-del-category").on("click",function(){l($(this).data("id"))}),e.find(".edit-content").on("click",function(){v($(this).data("id"))}),e.find(".delete-content").on("click",function(){l($(this).data("id"))}),e.find(".close").on("click",function(){u($(this).data("id"),$(this).data("enum"))}),g.$gridList.find(".btn-edit").off("click").on("click",function(){w(!g.editMode)}),g.$gridList.find(".btn-switch-tiles").off("click").on("click",function(){g.isTiles=!1,g.main.saveConfig("enumIsTiles",g.isTiles),setTimeout(function(){c()},50)}),f(),y(g.$gridEnum.find(".tree-table-body .collection"))}function c(){try{var e=g.$gridEnum.find(".tree-table-main").find("tbody>tr.treetable-enum");e.droppable("instance")&&e.droppable("destroy")}catch(e){console.log(e)}g.$gridList.html("").removeClass("tree-table-tiles").addClass("tree-table-list"),g.$gridList.treeTable({objects:g.main.objects,root:"enum",columns:["title","name"],members:!0,colors:!0,icons:!0,widths:["calc(100% - 250px)","250px"],name:"enums",buttonsWidth:"40px",buttons:[{text:!1,icons:{primary:"ui-icon-trash"},click:function(t,e,n){g.main.objects[t]?"enum"===g.main.objects[t].type?e?g.main.confirmMessage(_("All sub-enums of %s will be deleted too?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):u(t,n):g.main.objects[n]&&"enum"===g.main.objects[n].type?u(t,n):b(_('Object "<b>%s</b>" does not exists. Update the page.',t))},width:26,height:20},{text:!1,icons:{primary:"ui-icon-pencil"},match:function(e){return g.main.objects[e]&&"enum"===g.main.objects[e].type},click:function(e,t,n){v(e)},width:26,height:20}],panelButtons:[{id:"tab-enums-btn-switch-tiles",title:_("change view mode"),icon:"view_module",click:function(){g.isTiles=!0,g.main.saveConfig("enumIsTiles",g.isTiles),setTimeout(function(){n()},50)}},{id:"tab-enums-list-new-enum",title:_("New enum"),icon:"note_add",click:function(){v(null)}},{id:"tab-enums-list-new-category",title:_("New category"),icon:"library_add",click:function(){v(null,g.enumEdit)}},{id:"tab-enums-list-edit",title:_("Edit"),icon:"edit",click:function(){w(!g.editMode)}}],onChange:function(e,t){if(e!==t){g.enumEdit=e;var n=g.main.objects[e];if(n&&"enum"===n.type)$("#tab-enums-list-new-enum").removeClass("disabled").attr("title",_("Create new enum, like %s","enum.newCategory")),2===e.split(".").length?g.$gridList.find("#tab-enums-list-new-category").removeClass("disabled").attr("title",_("Create new category, like %s",e+".newEnum")):g.$gridList.find("#tab-enums-list-new-category").addClass("disabled");else g.$gridList.find("#tab-enums-list-new-enum").addClass("disabled"),g.$gridList.find("#tab-enums-list-new-category").addClass("disabled")}},onReady:m}),g.$gridList.find(".tree-table-buttons a").addClass("btn-small"),g.$gridList.find("#tab-enums-list-new-enum").addClass("disabled"),g.$gridList.find("#tab-enums-list-new-category").addClass("disabled")}function l(t){if("enum"===g.main.objects[t].type){var e=function(e){for(var t=e.split("."),n=[],i=new RegExp("^"+e.replace(/\./g,"\\.")+"\\."),a=0;a<g.list.length;a++)g.list[a].split(".").length===t.length+1&&i.test(g.list[a])&&n.push(g.list[a]);return n}(t);e&&e.length?g.main.confirmMessage(_("All sub-enums of %s will be deleted too?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})}):g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&g.main._delObjects(t,!0,function(e){e?b(_("Error: %s",e),!0):b(_("Deleted"))})})}}function u(i,e){g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);-1!==n?(t.common.members.splice(n,1),g.main.socket.emit("setObject",t._id,t,function(e){e?b(_("Error: %s",e),!0):b(_("Removed"))})):b(_("%s is not in the list"))}})}function i(n,e){g.main.socket.emit("getObject",e,function(e,t){t&&t.common&&(t.common.members=t.common.members||[],-1===t.common.members.indexOf(n)?(t.common.members.push(n),t.common.members.sort(),g.main.socket.emit("setObject",t._id,t,function(e){e?b(_("Error: %s",e),!0):b(_("%s added to %s",n,t._id))})):b(_("Is yet in the list")))})}function b(e,t,n){"boolean"==typeof t&&(n=t,t=3e3),g.main.showToast(g.$gridEnum.find(".tree-table-buttons"),e,null,t,n)}function m(e){g.editMode&&(e||(e=g.$gridEnum.find(".tree-table-main")),e.find("tbody>tr.treetable-enum").droppable({accept:".fancytree-type-draggable",over:function(e,t){if($(this).addClass("tab-accept-item"),$(this).hasClass("not-empty")&&!$(this).hasClass("expanded")){var n;$(this).data("tt-id");(n=$(this).data("timer"))&&clearTimeout(n),$(this).data("timer",setTimeout(function(){g.$gridList.treeTable("expand",$(this).data("tt-id"))},1e3))}},out:function(e,t){var n;$(this).removeClass("tab-accept-item"),(n=$(this).data("timer"))&&(clearTimeout(n),$(this).data("timer",null))},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item"),i(t.draggable.data("id"),$(this).data("tt-id"))}}))}function y(e){if(g.editMode){var t=(e=e||g.$gridEnum.find(".tree-table-body .collection")).find(".collection-item");try{t.droppable("instance")&&t.droppable("destroy")}catch(e){console.error(e)}t.droppable({accept:".fancytree-type-draggable",over:function(e,t){$(this).addClass("tab-accept-item")},out:function(e,t){$(this).removeClass("tab-accept-item")},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item"),i(t.draggable.data("id"),$(this).data("id"))}})}}function v(e,a){var i=!1,s=g.$gridEnum.find("#tab-enums-dialog-new"),o="",t="",n="",r="",c="",l="",d=!0;if(installFileUpload(s,5e4,function(e,t){if(e)b(e,!0);else{if(!t.match(/^data:image\//))return void b(_("Unsupported image format"),!0);s.find(".tab-enums-dialog-create").removeClass("disabled"),c=t,s.find(".tab-enums-dialog-new-icon").show().html('<img class="" />'),s.find(".tab-enums-dialog-new-icon img").attr("src",t),s.find(".tab-enums-dialog-new-icon-clear").show()}}),d=e?(g.main.objects[e]&&g.main.objects[e].common&&(t=translateName(g.main.objects[e].common.name),c=g.main.objects[e].common.icon,l=g.main.objects[e].common.color),n=o=e,s.find("#tab-enums-dialog-preserve-id").prop("checked",!0),!1):(s.find("#tab-enums-dialog-preserve-id").prop("checked",!1),!0),s.find(".tab-enums-dialog-new-title").text(_(a?"Create new category":n?"Rename":"Create new enum")),n){var u=n.split(".");u.length<=2&&(e=!0),n=u.pop(),a=u.join("."),r=n}s.find("#tab-enums-dialog-new-name").val(t).off("change").on("change",function(){var e=s.find("#tab-enums-dialog-new-id"),t=e.val(),n=$(this).val();n=n.replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").trim().toLowerCase(),!d||t&&i||(e.val(n),s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#")),M.updateTextFields("#tab-enums-dialog-new")),e.val()&&!e.val().match(/[.\s]/)?(s.find(".tab-enums-dialog-create").removeClass("disabled"),e.removeClass("wrong")):(s.find(".tab-enums-dialog-create").addClass("disabled"),e.addClass("wrong"))}).off("keyup").on("keyup",function(){$(this).trigger("change")}),s.find("#tab-enums-dialog-new-id").val(n).off("change").on("change",function(){if(!s.find("#tab-enums-dialog-preserve-id").prop("checked")){i=!0;var e=$(this).val();s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+($(this).val()||"#")),M.updateTextFields("#tab-enums-dialog-new"),e&&!e.match(/[.\s]/)?(s.find(".tab-enums-dialog-create").removeClass("disabled"),$(this).removeClass("wrong")):(s.find(".tab-enums-dialog-create").addClass("disabled"),$(this).addClass("wrong"))}}).off("keyup").on("keyup",function(){$(this).trigger("change")}),s.find("#tab-enums-dialog-new-id").prop("disabled",!d),s.find(".tab-enums-dialog-create").addClass("disabled").off("click").text(_(o?"Change":"Create")).on("click",function(){var e,t,n,i;o?(s.find("#tab-enums-dialog-preserve-id").prop("checked")?(e="object"==typeof g.main.objects[o].common.name?g.main.objects[o].common.name:{en:o.split(".").pop()})[systemLang]=s.find("#tab-enums-dialog-new-name").val():e=s.find("#tab-enums-dialog-new-name").val(),h(o,a+"."+s.find("#tab-enums-dialog-new-id").val(),{name:e,icon:c,color:l},function(e){e?b(_("Error: %s",e),!0):b(_("Updated"))})):(t=(a||"enum")+"."+s.find("#tab-enums-dialog-new-id").val(),n={name:s.find("#tab-enums-dialog-new-name").val(),icon:c,color:l},i=function(e){e?b(_("Error: %s",e),!0,5e3):b(_("Updated"))},g.main.objects[t]?b(_("Name yet exists!"),!0):g.main.socket.emit("setObject",t,{_id:t,common:{name:n.name,members:[],icon:n.icon,color:n.color},type:"enum"},i))}),s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#")),c?(s.find(".tab-enums-dialog-new-icon").show().html(g.main.getIcon(o)),s.find(".tab-enums-dialog-new-icon-clear").show()):(s.find(".tab-enums-dialog-new-icon").hide(),s.find(".tab-enums-dialog-new-icon-clear").hide()),(l=l||!1)?s.find(".tab-enums-dialog-new-color").val(l):s.find(".tab-enums-dialog-new-color").val(),M.updateTextFields("#tab-enums-dialog-new"),g.main.showToast(s,_("Drop the icons here")),s.find(".tab-enums-dialog-new-upload").off("click").on("click",function(){s.find(".drop-file").trigger("click")}),s.find(".tab-enums-dialog-new-icon-clear").off("click").on("click",function(){c&&(c="",s.find(".tab-enums-dialog-new-icon").hide(),s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-icon-clear").hide())}),s.find(".tab-enums-dialog-new-color-clear").off("click").on("click",function(){l&&(s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-color-clear").hide(),s.find(".tab-enums-dialog-new-colorpicker").colorpicker({component:".btn",color:l,container:s.find(".tab-enums-dialog-new-colorpicker")}).colorpicker("setValue",""),l="")});var m=Date.now();try{s.find(".tab-enums-dialog-new-colorpicker").colorpicker("destroy")}catch(e){}s.find(".tab-enums-dialog-new-colorpicker").colorpicker({component:".btn",color:l,container:s.find(".tab-enums-dialog-new-colorpicker")}).colorpicker("setValue",l).on("showPicker.colorpicker",function(){var e=s.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100<Date.now()-m&&(l=e.color.toHex(),s.find(".tab-enums-dialog-create").removeClass("disabled"),s.find(".tab-enums-dialog-new-icon-clear").show())}),l?s.find(".tab-enums-dialog-new-color-clear").show():s.find(".tab-enums-dialog-new-color-clear").hide(),s.find("#tab-enums-dialog-preserve-id").off("change").on("change",function(){$(this).prop("checked")?(s.find("#tab-enums-dialog-new-id").prop("disabled",!0).val(r),n=r,d=!1):(g.main.objects[e]&&g.main.objects[e].common&&(d=!g.main.objects[e].common["object-non-deletable"]&&!g.main.objects[e].common.dontDelete),d&&(n=(n=s.find("#tab-enums-dialog-new-name").val()).replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").trim().toLowerCase(),s.find("#tab-enums-dialog-new-id").prop("disabled",!1).val(n))),i=!1,s.find("#tab-enums-dialog-new-preview").val((a||"enum")+"."+(n||"#"))}),s.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),s.modal().modal("open")}function w(e){g.editMode=e;var t=g.$gridEnum.find("#tab-enums-list-edit");if(g.editMode)t.removeClass("blue").addClass("red"),g.$gridEnum.addClass("tab-enums-edit"),g._initObjectTree(),b(_("You can drag&drop the devices, channels and states to enums")),g.isTiles?y():m();else{o("destroy");try{var n=g.$gridEnum.find(".collection-item");n.droppable("instance")&&n.droppable("destroy")}catch(e){console.error(e)}try{var i=g.$gridEnum.find("tbody>tr.treetable-enum");i.droppable("instance")&&i.droppable("destroy")}catch(e){console.error(e)}t.removeClass("red").addClass("blue"),g.$gridEnum.removeClass("tab-enums-edit")}}this.prepare=function(){this.isTiles=void 0===this.main.config.enumIsTiles||null===this.main.config.enumIsTiles||this.main.config.enumIsTiles},this._initObjectTree=function(){var e={objects:t.objects,noDialog:!0,draggable:["device","channel","state"],name:"enum-objects",expertModeRegEx:/^system\.|^yunkong2\.|^_|^[\w-]+$|^enum\.|^[\w-]+\.admin|^script\./,texts:{select:_("Select"),cancel:_("Cancel"),all:_("All"),id:_("ID"),ID:_("ID"),name:_("Name"),role:_("Role"),room:_("Room"),function:_("Function"),value:_("Value"),type:_("Type"),selectid:_("Select ID"),from:_("From"),lc:_("Last changed"),ts:_("Time stamp"),wait:_("Processing..."),ack:_("Acknowledged"),edit:_("Edit"),push:_("Trigger event"),ok:_("Ok"),with:_("With"),without:_("Without"),copyToClipboard:_("Copy to clipboard"),expertMode:_("Toggle expert mode"),refresh:_("Update"),sort:_("Sort alphabetically"),button:_("Settings"),noData:_("No data")},filter:{type:"state"},columns:["ID","name","type","role"]};o("init",e).selectId("show"),function(){var e=g.$gridEnum.find(".fancytree-container>tbody");try{e.sortable("instance")&&e.sortable("destroy")}catch(e){console.error(e)}g.$gridEnum.find(".fancytree-container>tbody").sortable({connectWith:"#tab-enums .tab-enums-list .tree-table-main.treetable",items:".fancytree-type-draggable",appendTo:g.$gridEnum,refreshPositions:!0,helper:function(e,t){return $('<div class="fancytree-drag-helper">'+t.find(".fancytree-title").text()+"</div>")},zIndex:999990,revert:!1,scroll:!1,start:function(e,t){var n=t.item.prev();t.item.data("prev",n),g.$gridEnum.addClass("dragging")},stop:function(e,t){g.$gridEnum.removeClass("dragging")},update:function(e,t){var n=t.item.data("prev");n&&n.length?$(n).after(t.item):$(this).prepend(t.item)}}).disableSelection()}()},this._postInit=function(){void 0!==this.$gridList&&(this.main.objects["enum.rooms"]||(this.main.objects["enum.rooms"]={_id:"enum.rooms",common:{icon:"home",name:{en:"Rooms",de:"Räume",ru:"Комнаты",pt:"Quartos",nl:"Kamers",fr:"Pièces",it:"Camere",es:"Habitaciones",pl:"Pokoje"},desc:{en:"List of the rooms",de:"Liste der Räumen",ru:"Список комнат",pt:"Lista dos quartos",nl:"Lijst met kamers",fr:"Liste des chambres",it:"Elenco delle stanze",es:"Lista de las habitaciones",pl:"Lista pokoi"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},g.main.socket.emit("setObject","enum.rooms",this.main.objects["enum.rooms"]),this.list.unshift("enum.rooms")),this.main.objects["enum.functions"]||(this.main.objects["enum.functions"]={_id:"enum.functions",common:{icon:"lightbulb_outline",name:{en:"Functions",de:"Funktionen",ru:"функции",pt:"Funções",nl:"functies",fr:"Les fonctions",it:"funzioni",es:"Funciones",pl:"Funkcje"},desc:{en:"List of the functions",de:"Liste der Funktionen",ru:"Список функций",pt:"Lista das funções",nl:"Lijst met functies",fr:"Liste des fonctions",it:"Elenco delle funzioni",es:"Lista de las funciones",pl:"Lista funkcji"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},this.list.unshift("enum.functions"),g.main.socket.emit("setObject","enum.functions",this.main.objects["enum.functions"])),this.isTiles?n():c(),this.editMode?this._initObjectTree():o("destroy"))},this.init=function(e){this.inited&&!e||(this.main&&this.main.objectsLoaded?(this._postInit(),this.inited||(this.inited=!0,this.main.subscribeObjects("enum.*"))):setTimeout(function(){g.init(e)},250))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("enum.*")),w(!1),this.$gridList.treeTable("destroy")},this.objectChange=function(e,t,n){if(e.match(/^enum\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.updateTimers&&clearTimeout(this.updateTimers),this.updateTimers=setTimeout(function(){g.updateTimers=null,g._postInit()},200)}this.$grid&&o("object",e,t,n)}}function Events(g){var h=this;this.main=g,this.$tab=$("#tab-events");var e,f,p,t,b,M="yunkong2.net"===location.hostname||"yunkong2.pro"===location.hostname,y={count:0,start:0,limit:500},n=null,v={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null},w={done:!1,timer:null};this.prepare=function(){t=this.$tab.find("#event-outer"),p=this.$tab.find("#event-table"),b=this.$tab.find("#event-pause"),e=this.$tab.find("#events-table-tr"),(f=new IobListHeader(e,{list:t,colWidthOffset:1,prefix:"event-filter"})).doFilter=i,f.add("combobox","type"),f.add("edit","id","ID"),f.add("edit","val","value"),f.add("combobox","ack","ack",[{val:"",name:"all"},{val:"true",name:"ack"},{val:"false",name:"not ack"}]),f.add("combobox","from","from"),f.add("text","ts"),f.add("text","lc"),Object.defineProperty(f,"getValues",{value:function(){f.ID.selectedVal=f.ID.selectedVal.toLocaleLowerCase(),"true"===f.ack.selectedVal&&(f.ack.selectedVal=!0),"false"===f.ack.selectedVal&&(f.ack.selectedVal=!1)},enumerateble:!1}),b.on("click",function(){h.pause()}),this.$tab.find("#event-clear").off("click").on("click",function(){y.count=0,y.start=0,h.$tab.find("#event-table").html("")})},this.init=function(){M?h.$tab.find("#grid-events").html(_("You can't see events via cloud")+'<br><i class="large material-icons">cloud_off</i>').addClass("no-cloud-events"):f&&(this.inited||(!function e(){if(!$.fn.colResizable)return;t.is(":visible")?(t.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return f.syncHeader()}}),f.syncHeader()):setTimeout(function(){e()},200)}(),this.inited=!0,this.main.subscribeObjects("*"),this.main.subscribeStates("*")))};var j=!(this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("*"),this.main.unsubscribeStates("*"))});function N(){w.timer=null,$(window).trigger("resize.JColResizer")}function i(){n&&(clearTimeout(n),n=null),f.getValues&&f.getValues(),p&&p.find(".event-line").each(function(e){var t=!0,n=$(this);f.type.selectedVal&&!n.hasClass("event-type-"+f.type.selectedVal)?t=!1:f.from.selectedVal&&!n.hasClass("event-from-"+f.from.selectedVal)?t=!1:""===f.ack.selectedVal||n.hasClass("event-ack-"+f.ack.selectedVal)?f.ID.selectedVal&&-1===$(this).find("td.event-column-id").text().toLocaleLowerCase().indexOf(f.ID.selectedVal)?t=!1:""!==f.value.selectedVal&&-1===$(this).find("td.event-column-value").text().indexOf(f.value.selectedVal)&&(t=!1):t=!1,t?n.show():n.hide()})}this.add=function(e,t,n,i){if(!M){var a,s,o,r,c=i?"stateChange":n?"message":"objChange",l="";if(f&&(f.getValues&&f.getValues(),f.type.checkAddOption(c)),w.done||(w.timer||(w.timer=setTimeout(N,1e3)),20<y.count&&(w.done=!0)),!v.mode)if(y.count>=h.limit){y.start++;var d=document.getElementById("event_"+y.start);d&&(d.outerHTML="")}else y.count++;n||i?i&&(t?(t.from=t.from||"",t.from=t.from.replace("system.adapter.",""),t.from=t.from.replace("system.",""),f&&f.from.checkAddOption(t.from,function(e){return{val:e.replace(/\./g,"-"),name:e}}),l=t.from,void 0!==(a=JSON.stringify(t.val))&&30<a.length&&(a='<div title="'+a.replace(/"/g,"")+'">'+a.substring(0,30)+"...</div>"),s=t.ack?"true":"false",o=g.formatDate(t.ts),r=g.formatDate(t.lc)):(a="deleted",o=g.formatDate(new Date))):o=t?(void 0!==(a=JSON.stringify(t,"\n",2))&&30<a.length&&(a='<span title="'+a.replace(/"/g,"'")+'">'+a.substring(0,30)+"...</span>"),g.formatDate(t.ts)):(a="deleted",g.formatDate(new Date));var u=!0;f&&(f.type.selectedVal&&f.type.selectedVal!==c?u=!1:f.ID.selectedVal&&-1===e.toLocaleLowerCase().indexOf(f.ID.selectedVal)?u=!1:""!==f.value.selectedVal&&null!=a&&-1===a.indexOf(f.value.selectedVal)?u=!1:""!==f.ack.selectedVal&&f.ack.selectedVal!==s?u=!1:f.from.selectedVal&&f.from.selectedVal!==l&&(u=!1));var m='<tr id="event_'+(y.start+y.count)+'" class="event-line event-type-'+c+" event-from-"+l.replace(".","-")+" event-ack-"+s+'" style="'+(u?"":"display:none")+'">';m+="<td>"+c+"</td>",m+='<td class="event-column-id">'+e+"</td>",isNaN(a)?m+='<td class="event-column-value">'+(a||"")+"</td>":m+='<td class="event-column-value" style="text-align: right; padding-right: 5px;">'+(a||"")+"</td>",m+="<td>"+(s||"")+"</td>",m+="<td>"+(l||"")+"</td>",m+="<td>"+(o||"")+"</td>",m+="<td>"+(r||"")+"</td>",m+="</tr>",v.mode?(v.list.push(m),v.counter++,v.counter>y.limit&&(v.overflow||(b.addClass("red lighten3").attr("title",_("Message buffer overflow. Losing oldest")),v.overflow=!0),v.list.shift()),v.$counterSpan.html(v.counter)):p&&(p.prepend(m),j||"#tab-events"!==window.location.hash&&"#events"!==window.location.hash||(f&&f.syncHeader(),j=!0))}},this.pause=function(){if(v.mode){v.mode=!1;for(var e=0;e<v.list.length;e++){if(500<=y.count){y.start++;var t=document.getElementById("event_"+y.start);t&&(t.outerHTML="")}else y.count++;p.prepend(v.list[e])}v.overflow=!1,v.list=[],v.counter=0,b.removeClass("yellow btn-pause-button-active").html('<i class="material-icons">pause</i>')}else b.addClass("yellow btn-pause-button-active"),v.$counterSpan=b,v.$counterSpan.html("0"),v.counter=0,v.mode=!0}}function fileHandler(e){e.preventDefault();var t=e.dataTransfer?e.dataTransfer.files[0]:e.target.files[0],n=$(this).find(".drop-zone"),i=$(this).data("drop-zone-cb"),a=$(this).data("limit");if(t.size>(a||1e4))return i&&i(_("File is too big!")),n.hide(),!1;n.show();var s=new FileReader;s.onload=function(e){n.hide(),i&&i(null,e.target.result)},s.readAsDataURL(t)}function installFileUpload(e,t,n){if(void 0!==window.FileReader&&!e.data("installed")){e.data("installed",!0),e.prepend('<div class="drop-zone" style="display: none"><input type="file" class="drop-file" style="display: none" /></div>');var i=e.find(".drop-zone");e[0].ondragover=function(){return i.off("click"),i.show(),!1},i[0].ondragleave=function(){return i.hide(),!1},i[0].ondrop=fileHandler.bind(e[0])}e.data("drop-zone-cb",n),e.data("limit",t),e.find(".drop-file").on("change",fileHandler.bind(e[0]))}function Hosts(s){var r=this;function n(e){var t=$("#dialog-host-update");if(e){var n=e.path,i=(n=n.replace(/\\/g,"/")).split("/");i.pop(),i.pop(),"linux"===e.platform||"darwin"===e.platform||"freebsd"===e.platform||"lin"===e.platform?t.find("#dialog-host-update-instructions").val("cd "+i.join("/")+"\nsudo yunkong2 stop\nsudo yunkong2 update\nsudo yunkong2 upgrade self\nsudo yunkong2 start"):t.find("#dialog-host-update-instructions").val("cd "+i.join("\\")+"\nyunkong2 stop\nyunkong2 update\nyunkong2 upgrade self\nyunkong2 start")}else t.find("#dialog-host-update-instructions").val("cd /opt/yunkong2\nsudo yunkong2 stop\nsudo yunkong2 update\nsudo yunkong2 upgrade self\nsudo yunkong2 start");t.data("inited")||(t.data("inited",!0),t.modal()),t.modal("open")}function i(e){if(e=(e||"").toLowerCase().trim()){var t=!1;r.$tab.find(".hosts-host").each(function(){-1!==$(this).data("host-filter").toLowerCase().indexOf(e)?($(this).show(),t=!0):$(this).hide()}),t?r.$tab.find(".hosts-host-filtered-out").hide():r.$tab.find(".hosts-host-filtered-out").show()}else r.$tab.find(".hosts-host").show(),r.$tab.find(".hosts-host-filtered-out").hide()}function a(e){var t=r.main.objects[r.list[e].id],n=r.main.states[t._id+".alive"]&&r.main.states[t._id+".alive"].val&&"null"!==r.main.states[t._id+".alive"].val;t.common=t.common||{},t.native=t.native||{};var i='<tr class="hosts-host" data-host-id="'+t._id+'" data-host-filter="'+(t.common.title||"")+" "+(t.common.hostname||"")+" "+(t.common.name||"")+'">';i+='<td class="tab-hosts-header-led"><div class="hosts-led '+(n?"led-green":"led-red")+'" data-host-id="'+t._id+'"></div></td>',i+='<td class="hosts-icon">'+r.main.getHostIcon(t)+"</td>",i+='<td class="hosts-name" style="font-weight: bold">'+t.common.hostname+"</td>",i+='<td class="tab-hosts-header-type">'+t.common.type+"</td>";var a=t.common.titleLang||t.common.title;return"object"==typeof a&&(a=a[systemLang]||a.en),i+='<td class="tab-hosts-header-title">'+a+"</td>",i+='<td class="tab-hosts-header-os">'+(t.native.os?t.native.os.platform:_("unknown"))+"</td>",i+='<td class="tab-hosts-header-available"><span data-host-id="'+t._id+'" data-type="'+t.common.type+'" class="hosts-version-available"></span><button class="small-button host-update-submit" data-host-name="'+t.common.hostname+'" style="display: none; opacity: 0;" title="'+_("update")+'"><i class="material-icons">refresh</i></button><button class="small-button host-update-hint-submit" data-host-name="'+t.common.hostname+'" style="display: none;" title="'+_("update")+'"><i class="material-icons">refresh</i></button></td>',i+='<td class="hosts-version-installed tab-hosts-header-installed" data-host-id="'+t._id+'">'+t.common.installedVersion+"</td>",r.main.states[t._id+".inputCount"]?i+='<td class="tab-hosts-header-events" style="text-align: center"><span title="in" data-host-id="'+t._id+'" class="host-in">&#x21E5;'+r.main.states[t._id+".inputCount"].val+'</span> / <span title="out" data-host-id="'+t._id+'" class="host-out">&#x21A6;'+r.main.states[t._id+".outputCount"].val+"</span></td>":i+='<td class="tab-hosts-header-events" style="text-align: center"><span title="in" data-host-id="'+t._id+'" class="host-in"></span> / <span title="out" data-host-id="'+t._id+'" class="host-out"></span></td>',i+='<td class="tab-hosts-header-restart"><button class="small-button host-restart-submit" style="'+(n?"":"display: none")+'" data-host-id="'+t._id+'" title="'+_("restart")+'"><i class="material-icons">autorenew</i></button></td>',i+="</tr>"}function o(e){var t,n=r.main.objects[r.list[e].id],i=r.main.states[n._id+".alive"]&&r.main.states[n._id+".alive"].val&&"null"!==r.main.states[n._id+".alive"].val;n.common=n.common||{},n.native=n.native||{},n.common.color&&(t=r.main.invertColor(n.common.color));var a=' <div class="col s12 hosts-host" data-host-id="'+n._id+'" data-host-filter="'+(n.common.title||"")+" "+(n.common.hostname||"")+" "+(n.common.name||"")+'"> <div class="host z-depth-1 hoverable"> <div class="image center"> '+r.main.getHostIcon(n," ")+' <div class="hosts-led '+(i?"led-green":"led-red")+'" data-host-id="'+n._id+'"></div> </div> <div class="system" style="'+(n.common.color?"color: "+(t?"white":"black")+"; background: "+n.common.color:"")+'"> <span class="nameHost" title="name">'+n.common.hostname+'</span> <ul> <li class="tab-hosts-header-title"><span class="title-val">'+r.words.Type+':</span> <span class="type">'+n.common.type+'</span></li> <li><span class="title-val">'+r.words.Title+':</span> <span class="title">'+n.common.title+'</span></li> <li><span class="title-val">'+r.words.OS+':</span> <span class="os">'+(n.native.os?n.native.os.platform:_("unknown"))+'</span></li> <li><span class="title-val">'+r.words.Available+':</span> <span class="available hosts-version-available"></span></li> <li><span class="title-val">'+r.words.Installed+':</span> <span class="installed"> '+n.common.installedVersion+"</span></li>";return r.main.states[n._id+".inputCount"]?a+='<li class="tab-hosts-header-events"><span class="title-val">'+r.words.Events+':</span> <span title="in" data-host-id="'+n._id+'" class="host-in">&#x21E5;'+r.main.states[n._id+".inputCount"].val+'</span> / <span title="out" data-host-id="'+n._id+'" class="host-out">&#x21A6;'+r.main.states[n._id+".outputCount"].val+"</span></li>":a+='<li class="tab-hosts-header-events"><span class="title-val">'+r.words.Events+':</span> <span title="in" data-host-id="'+n._id+'" class="host-in"></span> / <span title="out" data-host-id="'+n._id+'" class="host-out"></span></li>',a+='</ul> </div> <div class="icon center"> <i class="material-icons host-edit" data-host-id="'+n._id+'">edit</i> <i class="material-icons host-restart-submit" data-host-name="'+n.common.hostname+'" title="'+_("restart")+'">autorenew</i>',n.common.hostname!==r.main.currentHost&&(a+=' <i class="material-icons host-delete" data-host-name="'+n.common.hostname+'" title="'+_("remove")+'">delete</i>'),a+=' <i class="material-icons host-update-hint-submit" data-host-name="'+n.common.hostname+'" style="display: none">refresh</i> <i class="material-icons host-update-submit" data-host-name="'+n.common.hostname+'" style="display: none; opacity: 0">refresh</i> </div> </div> </div>'}this.main=s,this.list=[],this.$tab=$("#tab-hosts"),this.$grid=this.$tab.find("#hosts"),this.$table=this.$tab.find("#grid-hosts"),this.inited=!1,this.isTiles=!0,this.words={},this.prepare=function(){this.isTiles=void 0===this.main.config.hostsIsTiles||null===this.main.config.hostsIsTiles||this.main.config.hostsIsTiles,"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find(".btn-switch-tiles").hide()),this.$tab.find(".btn-reload").attr("title",_("Update")).on("click",function(){r.init(!0)}),this.$tab.find(".btn-switch-tiles").off("click").on("click",function(){r.isTiles=!r.isTiles,r.isTiles?$(this).find("i").text("view_list"):$(this).find("i").text("view_module"),r.main.saveConfig("hostsIsTiles",r.isTiles),setTimeout(function(){r._postInit()},50)}),this.isTiles?this.$tab.find(".btn-switch-tiles").find("i").text("view_list"):this.$tab.find(".btn-switch-tiles").find("i").text("view_module"),this.$tab.find(".filter-clear").on("click",function(){r.$tab.find(".filter-input").val("").trigger("change")});var e=this.$tab.find(".filter-input");e.on("change",function(){var e=$(this).val();e?($(this).addClass("input-not-empty"),r.$tab.find(".filter-clear").show()):(r.$tab.find(".filter-clear").hide(),$(this).removeClass("input-not-empty")),r.main.saveConfig("hostsFilter",e),i(e)}).on("keyup",function(){r.filterTimeout&&clearTimeout(r.filterTimeout),r.filterTimeout=setTimeout(function(){r.$tab.find(".filter-input").trigger("change")},300)}),this.main.config.hostsFilter&&"{"!==this.main.config.hostsFilter[0]?(e.val(r.main.config.hostsFilter).addClass("input-not-empty"),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.words.Title=_("Title"),this.words.OS=_("OS"),this.words.Available=_("Available"),this.words.Installed=_("Installed"),this.words.Events=_("Events"),this.words.Title=_("Title"),r.words.Type=_("Type")},this.initButtons=function(e){var t=e?'[data-host-id="'+e+'"]':"";this.$tab.find(".host-update-submit"+t).off("click").on("click",function(){r.main.cmdExec($(this).attr("data-host-name"),"upgrade self",function(e){e||r.init(!0)})}),this.$tab.find(".host-restart-submit"+t).off("click").on("click",function(){r.main.waitForRestart=!0,r.main.cmdExec($(this).attr("data-host-name"),"_restart")}),this.$tab.find(".host-delete"+t).off("click").on("click",function(){r.main.cmdExec(r.main.currentHost,"host remove "+$(this).attr("data-host-name"))}),this.$tab.find(".host-edit"+t).off("click").on("click",function(){!function(t){var n=$("#tab-host-dialog-edit"),e="",i="",a="";installFileUpload(n,5e4,function(e,t){if(e)r.main.showToast(n,e);else{if(!t.match(/^data:image\//))return void r.main.showToast(n,_("Unsupported image format"));n.find(".tab-host-dialog-ok").removeClass("disabled"),i=t,n.find(".tab-host-dialog-edit-icon").show().html('<img class="" />'),n.find(".tab-host-dialog-edit-icon img").attr("src",t),n.find(".tab-host-dialog-edit-icon-clear").show()}}),r.main.objects[t]&&r.main.objects[t].common&&("object"==typeof(e=r.main.objects[t].common.title)&&(e=e[systemLang]||e.en),i=r.main.objects[t].common.icon,a=r.main.objects[t].common.color);n.find("#tab-host-dialog-edit-title").val(e).off("change").on("change",function(){n.find(".tab-host-dialog-ok").removeClass("disabled")}).off("keyup").on("keyup",function(){$(this).trigger("change")}),n.find(".tab-host-dialog-ok").addClass("disabled").off("click").on("click",function(){var e=JSON.parse(JSON.stringify(r.main.objects[t]));e.common.title=n.find("#tab-host-dialog-edit-title").val(),e.common.icon=i,e.common.color=a,JSON.stringify(e)!==JSON.stringify(r.main.objects[t])?r.main.socket.emit("setObject",e._id,e,function(e){r.main.showToast(n,_("Updated"))}):r.main.showToast(n,_("Nothing changed"))}),i?(n.find(".tab-host-dialog-edit-icon").show().html(r.main.getIcon(t)),n.find(".tab-host-dialog-edit-icon-clear").show()):(n.find(".tab-host-dialog-edit-icon").hide(),n.find(".tab-host-dialog-edit-icon-clear").hide());(a=a||!1)?n.find(".tab-host-dialog-edit-color").val(a):n.find(".tab-host-dialog-edit-color").val();M.updateTextFields("#tab-host-dialog-edit"),r.main.showToast(n,_("Drop the icons here")),n.find(".tab-host-dialog-edit-upload").off("click").on("click",function(){n.find(".drop-file").trigger("click")}),n.find(".tab-host-dialog-edit-icon-clear").off("click").on("click",function(){i&&(i="",n.find(".tab-host-dialog-edit-icon").hide(),n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-icon-clear").hide())}),n.find(".tab-host-dialog-edit-color-clear").off("click").on("click",function(){a&&(n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-color-clear").hide(),n.find(".tab-host-dialog-edit-colorpicker").colorpicker({component:".btn",color:a,container:n.find(".tab-host-dialog-edit-colorpicker")}).colorpicker("setValue",""),a="")});var s=Date.now();try{n.find(".tab-host-dialog-edit-colorpicker").colorpicker("destroy")}catch(e){}n.find(".tab-host-dialog-edit-colorpicker").colorpicker({component:".btn",color:a,container:n.find(".tab-host-dialog-edit-colorpicker")}).colorpicker("setValue",a).on("showPicker.colorpicker",function(){var e=n.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100<Date.now()-s&&(a=e.color.toHex(),n.find(".tab-host-dialog-ok").removeClass("disabled"),n.find(".tab-host-dialog-edit-icon-clear").show())}),a?n.find(".tab-host-dialog-edit-color-clear").show():n.find(".tab-host-dialog-edit-color-clear").hide();n.modal().modal("open")}($(this).attr("data-host-id"))}),this.$tab.find(".host-update-hint-submit"+t).off("click").on("click",function(){var t=setTimeout(function(){n(),t=null},1e3);r.main.socket.emit("sendToHost",$(this).attr("data-host-name"),"getLocationOnDisk",null,function(e){t&&clearTimeout(t),t=null,n(e)})})},this.updateCounter=function(e){if(void 0===e)this.main.tabs.adapters.getAdaptersInfo(this.main.currentHost,!1,!1,function(e,t){var n=0;if(t&&t.hosts){for(var i in t.hosts)if(t.hosts.hasOwnProperty(i)){var a=r.main.objects["system.host."+i];if(a&&a.common){var s=a.common.installedVersion,o=a.common&&e&&e[a.common.type]?e[a.common.type].version:"";s&&o&&!r.main.upToDate(o,s)&&(i="system.host."+i.trim().replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_"),r.main.states[i+".alive"]&&r.main.states[i+".alive"].val&&"null"!==r.main.states[i+".alive"].val&&n++)}}r.updateCounter(n)}});else if(e){var t=$("#updates-for-hosts");t.length?t.text(e):$('<span id="updates-for-hosts" title="'+_("updates")+'" class="new badge updates-for-hosts" data-badge-caption="">'+e+"</span>").appendTo('.admin-sidemenu-items[data-tab="tab-hosts"] a')}else $("#updates-for-hosts").remove()},this._postInit=function(){if(void 0!==r.$grid){this.isTiles?function(){for(var e="",t=0;t<r.list.length;t++)e+=o(t);r.$table.html(""),r.$tab.find(".hosts-table").hide(),r.$grid.html(e).show(),r.$grid.append('<div class="col s12 hosts-host-filtered-out"><div class="host z-depth-1 hoverable">'+_("Filtered out")+"</div></div>")}():function(){for(var e="",t=0;t<r.list.length;t++)e+=a(t);r.$grid.html("").hide(),r.$table.html(e),r.$tab.find(".hosts-table").show(),r.$table.append('<tr class="hosts-host-filtered-out"><td colspan="9">'+_("Filtered out")+"</td></tr>")}(),i(this.$tab.find(".filter-input").val());var s=setTimeout(function(){console.warn("Timeout for repository"),s=null,r.initButtons()},2e3),e=r.main.currentHost;if(!e)for(var t=0;t<r.list.length;t++)if(r.main.states[r.list[t].id+".alive"]&&r.main.states[r.list[t].id+".alive"].val){e=r.list[t].id;break}r.main.tabs.adapters.getAdaptersInfo(e,!0,!1,function(a,e){if(e&&e.hosts){for(var t in e.hosts)if(e.hosts.hasOwnProperty(t)){var n=r.main.objects["system.host."+t],i=e.hosts[t].version;i!==e.hosts[t].runningVersion&&(i+="("+_("Running: ")+e.hosts[t].runningVersion+")"),!i&&n.common&&n.common.installedVersion&&(i=n.common.installedVersion),t="system.host."+t.trim().replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_"),r.$tab.find('.hosts-version-installed[data-host-id="'+t+'"]').html(i)}r.$tab.find(".hosts-host").each(function(){var e=$(this).data("host-id"),t=r.main.objects[e],n=t.common.installedVersion,i=t.common&&a&&a[t.common.type]?a[t.common.type].version:"";n&&i&&(r.main.upToDate(i,n)||r.main.states[e+".alive"]&&r.main.states[e+".alive"].val&&"null"!==r.main.states[e+".alive"].val&&($(this).find(".host-update-submit").show(),$(this).find(".host-update-hint-submit").show(),$(this).find(".hosts-version-installed").addClass("updateReady"),$(this).find(".hosts-version-available").addClass("hosts-version-available-updatable"))),i&&$(this).find(".hosts-version-available").html(i)}),s&&(clearTimeout(s),s=null),r.initButtons()}})}},this.init=function(e){this.inited&&!e||(this.getHosts(function(){r._postInit()}),this.inited||(this.inited=!0,this.main.subscribeObjects("system.host.*"),this.main.subscribeStates("system.host.*")))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("system.host.*"),this.main.unsubscribeStates("system.host.*"))},this.addHost=function(e){var t=null;if(e.native.hardware&&e.native.hardware.networkInterfaces)for(var n in e.native.hardware.networkInterfaces)if(e.native.hardware.networkInterfaces.hasOwnProperty(n)){for(var i=0;i<e.native.hardware.networkInterfaces[n].length;i++)if(!e.native.hardware.networkInterfaces[n][i].internal){t=e.native.hardware.networkInterfaces[n][i].address;break}if(t)break}t?this.list.push({name:e.common.hostname,address:t,id:e._id}):this.list.push({name:e.common.hostname,address:"127.0.0.1",id:e._id})},this.getHosts=function(a){this.main.socket.emit("getForeignObjects","system.host.*","state",function(e,t){for(var n in t)t.hasOwnProperty(n)&&(r.main.objects[n]=t[n]);r.main.socket.emit("getForeignStates","system.host.*",function(e,t){for(var n in t)t.hasOwnProperty(n)&&(r.main.states[n]=t[n]);r.main.socket.emit("getForeignObjects","system.host.*","host",function(e,t){for(var n in r.list=[],t)if(t.hasOwnProperty(n)){var i=t[n];"host"===(r.main.objects[n]=i).type&&r.addHost(i)}s.initHostsList(),a&&a()})})})},this.objectChange=function(e,t,n){if(e.match(/^system\.host\.[-\w]+$/)){var i,a=!1;for(i=0;i<this.list.length;i++)if(this.list[i].id===e){a=!0;break}t?a||this.list.push({id:e,address:t.common.address?t.common.address[0]:"",name:t.common.name}):a&&this.list.splice(i,1),this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){r.updateTimer=null,r._postInit()},200)}},this.stateChange=function(e,t){e.match(/^system\.host\..+\.alive$/)?(e=e.substring(0,e.length-6),t&&t.val?this.$tab.find('.hosts-led[data-host-id="'+e+'"]').removeClass("led-red").addClass("led-green"):(this.$tab.find('.hosts-led[data-host-id="'+e+'"]').removeClass("led-green").addClass("led-red"),this.$tab.find('.host-update-submit[data-host-id="'+e+'"]').hide(),this.$tab.find('.host-update-hint-submit[data-host-id="'+e+'"]').hide(),this.$tab.find('.host-restart-submit[data-host-id="'+e+'"]').hide(),this.$tab.find('.hosts-version-available[data-host-id="'+e+'"]').removeClass("hosts-version-available-updatable"))):e.match(/^system\.host\..+\.outputCount$/)?(e=e.substring(0,e.length-12),this.$tab.find('.host-out[data-host-id="'+e+'"]').html('<span class="highlight">&#x21A6;'+t.val+"</span>")):e.match(/^system\.host\..+\.inputCount$/)&&(e=e.substring(0,e.length-11),this.$tab.find('.host-in[data-host-id="'+e+'"]').html('<span class="highlight">&#x21A6;'+t.val+"</span>"))}}function Instances(i){var p=this;function b(e,t,n,i,a){if("protocol"===n&&(n="secure"),"ip"===e)i=i.replace("%"+e+"%",location.hostname);else if("instance"===e)i=i.replace("%"+e+"%",a);else if(t){n.match(/^native_/)&&(n=n.substring(7));var s=t.native[n];"bind"!==e||s&&"0.0.0.0"!==s||(s=location.hostname),i="secure"===n?i.replace("%"+e+"%",s?"https":"http"):-1===i.indexOf("%"+e+"%")?i.replace("%native_"+e+"%",s):i.replace("%"+e+"%",s)}else i="secure"===n?i.replace("%"+e+"%","http"):-1===i.indexOf("%"+e+"%")?i.replace("%native_"+e+"%",""):i.replace("%"+e+"%","");return i}function o(e,t,n){var i,a,s,o=e.match(/%(\w+)%/g);if(o){for(a=o.length-1;0<=a;a--)s=(i=(i=o[a]).replace(/%/g,"")).split("_"),i.match(/^native_/)?(e=b(i,p.main.objects["system.adapter."+t+"."+n],i,e,n),o.splice(a,1)):1===s.length?(e=b(i,p.main.objects["system.adapter."+t+"."+n],s[0],e,n),o.splice(a,1)):s[0].match(/\.[0-9]+$/)&&(e=b(i,p.main.objects["system.adapter."+s[0]],s[1],e,n),o.splice(a,1));var r,c,l={},d=s[0];for(a=0;a<o.length;a++){if((i=(i=o[a]).replace(/%/g,"")).match(/^native_/)&&(i=i.substring(7)),s=i.split("_"),!r){r=[];for(var u=0;u<10;u++)p.main.objects["system.adapter."+d+"."+u]&&r.push(u)}for(var m=0;m<r.length;m++)l[d+"."+m]={instance:d+"."+m,link:b(i,p.main.objects["system.adapter."+d+"."+m],s[1],l[d+"."+m]?l[d+"."+m].link:e,m)}}if(r){c={};var g=0,h="";for(var f in l)l.hasOwnProperty(f)&&(c[l[f].instance]=l[f].link,h||(h=l[f].link),g++);g<2&&(e=h,c=null)}}return c||e}function f(e){var t=e.split("."),n=t[2],i=t[3],a=p.$tab.find('.instance-led[data-instance-id="'+e+'"]'),s=p.main.objects[e]&&p.main.objects[e].common||{},o="daemon"===s.mode?"green":"blue",r="";if(!s.enabled||s.webExtension&&p.main.objects[e].native.webInstance){if(o="daemon"===s.mode?"gray":"blue",r='<table style="border: 0">',r+='<tr style="border: 0"><td style="border: 0">'+_("Connected to host: ")+'</td><td style="border: 0">',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+='<span style="color: green">'+_("true")+"</span>":r+=_("false"),r+='</td></tr><tr style="border: 0">',r+='<td style="border: 0">'+_("Heartbeat: ")+'</td><td style="border: 0">',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+='<span style="color: green">'+_("true")+"</span>":r+=_("false"),r+="</td></tr>",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+='<tr style="border: 0"><td style="border: 0">'+_("Connected to %s: ",n)+"</td><td>",r+=(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?!0===c?'<span style="color: green">'+_("true")+"</span>":'<span style="color: green">'+c+"</span>":_("false"),r+="</td></tr>";r+="</table>"}else{var c;if(r='<table style="border: 0">',r+='<tr style="border: 0"><td style="border: 0">'+_("Connected to host: ")+'</td><td style="border: 0">',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+='<span style="color: green">'+_("true")+"</span>":(r+="daemon"===s.mode?'<span style="color: red">'+_("false")+"</span>":_("false"),o="daemon"===s.mode?"red":"blue"),r+='</td></tr><tr style="border: 0"><td style="border: 0">'+_("Heartbeat: ")+'</td><td style="border: 0">',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+='<span style="color: green">'+_("true")+"</span>":(r+="daemon"===s.mode?'<span style="color: red">'+_("false")+"</span>":_("false"),o="daemon"===s.mode?"red":"blue"),r+="</td></tr>",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+='<tr style="border: 0"><td style="border: 0">'+_("Connected to %s: ",n)+"</td><td>",(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?r+=!0===c?'<span style="color: green">'+_("true")+"</span>":'<span style="color: green">'+c+"</span>":(o="red"===o?"red":"orange",r+='<span style="color: red">'+_("false")+"</span>"),r+="</td></tr>";r+="</table>"}o="blue"===o?"":o,a.removeClass("led-red led-green led-orange led-blue").addClass("led-"+o).data("title",r),a.data("inited")||"gray"===o||(a.data("inited",!0),a.hover(function(){var e='<div class="instance-state-hover" style="left: '+Math.round($(this).position().left+$(this).width()+5)+'px;">'+$(this).data("title")+"</div>",t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),i<0&&(i=0),t.css({top:i}).on("click",function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)}).on("click",function(){$(this).trigger("hover")}))}function r(){for(var e=p.main.states["system.host."+p.main.currentHost+".memRss"],t=1,n=e?e.val:0,i=0;i<p.list.length;i++){var a=p.main.objects[p.list[i]];if(a&&a.common&&(a.common.host===p.main.currentHost&&a.common.enabled&&"daemon"===a.common.mode)){var s=p.main.states[a._id+".memRss"];n+=s?s.val:0,t++}}n=Math.round(n);var o=p.$tab.find("#totalRam");n.toString()!==o.text()&&o.html('<span class="highlight">'+n+"</span>");var r=_("%s processes",t),c=p.$tab.find("#running_processes");r!==c.text()&&c.html('<span class="highlight">'+r+"</span>")}function c(){p.main.states["system.host."+p.main.currentHost+".memAvailable"]?p.memState="memAvailable":p.main.states["system.host."+p.main.currentHost+".freemem"]&&(p.memState="freemem");var e=p.main.states["system.host."+p.main.currentHost+"."+p.memState];if(e){p.totalmem=p.totalmem||p.main.objects["system.host."+p.main.currentHost].native.hardware.totalmem/1048576;var t=Math.round(e.val/p.totalmem*100),n=p.$tab.find("#freeMem"),i=tdp(e.val);i!==n.text()&&(n.html('<span class="highlight '+(t<10?"high-mem":"")+'">'+i+"</span>"),p.$tab.find("#freeMemPercent").html('<span class="highlight">'+t+"%</span>"))}else p.$tab.find(".free-mem-label").hide()}function l(){var e=p.main.states["system.host."+p.main.currentHost+".diskSize"],t=p.main.states["system.host."+p.main.currentHost+".diskFree"],n=p.main.states["system.host."+p.main.currentHost+".diskWarning"];if(t&&t.val&&e&&e.val){n=n?parseFloat(n.val):5;var i=p.$tab.find("#diskFree"),a=Math.round(t.val/e.val*1e3)/10;i.html('<span class="highlight '+(a<n?"system-warning":"")+'">'+a+"</span>"),i.parent().attr("title",_("Size: %s, Free: %s",p.main.formatBytes(1024*e.val*1024),p.main.formatBytes(1024*t.val*1024)))}else p.$tab.find(".tab-instances-info-disk").hide()}function M(e){var t,n=p.main.objects[e]&&p.main.objects[e].common||{};return t=n.enabled&&"daemon"===n.mode&&p.main.states[e+".memRss"]?(t=p.main.states[e+".memRss"].val,t=parseFloat(t)||0,n.memoryLimitMB&&n.memoryLimitMB<=t?'<span class="high-mem">'+t.toFixed(1)+" MB</span>":t.toFixed(1)+" MB"):""}function d(e,t,n,i){var a,s=p.main.objects[t]&&p.main.objects[t].common||{},o=t.split("."),r=o[2],c=o[3];if("tile"===n)a=i?"":'<div class="instance-adapter" data-instance-id="'+t+'">',a+=i?"":"</div>";else{a=i?"":'<tr class="instance-adapter" data-instance-id="'+t+'">';var l=s.localLinks||s.localLink||"",d=l?p.replaceInLink(l,r,c):"";l&&(l="object"==typeof d?'<a href="'+d.__first+'" target="_blank">':'<a href="'+d+'" target="_blank">'),a+='<td class="instance-state" style="text-align: center"><div class="instance-led" data-instance-id="'+t+'"></div></td>',a+="<td>"+(s.icon?l+'<img src="adapter/'+r+"/"+s.icon+'" class="instance-image" data-instance-id="'+t+'"/>':"")+(l?"</a>":"")+"</td>",a+='<td style="padding-left: 0.5em" data-instance-id="'+t+'" class="instance-name"><b>'+r+"."+c+"</b></td>";var u=s.onlyWWW||s.enabled;a+='<td style="text-align: left;" class="m"><button data-instance-id="'+t+'" class="instance-stop-run small-button '+(s.onlyWWW?"small-button-empty":"")+'" title="dynamic" ><i class="material-icons">pause</i></button><button data-instance-id="'+t+'" class="instance-settings small-button '+(s.noConfig?"small-button-empty":"")+'" title="'+_("config")+'"><i class="material-icons">build</i></button><button data-instance-id="'+t+'" class="instance-reload small-button '+(s.onlyWWW?"small-button-empty":"")+" "+(u?"":"disabled")+'" title="'+_("reload")+'"><i class="material-icons">refresh</i></button>',a+='<button data-instance-id="'+t+'" class="instance-del small-button" title="'+_("delete")+'"><i class="material-icons">delete</i></button>'+(d?'<button data-instance-id="'+t+'" class="instance-web small-button '+(d?"":"small-button-empty")+" "+(u?"":"disabled")+'" title="'+_("open web page")+'" data-link="'+("object"!=typeof d?d:"")+'"><i class="material-icons">input</i></button>':"")+"</td>";var m=s.titleLang||s.title;if("object"==typeof m&&(m=m[systemLang]||m.en),a+='<td title="'+(l?_("Click on icon"):"")+'" style="padding-left: 0.5em" data-name="title" data-value="'+(m||"")+'" class="instance-editable" data-instance-id="'+t+'">'+(m||"")+"</td>",1<p.main.tabs.hosts.list.length){if(!p.hostsText){p.hostsText="";for(var g=0;g<p.main.tabs.hosts.list.length;g++){var h=p.main.tabs.hosts.list[g]||"";p.hostsText+=(p.hostsText?";":"")+h.name}}a+='<td style="padding-left: 0.5em" data-name="host" data-value="'+(s.host||"")+'" class="instance-editable" data-instance-id="'+t+'" data-options="'+p.hostsText+'">'+(s.host||"")+"</td>"}a+='<td data-name="schedule" data-value="'+("schedule"===s.mode&&s.schedule||"")+'" style="text-align: center" class="'+("schedule"===s.mode?"instance-schedule":"")+'" data-instance-id="'+t+'">'+("schedule"===s.mode&&s.schedule||"")+"</td>",p.main.config.expertMode&&(a+='<td data-name="restartSchedule" data-value="'+(s.restartSchedule||"")+'" style="text-align: center" class="instance-schedule m" data-instance-id="'+t+'">'+(s.restartSchedule||"")+"</td>",a+='<td data-name="loglevel" data-value="'+(s.loglevel||"")+'" style="text-align: center" class="instance-editable" data-instance-id="'+t+'" data-options="silly:silly;debug:debug;info:info;warn:warn;error:error">'+(s.loglevel||"")+"</td>",a+='<td data-name="memoryLimitMB" data-value="'+(s.memoryLimitMB||"")+'" style="text-align: center" class="instance-editable" data-instance-id="'+t+'">'+(s.memoryLimitMB||"")+"</td>",u&&p.main.states[t+".inputCount"]&&p.main.states[t+".outputCount"]?a+='<td style="text-align: center"><span title="in" data-instance-id="'+t+'" class="instance-in">&#x21E5;'+p.main.states[t+".inputCount"].val+'</span> / <span title="out" data-instance-id="'+t+'" class="instance-out">&#x21A6;'+p.main.states[t+".outputCount"].val+"</span></td>":a+='<td style="text-align: center"><span title="in" data-instance-id="'+t+'" class="instance-in"></span> / <span title="out" data-instance-id="'+t+'" class="instance-out"></span></td>'),a+='<td class="memUsage" style="text-align: center" data-instance-id="'+t+'">'+M(t)+"</td>",a+=i?"":"</tr>"}i?p.$tab.find('.instance-adapter[data-instance-id="'+t+'"]').html(a):e.append(a),p.initButtons(t,d),f(t),p.$tab.find('.instance-editable[data-instance-id="'+t+'"]').on("click",y).addClass("select-id-quick-edit"),p.$tab.find('.instance-schedule[data-instance-id="'+t+'"]').each(function(){$(this).find("button").length||($(this).append('<button class="instance-schedule-button small-button" data-instance-id="'+t+'" data-name="'+$(this).data("name")+'" title="'+_("Set CRON schedule for restarts")+'"><i class="material-icons">schedule</i></button>'),$(this).find("button").on("click",function(){var n=$(this).data("name"),i=$(this).data("instance-id");!function(e,t){e=(e||"").replace(/"/g,"").replace(/'/g,"");try{setupCron(e,t)}catch(e){alert(_("Cannot parse value as cron"))}}(p.main.objects[i].common[n]||"",function(e){if(null!==e){var t={common:{}};t.common[n]=e,p.main.socket.emit("extendObject",i,t,function(e){e&&p.main.showError(e)})}})}))}),p.$tab.find('.instance-name[data-instance-id="'+t+'"]').on("click",function(){var e=p.$tab.find('.instance-settings[data-instance-id="'+$(this).data("instance-id")+'"]');e.hasClass("small-button-empty")||e.trigger("click")}).css("cursor","pointer")}function u(e){void 0===e&&(e=p.$tab.find(".instances-filter").val());var t=[];if(e)for(var n=new RegExp(e),i=0;i<p.list.length;i++){var a=p.main.objects[p.list[i]];if(a&&a.common){var s="hide",o=a.common.titleLang||a.common.title;"object"==typeof o&&(o=o[systemLang]||o.en),a.common.name&&n.test(a.common.name)?s="show":o&&n.test(o)?s="show":"true"===e?s=p.$grid.find('.instance-adapter[data-instance-id="'+p.list[i]+'"]').find("instance-led").hasClass("led-green")?"show":"hide":"false"===e&&(s=p.$grid.find('.instance-adapter[data-instance-id="'+p.list[i]+'"]').find("instance-led").hasClass("led-green")?"hide":"show"),"show"===s&&p.filterHost&&a.common.host!==p.main.currentHost&&(s="hide"),"hide"===s&&t.push(p.list[i]),p.$grid.find('.instance-adapter[data-instance-id="'+p.list[i]+'"]')[s]()}else p.$grid.find('.instance-adapter[data-instance-id="'+p.list[i]+'"]').hide()}else if(p.filterHost)for(var r=0;r<p.list.length;r++){var c=p.main.objects[p.list[r]];if(c&&c.common){var l="hide";c.common.host===p.main.currentHost&&(l="show"),p.$grid.find('.instance-adapter[data-instance-id="'+p.list[r]+'"]')[l]()}else p.$grid.find('.instance-adapter[data-instance-id="'+p.list[r]+'"]').hide()}else p.$grid.find(".instance-adapter").show();var d=!1;p.$grid.find(".instance-adapter").each(function(){if($(this).is(":visible"))return!(d=!0)}),d?p.$grid.find(".filtered-out").hide():p.$grid.find(".filtered-out").show()}function y(e){var t=$(this),i=t.data("instance-id"),a=t.data("name"),n=t.data("options"),s=t.data("value"),o=this.innerHTML,r=t.css("text-align");t.css("text-align","left"),t.off("click").removeClass("select-id-quick-edit").css("position","relative");var c,l="cursor: pointer; position: absolute;width: 16px; height: 16px; top: 2px; border-radius: 6px; z-index: 3; background-color: lightgray";if(n){var d=n.split(";");c='<select style="width: calc(100% - 50px); z-index: 2">';for(var u=0;u<d.length;u++){var m=d[u].split(":");c+='<option value="'+m[0]+'">'+(m[1]||m[0])+"</option>"}c+="</select>"}c=c||'<input style="width: 100%; z-index: 2" type="text"/>';var g=null;t.html(c+'<div class="ui-icon ui-icon-check select-id-quick-edit-ok" style="margin-top: 0.45em;'+l+';right: 22px"></div><div class="cancel ui-icon ui-icon-close select-id-quick-edit-cancel" style="margin-top: 0.45em;'+l+';right: 2px" title="'+_("cancel")+'" ></div>');var h=n?t.find("select"):t.find("input");t.find(".select-id-quick-edit-cancel").off("click").on("click",function(e){g&&clearTimeout(g),g=null,e.preventDefault(),e.stopPropagation(),t.html(o).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r)}),t.find(".select-id-quick-edit-ok").off("click").on("click",function(){t.trigger("blur")}),h.val(s),h.blur(function(){g&&clearTimeout(g),g=setTimeout(function(){g=null;var n=$(this).val();s=JSON.stringify(n)!==JSON.stringify(s)?(p.main.socket.emit("getObject",i,function(e,t){t?(t.common=t.common||{},t.common[a]=n,"title"===a&&t.common.titleLang&&delete t.common.titleLang,p.main.socket.emit("setObject",t._id,t,function(e){e&&p.main.showError(e)})):console.log("Object "+i+" does not exist: "+e)}),'<span style="color: pink">'+s+"</span>"):o,t.html(s).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r)}.bind(this),100)}).on("keyup",function(e){13===e.which&&$(this).trigger("blur"),27===e.which&&(void 0===s&&(s=""),t.html(s).off("click").on("click",y).addClass("select-id-quick-edit").css("text-align",r))}),"object"==typeof e&&(e.preventDefault(),e.stopPropagation()),setTimeout(function(){h.focus()},100)}this.$tab=$("#tab-instances"),this.$grid=$("#grid-instances"),this.$gridHead=$("#grid-instances-head"),this.inited=!1,this.main=i,this.list=[],this.hostsText=null,this.filterHost=!1,this.memState="memAvailable",window.tdp||(window.tdp=function(e,t){return isNaN(e)?"":e.toFixed(t||0).replace(".",",").replace(/\B(?=(\d{3})+(?!\d))/g,".")}),this.replaceInLink=function(e,t,n){if("object"!=typeof e)return o(e,t,n);var i,a=JSON.parse(JSON.stringify(e));for(var s in a)a.hasOwnProperty(s)&&(a[s]=o(a[s],t,n),i||(i=a[s]));return a.__first=i,a},this.prepare=function(){var e=p.$tab.find(".instances-filter"),t=p.$tab.find(".instances-filter-clear");e.on("change",function(){var e=$(this).val();e?($(this).addClass("input-not-empty"),t.show()):($(this).removeClass("input-not-empty"),t.hide()),p.main.saveConfig("instancesFilter",e),u(e)}).on("keyup",function(){p.filterTimeout&&clearTimeout(p.filterTimeout),p.filterTimeout=setTimeout(function(){e.trigger("change")},300)}),p.main.config.instancesFilter&&"{"!==p.main.config.instancesFilter[0]?(e.addClass("input-not-empty").val(p.main.config.instancesFilter),t.show()):t.hide(),p.$tab.find(".btn-instances-expert-mode").on("click",function(){p.main.config.expertMode=!p.main.config.expertMode,p.main.saveConfig("expertMode",p.main.config.expertMode),p.updateExpertMode(),p.main.tabs.adapters.updateExpertMode()}),p.main.config.expertMode&&p.$tab.find(".btn-instances-expert-mode").addClass("red lighten-3"),p.$tab.find(".btn-instances-reload").on("click",function(){p.init(!0,!0)}),t.on("click",function(){e.val("").trigger("change")}),this.$tab.find(".btn-instances-host").off("click").on("click",function(){p.filterHost=!p.filterHost,p.filterHost?p.$tab.find(".btn-instances-host").addClass("red lighten-3"):p.$tab.find(".btn-instances-host").removeClass("red lighten-3"),p.main.saveConfig("instancesFilterHost",p.filterHost),setTimeout(function(){u()},50)}),this.filterHost=this.main.config.instancesFilterHost||!1,this.filterHost?this.$tab.find(".btn-instances-host").addClass("red lighten-3"):this.$tab.find(".btn-instances-host").removeClass("red lighten-3")},this.updateExpertMode=function(){p.init(!0),p.main.config.expertMode?p.$tab.find(".btn-instances-expert-mode").addClass("red lighten-3"):p.$tab.find(".btn-instances-expert-mode").removeClass("red lighten-3")},this.replaceLink=function(n,i,a,s){var o;(n=n.replace(/%/g,"")).match(/^native_/)&&(n=n.substring(7)),-1===n.indexOf("_")?o=[i+"."+a,n]:(o=n.split("_"))[0].match(/\.[0-9]+$/)||(o[0]+=".0"),"protocol"===o[1]&&(o[1]="secure"),"instance"!==n?this.main.socket.emit("getObject","system.adapter."+o[0],function(e,t){t&&setTimeout(function(){var e;(e=s?p.$tab.find("#"+s).data("src"):p.$tab.find("#a_"+i+"_"+a).attr("href"))&&(e="secure"===o[1]?e.replace("%"+n+"%",t.native[o[1]]?"https":"http"):-1===e.indexOf("%"+n+"%")?e.replace("%native_"+n+"%",t.native[o[1]]):e.replace("%"+n+"%",t.native[o[1]]),s?p.$tab.find("#"+s).data("src",e):p.$tab.find("#a_"+i+"_"+a).attr("href",e))},0)}):setTimeout(function(){var e;e=(e=s?p.$tab.find("#"+s).data("src"):p.$tab.find("#a_"+i+"_"+a).attr("href")).replace("%instance%",a),s?p.$tab.find("#"+s).data("src",e):p.$tab.find("#a_"+i+"_"+a).attr("href",e)},0)},this._replaceLink=function(n,i,a,s,o){var r;(i=i.replace(/%/g,"")).match(/^native_/)&&(i=i.substring(7)),-1===i.indexOf("_")?r=[a+"."+s,i]:(r=i.split("_"))[0].match(/\.[0-9]+$/)||(r[0]+=".0"),"protocol"===r[1]&&(r[1]="secure"),this.main.socket.emit("getObject","system.adapter."+r[0],function(e,t){n=t&&n?"secure"===r[1]?n.replace("%"+i+"%",t.native[r[1]]?"https":"http"):-1===n.indexOf("%"+i+"%")?n.replace("%native_"+i+"%",t.native[r[1]]):n.replace("%"+i+"%",t.native[r[1]]):(console.log("Cannot get link "+r[1]),n.replace("%"+i+"%","")),setTimeout(function(){o(n,a,s)},0)})},this._replaceLinks=function(e,t,n,i,a){if(!e)return a(e,t,n,i);var s=e.match(/%(\w+)%/g);return s?"%ip%"===s[0]?(e=e.replace("%ip%",location.hostname),void this._replaceLinks(e,t,n,i,a)):"%instance%"===s[0]?(e=e.replace("%instance%",n),void this._replaceLinks(e,t,n,i,a)):void this._replaceLink(e,s[0],t,n,function(e,t,n){this._replaceLinks(e,t,n,i,a)}.bind(this)):a(e,t,n,i)},this._postInit=function(e,t){if(this.main.currentHost&&void 0!==this.$grid&&(!this.$grid.data("inited")||e)){this.$grid.data("inited",!0),this.list.sort();for(var n=[],i=this.list.length-1;0<=i;i--)this.main.objects[this.list[i]]&&this.main.objects[this.list[i]].common&&!this.main.objects[this.list[i]].common.localLink&&!this.main.objects[this.list[i]].common.localLinks&&this.main.objects[this.list[i]].common.noConfig&&(n.push(this.list[i]),this.list.splice(i,1));for(this.list.sort(),n.sort(),i=0;i<n.length;i++)this.list.push(n[i]);o="<tr>",o+='<th style="width: calc(2em - 6px); border-right-color: transparent; overflow: visible"><span style="overflow:visible;" >'+_("instance")+"</span></th>",o+='<th style="width: calc(2em - 6px); border-left-color: transparent; border-right-color: transparent;"></th>',o+='<th style="width: '+(p.main.config.expertMode?10:12)+'em; border-left-color: transparent;"></th>',o+='<th style="width: 12.8em">'+_("actions")+"</th>",o+='<th style="text-align: left">'+_("title")+"</th>",1<p.main.tabs.hosts.list.length&&(o+='<th style="width: 10em">'+_("host")+"</th>"),o+='<th style="width: 8em">'+_("schedule_group")+"</th>",p.main.config.expertMode&&(o+='<th style="width: 8em">'+_("restart")+"</th>",o+='<th style="width: 8em">'+_("loglevel")+"</th>",o+='<th style="width: 8em">'+_("memlimit")+"</th>",o+='<th style="width: 8em">'+_("events")+"</th>"),o+='<th style="width: 8em">'+_("RAM usage")+"</th>",p.$gridHead.html(o),this.$grid.html("");for(var a=Date.now(),s=0;s<this.list.length;s++){this.main.objects[this.list[s]]&&d(this.$grid,this.list[s],this.main.config.instanceForm)}console.log(Date.now()-a),this.$grid.append('<tr class="filtered-out"><td></td><td></td><td colspan="20" style="padding-left: 1em">'+_("Filtered out")+"</td></tr>"),p.$tab.find("#currentHost").html(this.main.currentHost),1<p.main.tabs.hosts.list.length?this.$tab.find(".btn-instances-host").show():(this.$tab.find(".btn-instances-host").hide(),this.filterHost=!1),u(),r(),c(),l(),p.restoreScroll(),t&&p.main.showToast(p.$tab.find(".main-toolbar-table"),_("Updated"))}var o},this.getInstances=function(a){this.main.socket.emit("getForeignObjects","system.adapter.*","state",function(e,t){for(var n in t)t.hasOwnProperty(n)&&(p.main.objects[n]=t[n]);p.main.socket.emit("getForeignStates","*.info.connection",function(e,t){for(var n in t)t.hasOwnProperty(n)&&(p.main.states[n]=t[n]);p.main.socket.emit("getForeignStates","system.adapter.*",function(e,t){for(var n in t)t.hasOwnProperty(n)&&(p.main.states[n]=t[n]);p.main.socket.emit("getForeignObjects","system.adapter.*","instance",function(e,t){for(var n in p.main.instances.splice(0,p.main.instances.length),t)if(t.hasOwnProperty(n)){var i=t[n];"instance"===(p.main.objects[n]=i).type&&p.main.instances.push(n)}a&&a()})})})})},this.init=function(e,t){if(!this.inited||e)if(this.main.objectsLoaded){var n=0;n++,this.getInstances(function(){--n||p._postInit(e,t)}),n++,this.main.tabs.hosts.getHosts(function(){--n||p._postInit(e,t)}),this.inited||(this.inited=!0,this.main.subscribeObjects("system.adapter.*"),this.main.subscribeStates("system.adapter.*"),this.main.subscribeObjects("system.host.*"),this.main.subscribeStates("system.host.*"),this.main.subscribeStates("*.info.connection"))}else setTimeout(function(){p.init(e,t)},250)},this.saveScroll=function(){this.scrollTop=this.$tab.find(".grid-main-div").scrollTop()},this.restoreScroll=function(){this.scrollTop&&this.$tab.find(".grid-main-div").scrollTop(this.scrollTop)},this.destroy=function(){this.inited&&(this.saveScroll(),this.$grid.data("inited",!1),this.inited=!1,this.main.unsubscribeObjects("system.adapter.*"),this.main.unsubscribeStates("system.host.*"),this.main.unsubscribeObjects("system.host.*"),this.main.unsubscribeStates("system.adapter.*"),this.main.unsubscribeStates("*.info.connection"))},this.stateChange=function(e,t){if(this.main.states[e]=t,this.$grid){var n=e.split("."),i=n.pop();if(e=n.join("."),t){if("diskFree"===i||"diskWarning"===i)l();else if(i===p.memState)c();else if("memRss"===i){r();var a=p.$tab.find('.memUsage[data-instance-id="'+e+'"]'),s=M(e);a.length&&a.text()!==s&&a.html('<span class="highlight">'+s+"</span>")}else"outputCount"===i?p.$tab.find('.instance-out[data-instance-id="'+e+'"]').html('<span class="highlight">&#x21A6;'+t.val+"</span>"):"inputCount"===i&&p.$tab.find('.instance-in[data-instance-id="'+e+'"]').html('<span class="highlight">&#x21E5;'+t.val+"</span>");if(-1!==this.list.indexOf(e))return void("alive"!==i&&"connected"!==i||f(e));e="system.adapter."+n[0]+"."+n[1],-1!==this.list.indexOf(e)&&"connection"===i&&f(e)}}},this.objectChange=function(e,t,n){if(e.match(/^system\.adapter\.[-\w]+\.[0-9]+$/))if(t)-1===this.list.indexOf(e)?(this.list.push(e),this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200),t.common.noConfig||setTimeout(function(){-1===window.location.hash.indexOf("/config/")&&p.main.navigate({tab:"instances",dialog:"config",params:e})},2e3)):-1!==e.indexOf(".web.")?(this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200)):this.$grid.find('.instance-adapter[data-instance-id="'+e+'"]').html(d(this.$grid,e,this.main.config.instanceForm,!0));else{var i=this.list.indexOf(e);-1!==i&&(this.list.splice(i,1),this.$grid.find('.instance-adapter[data-instance-id="'+e+'"]').remove())}else e.match(/^system\.host\.[-\w]+$/)&&(this.updateTimer&&clearTimeout(this.updateTimer),this.updateTimer=setTimeout(function(){p.updateTimer=null,p.init(!0)},200))},this.initButtons=function(e,t){e=e?'[data-instance-id="'+e+'"]':"";var n=p.$grid.find(".instance-edit"+e).off("click").on("click",function(){p.onEdit($(this).attr("data-instance-id"))});n.find(".ui-button-icon-primary").length||n.attr("title",_("edit")),(n=p.$grid.find(".instance-settings"+e).off("click").on("click",function(){p.main.navigate({tab:"instances",dialog:"config",params:$(this).data("instance-id")})})).each(function(){var e=$(this).attr("data-instance-id");i.objects[e]&&i.objects[e].common&&i.objects[e].common.noConfig&&$(this).addClass("disabled")}),n=p.$grid.find(".instance-reload"+e).off("click").on("click",function(){p.main.socket.emit("extendObject",$(this).attr("data-instance-id"),{},function(e){e&&p.main.showError(e)})}),n=p.$grid.find(".instance-del"+e).off("click").on("click",function(){var t=$(this).attr("data-instance-id");if(p.main.objects[t]&&p.main.objects[t].common&&p.main.objects[t].common.host){var e=t.replace(/^system\.adapter\./,"");p.main.confirmMessage(_("Are you sure you want to delete the instance <b>%s</b>?",e),null,"help",function(e){e&&p.main.cmdExec(p.main.objects[t].common.host,"del "+t.replace("system.adapter.",""),function(e){e||p.main.tabs.adapters.init(!0)})})}}),n=p.$grid.find(".instance-issue"+e).off("click").on("click",function(){p.main.navigate({tab:"instances",dialog:"issue",params:$(this).data("instance-id")})}),p.$grid.find(".instance-image"+e).each(function(){$(this).data("installed")||($(this).data("installed",!0),$(this).hover(function(){var e='<div class="icon-large" style="left: '+Math.round($(this).position().left+$(this).width()+5)+'px;"><img src="'+$(this).attr("src")+'"/></div>',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),i<0&&(i=0),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)}))}),(n=p.$grid.find(".instance-stop-run"+e).off("click").on("click",function(){var e=$(this).attr("data-instance-id");$(this).addClass("disabled"),p.main.socket.emit("extendObject",e,{common:{enabled:!p.main.objects[e].common.enabled}},function(e){e&&p.main.showError(e)})})).find(".ui-button-icon-primary").length||n.each(function(){var e=$(this).attr("data-instance-id");p.main.objects[e].common.enabled?n.addClass("instance-running").attr("title",_("Activated. Click to stop.")).find("i").html("pause"):n.removeClass("instance-running").attr("title",_("Deactivated. Click to start.")).find("i").html("play_arrow")}),n=p.$grid.find(".instance-web"+e).off("click").on("click",function(){var e=$(this).data("link");if("object"==typeof e){var t="";for(var n in e)if(e.hasOwnProperty(n)&&"__first"!==n){var i=e[n].match(/^https?:\/\/[-.\w]+:(\d+)\/?/),a=e[n].match(/^https:\/\//);t+='<li data-link="'+e[n]+'" data-instance-id="'+$(this).data("instance-id")+'" class="instances-menu-link"><b>'+n+(i?" :"+i[1]:"")+(a?" - SSL":"")+"</b></li>"}t+='<li class="instances-menu-link">'+_("Close")+"</li>";var s=$("#instances-menu");s.data("inited")&&s.menu("destroy");var o=$(this).position();s.html(t),s.data("inited")||(s.data("inited",!0),s.mouseleave(function(){$(this).hide()})),s.menu().css({left:o.left,top:o.top}).show(),s.find(".instances-menu-link").off("click").on("click",function(){$(this).data("link")&&window.open($(this).data("link"),$(this).data("instance-id")),$("#instances-menu").hide()})}else window.open($(this).data("link"),$(this).data("instance-id"))}),"object"==typeof t&&n.data("link",t)},this.resize=function(e,t){}}function Intro(e){var T=this;function t(e){var t=Math.floor(e/86400);e%=86400;var n=Math.floor(e/3600);n<10&&(n="0"+n),e%=3600;var i=Math.floor(e/60);i<10&&(i="0"+i),e%=60,(e=Math.floor(e))<10&&(e="0"+e);var a="";return t&&(a+=t+" "+_("daysShortText")+" "),a+=n+":"+i+":"+e}this.$tab=$("#tab-intro"),this.$tiles=this.$tab.find(".tab-intro-cards"),this.main=e,this.inited=!1,this.$template=$("#intro-template");var d={Uptime:t,"System uptime":t,RAM:function(e){var t=Math.floor(e/1073741824*10)/10;e%=1073741824;var n=Math.floor(e/1048576*10)/10,i="";return i+=1<t?t+" GB ":n+" MB "},Speed:function(e){return e+" MHz"},"Disk size":T.main.formatBytes,"Disk free":T.main.formatBytes};function u(e){var t=$("<textarea>");$(this).append(t),t.val($(this).data("clippy")),t.trigger("select"),document.execCommand("copy"),t.remove(),e.preventDefault(),e.stopPropagation(),T.main.showToast(T.$tiles,_("copied"))}function C(e){var t,c=T.$template.clone();if(c.removeAttr("id"),c.addClass("card-system-info"),c.find(".btn-small").addClass("disabled"),c.find(".card-titles").text(e.name),c.find(".btn-card-enabled").data("host",e.id),!1===T.main.systemConfig.common.intro[e.id]){if(!T.$tab.hasClass("edit-active"))return null;c.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close")}T.main.objects[e.id]&&T.main.objects[e.id].common&&(t=T.main.objects[e.id].common.icon),c.find(".card-image-img").attr("src",t||"img/no-image.png"),c.find(".card-content-text").html('<div class="preloader-wrapper small active">\n <div class="spinner-layer spinner-green-only">\n <div class="circle-clipper left">\n <div class="circle"></div>\n </div><div class="gap-patch">\n <div class="circle"></div>\n </div><div class="circle-clipper right">\n <div class="circle"></div>\n </div>\n </div>\n </div>');var l=setTimeout(function(){l&&(l=null,c.find(".btn-small").addClass("disabled"),c.find(".card-content-text").html(_("offline")))},6e3);return d["Disk size"]=d["Disk size"]||T.main.formatBytes,d["Disk free"]=d["Disk size"]||T.main.formatBytes,T.main.socket.emit("sendToHost",e.id,"getHostInfo",null,function(e){clearTimeout(l),l=null,"permissionError"===e?console.error('May not read "getHostInfo"'):e?c.find(".btn-small").removeClass("disabled"):console.error('Cannot read "getHostInfo"');var t=T.main.states["system.host."+T.main.currentHost+".diskWarning"];t=t?parseFloat(t.val):5;var n=0<e["Disk size"]&&e["Disk free"]&&Math.round(e["Disk free"]/e["Disk size"]*100)<t,i='<div class="card-content-text">';if(e){for(var a in i+="<ul>",e)!e.hasOwnProperty(a)||"Platform"!==a&&"NPM"!==a&&"RAM"!==a&&"Node.js"!==a||(i+="<li><b>"+_(a)+": </b>",i+='<span class="system-info" data-attribute="'+a+'">'+(d[a]?d[a](e[a]):e[a]||" --")+"</span></li>");n&&(i+="<li><b>"+_("Disk free")+": </b>",i+='<span class="system-info system-warning" data-attribute="Disk free">'+(d["Disk free"]?d["Disk free"](e["Disk free"]):e["Disk free"]||" --")+"</span></li>",i+="<li><b>"+_("Disk size")+": </b>",i+='<span class="system-info" data-attribute="Disk size">'+(d["Disk size"]?d["Disk size"](e["Disk size"]):e["Disk size"]||" --")+"</span></li>"),i+="</ul>"}i+="</div>",c.find(".card-content-text").replaceWith($(i)),i='<div class="card-reveal"><h5>'+_("Info")+'</h5><a class="btn-info" title="'+_("Copy to clipboard")+'"><i class="material-icons">content_copy</i></a><span class="card-title grey-text text-darken-4"><i class="material-icons right">close</i></span>';var s=[];if(e){for(var o in i+="<ul>",e)if(e.hasOwnProperty(o)){i+="<li><b>"+_(o)+": </b>";var r=d[o]?d[o](e[o]):e[o];s.push(o+": "+r),i+="Disk free"===o&&n?'<span class="system-info system-warning" data-attribute="'+o+'">'+r+"</span></li>":'<span class="system-info" data-attribute="'+o+'">'+r+"</span></li>"}i+="</ul>"}i+="</div>",c.find(".card-reveal").replaceWith($(i)),T.$tab.hasClass("edit-active")?c.find(".btn-small").hide():c.find(".btn-info").data("clippy",s.join("\r\n")).on("click",u)}),c}function D(e,t,n,i,a,s,o){var r=T.$template.clone();r.removeAttr("id");var c=a.replace(/^https?:\/\//,""),l=c.indexOf("/");if(-1!==l&&(c=c.substring(0,l)),"admin"===e&&c===location.host)return null;if("web"===e)return null;if("vis-web-admin"!==e&&e.match(/^vis-/))return null;if(e.match(/^icons-/))return null;if(i&&i.noIntro)return null;r.find(".btn-card-enabled").data("instance",e+"."+t+(n&&n.name?"."+n.name:"")).data("web",s),o?r.on("click",function(){T.$tab.hasClass("edit-active")||window.open($(this).find(".url").attr("href"))}):r.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close"),r.find(".url").attr("href","object"==typeof a?a._first:a||"").text(c+(s?" ("+s+")":"")),r.find(".card-image-img").attr("src",i.icon?"adapter/"+e+"/"+i.icon:"img/no-image.png"),n&&n.color&&r.find(".card-image").css("background",n.color);var d=n&&n.name||i.titleLang||i.title;"object"==typeof d&&(d=d[systemLang]||d.en),r.find(".card-titles").text(d||e);var u=i.desc;return"object"==typeof u&&(u=u[systemLang]||u.en),r.find(".card-content-text").text(u||""),r}function n(e,i){!function(e,t){var n,i,a,s=JSON.parse(JSON.stringify(e)),o=[];s.sort(function(e,t){return e=T.main.objects[e]&&T.main.objects[e].common,t=(t=T.main.objects[t]&&T.main.objects[t].common)||{},void 0===(e=e||{}).order&&void 0===t.order?e.name.toLowerCase()>t.name.toLowerCase()?1:e.name.toLowerCase()<t.name.toLowerCase()?-1:0:void 0===e.order?-1:void 0===t.order?1:e.order>t.order?1:e.order<t.order?-1:e.name.toLowerCase()>t.name.toLowerCase()?1:e.name.toLowerCase()<t.name.toLowerCase()?-1:0});var r=T.$tab.hasClass("edit-active"),c=[];for(n=0;n<s.length;n++){var l=T.main.objects[s[n]],d=l&&l.common;if(d&&(d.enabled||d.onlyWWW)&&(d.localLinks||d.localLink)){var u=d.localLinks||d.localLink||"",m=s[n].substring("system.adapter.".length).split("."),g=m[1];m=m[0];var h=u?T.main.tabs.instances.replaceInLink(u,m,g):"";a=null;var f=T.main.systemConfig.common.intro[m+"."+g];if("object"==typeof h){var p=!0;for(var b in h)if(h.hasOwnProperty(b)){if(i=!0,void 0!==f){if(p&&"object"!=typeof f){var M=f;f={},(T.main.systemConfig.common.intro[m+"."+g]=f)[b]=M}!1===f[b]&&(i=!1)}if(p=!1,!r&&!i)continue;-1===c.indexOf(h[b])&&((a=D(m,g,null,d,h[b],b,i))&&o.push(a),c.push(h[b]))}}else{if(i=!0,!r&&void 0!==f){if("object"==typeof f)for(var y in f)if(f.hasOwnProperty(y)){f=f[y],T.main.systemConfig.common.intro[m+"."+g]=f;break}!1===f&&(i=!1)}for(var v=d.welcomeScreen;v;){if(f=T.main.systemConfig.common.intro[m+"."+g+"."+v.name],!r&&void 0!==f){if("object"==typeof f)for(var w in f)if(f.hasOwnProperty(w)){f=f[w],T.main.systemConfig.common.intro[m+"."+g+"."+v.name]=f;break}!1===f&&(i=!1)}if(T.main.systemConfig.common.intro[m+"."+g+"."+v.name]=f,r||i){var j=h,N=j.match(/https?:\/\/[.\w\d-]+:\d+\/(.*)$/);N?j=j.replace(N[1],v.link):j+=v.link,j!==h&&-1===c.indexOf(j)&&((a=D(m,g,v,d,j,null,i))&&o.push(a),c.push(j))}v=v===d.welcomeScreenPro?d.welcomeScreen:null}if(!r&&!i)continue;-1===c.indexOf(h)&&((a=D(m,g,null,d,h,null,i))&&o.push(a),c.push(h))}}}for(var L=0;L<T.main.tabs.hosts.list.length;L++)(a=C(T.main.tabs.hosts.list[L]))&&o.push(a);t(null,o)}(e=e||T.main.instances,function(e,t){T.$tiles.html("");for(var n=0;n<t.length;n++)T.$tiles.append(t[n]);T.$tab.hasClass("edit-active")&&T.$tiles.find(".btn-card-enabled").on("click",function(){!$(this).hasClass("gray")?($(this).removeClass("blue").addClass("gray").find("i").text("close"),$(this).parent().addClass("card-disabled")):($(this).addClass("blue").removeClass("gray").find("i").text("check"),$(this).parent().removeClass("card-disabled"))}),i&&i()})}this.prepare=function(){this.$tab.find(".btn-edit").off("click").on("click",function(){T.$tab.addClass("edit-active"),n()}),this.$tab.find(".btn-edit-ok").off("click").on("click",function(){!function(n){var t=[];T.$tiles.find(".btn-card-enabled").each(function(){var e=$(this).data("instance");e?t.push({id:e,enabled:!$(this).hasClass("gray"),web:$(this).data("web")}):t.push({id:$(this).data("host"),enabled:!$(this).hasClass("gray")})});for(var e=T.main.systemConfig.common.intro,i=!0,a=0;a<t.length;a++){var s,o=t[a].id;if(t[a].web){if(void 0!==e[o]&&"object"!=typeof e[o]){var r=e[o];e[o]={},e[o][t[a].web]=r}s=!e[o]||void 0===e[o][t[a].web]||e[o][t[a].web]}else{if(void 0!==e[o]&&"object"==typeof e[o])for(var c in e[o])if(e[o].hasOwnProperty(c)){e[o]=e[o][c];break}s=void 0===e[o]||e[o]}t[a].enabled!==s&&(i=!0,t[a].web?(e[o]=e[o]||{},e[o][t[a].web]=t[a].enabled):e[o]=t[a].enabled)}i?T.main.socket.emit("getObject","system.config",function(e,t){t?(t.common.intro=T.main.systemConfig.common.intro,T.main.socket.emit("setObject",t._id,t,function(e){n&&n()})):n&&n()}):n&&n()}(function(){T.$tab.removeClass("edit-active"),n(),T.main.showToast(T.$tiles,_("Updated"))})}),this.$tab.find(".btn-edit-cancel").off("click").on("click",function(){T.$tab.removeClass("edit-active"),n()})},this.init=function(e){var i;this.inited&&!e||(this.main.objectsLoaded?(T.main.systemConfig.common.intro=T.main.systemConfig.common.intro||{},i=function(e,t){n(t,function(){T.restoreScroll()})},T.main.socket.emit("getObjectView","system","instance",{startkey:"system.adapter.",endkey:"system.adapter.香"},function(e,t){if(e)i&&i(e,[]);else if(0===t.rows.length)i&&i(e,[]);else{T.main.instances=[];for(var n=0;n<t.rows.length;n++)T.main.instances.push(t.rows[n].id),T.main.objects[t.rows[n].id]=t.rows[n].value;i&&i(e,T.main.instances)}}),this.inited||(this.inited=!0,this.main.subscribeObjects("system.adapter.*"),this.main.subscribeObjects("system.host.*"))):setTimeout(function(){T.init(e)},250))},this.saveScroll=function(){this.scrollTop=this.$tiles.scrollTop()},this.restoreScroll=function(){T.scrollTop&&T.$tiles.scrollTop(T.scrollTop)},this.destroy=function(){this.inited&&(this.saveScroll(),this.inited=!1,this.main.unsubscribeObjects("system.adapter.*"),this.main.unsubscribeObjects("system.host.*"))},this.objectChange=function(e){this.inited&&(e.match(/^system\.adapter\.[a-zA-Z0-9-_]+\.\d+$/)||e.match(/^system\.host\./))&&(this.updateTimeout&&(this.updateTimeout=clearTimeout(this.updateTimeout)),this.updateTimeout=setTimeout(function(){n()},1e3))}}function Issue(e){var a=this;this.$dialogIssue=$("#dialog-issue"),this.main=e,this.prepare=function(){},this.init=function(){if(!this.inited){this.inited=!0,showdown.setFlavor("github");var e=this.main.navigateGetParams(),t=e.replace(/^system\.adapter\./,""),n=this.main.objects[e];if(n&&n.common&&n.common.extIcon){var i=n.common.extIcon.split("/"),r=a.$dialogIssue.find("#result-issue");r.html('<div class="loader"><svg class="spinner" width="100%" height="100%" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">\n <circle class="path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle>\n</svg></div>');$.getJSON("https://api.github.com/repos/"+i[3]+"/"+i[4]+"/issues",function(e){var t=!1;for(var n in r.empty(),e)if(e.hasOwnProperty(n)){if("remove"===n)break;var i=e[n];if(!i.hasOwnProperty("pull_request")){t=!0;var a=$("#issueTable").children().clone(!0,!0);a.find(".collapsible-header-title").text(i.title),a.find(".goto").attr("href",i.html_url),a.find(".user").text(i.user.login),a.find(".form-row").html((new showdown.Converter).makeHtml(i.body).replace(/src="/g,'class="responsive-img" src="'));var s=new Date(new Date(i.created_at));if(a.find(".created").text(s.toLocaleDateString(systemLang,{weekday:"short",year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),0<i.labels.length)for(var o in i.labels)if(i.labels.hasOwnProperty(o)){if("remove"===o)break;a.find(".category").append('<a class="btn-floating btn-small translateT" style="background:#'+i.labels[o].color+';" title="'+i.labels[o].name+'"><span>'+i.labels[o].name+"</span></a>")}r.append(a),0}}t||r.append($('<li><h3 class="title">'+_("No bug")+"</h3></li>"))}).done(a.$dialogIssue.find(".collapsible").collapsible())}a.$dialogIssue.data("name",t),a.$dialogIssue.find(".title").html(_("Known bugs for")+": "+t),a.$dialogIssue.find(".dialog-system-buttons .btn-add").attr("href","https://github.com/"+i[3]+"/"+i[4]+"/issues/new"),a.$dialogIssue.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),a.main.navigate()})}},this.destroy=function(){this.inited&&(this.$dialogIssue.find(".collapsible").collapsible("destroy"),this.inited=!1)}}function Logs(t){var c=this;this.main=t,this.$tab=$("#tab-logs");var s,l,o,d,r={count:0,start:0,limit:2e3},u={host:"",severity:"",message:""},m={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null};this.prepare=function(){l=this.$tab.find("#log-outer"),s=this.$tab.find("#log-table"),o=this.$tab.find("#log-pause"),(d=new IobListHeader("log-outer-header",{list:l,colWidthOffset:1,prefix:"log-filter"})).doFilter=c.filter,d.add("combobox","from","host"),d.add("text","Time"),d.add("combobox","","severity",[{val:"",name:"debug"},{val:"silly",name:"silly"},{val:"info",name:"info"},{val:"warn",name:"warn"},{val:"error",name:"error"}]).$filter.attr("title",_("severity")),d.add("edit","Message","message"),this.$tab.find("#log-clear-on-disk").on("click",function(){c.main.confirmMessage(_("Log file will be deleted. Are you sure?"),null,null,function(e){e&&c.main.socket.emit("sendToHost",t.currentHost,"delLogs",null,function(e){e?c.main.showError(e):c.clear()})})}).addClass("ui-state-error"),this.$tab.find("#log-refresh").on("click",function(){c.clear()}),o.attr("title",_("Pause output")).on("click",function(){c.pause()}),m.$counterSpan=o.find("ui-button-text"),this.$tab.find("#log-clear").on("click",function(){c.clear(!1)}),$("#log-copy-text").on("click",function(){$(this).hide().html("")}),this.$tab.find("#log-copy").on("click",function(){var e='<span class="error">'+_("copy note")+"</span>";$("#log-copy-text").show().html(e+'<br><table style="width: 100%; font-size: 12px" id="log-copy-table">'+s.html()+"</table>");for(var t=c.$tab.find("#log-copy-table").find(".log-column-4"),n=0;n<t.length;n++){var i=$(t[n]);i.html(i.attr("title")),i.attr("title","")}})},this.init=function(e){if(!this.inited||e)if(this.main.currentHost){s.html("");var r=!this.inited;this.inited=!0,this.main.socket.emit("sendToHost",this.main.currentHost,"getLogs",200,function(o){setTimeout(function(){var e={message:"",severity:"debug",from:"",ts:""},t=o?o.pop():-1;-1!==t&&(t=parseInt(t),c.$tab.find("#log-size").html((_("Log size:")+" "+(t/1048576).toFixed(2)+" MB ").replace(/ /g,"&nbsp;")));for(var n=0,i=o.length;n<i;n++)if(o[n]){var a=o[n];if("-"===a[4]&&"-"===a[7]){a=a.replace(/(\[[0-9]+m)/g,""),e.ts=a.substring(0,23);var s=(a=a.substring(27)).indexOf(":");e.severity=a.substring(0,s),27===e.severity.charCodeAt(e.severity.length-1)&&(e.severity=e.severity.substring(0,e.severity.length-1)),27===e.severity.charCodeAt(0)&&(e.severity=e.severity.substring(1)),s=(a=a.substring(s+2)).indexOf(" "),e.from=a.substring(0,s),e.message=a.substring(s)}else e.message=a;c.add(e)}!function e(){$.fn.colResizable&&(l.is(":visible")?(l.colResizable({liveDrag:!0,partialRefresh:!0,marginLeft:5,postbackSafe:!0,onResize:function(e){return d.syncHeader()}}),d&&d.syncHeader()):setTimeout(function(){e()},200))}(),u.host=d.host.val(),u.message=d.message.val(),u.severity=d.severity.val(),r&&c.main.subscribeLogs(!0),c.main.socket.emit("readLogs",function(e,t){if(t&&t.length){var n="";t.reverse();for(var i=0;i<t.length;i++){var a=t[i].split("/").pop().replace(/yunkong2\.?/,"").replace(".log","");a[0]<="9"&&(n+='<li><a data-value="'+t[i]+'">'+a+"</a></li>")}t.sort();for(var s=0;s<t.length;s++){var o=t[s].split("/").pop().replace(/yunkong2\.?/,"").replace(".log","");"9"<o[0]&&(n+='<li><a data-value="'+t[s]+'">'+o+"</a></li>")}c.$tab.find("#log-files-btn").show().dropdown(),c.$tab.find("#log-files").html(n).find("a").on("click",function(){var e=$(this).data("value");e&&($(this).val(""),window.open(e,"_blank").focus())})}else c.$tab.find("#log-files").hide(),c.$tab.find("#log-files-btn").hide()})},0)})}else setTimeout(function(){c.init(e)},100)},this.destroy=function(){this.inited&&(this.inited=!1,this.main.subscribeLogs(!1))},this.add=function(e){if(s){if(e.message.substring(0,e.from.length)===e.from&&(e.message=e.message.substring(e.from.length+1)),m.mode)return m.list.push(e),m.counter++,m.counter>r.limit&&(m.overflow||(o.addClass("ui-state-error").attr("title",_("Message buffer overflow. Losing oldest")),m.overflow=!0),m.list.shift()),void m.$counterSpan.html(tdp(m.counter));if(r.count>=r.limit){var t=document.getElementById("log-line-"+(r.start+1));t&&(t.outerHTML=""),r.start++}else r.count++;e.from&&d&&d.host.checkAddOption(e.from,function(e){return{val:e.replace(/\./g,"-"),name:e}});var n="",i=e.from?e.from.replace(/\./g,"-"):"";u.host&&u.host!==i&&(n="display: none"),!n&&u.severity&&("debug"===u.severity&&"silly"===e.severity?n="display: none":"info"!==u.severity||"debug"!==e.severity&&"silly"!==e.severity?"warn"===u.severity&&"warn"!==e.severity&&"error"!==e.severity?n="display: none":"error"===u.severity&&"error"!==e.severity&&(n="display: none"):n="display: none"),!n&&u.message&&-1===e.message.indexOf(u.message)&&(n="display: none"),"error"===e.severity&&(c.$tabLogs=c.$tabLogs||$('a[href="#tab-logs"]'),c.$tabLogs.addClass("errorLog"));var a='<tr id="log-line-'+(r.start+r.count)+'" class="log-line log-severity-'+e.severity+" "+(i?"log-from-"+i:"")+'" style="'+n+'">';a+='<td class="log-column-1">'+(e.from||"")+"</td>",a+='<td class="log-column-2">'+this.main.formatDate(e.ts)+"</td>",a+='<td class="log-column-3">'+e.severity+"</td>",a+='<td class="log-column-4" title="'+e.message.replace(/"/g,"'")+'">'+e.message.substring(0,200).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</td></tr>",s.prepend(a)}},this.filter=function(){u.host=d.host.val(),u.message=d.message.val(),u.severity=d.severity.val(),"error"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide(),l.find(".log-severity-info").hide(),l.find(".log-severity-warn").hide()):("warn"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide(),l.find(".log-severity-info").hide()):("info"===u.severity?(l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").hide()):("silly"===u.severity?l.find(".log-severity-silly").show():l.find(".log-severity-silly").hide(),l.find(".log-severity-debug").show()),l.find(".log-severity-info").show()),l.find(".log-severity-warn").show()),l.find(".log-severity-error").show(),(u.host||u.message)&&l.find(".log-line").each(function(){u.host&&!$(this).hasClass("log-from-"+u.host)?$(this).hide():u.message&&-1===$(this).html().indexOf(u.message)&&$(this).hide()})},this.clear=function(e){void 0===e&&(e=!0),s.html(""),r.count=0,r.start=0,c.$tabLogs=c.$tabLogs||$('a[href="#tab-logs"]'),c.$tabLogs.removeClass("errorLog"),e&&setTimeout(function(){c.init(e)},0)},this.pause=function(){if(m.mode){m.mode=!1;for(var e=0;e<m.list.length;e++)this.add(m.list[e]);m.overflow=!1,m.list=[],m.counter=0,o.removeClass("yellow btn-pause-button-active").html('<i class="material-icons">pause</i>')}else o.addClass("yellow btn-pause-button-active"),m.$counterSpan=o,m.$counterSpan.html("0"),m.counter=0,m.mode=!0}}function Issue(e){var a=this;this.$dialog=$("#dialog-issue"),this.main=e,this.prepare=function(){},this.init=function(){if(!this.inited){this.inited=!0,showdown.setFlavor("github");var e=this.main.navigateGetParams(),t=e.replace(/^system\.adapter\./,""),n=this.main.objects[e];if(n&&n.common&&n.common.extIcon){var i=n.common.extIcon.split("/"),r=$("#result-issue");r.html('<div class="loader"><svg class="spinner" width="100%" height="100%" viewBox="0 0 66 66" xmlns="http://www.w3.org/2000/svg">\n <circle class="path" fill="none" stroke-width="6" stroke-linecap="round" cx="33" cy="33" r="30"></circle>\n</svg></div>');$.getJSON("https://api.github.com/repos/"+i[3]+"/"+i[4]+"/issues",function(e){var t=!1;for(var n in r.empty(),e)if(e.hasOwnProperty(n)){if("remove"===n)break;var i=e[n];if(!i.hasOwnProperty("pull_request")){t=!0;var a=$("#issueTable").children().clone(!0,!0);a.find(".collapsible-header-title").text(i.title),a.find(".goto").attr("href",i.html_url),a.find(".user").text(i.user.login),a.find(".form-row").html((new showdown.Converter).makeHtml(i.body).replace(/src="/g,'class="responsive-img" src="'));var s=new Date(new Date(i.created_at));if(a.find(".created").text(s.toLocaleDateString(systemLang,{weekday:"short",year:"numeric",month:"long",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit"})),0<i.labels.length)for(var o in i.labels)if(i.labels.hasOwnProperty(o)){if("remove"===o)break;a.find(".category").append('<a class="btn-floating btn-small translateT" style="background:#'+i.labels[o].color+';" title="'+i.labels[o].name+'"><span>'+i.labels[o].name+"</span></a>")}r.append(a),0}}t||r.append($('<li><h3 class="title">'+_("No bug")+"</h3></li>"))}).done(a.$dialog.find(".collapsible").collapsible())}a.$dialog.data("name",t),a.$dialog.find(".title").html(_("Known bugs for")+": "+t),a.$dialog.find(".dialog-system-buttons .btn-add").attr("href","https://github.com/"+i[3]+"/"+i[4]+"/issues/new"),a.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),a.main.navigate()})}},this.destroy=function(){this.inited&&(this.$dialog.find(".collapsible").collapsible("destroy"),this.inited=!1)}}function Objects(e){var c=this;this.$grid=$("#grid-objects"),this.subscribes={},this.main=e;var o=function(){if(c.$grid&&c.$grid.selectId)return o=c.$grid.selectId.bind(c.$grid),c.$grid.selectId.apply(c.$grid,arguments)};function r(t,e,n){for(var i=c.main.tabs.enums.list,a=[],s=0;s<i.length;s++)i[s].substring(0,"enum.".length+e.length+1)==="enum."+e+"."&&a.push(i[s]);!function t(n,i,a,s){if(i&&i.length){var e=i.pop();if(c.main.objects[e]&&c.main.objects[e].common){var o=0;if(c.main.objects[e].common.members&&c.main.objects[e].common.members.length){var r=c.main.objects[e].common.members.indexOf(n);-1!==r&&-1===a.indexOf(e)&&(c.main.objects[e].common.members.splice(r,1),o++,c.main.socket.emit("setObject",e,c.main.objects[e],function(e){e&&c.main.showError(e),--o||setTimeout(function(){t(n,i,a,s)},0)}))}-1===a.indexOf(e)||c.main.objects[e].common.members&&-1!==c.main.objects[e].common.members.indexOf(n)||(c.main.objects[e].common.members=c.main.objects[e].common.members||[],c.main.objects[e].common.members.push(n),o++,c.main.socket.emit("setObject",e,c.main.objects[e],function(e){e&&c.main.showError(e),--o||setTimeout(function(){t(n,i,a,s)},0)}))}o||setTimeout(function(){t(n,i,a,s)},0)}else s&&s()}(t,a,n,function(e){e&&c.main.showError(e),o("object",t,c.main.objects[t])})}function a(e){console.log("Subscribe: "+e),c.main.subscribeStates(e),c.main.socket.emit("getForeignStates",e,function(e,t){if(t)for(var n in t)console.log("Update "+n),t.hasOwnProperty(n)&&(!t[n]&&c.main.states[n]?(c.main.states[n]={val:null},c.stateChange(n,c.main.states[n])):c.main.states[n]&&c.main.states[n].ts===t[n].ts||(c.main.states[n]=t[n],c.stateChange(n,t[n])));else e&&console.error("requestStates error: "+e)})}function n(){for(var e in c.subscribes){if(c.subscribes.hasOwnProperty(e))c.main.objects[e]&&"state"===c.main.objects[e].type?(c.main.unsubscribeStates(e),console.log("Unsubscribe: "+e)):(c.main.unsubscribeStates(e+".*"),console.log("Unsubscribe: "+e+".*"))}}function s(n,i){if(n)for(var e in n)if(n.hasOwnProperty(e)&&n[e]){var a=n[e];return n[e]=null,void c.main.socket.emit("setObject",e,a,function(e){e?c.main.showError(e):"state"===a.type?c.main.socket.emit("getState",a._id,function(e,t){t&&null!==t.val||c.main.socket.emit("setState",a._id,a.common&&void 0!==a.common.def?a.common.def:null,!0),setTimeout(s,0,n,i)}):setTimeout(s,0,n,i)})}i&&i()}this.prepare=function(){$(document).on("click",".jump",function(e){return c.main.navigate({dialog:"editobject",params:$(this).attr("data-jump-to")}),e.preventDefault(),!1}),$("#load_grid-objects").show();var o=$("#dialog-new-object");o.modal(),o.find(".btn-add").off("click").on("click",function(){var e=o.find("#object-tab-new-object-name").val(),t=e.trim(),n=o.find("#object-tab-new-object-parent").val();t=n?n+"."+t:t;var i,a=o.find("#object-tab-new-object-type").val(),s=o.find("#object-tab-new-state-type").val();(t=t.replace(FORBIDDEN_CHARS,"_"),c.main.objects[t])?c.main.showError(_('Object "%s" yet exists!',t)):("state"===a?(i={_id:t,type:"state",common:{name:e,role:"",type:s,read:!0,write:!0,desc:_("Manually created")},native:{}},"boolean"===s?i.common.def=!1:"switch"===s?(i.common.type="boolean",i.common.def=!1,i.common.states="false:no;true:yes"):"string"===s?i.common.def="":"number"===s?(i.common.min=0,i.common.max=100,i.common.def=0,i.common.unit="%"):"enum"===s&&(i.common.type="number",i.common.min=0,i.common.max=5,i.common.def=0,i.common.states="0:zero;1:one;2:two;3:three;4:four;5:five")):i="channel"===a?{_id:t,type:"channel",common:{name:e,role:"",icon:"",desc:_("Manually created")},native:{}}:{_id:t,type:"device",common:{name:e,role:"",icon:"",desc:_("Manually created")},native:{}},c.main.socket.emit("setObject",t,i,function(e){e?c.main.showError(e):setTimeout(function(){c.main.navigate({dialog:"editobject",params:t+",def"})},1e3)}))}),o.find("#object-tab-new-object-type").select(),o.find("#object-tab-new-state-type").select(),o.find("#object-tab-new-object-name").on("keyup",function(){$(this).trigger("change")}).on("change",function(){var e=o.find("#object-tab-new-object-parent").val(),t=o.find("#object-tab-new-object-name").val();t=e?e+"."+t:t,o.find(".title").html(_("Add new object: %s",t))}),o.find("#object-tab-new-object-type").on("change",function(){"state"===$(this).val()?o.find(".object-tabe-new-object-tr").show():o.find(".object-tab-new-object-tr").hide()})},this.stateChange=function(e,t){this.$grid&&o("state",e,t)},this.objectChange=function(e,t,n){this.$grid&&o("object",e,t,n)},this.reinit=function(){this.main.dialogs.customs.check(),this.$grid&&(o("option","useHistory",this.main.dialogs.customs.customEnabled),o("reinit"))},this.saveScroll=function(){this.scrollTop=this.$grid.find(".grid-main-wh-div").scrollTop()},this.restoreScroll=function(){this.scrollTop&&this.$grid.find(".grid-main-wh-div").scrollTop(this.scrollTop)},this.init=function(e){if(!this.inited||e){if(e&&(n(),this.subscribes={}),void 0!==this.$grid){null===this.main.dialogs.customs.customEnabled&&this.main.dialogs.customs.check();var t={objects:this.main.objects,states:this.main.states,noDialog:!0,stats:!0,name:"admin-objects",useValues:["ID","name","value.from","value.q","value.ts","value.lc","value.val","button"],useHistory:this.main.dialogs.customs.customEnabled,showButtonsForNotExistingObjects:!0,expertModeRegEx:/^system\.|^yunkong2\.|^_|^[\w-]+$|^enum\.|^[\w-]+\.admin|^script\./,texts:{select:_("Select"),cancel:_("Cancel"),all:_("All"),id:_("ID"),ID:_("ID"),name:_("Name"),role:_("Role"),room:_("Room"),function:_("Function"),value:_("Value"),type:_("Type"),selectid:_("Select ID"),from:_("From"),lc:_("Last changed"),ts:_("Time stamp"),wait:_("Processing..."),ack:_("Acknowledged"),expand:_("Expand all nodes"),collapse:_("Collapse all nodes"),refresh:_("Rebuild tree"),edit:_("Edit"),push:_("Trigger event"),ok:_("Ok"),with:_("With"),without:_("Without"),copyToClipboard:_("Copy to clipboard"),expertMode:_("Toggle expert mode"),sort:_("Sort alphabetically"),button:_("Settings"),editDialog:_("Edit in dialog"),noData:_("No data"),Objects:_("Objects"),States:_("States"),toggleValues:_("Toggle states view"),user:_("User")},columns:["ID","name","type","role","room","function","value","button"],expandedCallback:function(e,t,n){n&&function(e){"string"==typeof e&&(e=[e]);for(var t=0;t<e.length;t++){if(console.log("Expanded: "+e[t]),c.subscribes[e[t]])return c.subscribes[e[t]]++;for(var n in c.subscribes)if(c.subscribes.hasOwnProperty(n)&&e[t].substring(0,n.length)+"."==n+".")return c.subscribes[n]++;c.subscribes[e[t]]=1;var i=c.main.objects[e[t]];i&&"state"===i.type?a(e[t]):a(e[t]+".*")}}(e)},collapsedCallback:function(e,t,n){!function(e){if(console.log("Collapsed: "+e),c.subscribes[e]){if(c.subscribes[e]--,!c.subscribes[e]){var t=c.main.objects[e];t&&"state"===t.type?(console.log("Unsubscribe: "+e),c.main.unsubscribeStates(e)):(console.log("Unsubscribe: "+e+".*"),c.main.unsubscribeStates(e+".*")),delete c.subscribes[e]}}else for(var n in c.subscribes)if(c.subscribes.hasOwnProperty(n)&&n.substring(0,e.length)+"."==e+"."&&(c.subscribes[n]--,!c.subscribes[n])){var i=c.main.objects[n];i&&"state"===i.type?(c.main.unsubscribeStates(n),console.log("Unsubscribe: "+n)):(c.main.unsubscribeStates(n+".*"),console.log("Unsubscribe: "+n+".*")),delete c.subscribes[n]}}(e)},buttons:[{text:!1,icons:{primary:"ui-icon-pencil"},"material-icon":"edit",click:function(e){c.main.navigate({dialog:"editobject",params:e})},match:function(e){c.main.objects[e]||(this[0].outerHTML='<div class="td-button-placeholder"></div>')},width:26,height:20},{text:!1,icons:{primary:"ui-icon-trash"},"material-icon":"delete",click:function(e){e&&c.main.delObject(c.$grid,e,function(e){e&&c.main.showError(e)})},match:function(e){c.main.objects[e]&&c.main.objects[e].common&&c.main.objects[e].common.dontDelete&&this.hide()},width:26,height:20},{text:!1,icons:{primary:"ui-icon-gear"},"material-icon":"build",click:function(e){c.main.dialogs.customs.ids=null,c.main.navigate({dialog:"customs",params:e})},width:26,height:20,match:function(e){if(c.main.objects[e]&&c.main.dialogs.customs.customEnabled&&!e.match(/\.messagebox$/)&&"state"===c.main.objects[e].type){var t=!1;if(c.main.objects[e]&&c.main.objects[e].common&&c.main.objects[e].common.custom){var n=c.main.objects[e].common.custom;for(var i in void 0!==n.enabled&&(n=c.main.objects[e].common.custom=n.enabled?{"history.0":n}:{}),n)if(n.hasOwnProperty(i)){t=!0;break}}t?this.addClass("custom-enabled").removeClass("custom-disabled"):(delete c.main.objects[e].common.custom,this.addClass("custom-disabled").removeClass("custom-enabled"))}else this.hide()}}],panelButtons:[{text:!1,icons:{primary:"ui-icon-plus"},"material-icon":"add",title:_("Add new child object to selected parent"),click:function(){var e=o("getActual")||"",t=$("#dialog-new-object");t.find("#object-tab-new-object-parent").val(e),t.find("#object-tab-new-object-name").val(_("newObject")),c.main.objects[e]&&"device"===c.main.objects[e].type?t.find("#object-tab-new-object-type").val("channel"):(c.main.objects[e]&&c.main.objects[e].type,t.find("#object-tab-new-object-type").val("state")),t.modal("open"),t.find("h6").html(_("Add new object: %s",(e?e+".":"")+_("newObject"))),t.find("#object-tab-new-object-name").focus()}},{text:!1,id:"add_object_tree","material-icon":"file_upload",icons:{primary:"ui-icon-arrowthickstop-1-n"},title:_("Add Objecttree from JSON File"),click:function(){var e=document.createElement("input");e.setAttribute("type","file"),e.setAttribute("id","files"),e.setAttribute("opacity",0),e.addEventListener("change",function(e){!function(e){var t=e.target.files[0];if(t){var n=new FileReader;n.onload=function(e){var t=e.target.result,n=JSON.parse(t),i=Object.keys(n).length,a=n._id;void 0===a&&1<i?s(n,function(){c.main.showToast(c.$grid.find(".main-toolbar-table"),_("%s object(s) processed",Object.keys(n).length))}):c.main.socket.emit("setObject",n._id,n,function(e){e?c.main.showError(e):("state"===n.type&&c.main.socket.emit("setState",n._id,void 0===n.common.def?null:n.common.def,!0),c.main.showToast(c.$grid.find(".main-toolbar-table"),_("%s was imported",n._id)))})},n.readAsText(t)}else alert("Failed to open JSON File")}(e)},!1),e.click()}},{text:!1,id:"save_object_tree",icons:{primary:"ui-icon-arrowthickstop-1-s"},"material-icon":"file_download",title:_("Save Objecttree as JSON File"),click:function(){var e,t,n,i=o("getActual")||"",a={};$.map(c.main.objects,function(e,t){t.search(i)||(a[t]=e)}),void 0!==a?(e=i+".json",t=a,(n=document.createElement("a")).setAttribute("href","data:application/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(t,null,2))),n.setAttribute("download",e),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n)):alert(_("Save of objects-tree is not possible"))}}],quickEdit:["name","value","role","function","room","value.val"],quickEditCallback:function(n,i,a,e,t){if("room"===i)r(n,"rooms",a);else if("function"===i)r(n,"functions",a);else if("value"===i){if(c.main.objects[n]&&c.main.objects[n].common&&c.main.objects[n].common.type)switch(c.main.objects[n].common.type){case"number":var s=parseFloat(a);isNaN(s)&&(s="false"===a?0:~~a),a=s;break;case"boolean":"true"===a&&(a=!0),"false"===a&&(a=!1);break;case"string":a=a.toString();break;default:"true"===a&&(a=!0),"false"===a&&(a=!1),parseFloat(a).toString()===a.toString().replace(/[.,]0*$/,"")&&(a=parseFloat(a))}t=t||!1,c.main.socket.emit("setState",n,{val:a,ack:t},function(e){if(e)return c.main.showError(e)})}else c.main.socket.emit("getObject",n,function(e,t){if(e)return c.main.showError(e);t||(t={type:"meta",common:{typ:"meta.user",role:""},native:{},_id:n}),t.common[i]=a,c.main.socket.emit("setObject",t._id,t,function(e){e&&c.main.showError(e)})})}};this.main.dialogs.customs.customEnabled?t.customButtonFilter={icons:{primary:"ui-icon-gear"},"material-icon":"build",text:!1,callback:function(){for(var e=o("getFilteredIds"),t=[],n=0;n<e.length;n++)c.main.objects[e[n]]&&"state"===c.main.objects[e[n]].type&&t.push(e[n]);t&&t.length?t.length<10?(c.main.dialogs.customs.ids=null,c.main.navigate({dialog:"customs",params:t.join(",")})):(c.main.dialogs.customs.ids=t,c.main.navigate({dialog:"customs"})):c.main.showMessage(_("No states selected!"),"","info_outline")}}:t.customButtonFilter=null,o("init",t).selectId("show",null,null,function(){c.restoreScroll()})}this.inited||(this.inited=!0,this.main.subscribeObjects("*"),function(){for(var e in c.subscribes)c.subscribes.hasOwnProperty(e)&&(c.main.objects[e]&&"state"===c.main.objects[e].type?a(e):a(e+".*"))}())}},this.destroy=function(){this.inited&&(this.saveScroll(),c.main.unsubscribeObjects("*"),this.inited=!1,n())}}function Readme(e){var o=this;function r(e,t){var n=(new showdown.Converter).makeHtml(e);return(n=(n=(n=(n=n.replace(/id="/g,'id="mdid-')).replace(/src="(?!http)/g,'class="responsive-img" src="'+t)).replace(/href="#/g,'href="" class="goto-link" data-goto="#mdid-')).replace(/href="(\S*).md/g,function(e){return'href="" class="md-link" data-url="'+o.mainUrl+e.replace('href="',"")})).replace(/href="http/g,'target="_blank" href="http')}function c(e){for(var t=e.length-1;0<=t&&!e[t];)t--;return t!==e.length-1&&e.splice(t),e}this.$dialog=$("#dialog-readme"),this.$divReadme=this.$dialog.find(".result-readme"),this.$divChangeLog=this.$dialog.find(".result-changelog"),this.$divLicense=this.$dialog.find(".result-license"),this.$divLogo=this.$dialog.find(".result-logo"),this.$tabs=this.$dialog.find(".tabs"),this.mainUrl="",this.main=e,this.prepare=function(){},this.init=function(){if(!this.inited){this.inited=!0,this.$tabs.data("inited")||(this.$tabs.data("inited",!0),this.$tabs.mtabs()),showdown.setFlavor("github");var e=this.main.navigateGetParams(),t=o.main.tabs.adapters.$tab.find('.adapter-readme-submit[data-adapter-name="'+e+'"]').data("adapter-url");if(t||(t=localStorage.getItem("original-md-url")),t){localStorage.setItem("original-md-url",t);var n=(t=t.replace("https://github.com","https://raw.githubusercontent.com").replace("blob/","")).split("/");o.mainUrl="https://raw.githubusercontent.com/"+n[3]+"/"+n[4]+"/master/",o.$dialog.find(".title").html(e),o.$divReadme.empty(),o.fillDiv(t)}o.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(e){e.stopPropagation(),e.preventDefault(),localStorage.removeItem("original-md-url"),o.main.navigate()})}},this.fillDiv=function(i){$.get(i,function(e){var t=i.replace("https://raw.githubusercontent.com","https://github.com").replace("/master/","/blob/master/");o.$dialog.find(".dialog-system-buttons .btn-open-org").attr("href",t);var n=function(e,t){var n={logo:"",readme:[],changeLog:[],license:[]},i=e.trim().split(/\r\n|\n/);i[2].match(/^#\sio/)&&i.splice(2,1),i[1].match(/^#\sio/)&&i.splice(1,1),i[0].match(/!\[[-_\w\d]*]\([-._\w\d\/]+\.png\)/)&&(n.logo=t+i[0].match(/\((.+)\)/)[1],i.splice(0,1));for(var a="readme",s=0;s<i.length;)i[s].match(/^====/)||(i[s].match(/^###?\s+Changelog/)?a="changeLog":i[s].match(/^###?\s+License/)?a="license":(n[a].length||i[s])&&n[a].push(i[s])),s++;return n.logo?o.$divLogo.html('<img src="'+n.logo+'" />').show():o.$divLogo.html("").hide(),c(n.readme),c(n.changeLog),c(n.license),n.readme.length?n.readme=r(n.readme.join("\n"),t):n.readme="",n.changeLog.length?n.changeLog=r(n.changeLog.join("\n"),t):delete n.changeLog,n.license.length?(n.license[0]="## "+n.license[0],n.license=r(n.license.join("\n"),t)):delete n.license,n}(e,i.substring(0,i.lastIndexOf("/")+1));o.$divReadme.html(n.readme),n.changeLog?(o.$divChangeLog.html(n.changeLog),o.$tabs.find(".tab-changelog").show()):(o.$divChangeLog.html(""),o.$tabs.find(".tab-changelog").hide()),n.license?(o.$divLicense.html(n.license),o.$tabs.find(".tab-license").show()):(o.$divLicense.html(""),o.$tabs.find(".tab-license").hide())}).done(function(){o.$divReadme.on("click",".md-link",function(e){e.stopPropagation(),e.preventDefault(),o.fillDiv($(this).data("url"))}),o.$divReadme.on("click",".goto-link",function(e){e.stopPropagation(),e.preventDefault();var t=$($(this).data("goto"));t.length&&o.$divReadme.animate({scrollTop:o.$divReadme.scrollTop()-o.$divReadme.offset().top+t.offset().top},2e3)})})},this.destroy=function(){this.inited&&(localStorage.removeItem("original-md-url"),this.inited=!1)}}function initMap(){gMain.dialogs.system.mapLoaded=!0,gMain.dialogs.system.updateMap(!0)}function System(s){var a,o,r,c,l=this;this.$dialog=$("#dialog-system"),this.main=s,this.systemRepos=null,this.systemCerts=null;var d=!(this.mapLoaded=!1);function u(e,t){if(t.length<700&&(-1!==t.indexOf("/")||-1!==t.indexOf("\\")))return t;if(t.length<"-----BEGIN CERTIFICATE-----==-----END CERTIFICATE-----".length)return h(_('Invalid certificate "%s". To short.',e),!0),"";var n=[];if("-----BEGIN RSA PRIVATE KEY-----"===t.substring(0,"-----BEGIN RSA PRIVATE KEY-----".length)){if("-----END RSA PRIVATE KEY-----"!==t.substring(t.length-"-----END RSA PRIVATE KEY-----".length))return h(_('Certificate "%s" must end with "-----END RSA PRIVATE KEY-----".',e),!0),"";for(t=(t=(t=t.substring("-----BEGIN RSA PRIVATE KEY-----".length)).substring(0,t.length-"-----END RSA PRIVATE KEY-----".length)).replace(/\s/g,"");t.length;)n.push(t.substring(0,64)),t=t.substring(64);return"-----BEGIN RSA PRIVATE KEY-----\r\n"+n.join("\r\n")+"\r\n-----END RSA PRIVATE KEY-----\r\n"}if("-----BEGIN PRIVATE KEY-----"===t.substring(0,"-----BEGIN PRIVATE KEY-----".length)){if("-----END PRIVATE KEY-----"!==t.substring(t.length-"-----END PRIVATE KEY-----".length))return h(_('Certificate "%s" must end with "-----BEGIN PRIVATE KEY-----".',e),!0),"";for(t=(t=(t=t.substring("-----BEGIN PRIVATE KEY-----".length)).substring(0,t.length-"-----END PRIVATE KEY-----".length)).replace(/\s/g,"");t.length;)n.push(t.substring(0,64)),t=t.substring(64);return"-----BEGIN PRIVATE KEY-----\r\n"+n.join("\r\n")+"\r\n-----END PRIVATE KEY-----\r\n"}if("-----BEGIN CERTIFICATE-----"!==t.substring(0,"-----BEGIN CERTIFICATE-----".length))return h(_('Certificate "%s" must start with "-----BEGIN CERTIFICATE-----".',e),!0),"";if("-----END CERTIFICATE-----"!==t.substring(t.length-"-----END CERTIFICATE-----".length))return h(_('Certificate "%s" must end with "-----END CERTIFICATE-----".',e),!0),"";for(var i=t.split("-----END CERTIFICATE-----"),a=i.length-1;0<=a;a--)if(i[a].replace(/[\r\n|\r|\n]+/,"").trim()){for(t=(t=(t=i[a]).substring("-----BEGIN CERTIFICATE-----".length)).replace(/\s/g,""),n=[];t.length;)n.push(t.substring(0,64)),t=t.substring(64);i[a]="-----BEGIN CERTIFICATE-----\r\n"+n.join("\r\n")+"\r\n-----END CERTIFICATE-----\r\n"}else i.splice(a,1);return i.join("")}function m(e,t){for(var n,i=table2values("tab-system-certs"),a=[],s=0;s<i.length;s++)a.push(i[s].name);for(var o=e||_("New"),r=1;(n=-1!==a.indexOf(o+r))&&r++,n;);i.push({name:o+r,certificate:t||""}),values2table("tab-system-certs",i)}function g(){if(l.systemRepos&&l.systemRepos.native.repositories){var e=[];for(var t in l.systemRepos.native.repositories)if(l.systemRepos.native.repositories.hasOwnProperty(t)){var n=l.systemRepos.native.repositories[t];e.push({name:t,link:"object"==typeof n?n.link:n})}if(values2table("tab-system-repo",e,{onChange:function(e){l.$dialog.find(".btn-save").removeClass("disabled"),e&&"name"!==e||function(){var e=l.$dialog.find("#system_activeRepo"),t=e.val(),n=!1;e.html("");for(var i=table2values("tab-system-repo"),a=0;a<i.length;a++)e.append('<option value="'+i[a].name+'">'+i[a].name+"</option>"),t===i[a].name&&(n=!0);n&&e.val(t);e.select()}()}}),l.systemRepos.nonEdit&&l.systemRepos.nonEdit.native&&l.systemRepos.nonEdit.native.repositories){var i=l.$dialog.find("#grid-repos");i.find("input").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),i.find("select").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),i.find(".btn-floating").each(function(){$(this).addClass("disabled")}),l.$dialog.find("#tab-system-repo .table-button-add").addClass("disabled")}}else l.$dialog.find("#tab-system-repo").html(_("permissionError"))}function h(e,t,n){l.main.showToast(l.$dialog.find("#tab-system-certs"),e,null,n,t)}function f(){var n=l.main.systemConfig.common,i=!1,a=!1;!function(){l.main.systemConfig.common.defaultNewAcl=l.main.systemConfig.common.defaultNewAcl||{};var e=l.main.systemConfig.common.defaultNewAcl,t=JSON.stringify(e);e.object=0,e.object|=l.$dialog.find("#tab-system-acl-obj-owner-read").prop("checked")?1024:0,e.object|=l.$dialog.find("#tab-system-acl-obj-owner-write").prop("checked")?512:0,e.object|=l.$dialog.find("#tab-system-acl-obj-group-read").prop("checked")?64:0,e.object|=l.$dialog.find("#tab-system-acl-obj-group-write").prop("checked")?32:0,e.object|=l.$dialog.find("#tab-system-acl-obj-every-read").prop("checked")?4:0,e.object|=l.$dialog.find("#tab-system-acl-obj-every-write").prop("checked")?2:0,e.owner=l.$dialog.find("#tab-system-acl-owner").val(),e.ownerGroup=l.$dialog.find("#tab-system-acl-group").val(),e.state=0,e.state|=l.$dialog.find("#tab-system-acl-state-owner-read").prop("checked")?1024:0,e.state|=l.$dialog.find("#tab-system-acl-state-owner-write").prop("checked")?512:0,e.state|=l.$dialog.find("#tab-system-acl-state-group-read").prop("checked")?64:0,e.state|=l.$dialog.find("#tab-system-acl-state-group-write").prop("checked")?32:0,e.state|=l.$dialog.find("#tab-system-acl-state-every-read").prop("checked")?4:0,e.state|=l.$dialog.find("#tab-system-acl-state-every-write").prop("checked")?2:0,e.file=0,e.file|=l.$dialog.find("#tab-system-acl-file-owner-read").prop("checked")?1024:0,e.file|=l.$dialog.find("#tab-system-acl-file-owner-write").prop("checked")?512:0,e.file|=l.$dialog.find("#tab-system-acl-file-group-read").prop("checked")?64:0,e.file|=l.$dialog.find("#tab-system-acl-file-group-write").prop("checked")?32:0,e.file|=l.$dialog.find("#tab-system-acl-file-every-read").prop("checked")?4:0,e.file|=l.$dialog.find("#tab-system-acl-file-every-write").prop("checked")?2:0,JSON.stringify(e)}(),l.$dialog.find(".system-settings.value").each(function(){var e=$(this),t=e.attr("id");t&&(t=t.substring("system_".length),"checkbox"===e.attr("type")?n[t]=e.prop("checked"):("language"===t&&n.language!==e.val()&&(i=!0),"activeRepo"===t&&n.activeRepo!==e.val()&&(a=!0),n[t]=e.val(),"isFloatComma"===t&&(n[t]="true"===n[t]||!0===n[t])))});var e={};if(l.systemRepos){for(var t in l.systemRepos.native.repositories)l.systemRepos.native.repositories.hasOwnProperty(t)&&"object"==typeof l.systemRepos.native.repositories[t]&&l.systemRepos.native.repositories[t].json&&(e[l.systemRepos.native.repositories[t].link]=l.systemRepos.native.repositories[t].json);l.systemRepos.native.repositories={}}var s=table2values("tab-system-repo");if(l.systemRepos){for(var o=null,r=0;r<s.length;r++)l.systemRepos.native.repositories[s[r].name]={link:s[r].link,json:null},e[s[r].link]&&(l.systemRepos.native.repositories[s[r].name].json=e[s[r].link]),o||(o=s[r].name);o?l.systemRepos.native.repositories[n.activeRepo]||(a=!0,n.activeRepo=o):n.activeRepo&&(a=!0,n.activeRepo="")}if(n.diag=l.$dialog.find("#diagMode").val(),l.systemCerts){l.systemCerts.native.certificates={},s=table2values("tab-system-certs");for(var c=0;c<s.length;c++)l.systemCerts.native.certificates[s[c].name]=u(s[c].name,s[c].certificate);l.$dialog.find(".system-le-settings.value").each(function(){var e=$(this),t=e.data("name");"checkbox"===e.attr("type")?l.systemCerts.native.letsEncrypt[t]=e.prop("checked"):l.systemCerts.native.letsEncrypt[t]=e.val()})}l.$dialog.find(".btn-save").addClass("disabled"),l.main.socket.emit("extendObject","system.config",{common:n},function(e){e?l.main.showError(e):l.main.socket.emit("extendObject","system.repositories",l.systemRepos,function(){l.main.socket.emit("extendObject","system.certificates",l.systemCerts,function(){i?window.location.reload():(l.main.navigate(),a&&setTimeout(function(){l.main.tabs.adapters.init(!0)},0))})})})}function p(e){"tab-system-main"===e&&l.updateMap(),("tab-system-letsencrypt"===e||"tab-system-main"===e||"tab-system-acl"===e)&&window.M&&window.M.toast?(M.updateTextFields("#"+e),l.$dialog.find("optgroup").each(function(){if(!$(this).data("lang")){var e=$(this).attr("label");$(this).data("lang",e),$(this).attr("label",_(e))}}),l.$dialog.find("select").select()):"tab-system-certs"===e&&h(_("Drop the files here"))}this.updateMap=function(e){if(d){if("undefined"==typeof ol)return setTimeout(l.updateMap,200);var t=ol.proj.fromLonLat([parseFloat(r),parseFloat(c)]);l.OSM||(l.OSM={},l.OSM.markerSource=new ol.source.Vector,l.OSM.markerStyle=new ol.style.Style({image:new ol.style.Icon({anchor:[.5,49],anchorXUnits:"fraction",anchorYUnits:"pixels",opacity:.75,src:"img/pin.png"})}),l.OSM.oMap=new ol.Map({target:"map",layers:[new ol.layer.Tile({source:new ol.source.OSM}),new ol.layer.Vector({source:l.OSM.markerSource,style:l.OSM.markerStyle})],view:new ol.View({center:t,zoom:17})}),l.OSM.marker=new ol.Feature({geometry:new ol.geom.Point(t),name:_("Your home")}),l.OSM.markerSource.addFeature(l.OSM.marker),l.OSM.oMap.on("singleclick",function(e){var t=ol.proj.toLonLat(e.coordinate);r=t[0],l.$dialog.find("#system_longitude").val(t[0]),c=t[1],l.$dialog.find("#system_latitude").val(t[1]).trigger("change")}));var n=l.OSM.oMap.getView().getZoom();l.OSM.marker.setGeometry(new ol.geom.Point(t)),l.OSM.oMap.setView(new ol.View({center:t,zoom:n}))}else{if(!this.mapLoaded)return;if(!e)return clearTimeout(a),void(a=setTimeout(function(){l.updateMap(!0)},1e3));if(a&&(clearTimeout(a),a=null),c||r){var i=new google.maps.Map(l.$dialog.find(".map")[0],{zoom:14,center:{lat:parseFloat(c),lng:parseFloat(r)}});new google.maps.Marker({position:{lat:parseFloat(c),lng:parseFloat(r)},map:i,title:_("Your home")})}}},this.init=function(){var a;this.inited||(this.inited=!0,a=function(e){if(e)return console.error(e),void h(e,!0);var t=l.$dialog.find("#system_activeRepo");if(t.html(""),l.systemRepos&&l.systemRepos.native.repositories)for(var n in l.systemRepos.native.repositories)t.append('<option value="'+n+'">'+n+"</option>");else l.$dialog.find("#tab-system-repo").html(_("permissionError"));l.$dialog.find("#diagMode").val(l.main.systemConfig.common.diag).on("change",function(){l.main.socket.emit("sendToHost",l.main.currentHost,"getDiagData",$(this).val(),function(e){l.$dialog.find("#diagSample").html(JSON.stringify(e,null,2))})}).trigger("change");var i=l.$dialog.find("#system_defaultHistory");i.html('<option value=""></option>');for(var a=0;a<l.main.instances.length;a++)"storage"===s.objects[s.instances[a]].common.type&&i.append('<option value="'+l.main.instances[a].substring("system.adapter.".length)+'">'+s.instances[a].substring("system.adapter.".length)+"</option>");r=l.main.systemConfig.common.longitude,c=l.main.systemConfig.common.latitude,o||(o=!0,d?(l.mapLoaded=!0,$.ajax({url:"lib/js/ol.js",dataType:"script",cache:!0}).done(function(){setTimeout(l.updateMap,500)}),$.ajax({url:"lib/css/ol.css",success:function(e){$("head").append("<style>"+e+"</style>")}})):$.ajax({url:"https://maps.googleapis.com/maps/api/js?key=AIzaSyCIrBRZfZAE_0C1OplAUy7OXhiWLoZc3eY&signed_in=true&callback=initMap",dataType:"script",cache:!0})),l.$dialog.find(".system-settings.value").each(function(){var e=$(this),t=e.attr("id");t&&(t=t.substring("system_".length),"checkbox"===e.attr("type")?e.prop("checked",l.main.systemConfig.common[t]):"isFloatComma"===t?e.val(l.main.systemConfig.common[t]?"true":"false"):e.val(l.main.systemConfig.common[t]),l.main.systemConfig.nonEdit&&l.main.systemConfig.nonEdit.common&&void 0!==l.main.systemConfig.nonEdit.common[t]&&(e.addClass("disabled"),e.prop("disabled",!0)))}),l.$dialog.find("#system_latitude").off("change").on("change",function(){c=$(this).val(),l.updateMap()}).off("keyup").on("keyup",function(){$(this).trigger("change")}),l.$dialog.find("#system_longitude").off("change").on("change",function(){r=$(this).val(),l.updateMap()}).off("keyup").on("keyup",function(){$(this).trigger("change")}),l.systemCerts.native.letsEncrypt||(l.systemCerts.native.letsEncrypt={path:"letsencrypt"}),l.$dialog.find(".system-le-settings.value").each(function(){var e=$(this),t=e.data("name");l.systemCerts&&l.systemCerts.native.letsEncrypt&&("checkbox"===e.attr("type")?e.prop("checked",l.systemCerts.native.letsEncrypt[t]):e.val(l.systemCerts.native.letsEncrypt[t])),l.systemCerts.nonEdit&&l.systemCerts.nonEdit.native&&l.systemCerts.nonEdit.native.letsEncrypt&&void 0!==l.systemCerts.nonEdit.native.letsEncrypt[t]&&(e.addClass("disabled"),e.prop("disabled",!0))}),l.$dialog.find("#tabs-system").find(".tabs").mtabs({onShow:function(e){e&&p($(e).attr("id"))}}),l.$dialog.find(".dialog-system-buttons .btn-save").off("click").on("click",f),l.$dialog.find(".dialog-system-buttons .btn-cancel").off("click").on("click",function(){l.main.navigate()}),g(),function(){l.main.systemConfig.common.defaultNewAcl=l.main.systemConfig.common.defaultNewAcl||{};for(var e,t=l.main.systemConfig.common.defaultNewAcl,n="",i=0;i<l.main.tabs.users.list.length;i++)e=translateName(l.main.objects[l.main.tabs.users.list[i]].common.name),n+='<option value="'+l.main.tabs.users.list[i]+'">'+(e||l.main.tabs.users.list[i])+"</option>";for(l.$dialog.find("#tab-system-acl-owner").html(n).val(t.owner||"system.user.admin"),n="",i=0;i<l.main.tabs.users.groups.length;i++)e=translateName(l.main.objects[l.main.tabs.users.groups[i]].common.name),n+='<option value="'+l.main.tabs.users.groups[i]+'">'+(e||l.main.tabs.users.groups[i])+"</option>";l.$dialog.find("#tab-system-acl-group").html(n).val(t.ownerGroup||"system.group.administrator"),void 0===t.object&&(t.object=1636),l.$dialog.find("#tab-system-acl-obj-owner-read").prop("checked",1024&t.object),l.$dialog.find("#tab-system-acl-obj-owner-write").prop("checked",512&t.object),l.$dialog.find("#tab-system-acl-obj-group-read").prop("checked",64&t.object),l.$dialog.find("#tab-system-acl-obj-group-write").prop("checked",32&t.object),l.$dialog.find("#tab-system-acl-obj-every-read").prop("checked",4&t.object),l.$dialog.find("#tab-system-acl-obj-every-write").prop("checked",2&t.object),void 0===t.state&&(t.state=1636),l.$dialog.find("#tab-system-acl-state-owner-read").prop("checked",1024&t.state),l.$dialog.find("#tab-system-acl-state-owner-write").prop("checked",512&t.state),l.$dialog.find("#tab-system-acl-state-group-read").prop("checked",64&t.state),l.$dialog.find("#tab-system-acl-state-group-write").prop("checked",32&t.state),l.$dialog.find("#tab-system-acl-state-every-read").prop("checked",4&t.state),l.$dialog.find("#tab-system-acl-state-every-write").prop("checked",2&t.state),void 0===t.file&&(t.file=1636),l.$dialog.find("#tab-system-acl-file-owner-read").prop("checked",1024&t.file),l.$dialog.find("#tab-system-acl-file-owner-write").prop("checked",512&t.file),l.$dialog.find("#tab-system-acl-file-group-read").prop("checked",64&t.file),l.$dialog.find("#tab-system-acl-file-group-write").prop("checked",32&t.file),l.$dialog.find("#tab-system-acl-file-every-read").prop("checked",4&t.file),l.$dialog.find("#tab-system-acl-file-every-write").prop("checked",2&t.file),l.$dialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")})}(),function(){var e,t=l.$dialog.find("#tab-system-certs");if(l.systemCerts&&l.systemCerts.native.certificates){var n=[];for(var i in l.systemCerts.native.certificates)l.systemCerts.native.certificates.hasOwnProperty(i)&&n.push({name:i,certificate:(e=l.systemCerts.native.certificates[i],e.replace(/(?:\\[rn]|[\r\n]+)+/g,""))});if(values2table("tab-system-certs",n,{onChange:function(e){l.$dialog.find(".btn-save").removeClass("disabled")}}),l.systemCerts.nonEdit&&l.systemCerts.nonEdit.native&&l.systemCerts.nonEdit.native.certificates){var a=l.$dialog.find("#grid-certs");a.find("input").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),a.find("select").each(function(){$(this).prop("disabled",!0).addClass("disabled")}),a.find(".btn-floating").each(function(){$(this).addClass("disabled")})}}else t.html(_("permissionError"));installFileUpload(t,1e4,function(e,t){if(e)h(e,!0);else{try{t=atob(t.split(",")[1])}catch(e){return void h(_("Cannot read file!"),!0)}if(-1!==(t=t.replace(/(\r\n|\n|\r)/gm,"")).indexOf("BEGIN RSA PRIVATE KEY"))m("private",t);else if(-1!==t.indexOf("BEGIN PRIVATE KEY"))m("private",t);else if(-1!==t.indexOf("BEGIN CERTIFICATE")){for(var n=t.split("-----END CERTIFICATE-----"),i=0,a=0;a<n.length;a++)n[a].replace(/[\r\n]+|\n|\r/,"").trim()&&i++;m(1<i?"chained":"public",t)}else h(_("Unknown file format!"),!0)}})}(),l.$dialog.find(".value").on("change",function(){l.$dialog.find(".btn-save").removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")}),l.$dialog.find(".btn-save").addClass("disabled"),p("tab-system-main")},l.main.socket.emit("getObject","system.repositories",function(i,e){l.systemRepos=e,l.main.socket.emit("getObject","system.certificates",function(n,e){l.systemCerts=e,l.main.socket.emit("getObject","system.config",function(e,t){l.main.systemConfig=t,a(i||n||e)})})}))},this.destroy=function(){this.inited&&(this.inited=!1)},this.allStored=function(){return l.$dialog.find(".btn-save").hasClass("disabled")},this.prepare=function(){l.main.systemConfig.error?$("#button-system").hide():$("#button-system").off("click").on("click",function(){l.main.navigate({dialog:"system"})})}}function Users(e){var g=this;function c(t,n,i){var e;n=n||[];for(var a=0;a<g.groups.length;a++){var s,o=g.main.objects[g.groups[a]]&&g.main.objects[g.groups[a]].common&&g.main.objects[g.groups[a]].common.members;if(-1===n.indexOf(g.groups[a])&&o&&-1!==(s=o.indexOf(t)))return o.splice(s,1),e={common:{members:o}},void g.main.socket.emit("extendObject",g.groups[a],e,function(e){e?(u(e,!0,5e3),i&&i(e)):setTimeout(function(){c(t,n,i)},0)});if(-1!==n.indexOf(g.groups[a])&&(!o||-1===o.indexOf(t)))return(o=o||[]).push(t),e={common:{members:g.main.objects[g.groups[a]].common.members=o}},void g.main.socket.emit("extendObject",g.groups[a],e,function(e){e?(u(e,!0,5e3),i&&i(e)):setTimeout(function(){c(t,n,i)},0)})}i&&i()}function h(e,t,n){"boolean"==typeof t&&(n=t,t=3e3),g.main.showToast(g.$grid,e,null,t,n)}function u(e,t,n){"boolean"==typeof t&&(n=t,t=3e3),g.main.showToast(g.$grid.find("#tab-users-dialog-new"),e,null,t,n)}function f(e){return e?e[0].toUpperCase()+e.substring(1).toLowerCase():e}function p(e){g.main.objects[e]&&"user"===g.main.objects[e].type?g.main.objects[e].common&&g.main.objects[e].common.dontDelete?h(_("Object may not be deleted"),!0):function t(n,i){for(var e=0;e<g.groups.length;e++){var a=g.main.objects[g.groups[e]];if(a&&a.common&&a.common.members&&-1!==a.common.members.indexOf(n))return a.common.members.splice(a.common.members.indexOf(n),1),void g.main.socket.emit("extendObject",g.groups[e],{common:{members:a.common.members}},function(e){e?h(_("Cannot modify groups: %s",e),!0):setTimeout(function(){t(n,i)},0)})}i&&i()}(e,function(){g.main.socket.emit("delObject",e,function(e){e?h(_("User may not be deleted: %s",e),!0):h(_("User deleted"))})}):h(_("Invalid object: %s",e),!0)}function r(e,s,o){var r=g.$grid.find("#tab-users-dialog-new-password").val(),t=g.$grid.find("#tab-users-dialog-new-password-repeat").val();if("__pass_not_set__"!==r&&r!==t)return e.stopPropagation(),void u(_("Password and confirmation are not equal!"),!0);if(!r)return e.stopPropagation(),void u(_("Password cannot be empty!"),!0);if("system.user.admin"===s&&"admin"!==o.id)return e.stopPropagation(),void u(_('Cannot change name of "%s"',"admin"),!0);if(!o.id)return e.stopPropagation(),void u(_("ID may not be empty"),!0);if(s)if("system.user."+o.id!==s){if(g.main.objects["system.user."+o.id])return e.stopPropagation(),void u(_("User yet exists"),!0);g.main.socket.emit("getObject",s,function(e,t){if(e)h(_("Cannot change user: ")+e,!0);else{var n=o.id,i="system.user."+n;t.common.name=o.name,t.common.color=o.color,t.common.icon=o.icon,t.common.desc=o.desc,delete o.id;var a=function(e){for(var t=[],n=0;n<g.groups.length;n++)-1===t.indexOf(g.groups[n])&&g.main.objects[g.groups[n]].common.members&&-1!==g.main.objects[g.groups[n]].common.members.indexOf(e)&&t.push(g.groups[n]);return t}(s);g.main.socket.emit("delObject",s,function(e){e?h(_("Cannot rename user: ")+e,!0):c(s,[],function(){g.main.socket.emit("setObject",i,t,function(e){e?h(_("Cannot change group: ")+e,!0):c(i,a,function(){"__pass_not_set__"!==r?g.main.socket.emit("changePassword",n,r,function(e){e?h(_("Cannot set password: ")+_(e),!0):h(_("Updated"))}):h(_("Updated"))})})})})}})}else delete o.id,"__pass_not_set__"!==r?g.main.socket.emit("changePassword",s.replace("system.user.",""),r,function(e){e?h(_("Cannot set password: ")+_(e),!0):g.main.socket.emit("extendObject",s,{common:o},function(e,t){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))})}):g.main.socket.emit("extendObject",s,{common:o},function(e,t){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))});else{if(g.main.objects["system.user."+o.id])return e.stopPropagation(),void u(_("User yet exists"),!0);var n=o.id,i={_id:"system.user."+n,common:o,type:"user",native:{}};o.enabled=!0,delete o.id,g.main.socket.emit("setObject",i._id,i,function(e){e?h(_("Cannot add user: ")+e,!0):"__pass_not_set__"!==r?g.main.socket.emit("changePassword",n,r,function(e){e?h(_("Cannot set password: ")+_(e),!0):h(_("Created"))}):h(_("Created"))})}}function m(e,n){if("system.group.administrator"===e)for(var t in n={},g.aclGroups)if(g.aclGroups.hasOwnProperty(t)){n[t]={};for(var i=0;i<g.aclGroups[t].length;i++)n[t][g.aclGroups[t][i]]=!0}g.$grid.find(".edit-group-permissions").prop("disabled","system.group.administrator"===e).each(function(){var e=$(this).data("type"),t=$(this).data("operation");$(this).prop("checked",!!n[e]&&n[e][t])})}function b(e){var t=g.$grid.find("#tab-users-dialog-new-id"),n=t.val();n&&!n.match(/[.\s]/)?(e.find(".tab-dialog-create").removeClass("disabled"),t.removeClass("wrong")):(e.find(".tab-dialog-create").addClass("disabled"),t.addClass("wrong"))}function y(e){var i,a=!1,c=g.$grid.find("#tab-users-dialog-new"),l={name:"",icon:"",color:"",desc:"",id:"",acl:{}},s=!0===e?"system.group":"system.user",d="",o=!0===e;if(installFileUpload(c,5e4,function(e,t){if(e)h(e,!0);else{if(!t.match(/^data:image\//))return void h(_("Unsupported image format"),!0);b(c),l.icon=t,c.find(".tab-dialog-new-icon").show().html('<img class="treetable-icon" />'),c.find(".tab-dialog-new-icon .treetable-icon").attr("src",t),c.find(".tab-dialog-new-icon-clear").show()}}),"string"==typeof e&&(g.main.objects[e]&&g.main.objects[e].common&&(l.name=g.main.objects[e].common.name,l.icon=g.main.objects[e].common.icon,l.color=g.main.objects[e].common.color,l.desc=g.main.objects[e].common.desc,(o="group"===g.main.objects[e].type)&&(l.acl=g.main.objects[e].common.acl)),d=e,l.id=e),c.find(".tab-dialog-new-title").text(!0===e?_("Create new group"):l.id?_("Change"):_("Create new user")),l.id){var t=l.id.split(".");l.id=t.pop(),s=t.join(".")}c.find("#tab-users-dialog-new-name").val(translateName(l.name)).off("change").on("change",function(){var e=g.$grid.find("#tab-users-dialog-new-id"),t=e.val(),n=$(this).val();n=n.trim().replace(FORBIDDEN_CHARS,"_").replace(/\./g,"_").toLowerCase(),t&&a||!(o&&"administrator"!==t&&"user"!==t||!o&&"admin"!==t)||(e.val(n),i=n,c.find("#tab-users-dialog-new-preview").val(s+"."+(n||"#")),M.updateTextFields("#tab-users-dialog-new")),b(c)}).off("keyup").on("keyup",function(){$(this).trigger("change")}),c.find("#tab-users-dialog-new-desc").val(l.desc).off("change").on("change",function(){b(c)}).off("keyup").on("keyup",function(){$(this).trigger("change")}),i=l.id,c.find("#tab-users-dialog-new-id").val(l.id).off("change").on("change",function(){var e=$(this).val();i!==e&&(a=!0,i=e,c.find("#tab-users-dialog-new-preview").val(s+"."+(e||"#")),M.updateTextFields("#tab-users-dialog-new"),b(c))}).off("keyup").on("keyup",function(){$(this).trigger("change")}),c.find(".tab-dialog-create").addClass("disabled").off("click").text(_(d?"Change":"Create")).on("click",function(e){var n;l.name=c.find("#tab-users-dialog-new-name").val(),l.id=c.find("#tab-users-dialog-new-id").val(),l.desc=c.find("#tab-users-dialog-new-desc").val(),o?(n=l.acl,g.$grid.find(".edit-group-permissions").each(function(){var e=$(this).data("type"),t=$(this).data("operation");n[e]=n[e]||{},n[e][t]=$(this).prop("checked")}),function(i,a,s){if("system.group.administrator"===a&&"administrator"!==s.id)return i.stopPropagation(),u(_('Cannot change name of "%s"',"administrator"),!0);if("system.group.user"===a&&"user"!==s.id)return i.stopPropagation(),u(_('Cannot change name of "%s"',"user"),!0);if(!s.id)return i.stopPropagation(),u(_("ID may not be empty"),!0);if(a)if("system.group."+s.id!==a){if(g.main.objects["system.group."+s.id])return i.stopPropagation(),u(_("ID yet exists"),!0);g.main.socket.emit("getObject",a,function(e,t){if(e)h(_("Cannot change group: ")+e,!0);else{var n=s.id;t.common.name=s.name,t.common.color=s.color,t.common.icon=s.icon,t.common.desc=s.desc,delete s.id,g.main.socket.emit("delObject",a,function(e){e?(h(_("Cannot rename group: ")+e,!0),i.stopPropagation()):g.main.socket.emit("setObject",n,t,function(e){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))})})}})}else delete s.id,g.main.socket.emit("extendObject",a,{common:s},function(e,t){e?h(_("Cannot change group: ")+e,!0):h(_("Updated"))});else{if(!s.id)return i.stopPropagation(),u(_("ID may not be empty"),!0);g.main.socket.emit("addGroup",s.id,s.desc,null,function(e,t){e?h(_("Cannot create group: ")+e,!0):g.main.socket.emit("extendObject",t._id,{common:s},function(e){e?h(_("Cannot add group: ")+e,!0):h(_("Created"))})})}}(e,d,l)):(delete l.acl,r(e,d,l))}),c.find("#tab-users-dialog-new-preview").val(s+"."+(l.id||"#")),l.icon?(c.find(".tab-dialog-new-icon").show().html(g.main.getIcon(d)),c.find(".tab-dialog-new-icon-clear").show()):(c.find(".tab-dialog-new-icon").hide(),c.find(".tab-dialog-new-icon-clear").hide()),l.color=l.color||!1,l.color?c.find(".tab-dialog-new-color").val(l.color):c.find(".tab-dialog-new-color").val(),u(_("Drop the icons here")),c.find(".tab-dialog-new-upload").off("click").on("click",function(){c.find(".drop-file").trigger("click")}),c.find(".tab-dialog-new-icon-clear").off("click").on("click",function(){l.icon&&(l.icon="",c.find(".tab-dialog-new-icon").hide(),c.find(".tab-dialog-new-icon-clear").hide(),b(c))}),c.find(".tab-dialog-new-color-clear").off("click").on("click",function(){l.color&&(b(c),c.find(".tab-dialog-new-color-clear").hide(),c.find(".tab-dialog-new-colorpicker").colorpicker({component:".btn",color:l.color,container:c.find(".tab-dialog-new-colorpicker")}).colorpicker("setValue",""),l.color="")});var n=Date.now();try{c.find(".tab-dialog-new-colorpicker").colorpicker("destroy")}catch(e){}c.find(".tab-dialog-new-colorpicker").colorpicker({component:".btn",color:l.color,container:c.find(".tab-dialog-new-colorpicker")}).colorpicker("setValue",l.color).on("showPicker.colorpicker",function(){var e=c.find(".modal-content");e[0].scrollTop=e[0].scrollHeight}).on("changeColor.colorpicker",function(e){100<Date.now()-n&&(l.color=e.color.toHex(),b(c),c.find(".tab-users-dialog-new-icon-clear").show())}),c.find("#tab-users-dialog-new-password").off("change").on("change",function(){b(c)}),c.find("#tab-users-dialog-new-password-repeat").off("change").on("change",function(){b(c)}),l.color?c.find(".tab-dialog-new-color-clear").show():c.find(".tab-dialog-new-color-clear").hide(),o?(c.find(".tab-users-dialog-new-password").hide(),"system.group.administrator"===d||"system.group.user"===d?c.find("#tab-users-dialog-new-id").prop("disabled",!0):c.find("#tab-users-dialog-new-id").prop("disabled",!1)):(c.find(".tab-users-dialog-new-password").show(),d?(c.find("#tab-users-dialog-new-password").val("__pass_not_set__"),c.find("#tab-users-dialog-new-password-repeat").val("__pass_not_set__")):(c.find("#tab-users-dialog-new-password").val(""),c.find("#tab-users-dialog-new-password-repeat").val("")),"system.user.admin"===d?c.find("#tab-users-dialog-new-id").prop("disabled",!0):c.find("#tab-users-dialog-new-id").prop("disabled",!1)),o?(g.aclGroups?(m(d,l.acl),M.updateTextFields("#tab-users-dialog-new")):g.main.socket.emit("listPermissions",function(e){g.aclGroups={};var t=[];for(var n in e)e.hasOwnProperty(n)&&e[n]&&e[n].type&&(g.aclGroups[e[n].type]=g.aclGroups[e[n].type]||[],-1===g.aclGroups[e[n].type].indexOf(e[n].operation)&&g.aclGroups[e[n].type].push(e[n].operation),-1===t.indexOf(e[n].operation)&&t.push(e[n].operation));var i="<table><tr>";for(var a in i+="</tr>",g.aclGroups)if(g.aclGroups.hasOwnProperty(a)){i+='<tr class="group-titles"><td colspan="'+t.length+'">'+_(a+" permissions")+"</td></tr>",i+='<tr class="group-sub-titles">';for(var s=0;s<t.length;s++)-1!==g.aclGroups[a].indexOf(t[s])?i+="<td>"+t[s]+"</td>":i+="<td></td>";i+="</tr>",i+="<tr>";for(var o=0;o<t.length;o++)if(-1!==g.aclGroups[a].indexOf(t[o])){var r="acl_"+a+"_"+o;i+='<td><input id="'+r+'" data-type="'+a+'" data-operation="'+t[o]+'" class="edit-group-permissions filled-in" type="checkbox" checked="checked" /><span for="'+r+'"></span></td>'}else i+="<td></td>";i+="</tr>"}i+="</table>",c.find("#tab-users-dialog-new-rights").html(i),c.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),c.find('input[type="checkbox"]').off("change").on("change",function(){b(c)}),m(d,l.acl),M.updateTextFields("#tab-users-dialog-new")}),c.find("ul.tabs .tab-dialog-new-tabs").show()):(c.find("ul.tabs .tab-dialog-new-tabs").each(function(){$(this).find('a[href="#tab-users-dialog-new-rights"]').length&&$(this).hide()}),M.updateTextFields("#tab-users-dialog-new")),c.find("ul.tabs").mtabs(),g.main.noSelect||c.find("ul.tabs").mtabs("select","tab-users-dialog-new-main"),c.modal().modal("open")}function t(){g.list.sort(),g.groups.sort();var e="";e+='<ul class="collection">';for(var t=function(e,t){for(var n={},i=0;i<t.length;i++)if(e[t[i]]&&e[t[i]].common&&e[t[i]].common.members)for(var a=e[t[i]].common.members,s=0;s<a.length;s++)n[a[s]]=n[a[s]]||[],n[a[s]].push({id:t[i],name:e[t[i]].common.name||id.replace("system.group.","")});return n}(g.main.objects,g.groups),n=0;n<g.list.length;n++){var i,a;a=g.main.objects[g.list[n]]&&g.main.objects[g.list[n]].common?g.main.objects[g.list[n]].common:{},"system.user.admin"===g.list[n]&&(a.enabled=!0),i=a.name?translateName(a.name):f(g.list[n].replace(/^system\.user\./));var s="";if(t[g.list[n]])for(var o=t[g.list[n]],r=0;r<o.length;r++){var c=o[r].id,l=translateName(o[r].name);s+='<div class="chip">'+g.main.getIcon(c)+l+'<i class="close material-icons tab-users-remove-group" data-group="'+c+'" data-user="'+g.list[n]+'">close</i></div>'}var d="",u=!1;a.color&&(d="background: "+a.color+"; ",g.main.invertColor(a.color)&&(u=!0,d+="color: white;"));var m=a.desc;"object"==typeof m&&(m=m[systemLang]||m.en),e+='<li class="collection-item avatar users-type-draggable '+(u?"inverted":"")+'" data-tt-id="'+g.list[n]+'" style="'+d+'">',e+=" "+(g.main.getIcon(g.list[n],null,null,"icon")||'<img class="icon" src="img/account_circle.png"/>'),e+='<span class="title">'+i+"</span>",e+="<p>"+g.list[n]+((m?" ("+m+")":"")||"")+"</p>",e+=' <a class="secondary-content '+(a.dontDelete?"disabled":"tab-users-enabled-user")+'" data-user="'+g.list[n]+'"><i class="material-icons">'+(a.enabled?"check_box":"check_box_outline_blank")+"</i></a>",e+=' <a class="edit-content" data-user="'+g.list[n]+'"><i class="material-icons">edit</i></a>',e+=' <a class="delete-content'+(a.dontDelete?" disabled":"")+'" data-user="'+g.list[n]+'"><i class="material-icons">delete</i></a><br>',e+=s||"",e+="</li>"}e+="</ul>",g.$gridUsers.html(e),g.$grid.find("#tab-users-btn-new-user").on("click",function(){y(!1)}),g.$gridUsers.find(".tab-users-enabled-user").on("click",function(){var e=$(this).data("user");if("system.user.admin"===e)return h(_("Cannot disable admin!"),!0),!1;var t=$(this),n=g.main.objects[e]&&g.main.objects[e].common&&g.main.objects[e].common.enabled;n=!n,g.main.socket.emit("extendObject",e,{common:{enabled:n}},function(e){e?h(_("Cannot modify user!")+e,!0):(h(_("Updated")),t.find("i").text(n?"check_box":"check_box_outline_blank"))})}),g.$gridUsers.find(".delete-content").off("click").on("click",function(){var t=$(this).data("user");$(this).hasClass("disabled")||(g.main.objects[t]&&"user"===g.main.objects[t].type?g.main.confirmMessage(_("Are you sure to delete %s?",t),null,"help",function(e){e&&p(t)}):h(_('Object "<b>%s</b>" does not exists. Update the page.',t),!0))}),g.$gridUsers.find(".edit-content").on("click",function(){y($(this).data("user"))}),g.$gridUsers.find(".tab-users-remove-group").on("click",function(){var i=$(this).data("user"),e=$(this).data("group");g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);-1!==n?(t.common.members.splice(n,1),g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("Removed"))})):h(_("%s is not in the list"),!0)}})})}function n(){var e="";e+='<ul class="collection">';for(var t=0;t<g.groups.length;t++){var n,i;n=(i=g.main.objects[g.groups[t]]&&g.main.objects[g.groups[t]].common?g.main.objects[g.groups[t]].common:{}).name?translateName(i.name):f(g.groups[t].replace(/^system\.group\./));var a="";if(i.members&&i.members.length)for(var s=i.members,o=0;o<s.length;o++){var r,c=s[o];r=g.main.objects[c]&&g.main.objects[c].common&&g.main.objects[c].common.name?translateName(g.main.objects[c].common.name):f(c.replace(/^system\.user\./)),a+='<div class="chip">'+g.main.getIcon(c)+r+'<i class="close material-icons tab-users-remove-user" data-group="'+g.groups[t]+'" data-user="'+c+'">close</i></div>'}var l="",d=!1;i.color&&(l="background: "+i.color+"; ",g.main.invertColor(i.color)&&(d=!0,l+="color: white;"));var u=i.desc;"object"==typeof u&&(u=u[systemLang]||u.en),e+='<li class="collection-item avatar '+(d?"inverted":"")+'" data-tt-id="'+g.groups[t]+'" style="'+l+'">',e+=" "+(g.main.getIcon(g.groups[t],null,null,"icon")||'<img class="icon" src="img/group.png"/>'),e+=' <span class="title">'+n+"</span>",e+=" <p>"+g.groups[t]+((u?" ("+u+")":"")||"")+"</p>",e+=' <a class="edit-content" data-group="'+g.groups[t]+'"><i class="material-icons">edit</i></a>',e+=' <a class="delete-content'+(i.dontDelete?" disabled":"")+'" data-group="'+g.groups[t]+'"><i class="material-icons">delete</i></a><br>',e+=a||"",e+="</li>"}e+="</ul>",g.$gridGroups.html(e),g.$grid.find("#tab-users-btn-new-group").on("click",function(){y(!0)}),g.$gridGroups.find(".delete-content").on("click",function(){var n=$(this).data("group");$(this).hasClass("disabled")||(g.main.objects[n]&&"group"===g.main.objects[n].type?g.main.confirmMessage(_("Are you sure to delete %s?",n),null,"help",function(e){var t;e&&(t=n,g.main.objects[t]&&"group"===g.main.objects[t].type?g.main.objects[t].common&&g.main.objects[t].common.dontDelete?h(_("Object may not be deleted"),!0):g.main.socket.emit("delObject",t,function(e){e?h(_("Group may not be deleted: %s",e),!0):h(_("Group deleted"))}):h(_("Invalid object: %s",t),!0))}):h(_('Object "<b>%s</b>" does not exists. Update the page.',n),!0))}),g.$gridGroups.find(".edit-content").on("click",function(){y($(this).data("group"))}),g.$gridGroups.find(".tab-users-remove-user").on("click",function(){var i=$(this).data("user"),e=$(this).data("group");g.main.socket.emit("getObject",e,function(e,t){if(t&&t.common&&t.common.members){var n=t.common.members.indexOf(i);if(-1!==n){if(t.common.members.splice(n,1),!t._id)return void console.error("INVLAID ID");g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("Removed"))})}else h(_("%s is not in the list"),!0)}})})}this.groups=[],this.list=[],this.$grid=$("#tab-users"),this.$gridUsers=this.$grid.find(".tab-users-list-users .tab-users-body"),this.$gridGroups=this.$grid.find(".tab-users-list-groups .tab-users-body"),this.main=e,this.aclGroups=null,this.prepare=function(){},this._postInit=function(){var e;t(),g.$gridUsers.find("ul").sortable({connectWith:"#tab-users .tab-users-list-groups .treetable",items:".users-type-draggable",appendTo:g.$gridUsers,refreshPositions:!0,helper:function(e,t){return $('<div class="users-drag-helper">'+t.find(".treetable-icon-empty+span").text()+"</div>")},zIndex:999990,revert:!1,scroll:!1,start:function(e,t){var n=t.item.prev();t.item.data("prev",n),g.$grid.addClass("dragging")},stop:function(e,t){g.$grid.removeClass("dragging")},update:function(e,t){var n=t.item.data("prev");n&&n.length?$(n).after(t.item):$(this).prepend(t.item)}}).disableSelection(),n(),(e=g.$gridGroups.find("ul>li")).droppable("instance")&&e.droppable("destroy"),e.droppable({accept:".users-type-draggable",over:function(e,t){if($(this).addClass("tab-accept-item"),$(this).hasClass("not-empty")&&!$(this).hasClass("expanded")){var n,i=$(this).data("tt-id");(n=$(this).data("timer"))&&clearTimeout(n),$(this).data("timer",setTimeout(function(){g.$gridGroups.treeTable("expand",i)},1e3))}},out:function(e,t){var n;$(this).removeClass("tab-accept-item"),(n=$(this).data("timer"))&&(clearTimeout(n),$(this).data("timer",null))},tolerance:"pointer",drop:function(e,t){$(this).removeClass("tab-accept-item");var n=t.draggable.data("tt-id"),i=$(this).data("tt-id");g.main.socket.emit("getObject",i,function(e,t){t&&t.common&&(t.common.members=t.common.members||[],-1===t.common.members.indexOf(n)?(t.common.members.push(n),t.common.members.sort(),g.main.socket.emit("setObject",t._id,t,function(e){e?h(_("Error: %s",e),!0):h(_("%s added to %s",n,t._id))})):h(_("Is yet in the list")))})}})},this.init=function(e){this.inited&&!e||(void 0!==this.$gridUsers&&this._postInit(),this.inited||(h(_("You can drag&drop users to groups"),5e3),this.inited=!0,this.main.subscribeObjects("system.user.*"),this.main.subscribeObjects("system.group.*")))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("system.user.*"),this.main.unsubscribeObjects("system.group.*"))},this.objectChange=function(e,t,n){if(e.match(/^system\.user\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){g.timer=null,g._postInit()},200)}else if(e.match(/^system\.group\./)){if(t)-1===this.groups.indexOf(e)&&this.groups.push(e);else{var a=this.groups.indexOf(e);-1!==a&&this.groups.splice(a,1)}this.timer&&clearTimeout(this.timer),this.timer=setTimeout(function(){g.timer=null,g._postInit()},200)}}}!function(C){C(document).ready(function(){var e=location.pathname+"socket.io";location.pathname.match(/^\/admin\//)&&(e="/socket.io");var s,y={},v={objects:{},states:{},currentHost:"",currentTab:null,currentDialog:null,currentUser:"",subscribesStates:{},subscribesObjects:{},subscribesLogs:0,socket:io.connect("/",{path:e}),systemConfig:null,instances:null,objectsLoaded:!1,waitForRestart:!1,tabs:null,dialogs:{},selectId:null,config:{},ignoreJSupdate:!1,addEventMessage:function(e,t,n,i){g.events.add(e,t,n,i)},saveConfig:function(e,t){e&&(v.config[e]=t),"undefined"!=typeof storage&&storage.set("adminConfig",JSON.stringify(v.config))},saveTabs:function(){this.socket.emit("setObject","system.config",this.systemConfig,function(e){e&&this.showError(e)})},upToDate:function(e,t){return e=e.split("."),t=t.split("."),e[0]=parseInt(e[0],10),t[0]=parseInt(t[0],10),!(e[0]>t[0])&&(e[0]!==t[0]||(e[1]=parseInt(e[1],10),t[1]=parseInt(t[1],10),!(e[1]>t[1])&&(e[1]!==t[1]||(e[2]=parseInt(e[2],10),t[2]=parseInt(t[2],10),e[2]<=t[2]))))},cmdExec:function(e,t,n){e=e||v.currentHost,c.val(""),l.modal("open"),s="$ ./yunkong2 "+t,l.data("finished",!1).find(".btn").html(_("In background")),l.find(".command").html(s),l.find(".progress-dont-close").removeClass("disabled"),p.find(".button-command").removeClass("error").addClass("in-progress"),l.data("max",null),l.data("error",""),h.addClass("indeterminate").removeClass("determinate"),t.match(/^upload /)?l.find(".progress-text").html(_("Upload started...")).removeClass("error"):t.match(/^del [-_\w\d]+\.[\d]+$/)?l.find(".progress-text").html(_("Removing of instance...")).removeClass("error"):t.match(/^del /)?l.find(".progress-text").html(_("Removing of adapter...")).removeClass("error"):t.match(/^url /)?l.find(".progress-text").html(_("Install or update from URL...")).removeClass("error"):t.match(/^add /)?l.find(".progress-text").html(_("Add instance...")).removeClass("error"):l.find(".progress-text").html(_("Started...")).removeClass("error"),c.val(s),r=Math.floor(268435454*Math.random())+1,o=n,v.socket.emit("cmdExec",e,r,t,function(e){e?(s+="\n"+_(e),c.val(s),o=null,n(e)):n&&n()})},confirmMessage:function(e,t,n,i,a){if("function"==typeof i)a=i,m.find(".modal-footer").html('<a class="modal-action modal-close waves-effect waves-green btn-flat translate" data-result="true">'+_("Ok")+'</a><a class="modal-action modal-close waves-effect waves-green btn-flat translate">'+_("Cancel")+"</a>"),m.find(".modal-footer .modal-action").on("click",function(){var e=m.data("callback");e&&e(C(this).data("result"))});else if("object"==typeof i){for(var s="",o=i.length-1;0<=o;o--)s+='<a class="modal-action modal-close waves-effect waves-green btn-flat translate" data-id="'+o+'">'+i[o]+"</a>";m.find(".modal-footer").html(s),m.find(".modal-footer .modal-action").on("click",function(){var e=m.data("callback");e&&e(C(this).data("id"))})}m.find(".dialog-title").text(t||_("Please confirm")),n?m.find(".dialog-icon").show().html(n):m.find(".dialog-icon").hide(),m.find(".dialog-text").html(e),m.data("callback",a),m.modal("open")},showMessage:function(e,t,n){u.find(".dialog-title").text(t||_("Message")),n?u.find(".dialog-icon").show().html(n):u.find(".dialog-icon").hide(),u.find(".dialog-text").html(e),u.modal("open")},showError:function(e){v.showMessage(_(e),_("Error"),"error_outline")},showToast:function(e,t,n,i,a,s){e&&e instanceof jQuery&&(e=e[0]),"string"==typeof(s=s||[])&&(s=[s]),a&&s.push("dropZone-error"),M.toast({parentSelector:e||C("body")[0],html:t+(n?'<i class="material-icons">'+n+"</i>":""),displayLength:i||3e3,classes:s})},formatDate:function(e,t){if(!e)return"";var n,i=typeof e;return"string"===i?t?e.substring(8):e:("object"!==i&&(e=e<9466812e5?new Date(1e3*e):new Date(e)),t?i=(n=e.getDate())<10?"0"+n:n:(i=e.getFullYear(),i+=(n=e.getMonth()+1)<10?"-0"+n:"-"+n,i+=(n=e.getDate())<10?"-0"+n:"-"+n),i+=(n=e.getHours())<10?" 0"+n:" "+n,i+=(n=e.getMinutes())<10?":0"+n:":"+n,i+=(n=e.getSeconds())<10?":0"+n:":"+n,i+=(n=e.getMilliseconds())<10?".00"+n:n<100?".0"+n:"."+n)},updateWizard:function(){var e=C("#button-wizard");v.objects["system.adapter.discovery.0"]?(e.data("inited")||(e.data("inited",!0),e.on("click",function(){v.navigate({tab:"instances",dialog:"config",params:"system.adapter.discovery.0"})}).attr("title",_("Device discovery"))),e.show(),!v.systemConfig.common.wizard&&v.systemConfig.common.licenseConfirmed&&e.trigger("click")):e.hide()},getUser:function(){if(v.currentUser){if(v.objects[v.currentUser]){var e=v.objects[v.currentUser],t="";if(t=e&&e.common&&e.common.name?translateName(e.common.name):(t=v.currentUser.replace(/^system\.user\./))[0].toUpperCase()+t.substring(1).toLowerCase(),e&&e.common&&e.common.icon){var n={};n[v.currentUser]=e,C("#current-user-icon").html(v.getIcon(v.currentUser,null,n))}else C("#current-user-icon").html('<i class="large material-icons">account_circle</i>');C("#current-user").html(t);for(var i=[],a=0;a<g.users.groups.length;a++){var s=v.objects[g.users.groups[a]];s&&s.common&&s.common.members&&-1!==s.common.members.indexOf(v.currentUser)&&i.push(_(translateName(s.common.name)))}C("#current-group").html(i.join(", "))}}else v.socket.emit("authEnabled",function(e,t){v.currentUser="system.user."+t,e?(v._lastTimer=(new Date).getTime(),function e(){if(v._timer)return;var t=(new Date).getTime();3e4<t-v._lastTimer?location.reload():v._lastTimer=t;v._timer=setTimeout(function(){v._timer=null,e()},1e4)}()):C("#button-logout").remove()})},_delObject:function(e,i){var a;if(!Array.isArray(e)){if("string"!=typeof e)return i&&i("invalid idOrList parameter");e=[e]}!function t(){if(0===e.length)return i&&setTimeout(i,0,null,a);if(a=e.pop(),v.objects[a]&&v.objects[a].common&&(v.objects[a].common["object-non-deletable"]||v.objects[a].common.dontDelete))v.showMessage(_('Cannot delete "%s" because not allowed',a),"","notifications"),setTimeout(t,0);else{var n=v.objects[a];v.socket.emit("delObject",a,function(e){if(e&&"Not exists"!==e)return v.showError(e),i(e);n&&"state"===n.type?v.socket.emit("delState",a,function(e){if(e&&"Not exists"!==e)return v.showError(e),i(e);setTimeout(t,0)}):setTimeout(t,0)})}}()},_delObjects:function(e,t,n){if(t){var i=[];for(var a in v.objects)v.objects.hasOwnProperty(a)&&a.substring(0,e.length+1)===e+"."&&i.push(a);i.push(e),i.sort(),this._delObject(i,function(){n&&n()})}else this._delObject(e,n)},delObject:function(e,t,n){var i=e?e.selectId("getTreeInfo",t):null;v.objects[t]?i&&i.children?v.confirmMessage(_('Do you want to delete just <span style="color: blue">one object</span> or <span style="color: red">all</span> children of %s too?',t),null,"help_outline",[_("_All"),_("Only one"),_("Cancel")],function(e){0===e?v._delObjects(t,!0,n):1===e&&v._delObjects(t,!1,n)}):v.confirmMessage(_("Are you sure to delete %s?",t),null,"help_outline",function(e){e&&v._delObjects(t,!0,n)}):i&&i.children?v.confirmMessage(_("Are you sure to delete all children of %s?",t),null,"help_outline",function(e){e&&v._delObjects(t,!0,n)}):v.showMessage(_('Object "<b>%s</b>" does not exists. Update the page.',t),_("Error"),"help_outline",function(e){e&&v._delObjects(t,!0,n)})}},g={hosts:new Hosts(gMain=v),objects:new Objects(v),adapters:new Adapters(v),instances:new Instances(v),users:new Users(v),enums:new Enums(v),events:new Events(v),logs:new Logs(v),states:null,intro:new Intro(v)};"undefined"!=typeof States&&(g.states=new States(v)),v.instances=g.instances.list,v.tabs=g,v.dialogs={system:new System(v),customs:new Customs(v),config:new Config(v),editobject:new EditObject(v),issue:new Issue(v),readme:new Readme(v)};var o=null,r=null,c=C("#stdout"),l=C("#dialog-command"),d=C("#dialog-license-main"),u=C("#dialog-message"),m=C("#dialog-confirm"),h=l.find(".progress div"),f=C("#admin_sidemenu_menu"),p=C("#admin_sidemenu_main"),t=!0;if("ontouchstart"in window||navigator.maxTouchPoints||C("body").addClass("desktop-screen"),-1!==navigator.userAgent.indexOf("Safari")&&-1===navigator.userAgent.indexOf("Chrome")&&-1===navigator.userAgent.indexOf("Android")?(C("body").addClass("safari"),v.browser="safari",v.noSelect=!0):detectIE()&&(C("body").addClass("ie"),v.browser="ie",v.browserVersion=detectIE(),v.noSelect=!0,C("#host-adapters-btn").css("margin-top","10px")),"undefined"!=typeof storage)try{v.config=storage.get("adminConfig"),v.config?v.config=JSON.parse(v.config):v.config={}}catch(e){console.log("Cannot load edit config"),v.config={}}function b(e){C("#admin_sidemenu_dialog").html(""),C("html").off("click",b)}function w(){if(function(){var e="",i=[];C(".admin-tab").each(function(){var e=C(this).attr("id");v.systemConfig.common.tabs&&-1===v.systemConfig.common.tabs.indexOf(e)||i.push({line:'<li class="admin-sidemenu-items" data-tab="'+e+'"><a href="#'+e+'">'+(T[e]&&T[e].icon?'<i class="material-icons left">'+T[e].icon+"</i>":'<i class="material-icons left">live_help</i>')+_(C(this).data("name"))+"</a></li>",id:e})}),C(".tab-custom").each(function(){var e=C(this).attr("id");if(!v.systemConfig.common.tabs||-1!==v.systemConfig.common.tabs.indexOf(e)){var t;if(T[e]&&T[e].icon)t=T[e].icon;else{var n="system.adapter."+e.substring(4);v.objects[n]&&v.objects[n].adminTab&&v.objects[n]["fa-icon"]&&(t=v.objects[n]["fa-icon"])}i.push({line:'<li class="admin-sidemenu-items" data-tab="'+e+'"><a href="#'+e+'">'+(t?'<i class="material-icons left">'+t+"</i>":'<i class="material-icons left">live_help</i>')+C(this).data("name")+"</a></li>",id:e})}}),i.sort(function(e,t){return T[e.id]||T[t.id]?T[e.id]?T[t.id]?T[e.id].order<T[t.id].order?-1:T[e.id].order>T[t.id].order?1:0:-1:1:0});for(var t=0;t<i.length;t++)e+=i[t].line;f.find(".admin-sidemenu-menu").html(e),C(".admin-sidemenu-close").off("click").on("click",function(){p.toggleClass("admin-sidemenu-closed"),f.toggleClass("admin-sidemenu-closed"),C(".admin-sidemenu-close i").toggleClass("hide"),setTimeout(function(){C(window).trigger("resize")},400)}),C(".admin-sidemenu-items").off("click").on("click",function(e){e.preventDefault(),e.stopPropagation(),window.location.hash="#"+C(this).data("tab")}),C(".admin-sidemenu-items a").off("click").on("click",function(e){e.preventDefault(),e.stopPropagation(),window.location.hash="#"+C(this).parent().data("tab")}),g.hosts.updateCounter(),g.adapters.updateCounter()}(),v.tabsInited){var e=f,t=e.data("problem-link");if(t){var n=C(t);if(n.length){var i=n.data("src");if(i&&-1===i.indexOf("%")){var a=n.find("iframe");a.length&&!a.attr("src")&&(a.attr("src",i),e.data("problem-link",null))}}}v.currentHash=null,v.navigateDo()}else v.tabsInited=!0,v.socket.emit("getVersion",function(e,t){var n=C(".button-version");n.hasClass("vendor")||n.text("yunkong2.admin "+t)}),C(".choose-tabs-config-button").off("click").on("click",function(e){var t=C("#admin_sidemenu_dialog");if(t.html())return t.html(""),void C("html").off("click",b);setTimeout(function(){C("html").on("click",b)},100);var n=C(e.target),i=n.offset();i.top+=n.height()-2;var a='<dialog open class="tab-selector m" style="top: '+i.top+"px; left: "+i.left+'px;"><div><ul style="">';for(var s in y){var o=y[s],r="chk-"+s;a+="<li><input "+(f.find('.admin-sidemenu-items[data-tab="'+s+'"]').length?"checked":"unchecked")+' class="chk-tab filled-in" type="checkbox" id="'+r+'" /><span for="'+r+'">'+_(o)+"</span></id>"}a+="</ul></div></dialog>",t.append(a),t.find(".chk-tab").off("change").on("change",function(e){var t=C(this).attr("id").substr(4);if(C(this).prop("checked"))v.systemConfig.common.tabs.push(t);else{var n=v.systemConfig.common.tabs.indexOf(t);-1!==t&&v.systemConfig.common.tabs.splice(n,1)}v.saveTabs(),j()}),t.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")})}),v.updateWizard(),C("#button-logout").on("click",function(){window.location.href="/logout/"}),window.onhashchange=function(){v.navigateDo()},v.navigateDo(),C("#events_threshold").on("click",function(){v.socket.emit("eventsThreshold",!1)})}function j(){var n=[],e=[];y={};for(var t=0;t<v.instances.length;t++){var i=v.instances[t],a=v.objects[i];if(a.common&&a.common.adminTab)if(a.common.adminTab.singleton){for(var s=!1,o=i.replace(/\.(\d+)$/,"."),r=0;r<e.length;r++){if(o===e[r].replace(/\.(\d+)$/,".")){s=!0;break}}s||e.push(i)}else e.push(i)}C(".admin-tab").each(function(){var e=C(this),t=e.attr("id");n.push(t),y[t]=e.data("name")});for(var c=0;c<e.length;c++){var l=v.objects[e[c]],d="tab-"+l.common.name,u=l.common.adminTab.link||"/adapter/"+l.common.name+"/tab.html";l.common.materializeTab&&(u=l.common.adminTab.link||"/adapter/"+l.common.name+"/tab_m.html");var m,g=e[c].split(".");if(m=l.common.adminTab.name?"object"==typeof l.common.adminTab.name?l.common.adminTab.name[systemLang]?l.common.adminTab.name[systemLang]:l.common.adminTab.name.en?_(l.common.adminTab.name.en):_(l.common.name):_(l.common.adminTab.name):_(l.common.name),l.common.adminTab.singleton?g[3]=0:(-1!==u.indexOf("?")?u+="&instance="+g[3]:u+="?instance="+g[3],m+="."+g[3],d+="-"+g[3]),n.push(d),y[d]=m,v.systemConfig.common.tabs&&-1===v.systemConfig.common.tabs.indexOf(d))C("#"+d).hide().appendTo(C("body"));else{var h=!1;if(u?h=-1!==u.indexOf("%"):(u="/adapter/"+g[2]+"/tab.html",l.common.materilizeTab&&(u="/adapter/"+g[2]+"/tab_m.html")),'<li><a href="#'+d+'">'+m+"</a></li>\n",C("#"+d).length)C("#"+d).hide().appendTo(C("body"));else{var f='<div id="'+d+'" data-name="'+m+'" class="tab-custom '+(h?"link-replace":"")+'" data-adapter="'+g[2]+'" data-instance="'+g[3]+'" data-src="'+u+'"><iframe class="iframe-in-tab" style="border: 0; solid #FFF; display: block; left: 0; top: 0; width: 100%; height: 100%"></iframe></div>';C(f).hide().appendTo(C("body")),C("#"+d).find(".iframe-in-tab").on("load",function(){var e=C(this).contents().find("body>header");e&&e.length||(e=C(this).contents().find("head")),e&&e.length&&e.append('<link rel="stylesheet" type="text/css" href="../../lib/css/iob/selectID.css"/>')})}}}if(C(".tab-custom").each(function(){-1===n.indexOf(C(this).attr("id"))&&C("#"+C(this).attr("id")).remove()}),v.systemConfig.common.tabs||(v.systemConfig.common.tabs=n),C(".link-replace").length){var p=0,b=setTimeout(function(){b=null,w()},100);C(".link-replace").each(function(){p++,v.tabs.instances._replaceLinks(C(this).data("src"),C(this).data("adapter"),C(this).data("instance"),C(this).attr("id"),function(e,t,n,i){C("#"+i).data("src",e).removeClass("link-replace"),--p||b&&(clearTimeout(b),b=null,w())})})}else w()}function N(a){v.socket.emit("getAllObjects",function(e,i){e?window.alert(_(e)):setTimeout(function(){var e;for(var t in v.objects=i,v.objects)v.objects.hasOwnProperty(t)&&"_design"!==t.slice(0,7)&&("instance"===(e=v.objects[t]).type&&v.instances.push(t),"enum"===e.type&&g.enums.list.push(t),"user"===e.type&&g.users.list.push(t),"group"===e.type&&g.users.groups.push(t),"adapter"===e.type&&g.adapters.list.push(t),"host"===e.type&&g.hosts.addHost(e),e.common&&e.common.history&&(e.common.custom=JSON.parse(JSON.stringify(e.common.history)),delete e.common.history));for(var n in v.objectsLoaded=!0,v.initHostsList(!0),j(),v.dialogs)v.dialogs.hasOwnProperty(n)&&"function"==typeof v.dialogs[n].prepare&&v.dialogs[n].prepare();!function n(i,a){a=a||0,i&&a<i.length&&v.socket.emit("sendToHost",i[a].name,"getHostInfo",null,function(e){if(e&&e["Node.js"]){var t=parseInt(e["Node.js"].split(".").shift().replace("v",""),10);(t<6||7===t||9===t)&&v.showMessage(_('This version of node.js "%s" on "%s" is deprecated. Please install node.js 6, 8 or newer',e["Node.js"],i[a].name),_("Suggestion"),"error_outline")}setTimeout(function(){n(i,a+1)},100)})}(g.hosts.list),v.getUser(),"function"==typeof a&&a()},0)})}function n(e,t){(e=e?e.replace(/\s/g,"_"):"")&&e.match(/\.messagebox$/)?v.addEventMessage(e,t,!0,!0):(g.states&&g.states.stateChange(e,t),g.objects.stateChange(e,t),g.hosts.stateChange(e,t),g.instances.stateChange(e,t),g.adapters.stateChange(e,t),v.dialogs.customs.stateChange(e,t),v.selectId&&v.selectId.selectId("state",e,t),v.addEventMessage(e,t,!1,!0))}function i(e,t){var n="update";t?(t._rev&&v.objects[e]&&(v.objects[e]._rev=t._rev),v.objects[e]||(n="add"),"add"!==n&&JSON.stringify(v.objects[e])===JSON.stringify(t)||(v.objects[e]=t)):v.objects[e]&&(n="delete",delete v.objects[e]),v.addEventMessage(e,t,!1,!1),g.objects.objectChange(e,t,n),v.selectId&&v.selectId.selectId("object",e,t,n),g.enums.objectChange(e,t,n),g.intro.objectChange(e,t,n),"system.config"===e&&(v.systemConfig.common.language!==t.common.language&&window.location.reload(),v.systemConfig=t,j()),"system.adapter.discovery.0"===e&&v.updateWizard(),e.match(/^system\.host\.[-\w]+$/)&&v.initHostsList(),g.instances.objectChange(e,t,n),e.match(/^script\.js\.global\..*/)&&(v.ignoreJSupdate=!0),t&&e.match(/^system\.adapter\.[\w-]+\.[0-9]+$/)&&(t.common&&t.common.adminTab&&!t.common.adminTab.ignoreConfigUpdate&&(e.match(/^system\.adapter\.javascript\.[0-9]+$/)&&v.ignoreJSupdate?v.ignoreJSupdate=!1:j()),t&&"instance"===t.type&&t.common.supportCustoms&&g.objects.reinit()),g.hosts.objectChange(e,t,n),g.users.objectChange(e,t,n),e===v.currentUser&&v.getUser()}function L(e,t){var n,i,a=e&&e.common;if(a.icon){if(a.icon.match(/^data:image\//))n=a.icon;else{if(-1===a.icon.indexOf("."))return'<i class="material-icons '+(t||"treetable-icon")+'">'+a.icon+"</i>";var s;n="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(s=e._id.split(".",3),"/"===a.icon[0]?s[2]+=a.icon:s[2]+="/"+a.icon,"/adapter/"+s[2]):(s=e._id.split(".",2),"/"===a.icon[0]?s[0]+=a.icon:s[0]+="/"+a.icon,"/adapter/"+s[0])}i=e.type}return{icon:n,alt:i}}v.initHostsList=function(e){var t=C("#host-adapters");if(!e||!t.data("inited")){t.data("inited",!0),v.currentHost=v.currentHost||v.config.currentHost||"";for(var n,i=[],a=0;a<v.tabs.hosts.list.length;a++)i.push('<li><a data-value="'+v.tabs.hosts.list[a].name+'">'+v.getHostIcon(v.objects[v.tabs.hosts.list[a].id],"imgHost left")+v.tabs.hosts.list[a].name+"</a></li>"),v.currentHost||(v.currentHost=v.tabs.hosts.list[a].name),v.currentHost===v.tabs.hosts.list[a].name&&(n=v.tabs.hosts.list[a].id);t.html(i);var s=C("#host-adapters-btn").show();s.text(_("Host:")+" "+v.currentHost).dropdown(),v.objects[n]&&v.objects[n].common&&v.objects[n].common.color,s.append(C(v.getHostIcon(v.objects[n],"imgHost left"))),v.tabs.hosts.list.length<2?s.addClass("disabled"):s.removeClass("disabled"),t.find("a").on("click",function(){var e=C(this).data("value"),t="system.host."+e+".alive";v.states[t]&&v.states[t].val&&"null"!==v.states[t].val?(v.currentHost=e,C("#host-adapters-btn").text(_("Host:")+" "+v.currentHost).append(C(this).find(".imgHost").clone()),console.log(v.currentTab),T["tab-"+v.currentTab]&&T["tab-"+v.currentTab].host&&(v.tabs[v.currentTab]&&"function"==typeof v.tabs[v.currentTab].destroy&&v.tabs[v.currentTab].destroy(),v.tabs[v.currentTab]&&"function"==typeof v.tabs[v.currentTab].init&&v.tabs[v.currentTab].init()),v.saveConfig("currentHost",v.currentHost)):v.showMessage(_("Host %s is offline",C(this).val()))})}},v.resubscribeStates=function(){for(var e in v.subscribesStates)v.subscribesStates.hasOwnProperty(e)&&v.subscribesStates[e]&&(console.debug("Re-Subscribe: "+e),v.socket.emit("subscribe",e))},v.resubscribeObjects=function(){for(var e in v.subscribesObjects)v.subscribesObjects.hasOwnProperty(e)&&v.subscribesObjects[e]&&v.socket.emit("subscribeObjects",e)},v.resubscribeLogs=function(){v.subscribesLogs&&(console.debug("Subscribe LOG"),v.socket.emit("requireLog",!0))},v.subscribeStates=function(e){if(e)if("object"==typeof e)for(var t=0;t<e.length;t++)v.subscribesStates[e[t]]=v.subscribesStates[e[t]]||0,v.subscribesStates[e[t]]++,1===v.subscribesStates[e[t]]&&(console.debug("Subscribe: "+e[t]),v.socket.emit("subscribe",e[t]));else v.subscribesStates[e]=v.subscribesStates[e]||0,v.subscribesStates[e]++,1===v.subscribesStates[e]&&(console.debug("Subscribe: "+e),v.socket.emit("subscribe",e))},v.unsubscribeStates=function(e){if(e)if("object"==typeof e)for(var t=0;t<e.length;t++)v.subscribesStates[e[t]]&&v.subscribesStates[e[t]]--,0===v.subscribesStates[e[t]]&&(console.debug("Unsibscribe: "+e[t]),v.socket.emit("unsubscribe",e[t]),delete v.subscribesStates[e[t]]);else v.subscribesStates[e]&&v.subscribesStates[e]--,0===v.subscribesStates[e]&&(console.debug("Unsibscribe: "+e),v.socket.emit("unsubscribe",e),delete v.subscribesStates[e])},v.subscribeObjects=function(e){if(e)if("object"==typeof e)for(var t=0;t<e.length;t++)v.subscribesObjects[e[t]]=v.subscribesObjects[e[t]]||0,v.subscribesObjects[e[t]]++,1===v.subscribesObjects[e[t]]&&v.socket.emit("subscribeObjects",e[t]);else v.subscribesObjects[e]=v.subscribesObjects[e]||0,v.subscribesObjects[e]++,1===v.subscribesObjects[e]&&v.socket.emit("subscribeObjects",e)},v.unsubscribeObjects=function(e){if(e)if("object"==typeof e)for(var t=0;t<e.length;t++)v.subscribesObjects[e[t]]&&v.subscribesObjects[e[t]]--,0===v.subscribesObjects[e[t]]&&(v.socket.emit("unsubscribeObjects",e[t]),delete v.subscribesObjects[e[t]]);else v.subscribesObjects[e]&&v.subscribesObjects[e]--,0===v.subscribesObjects[e]&&(v.socket.emit("unsubscribeObjects",e),delete v.subscribesObjects[e])},v.subscribeLogs=function(e){e?(v.subscribesLogs++,1===v.subscribesLogs&&(console.debug("Subscribe Logs"),v.socket.emit("requireLog",!0))):(v.subscribesLogs--,v.subscribesLogs<=0&&(v.subscribesLogs=0,console.debug("Unsubscribe Logs"),v.socket.emit("requireLog",!1)))},v.navigateCheckDialog=function(t){if(v.currentDialog&&v.dialogs[v.currentDialog]&&"function"==typeof v.dialogs[v.currentDialog].allStored){if(!1===v.dialogs[v.currentDialog].allStored())return v.confirmMessage(_("Some data are not stored. Discard?"),_("Please confirm"),null,function(e){t(!e)})}else if(configNotSaved)return v.confirmMessage(_("Some data are not stored. Discard?"),_("Please confirm"),null,function(e){t(!e)});t(!1)},v.navigateGetParams=function(){var e=decodeURI(window.location.hash).split("/");return e[2]?decodeURIComponent(e[2]):null},v.navigate=function(e){if(e||(e={}),"string"==typeof e&&(e={tab:e,dialog:"",params:""}),!e.tab){var t=decodeURI(window.location.hash).split("/");e.tab=t[0].replace(/^#/,"").replace(/^tab-/,"")}window.location.hash="#tab-"+encodeURIComponent(e.tab)+(e.dialog?"/"+e.dialog+(e.params?"/"+encodeURIComponent(e.params):""):"")},v.navigateDo=function(){window.location.hash!==v.currentHash&&v.navigateCheckDialog(function(e){if(e)window.location.hash=v.currentHash||"";else{configNotSaved=null,v.currentHash=window.location.hash;var t=v.currentHash.split("/"),n=t[0].replace(/^#/,"").replace(/^tab-/,""),i=t[1],a=decodeURIComponent(t[2]);n&&"!"!==n||(n=v.systemConfig.common.tabs&&-1===v.systemConfig.common.tabs.indexOf("tab-intro")?-1!==v.systemConfig.common.tabs.indexOf("tab-adapters")?"adapters":v.systemConfig.common.tabs[0].replace(/^#/,"").replace(/^tab-/,""):"intro");var s=C(".admin-sidemenu-body"),o=s.find(".admin-sidemenu-body-content"),r=C("#tab-"+n);if(s.find(".admin-preloader").remove(),r.length||(n="intro"),v.currentTab!==n||!o.length){var c;if(v.currentTab&&g[v.currentTab]&&"function"==typeof g[v.currentTab].destroy)g[v.currentTab].destroy();else if(v.currentTab){var l=C("#tab-"+v.currentTab);if(l.length&&(c=l.data("src"))){var d=l.find(">iframe");d.attr("src")&&(console.log("clear"),d.attr("src",""))}}if(v.currentTab=n,o.hide().appendTo("body"),i||(r.addClass("admin-sidemenu-body-content").show().appendTo(s),o=r),g[n]&&"function"==typeof g[n].init&&g[n].init(),r.length&&(c=r.data("src")))if(-1===c.indexOf("%")){var u=r.find(">iframe");u.length&&!u.attr("src")&&u.attr("src",c)}else f.data("problem-link","tab-"+n)}var m=f.find('.admin-sidemenu-items[data-tab="tab-'+n+'"]');f.find(".admin-sidemenu-items").not(m).removeClass("admin-sidemenu-active"),m.addClass("admin-sidemenu-active"),T["tab-"+n]&&T["tab-"+n].host?C("#host-adapters-btn").css("opacity",1):C("#host-adapters-btn").css("opacity",.3),document.title=n+" - yunkong2",v.currentDialog!==i&&(v.dialogs[v.currentDialog]&&"function"==typeof v.dialogs[v.currentDialog].destroy&&v.dialogs[v.currentDialog].destroy(),(v.currentDialog=i)&&v.dialogs[i]?("function"==typeof v.dialogs[i].init&&v.dialogs[i].init(a?a.split(","):void 0),g[v.currentTab]&&g[v.currentTab].saveScroll&&g[v.currentTab].saveScroll(),o.hide().appendTo("body"),C("#dialog-"+i).addClass("admin-sidemenu-body-content").show().appendTo(s)):o.attr("id")!==r.attr("id")&&(o.hide().appendTo("body"),r.addClass("admin-sidemenu-body-content").show().appendTo(s),g[v.currentTab]&&g[v.currentTab].restoreScroll&&g[v.currentTab].restoreScroll()))}})},v.getIconFromObj=function(e,t,n){var i="",a="";if(e&&e.common)if(e.common.icon){var s=L(e);i=s.icon,a=s.alt}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?'<img class="'+(n||"treetable-icon")+'" src="'+i+'" alt="'+(a||"")+'" />':""},v.getIcon=function(e,t,n,i){return v.getIconFromObj((n||v.objects)[e],t,i)},v.getHostIcon=function(e,t){var n="",i="";if(e&&e.common&&e.common.icon){var a=L(e);n=a.icon,i=a.alt}return'<img class="'+(t||"treetable-icon")+'" src="'+(n=n||"img/no-image.png")+'" alt="'+(i=i||"")+'" />'},v.formatBytes=function(e){if(Math.abs(e)<1024)return e+" B";for(var t=["KiB","MiB","GiB","TiB","PiB","EiB","ZiB","YiB"],n=-1;e/=1024,++n,1024<=Math.abs(e)&&n<t.length-1;);return e.toFixed(1)+" "+t[n]},v.invertColor=function(e){return 0===e.indexOf("#")&&(e=e.slice(1)),3===e.length&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),6===e.length&&.299*parseInt(e.slice(0,2),16)+.587*parseInt(e.slice(2,4),16)+.114*parseInt(e.slice(4,6),16)<=186};var T={"tab-intro":{order:1,icon:"apps"},"tab-adapters":{order:2,icon:"store",host:!0},"tab-instances":{order:3,icon:"subtitles",host:!0},"tab-objects":{order:4,icon:"view_list"},"tab-enums":{order:5,icon:"art_track"},"tab-logs":{order:6,icon:"view_headline",host:!0},"tab-scenes":{order:7,icon:"subscriptions"},"tab-events":{order:8,icon:"flash_on"},"tab-users":{order:10,icon:"person_outline"},"tab-javascript":{order:11,icon:"code"},"tab-text2command-0":{order:12,icon:"ac_unit"},"tab-text2command-1":{order:12,icon:"ac_unit"},"tab-text2command-2":{order:12,icon:"ac_unit"},"tab-node-red-0":{order:20,icon:"device_hub"},"tab-node-red-1":{order:21,icon:"device_hub"},"tab-node-red-2":{order:22,icon:"device_hub"},"tab-hosts":{order:100,icon:"storage"},"tab-fullcalendar-0":{order:30,icon:"perm_contact_calendar"},"tab-fullcalendar-1":{order:31,icon:"perm_contact_calendar"},"tab-fullcalendar-2":{order:32,icon:"perm_contact_calendar"}};v.socket.on("log",function(e){g.logs.add(e)}),v.socket.on("error",function(e){console.log(e)}),v.socket.on("permissionError",function(e){v.showMessage(_("Has no permission to %s %s %s",e.operation,e.type,e.id||""))}),v.socket.on("stateChange",function(e,t){setTimeout(n,0,e,t)}),v.socket.on("objectChange",function(e,t){setTimeout(i,0,e,t)}),v.socket.on("cmdStdout",function(e,t){if(r===e){var n=t.match(/^upload \[(\d+)]/);if(n){null===l.data("max")&&(l.data("max",parseInt(n[1],10)),h.removeClass("indeterminate").addClass("determinate"));var i=l.data("max"),a=parseInt(n[1],10);h.css("width",100-Math.round(a/i*100)+"%")}else(n=t.match(/^got [-_:\/\\.\w\d]+\/admin$/))?(l.find(".progress-text").html(_("Upload admin started")),l.data("max",null)):(n=t.match(/^got [-_:\/\\.\w\d]+\/www$/))&&(l.find(".progress-text").html(_("Upload www started")),l.data("max",null));s+="\n"+t,c.val(s),c.scrollTop(c[0].scrollHeight-c.height())}}),v.socket.on("cmdStderr",function(e,t){r===e&&(l.data("error")||l.data("error",t),s+="\nERROR: "+t,c.val(s),c.scrollTop(c[0].scrollHeight-c.height()))}),v.socket.on("cmdExit",function(e,t){if(r===e){t=parseInt(t,10),s+="\n"+(0!==t?"ERROR: ":"")+"process exited with code "+t,c.val(s),c.scrollTop(c[0].scrollHeight-c.height()),l.find(".progress-dont-close").addClass("disabled"),h.removeClass("indeterminate").css({width:"100%"}),l.find(".btn").html(_("Close")),l.data("finished",!0),l.data("max",!0);var n=p.find(".button-command");if(n.removeClass("in-progress"),t){var i=l.data("error");if(i){var a=i.match(/error: (.*)$/);a&&(i=a[1]),l.find(".progress-text").html(_("Done with error: %s",_(i))).addClass("error")}else l.find(".progress-text").html(_("Done with error")).addClass("error");n.addClass("error"),n.show()}else l.find(".progress-text").html(_("Success!")),n.hide(),l.find(".progress-dont-close input").prop("checked")&&setTimeout(function(){l.modal("close")},1500);o&&(o(t),o=null)}}),v.socket.on("eventsThreshold",function(e){e?C("#events_threshold").show():C("#events_threshold").hide()}),v.socket.on("connect",function(){C("#connecting").hide(),t?(t=!1,v.getUser(),v.socket.emit("getUserPermissions",function(e,t){v.acl=t,v.socket.emit("getObject","system.config",function(a,e){if((v.systemConfig=e)&&e.native&&e.native.vendor){var t=e.native.vendor;if(t.icon&&C(".admin-sidemenu-header .button-icon img").attr("src",e.native.vendor.icon),t.name&&C(".admin-sidemenu-header .button-version").html(e.native.vendor.name).addClass("vendor"),t.admin&&t.admin.noCustomInstall&&C("#btn_filter_custom_url").hide(),t.admin&&t.admin.css){if(t.admin.css.sideNavUser&&C(".side-nav .user-view").css(t.admin.css.sideNavUser),t.admin.css.sideNavMenu&&C(".side-nav").css(t.admin.css.sideNavMenu),t.admin.css.header&&p.find(".admin-sidemenu-header nav").css(t.admin.css.header),t.admin.css.rules)for(var n=0;n<t.admin.css.rules.length;n++)C(t.admin.css.rules[n].selector).css(t.admin.css.rules[n].css);t.admin.styles&&C("head").append('<style type="text/css">'+t.admin.styles+"</style>")}}if(v.systemConfig&&v.systemConfig.common&&v.systemConfig.common.tabs){var i=v.systemConfig.common.tabs.indexOf("tab-log");-1!==i&&(v.systemConfig.common.tabs[i]="tab-logs")}v.socket.emit("getObject","system.repositories",function(e,t){v.dialogs.system.systemRepos=t,v.socket.emit("getObject","system.certificates",function(e,t){setTimeout(function(){if(v.dialogs.system.systemCerts=t,"permissionError"===a)v.systemConfig={common:{language:systemLang},error:"permissionError"};else if(!a&&v.systemConfig&&v.systemConfig.common){if(systemLang=v.systemConfig.common.language||systemLang,v.systemConfig.common.city=v.systemConfig.common.city||"",v.systemConfig.common.country=v.systemConfig.common.country||"",v.systemConfig.common.longitude=v.systemConfig.common.longitude||"",v.systemConfig.common.latitude=v.systemConfig.common.latitude||"",!v.systemConfig.common.licenseConfirmed){var n=(v.systemConfig.common.language||window.navigator.userLanguage||window.navigator.language||"").substring(0,2);"en"!==n&&"de"!==n&&"ru"!==n&&(n="en"),systemLang=n,d.find(".license_text").html(license[n]||license.en),d.find(".license_checkbox").prop("checked",!1),d.find(".license_language").data("licenseConfirmed",!1).val(n).on("change",function(){n=C(this).val(),d.find(".license_language_label").html(translateWord("Select language",n)),d.find(".license_text").html(license[n]||license.en),d.find(".license_checkbox").html(translateWord("license_checkbox",n)),d.find(".license_agree .translate").html(translateWord("agree",n)),d.find(".license_non_agree .translate").html(translateWord("not agree",n)),d.find(".license_terms").html(translateWord("License terms",n)),d.find(".license_agreement_label").html(translateWord("license agreement",n))}).select(),d.find(".license_diag").on("change",function(){C(this).prop("checked")?d.find(".license_agree").removeClass("disabled"):d.find(".license_agree").addClass("disabled")}),d.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),d.modal({dismissible:!1,complete:function(){d.find(".license_text").html(""),location.reload()}}).modal("open"),d.find(".license_agree").addClass("disabled").off("click").on("click",function(e){e.preventDefault(),e.stopPropagation(),v.socket.emit("getObject","system.config",function(e,t){!e&&t?(t.common=t.common||{},t.common.licenseConfirmed=!0,t.common.language=n,v.socket.emit("setObject","system.config",t,function(e){e&&v.showError(e),d.modal("close"),d.find(".license_agree").off("click"),d.find(".license_non_agree").off("click")})):v.showError(_("Cannot confirm: "+e))})}),d.find(".license_non_agree").off("click").on("click",function(e){location.reload()})}}else v.systemConfig={type:"config",common:{name:"system.config",city:"",country:"",longitude:"",latitude:"",language:"",tempUnit:"°C",currency:"",dateFormat:"DD.MM.YYYY",isFloatComma:!0,licenseConfirmed:!1,defaultHistory:"",tabs:["tab-intro","tab-adapters","tab-instances","tab-objects","tab-logs","tab-scenes","tab-javascript","tab-text2command-0"]}},v.systemConfig.common.language=window.navigator.userLanguage||window.navigator.language,"en"!==v.systemConfig.common.language&&"de"!==v.systemConfig.common.language&&"ru"!==v.systemConfig.common.language&&(v.systemConfig.common.language="en");for(var e in translateCron(),translateAll(),"function"==typeof initGridLanguage&&initGridLanguage(v.systemConfig.common.language),l.modal({dismissible:!1}),u.modal(),m.modal({dismissible:!1}),l.find(".progress-show-more").off("change").on("change",function(){var e=C(this).prop("checked");v.saveConfig("progressMore",e),e?l.find(".textarea").show():l.find(".textarea").hide()}),void 0===v.config.progressClose&&(v.config.progressClose=!0),l.find(".progress-dont-close input").on("change",function(){v.saveConfig("progressClose",C(this).prop("checked"))}),l.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=C(this).prev();e.parent().parent().hasClass("switch")||e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),l.find(".progress-dont-close input").prop("checked",v.config.progressClose),l.find(".progress-show-more").prop("checked",!!v.config.progressMore).trigger("change"),l.find(".btn").on("click",function(){l.data("finished")?p.find(".button-command").hide():p.find(".button-command").show()}),p.find(".button-command").on("click",function(){l.modal("open")}),g)g.hasOwnProperty(e)&&g[e]&&"function"==typeof g[e].prepare&&g[e].prepare();var i;i=N,g.states&&g.states.clear(),v.socket.emit("getStates",function(e,t){v.states=t,"function"==typeof i&&setTimeout(function(){i()},0)})},0)})})})})):(v.resubscribeStates(),v.resubscribeObjects(),v.resubscribeLogs()),v.waitForRestart&&location.reload()}),v.socket.on("disconnect",function(){C("#connecting").show()}),v.socket.on("reconnect",function(){C("#connecting").hide(),v.waitForRestart&&location.reload()}),v.socket.on("repoUpdated",function(){setTimeout(function(){g.adapters.init(!0)},0)}),v.socket.on("reauthenticate",function(){location.reload()})})}(jQuery);var license={en:'The MIT License (MIT)<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>',de:'MIT-Lizenz (MIT)<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:<br>Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.<br>DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',ru:"Лицензия MIT<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:<br>Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.<br>ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.",it:'Licenza MIT<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Si concede gratuitamente l\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:<br>l\'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.<br>IL SOFTWARE VIENE FORNITO "COSÌ COM\'È" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',fr:'Licence MIT<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>',pt:'Licença MIT<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>',nl:'MIT-licentie<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>',es:'Licencia MIT<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el "Software"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:<br>El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.<br>EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',pl:'Licencja MIT<br><br>Copyright © 2014-2018 bluefox, 2014 hobbyquaker<br><br>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:<br>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.<br>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.<br>'},addAll2FilterCombobox=!1;function IobListHeader(e,h){if(!(this instanceof IobListHeader))return new IobListHeader(e,h);var f,a,p;void 0===h&&(h={}),void 0===h.colWidthOffset&&(h.colWidthOffset=0),"TABLE"===(p="object"==typeof e?$(e):$("#"+e))[0].tagName&&(p=p.find("tr:first")),e=p[0];var n,b=this;b.selectIdOffset=[],p.html(""),this.setList=function(e){var t;(t="string"==typeof e?("#"!==e[0]&&(e="#"+e),$(e)):e)&&t.length&&("TD"!==t[0].tagName&&"TH"!==t[0].tagName&&((t=t.find(">thead>tr:first>th,>thead>tr:first>td")).length||(t=e.find(">tbody>tr:first>th,>tr:first>th,>tbody>tr:first>td, >tr:first>td"))),a=t)},h.list&&this.setList(h.list),this.syncHeader=function(){if("object"==typeof a){var e=function(){a.each(function(e,t){if(!(e>=a.length-1)){var n=$(t).width(),i=b.selectIdOffset[e]||0;n+i&&$(f[e]).width(Math.round(n+i))}}),a.length&&!b.selectIdOffset.length&&(b.selectIdOffset[0]=0,a.each(function(e,t){var n=$(a[e]).offset().left;n&&(b.selectIdOffset[e]=n-$(f[e]).offset().left)}),e())};e()}},$(window).on("resize",function(e,t){n&&clearTimeout(n),n=setTimeout(b.syncHeader.bind(b),100)}),this.doFilter=function(){},b.ids=[],b.add=function(t,m,e,n){void 0===e&&(e=m);var i,a,s=!(i=e)||a&&"#"===i[0]?i:(h.prefix&&i.substr(0,h.prefix.length)!==h.prefix&&(i=h.prefix+"-"+i),(a?"#":"")+i);m=_(m);var o="";switch(t){case"combobox":o=' <select class="list-header-input" id="'+s+'" title="'+m+'"></select> <button class="list-header-clear" id="'+s+'-clear" role="button" title=""></button>';break;case"edit":o=' <input class="list-header-input" placeholder="'+m+'" id="'+s+'" title="'+m+'"> <button class="list-header-clear" id="'+s+'-clear" role="button" title="'+m+'"></button>';break;case"text":o='<span class="list-header-text">'+m+"</span>"}p.append("<th>"+o+"</th>");var r="#"+s,g=$(r),c=b[e]={$filter:g,val:g.val.bind(g),selectedVal:g.val()||""};if(b.ids.push(e),"combobox"===t&&(c.options=[],c.checkAddOption=function(e,t,n){if(-1===this.options.indexOf(e)){this.options.push(e),this.options.sort();for(var i,a,s=g.val(),o=n?"":(i=m,a=s,addAll2FilterCombobox&&(i=i?_(i)+" ("+_("all")+")":_("all")),'<option value="" '+(""===a?"selected":"")+">"+i+"</option>"),r=0,c=this.options.length;r<c;r++){var l=this.options[r];if(t){var d=t(l,r);"object"==typeof d?u(d.val,d.name):o+=d}else u(l,l)}g.html(o)}function u(e,t){o+='<option value="'+e+'" '+(t===s?"selected":"")+">"+t+"</option>"}},n))for(var l=0;l<n.length;l++)c.checkAddOption(n[l].name,function(e,t){return n[t]},!0);var d,u=$(r+"-clear");return u.on("click",function(){""!==g.val()&&g.val("").trigger("change")}),"undefined"==typeof M?u.button({icons:{primary:"ui-icon-close"},text:!1}):u.prepend('<i class="material-icons">close</i>'),g.on("change",function(e){d&&clearTimeout(d),c.selectedVal=g.val(),d=setTimeout(b.doFilter,"combobox"!==t?400:0),c.selectedVal?g.parent().addClass("filter-active"):g.parent().removeClass("filter-active")}).on("keyup",function(e){13===e.which?b.doFilter():g.trigger("change")}),f=p.find(">th"),c}}function values2table(r,c,e){"object"==typeof r&&(e=c,c=r,r="");var l=e&&e.maxRaw||null,d=e&&e.onChange||null,u=e&&e.onReady||null;c=c||[];var o,s=[],m=(o=r?$("#"+r):$("body")).find(".table-button-add");if(m.data("raw",c.length),l&&m.data("maxRaw",l),m.data("inited")||(m.data("inited",!0),m.on("click",function(){if(!m.data("maxRaw")||m.data("raw")<m.data("maxRaw")){for(var e=o.find(".table-values"),t=e.data("values"),n=e.data("names"),i=e.data("maxRaw"),a={},s=0;s<n.length;s++)n[s]&&(a[n[s].name]=n[s].def);t.push(a),d&&d(),setTimeout(function(){values2table(r,t,d,u,i)},100),m.data("raw",m.data("raw")+1)}else confirmMessage(_("maxTableRaw")+": "+m.data("maxRaw"),_("maxTableRawInfo"),"alert",["Ok"])})),c){var g=[],h=o.find(".table-values");if(h.data("values",c),!h.data("rooms")&&h.find('th[data-name="room"]').length)return void getEnums("rooms",function(e,t){var n={},i=_("nonerooms");n[_("none")]="nonerooms"!==i?i:"";var a=[];for(var s in t)t.hasOwnProperty(s)&&a.push(s);a.sort(function(e,t){return e=e.toLowerCase(),(t=t.toLowerCase())<e?1:e<t?-1:0});for(var o=0;o<a.length;o++)n[a[o]]=t[a[o]].common.name||o;h.data("rooms",n),values2table(r,c,d,u,l)});if(!h.data("functions")&&h.find('th[data-name="func"]').length)return void getEnums("functions",function(e,t){var n={},i=_("nonefunctions");n[_("none")]="nonefunctions"!==i?i:"";var a=[];for(var s in t)t.hasOwnProperty(s)&&a.push(s);a.sort(function(e,t){return e=e.toLowerCase(),(t=t.toLowerCase())<e?1:e<t?-1:0});for(var o=0;o<a.length;o++)n[a[o]]=t[a[o]].common.name||o;h.data("functions",n),values2table(r,c,d,u,l)});h.find("th").each(function(){var e=$(this).data("name");if(e){var t={name:e,type:$(this).data("type")||"text",def:$(this).data("default"),class:($(this).attr("class")||"").replace("translate",""),style:$(this).data("style"),readOnly:$(this).data("readOnly"),tdstyle:$(this).data("tdstyle")};if("checkbox"===t.type)"false"===t.def&&(t.def=!1),"true"===t.def&&(t.def=!0),t.def=!!t.def;else if("select"===t.type||"select multiple"===t.type){var n=($(this).data("options")||"").split(";");t.options={};for(var i=0;i<n.length;i++){var a=n[i].split("/");t.options[a[0]]=_(a[1]||a[0]),0===i&&(t.def=void 0===t.def?a[0]:t.def)}}else t.def=t.def||"";s.push(t)}else s.push(null);(e=$(this).data("buttons"))?g.push({btn:e.split(" "),class:($(this).attr("class")||"").replace("translate",""),style:$(this).data("style"),tdstyle:$(this).data("tdstyle")}):g.push(null)}),h.data("names",s);for(var t="",n=0;n<c.length;n++){var i=c[n]&&c[n].id;!i&&c[n]&&(i="_index"===s[0]?c[n][s[1]]:c[n][s[0]]),t+='<tr data-id="'+i+'" data-index="'+n+'">';for(var a=0;a<s.length;a++){t+="<td";var f="",p="",b="";if(s[a])if(s[a].class&&(t+=' class="'+s[a].class+'" '),"_index"!==s[a].name&&(b=s[a].tdstyle||"")&&";"!==b[0]&&(b=";"+b),"_index"===s[a].name)p=s[a].style?s[a].style:"text-align: right;",f+=n+1;else if("checkbox"===s[a].type)f+='<input style="'+(s[a].style||"")+'" class="values-input" type="checkbox" data-index="'+n+'" data-name="'+s[a].name+'" '+(c[n][s[a].name]?"checked":"")+'" data-old-value="'+(void 0===c[n][s[a].name]?"":c[n][s[a].name])+'"/>';else if("select"===s[a].type.substring(0,6)){f+=("multiple"===s[a].type.substring(7,16)?'<select multiple style="':'<select style="')+(s[a].style?s[a].style:"width: 100%")+'" class="values-input" data-index="'+n+'" data-name="'+s[a].name+'">',"room"===s[a].name?e=h.data("rooms"):"func"===s[a].name?(e=h.data("functions"),"select multiple"===s[a].type&&delete e[_("none")]):e=s[a].options;var M=void 0===c[n][s[a].name]?"":c[n][s[a].name];for(var y in"object"!=typeof M&&(M=[M]),e)f+='<option value="'+y+'" '+(-1!==M.indexOf(y)?" selected":"")+">"+e[y]+"</option>";f+="</select>"}else f+='<input class="values-input" style="'+(s[a].style?s[a].style:"width: 100%")+'" type="'+s[a].type+'" data-index="'+n+'" data-name="'+s[a].name+'"/>';if(g[a]){p="text-align: center; "+(g[a].style||"")+(g[a].tdstyle||"");for(var v=0;v<g[a].btn.length;v++)!n&&"up"===g[a].btn[v]||n===c.length-1&&"down"===g[a].btn[v]?f+='<a class="btn-floating disabled" data-command="'+g[a].btn[v]+'" class="values-buttons"><i class="material-icons"></i></a>':f+='<a class="btn-floating" data-index="'+n+'" data-command="'+g[a].btn[v]+'" class="values-buttons"><i class="material-icons"></i></a>';g[a].class&&(t+=' class="'+g[a].class+'" ')}p.length||b.length?t+=' style="'+p+b+'">'+f+"</td>":t+=">"+f+"</td>"}t+="</tr>"}var w=h.find(".table-lines");w.length||(h.append('<tbody class="table-lines"></tbody>'),w=h.find(".table-lines")),w.html(t),w.find(".values-input").each(function(){var e=$(this),t=e.attr("type"),n=e.data("name"),i=e.data("index");e.data("old-value",c[i][n]),"checkbox"===t?e.prop("checked",c[i][n]):e.val(c[i][n])}),w.find("a[data-command]").each(function(){var e=$(this).data("command");"delete"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),d&&d(),setTimeout(function(){"function"==typeof tableEvents&&tableEvents(e,t,"delete"),values2table(r,c,d,u,l)},100),m.data("maxRaw")&&m.data("raw",m.data("raw")-1)}).addClass("red").find(".material-icons").html("delete"):"up"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e-1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_upward"):"down"===e?$(this).on("click",function(){var e=$(this).data("index"),t=c[e];c.splice(e,1),c.splice(e+1,0,t),d&&d(),setTimeout(function(){values2table(e,c,d,u,l)},100)}).find("i").html("arrow_downward"):"pair"===e?$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"pair")}}).attr("title",_("pair")).find("i").html("insert_link"):"unpair"===e&&$(this).on("click",function(){if("function"==typeof tableEvents){var e=$(this).data("index"),t=c[e];tableEvents(e,t,"unpair")}}).attr("title",_("unpair")).find("i").html("not_interested")}),w.find(".values-input").on("change.adaptersettings",function(){var e=$(this).data("index"),t=$(this).data("name");"checkbox"===$(this).attr("type")?($(this).prop("checked").toString()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).prop("checked")):($(this).val()!==$(this).data("old-value")&&d&&d(t,e),c[e][t]=$(this).val())}).on("keyup",function(){$(this).trigger("change.adaptersettings")})}"function"==typeof u&&u()}function table2values(e){var t;t=e?$("#"+e):$("body");var n=[];t.find(".table-values th").each(function(){var e=$(this).data("name");e?n.push(e):n.push("___ignore___")});var i=[],a=0;return t.find(".table-lines tr").each(function(){i[a]={},$(this).find("td").each(function(){var e=$(this).find("input");if(e.length){var t=e.data("name");"checkbox"===e.attr("type")?i[a][t]=e.prop("checked"):i[a][t]=e.val()}var n=$(this).find("select");if(n.length){t=n.data("name");i[a][t]=n.val()||""}}),a++}),i}var systemLang="en",systemDictionary={};function translateWord(e,t,n){if(!e)return"";if(t=t||systemLang,(n=n||systemDictionary)[e=e.toString()]){var i=n[e][t];if(i)return i;if("en"!==t&&(i=n[e].en))return i}else"string"!=typeof e||e.match(/_tooltip$/)?"string"!=typeof e&&console.warn("Trying to translate non-text:"+e):console.log('"'+e+'": {"en": "'+e+'", "de": "'+e+'", "ru": "'+e+'", "pt": "'+e+'", "nl": "'+e+'", "fr": "'+e+'", "es": "'+e+'", "pl": "'+e+'", "it": "'+e+'"},');return e}function translateAll(e,i,a){i=i||systemLang,a=a||systemDictionary,e||(e="body");var t=$(e);t.find(".translate").each(function(e){var t=$(this).attr("data-lang");t||(t=$(this).html(),$(this).attr("data-lang",t));var n=translateWord(t,i,a);n&&$(this).html(n)}),t.find(".translateV").each(function(e){var t=$(this).attr("data-lang-value");t||(t=$(this).attr("value"),$(this).attr("data-lang-value",t));var n=translateWord(t,i,a);n&&$(this).attr("value",n)}),t.find(".translateT").each(function(e){var t=$(this).attr("data-lang-title");t||(t=$(this).attr("title"),$(this).attr("data-lang-title",t));var n=translateWord(t,i,a);n&&$(this).attr("title",n)}),t.find(".translateP").each(function(e){var t=$(this).attr("data-lang-placeholder");t||(t=$(this).attr("placeholder"),$(this).attr("data-lang-placeholder",t));var n=translateWord(t,i,a);n&&$(this).attr("placeholder",n)})}function translateName(e){return e&&"object"==typeof e?e[systemLang]||e.en:e}var _=function(e,t,n,i){var a=(e=translateWord(e)).indexOf("%s");return-1===a||-1===(a=(e=e.replace("%s",t)).indexOf("%s"))||-1!==(a=(e=e.replace("%s",n)).indexOf("%s"))&&(e=e.replace("%s",i)),e};!function(X){if(!X.fn.treeTable){var t={init:function(e){e.imgPath=e.imgPath||"lib/css/fancytree/";for(var t=0;t<this.length;t++)if(p.call(this[t],e),"undefined"!=typeof Storage){var n=window.localStorage.getItem(e.name+"-treetable");if(n){n=JSON.parse(n);for(var i=X(this[t]).find(".tree-table-main"),a=0;a<n.length;a++)try{i.treetable("expandNode",n[a])}catch(a){}}}return this},destroy:function(){for(var e=0;e<this.length;e++){var t=X(this[e]).find(".tree-table-main");t.length&&t.data("options")&&(t.data("options",null),X(this[e]).html(""))}},expand:function(e){for(var t=0;t<this.length;t++){var n=X(this[t]).find(".tree-table-main");try{e?n.treetable("expandNode",e):n.treetable("expandAll",e)}catch(e){}}},collapse:function(e){for(var t=0;t<this.length;t++){var n=X(this[t]).find(".tree-table-main");try{e?n.treetable("collapseNode",e):n.treetable("collapseAll")}catch(e){}}},show:function(e,t,n){"function"==typeof t&&(n=t,t=void 0),"function"==typeof e&&(n=e,e=void 0);for(var i=0;i<this.length;i++){var a=X(this[i]).find(".tree-table-main");a.find(".selected").removeClass("selected");try{a.treetable("reveal",e)}catch(e){}var s=a.treetable("node",e);s&&s.row.addClass("selected")}return n&&n(),this},reinit:function(){for(var e=0;e<this.length;e++)s.call(this[e]);return this},object:function(e,t){for(var n=0;n<this.length;n++){var i=X(this[n]).find(".tree-table-main");i.updateTimer&&clearTimeout(i.updateTimer);var a=i.data("options");if(!a||!a.root||e.match("^"+a.root.replace(/\./g,"\\.")+"\\."))!function(e,t){i.updateTimer=setTimeout(function(){s.call(e)},300)}(this[n])}return this}};X.fn.treeTable=function(e){return t[e]?t[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?void X.error('Method "'+e+'" not found in jQuery.treeTable'):t.init.apply(this,arguments)}}function q(){var e=this.id,t=this.row.parent().parent(),n=t.data("options");n.name&&(n.expanded=n.expanded||[],-1===n.expanded.indexOf(e)&&(n.expanded.push(e),"undefined"!=typeof Storage&&window.localStorage.setItem(n.name+"-treetable",JSON.stringify(n.expanded))));t.treetable("node",e)}function ee(){var e=this.id,t=this.row.parent().parent(),n=t.data("options");if(n.name&&n.expanded){var i=n.expanded.indexOf(e);-1!==i&&(n.expanded.splice(i,1),"undefined"!=typeof Storage&&window.localStorage.setItem(n.name+"-treetable",JSON.stringify(n.expanded)))}t.treetable("node",e)}function te(e,t){var n=t?"":'<div class="treetablelist-buttons"><button class="treetable-list-btn-ok"></button><button class="treetable-list-btn-cancel"></button></div>';n+='<ul class="treetable-list">';for(var i=e.rows,a=0;a<i.length;a++){for(var s=0,o=i[a];o.parent;){for(var r=!1,c=0;c<i.length;c++)if(i[c].id===o.parent){o=i[c],r=!0;break}if(!r)break;s++}var l=i[a].title;"object"==typeof l&&(l=l[systemLang]||l.en);var d=void 0===i[a].instance?0:1;n+='<li data-id="'+i[a].id+'" class="'+(d?"treetable-list-item":"treetable-list-folder")+'" style="margin-left: '+19*s+"px; width: calc(100% - "+(15*s+2+7*d)+"px);"+("script.js.global"===i[a].id?"color: rgb(0, 128, 0);":"")+'">'+(d?"":'<span class="fancytree-expander"></span>')+'<span class="fancytree-icon"></span>'+l+"</li>"}n+="</ul>";var u=X(this),m=X(n);u.find(".treetablelist-buttons").remove(),u.find(".treetable-list").remove(),u.find(".tree-table-buttons").remove(),u.find(".tree-table-main").remove(),u.prepend(m);var g=X(m).find(".treetablelist-buttons"),h=X(m).find(".treetable-list");h.sortable({cancel:".treetable-list-folder",axis:"y"}).data("options",e);var f=this;g.find(".treetable-list-btn-ok").button({icons:{primary:"ui-icon-check"},text:!1}).css({width:24,height:24}).on("click",function(){var i="",a=[];h.find("li").each(function(){var e=X(this).data("id");if(X(this).hasClass("treetable-list-folder"))i=e;else{var t=e.split("."),n=t.pop();t.join(".")!==i&&a.push({oldId:e,newId:i+"."+n})}}),function t(n,i,a){if(i&&i.length){var e=i.shift();n.moveId&&n.moveId(e.oldId,e.newId,function(e){setTimeout(function(){t(n,i,a)},50)})}else a&&a()}(e,a,function(){p.call(f,e)})}),g.find(".treetable-list-btn-cancel").button({icons:{primary:"ui-icon-cancel"},text:!1}).css({width:24,height:24}).on("click",function(){p.call(f,e)})}function ne(e,t,n){var i="",a="",s=e&&e.common;if(s)if(s.icon){if(s.icon.match(/^data:image\//))i=s.icon;else{if(-1===s.icon.indexOf("."))return'<i class="material-icons '+(n||"treetable-icon")+'">'+s.icon+"</i>";var o;i="instance"===e.type?"/adapter/"+e.common.name+"/"+e.common.icon:e._id.match(/^system\.adapter\./)?(o=e._id.split(".",3),"/"===e.common.icon[0]?o[2]+=e.common.icon:o[2]+="/"+e.common.icon,"/adapter/"+o[2]):(o=e._id.split(".",2),"/"===e.common.icon[0]?o[0]+=e.common.icon:o[0]+="/"+e.common.icon,"/adapter/"+o[0])}a=e.type}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?'<img class="'+(n||"treetable-icon")+'" src="'+i+'" alt="'+a+'" />':""}function p(i){var e="",t=window.M&&window.M.toast?"a":"button";if(i.panelButtons){e+='<div class="row tree-table-buttons m">';for(var n=0;n<i.panelButtons.length;n++)e+="<"+t+' class="btn-floating waves-effect waves-light blue btn-custom-'+n+'" title="'+(i.panelButtons[n].title||"")+'" '+(i.panelButtons[n].id?'id="'+i.panelButtons[n].id+'"':"")+">",window.M&&window.M.toast&&(e+='<i class="material-icons">'+(i.panelButtons[n].icon||"")+"</i>"),e+="</"+t+">";i.moveId&&(e+="<"+t+' class="btn-floating waves-effect waves-light blue treetable-sort" title="'+_("reorder")+'">',window.M&&window.M.toast&&(e+='<i class="material-icons">import_export</i>'),e+="</"+t+">"),e+="</div>"}e+='<div class="row tree-table-body"><table class="tree-table-main">',e+=" <thead>",e+=' <tr class="tree-table-main-header">';for(var a=0;a<i.columns.length;a++)"name"===i.columns[a]?(e+=" <th"+(i.widths&&i.widths[a]?' class="treetable-th-name" style="width: '+i.widths[a]+'"':"")+">",e+=' <input placeholder="'+_("name")+'" class="filter_name treetable-filter" />',e+=' <button data-id="filter_name" role="button" class="filter-clear"></button>',e+=" </th>"):e+=" <th"+(i.widths&&i.widths[a]?' style="width: '+i.widths[a]+'"':"")+">"+_(i.columns[a])+"</th>";i.buttons&&(e+=" <th"+(i.buttonsWidth?' style="width: '+i.buttonsWidth+'"':"")+"></th>"),e+=" </tr>",e+="</thead>",e+="<tbody>";var s=[],o=i.root?new RegExp("^"+i.root.replace(/\./g,"\\.")+"\\."):null,r=-1!==i.columns.indexOf("instance")?[]:null;for(var c in i.objects){var l;if(i.objects.hasOwnProperty(c))if(r&&"instance"===i.objects[c].type&&(l=c.match(/^system\.adapter\.javascript\.(\d+)$/))&&r.push(l[1]),!o||o.test(c)){var d=i.objects[c].common,u={id:c,parent:null,_class:"treetable-"+i.objects[c].type};"channel"===i.objects[c].type&&(u.folder=!0);for(var m=0;m<i.columns.length;m++)if("instance"===i.columns[m])"script"===i.objects[c].type&&(u.instance=d?d.engine.split(".").pop():0);else if(d&&"id"!==i.columns[m]){var g=d[i.columns[m]];void 0!==g&&(u[i.columns[m]]=g)}i.members&&(u.members=d.members),i.colors&&(u.color=d.color),s.push(u)}}s.sort(function(e,t){return e.id>t.id?1:e.id<t.id?-1:0});for(var h=0;h<s.length;h++){var f=s[h].id.split("."),p=f.pop(),b=f.join(".");s[h].title=p;for(var M=0;M<s.length;M++)if(s[M].id===b){s[h].parent=b,s[M].children=s[M].children||[],s[M].children.push(h);break}1===f.length&&(s[h]._class+=" treetable-root")}for(var y=0;y<s.length;y++)s[y].realChildren=!!s[y].children&&!!s[y].children.length;if(i.groups)for(var v=function(e,t){for(var n={},i=0;i<t.length;i++)if(e[t[i]]&&e[t[i]].common&&e[t[i]].common.members)for(var a=e[t[i]].common.members,s=0;s<a.length;s++){n[a[s]]=n[a[s]]||[];var o=e[t[i]].common.name;o&&"object"==typeof o&&(o=o[systemLang]||"en"),n[a[s]].push({id:t[i],name:o||id.replace("system.group.","")})}return n}(i.objects,i.groups),w=s.length-1;0<=w;w--)s[w].groups=v[s[w].id]||[];if(i.members)for(var j=s.length-1;0<=j;j--)if(s[j].members){s[j].children=s[j].children||[];var N=Object.assign([],s[j].members);N.sort();for(var L=0;L<N.length;L++){if(u={id:N[L],title:N[L],parent:s[j].id,_class:"treetable-member"},s[j].children.push(N[L]),i.objects[u.id]){var T=i.objects[u.id].common;if(T){for(var C=0;C<i.columns.length;C++){var D=i.columns[C];if("members"!==D&&"id"!==D&&"title"!==D&&"icon"!==D){var I=T[i.columns[C]];void 0!==I&&(u[D]=I)}}i.colors&&(u.color=d.color)}}s.splice(j+1,0,u)}delete s[j].members}for(var k="",O=0;O<s.length;O++){e+='<tr data-tt-id="'+s[O].id+'"'+(s[O].children?' data-tt-branch="true"':"")+(s[O].parent?' data-tt-parent-id="'+s[O].parent+'"':"")+' class="',s[O]._class&&(e+=s[O]._class+" "),i.draggable&&(e+=i.draggable+" "),s[O].children&&s[O].children.length?e+="not-empty":e+="is-empty",e+='">';for(var E=0;E<i.columns.length;E++){var z=i.columns[E],A="",S=i.classes&&i.classes[E]||"";if("groups"===z&&(S+=" m"),!E&&s[O].hasOwnProperty("children")?(S+=" treetable-folder fancytree-exp-c fancytree-has-children fancytree-ico-cf","script.js.global"===s[O].id?A+=" color: rgb(0, 128, 0);":A+=" color: rgb(0, 0, 128);",e+='<td style="'+A+'" class="'+S+'">',s[O].children&&s[O].children.length&&(e+='<span class="treetable-counter">'+s[O].children.length+"</span>")):e+='<td style="'+A+'" class="'+S+'">',!E&&i.colors&&s[O].color&&(e+='<div style="background: '+s[O].color+'" class="treetable-color"></div>'),!E&&i.icons&&(e+=ne(i.objects[s[O].id],i.imgPath)||'<div class="treetable-icon-empty">&nbsp;</div>'),"enabled"===z)e+='<input data-attr="'+z+'" data-id="'+s[O].id+'" class="treetable-input" type="checkbox" '+(s[O][z]?"checked":"")+" "+(i.readOnly&&!1!==i.readOnly[E]?"disabled":"")+">";else if("groups"===z)for(var x=0;x<s[O].groups.length;x++){var $=s[O].groups[x].id;e+='<div class="chip">'+ne(i.objects[$],null,"")+s[O].groups[x].name+"</div>"}else if("instance"===z)if(void 0!==s[O].instance&&1<r.length){k='<select class="treetable-instance" data-id="'+s[O].id+'">';for(var Y=0;Y<r.length;Y++)k+='<option value="'+r[Y]+'" '+(r[Y]===s[O].instance?"selected":"")+">"+r[Y]+"</option>";e+=k+="</select>"}else e+="<span>"+(void 0===s[O].instance?"":s[O].instance)+"</span>";else if("icon"===z)e+=ne(i.objects[s[O].id],i.imgPath);else{var R=s[O][z]||"";R&&"object"==typeof R&&R.en&&(R=R[systemLang]||R.en),e+="<span>"+R+"</span>"}e+="</td>"}if(i.buttons){e+='<td class="treetable-buttons" style="'+(i.buttonsStyle||"")+'">';for(var Q="",U=0;U<i.buttons.length;U++)i.buttons[U].match&&!i.buttons[U].match(s[O].id,s[O].parent)?Q+='<div class="treetable-button-empty">&nbsp;</div>':(Q+="<"+t+' data-id="'+s[O].id+'" class="select-button-'+U+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[O].parent+'" data-children="'+!!s[O].realChildren+'" title="'+(i.buttons[U].title||"")+'">',window.M&&window.M.toast&&(Q+='<i class="material-icons">'+(i.buttons[U].icon||"")+"</i>"),Q+="</"+t+">");e+=Q+"</td>"}e+="</tr>"}e+="</body>";var P=X(this),H=X(e);P.find("span:first-child").remove(),P.find(".treetablelist-buttons").remove(),P.find(".treetable-list").remove(),P.find(".tree-table-buttons").remove(),P.find(".tree-table-main").remove(),P.prepend(H),i.rows=s;var G=X(H[1]).find(">table"),B=X(H[0]);G.data("options",i),G.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'<span class="fancytree-expander"></span><span class="fancytree-icon"></span>',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=G.find("tbody");if(F.on("click","tr",function(){X(".selected").not(this).removeClass("selected"),X(this).addClass("selected");var e=X(this).parent().parent().data("options"),t=X(this).data("tt-id");e.onChange&&e.onChange(X(this).data("tt-id"),e.oldId),e.oldId=t}),i.buttons)for(var Z=0;Z<i.buttons.length;Z++){var J=F.find(".select-button-"+Z).button(i.buttons[Z]).on("click",function(){var e=X(this).data("callback");e&&e.call(X(this),X(this).data("id"),X(this).data("children"),X(this).data("parent"))}).data("callback",i.buttons[Z].click).attr("title",i.buttons[Z].title||"");0!==J.length&&(i.buttons[Z].width&&J.css({width:i.buttons[Z].width}),i.buttons[Z].height&&J.css({height:i.buttons[Z].height}))}if(i.panelButtons)for(var W=0;W<i.panelButtons.length;W++){var V=B.find(".btn-custom-"+W);V.on("click",i.panelButtons[W].click).attr("title",i.panelButtons[W].title||""),window.M&&window.M.toast||V.button(i.panelButtons[W]).css({width:24,height:24})}G.find(".filter_name").on("change",function(){var e=X(this).data("timer");e&&clearTimeout(e);var t=X(this);t.data("timer",setTimeout(function(){t.data("timer",null),H.find(".filter_name").val()?t.addClass("input-not-empty"):t.removeClass("input-not-empty"),function(e,t){if(t){t=t.toLowerCase(),e.data("options"),e.find("tr").each(function(){X(this).hasClass("tree-table-main-header")||(X(this).data("tt-branch")||-1!==X(this).find("td:first-child").text().indexOf(t)?X(this).removeClass("filtered-out"):X(this).addClass("filtered-out"))});var n="",i=!1;e.find("tr").each(function(){X(this).data("tt-branch")?(n&&(i?e.find('tr[data-tt-id="'+n+'"]').removeClass("filtered-out"):e.find('tr[data-tt-id="'+n+'"]').addClass("filtered-out")),i=!1,n=X(this).data("tt-id")):n&&(X(this).hasClass("filtered-out")||(i=!0))}),n&&(i?e.find('tr[data-tt-id="'+n+'"]').removeClass("filtered-out"):e.find('tr[data-tt-id="'+n+'"]').addClass("filtered-out"))}else e.find("tr").removeClass("filtered-out")}(X(H[1]),H.find(".filter_name").val())}))}).on("keyup",function(){X(this).trigger("change")}),G.find(".filter-clear").button({icons:{primary:"ui-icon-close"},text:!1}).on("click",function(){var e=X(this).data("id");H.find("."+e).val("").trigger("change")});var K=this;B.find(".treetable-sort").button({icons:{primary:"ui-icon-arrowthick-2-n-s"},text:!1}).css({width:24,height:24}).on("click",function(){te.call(K,i)}),i.onEdit?(G.find(".treetable-instance").on("change",function(){i.onEdit(X(this).data("id"),"instance",X(this).val())}),G.find(".treetable-input").on("change",function(e){var t;e.stopPropagation(),t="checkbox"===X(this).attr("type")?X(this).prop("checked"):X(this).val();var n=X(this).data("id");i.onEdit&&!1===i.onEdit(n,X(this).data("attr"),t)&&X(this).prop("checked",!0)}).on("keyup",function(){X(this).trigger("change")})):G.find(".treetable-instance").prop("disabled",!0),"function"==typeof i.onReady&&i.onReady(G)}function s(){var e=X(this).find(".tree-table-main"),t=e.find(".selected").data("tt-id"),n=e.find(".expanded"),i=[];n.each(function(e){i.push(X(this).data("tt-id"))});var a=e.find(".filter_name").val(),s=e.data("options");p.call(this,s),e=X(this).find(".tree-table-main");for(var o=0;o<i.length;o++)try{e.treetable("expandNode",i[o])}catch(o){}if(t){var r=e.treetable("node",t);r&&e.treetable("reveal",t),r&&r.row&&r.row.addClass("selected")}a&&e.find(".filter_name").val(a).trigger("change")}}(jQuery),systemDictionary={" for %s":{cn:" for %s",en:" for %s"},"%s added to %s":{cn:"%s added to %s",en:"%s added to %s"},"%s object(s) processed":{cn:"%s objects were processed",en:"%s objects were processed"},"%s processes":{cn:"%s processes",en:"%s processes"},"%s was imported":{cn:"%s was imported",en:"%s was imported"},"(without prefix)":{cn:"(without prefix)",en:"(without prefix)"},"1 %d days ago":{cn:"%d days ago",en:"%d days ago"},"2 %d days ago":{cn:"%d days ago",en:"%d days ago"},"5 %d days ago":{cn:"%d days ago",en:"%d days ago"},"A-Z":{cn:"A-Z",en:"A-Z"},"Access control":{cn:"Access control",en:"Access control"},"Access control list":{cn:"Access control list",en:"Access control list"},Acknowledged:{cn:"Acknowledged",en:"Acknowledged"},"Activated. Click to stop.":{cn:"Activated. Click to stop.",en:"Activated. Click to stop."},"Active instances":{cn:"Active instances",en:"Active instances"},"Active repository:":{cn:"Active repository",en:"Active repository"},"Adapter configuration":{cn:"Adapter configuration",en:"Adapter configuration"},"Adapter settings for %s states":{cn:"Adapter settings for %s states",en:"Adapter settings for %s states"},Adapters:{cn:"适配器",en:"Adapters"},"Adapters from this Group installed":{cn:"Adapters from this group installed",en:"Adapters from this group installed"},Add:{cn:"Add",en:"Add"},"Add Objecttree from JSON File":{cn:"Add objects tree from JSON file",en:"Add objects tree from JSON file"},"Add certificate from file":{cn:"Add certificate from file",en:"Add certificate from file"},"Add instance...":{cn:"Adding instance...",en:"Adding instance..."},"Add member":{cn:"Add member",en:"Add member"},"Add new child object to selected parent":{cn:"Add new child object to selected parent",en:"Add new child object to selected parent"},"Add new field":{cn:"Add new field",en:"Add new field"},"Add new issue":{cn:"Report a bug",en:"Report a bug"},"Add new object: ":{cn:"Add new object: ",en:"Add new object: "},"Add new object: %s":{cn:"Add new object: %s",en:"Add new object: %s"},"Address:":{cn:"Address",en:"Address"},"Admin is not enabled in cloud settings!":{cn:"Admin is not enabled in cloud settings!",en:"Admin is not enabled in cloud settings!"},Administrator:{cn:"Administrator",en:"Administrator"},Afghanistan:{cn:"Afghanistan",en:"Afghanistan"},Albania:{cn:"Albania",en:"Albania"},Algeria:{cn:"Algeria",en:"Algeria"},All:{cn:"All",en:"All"},"American Samoa":{cn:"American Samoa",en:"American Samoa"},Andorra:{cn:"Andorra",en:"Andorra"},Angola:{cn:"Angola",en:"Angola"},Anguilla:{cn:"Anguilla",en:"Anguilla"},Antarctica:{cn:"Antarctica",en:"Antarctica"},"Antigua and Barbuda":{cn:"Antigua and Barbuda",en:"Antigua and Barbuda"},Apr:{cn:"Apr",en:"Apr"},April:{cn:"April",en:"April"},Architecture:{cn:"Architecture",en:"Architecture"},"Are you sure to delete %s?":{cn:'Are you sure to delete <b>"%s"</b>?',en:'Are you sure to delete <b>"%s"</b>?'},'Are you sure to delete <span style="color: red">all</span> children of %s?':{cn:'Are you sure to delete <span style="color: red">all</span> children of <b>%s</b>?',en:'Are you sure to delete <span style="color: red">all</span> children of <b>%s</b>?'},"Are you sure to delete all children of %s?":{cn:'Are you sure to delete <b>"%s"</b> and <span style="color: red; font-weight: bold">all</span> children?',en:'Are you sure to delete <b>"%s"</b> and <span style="color: red; font-weight: bold">all</span> children?'},"Are you sure to delete script %s?":{cn:"Are you sure to delete script '%s'?",en:"Are you sure to delete script '%s'?"},"Are you sure you want to delete adapter %s?":{cn:"Are you sure you want to delete adapter %s?",en:"Are you sure you want to delete adapter %s?"},"Are you sure you want to delete the instance <b>%s</b>?":{cn:"Are you sure you want to delete the instance <b>%s</b>?",en:"Are you sure you want to delete the instance <b>%s</b>?"},"Are you sure?":{cn:"Are you sure?",en:"Are you sure?"},"Are you sure? Changes are not saved.":{cn:"Are you sure? Changes are not saved.",en:"Are you sure? Changes are not saved."},Argentina:{cn:"Argentina",en:"Argentina"},Armenia:{cn:"Armenia",en:"Armenia"},Aruba:{cn:"Aruba",en:"Aruba"},Aug:{cn:"Aug",en:"Aug"},August:{cn:"August",en:"August"},Australia:{cn:"Australia",en:"Australia"},Austria:{cn:"Austria",en:"Austria"},"Authentication was deactivated":{cn:"Authentication was deactivated",en:"Authentication was deactivated"},Available:{cn:"Available",en:"Available"},"Available version:":{cn:"Available version",en:"Available version"},Azerbaijan:{cn:"Azerbaijan",en:"Azerbaijan"},Background:{cn:"Background",en:"Background"},"Background color of the login screen":{cn:"Background color of the login screen",en:"Background color of the login screen"},"Background image":{cn:"Background image",en:"Background image"},Bahamas:{cn:"Bahamas",en:"Bahamas"},Bahrain:{cn:"Bahrain",en:"Bahrain"},Bangladesh:{cn:"Bangladesh",en:"Bangladesh"},Barbados:{cn:"Barbados",en:"Barbados"},Belarus:{cn:"Belarus",en:"Belarus"},Belgium:{cn:"Belgium",en:"Belgium"},Belize:{cn:"Belize",en:"Belize"},Benin:{cn:"Benin",en:"Benin"},Bermuda:{cn:"Bermuda",en:"Bermuda"},Bhutan:{cn:"Bhutan",en:"Bhutan"},Bolivia:{cn:"Bolivia",en:"Bolivia"},"Bosnia and Herzegovina":{cn:"Bosnia and Herzegovina",en:"Bosnia and Herzegovina"},Botswana:{cn:"Botswana",en:"Botswana"},"Bouvet Island":{cn:"Bouvet Island",en:"Bouvet Island"},Brazil:{cn:"Brazil",en:"Brazil"},"British Indian Ocean Territory":{cn:"British Indian Ocean Territory",en:"British Indian Ocean Territory"},"Brunei Darussalam":{cn:"Brunei Darussalam",en:"Brunei Darussalam"},Bulgaria:{cn:"Bulgaria",en:"Bulgaria"},"Burkina Faso":{cn:"Burkina Faso",en:"Burkina Faso"},Burundi:{cn:"Burundi",en:"Burundi"},CPUs:{cn:"CPUs",en:"CPUs"},Calendar:{cn:"Calendar",en:"Calendar"},Cambodia:{cn:"Cambodia",en:"Cambodia"},Cameroon:{cn:"Cameroon",en:"Cameroon"},Canada:{cn:"Canada",en:"Canada"},Cancel:{cn:"Cancel",en:"Cancel"},"Cannot create user: ":{cn:"Cannot create user: ",en:"Cannot create user: "},"Cannot delete user: ":{cn:"Cannot delete user: ",en:"Cannot delete user: "},"Cannot disable admin!":{cn:"Cannot disable admin!",en:"Cannot disable admin!"},"Cannot read file!":{cn:"Cannot read file!",en:"Cannot read file!"},"Cannot read version from NPM":{cn:"Could not read version from NPM",en:"Could not read version from NPM"},"Cannot set password: ":{cn:"Cannot set password: ",en:"Cannot set password: "},"Cape Verde":{cn:"Cape Verde",en:"Cape Verde"},"Cayman Islands":{cn:"Cayman Islands",en:"Cayman Islands"},"Central African Republic":{cn:"Central African Republic",en:"Central African Republic"},Certificates:{cn:"Certificates",en:"Certificates"},Chad:{cn:"Chad",en:"Chad"},Change:{cn:"Change",en:"Change"},Changelog:{cn:"Change log",en:"Change log"},Channel:{cn:"Channel",en:"Channel"},Chart:{cn:"Chart",en:"Chart"},"Chart for %s":{cn:"Chart for %s",en:"Chart for %s"},"Check all":{cn:"Check all",en:"Check all"},Chile:{cn:"Chile",en:"Chile"},China:{cn:"China",en:"China"},"Christmas Island":{cn:"Christmas Island",en:"Christmas Island"},"City:":{cn:"City",en:"City"},Clear:{cn:"Clear",en:"Clear"},"Clear list":{cn:"Clear list",en:"Clear list"},"Clear log":{cn:"Clear log",en:"Clear log"},"Clear on disk permanent":{cn:"Clear on disk permanent",en:"Clear on disk permanent"},"Click do activate events again, or just wait one minute":{cn:"Click do activate events again, or just wait one minute",en:"Click do activate events again, or just wait one minute"},"Click on icon":{cn:"Click on icon to open a link",en:"Click on icon to open a link"},Close:{cn:"close",en:"close"},"Cocos Islands":{cn:"Cocos Islands",en:"Cocos Islands"},"Collapse all nodes":{cn:"Collapse all nodes",en:"Collapse all nodes"},Colombia:{cn:"Colombia",en:"Colombia"},Color:{cn:"Color",en:"Color"},Comoros:{cn:"Comoros",en:"Comoros"},"Configuration not saved.":{cn:"Configuration not saved.",en:"Configuration not saved."},Congo:{cn:"Congo",en:"Congo"},"Connected to %s: ":{cn:"Connected to %s: ",en:"Connected to %s: "},"Connected to host: ":{cn:"Connected to host: ",en:"Connected to host: "},"Cook Islands":{cn:"Cook Islands",en:"Cook Islands"},"Copy log":{cn:"Copy log",en:"Copy log"},"Copy to clipboard":{cn:"Copy to clipboard",en:"Copy to clipboard"},"Costa Rica":{cn:"Costa Rica",en:"Costa Rica"},"Country:":{cn:"Country",en:"Country"},Create:{cn:"Create",en:"Create"},"Create new category":{cn:"Create new category",en:"Create new category"},"Create new category, like %s":{cn:"Create new category, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"Create new enum",en:"Create new enum"},"Create new enum, like %s":{cn:"Create new enum, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"Create new group",en:"Create new group"},"Create new user":{cn:"Create new user",en:"Create new user"},Created:{cn:"Created",en:"Created"},Croatia:{cn:"Croatia",en:"Croatia"},"Cron expression":{cn:"Cron expression",en:"Cron expression"},Cuba:{cn:"Cuba",en:"Cuba"},"Currency:":{cn:"Currency",en:"Currency"},Custom:{cn:"Custom",en:"Custom"},Cyprus:{cn:"Cyprus",en:"Cyprus"},"Czech Republic":{cn:"Czech Republic",en:"Czech Republic"},D$ecember:{cn:"D$ecember",en:"D$ecember"},"DD.MM.YY":{cn:"DD.MM.YY",en:"DD.MM.YY"},"DD.MM.YYYY":{cn:"DD.MM.YYYY",en:"DD.MM.YYYY"},"DD/MM/YYYY":{cn:"DD/MM/YYYY",en:"DD/MM/YYYY"},"Date From":{cn:"Date From",en:"Date From"},"Date To":{cn:"Date To",en:"Date To"},"Date format:":{cn:"Date format",en:"Date format"},"Deactivated. Click to start.":{cn:"Deactivated. Click to start.",en:"Deactivated. Click to start."},"Debug outputs:":{cn:"Debug outputs",en:"Debug outputs"},Dec:{cn:"Dec",en:"Dec"},December:{cn:"December",en:"December"},"Default ACL":{cn:"Default ACL",en:"Default ACL"},"Default history instance:":{cn:"Default history instance",en:"Default history instance"},"Delete attribute":{cn:"Delete attribute",en:"Delete attribute"},"Delete category":{cn:"Delete category",en:"Delete category"},"Delete enum":{cn:"Delete enum",en:"Delete enum"},"Delete member":{cn:"Delete member",en:"Delete member"},"Delete object":{cn:"Delete object",en:"Delete object"},Denmark:{cn:"Denmark",en:"Denmark"},Description:{cn:"Description",en:"Description"},Device:{cn:"Device",en:"Device"},"Device discovery":{cn:"Device discovery",en:"Device discovery"},"Disable authentication":{cn:"Disable authentication",en:"Disable authentication"},"Disk free":{cn:"Disk free",en:"Disk free"},"Disk free:":{cn:"Disk free:",en:"Disk free:"},"Disk size":{cn:"Disk size",en:"Disk size"},Djibouti:{cn:"Djibouti",en:"Djibouti"},'Do you want to delete just <span style="color: blue">one object</span> or <span style="color: red">all</span> children of %s too?':{cn:'Do you want to delete just <span style="color: blue">one object</span> or <span style="color: red">all</span> children of %s too?',en:'Do you want to delete just <span style="color: blue">one object</span> or <span style="color: red">all</span> children of %s too?'},"Do you want to upgrade all adapters?":{cn:"Do you want to upgrade all adapters?",en:"Do you want to upgrade all adapters?"},"Domains:":{cn:"Domains",en:"Domains"},Dominica:{cn:"Dominica",en:"Dominica"},"Dominican Republic":{cn:"Dominican Republic",en:"Dominican Republic"},"Done with error: %s":{cn:"Done with error: %s",en:"Done with error: %s"},"Download log":{cn:"Download log",en:"Download log"},"Drop the files here":{cn:"Drop the files here",en:"Drop the files here"},"Drop the icons here":{cn:"Drop the icons here",en:"Drop the icons here"},"East Timor":{cn:"East Timor",en:"East Timor"},Ecuador:{cn:"Ecuador",en:"Ecuador"},Edit:{cn:"Edit",en:"Edit"},"Edit category":{cn:"Edit category",en:"Edit category"},"Edit enum":{cn:"Edit enum",en:"Edit enum"},"Edit in dialog":{cn:"Edit in dialog",en:"Edit in dialog"},"Edit object":{cn:"Edit object",en:"Edit object"},Egypt:{cn:"Egypt",en:"Egypt"},"El Salvador":{cn:"El Salvador",en:"El Salvador"},"Email for account:":{cn:"Email for account",en:"Email for account"},"Enabled:":{cn:"Enabled",en:"Enabled"},Enums:{cn:"Enums",en:"Enums"},"Equatorial Guinea":{cn:"Equatorial Guinea",en:"Equatorial Guinea"},Eritrea:{cn:"Eritrea",en:"Eritrea"},Error:{cn:"Error",en:"Error"},Estonia:{cn:"Estonia",en:"Estonia"},Ethiopia:{cn:"Ethiopia",en:"Ethiopia"},Event:{cn:"Type",en:"Type"},Events:{cn:"Events",en:"Events"},Everyone:{cn:"Everyone",en:"Everyone"},"Expand all nodes":{cn:"Expand all nodes",en:"Expand all nodes"},"Failed to open JSON File":{cn:"Failed to open JSON file",en:"Failed to open JSON file"},"Falkland Islands (Malvinas)":{cn:"Falkland Islands (Malvinas)",en:"Falkland Islands (Malvinas)"},"Faroe Islands":{cn:"Faroe Islands",en:"Faroe Islands"},Feb:{cn:"Feb",en:"Feb"},February:{cn:"February",en:"February"},Fiji:{cn:"Fiji",en:"Fiji"},"File is too big!":{cn:"File is too big!",en:"File is too big!"},"File rights":{cn:"File rights",en:"File rights"},Filter:{cn:"Filter",en:"Filter"},"Filter:":{cn:"Filter",en:"Filter"},"Filtered out":{cn:"Everything is filtered out",en:"Everything is filtered out"},"Find coordinates...":{cn:"Find coordinates...",en:"Find coordinates..."},Finland:{cn:"Finland",en:"Finland"},"Float divider:":{cn:"Float divider",en:"Float divider"},France:{cn:"France",en:"France"},"Free RAM:":{cn:"Free:",en:"Free:"},"French Guiana":{cn:"French Guiana",en:"French Guiana"},"French Polynesia":{cn:"French Polynesia",en:"French Polynesia"},"French Southern Territories":{cn:"French Southern Territories",en:"French Southern Territories"},Fri:{cn:"Fri",en:"Fri"},From:{cn:"From: ",en:"From: "},"From github":{cn:"From github",en:"From github"},Function:{cn:"Function",en:"Function"},Gabon:{cn:"Gabon",en:"Gabon"},Gambia:{cn:"Gambia",en:"Gambia"},"Generated&nbsp;ID:":{cn:"Generated ID",en:"Generated ID"},Georgia:{cn:"Georgia",en:"Georgia"},Germany:{cn:"Germany",en:"Germany"},Ghana:{cn:"Ghana",en:"Ghana"},Gibraltar:{cn:"Gibraltar",en:"Gibraltar"},"Go to Github...":{cn:"Go to Github...",en:"Go to Github..."},Greece:{cn:"Greece",en:"Greece"},Greenland:{cn:"Greenland",en:"Greenland"},Grenada:{cn:"Grenada",en:"Grenada"},Group:{cn:"Group",en:"Group"},Groups:{cn:"Groups",en:"Groups"},Guadeloupe:{cn:"Guadeloupe",en:"Guadeloupe"},Guam:{cn:"Guam",en:"Guam"},Guatemala:{cn:"Guatemala",en:"Guatemala"},Guernsey:{cn:"Guernsey",en:"Guernsey"},Guinea:{cn:"Guinea",en:"Guinea"},"Guinea-Bissau":{cn:"Guinea-Bissau",en:"Guinea-Bissau"},Guyana:{cn:"Guyana",en:"Guyana"},Haiti:{cn:"Haiti",en:"Haiti"},"Has no permission to %s %s %s":{cn:"Has no permission to %s %s %s",en:"Has no permission to %s %s %s"},"Heard and Mc Donald Islands":{cn:"Heard and Mc Donald Islands",en:"Heard and Mc Donald Islands"},"Heartbeat: ":{cn:"Heartbeat: ",en:"Heartbeat: "},Honduras:{cn:"Honduras",en:"Honduras"},"Hong Kong":{cn:"Hong Kong",en:"Hong Kong"},Host:{cn:"Host",en:"Host"},"Host %s is offline":{cn:"Host %s is offline",en:"Host %s is offline"},"Host:":{cn:"Host",en:"Host"},Hosts:{cn:"Hosts",en:"Hosts"},Hungary:{cn:"Hungary",en:"Hungary"},ID:{cn:"ID",en:"ID"},Iceland:{cn:"Iceland",en:"Iceland"},"Icon upload":{cn:"Icon upload",en:"Icon upload"},"Ignore warning":{cn:"Ignore warning",en:"Ignore warning"},"In background":{cn:"In background",en:"In background"},India:{cn:"India",en:"India"},Indonesia:{cn:"Indonesia",en:"Indonesia"},Info:{cn:"Info",en:"Info"},Insert:{cn:"Insert",en:"Insert"},Install:{cn:"Install",en:"Install"},"Install adapter from URL":{cn:"Install or update the adapter from URL",en:"Install or update the adapter from URL"},"Install adapter from github":{cn:"Install or update the adapter from Github",en:"Install or update the adapter from Github"},"Install from custom URL":{cn:"Install from custom URL",en:"Install from custom URL"},"Install or update from URL...":{cn:"Install or update from URL...",en:"Install or update from URL..."},"Installation counter":{cn:"Installations counter",en:"Installations counter"},"Installations counter":{cn:"Installations counter",en:"Installations counter"},Installed:{cn:"Installed",en:"Installed"},"Installed from group":{cn:"Installed from group",en:"Installed from group"},"Installed instances":{cn:"Installed instances",en:"Installed instances"},"Installed version":{cn:"Installed version",en:"Installed version"},Instances:{cn:"Instances",en:"Instances"},Instructions:{cn:"Instructions",en:"Instructions"},Intro:{cn:"Overview",en:"Overview"},"Invalid version of %s":{cn:"Invalid version of %s",en:"Invalid version of %s"},"Invalid version of %s. Required %s":{cn:"Invalid version of %s. Required %s",en:"Invalid version of %s. Required %s"},Iran:{cn:"Iran",en:"Iran"},Iraq:{cn:"Iraq",en:"Iraq"},Ireland:{cn:"Ireland",en:"Ireland"},"Is yet in the list":{cn:"It's already in the list",en:"It's already in the list"},"Isle of Man":{cn:"Isle of Man",en:"Isle of Man"},Israel:{cn:"Israel",en:"Israel"},Italy:{cn:"Italy",en:"Italy"},"Ivory Coast":{cn:"Ivory Coast",en:"Ivory Coast"},Jamaica:{cn:"Jamaica",en:"Jamaica"},Jan:{cn:"Jan",en:"Jan"},January:{cn:"January",en:"January"},Japan:{cn:"Japan",en:"Japan"},Jersey:{cn:"Jersey",en:"Jersey"},Jordan:{cn:"Jordan",en:"Jordan"},Jul:{cn:"Jul",en:"Jul"},July:{cn:"July",en:"July"},Jun:{cn:"Jun",en:"Jun"},June:{cn:"June",en:"June"},Kazakhstan:{cn:"Kazakhstan",en:"Kazakhstan"},Kenya:{cn:"Kenya",en:"Kenya"},Kiribati:{cn:"Kiribati",en:"Kiribati"},"Known bugs for":{cn:"Known bugs for",en:"Known bugs for"},Korea:{cn:"Korea",en:"Korea"},Kosovo:{cn:"Kosovo",en:"Kosovo"},Kuwait:{cn:"Kuwait",en:"Kuwait"},Kyrgyzstan:{cn:"Kyrgyzstan",en:"Kyrgyzstan"},"Lao People's Democratic Republic":{cn:"Lao People's Democratic Republic",en:"Lao People's Democratic Republic"},"Last changed":{cn:"Last changed",en:"Last changed"},"Last update":{cn:"Last update",en:"Last update"},"Latitude:":{cn:"Latitude",en:"Latitude"},Latvia:{cn:"Latvia",en:"Latvia"},Lebanon:{cn:"Lebanon",en:"Lebanon"},Lesotho:{cn:"Lesotho",en:"Lesotho"},"Let's Encrypt settings":{cn:"Let's Encrypt settings",en:"Let's Encrypt settings"},"Let's encrypt SSL":{cn:"Let's encrypt SSL",en:"Let's encrypt SSL"},Liberia:{cn:"Liberia",en:"Liberia"},"Libyan Arab Jamahiriya":{cn:"Libyan Arab Jamahiriya",en:"Libyan Arab Jamahiriya"},License:{cn:"License",en:"License"},"License terms":{cn:"License terms",en:"License terms"},Liechtenstein:{cn:"Liechtenstein",en:"Liechtenstein"},"Listen on all IPs":{cn:"Listen on all IPs",en:"Listen on all IPs"},Lithuania:{cn:"Lithuania",en:"Lithuania"},"Loading...":{cn:"Loading...",en:"Loading..."},Log:{cn:"Log",en:"Log"},"Log file will be deleted. Are you sure?":{cn:"Log file will be deleted. Are you sure?",en:"Log file will be deleted. Are you sure?"},"Log size:":{cn:"Log size",en:"Log size"},"Login timeout(sec):":{cn:"Login timeout (sec)",en:"Login timeout (sec)"},Logout:{cn:"Logout",en:"Logout"},"Longitude:":{cn:"Longitude",en:"Longitude"},Luxembourg:{cn:"Luxembourg",en:"Luxembourg"},MB:{cn:"Mb",en:"Mb"},Macau:{cn:"Macau",en:"Macau"},Macedonia:{cn:"Macedonia",en:"Macedonia"},Madagascar:{cn:"Madagascar",en:"Madagascar"},Mai:{cn:"Mai",en:"Mai"},Main:{cn:"Main",en:"Main"},"Main settings":{cn:"Main settings",en:"Main settings"},Malawi:{cn:"Malawi",en:"Malawi"},Malaysia:{cn:"Malaysia",en:"Malaysia"},Maldives:{cn:"Maldives",en:"Maldives"},Mali:{cn:"Mali",en:"Mali"},Malta:{cn:"Malta",en:"Malta"},"Manually created":{cn:"Manually created",en:"Manually created"},Mar:{cn:"Mar",en:"Mar"},March:{cn:"March",en:"March"},"Marshall Islands":{cn:"Marshall Islands",en:"Marshall Islands"},Martinique:{cn:"Martinique",en:"Martinique"},Mauritania:{cn:"Mauritania",en:"Mauritania"},Mauritius:{cn:"Mauritius",en:"Mauritius"},Mayotte:{cn:"Mayotte",en:"Mayotte"},Members:{cn:"Members",en:"Members"},Message:{cn:"Message",en:"Message"},"Message buffer overflow. Losing oldest":{cn:"Message buffer overflow. Losing oldest.",en:"Message buffer overflow. Losing oldest."},Mexico:{cn:"Mexico",en:"Mexico"},Micronesia:{cn:"Micronesia",en:"Micronesia"},Model:{cn:"Model",en:"Model"},Moldova:{cn:"Moldova",en:"Moldova"},Mon:{cn:"Mon",en:"Mon"},Monaco:{cn:"Monaco",en:"Monaco"},Mongolia:{cn:"Mongolia",en:"Mongolia"},Montenegro:{cn:"Montenegro",en:"Montenegro"},Montserrat:{cn:"Montserrat",en:"Montserrat"},Morocco:{cn:"Morocco",en:"Morocco"},Mozambique:{cn:"Mozambique",en:"Mozambique"},Myanmar:{cn:"Myanmar",en:"Myanmar"},NPM:{cn:"NPM",en:"NPM"},Name:{cn:"Name",en:"Name"},"Name:":{cn:"Name",en:"Name"},Namibia:{cn:"Namibia",en:"Namibia"},Nauru:{cn:"Nauru",en:"Nauru"},Nepal:{cn:"Nepal",en:"Nepal"},Netherlands:{cn:"Netherlands",en:"Netherlands"},"Netherlands Antilles":{cn:"Netherlands Antilles",en:"Netherlands Antilles"},New:{cn:"New",en:"New"},"New Caledonia":{cn:"New Caledonia",en:"New Caledonia"},"New Zealand":{cn:"New Zealand",en:"New Zealand"},"New category":{cn:"New category",en:"New category"},"New enum":{cn:"New enum",en:"New enum"},"New group":{cn:"New group",en:"New group"},"New object":{cn:"New object",en:"New object"},"New objekt":{cn:"New object",en:"New object"},"New user":{cn:"New user",en:"New user"},Nicaragua:{cn:"Nicaragua",en:"Nicaragua"},Niger:{cn:"Niger",en:"Niger"},Nigeria:{cn:"Nigeria",en:"Nigeria"},Niue:{cn:"Niue",en:"Niue"},"No data":{cn:"No data",en:"No data"},"No states selected!":{cn:"No states selected!",en:"No states selected!"},"No version of %s":{cn:"No version of %s",en:"No version of %s"},"Node.js":{cn:"Node.js",en:"Node.js"},"Norfolk Island":{cn:"Norfolk Island",en:"Norfolk Island"},"Northern Mariana Islands":{cn:"Northern Mariana Islands",en:"Northern Mariana Islands"},Norway:{cn:"Norway",en:"Norway"},"Not exists":{cn:"Does not exist",en:"Does not exist"},"Note:":{cn:"Note",en:"Note"},Nov:{cn:"Nov",en:"Nov"},November:{cn:"November",en:"November"},OS:{cn:"OS",en:"OS"},'Object "<b>%s</b>" does not exists. Update the page.':{cn:'Object "<b>%s</b>" does not exist. Update the page.',en:'Object "<b>%s</b>" does not exist. Update the page.'},"Object may not be deleted":{cn:"Object may not be deleted",en:"Object may not be deleted"},"Object rights":{cn:"Object rights",en:"Object rights"},Objects:{cn:"Objects",en:"Objects"},Oct:{cn:"Oct",en:"Oct"},October:{cn:"October",en:"October"},Ok:{cn:"Ok",en:"Ok"},Oman:{cn:"Oman",en:"Oman"},"Only one":{cn:"Only one",en:"Only one"},"Open original":{cn:"Open on new tab",en:"Open on new tab"},Owner:{cn:"Owner",en:"Owner"},"Owner group":{cn:"Owner group",en:"Owner group"},"Owner user":{cn:"Owner user",en:"Owner user"},Pakistan:{cn:"Pakistan",en:"Pakistan"},Palau:{cn:"Palau",en:"Palau"},Palestine:{cn:"Palestine",en:"Palestine"},Panama:{cn:"Panama",en:"Panama"},"Papua New Guinea":{cn:"Papua New Guinea",en:"Papua New Guinea"},Paraguay:{cn:"Paraguay",en:"Paraguay"},Parent:{cn:"Parent",en:"Parent"},"Parse error":{cn:"Parse error",en:"Parse error"},Password:{cn:"Password",en:"Password"},"Password and confirmation are not equal!":{cn:"Password and confirmation are not equal!",en:"Password and confirmation are not equal!"},"Password cannot be empty!":{cn:"Password cannot be empty!",en:"Password cannot be empty!"},"Password repeat":{cn:"Password repeat",en:"Password repeat"},"Path to storage:":{cn:"Path to storage",en:"Path to storage"},"Pause output":{cn:"Pause output",en:"Pause output"},Peru:{cn:"Peru",en:"Peru"},Philippines:{cn:"Philippines",en:"Philippines"},Pitcairn:{cn:"Pitcairn",en:"Pitcairn"},Platform:{cn:"Platform",en:"Platform"},"Please confirm":{cn:"Please confirm",en:"Please confirm"},Poland:{cn:"Poland",en:"Poland"},Popular:{cn:"Popular",en:"Popular"},"Popular first":{cn:"Popular first",en:"Popular first"},"Port to check the domain:":{cn:"Port to check the domain",en:"Port to check the domain"},Portugal:{cn:"Portugal",en:"Portugal"},"Preserve ID":{cn:"Preserve ID",en:"Preserve ID"},Preview:{cn:"Preview",en:"Preview"},"Processing...":{cn:"Processing...",en:"Processing..."},"Puerto Rico":{cn:"Puerto Rico",en:"Puerto Rico"},Qatar:{cn:"Qatar",en:"Qatar"},RAM:{cn:"RAM",en:"RAM"},"RAM total usage:":{cn:"Total RAM usage:",en:"Total RAM usage:"},"RAM usage":{cn:"RAM usage",en:"RAM usage"},"Rebuild tree":{cn:"Rebuild tree",en:"Rebuild tree"},"Recently updated":{cn:"Recently updated",en:"Recently updated"},"Refresh log":{cn:"Refresh log",en:"Refresh log"},Removed:{cn:"Removed",en:"Removed"},"Removing of adapter...":{cn:"Removing of adapter...",en:"Removing of adapter..."},"Removing of instance...":{cn:"Removing of instance...",en:"Removing of instance..."},Rename:{cn:"Rename",en:"Rename"},Repositories:{cn:"Repositories",en:"Repositories"},Reunion:{cn:"Reunion",en:"Reunion"},Rights:{cn:"Access rights",en:"Access rights"},Role:{cn:"Role",en:"Role"},Romania:{cn:"Romania",en:"Romania"},Room:{cn:"Room",en:"Room"},"Running: ":{cn:"Running: ",en:"Running: "},"Russian Federation":{cn:"Russian Federation",en:"Russian Federation"},Rwanda:{cn:"Rwanda",en:"Rwanda"},"Saint Kitts and Nevis":{cn:"Saint Kitts and Nevis",en:"Saint Kitts and Nevis"},"Saint Lucia":{cn:"Saint Lucia",en:"Saint Lucia"},"Saint Vincent and the Grenadines":{cn:"Saint Vincent and the Grenadines",en:"Saint Vincent and the Grenadines"},Samoa:{cn:"Samoa",en:"Samoa"},"San Marino":{cn:"San Marino",en:"San Marino"},"Sao Tome and Principe":{cn:"Sao Tome and Principe",en:"Sao Tome and Principe"},Sat:{cn:"Sat",en:"Sat"},"Saudi Arabia":{cn:"Saudi Arabia",en:"Saudi Arabia"},Save:{cn:"Save",en:"Save"},"Save Objecttree as JSON File":{cn:"Save objects tree as JSON file",en:"Save objects tree as JSON file"},"Save Objecttree is not possible":{cn:"Saving the objects tree is not possible",en:"Saving the objects tree is not possible"},"Save configuration":{cn:"Save configuration",en:"Save configuration"},Script:{cn:"Script",en:"Script"},Scripts:{cn:"Scripts",en:"Scripts"},Select:{cn:"Select",en:"Select"},"Select ID":{cn:"Select ID",en:"Select ID"},"Select adapter:":{cn:"Select adapter",en:"Select adapter"},"Select language":{cn:"Select language",en:"Select language"},"Select options":{cn:"Select options",en:"Select options"},Senegal:{cn:"Senegal",en:"Senegal"},"Sent data:":{cn:"Sent data",en:"Sent data"},Sep:{cn:"Sep",en:"Sep"},September:{cn:"September",en:"September"},Serbia:{cn:"Serbia",en:"Serbia"},Set:{cn:"Set",en:"Set"},"Set CRON":{cn:"Set",en:"Set"},"Set CRON schedule for restarts":{cn:"Set CRON schedule for restarts",en:"Set CRON schedule for restarts"},Settings:{cn:"Settings",en:"Settings"},"Settings for %s":{cn:"Settings for %s",en:"Settings for %s"},Seychelles:{cn:"Seychelles",en:"Seychelles"},"Show instances only for current host":{cn:"Show instances only for current host",en:"Show instances only for current host"},"Show values of instance":{cn:"Show values of instance",en:"Show values of instance"},"Show...":{cn:"Show...",en:"Show..."},"Sierra Leone":{cn:"Sierra Leone",en:"Sierra Leone"},Singapore:{cn:"Singapore",en:"Singapore"},"Size: %s, Free: %s":{cn:"Size: %s, Available: %s",en:"Size: %s, Available: %s"},Slovakia:{cn:"Slovakia",en:"Slovakia"},Slovenia:{cn:"Slovenia",en:"Slovenia"},"Solomon Islands":{cn:"Solomon Islands",en:"Solomon Islands"},Somalia:{cn:"Somalia",en:"Somalia"},"Some data are not stored. Discard?":{cn:"Some data are not stored. Discard?",en:"Some data are not stored. Discard?"},"Sort alphabetically":{cn:"Sort alphabetically by name",en:"Sort alphabetically by name"},"South Africa":{cn:"South Africa",en:"South Africa"},"South Georgia South Sandwich Islands":{cn:"South Georgia South Sandwich Islands",en:"South Georgia South Sandwich Islands"},Spain:{cn:"Spain",en:"Spain"},Speed:{cn:"Speed",en:"Speed"},"Sri Lanka":{cn:"Sri Lanka",en:"Sri Lanka"},"St. Helena":{cn:"St. Helena",en:"St. Helena"},"St. Pierre and Miquelon":{cn:"St. Pierre and Miquelon",en:"St. Pierre and Miquelon"},"Started...":{cn:"Started...",en:"Started..."},State:{cn:"Datapoint",en:"Datapoint"},"State&nbsp;type":{cn:"State type",en:"State type"},States:{cn:"States",en:"States"},"States rights":{cn:"States rights",en:"States rights"},Statistics:{cn:"Statistics",en:"Statistics"},"Statistics:":{cn:"Statistics",en:"Statistics"},"Storage of %s":{cn:'Storage of <span class="name">%s</span>',en:'Storage of <span class="name">%s</span>'},"Storage of %s states":{cn:'Storage of <span class="name">%s</span> states',en:'Storage of <span class="name">%s</span> states'},"Success!":{cn:"Success!",en:"Success!"},Sudan:{cn:"Sudan",en:"Sudan"},Suggestion:{cn:"Recommendation",en:"Recommendation"},Sun:{cn:"Sun",en:"Sun"},Suriname:{cn:"Suriname",en:"Suriname"},"Svalbard and Jan Mayen Islands":{cn:"Svalbard and Jan Mayen Islands",en:"Svalbard and Jan Mayen Islands"},Swaziland:{cn:"Swaziland",en:"Swaziland"},Sweden:{cn:"Sweden",en:"Sweden"},Switzerland:{cn:"Switzerland",en:"Switzerland"},"Syrian Arab Republic":{cn:"Syrian Arab Republic",en:"Syrian Arab Republic"},System:{cn:"System",en:"System"},"System language:":{cn:"System language",en:"System language"},"System settings":{cn:"System settings",en:"System settings"},"System uptime":{cn:"System uptime",en:"System uptime"},Table:{cn:"Table",en:"Table"},Taiwan:{cn:"Taiwan",en:"Taiwan"},Tajikistan:{cn:"Tajikistan",en:"Tajikistan"},Tanzania:{cn:"Tanzania",en:"Tanzania"},"Temperature units:":{cn:"Temperature units",en:"Temperature units"},Thailand:{cn:"Thailand",en:"Thailand"},'This version of node.js "%s" on "%s" is deprecated. Please install node.js 6, 8 or newer':{cn:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.',en:'yunkong2 supports the LTS versions 6, 8, 10 or newer of node.js. Please update your version ("%s") on host "%s" to one of the supported versions. We recommend to use Node.js 6.'},Thu:{cn:"Thu",en:"Thu"},Time:{cn:"Time",en:"Time"},"Time From":{cn:"Time From",en:"Time From"},"Time To":{cn:"Time To",en:"Time To"},"Time stamp":{cn:"Time stamp",en:"Time stamp"},Title:{cn:"Title",en:"Title"},To:{cn:"To",en:"To"},Today:{cn:"Today",en:"Today"},"Toggle expert mode":{cn:"Toggle expert mode",en:"Toggle expert mode"},"Toggle states view":{cn:"Toggle the states view",en:"Toggle the states view"},Togo:{cn:"Togo",en:"Togo"},Tokelau:{cn:"Tokelau",en:"Tokelau"},Tonga:{cn:"Tonga",en:"Tonga"},"Too many events":{cn:"Too many events",en:"Too many events"},"Total count in group":{cn:"Total count in group",en:"Total count in group"},"Trigger event":{cn:"Trigger event",en:"Trigger event"},"Trinidad and Tobago":{cn:"Trinidad and Tobago",en:"Trinidad and Tobago"},Tue:{cn:"Tue",en:"Tue"},Tunisia:{cn:"Tunisia",en:"Tunisia"},Turkey:{cn:"Turkey",en:"Turkey"},Turkmenistan:{cn:"Turkmenistan",en:"Turkmenistan"},"Turks and Caicos Islands":{cn:"Turks and Caicos Islands",en:"Turks and Caicos Islands"},Tuvalu:{cn:"Tuvalu",en:"Tuvalu"},Type:{cn:"Type",en:"Type"},"URL or file path:":{cn:"URL or file path",en:"URL or file path"},Uganda:{cn:"Uganda",en:"Uganda"},Ukraine:{cn:"Ukraine",en:"Ukraine"},"Uncheck All":{cn:"Uncheck All",en:"Uncheck All"},"United Arab Emirates":{cn:"United Arab Emirates",en:"United Arab Emirates"},"United Kingdom":{cn:"United Kingdom",en:"United Kingdom"},"United States":{cn:"United States",en:"United States"},"United States minor outlying islands":{cn:"United States minor outlying islands",en:"United States minor outlying islands"},"Unknown file format!":{cn:"Unknown file format!",en:"Unknown file format!"},Unsecure_Auth:{cn:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!",en:"The password will be sent via unsecure connection. To protect your passwords enable the secure connection (HTTPS)!"},"Unsupported image format":{cn:"Unsupported image format",en:"Unsupported image format"},Update:{cn:"Update",en:"Update"},"Update objects":{cn:"Update objects",en:"Update objects"},"Update states":{cn:"Update states",en:"Update states"},Updated:{cn:"Updated",en:"Updated"},"Upgrade all adapters":{cn:"Upgrade all adapters",en:"Upgrade all adapters"},Upload:{cn:"File upload",en:"File upload"},"Upload admin started":{cn:"Upload of configuration is started",en:"Upload of configuration is started"},"Upload started...":{cn:"Upload started...",en:"Upload started..."},Uptime:{cn:"Uptime",en:"Uptime"},Uruguay:{cn:"Uruguay",en:"Uruguay"},"Use Lets Encrypt certificates:":{cn:"Use Let's Encrypt certificates",en:"Use Let's Encrypt certificates"},"Use this instance for automatic update:":{cn:"Use this instance for automatic update",en:"Use this instance for automatic update"},User:{cn:"User",en:"User"},"User deleted":{cn:"User deleted",en:"User deleted"},"User does not exist":{cn:"User does not exist",en:"User does not exist"},"User yet exists":{cn:"User already exists",en:"User already exists"},Users:{cn:"Users",en:"Users"},Uzbekistan:{cn:"Uzbekistan",en:"Uzbekistan"},Value:{cn:"Value",en:"Value"},"Values of %s":{cn:"Values of %s",en:"Values of %s"},Vanuatu:{cn:"Vanuatu",en:"Vanuatu"},"Vatican City State":{cn:"Vatican City State",en:"Vatican City State"},Venezuela:{cn:"Venezuela",en:"Venezuela"},Vietnam:{cn:"Vietnam",en:"Vietnam"},"Virgin Islands (British)":{cn:"Virgin Islands (British)",en:"Virgin Islands (British)"},"Virgin Islands (U.S.)":{cn:"Virgin Islands (U.S.)",en:"Virgin Islands (U.S.)"},"Wallis and Futuna Islands":{cn:"Wallis and Futuna Islands",en:"Wallis and Futuna Islands"},"Warning!":{cn:"Warning!",en:"Warning!"},Wed:{cn:"Wed",en:"Wed"},"Western Sahara":{cn:"Western Sahara",en:"Western Sahara"},With:{cn:"With",en:"With"},Without:{cn:"Without",en:"Without"},Yemen:{cn:"Yemen",en:"Yemen"},"You are going to add new instance: ":{cn:"You are going to add new instance: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog <a href="https://github.com/yunkong2/yunkong2.js-controller/blob/master/CHANGELOG.md" target="_blank">here</a>',en:'You can check the changelog <a href="https://github.com/yunkong2/yunkong2.js-controller/blob/master/CHANGELOG.md" target="_blank">here</a>'},"You can drag&drop the devices, channels and states to enums":{cn:"You can drag&drop the devices, channels and states to enums",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"You can drag&drop users to groups",en:"You can drag&drop users to groups"},"You can't see events via cloud":{cn:"You can't see events via cloud",en:"You can't see events via cloud"},"Your home":{cn:"Your home",en:"Your home"},Zaire:{cn:"Zaire",en:"Zaire"},Zambia:{cn:"Zambia",en:"Zambia"},Zimbabwe:{cn:"Zimbabwe",en:"Zimbabwe"},_All:{cn:"All",en:"All"},"_Toggle expert mode":{cn:"Toggle expert mode",en:"Toggle expert mode"},__different__:{cn:"different",en:"different"},"a-z":{cn:"a-z",en:"a-z"},ack:{cn:"ack",en:"ack"},actions:{cn:"actions",en:"actions"},active:{cn:"active",en:"active"},"adapter with updates":{cn:"adapters with updates",en:"adapters with updates"},"adapters count":{cn:"adapters count",en:"adapters count"},add:{cn:"Add",en:"Add"},"add children":{cn:"add children",en:"add children"},"add instance":{cn:"add instance",en:"add instance"},"add repository":{cn:"add repository",en:"add repository"},agree:{cn:"agree",en:"agree"},alarm_group:{cn:"Alarm",en:"Alarm"},alive:{cn:"alive",en:"alive"},all:{cn:"all",en:"all"},alpha:{cn:"alpha",en:"alpha"},array:{cn:"array",en:"array"},auto:{cn:"auto",en:"auto"},available:{cn:"available",en:"available"},beta:{cn:"beta",en:"beta"},boolean:{cn:"boolean",en:"boolean"},bug:{cn:"bugtracker",en:"bugtracker"},cancel:{cn:"Cancel",en:"Cancel"},cert_path_note:{cn:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop",en:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"},certificate:{cn:"certificate",en:"certificate"},"change view mode":{cn:"change view mode",en:"change view mode"},channel:{cn:"channel",en:"channel"},clear:{cn:"clear",en:"clear"},"climate-control_group":{cn:"Climate Control",en:"Climate Control"},"close on ready":{cn:"close on ready",en:"close on ready"},collapse:{cn:"collapse",en:"collapse"},"collapse all":{cn:"collapse all",en:"collapse all"},comma:{cn:"comma",en:"comma"},"command execution":{cn:"Command execution",en:"Command execution"},common:{cn:"common",en:"common"},"common adapters_group":{cn:"Common",en:"Common"},common_color:{cn:"color",en:"color"},common_def:{cn:"default value",en:"default value"},common_desc:{cn:"description",en:"description"},common_icon:{cn:"icon",en:"icon"},common_max:{cn:"max value",en:"max value"},common_min:{cn:"minimal value",en:"minimal value"},common_read:{cn:"read allowed",en:"read allowed"},common_role:{cn:"role",en:"role"},common_states:{cn:"predefined values",en:"predefined values"},common_type:{cn:"type",en:"type"},common_unit:{cn:"measure unit",en:"measure unit"},common_write:{cn:"write allowed",en:"write allowed"},communication_group:{cn:"Communication",en:"Communication"},config:{cn:"Settings",en:"Settings"},"config instance":{cn:"config instance",en:"config instance"},"confirm password":{cn:"Confirm password",en:"Confirm password"},connected:{cn:"connected",en:"connected"},copy:{cn:"copy",en:"copy"},"copy note":{cn:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close.",en:"Press Ctrl+A and Ctrl+C to copy the log to the clipboard and click with the mouse anywhere to close."},"create operation":{cn:"create",en:"create"},"custom enum":{cn:"?ustom enum",en:"?ustom enum"},"custom group":{cn:"Custom group",en:"Custom group"},daemon:{cn:"daemon",en:"daemon"},"date-and-time_group":{cn:"Date and Time",en:"Date and Time"},daysShortText:{cn:"d.",en:"d."},debug:{cn:"debug",en:"debug"},delete:{cn:"delete",en:"delete"},"delete adapter":{cn:"delete adapter",en:"delete adapter"},"delete group":{cn:"delete group",en:"delete group"},"delete instance":{cn:"delete instance",en:"delete instance"},"delete operation":{cn:"delete",en:"delete"},"delete script":{cn:"delete script",en:"delete script"},"delete user":{cn:"delete user",en:"delete user"},desc:{cn:"desc",en:"desc"},description:{cn:"Description",en:"Description"},device:{cn:"device",en:"device"},"diag-note":{cn:"We worked hard to create this project. In return we expect from you some usage statistics.<br>Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.<br>Thank you!",en:"We worked hard to create this project. In return we expect from you some usage statistics.<br>Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.<br>Thank you!"},edit:{cn:"edit",en:"edit"},"edit enum":{cn:"edit enum",en:"edit enum"},"edit enums":{cn:"Edit enumerations for",en:"Edit enumerations for"},"edit file":{cn:"edit file",en:"edit file"},"edit group":{cn:"edit group",en:"edit group"},"edit instance":{cn:"edit instance",en:"edit instance"},"edit script":{cn:"edit script",en:"edit script"},"edit user":{cn:"edit user",en:"edit user"},"edit value":{cn:"Edit value",en:"Edit value"},enabled:{cn:"enabled",en:"enabled"},energy_group:{cn:"Energy",en:"Energy"},engine:{cn:"engine",en:"engine"},"engine type":{cn:"engine type",en:"engine type"},error:{cn:"error",en:"error"},events:{cn:"events",en:"events"},"execute operation":{cn:"Execute operation",en:"Execute operation"},expand:{cn:"expand",en:"expand"},"expand all":{cn:"expand all",en:"expand all"},extended:{cn:"extended",en:"extended"},false:{cn:"false",en:"false"},"file permissions":{cn:"File permissions",en:"File permissions"},from:{cn:"from",en:"from"},garden_group:{cn:"Garden",en:"Garden"},general_group:{cn:"General",en:"General"},geoposition_group:{cn:"Geo position",en:"Geo position"},groups:{cn:"groups",en:"groups"},hardware_group:{cn:"Hardware",en:"Hardware"},history:{cn:"history",en:"history"},"history data":{cn:"history data",en:"history data"},host:{cn:"host",en:"host"},household_group:{cn:"Household",en:"Household"},"http operation":{cn:"http",en:"http"},id:{cn:"ID",en:"ID"},info:{cn:"info",en:"info"},infrastructure_group:{cn:"Infrastructure",en:"Infrastructure"},install:{cn:"install",en:"install"},"install specific version":{cn:"Install a specific version",en:"Install a specific version"},installed:{cn:"installed",en:"installed"},"installed adapters":{cn:"Filter adapters with existing instances",en:"Filter adapters with existing instances"},instance:{cn:"instance",en:"instance"},"instance number":{cn:"Desired instance number",en:"Desired instance number"},"yunkong2 Enums":{cn:"yunkong2 enums",en:"yunkong2 enums"},"yunkong2 States":{cn:"yunkong2 states",en:"yunkong2 states"},"yunkong2 adapter instances":{cn:"yunkong2 adapter instances",en:"yunkong2 adapter instances"},"yunkong2 adapter scripts":{cn:"yunkong2 adapter scripts",en:"yunkong2 adapter scripts"},"yunkong2 adapters":{cn:"yunkong2 adapters",en:"yunkong2 adapters"},"yunkong2 certificates":{cn:"yunkong2 certificates",en:"yunkong2 certificates"},"yunkong2 groups":{cn:"yunkong2 groups",en:"yunkong2 groups"},"yunkong2 hosts":{cn:"yunkong2 hosts",en:"yunkong2 hosts"},"yunkong2 repositories":{cn:"yunkong2 repositories",en:"yunkong2 repositories"},"yunkong2 users":{cn:"yunkong2 users",en:"yunkong2 users"},"iot-system_group":{cn:"IoT systems",en:"IoT systems"},"iot-systems_group":{cn:"IoT Systems",en:"IoT Systems"},keywords:{cn:"keywords",en:"keywords"},lc:{cn:"Last change",en:"Last change"},less:{cn:"less",en:"less"},letsnecrypt_help:{cn:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more <a href="https://letsencrypt.org/" target="_blank">here</a>.',en:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more <a href="https://letsencrypt.org/" target="_blank">here</a>.'},letsnecrypt_help_domains:{cn:"E.g: 'example.com, www.example.com'",en:"E.g: 'example.com, www.example.com'"},letsnecrypt_help_email:{cn:"Please use your email address. It will be used for your account.",en:"Please use your email address. It will be used for your account."},letsnecrypt_help_path:{cn:"Directory name where the certificates will be stored. This is always relative to configuration directory",en:"Directory name where the certificates will be stored. This is always relative to configuration directory"},license:{cn:"license",en:"license"},"license agreement":{cn:"license agreement",en:"license agreement"},"license not agree":{cn:"Do not agree with the license!",en:"Do not agree with the license!"},license_checkbox:{cn:"I agree with the collection of anonymous statistics.<br>(This can be disabled in settings)",en:"I agree with the collection of anonymous statistics.<br>(This can be disabled in settings)"},lighting_group:{cn:"Lighting",en:"Lighting"},link:{cn:"link",en:"link"},list:{cn:"list",en:"list"},"list operation":{cn:"list elements",en:"list elements"},logic_group:{cn:"Logic",en:"Logic"},loglevel:{cn:"loglevel",en:"loglevel"},media_group:{cn:"Media",en:"Media"},members:{cn:"members",en:"members"},memlimit:{cn:"RAM limit",en:"RAM limit"},message:{cn:"message",en:"message"},messaging_group:{cn:"Messaging",en:"Messaging"},"misc-data_group":{cn:"Misc. data",en:"Misc. data"},mixed:{cn:"mixed",en:"mixed"},mode:{cn:"mode",en:"mode"},more:{cn:"more",en:"more"},multi:{cn:"multistate",en:"multistate"},multimedia_group:{cn:"Multimedia",en:"Multimedia"},name:{cn:"name",en:"name"},native:{cn:"native",en:"native"},network_group:{cn:"Network",en:"Network"},"new certificate":{cn:"new certificate",en:"new certificate"},"new group":{cn:"new group",en:"new group"},"new script":{cn:"new script",en:"new script"},"new user":{cn:"new user",en:"new user"},newObject:{cn:"New object",en:"New object"},"no-city":{cn:"no city",en:"no city"},"node-red":{cn:"node-red",en:"node-red"},none:{cn:"none",en:"none"},normal:{cn:"normal",en:"normal"},"not ack":{cn:"not ack",en:"not ack"},"not agree":{cn:"not agree",en:"not agree"},"npm error":{cn:"npm error",en:"npm error"},number:{cn:"number",en:"number"},object:{cn:"object",en:"object"},"object permissions":{cn:"Object permissions",en:"Object permissions"},of:{cn:"of",en:"of"},ok:{cn:"Ok",en:"Ok"},"open web page":{cn:"Open web page of adapter",en:"Open web page of adapter"},os:{cn:"operating system",en:"operating system"},"other permissions":{cn:"Other permissions",en:"Other permissions"},"parent name":{cn:"parent name",en:"parent name"},password:{cn:"Password",en:"Password"},permissionError:{cn:"Permission error",en:"Permission error"},"place here":{cn:"place the files here",en:"place the files here"},planned:{cn:"planned",en:"planned"},platform:{cn:"platform",en:"platform"},point:{cn:"point",en:"point"},popular:{cn:"popular",en:"popular"},process:{cn:"process",en:"process"},protocols_group:{cn:"Protocols",en:"Protocols"},raw:{cn:"Raw (experts only)",en:"Raw (experts only)"},read:{cn:"read",en:"read"},"read operation":{cn:"read",en:"read"},readme:{cn:"readme",en:"readme"},reload:{cn:"reload",en:"reload"},"reload instance":{cn:"reload instance",en:"reload instance"},rest:{cn:"rest (read only)",en:"rest (read only)"},restart:{cn:"auto restart",en:"auto restart"},"restart script":{cn:"restart script",en:"restart script"},role:{cn:"role",en:"role"},save:{cn:"save",en:"save"},schedule_group:{cn:"Schedule",en:"Schedule"},script_group:{cn:"Scripts and Logic",en:"Scripts and Logic"},"select member by double click":{cn:"select member by double clicking",en:"select member by double clicking"},"sendto operation":{cn:"Send-to operation",en:"Send-to operation"},service_group:{cn:"Maintenance",en:"Maintenance"},severity:{cn:"severity",en:"severity"},silly:{cn:"silly",en:"silly"},stable:{cn:"stable",en:"stable"},state:{cn:"state",en:"state"},"state permissions":{cn:"State permissions",en:"State permissions"},storage_group:{cn:"Storage",en:"Storage"},string:{cn:"string",en:"string"},subscribe:{cn:"subscribe",en:"subscribe"},switch:{cn:"switch",en:"switch"},terminal:{cn:"Terminal",en:"Terminal"},"third-party_group":{cn:"Third party",en:"Third party"},"this adapter does not allow multiple instances":{cn:"This adapter does not allow multiple instances",en:"This adapter does not allow multiple instances"},title:{cn:"title",en:"title"},today:{cn:"today",en:"today"},true:{cn:"true",en:"true"},ts:{cn:"Timestamp",en:"Timestamp"},type:{cn:"type",en:"type"},unit:{cn:"unit",en:"unit"},update:{cn:"update",en:"update"},"update adapter information":{cn:"update adapter information",en:"update adapter information"},"update-part1":{cn:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:",en:"Because yunkong2 runs on many very different platforms, only manual updating is possible at the moment. To start the manual update, please go to your controller via console and execute the following:"},updated:{cn:"updated",en:"updated"},updates:{cn:"updates",en:"updates"},upload:{cn:"Upload",en:"Upload"},"user permissions":{cn:"user permissions",en:"user permissions"},users:{cn:"users",en:"users"},"users permissions":{cn:"User permissions",en:"User permissions"},utility_group:{cn:"Utility",en:"Utility"},val:{cn:"val",en:"val"},value:{cn:"value",en:"value"},"value.from":{cn:"Changed from",en:"Changed from"},"value.lc":{cn:"Last change",en:"Last change"},"value.q":{cn:"Quality code",en:"Quality code"},"value.ts":{cn:"Timestamp",en:"Timestamp"},"value.val":{cn:"value",en:"value"},version:{cn:"version",en:"version"},vis_group:{cn:"yunkong2.vis",en:"yunkong2.vis"},visualisation_group:{cn:"Visualisation",en:"Visualisation"},"visualization-icons_group":{cn:"Visualization Icons",en:"Visualization Icons"},"visualization-widgets_group":{cn:"Visualization Widgets",en:"Visualization Widgets"},visualization_group:{cn:"Visualisation",en:"Visualisation"},warn:{cn:"warn",en:"warn"},weather_group:{cn:"Weather",en:"Weather"},wetty:{cn:"Wetty",en:"Wetty"},write:{cn:"write",en:"write"},"write operation":{cn:"write",en:"write"},yesterday:{cn:"yesterday",en:"yesterday"}};
//# sourceMappingURL=app.js.map