diff --git a/www/js/app.js b/www/js/app.js index f47ba2e..72db220 100644 --- a/www/js/app.js +++ b/www/js/app.js @@ -1,2 +1,2 @@ -"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(0td"),a=H.data[n.key];function s(e){return'
'+e+"
"}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("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'+l+' / '+H.tree[c].children.length+"]",i.eq(1).html(s(''+l+" "+_("of")+' '+H.tree[c].children.length+" "+_("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 B(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&G({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 G(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||"cn"===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'),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='",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i'+n[i]+"")}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,i,a;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))e=H.$installDialog.find("#install-url-link").val(),i=H.$installDialog.find("#install-url-link-username").val(),a=H.$installDialog.find("#install-url-link-password").val(),i&&(e=e.replace("https://","https://"+i+":"+a+"@")+" --production"),e.startsWith("http")&&e.endsWith(".git")&&(e="git+"+e),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var s=H.$installDialog.find("#install-github-link").val().split(" ");e=s[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+s[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?B():H.$grid.fancytree("getTree").filterNodes(G,!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'+e+'',t&&(e+=''),e+=""}c.sort(),H.tree=[],H.data={};for(var m=0;m';for(var w=0;w',b!==p&&(g+=''+p+"",b&&(g+=" ~ ")),b&&(g+=''+b+""),g+=""):g+='',g+=''+n.version+"",h=''+n.version+"",g+="",!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 L=n.titleLang||n.title;if(L="object"==typeof L?L[systemLang]||L.en:L,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(L||"").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:''+(H.main.config.expertMode?'':"")+"'+(H.main.config.expertMode?'':""),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 N=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(L||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(H.main.config.expertMode?'':""),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;IH.data[t].stat?-1:H.data[e].statH.data[t].versionDate?-1:H.data[e].versionDate',O+='
',O+='
',O+='
',O+=' ',O+=' '+S.title+"",O+=' more_vert',O+='
    ',O+="
  • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
  • ",S.installed&&(O+="
  • "+d["Installed version"]+': '+S.rawInstalled+"
  • "),S.instances&&(O+="
  • "+_("Installed instances")+': '+S.instances+"
  • "),O+="
",O+="
",O+=' ',O+='
',O+=' close',O+="

"+S.desc+"

",O+='
',O+=S.install,O+="
",O+="
","popular"===H.currentOrder&&S.stat?O+='
'+S.stat+"
":"updated"===H.currentOrder&&S.versionDate&&(O+='
'+J(S.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"
"),O+="
",O+=""}for(var Y in O+='
',O+='
',O+='
',O+='
',O+=' '+_("Filtered out")+"",O+="
",O+=' ',O+="
",O+="
",H.$tiles.html(O),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var Q='
  • '+d.all+"
  • \n",P=0;P'+_(A[P])+"\n";var U=H.$tab.find("#main-toolbar-table-types");U.html(Q),U.find(".main-toolbar-table-types-item").show().off("click").on("click",function(){H.currentType=$(this).data("type")||"",B(),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}),B()}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='
    ',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(G,!1),H.sortTree(),H.enableColResize();var R=["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(R[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):$(''+e+"").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'+o.name+""}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'+_("auto")+"";for(var m=0;m'+m+"");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);"object"==typeof H.data[i].licenseUrl&&(H.data[i].licenseUrl=H.data[i].licenseUrl[systemLang]||H.data[i].licenseUrl.en),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,"
    ")).replace(/\n/g,"
    "),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='
    ',a=0;a'+e[a]+' - "}i+="
    ";var o=$("#adapters-menu");o.length||((o=$('")).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,z,x,O,A,E="__different__",S=this;function Y(e){if(e)S.historyTimeout&&clearTimeout(S.historyTimeout);else if(S.historyTimeout)return;S.historyTimeout=setTimeout(function(){S.historyTimeout=null,O&&S.loadHistoryTable(O.data("id"),!0)},e||5e3)}function Q(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 P(e){e.stopPropagation(),e.preventDefault();var t=S.$dialog.find("#customs-tabs"),c=t.data("ids");S.currentCustoms=null;var l=_(E);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
    '+_("Settings for %s",j)+' '+_("active")+'
    '+$('script[data-template-name="'+v+'"]').html()+"
    ",T=$(N);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)),S.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],S.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]===E?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===E?("number"===n.attr("type")&&n.attr("type","text"),"SELECT"===n.prop("tagName").toUpperCase()?(n.prepend('"),n.val(o)):n.val("").attr("placeholder",o)):n.val(r[t][a]):(S.defaults[i]&&void 0!==S.defaults[i][a]&&(e=S.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(S.$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(){S.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")})}),this.showCustomsData(1'+_("Loading...")+"");var n={aggregate:"none",instance:O.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(''+r+"");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+=' '+c[s].val+" "+c[s].ack+" "+o+" "+C.formatDate(c[s].ts)+" "+C.formatDate(c[s].lc)+"\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=''+_("No data")+"";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(z||(z=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),x=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a"+u[v]+"\n")}if(y){O.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-table",O.val()),S.loadHistoryTable($(this).data("id"))}).select(),A.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-chart",A.val()),S.loadHistoryChart($(this).data("id"))}).select(),void 0!==this.main.config["object-history-table"]&&O.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(){S.$dialog.find("#grid-history-body").html(""),S.loadHistoryTable($(this).data("id"))}),M.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryChart($(this).data("id"))}),b.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryTable($(this).data("id"),!1,!0)});var j=new Date;j.setDate(j.getDate()-1);for(var L={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"]},N=0;N\n
    \n',"state"===i&&"common"===n&&"type"===s?a+='":"string"==typeof t[s]?a+='\n':"number"==typeof t[s]?a+='\n':"boolean"==typeof t[s]?a+='\n":a+='\n";var o=s;"common"===n&&systemDictionary["common_"+s]&&systemDictionary["common_"+s][systemLang]&&(o=_("common_"+s)),"boolean"==typeof t[s]?a+=""+o+"\n":a+="\n",a+='
    \n\n',a+="\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(''),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'+(i||this.main.tabs.users.list[s])+"";for(this.$dialog.find(".object-tab-acl-owner").html(a),a="",s=0;s'+(i||this.main.tabs.users.groups[s])+"";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('color_lens'+_("Color")+""),i.colorpicker({component:".btn",color:i,container:!0}).colorpicker("setValue",e.common.color||"#fff").on("showPicker.colorpicker",function(){}).on("changeColor.colorpicker",function(e){100'+g.main.getIconFromObj(s[e][t])+p(s[e][t])+"");n&&(n+='
  • '),n+='
  • control_point'+_("custom group")+"
  • ",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+='
  • '+g.main.getIconFromObj(a[t])+p(a[t])+"
  • ");n&&(n+='
  • '),n+='
  • control_point'+_("custom enum")+"
  • ",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='';c+='
      ';for(var l=0;l'+g.main.getIcon(g.list[l],null,null,"icon")+''+p(g.main.objects,g.list[l])+"

      "+g.list[l]+"


      ",d&&d.common&&d.common.members&&d.common.members.length)for(var m=0;m'+g.main.getIcon(i)+''+p(g.main.objects,i)+'close
    ');c+='edit',c+='delete',c+=""}c+="
    ",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\n view_list\n note_add\n \n \n queue_play_next\n \n ');var t='
    ';t+='",t+="
    ";for(var a=0;a',t+="");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),0tr.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 "%s" 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;atr.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(''),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){100tr.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 $('
    '+t.find(".fancytree-title").text()+"
    ")},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",cn:"场景"},desc:{en:"List of the rooms"},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",cn:"功能"},desc:{en:"List of the functions"},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")+'
    cloud_off').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 L(){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(L,1e3)),20=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.substring(0,30)+"..."),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.substring(0,30)+"..."),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='';m+=""+c+"",m+=''+e+"",isNaN(a)?m+=''+(a||"")+"":m+=''+(a||"")+"",m+=""+(s||"")+"",m+=""+(l||"")+"",m+=""+(o||"")+"",m+=""+(r||"")+"",m+="",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;epause')}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('');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='';i+='
    ',i+=''+r.main.getHostIcon(t)+"",i+=''+t.common.hostname+"",i+=''+t.common.type+"";var a=t.common.titleLang||t.common.title;return"object"==typeof a&&(a=a[systemLang]||a.en),i+=''+a+"",i+=''+(t.native.os?t.native.os.platform:_("unknown"))+"",i+='',i+=''+t.common.installedVersion+"",r.main.states[t._id+".inputCount"]?i+='⇥'+r.main.states[t._id+".inputCount"].val+' / ↦'+r.main.states[t._id+".outputCount"].val+"":i+=' / ',i+='',i+=""}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='
    '+r.main.getHostIcon(n," ")+'
    '+n.common.hostname+'
    • '+r.words.Type+': '+n.common.type+'
    • '+r.words.Title+': '+n.common.title+'
    • '+r.words.OS+': '+(n.native.os?n.native.os.platform:_("unknown"))+'
    • '+r.words.Available+':
    • '+r.words.Installed+': '+n.common.installedVersion+"
    • ";return r.main.states[n._id+".inputCount"]?a+='
    • '+r.words.Events+': ⇥'+r.main.states[n._id+".inputCount"].val+' / ↦'+r.main.states[n._id+".outputCount"].val+"
    • ":a+='
    • '+r.words.Events+': /
    • ',a+='
    edit autorenew',n.common.hostname!==r.main.currentHost&&(a+=' delete'),a+='
    '}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(''),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'+e+"").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
    '+_("Filtered out")+"
    ")}():function(){for(var e="",t=0;t'+_("Filtered out")+"")}(),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↦'+t.val+"")):e.match(/^system\.host\..+\.inputCount$/)&&(e=e.substring(0,e.length-11),this.$tab.find('.host-in[data-host-id="'+e+'"]').html('↦'+t.val+""))}}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',r+=''+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":r+=_("false"),r+='',r+=''+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":r+=_("false"),r+="",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+=''+_("Connected to %s: ",n)+"",r+=(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?!0===c?''+_("true")+"":''+c+"":_("false"),r+="";r+=""}else{var c;if(r='',r+='",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+='";r+="
    '+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+='
    '+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+="
    '+_("Connected to %s: ",n)+"",(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?r+=!0===c?''+_("true")+"":''+c+"":(o="red"===o?"red":"orange",r+=''+_("false")+""),r+="
    "}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='
    '+$(this).data("title")+"
    ",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'+n+"");var r=_("%s processes",t),c=p.$tab.find("#running_processes");r!==c.text()&&c.html(''+r+"")}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(''+i+""),p.$tab.find("#freeMemPercent").html(''+t+"%"))}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(''+a+""),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?''+t.toFixed(1)+" MB":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?"":'
    ',a+=i?"":"
    ";else{a=i?"":'';var l=s.localLinks||s.localLink||"",d=l?p.replaceInLink(l,r,c):"";l&&(l="object"==typeof d?'':''),a+='
    ',a+=""+(s.icon?l+'':"")+(l?"
    ":"")+"",a+=''+r+"."+c+"";var u=s.onlyWWW||s.enabled;a+='',a+=''+(d?'':"")+"";var m=s.titleLang||s.title;if("object"==typeof m&&(m=m[systemLang]||m.en),a+=''+(m||"")+"",1'+(s.host||"")+""}a+=''+("schedule"===s.mode&&s.schedule||"")+"",p.main.config.expertMode&&(a+=''+(s.restartSchedule||"")+"",a+=''+(s.loglevel||"")+"",a+=''+(s.memoryLimitMB||"")+"",u&&p.main.states[t+".inputCount"]&&p.main.states[t+".outputCount"]?a+='⇥'+p.main.states[t+".inputCount"].val+' / ↦'+p.main.states[t+".outputCount"].val+"":a+=' / '),a+=''+M(t)+"",a+=i?"":""}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(''),$(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';for(var u=0;u'+(m[1]||m[0])+""}c+=""}c=c||'';var g=null;t.html(c+'
    ');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)}),''+s+""):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",o+=''+_("instance")+"",o+='',o+='',o+=''+_("actions")+"",o+=''+_("title")+"",1'+_("host")+""),o+=''+_("schedule_group")+"",p.main.config.expertMode&&(o+=''+_("restart")+"",o+=''+_("loglevel")+"",o+=''+_("memlimit")+"",o+=''+_("events")+""),o+=''+_("RAM usage")+"",p.$gridHead.html(o),this.$grid.html("");for(var a=Date.now(),s=0;s'+_("Filtered out")+""),p.$tab.find("#currentHost").html(this.main.currentHost),1'+s+"")}else"outputCount"===i?p.$tab.find('.instance-out[data-instance-id="'+e+'"]').html('↦'+t.val+""):"inputCount"===i&&p.$tab.find('.instance-in[data-instance-id="'+e+'"]').html('⇥'+t.val+"");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 %s?",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='
    ',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+='"}t+='";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");$(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('
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    ');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"+_(a)+": ",i+=''+(d[a]?d[a](e[a]):e[a]||" --")+"");n&&(i+="
  • "+_("Disk free")+": ",i+=''+(d["Disk free"]?d["Disk free"](e["Disk free"]):e["Disk free"]||" --")+"
  • ",i+="
  • "+_("Disk size")+": ",i+=''+(d["Disk size"]?d["Disk size"](e["Disk size"]):e["Disk size"]||" --")+"
  • "),i+=""}i+="",c.find(".card-content-text").replaceWith($(i)),i='
    '+_("Info")+'
    content_copyclose';var s=[];if(e){for(var o in i+="
      ",e)if(e.hasOwnProperty(o)){i+="
    • "+_(o)+": ";var r=d[o]?d[o](e[o]):e[o];s.push(o+": "+r),i+="Disk free"===o&&n?''+r+"
    • ":''+r+""}i+="
    "}i+="
    ",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.order?1:e.ordert.name.toLowerCase()?1:e.name.toLowerCase()\n \n');$.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[o].name+"")}r.append(a),0}}t||r.append($('
  • '+_("No bug")+"

  • "))}).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=''+_("copy note")+"";$("#log-copy-text").show().html(e+'
    '+s.html()+"
    ");for(var t=c.$tab.find("#log-copy-table").find(".log-column-4"),n=0;n'+a+"")}t.sort();for(var s=0;s'+o+"")}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='';a+=''+(e.from||"")+"",a+=''+this.main.formatDate(e.ts)+"",a+=''+e.severity+"",a+=''+e.message.substring(0,200).replace(/&/g,"&").replace(//g,">")+"",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;epause')}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('
    \n \n
    ');$.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[o].name+"")}r.append(a),0}}t||r.append($('
  • '+_("No bug")+"

  • "))}).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').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[a].name+""),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'+n+"");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('');for(var a=0;a'+s.instances[a].substring("system.adapter.".length)+"");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("")}})):$.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'+(e||l.main.tabs.users.list[i])+"";for(l.$dialog.find("#tab-system-acl-owner").html(n).val(t.owner||"system.user.admin"),n="",i=0;i'+(e||l.main.tabs.users.groups[i])+"";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'),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'+_(a+" permissions")+"",i+='';for(var s=0;s"+t[s]+"":i+="";i+="",i+="";for(var o=0;o'}else i+="";i+=""}i+="",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+='
      ';for(var t=function(e,t){for(var n={},i=0;i'+g.main.getIcon(c)+l+'close'}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+='
    • ',e+=" "+(g.main.getIcon(g.list[n],null,null,"icon")||''),e+=''+i+"",e+="

      "+g.list[n]+((m?" ("+m+")":"")||"")+"

      ",e+=' '+(a.enabled?"check_box":"check_box_outline_blank")+"",e+=' edit',e+=' delete
      ',e+=s||"",e+="
    • "}e+="
    ",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 "%s" 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+='
      ';for(var t=0;t'+g.main.getIcon(c)+r+'close'}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+='
    • ',e+=" "+(g.main.getIcon(g.groups[t],null,null,"icon")||''),e+=' '+n+"",e+="

      "+g.groups[t]+((u?" ("+u+")":"")||"")+"

      ",e+=' edit',e+=' delete
      ',e+=a||"",e+="
    • "}e+="
    ",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 "%s" 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 $('
    '+t.find(".treetable-icon-empty+span").text()+"
    ")},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(''+_("Ok")+''+_("Cancel")+""),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+=''+i[o]+"";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?''+n+"":""),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('account_circle');C("#current-user").html(t);for(var i=[],a=0;aone object or all 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 "%s" 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:'
  • '+(T[e]&&T[e].icon?''+T[e].icon+"":'live_help')+_(C(this).data("name"))+"
  • ",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:'
  • '+(t?''+t+"":'live_help')+C(this).data("name")+"
  • ",id:e})}}),i.sort(function(e,t){return T[e.id]||T[t.id]?T[e.id]?T[t.id]?T[e.id].orderT[t.id].order?1:0:-1:1:0});for(var t=0;t
      ';for(var s in y){var o=y[s],r="chk-"+s;a+="
    • '+_(o)+""}a+="
    ",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'+m+"\n",C("#"+d).length)C("#"+d).hide().appendTo(C("body"));else{var f='
    ';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('')})}}}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 L(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'+a.icon+"";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.getHostIcon(v.objects[v.tabs.hosts.list[a].id],"imgHost left")+v.tabs.hosts.list[a].name+""),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;tiframe");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="云控2 - "+n,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=N(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?''+(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=N(e);n=a.icon,i=a.alt}return''+(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.admin.styles+"")}}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&&(n="cn"),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&&(v.systemConfig.common.language="cn");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=L,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)

    Copyright © 2014-2018 spacen

    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:
    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
    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.
    ',cn:'The MIT License (MIT)

    Copyright © 2014-2018 spacen

    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:
    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
    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.
    '},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=' ';break;case"edit":o=' ';break;case"text":o=''+m+""}p.append(""+o+"");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")),'"),r=0,c=this.options.length;r"+t+""}},n))for(var l=0;lclose'),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")';for(var a=0;a';else if("select"===s[a].type.substring(0,6)){f+=("multiple"===s[a].type.substring(7,16)?'"}else f+='';if(g[a]){p="text-align: center; "+(g[a].style||"")+(g[a].tdstyle||"");for(var v=0;v':f+='';g[a].class&&(t+=' class="'+g[a].class+'" ')}p.length||b.length?t+=' style="'+p+b+'">'+f+"":t+=">"+f+""}t+=""}var w=h.find(".table-lines");w.length||(h.append(''),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+'", "cn": "'+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';n+='
      ';for(var i=e.rows,a=0;a'+(d?"":'')+''+l+""}n+="
    ";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''+s.icon+"";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?''+a+'':""}function p(i){var e="",t=window.M&&window.M.toast?"a":"button";if(i.panelButtons){e+='
    ';for(var n=0;n",window.M&&window.M.toast&&(e+=''+(i.panelButtons[n].icon||"")+""),e+="";i.moveId&&(e+="<"+t+' class="btn-floating waves-effect waves-light blue treetable-sort" title="'+_("reorder")+'">',window.M&&window.M.toast&&(e+='import_export'),e+=""),e+="
    "}e+='
    ',e+=" ",e+=' ';for(var a=0;a",e+=' ',e+=' ',e+=" "):e+=" "+_(i.columns[a])+"";i.buttons&&(e+=" "),e+=" ",e+="",e+="";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;mt.id?1:e.id',s[z].children&&s[z].children.length&&(e+=''+s[z].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var R=X(this),H=X(e);R.find("span:first-child").remove(),R.find(".treetablelist-buttons").remove(),R.find(".treetable-list").remove(),R.find(".tree-table-buttons").remove(),R.find(".tree-table-main").remove(),R.prepend(H),i.rows=s;var B=X(H[1]).find(">table"),G=X(H[0]);B.data("options",i),B.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=B.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"%s"?',en:'Are you sure to delete "%s"?'},'Are you sure to delete all children of %s?':{cn:'确定删除 %s 的全部子项?',en:'Are you sure to delete all children of %s?'},"Are you sure to delete all children of %s?":{cn:'你确定删除 "%s"全部的子项目?',en:'Are you sure to delete "%s" and all children?'},"Are you sure to delete script %s?":{cn:"你确定删除脚本 '%s'?",en:"Are you sure to delete script '%s'?"},"Are you sure you want to delete adapter %s?":{cn:"你确定删除适配器: %s?",en:"Are you sure you want to delete adapter %s?"},"Are you sure you want to delete the instance %s?":{cn:"你确定要删除这个实例: %s?",en:"Are you sure you want to delete the instance %s?"},"Are you sure?":{cn:"你确定吗?",en:"Are you sure?"},"Are you sure? Changes are not saved.":{cn:"数据没有保存,你确定啊吗?",en:"Are you sure? Changes are not saved."},Aug:{cn:"Aug",en:"Aug"},August:{cn:"August",en:"August"},Available:{cn:"可用的",en:"Available"},"Available version:":{cn:"最新版本",en:"Available version"},CPUs:{cn:"CPUs",en:"CPUs"},Calendar:{cn:"计划",en:"Calendar"},Cancel:{cn:"取消",en:"Cancel"},"Cannot create user: ":{cn:"不能创建用户: ",en:"Cannot create user: "},"Cannot delete user: ":{cn:"不能删除用户: ",en:"Cannot delete user: "},"Cannot disable admin!":{cn:"不能停用管理员!",en:"Cannot disable admin!"},"Cannot read file!":{cn:"无法读取文件!",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:"不能设置密码: ",en:"Cannot set password: "},Certificates:{cn:"证书",en:"Certificates"},Change:{cn:"修改",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:"检查所有",en:"Check all"},China:{cn:"中国",en:"China"},"City:":{cn:"城市",en:"City"},Clear:{cn:"清除",en:"Clear"},"Clear list":{cn:"清除",en:"Clear list"},"Clear log":{cn:"清除",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:"点击图标打开链接",en:"Click on icon to open a link"},Close:{cn:"关闭",en:"close"},"Collapse all nodes":{cn:"收起全部",en:"Collapse all nodes"},Color:{cn:"颜色",en:"Color"},"Configuration not saved.":{cn:"配置信息没有存储.",en:"Configuration not saved."},"Connected to %s: ":{cn:"Connected to %s: ",en:"Connected to %s: "},"Connected to host: ":{cn:"Connected to host: ",en:"Connected to host: "},"Copy log":{cn:"复制",en:"Copy log"},"Copy to clipboard":{cn:"拷贝",en:"Copy to clipboard"},"Country:":{cn:"国家/地区",en:"Country"},Create:{cn:"创建",en:"Create"},"Create new category":{cn:"新建分类",en:"Create new category"},"Create new category, like %s":{cn:"创建新的分类, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"新建枚举",en:"Create new enum"},"Create new enum, like %s":{cn:"创建新的枚举, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"新建群组",en:"Create new group"},"Create new user":{cn:"创建新用户",en:"Create new user"},Created:{cn:"Created",en:"Created"},Croatia:{cn:"Croatia",en:"Croatia"},"Cron expression":{cn:"Cron expression",en:"Cron expression"},"Currency:":{cn:"货币",en:"Currency"},Custom:{cn:"自定义",en:"Custom"},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:"时间格式",en:"Date format"},"Deactivated. Click to start.":{cn:"Deactivated. Click to start.",en:"Deactivated. Click to start."},"Debug outputs:":{cn:"调试输出",en:"Debug outputs"},Dec:{cn:"Dec",en:"Dec"},December:{cn:"December",en:"December"},"Default ACL":{cn:"缺省 ACL",en:"Default ACL"},"Default history instance:":{cn:"缺省的数据记录实例",en:"Default history instance"},"Delete attribute":{cn:"删除",en:"Delete attribute"},"Delete category":{cn:"删除",en:"Delete category"},"Delete enum":{cn:"删除",en:"Delete enum"},"Delete member":{cn:"删除",en:"Delete member"},"Delete object":{cn:"删除",en:"Delete object"},Denmark:{cn:"Denmark",en:"Denmark"},Description:{cn:"说明",en:"Description"},Device:{cn:"Device",en:"Device"},"Device discovery":{cn:"Device discovery",en:"Device discovery"},"Disk free":{cn:"磁盘空闲",en:"Disk free"},"Disk free:":{cn:"磁盘空闲:",en:"Disk free:"},"Disk size":{cn:"磁盘大小",en:"Disk size"},'Do you want to delete just one object or all children of %s too?':{cn:'Do you want to delete just one object or all children of %s too?',en:'Do you want to delete just one object or all 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"},"Done with error: %s":{cn:"Done with error: %s",en:"Done with error: %s"},"Download log":{cn:"下载",en:"Download log"},"Drop the files here":{cn:"拖放文件到这里",en:"Drop the files here"},"Drop the icons here":{cn:"拖放图标文件到这里",en:"Drop the icons here"},Ecuador:{cn:"Ecuador",en:"Ecuador"},Edit:{cn:"编辑",en:"Edit"},"Edit category":{cn:"编辑 category",en:"Edit category"},"Edit enum":{cn:"编辑 enum",en:"Edit enum"},"Edit in dialog":{cn:"编辑 in dialog",en:"Edit in dialog"},"Edit object":{cn:"编辑 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"},Enums:{cn:"枚举",en:"Enums"},Error:{cn:"错误",en:"Error"},Event:{cn:"类型",en:"Type"},Events:{cn:"事件",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"},"File is too big!":{cn:"文件太大!",en:"File is too big!"},"File rights":{cn:"File rights",en:"File rights"},"Filter:":{cn:"查找",en:"Filter"},"Filtered out":{cn:"Everything is filtered out",en:"Everything is filtered out"},"Find coordinates...":{cn:"Find coordinates...",en:"Find coordinates..."},"Float divider:":{cn:"小数点",en:"Float divider"},"Free RAM:":{cn:"Free:",en:"Free:"},Fri:{cn:"Fri",en:"Fri"},From:{cn:"From: ",en:"From: "},"From github":{cn:"软件仓库",en:"From github"},Function:{cn:"Function",en:"Function"},"Generated ID:":{cn:"Generated ID",en:"Generated ID"},"Go to Github...":{cn:"Go to Github...",en:"Go to Github..."},Group:{cn:"用户组",en:"Group"},Groups:{cn:"用户组",en:"Groups"},"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:"心跳: ",en:"Heartbeat: "},"Hong Kong":{cn:"中国香港",en:"Hong Kong"},Host:{cn:"Host",en:"Host"},"Host %s is offline":{cn:"主机 %s 离线",en:"Host %s is offline"},"Host:":{cn:"Host",en:"Host"},Hosts:{cn:"Hosts",en:"Hosts"},ID:{cn:"ID",en:"ID"},"Icon upload":{cn:"上传图标",en:"Icon upload"},"In background":{cn:"后台运行",en:"In background"},Info:{cn:"信息",en:"Info"},Insert:{cn:"插入",en:"Insert"},Install:{cn:"操作",en:"Install"},"Install adapter from URL":{cn:"安装或升级",en:"Install or update the adapter from URL"},"Install adapter from github":{cn:"软件仓库安装或升级",en:"Install or update the adapter from Github"},"Install from custom URL":{cn:"自定义 URL 安装",en:"Install from custom URL"},"Install or update from URL...":{cn:"正在安装...",en:"Install or update from URL..."},"Installation counter":{cn:"Installations counter",en:"Installations counter"},"Installations counter":{cn:"Installations counter",en:"Installations counter"},Installed:{cn:"已安装",en:"Installed"},"Installed from group":{cn:"Installed from group",en:"Installed from group"},"Installed instances":{cn:"已安装的实例",en:"Installed instances"},"Installed version":{cn:"已安装版本",en:"Installed version"},Instances:{cn:"实例",en:"Instances"},Instructions:{cn:"指令",en:"Instructions"},Intro:{cn:"总览",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"},"Is yet in the list":{cn:"已经在列表中",en:"It's already in the list"},Jan:{cn:"Jan",en:"Jan"},January:{cn:"January",en:"January"},Jul:{cn:"七月",en:"Jul"},July:{cn:"July",en:"July"},Jun:{cn:"Jun",en:"Jun"},June:{cn:"June",en:"June"},"Known bugs for":{cn:"Known bugs for",en:"Known bugs for"},"Last changed":{cn:"上次修改",en:"Last changed"},"Last update":{cn:"上次更新",en:"Last update"},"Latitude:":{cn:"纬度",en:"Latitude"},"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"},License:{cn:"许可",en:"License"},"License terms":{cn:"许可条款",en:"License terms"},"Listen on all IPs":{cn:"Listen on all IPs",en:"Listen on all IPs"},"Loading...":{cn:"正在加载...",en:"Loading..."},Log:{cn:"日志",en:"Log"},"Log file will be deleted. Are you sure?":{cn:"日志文件将被删除,你确定吗?",en:"Log file will be deleted. Are you sure?"},"Log size:":{cn:"文件大小",en:"Log size"},"Login timeout(sec):":{cn:"登录超时 (秒)",en:"Login timeout (sec)"},Logout:{cn:"退出",en:"Logout"},"Longitude:":{cn:"经度",en:"Longitude"},MB:{cn:"Mb",en:"Mb"},Main:{cn:"Main",en:"Main"},"Main settings":{cn:"主设置",en:"Main settings"},"Manually created":{cn:"手工创建",en:"Manually created"},Mar:{cn:"三月",en:"Mar"},March:{cn:"三月",en:"March"},Members:{cn:"Members",en:"Members"},Message:{cn:"消息",en:"Message"},"Message buffer overflow. Losing oldest":{cn:"Message buffer overflow. Losing oldest.",en:"Message buffer overflow. Losing oldest."},Model:{cn:"型号",en:"Model"},Mon:{cn:"Mon",en:"Mon"},NPM:{cn:"NPM",en:"NPM"},Name:{cn:"名称",en:"Name"},"Name:":{cn:"名称",en:"Name"},New:{cn:"新建",en:"New"},"New category":{cn:"新类别",en:"New category"},"New enum":{cn:"新类别",en:"New enum"},"New group":{cn:"新群组",en:"New group"},"New object":{cn:"新对象",en:"New object"},"New objekt":{cn:"新对象",en:"New object"},"New user":{cn:"新用户",en:"New user"},"No data":{cn:"暂无数据",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"},Norway:{cn:"Norway",en:"Norway"},"Not exists":{cn:"不存在",en:"Does not exist"},"Note:":{cn:"Note",en:"Note"},Nov:{cn:"十一月",en:"Nov"},November:{cn:"十一月",en:"November"},OS:{cn:"OS",en:"OS"},'Object "%s" does not exists. Update the page.':{cn:'Object "%s" 不存在,请刷新.',en:'Object "%s" does not exist. Update the page.'},"Object may not be deleted":{cn:"对象不能被删除",en:"Object may not be deleted"},"Object rights":{cn:"对象权限",en:"Object rights"},Objects:{cn:"对象",en:"Objects"},Oct:{cn:"十月",en:"Oct"},October:{cn:"十月",en:"October"},Ok:{cn:"确认",en:"Ok"},"Only one":{cn:"Only one",en:"Only one"},"Open original":{cn:"在新标签中打开",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"},Parent:{cn:"父类",en:"Parent"},"Parse error":{cn:"Parse error",en:"Parse error"},Password:{cn:"密码",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:"密码不能为空!",en:"Password cannot be empty!"},"Password repeat":{cn:"Password repeat",en:"Password repeat"},"Path to storage:":{cn:"存储路径",en:"Path to storage"},"Pause output":{cn:"暂停输出",en:"Pause output"},Platform:{cn:"平台",en:"Platform"},"Please confirm":{cn:"请确认",en:"Please confirm"},"Port to check the domain:":{cn:"Port to check the domain",en:"Port to check the domain"},"Preserve ID":{cn:"Preserve ID",en:"Preserve ID"},Preview:{cn:"Preview",en:"Preview"},"Processing...":{cn:"处理中...",en:"Processing..."},RAM:{cn:"内存",en:"RAM"},"RAM total usage:":{cn:"RAM总使用量:",en:"Total RAM usage:"},"RAM usage":{cn:"使用内存",en:"RAM usage"},"Rebuild tree":{cn:"重建树",en:"Rebuild tree"},"Recently updated":{cn:"Recently updated",en:"Recently updated"},"Refresh log":{cn:"刷新",en:"Refresh log"},Removed:{cn:"已删除",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:"重命名",en:"Rename"},Repositories:{cn:"软件仓库",en:"Repositories"},Rights:{cn:"权限",en:"Access rights"},Role:{cn:"角色",en:"Role"},Room:{cn:"场景",en:"Room"},"Running: ":{cn:"Running: ",en:"Running: "},"Sao Tome and Principe":{cn:"Sao Tome and Principe",en:"Sao Tome and Principe"},Sat:{cn:"星期六",en:"Sat"},Save:{cn:"保存",en:"Save"},"Save Objecttree as JSON File":{cn:"将对象保存为 JSON 文件",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:"保存配置",en:"Save configuration"},Script:{cn:"脚本",en:"Script"},Scripts:{cn:"脚本",en:"Scripts"},Select:{cn:"Select",en:"Select"},"Select ID":{cn:"Select ID",en:"Select ID"},"Select adapter:":{cn:"选择适配器",en:"Select adapter"},"Select language":{cn:"选择语言",en:"Select language"},"Select options":{cn:"选项",en:"Select options"},"Sent data:":{cn:"Sent data",en:"Sent data"},Sep:{cn:"九月",en:"Sep"},September:{cn:"九月",en:"September"},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:"设置",en:"Settings"},"Settings for %s":{cn:"Settings for %s",en:"Settings for %s"},"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:"显示...",en:"Show..."},"Size: %s, Available: %s":{cn:"大小: %s, 可用: %s"},"Some data are not stored. Discard?":{cn:"有一些修改了的配置信息没有保存. 确认吗?",en:"Some data are not stored. Discard?"},"Sort alphabetically":{cn:"Sort alphabetically by name",en:"Sort alphabetically by name"},"Started...":{cn:"Started...",en:"Started..."},State:{cn:"Datapoint",en:"Datapoint"},"State type":{cn:"State type",en:"State type"},States:{cn:"状态",en:"States"},"States rights":{cn:"状态权限",en:"States rights"},Statistics:{cn:"统计",en:"Statistics"},"Statistics:":{cn:"统计",en:"Statistics"},"Storage of %s":{cn:'Storage of %s',en:'Storage of %s'},"Storage of %s states":{cn:'Storage of %s states',en:'Storage of %s states'},"Success!":{cn:"成功!",en:"Success!"},Suggestion:{cn:"推荐",en:"Recommendation"},Sun:{cn:"星期天",en:"Sun"},System:{cn:"系统",en:"System"},"System language:":{cn:"语言",en:"System language"},"System settings":{cn:"系统设置",en:"System settings"},"System uptime":{cn:"运行",en:"System uptime"},Table:{cn:"Table",en:"Table"},Taiwan:{cn:"中国台湾",en:"Taiwan"},"Temperature units:":{cn:"温度单位",en:"Temperature units"},'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:"标题",en:"Title"},To:{cn:"To",en:"To"},Today:{cn:"今日",en:"Today"},"Toggle expert mode":{cn:"切换模式",en:"Toggle expert mode"},"Toggle states view":{cn:"切换状态视图",en:"Toggle the states view"},"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:"触发事件",en:"Trigger event"},Type:{cn:"Type",en:"Type"},"URL or file path:":{cn:"URL或安装包路径",en:"URL or file path"},"Unknown file format!":{cn:"文件格式无效!",en:"Unknown file format!"},"Unsupported image format":{cn:"不支持的格式",en:"Unsupported image format"},Update:{cn:"更新",en:"Update"},"Update objects":{cn:"更新",en:"Update objects"},"Update states":{cn:"更新",en:"Update states"},Updated:{cn:"已更新",en:"Updated"},"Upgrade all adapters":{cn:"升级所有适配器",en:"Upgrade all adapters"},Upload:{cn:"文件上传",en:"File upload"},"Upload admin started":{cn:"上传配置",en:"Upload of configuration is started"},"Upload started...":{cn:"上传开始...",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:"用户",en:"User"},"User deleted":{cn:"用户已删除",en:"User deleted"},"User does not exist":{cn:"这个用户不存在",en:"User does not exist"},"User yet exists":{cn:"这个用户已经存在",en:"User already exists"},Users:{cn:"用户",en:"Users"},Value:{cn:"Value",en:"Value"},"Values of %s":{cn:"Values of %s",en:"Values of %s"},"Vatican City State":{cn:"Vatican City State",en:"Vatican City State"},Wed:{cn:"Wed",en:"Wed"},With:{cn:"With",en:"With"},Without:{cn:"Without",en:"Without"},"You are going to add new instance: ":{cn:"添加新的实例: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"可将 devices,channels,states 拖放到枚举区",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"支持拖放用户",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"},_All:{cn:"全部",en:"All"},"_Toggle expert mode":{cn:"切换模式",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:"适配器数",en:"adapters count"},add:{cn:"添加",en:"Add"},"add children":{cn:"添加子节点",en:"add children"},"add instance":{cn:"添加实例",en:"add instance"},"add repository":{cn:"添加仓库",en:"add repository"},agree:{cn:"同意",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:"最新",en:"available"},beta:{cn:"beta",en:"beta"},boolean:{cn:"boolean",en:"boolean"},bug:{cn:"bugtracker",en:"bugtracker"},cancel:{cn:"取消",en:"Cancel"},cert_path_note:{cn:"例如 '/opt/certs/cert.pem', 也可以直接拖放文件",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:"模式",en:"change view mode"},channel:{cn:"channel",en:"channel"},clear:{cn:"清除",en:"clear"},"climate-control_group":{cn:"Climate Control",en:"Climate Control"},"close on ready":{cn:"完成后自动关闭",en:"close on ready"},collapse:{cn:"收起",en:"collapse"},"collapse all":{cn:"收起",en:"collapse all"},comma:{cn:"comma",en:"comma"},"command execution":{cn:"执行命令 ",en:"Command execution"},common:{cn:"公共",en:"common"},"common adapters_group":{cn:"公共",en:"Common"},common_color:{cn:"颜色",en:"color"},common_def:{cn:"缺省值",en:"default value"},common_desc:{cn:"说明",en:"description"},common_icon:{cn:"图标",en:"icon"},common_max:{cn:"最大值",en:"max value"},common_min:{cn:"最小值",en:"minimal value"},common_read:{cn:"允许读",en:"read allowed"},common_role:{cn:"角色",en:"role"},common_states:{cn:"预定义值",en:"predefined values"},common_type:{cn:"类型",en:"type"},common_unit:{cn:"量度单位",en:"measure unit"},common_write:{cn:"允许写",en:"write allowed"},communication_group:{cn:"通信",en:"Communication"},config:{cn:"设置",en:"Settings"},"config instance":{cn:"配置实例",en:"config instance"},"confirm password":{cn:"密码确认",en:"Confirm password"},connected:{cn:"已连接",en:"connected"},copy:{cn:"复制",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:"创建",en:"create"},"custom enum":{cn:"自定义枚举",en:"?ustom enum"},"custom group":{cn:"自定义群组",en:"Custom group"},daemon:{cn:"daemon",en:"daemon"},"date-and-time_group":{cn:"日期和时间",en:"Date and Time"},daysShortText:{cn:"d.",en:"d."},debug:{cn:"debug",en:"debug"},delete:{cn:"删除",en:"delete"},"delete adapter":{cn:"删除",en:"delete adapter"},"delete group":{cn:"删除",en:"delete group"},"delete instance":{cn:"删除",en:"delete instance"},"delete operation":{cn:"删除",en:"delete"},"delete script":{cn:"删除",en:"delete script"},"delete user":{cn:"删除",en:"delete user"},desc:{cn:"desc",en:"desc"},description:{cn:"说明",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.
    Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
    Thank you!",en:"We worked hard to create this project. In return we expect from you some usage statistics.
    Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
    Thank you!"},edit:{cn:"编辑",en:"edit"},"edit enum":{cn:"编辑",en:"edit enum"},"edit file":{cn:"编辑",en:"edit file"},"edit group":{cn:"编辑",en:"edit group"},"edit instance":{cn:"编辑",en:"edit instance"},"edit script":{cn:"编辑",en:"edit script"},"edit user":{cn:"修改",en:"edit user"},"edit value":{cn:"编辑",en:"Edit value"},enabled:{cn:"enabled",en:"enabled"},energy_group:{cn:"能源",en:"Energy"},engine:{cn:"engine",en:"engine"},"engine type":{cn:"engine type",en:"engine type"},error:{cn:"错误",en:"error"},events:{cn:"events",en:"events"},"execute operation":{cn:"Execute operation",en:"Execute operation"},expand:{cn:"展开",en:"expand"},"expand all":{cn:"展开所有",en:"expand all"},extended:{cn:"extended",en:"extended"},false:{cn:"false",en:"false"},"file permissions":{cn:"文件许可",en:"File permissions"},from:{cn:"来自",en:"from"},garden_group:{cn:"农业",en:"Garden"},general_group:{cn:"基本",en:"General"},geoposition_group:{cn:"地理位置",en:"Geo position"},groups:{cn:"groups",en:"groups"},hardware_group:{cn:"硬件",en:"Hardware"},history:{cn:"数据",en:"history"},"history data":{cn:"数据",en:"history data"},host:{cn:"主机",en:"host"},household_group:{cn:"Household",en:"Household"},"http operation":{cn:"http",en:"http"},id:{cn:"ID",en:"ID"},info:{cn:"信息",en:"info"},infrastructure_group:{cn:"环境",en:"Infrastructure"},install:{cn:"安装",en:"install"},"install specific version":{cn:"安装指定版本",en:"Install a specific version"},installed:{cn:"已安装",en:"installed"},"installed adapters":{cn:"Filter adapters with existing instances",en:"Filter adapters with existing instances"},instance:{cn:"实例",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:"物联网",en:"IoT systems"},"iot-systems_group":{cn:"物联网系统",en:"IoT Systems"},keywords:{cn:"关键字",en:"keywords"},lc:{cn:"Last change",en:"Last change"},less:{cn:"精简",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 here.',en:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more here.'},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:"许可",en:"license"},"license agreement":{cn:"许可协议",en:"license agreement"},"license not agree":{cn:"不同意!",en:"Do not agree with the license!"},license_checkbox:{cn:"同意全部的许可条款",en:"I agree with the collection of anonymous statistics.
    (This can be disabled in settings)"},lighting_group:{cn:"照明",en:"Lighting"},link:{cn:"link",en:"link"},list:{cn:"list",en:"list"},"list operation":{cn:"list elements",en:"list elements"},logic_group:{cn:"逻辑",en:"Logic"},loglevel:{cn:"loglevel",en:"loglevel"},media_group:{cn:"媒体",en:"Media"},members:{cn:"members",en:"members"},memlimit:{cn:"RAM limit",en:"RAM limit"},message:{cn:"消息",en:"message"},messaging_group:{cn:"信使",en:"Messaging"},"misc-data_group":{cn:"Misc. data",en:"Misc. data"},mixed:{cn:"mixed",en:"mixed"},mode:{cn:"mode",en:"mode"},more:{cn:"详细",en:"more"},multi:{cn:"multistate",en:"multistate"},multimedia_group:{cn:"多媒体",en:"Multimedia"},name:{cn:"名称",en:"name"},native:{cn:"native",en:"native"},network_group:{cn:"网络",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:"新建用户",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:"不同意",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:"/",en:"of"},ok:{cn:"确定",en:"Ok"},"open web page":{cn:"Open web page of adapter",en:"Open web page of adapter"},os:{cn:"OS",en:"operating system"},"other permissions":{cn:"Other permissions",en:"Other permissions"},"parent name":{cn:"parent name",en:"parent name"},password:{cn:"密码",en:"Password"},permissionError:{cn:"Permission error",en:"Permission error"},planned:{cn:"planned",en:"planned"},platform:{cn:"平台",en:"platform"},point:{cn:"point",en:"point"},process:{cn:"process",en:"process"},protocols_group:{cn:"协议",en:"Protocols"},raw:{cn:"Raw (开发)",en:"Raw (experts only)"},read:{cn:"read",en:"read"},"read operation":{cn:"read",en:"read"},readme:{cn:"readme",en:"readme"},reload:{cn:"刷新",en:"reload"},"reload instance":{cn:"reload instance",en:"reload instance"},rest:{cn:"REST (read only)",en:"rest (read only)"},restart:{cn:"重启",en:"auto restart"},"restart script":{cn:"重启脚本",en:"restart script"},role:{cn:"角色",en:"role"},save:{cn:"保存",en:"save"},schedule_group:{cn:"计划",en:"Schedule"},script_group:{cn:"逻辑和脚本",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:"安防",en:"severity"},stable:{cn:"stable",en:"stable"},state:{cn:"state",en:"state"},"state permissions":{cn:"状态许可",en:"State permissions"},storage_group:{cn:"存储",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:"第三方",en:"Third party"},"this adapter does not allow multiple instances":{cn:"这个适配器不允许运行多个实例",en:"This adapter does not allow multiple instances"},title:{cn:"标题",en:"title"},today:{cn:"今日",en:"today"},true:{cn:"true",en:"true"},ts:{cn:"时间",en:"Timestamp"},type:{cn:"type",en:"type"},unit:{cn:"unit",en:"unit"},update:{cn:"更新",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:"已更新",en:"updated"},updates:{cn:"updates",en:"updates"},upload:{cn:"上传",en:"Upload"},"user permissions":{cn:"用户权限",en:"user permissions"},users:{cn:"用户",en:"users"},"users permissions":{cn:"用户权限",en:"User permissions"},utility_group:{cn:"公用",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:"版本",en:"version"},vis_group:{cn:"yunkong2.vis",en:"yunkong2.vis"},visualisation_group:{cn:"可视化",en:"Visualisation"},"visualization-icons_group":{cn:"可视化 图标",en:"Visualization Icons"},"visualization-widgets_group":{cn:"可视化 部件",en:"Visualization Widgets"},visualization_group:{cn:"可视化",en:"Visualisation"},warn:{cn:"warn",en:"warn"},weather_group:{cn:"天气",en:"Weather"},wetty:{cn:"Wetty",en:"Wetty"},write:{cn:"write",en:"write"},"write operation":{cn:"write",en:"write"},yesterday:{cn:"昨天",en:"yesterday"},Speed:{cn:"主频",en:"Speed"},"%s object(s) processed":{cn:"%s objects were processed",en:"%s objects were processed"},"%s was imported":{cn:"%s was imported",en:"%s was imported"},"Ignore warning":{cn:"Ignore warning",en:"Ignore warning"},Filter:{cn:"查找",en:"Filter"},Afghanistan:{cn:"Afghanistan",en:"Afghanistan"},Albania:{cn:"Albania",en:"Albania"},Algeria:{cn:"Algeria",en:"Algeria"},"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"},Argentina:{cn:"Argentina",en:"Argentina"},Armenia:{cn:"Armenia",en:"Armenia"},Aruba:{cn:"Aruba",en:"Aruba"},Australia:{cn:"Australia",en:"Australia"},Austria:{cn:"Austria",en:"Austria"},"Authentication was deactivated":{cn:"Authentication was deactivated",en:"Authentication was deactivated"},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"},Cambodia:{cn:"Cambodia",en:"Cambodia"},Cameroon:{cn:"Cameroon",en:"Cameroon"},Canada:{cn:"Canada",en:"Canada"},"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"},Chad:{cn:"Chad",en:"Chad"},Chile:{cn:"Chile",en:"Chile"},"Christmas Island":{cn:"Christmas Island",en:"Christmas Island"},"Cocos Islands":{cn:"Cocos Islands",en:"Cocos Islands"},Colombia:{cn:"Colombia",en:"Colombia"},Comoros:{cn:"Comoros",en:"Comoros"},Congo:{cn:"Congo",en:"Congo"},"Cook Islands":{cn:"Cook Islands",en:"Cook Islands"},"Costa Rica":{cn:"Costa Rica",en:"Costa Rica"},Cuba:{cn:"Cuba",en:"Cuba"},Cyprus:{cn:"Cyprus",en:"Cyprus"},"Czech Republic":{cn:"Czech Republic",en:"Czech Republic"},"Disable authentication":{cn:"Disable authentication",en:"Disable authentication"},Djibouti:{cn:"Djibouti",en:"Djibouti"},"Dominican Republic":{cn:"Dominican Republic",en:"Dominican Republic"},"East Timor":{cn:"East Timor",en:"East Timor"},"Enabled:":{cn:"Enabled",en:"Enabled"},"Equatorial Guinea":{cn:"Equatorial Guinea",en:"Equatorial Guinea"},Eritrea:{cn:"Eritrea",en:"Eritrea"},Estonia:{cn:"Estonia",en:"Estonia"},Ethiopia:{cn:"Ethiopia",en:"Ethiopia"},Fiji:{cn:"Fiji",en:"Fiji"},Finland:{cn:"Finland",en:"Finland"},France:{cn:"France",en:"France"},"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"},Gabon:{cn:"Gabon",en:"Gabon"},Gambia:{cn:"Gambia",en:"Gambia"},Georgia:{cn:"Georgia",en:"Georgia"},Germany:{cn:"Germany",en:"Germany"},Ghana:{cn:"Ghana",en:"Ghana"},Gibraltar:{cn:"Gibraltar",en:"Gibraltar"},Greece:{cn:"Greece",en:"Greece"},Greenland:{cn:"Greenland",en:"Greenland"},Grenada:{cn:"Grenada",en:"Grenada"},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"},Honduras:{cn:"Honduras",en:"Honduras"},Hungary:{cn:"Hungary",en:"Hungary"},Iceland:{cn:"Iceland",en:"Iceland"},India:{cn:"India",en:"India"},Indonesia:{cn:"Indonesia",en:"Indonesia"},Iran:{cn:"Iran",en:"Iran"},Iraq:{cn:"Iraq",en:"Iraq"},Ireland:{cn:"Ireland",en:"Ireland"},"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"},Japan:{cn:"Japan",en:"Japan"},Jersey:{cn:"Jersey",en:"Jersey"},Jordan:{cn:"Jordan",en:"Jordan"},Kazakhstan:{cn:"Kazakhstan",en:"Kazakhstan"},Kenya:{cn:"Kenya",en:"Kenya"},Kiribati:{cn:"Kiribati",en:"Kiribati"},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"},Latvia:{cn:"Latvia",en:"Latvia"},Lebanon:{cn:"Lebanon",en:"Lebanon"},Lesotho:{cn:"Lesotho",en:"Lesotho"},Liberia:{cn:"Liberia",en:"Liberia"},"Libyan Arab Jamahiriya":{cn:"Libyan Arab Jamahiriya",en:"Libyan Arab Jamahiriya"},Liechtenstein:{cn:"Liechtenstein",en:"Liechtenstein"},Lithuania:{cn:"Lithuania",en:"Lithuania"},Luxembourg:{cn:"Luxembourg",en:"Luxembourg"},Macau:{cn:"Macau",en:"Macau"},Macedonia:{cn:"Macedonia",en:"Macedonia"},Madagascar:{cn:"Madagascar",en:"Madagascar"},Mai:{cn:"Mai",en:"Mai"},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"},"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"},Mexico:{cn:"Mexico",en:"Mexico"},Micronesia:{cn:"Micronesia",en:"Micronesia"},Moldova:{cn:"Moldova",en:"Moldova"},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"},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 Caledonia":{cn:"New Caledonia",en:"New Caledonia"},"New Zealand":{cn:"New Zealand",en:"New Zealand"},Nicaragua:{cn:"Nicaragua",en:"Nicaragua"},Niger:{cn:"Niger",en:"Niger"},Nigeria:{cn:"Nigeria",en:"Nigeria"},Niue:{cn:"Niue",en:"Niue"},"Norfolk Island":{cn:"Norfolk Island",en:"Norfolk Island"},"Northern Mariana Islands":{cn:"Northern Mariana Islands",en:"Northern Mariana Islands"},Oman:{cn:"Oman",en:"Oman"},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"},Peru:{cn:"Peru",en:"Peru"},Philippines:{cn:"Philippines",en:"Philippines"},Pitcairn:{cn:"Pitcairn",en:"Pitcairn"},Poland:{cn:"Poland",en:"Poland"},Popular:{cn:"Popular",en:"Popular"},"Popular first":{cn:"Popular first",en:"Popular first"},Portugal:{cn:"Portugal",en:"Portugal"},"Puerto Rico":{cn:"Puerto Rico",en:"Puerto Rico"},Qatar:{cn:"Qatar",en:"Qatar"},Reunion:{cn:"Reunion",en:"Reunion"},Romania:{cn:"Romania",en:"Romania"},"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"},"Saudi Arabia":{cn:"Saudi Arabia",en:"Saudi Arabia"},Senegal:{cn:"Senegal",en:"Senegal"},Serbia:{cn:"Serbia",en:"Serbia"},Slovakia:{cn:"Slovakia",en:"Slovakia"},Slovenia:{cn:"Slovenia",en:"Slovenia"},"Solomon Islands":{cn:"Solomon Islands",en:"Solomon Islands"},Somalia:{cn:"Somalia",en:"Somalia"},"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"},"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"},Sudan:{cn:"Sudan",en:"Sudan"},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"},Tajikistan:{cn:"Tajikistan",en:"Tajikistan"},Tanzania:{cn:"Tanzania",en:"Tanzania"},Thailand:{cn:"Thailand",en:"Thailand"},Togo:{cn:"Togo",en:"Togo"},Tokelau:{cn:"Tokelau",en:"Tokelau"},Tonga:{cn:"Tonga",en:"Tonga"},"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"},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"},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)!"},Uzbekistan:{cn:"Uzbekistan",en:"Uzbekistan"},Vanuatu:{cn:"Vanuatu",en:"Vanuatu"},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!"},"Western Sahara":{cn:"Western Sahara",en:"Western Sahara"},Yemen:{cn:"Yemen",en:"Yemen"},Zaire:{cn:"Zaire",en:"Zaire"},Zambia:{cn:"Zambia",en:"Zambia"},Zimbabwe:{cn:"Zimbabwe",en:"Zimbabwe"},silly:{cn:"silly",en:"silly"},Seychelles:{en:"Seychelles"},"Sierra Leone":{en:"Sierra Leone"},Singapore:{en:"Singapore"},"Size: %s, Free: %s":{en:"Size: %s, Available: %s"},"edit enums":{en:"Edit enumerations for"},"place here":{en:"place the files here"},popular:{en:"popular"}}; +"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(0td"),a=H.data[n.key];function s(e){return'
    '+e+"
    "}if(a){i.eq(0).css({overflow:"hidden","white-space":"nowrap"});var o=a.desc.indexOf("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'+l+' / '+H.tree[c].children.length+"]",i.eq(1).html(s(''+l+" "+_("of")+' '+H.tree[c].children.length+" "+_("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 B(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&G({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 G(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||"cn"===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
    ',!x&&i.colors&&s[z].color&&(e+='
    '),!x&&i.icons&&(e+=ne(i.objects[s[z].id],i.imgPath)||'
     
    '),"enabled"===O)e+='";else if("groups"===O)for(var E=0;E'+ne(i.objects[S],null,"")+s[z].groups[E].name+""}else if("instance"===O)if(void 0!==s[z].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[z].instance?"":s[z].instance)+"";else if("icon"===O)e+=ne(i.objects[s[z].id],i.imgPath);else{var Q=s[z][O]||"";Q&&"object"==typeof Q&&Q.en&&(Q=Q[systemLang]||Q.en),e+=""+Q+""}e+="
    ';for(var P="",U=0;U ':(P+="<"+t+' data-id="'+s[z].id+'" class="select-button-'+U+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[z].parent+'" data-children="'+!!s[z].realChildren+'" title="'+(i.buttons[U].title||"")+'">',window.M&&window.M.toast&&(P+=''+(i.buttons[U].icon||"")+""),P+="");e+=P+"
    '),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='",n=[];for(e in H.urls)H.urls.hasOwnProperty(e)&&n.push(e);n.sort();for(var i=0;i'+n[i]+"")}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,i,a;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))e=H.$installDialog.find("#install-url-link").val(),i=H.$installDialog.find("#install-url-link-username").val(),a=H.$installDialog.find("#install-url-link-password").val(),i&&(e=e.replace("https://","https://"+i+":"+a+"@")),e.startsWith("http")&&e.endsWith(".git")&&(e="git+"+e),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var s=H.$installDialog.find("#install-github-link").val().split(" ");e=s[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+s[1]}e?H.main.cmdExec(null,'url "'+e+'" --production'+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?B():H.$grid.fancytree("getTree").filterNodes(G,!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'+e+'',t&&(e+=''),e+=""}c.sort(),H.tree=[],H.data={};for(var m=0;m';for(var w=0;w',b!==p&&(g+=''+p+"",b&&(g+=" ~ ")),b&&(g+=''+b+""),g+=""):g+='',g+=''+n.version+"",h=''+n.version+"",g+="",!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 L=n.titleLang||n.title;if(L="object"==typeof L?L[systemLang]||L.en:L,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(L||"").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:''+(H.main.config.expertMode?'':"")+"'+(H.main.config.expertMode?'':""),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 N=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(L||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(H.main.config.expertMode?'':""),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;IH.data[t].stat?-1:H.data[e].statH.data[t].versionDate?-1:H.data[e].versionDate',O+='
    ',O+='
    ',O+='
    ',O+=' ',O+=' '+S.title+"",O+=' more_vert',O+='
      ',O+="
    • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
    • ",S.installed&&(O+="
    • "+d["Installed version"]+': '+S.rawInstalled+"
    • "),S.instances&&(O+="
    • "+_("Installed instances")+': '+S.instances+"
    • "),O+="
    ",O+="
    ",O+=' ',O+='
    ',O+=' close',O+="

    "+S.desc+"

    ",O+='
    ',O+=S.install,O+="
    ",O+="
    ","popular"===H.currentOrder&&S.stat?O+='
    '+S.stat+"
    ":"updated"===H.currentOrder&&S.versionDate&&(O+='
    '+J(S.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"
    "),O+="
    ",O+="
    "}for(var Y in O+='
    ',O+='
    ',O+='
    ',O+='
    ',O+=' '+_("Filtered out")+"",O+="
    ",O+=' ',O+="
    ",O+="
    ",H.$tiles.html(O),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var Q='
  • '+d.all+"
  • \n",P=0;P'+_(A[P])+"\n";var U=H.$tab.find("#main-toolbar-table-types");U.html(Q),U.find(".main-toolbar-table-types-item").show().off("click").on("click",function(){H.currentType=$(this).data("type")||"",B(),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}),B()}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='
    ',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(G,!1),H.sortTree(),H.enableColResize();var R=["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(R[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):$(''+e+"").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'+o.name+""}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'+_("auto")+"";for(var m=0;m'+m+"");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);"object"==typeof H.data[i].licenseUrl&&(H.data[i].licenseUrl=H.data[i].licenseUrl[systemLang]||H.data[i].licenseUrl.en),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,"
    ")).replace(/\n/g,"
    "),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='
    ',a=0;a'+e[a]+' - "}i+="
    ";var o=$("#adapters-menu");o.length||((o=$('")).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,z,x,O,A,E="__different__",S=this;function Y(e){if(e)S.historyTimeout&&clearTimeout(S.historyTimeout);else if(S.historyTimeout)return;S.historyTimeout=setTimeout(function(){S.historyTimeout=null,O&&S.loadHistoryTable(O.data("id"),!0)},e||5e3)}function Q(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 P(e){e.stopPropagation(),e.preventDefault();var t=S.$dialog.find("#customs-tabs"),c=t.data("ids");S.currentCustoms=null;var l=_(E);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
    '+_("Settings for %s",j)+' '+_("active")+'
    '+$('script[data-template-name="'+v+'"]').html()+"
    ",T=$(N);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)),S.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],S.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]===E?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===E?("number"===n.attr("type")&&n.attr("type","text"),"SELECT"===n.prop("tagName").toUpperCase()?(n.prepend('"),n.val(o)):n.val("").attr("placeholder",o)):n.val(r[t][a]):(S.defaults[i]&&void 0!==S.defaults[i][a]&&(e=S.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(S.$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(){S.$dialog.find(".dialog-system-buttons .btn-save").removeClass("disabled")}).on("keyup",function(){$(this).trigger("change")})}),this.showCustomsData(1'+_("Loading...")+"");var n={aggregate:"none",instance:O.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(''+r+"");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+=' '+c[s].val+" "+c[s].ack+" "+o+" "+C.formatDate(c[s].ts)+" "+C.formatDate(c[s].lc)+"\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=''+_("No data")+"";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(z||(z=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),x=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a"+u[v]+"\n")}if(y){O.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-table",O.val()),S.loadHistoryTable($(this).data("id"))}).select(),A.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-chart",A.val()),S.loadHistoryChart($(this).data("id"))}).select(),void 0!==this.main.config["object-history-table"]&&O.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(){S.$dialog.find("#grid-history-body").html(""),S.loadHistoryTable($(this).data("id"))}),M.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryChart($(this).data("id"))}),b.data("id",n[0]).show().off("click").on("click",function(){S.loadHistoryTable($(this).data("id"),!1,!0)});var j=new Date;j.setDate(j.getDate()-1);for(var L={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"]},N=0;N\n
    \n',"state"===i&&"common"===n&&"type"===s?a+='":"string"==typeof t[s]?a+='\n':"number"==typeof t[s]?a+='\n':"boolean"==typeof t[s]?a+='\n":a+='\n";var o=s;"common"===n&&systemDictionary["common_"+s]&&systemDictionary["common_"+s][systemLang]&&(o=_("common_"+s)),"boolean"==typeof t[s]?a+=""+o+"\n":a+="\n",a+='
    \n\n',a+="\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(''),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'+(i||this.main.tabs.users.list[s])+"";for(this.$dialog.find(".object-tab-acl-owner").html(a),a="",s=0;s'+(i||this.main.tabs.users.groups[s])+"";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('color_lens'+_("Color")+""),i.colorpicker({component:".btn",color:i,container:!0}).colorpicker("setValue",e.common.color||"#fff").on("showPicker.colorpicker",function(){}).on("changeColor.colorpicker",function(e){100'+g.main.getIconFromObj(s[e][t])+p(s[e][t])+"");n&&(n+='
  • '),n+='
  • control_point'+_("custom group")+"
  • ",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+='
  • '+g.main.getIconFromObj(a[t])+p(a[t])+"
  • ");n&&(n+='
  • '),n+='
  • control_point'+_("custom enum")+"
  • ",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='';c+='
      ';for(var l=0;l'+g.main.getIcon(g.list[l],null,null,"icon")+''+p(g.main.objects,g.list[l])+"

      "+g.list[l]+"


      ",d&&d.common&&d.common.members&&d.common.members.length)for(var m=0;m'+g.main.getIcon(i)+''+p(g.main.objects,i)+'close
    ');c+='edit',c+='delete',c+=""}c+="
    ",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\n view_list\n note_add\n \n \n queue_play_next\n \n ');var t='
    ';t+='",t+="
    ";for(var a=0;a',t+="");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),0tr.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 "%s" 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;atr.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(''),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){100tr.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 $('
    '+t.find(".fancytree-title").text()+"
    ")},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",cn:"场景"},desc:{en:"List of the rooms"},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",cn:"功能"},desc:{en:"List of the functions"},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")+'
    cloud_off').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 L(){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(L,1e3)),20=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.substring(0,30)+"..."),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.substring(0,30)+"..."),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='';m+=""+c+"",m+=''+e+"",isNaN(a)?m+=''+(a||"")+"":m+=''+(a||"")+"",m+=""+(s||"")+"",m+=""+(l||"")+"",m+=""+(o||"")+"",m+=""+(r||"")+"",m+="",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;epause')}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('');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='';i+='
    ',i+=''+r.main.getHostIcon(t)+"",i+=''+t.common.hostname+"",i+=''+t.common.type+"";var a=t.common.titleLang||t.common.title;return"object"==typeof a&&(a=a[systemLang]||a.en),i+=''+a+"",i+=''+(t.native.os?t.native.os.platform:_("unknown"))+"",i+='',i+=''+t.common.installedVersion+"",r.main.states[t._id+".inputCount"]?i+='⇥'+r.main.states[t._id+".inputCount"].val+' / ↦'+r.main.states[t._id+".outputCount"].val+"":i+=' / ',i+='',i+=""}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='
    '+r.main.getHostIcon(n," ")+'
    '+n.common.hostname+'
    • '+r.words.Type+': '+n.common.type+'
    • '+r.words.Title+': '+n.common.title+'
    • '+r.words.OS+': '+(n.native.os?n.native.os.platform:_("unknown"))+'
    • '+r.words.Available+':
    • '+r.words.Installed+': '+n.common.installedVersion+"
    • ";return r.main.states[n._id+".inputCount"]?a+='
    • '+r.words.Events+': ⇥'+r.main.states[n._id+".inputCount"].val+' / ↦'+r.main.states[n._id+".outputCount"].val+"
    • ":a+='
    • '+r.words.Events+': /
    • ',a+='
    edit autorenew',n.common.hostname!==r.main.currentHost&&(a+=' delete'),a+='
    '}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(''),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'+e+"").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
    '+_("Filtered out")+"
    ")}():function(){for(var e="",t=0;t'+_("Filtered out")+"")}(),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↦'+t.val+"")):e.match(/^system\.host\..+\.inputCount$/)&&(e=e.substring(0,e.length-11),this.$tab.find('.host-in[data-host-id="'+e+'"]').html('↦'+t.val+""))}}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',r+=''+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":r+=_("false"),r+='',r+=''+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":r+=_("false"),r+="",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+=''+_("Connected to %s: ",n)+"",r+=(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?!0===c?''+_("true")+"":''+c+"":_("false"),r+="";r+=""}else{var c;if(r='',r+='",p.main.states[n+"."+i+".info.connection"]||p.main.objects[n+"."+i+".info.connection"])r+='";r+="
    '+_("Connected to host: ")+'',p.main.states[e+".connected"]&&p.main.states[e+".connected"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+='
    '+_("Heartbeat: ")+'',p.main.states[e+".alive"]&&p.main.states[e+".alive"].val?r+=''+_("true")+"":(r+="daemon"===s.mode?''+_("false")+"":_("false"),o="daemon"===s.mode?"red":"blue"),r+="
    '+_("Connected to %s: ",n)+"",(c=!!p.main.states[n+"."+i+".info.connection"]&&p.main.states[n+"."+i+".info.connection"].val)?r+=!0===c?''+_("true")+"":''+c+"":(o="red"===o?"red":"orange",r+=''+_("false")+""),r+="
    "}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='
    '+$(this).data("title")+"
    ",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'+n+"");var r=_("%s processes",t),c=p.$tab.find("#running_processes");r!==c.text()&&c.html(''+r+"")}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(''+i+""),p.$tab.find("#freeMemPercent").html(''+t+"%"))}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(''+a+""),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?''+t.toFixed(1)+" MB":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?"":'
    ',a+=i?"":"
    ";else{a=i?"":'';var l=s.localLinks||s.localLink||"",d=l?p.replaceInLink(l,r,c):"";l&&(l="object"==typeof d?'':''),a+='
    ',a+=""+(s.icon?l+'':"")+(l?"
    ":"")+"",a+=''+r+"."+c+"";var u=s.onlyWWW||s.enabled;a+='',a+=''+(d?'':"")+"";var m=s.titleLang||s.title;if("object"==typeof m&&(m=m[systemLang]||m.en),a+=''+(m||"")+"",1'+(s.host||"")+""}a+=''+("schedule"===s.mode&&s.schedule||"")+"",p.main.config.expertMode&&(a+=''+(s.restartSchedule||"")+"",a+=''+(s.loglevel||"")+"",a+=''+(s.memoryLimitMB||"")+"",u&&p.main.states[t+".inputCount"]&&p.main.states[t+".outputCount"]?a+='⇥'+p.main.states[t+".inputCount"].val+' / ↦'+p.main.states[t+".outputCount"].val+"":a+=' / '),a+=''+M(t)+"",a+=i?"":""}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(''),$(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';for(var u=0;u'+(m[1]||m[0])+""}c+=""}c=c||'';var g=null;t.html(c+'
    ');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)}),''+s+""):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",o+=''+_("instance")+"",o+='',o+='',o+=''+_("actions")+"",o+=''+_("title")+"",1'+_("host")+""),o+=''+_("schedule_group")+"",p.main.config.expertMode&&(o+=''+_("restart")+"",o+=''+_("loglevel")+"",o+=''+_("memlimit")+"",o+=''+_("events")+""),o+=''+_("RAM usage")+"",p.$gridHead.html(o),this.$grid.html("");for(var a=Date.now(),s=0;s'+_("Filtered out")+""),p.$tab.find("#currentHost").html(this.main.currentHost),1'+s+"")}else"outputCount"===i?p.$tab.find('.instance-out[data-instance-id="'+e+'"]').html('↦'+t.val+""):"inputCount"===i&&p.$tab.find('.instance-in[data-instance-id="'+e+'"]').html('⇥'+t.val+"");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 %s?",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='
    ',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+='"}t+='";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");$(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('
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    ');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"+_(a)+": ",i+=''+(d[a]?d[a](e[a]):e[a]||" --")+"");n&&(i+="
  • "+_("Disk free")+": ",i+=''+(d["Disk free"]?d["Disk free"](e["Disk free"]):e["Disk free"]||" --")+"
  • ",i+="
  • "+_("Disk size")+": ",i+=''+(d["Disk size"]?d["Disk size"](e["Disk size"]):e["Disk size"]||" --")+"
  • "),i+=""}i+="",c.find(".card-content-text").replaceWith($(i)),i='
    '+_("Info")+'
    content_copyclose';var s=[];if(e){for(var o in i+="
      ",e)if(e.hasOwnProperty(o)){i+="
    • "+_(o)+": ";var r=d[o]?d[o](e[o]):e[o];s.push(o+": "+r),i+="Disk free"===o&&n?''+r+"
    • ":''+r+""}i+="
    "}i+="
    ",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.order?1:e.ordert.name.toLowerCase()?1:e.name.toLowerCase()\n \n');$.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[o].name+"")}r.append(a),0}}t||r.append($('
  • '+_("No bug")+"

  • "))}).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=''+_("copy note")+"";$("#log-copy-text").show().html(e+'
    '+s.html()+"
    ");for(var t=c.$tab.find("#log-copy-table").find(".log-column-4"),n=0;n'+a+"")}t.sort();for(var s=0;s'+o+"")}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='';a+=''+(e.from||"")+"",a+=''+this.main.formatDate(e.ts)+"",a+=''+e.severity+"",a+=''+e.message.substring(0,200).replace(/&/g,"&").replace(//g,">")+"",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;epause')}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('
    \n \n
    ');$.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[o].name+"")}r.append(a),0}}t||r.append($('
  • '+_("No bug")+"

  • "))}).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').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[a].name+""),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'+n+"");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('');for(var a=0;a'+s.instances[a].substring("system.adapter.".length)+"");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("")}})):$.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'+(e||l.main.tabs.users.list[i])+"";for(l.$dialog.find("#tab-system-acl-owner").html(n).val(t.owner||"system.user.admin"),n="",i=0;i'+(e||l.main.tabs.users.groups[i])+"";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'),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'+_(a+" permissions")+"",i+='';for(var s=0;s"+t[s]+"":i+="";i+="",i+="";for(var o=0;o'}else i+="";i+=""}i+="",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+='
      ';for(var t=function(e,t){for(var n={},i=0;i'+g.main.getIcon(c)+l+'close'}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+='
    • ',e+=" "+(g.main.getIcon(g.list[n],null,null,"icon")||''),e+=''+i+"",e+="

      "+g.list[n]+((m?" ("+m+")":"")||"")+"

      ",e+=' '+(a.enabled?"check_box":"check_box_outline_blank")+"",e+=' edit',e+=' delete
      ',e+=s||"",e+="
    • "}e+="
    ",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 "%s" 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+='
      ';for(var t=0;t'+g.main.getIcon(c)+r+'close'}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+='
    • ',e+=" "+(g.main.getIcon(g.groups[t],null,null,"icon")||''),e+=' '+n+"",e+="

      "+g.groups[t]+((u?" ("+u+")":"")||"")+"

      ",e+=' edit',e+=' delete
      ',e+=a||"",e+="
    • "}e+="
    ",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 "%s" 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 $('
    '+t.find(".treetable-icon-empty+span").text()+"
    ")},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(''+_("Ok")+''+_("Cancel")+""),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+=''+i[o]+"";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?''+n+"":""),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('account_circle');C("#current-user").html(t);for(var i=[],a=0;aone object or all 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 "%s" 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:'
  • '+(T[e]&&T[e].icon?''+T[e].icon+"":'live_help')+_(C(this).data("name"))+"
  • ",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:'
  • '+(t?''+t+"":'live_help')+C(this).data("name")+"
  • ",id:e})}}),i.sort(function(e,t){return T[e.id]||T[t.id]?T[e.id]?T[t.id]?T[e.id].orderT[t.id].order?1:0:-1:1:0});for(var t=0;t
      ';for(var s in y){var o=y[s],r="chk-"+s;a+="
    • '+_(o)+""}a+="
    ",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'+m+"\n",C("#"+d).length)C("#"+d).hide().appendTo(C("body"));else{var f='
    ';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('')})}}}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 L(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'+a.icon+"";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.getHostIcon(v.objects[v.tabs.hosts.list[a].id],"imgHost left")+v.tabs.hosts.list[a].name+""),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;tiframe");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="云控2 - "+n,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=N(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?''+(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=N(e);n=a.icon,i=a.alt}return''+(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.admin.styles+"")}}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&&(n="cn"),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&&(v.systemConfig.common.language="cn");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=L,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)

    Copyright © 2014-2018 spacen

    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:
    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
    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.
    ',cn:'The MIT License (MIT)

    Copyright © 2014-2018 spacen

    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:
    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
    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.
    '},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=' ';break;case"edit":o=' ';break;case"text":o=''+m+""}p.append(""+o+"");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")),'"),r=0,c=this.options.length;r"+t+""}},n))for(var l=0;lclose'),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")';for(var a=0;a';else if("select"===s[a].type.substring(0,6)){f+=("multiple"===s[a].type.substring(7,16)?'"}else f+='';if(g[a]){p="text-align: center; "+(g[a].style||"")+(g[a].tdstyle||"");for(var v=0;v':f+='';g[a].class&&(t+=' class="'+g[a].class+'" ')}p.length||b.length?t+=' style="'+p+b+'">'+f+"":t+=">"+f+""}t+=""}var w=h.find(".table-lines");w.length||(h.append(''),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+'", "cn": "'+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';n+='
      ';for(var i=e.rows,a=0;a'+(d?"":'')+''+l+""}n+="
    ";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''+s.icon+"";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?''+a+'':""}function p(i){var e="",t=window.M&&window.M.toast?"a":"button";if(i.panelButtons){e+='
    ';for(var n=0;n",window.M&&window.M.toast&&(e+=''+(i.panelButtons[n].icon||"")+""),e+="";i.moveId&&(e+="<"+t+' class="btn-floating waves-effect waves-light blue treetable-sort" title="'+_("reorder")+'">',window.M&&window.M.toast&&(e+='import_export'),e+=""),e+="
    "}e+='
    ',e+=" ",e+=' ';for(var a=0;a",e+=' ',e+=' ',e+=" "):e+=" "+_(i.columns[a])+"";i.buttons&&(e+=" "),e+=" ",e+="",e+="";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;mt.id?1:e.id',s[z].children&&s[z].children.length&&(e+=''+s[z].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var R=X(this),H=X(e);R.find("span:first-child").remove(),R.find(".treetablelist-buttons").remove(),R.find(".treetable-list").remove(),R.find(".tree-table-buttons").remove(),R.find(".tree-table-main").remove(),R.prepend(H),i.rows=s;var B=X(H[1]).find(">table"),G=X(H[0]);B.data("options",i),B.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=B.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"%s"?',en:'Are you sure to delete "%s"?'},'Are you sure to delete all children of %s?':{cn:'确定删除 %s 的全部子项?',en:'Are you sure to delete all children of %s?'},"Are you sure to delete all children of %s?":{cn:'你确定删除 "%s"全部的子项目?',en:'Are you sure to delete "%s" and all children?'},"Are you sure to delete script %s?":{cn:"你确定删除脚本 '%s'?",en:"Are you sure to delete script '%s'?"},"Are you sure you want to delete adapter %s?":{cn:"你确定删除适配器: %s?",en:"Are you sure you want to delete adapter %s?"},"Are you sure you want to delete the instance %s?":{cn:"你确定要删除这个实例: %s?",en:"Are you sure you want to delete the instance %s?"},"Are you sure?":{cn:"你确定吗?",en:"Are you sure?"},"Are you sure? Changes are not saved.":{cn:"数据没有保存,你确定啊吗?",en:"Are you sure? Changes are not saved."},Aug:{cn:"Aug",en:"Aug"},August:{cn:"August",en:"August"},Available:{cn:"可用的",en:"Available"},"Available version:":{cn:"最新版本",en:"Available version"},CPUs:{cn:"CPUs",en:"CPUs"},Calendar:{cn:"计划",en:"Calendar"},Cancel:{cn:"取消",en:"Cancel"},"Cannot create user: ":{cn:"不能创建用户: ",en:"Cannot create user: "},"Cannot delete user: ":{cn:"不能删除用户: ",en:"Cannot delete user: "},"Cannot disable admin!":{cn:"不能停用管理员!",en:"Cannot disable admin!"},"Cannot read file!":{cn:"无法读取文件!",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:"不能设置密码: ",en:"Cannot set password: "},Certificates:{cn:"证书",en:"Certificates"},Change:{cn:"修改",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:"检查所有",en:"Check all"},China:{cn:"中国",en:"China"},"City:":{cn:"城市",en:"City"},Clear:{cn:"清除",en:"Clear"},"Clear list":{cn:"清除",en:"Clear list"},"Clear log":{cn:"清除",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:"点击图标打开链接",en:"Click on icon to open a link"},Close:{cn:"关闭",en:"close"},"Collapse all nodes":{cn:"收起全部",en:"Collapse all nodes"},Color:{cn:"颜色",en:"Color"},"Configuration not saved.":{cn:"配置信息没有存储.",en:"Configuration not saved."},"Connected to %s: ":{cn:"Connected to %s: ",en:"Connected to %s: "},"Connected to host: ":{cn:"Connected to host: ",en:"Connected to host: "},"Copy log":{cn:"复制",en:"Copy log"},"Copy to clipboard":{cn:"拷贝",en:"Copy to clipboard"},"Country:":{cn:"国家/地区",en:"Country"},Create:{cn:"创建",en:"Create"},"Create new category":{cn:"新建分类",en:"Create new category"},"Create new category, like %s":{cn:"创建新的分类, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"新建枚举",en:"Create new enum"},"Create new enum, like %s":{cn:"创建新的枚举, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"新建群组",en:"Create new group"},"Create new user":{cn:"创建新用户",en:"Create new user"},Created:{cn:"Created",en:"Created"},Croatia:{cn:"Croatia",en:"Croatia"},"Cron expression":{cn:"Cron expression",en:"Cron expression"},"Currency:":{cn:"货币",en:"Currency"},Custom:{cn:"自定义",en:"Custom"},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:"时间格式",en:"Date format"},"Deactivated. Click to start.":{cn:"Deactivated. Click to start.",en:"Deactivated. Click to start."},"Debug outputs:":{cn:"调试输出",en:"Debug outputs"},Dec:{cn:"Dec",en:"Dec"},December:{cn:"December",en:"December"},"Default ACL":{cn:"缺省 ACL",en:"Default ACL"},"Default history instance:":{cn:"缺省的数据记录实例",en:"Default history instance"},"Delete attribute":{cn:"删除",en:"Delete attribute"},"Delete category":{cn:"删除",en:"Delete category"},"Delete enum":{cn:"删除",en:"Delete enum"},"Delete member":{cn:"删除",en:"Delete member"},"Delete object":{cn:"删除",en:"Delete object"},Denmark:{cn:"Denmark",en:"Denmark"},Description:{cn:"说明",en:"Description"},Device:{cn:"Device",en:"Device"},"Device discovery":{cn:"Device discovery",en:"Device discovery"},"Disk free":{cn:"磁盘空闲",en:"Disk free"},"Disk free:":{cn:"磁盘空闲:",en:"Disk free:"},"Disk size":{cn:"磁盘大小",en:"Disk size"},'Do you want to delete just one object or all children of %s too?':{cn:'Do you want to delete just one object or all children of %s too?',en:'Do you want to delete just one object or all 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"},"Done with error: %s":{cn:"Done with error: %s",en:"Done with error: %s"},"Download log":{cn:"下载",en:"Download log"},"Drop the files here":{cn:"拖放文件到这里",en:"Drop the files here"},"Drop the icons here":{cn:"拖放图标文件到这里",en:"Drop the icons here"},Ecuador:{cn:"Ecuador",en:"Ecuador"},Edit:{cn:"编辑",en:"Edit"},"Edit category":{cn:"编辑 category",en:"Edit category"},"Edit enum":{cn:"编辑 enum",en:"Edit enum"},"Edit in dialog":{cn:"编辑 in dialog",en:"Edit in dialog"},"Edit object":{cn:"编辑 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"},Enums:{cn:"枚举",en:"Enums"},Error:{cn:"错误",en:"Error"},Event:{cn:"类型",en:"Type"},Events:{cn:"事件",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"},"File is too big!":{cn:"文件太大!",en:"File is too big!"},"File rights":{cn:"File rights",en:"File rights"},"Filter:":{cn:"查找",en:"Filter"},"Filtered out":{cn:"Everything is filtered out",en:"Everything is filtered out"},"Find coordinates...":{cn:"Find coordinates...",en:"Find coordinates..."},"Float divider:":{cn:"小数点",en:"Float divider"},"Free RAM:":{cn:"Free:",en:"Free:"},Fri:{cn:"Fri",en:"Fri"},From:{cn:"From: ",en:"From: "},"From github":{cn:"软件仓库",en:"From github"},Function:{cn:"Function",en:"Function"},"Generated ID:":{cn:"Generated ID",en:"Generated ID"},"Go to Github...":{cn:"Go to Github...",en:"Go to Github..."},Group:{cn:"用户组",en:"Group"},Groups:{cn:"用户组",en:"Groups"},"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:"心跳: ",en:"Heartbeat: "},"Hong Kong":{cn:"中国香港",en:"Hong Kong"},Host:{cn:"Host",en:"Host"},"Host %s is offline":{cn:"主机 %s 离线",en:"Host %s is offline"},"Host:":{cn:"Host",en:"Host"},Hosts:{cn:"Hosts",en:"Hosts"},ID:{cn:"ID",en:"ID"},"Icon upload":{cn:"上传图标",en:"Icon upload"},"In background":{cn:"后台运行",en:"In background"},Info:{cn:"信息",en:"Info"},Insert:{cn:"插入",en:"Insert"},Install:{cn:"操作",en:"Install"},"Install adapter from URL":{cn:"安装或升级",en:"Install or update the adapter from URL"},"Install adapter from github":{cn:"软件仓库安装或升级",en:"Install or update the adapter from Github"},"Install from custom URL":{cn:"自定义 URL 安装",en:"Install from custom URL"},"Install or update from URL...":{cn:"正在安装...",en:"Install or update from URL..."},"Installation counter":{cn:"Installations counter",en:"Installations counter"},"Installations counter":{cn:"Installations counter",en:"Installations counter"},Installed:{cn:"已安装",en:"Installed"},"Installed from group":{cn:"Installed from group",en:"Installed from group"},"Installed instances":{cn:"已安装的实例",en:"Installed instances"},"Installed version":{cn:"已安装版本",en:"Installed version"},Instances:{cn:"实例",en:"Instances"},Instructions:{cn:"指令",en:"Instructions"},Intro:{cn:"总览",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"},"Is yet in the list":{cn:"已经在列表中",en:"It's already in the list"},Jan:{cn:"Jan",en:"Jan"},January:{cn:"January",en:"January"},Jul:{cn:"七月",en:"Jul"},July:{cn:"July",en:"July"},Jun:{cn:"Jun",en:"Jun"},June:{cn:"June",en:"June"},"Known bugs for":{cn:"Known bugs for",en:"Known bugs for"},"Last changed":{cn:"上次修改",en:"Last changed"},"Last update":{cn:"上次更新",en:"Last update"},"Latitude:":{cn:"纬度",en:"Latitude"},"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"},License:{cn:"许可",en:"License"},"License terms":{cn:"许可条款",en:"License terms"},"Listen on all IPs":{cn:"Listen on all IPs",en:"Listen on all IPs"},"Loading...":{cn:"正在加载...",en:"Loading..."},Log:{cn:"日志",en:"Log"},"Log file will be deleted. Are you sure?":{cn:"日志文件将被删除,你确定吗?",en:"Log file will be deleted. Are you sure?"},"Log size:":{cn:"文件大小",en:"Log size"},"Login timeout(sec):":{cn:"登录超时 (秒)",en:"Login timeout (sec)"},Logout:{cn:"退出",en:"Logout"},"Longitude:":{cn:"经度",en:"Longitude"},MB:{cn:"Mb",en:"Mb"},Main:{cn:"Main",en:"Main"},"Main settings":{cn:"主设置",en:"Main settings"},"Manually created":{cn:"手工创建",en:"Manually created"},Mar:{cn:"三月",en:"Mar"},March:{cn:"三月",en:"March"},Members:{cn:"Members",en:"Members"},Message:{cn:"消息",en:"Message"},"Message buffer overflow. Losing oldest":{cn:"Message buffer overflow. Losing oldest.",en:"Message buffer overflow. Losing oldest."},Model:{cn:"型号",en:"Model"},Mon:{cn:"Mon",en:"Mon"},NPM:{cn:"NPM",en:"NPM"},Name:{cn:"名称",en:"Name"},"Name:":{cn:"名称",en:"Name"},New:{cn:"新建",en:"New"},"New category":{cn:"新类别",en:"New category"},"New enum":{cn:"新类别",en:"New enum"},"New group":{cn:"新群组",en:"New group"},"New object":{cn:"新对象",en:"New object"},"New objekt":{cn:"新对象",en:"New object"},"New user":{cn:"新用户",en:"New user"},"No data":{cn:"暂无数据",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"},Norway:{cn:"Norway",en:"Norway"},"Not exists":{cn:"不存在",en:"Does not exist"},"Note:":{cn:"Note",en:"Note"},Nov:{cn:"十一月",en:"Nov"},November:{cn:"十一月",en:"November"},OS:{cn:"OS",en:"OS"},'Object "%s" does not exists. Update the page.':{cn:'Object "%s" 不存在,请刷新.',en:'Object "%s" does not exist. Update the page.'},"Object may not be deleted":{cn:"对象不能被删除",en:"Object may not be deleted"},"Object rights":{cn:"对象权限",en:"Object rights"},Objects:{cn:"对象",en:"Objects"},Oct:{cn:"十月",en:"Oct"},October:{cn:"十月",en:"October"},Ok:{cn:"确认",en:"Ok"},"Only one":{cn:"Only one",en:"Only one"},"Open original":{cn:"在新标签中打开",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"},Parent:{cn:"父类",en:"Parent"},"Parse error":{cn:"Parse error",en:"Parse error"},Password:{cn:"密码",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:"密码不能为空!",en:"Password cannot be empty!"},"Password repeat":{cn:"Password repeat",en:"Password repeat"},"Path to storage:":{cn:"存储路径",en:"Path to storage"},"Pause output":{cn:"暂停输出",en:"Pause output"},Platform:{cn:"平台",en:"Platform"},"Please confirm":{cn:"请确认",en:"Please confirm"},"Port to check the domain:":{cn:"Port to check the domain",en:"Port to check the domain"},"Preserve ID":{cn:"Preserve ID",en:"Preserve ID"},Preview:{cn:"Preview",en:"Preview"},"Processing...":{cn:"处理中...",en:"Processing..."},RAM:{cn:"内存",en:"RAM"},"RAM total usage:":{cn:"RAM总使用量:",en:"Total RAM usage:"},"RAM usage":{cn:"使用内存",en:"RAM usage"},"Rebuild tree":{cn:"重建树",en:"Rebuild tree"},"Recently updated":{cn:"Recently updated",en:"Recently updated"},"Refresh log":{cn:"刷新",en:"Refresh log"},Removed:{cn:"已删除",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:"重命名",en:"Rename"},Repositories:{cn:"软件仓库",en:"Repositories"},Rights:{cn:"权限",en:"Access rights"},Role:{cn:"角色",en:"Role"},Room:{cn:"场景",en:"Room"},"Running: ":{cn:"Running: ",en:"Running: "},"Sao Tome and Principe":{cn:"Sao Tome and Principe",en:"Sao Tome and Principe"},Sat:{cn:"星期六",en:"Sat"},Save:{cn:"保存",en:"Save"},"Save Objecttree as JSON File":{cn:"将对象保存为 JSON 文件",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:"保存配置",en:"Save configuration"},Script:{cn:"脚本",en:"Script"},Scripts:{cn:"脚本",en:"Scripts"},Select:{cn:"Select",en:"Select"},"Select ID":{cn:"Select ID",en:"Select ID"},"Select adapter:":{cn:"选择适配器",en:"Select adapter"},"Select language":{cn:"选择语言",en:"Select language"},"Select options":{cn:"选项",en:"Select options"},"Sent data:":{cn:"Sent data",en:"Sent data"},Sep:{cn:"九月",en:"Sep"},September:{cn:"九月",en:"September"},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:"设置",en:"Settings"},"Settings for %s":{cn:"Settings for %s",en:"Settings for %s"},"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:"显示...",en:"Show..."},"Size: %s, Available: %s":{cn:"大小: %s, 可用: %s"},"Some data are not stored. Discard?":{cn:"有一些修改了的配置信息没有保存. 确认吗?",en:"Some data are not stored. Discard?"},"Sort alphabetically":{cn:"Sort alphabetically by name",en:"Sort alphabetically by name"},"Started...":{cn:"Started...",en:"Started..."},State:{cn:"Datapoint",en:"Datapoint"},"State type":{cn:"State type",en:"State type"},States:{cn:"状态",en:"States"},"States rights":{cn:"状态权限",en:"States rights"},Statistics:{cn:"统计",en:"Statistics"},"Statistics:":{cn:"统计",en:"Statistics"},"Storage of %s":{cn:'Storage of %s',en:'Storage of %s'},"Storage of %s states":{cn:'Storage of %s states',en:'Storage of %s states'},"Success!":{cn:"成功!",en:"Success!"},Suggestion:{cn:"推荐",en:"Recommendation"},Sun:{cn:"星期天",en:"Sun"},System:{cn:"系统",en:"System"},"System language:":{cn:"语言",en:"System language"},"System settings":{cn:"系统设置",en:"System settings"},"System uptime":{cn:"运行",en:"System uptime"},Table:{cn:"Table",en:"Table"},Taiwan:{cn:"中国台湾",en:"Taiwan"},"Temperature units:":{cn:"温度单位",en:"Temperature units"},'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:"标题",en:"Title"},To:{cn:"To",en:"To"},Today:{cn:"今日",en:"Today"},"Toggle expert mode":{cn:"切换模式",en:"Toggle expert mode"},"Toggle states view":{cn:"切换状态视图",en:"Toggle the states view"},"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:"触发事件",en:"Trigger event"},Type:{cn:"Type",en:"Type"},"URL or file path:":{cn:"URL或安装包路径",en:"URL or file path"},"Unknown file format!":{cn:"文件格式无效!",en:"Unknown file format!"},"Unsupported image format":{cn:"不支持的格式",en:"Unsupported image format"},Update:{cn:"更新",en:"Update"},"Update objects":{cn:"更新",en:"Update objects"},"Update states":{cn:"更新",en:"Update states"},Updated:{cn:"已更新",en:"Updated"},"Upgrade all adapters":{cn:"升级所有适配器",en:"Upgrade all adapters"},Upload:{cn:"文件上传",en:"File upload"},"Upload admin started":{cn:"上传配置",en:"Upload of configuration is started"},"Upload started...":{cn:"上传开始...",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:"用户",en:"User"},"User deleted":{cn:"用户已删除",en:"User deleted"},"User does not exist":{cn:"这个用户不存在",en:"User does not exist"},"User yet exists":{cn:"这个用户已经存在",en:"User already exists"},Users:{cn:"用户",en:"Users"},Value:{cn:"Value",en:"Value"},"Values of %s":{cn:"Values of %s",en:"Values of %s"},"Vatican City State":{cn:"Vatican City State",en:"Vatican City State"},Wed:{cn:"Wed",en:"Wed"},With:{cn:"With",en:"With"},Without:{cn:"Without",en:"Without"},"You are going to add new instance: ":{cn:"添加新的实例: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"可将 devices,channels,states 拖放到枚举区",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"支持拖放用户",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"},_All:{cn:"全部",en:"All"},"_Toggle expert mode":{cn:"切换模式",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:"适配器数",en:"adapters count"},add:{cn:"添加",en:"Add"},"add children":{cn:"添加子节点",en:"add children"},"add instance":{cn:"添加实例",en:"add instance"},"add repository":{cn:"添加仓库",en:"add repository"},agree:{cn:"同意",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:"最新",en:"available"},beta:{cn:"beta",en:"beta"},boolean:{cn:"boolean",en:"boolean"},bug:{cn:"bugtracker",en:"bugtracker"},cancel:{cn:"取消",en:"Cancel"},cert_path_note:{cn:"例如 '/opt/certs/cert.pem', 也可以直接拖放文件",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:"模式",en:"change view mode"},channel:{cn:"channel",en:"channel"},clear:{cn:"清除",en:"clear"},"climate-control_group":{cn:"Climate Control",en:"Climate Control"},"close on ready":{cn:"完成后自动关闭",en:"close on ready"},collapse:{cn:"收起",en:"collapse"},"collapse all":{cn:"收起",en:"collapse all"},comma:{cn:"comma",en:"comma"},"command execution":{cn:"执行命令 ",en:"Command execution"},common:{cn:"公共",en:"common"},"common adapters_group":{cn:"公共",en:"Common"},common_color:{cn:"颜色",en:"color"},common_def:{cn:"缺省值",en:"default value"},common_desc:{cn:"说明",en:"description"},common_icon:{cn:"图标",en:"icon"},common_max:{cn:"最大值",en:"max value"},common_min:{cn:"最小值",en:"minimal value"},common_read:{cn:"允许读",en:"read allowed"},common_role:{cn:"角色",en:"role"},common_states:{cn:"预定义值",en:"predefined values"},common_type:{cn:"类型",en:"type"},common_unit:{cn:"量度单位",en:"measure unit"},common_write:{cn:"允许写",en:"write allowed"},communication_group:{cn:"通信",en:"Communication"},config:{cn:"设置",en:"Settings"},"config instance":{cn:"配置实例",en:"config instance"},"confirm password":{cn:"密码确认",en:"Confirm password"},connected:{cn:"已连接",en:"connected"},copy:{cn:"复制",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:"创建",en:"create"},"custom enum":{cn:"自定义枚举",en:"?ustom enum"},"custom group":{cn:"自定义群组",en:"Custom group"},daemon:{cn:"daemon",en:"daemon"},"date-and-time_group":{cn:"日期和时间",en:"Date and Time"},daysShortText:{cn:"d.",en:"d."},debug:{cn:"debug",en:"debug"},delete:{cn:"删除",en:"delete"},"delete adapter":{cn:"删除",en:"delete adapter"},"delete group":{cn:"删除",en:"delete group"},"delete instance":{cn:"删除",en:"delete instance"},"delete operation":{cn:"删除",en:"delete"},"delete script":{cn:"删除",en:"delete script"},"delete user":{cn:"删除",en:"delete user"},desc:{cn:"desc",en:"desc"},description:{cn:"说明",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.
    Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
    Thank you!",en:"We worked hard to create this project. In return we expect from you some usage statistics.
    Every time the adapter list is updated, the anonymized statistics are sent. We respect your privacy, so no private information will be transmitted.
    Thank you!"},edit:{cn:"编辑",en:"edit"},"edit enum":{cn:"编辑",en:"edit enum"},"edit file":{cn:"编辑",en:"edit file"},"edit group":{cn:"编辑",en:"edit group"},"edit instance":{cn:"编辑",en:"edit instance"},"edit script":{cn:"编辑",en:"edit script"},"edit user":{cn:"修改",en:"edit user"},"edit value":{cn:"编辑",en:"Edit value"},enabled:{cn:"enabled",en:"enabled"},energy_group:{cn:"能源",en:"Energy"},engine:{cn:"engine",en:"engine"},"engine type":{cn:"engine type",en:"engine type"},error:{cn:"错误",en:"error"},events:{cn:"events",en:"events"},"execute operation":{cn:"Execute operation",en:"Execute operation"},expand:{cn:"展开",en:"expand"},"expand all":{cn:"展开所有",en:"expand all"},extended:{cn:"extended",en:"extended"},false:{cn:"false",en:"false"},"file permissions":{cn:"文件许可",en:"File permissions"},from:{cn:"来自",en:"from"},garden_group:{cn:"农业",en:"Garden"},general_group:{cn:"基本",en:"General"},geoposition_group:{cn:"地理位置",en:"Geo position"},groups:{cn:"groups",en:"groups"},hardware_group:{cn:"硬件",en:"Hardware"},history:{cn:"数据",en:"history"},"history data":{cn:"数据",en:"history data"},host:{cn:"主机",en:"host"},household_group:{cn:"Household",en:"Household"},"http operation":{cn:"http",en:"http"},id:{cn:"ID",en:"ID"},info:{cn:"信息",en:"info"},infrastructure_group:{cn:"环境",en:"Infrastructure"},install:{cn:"安装",en:"install"},"install specific version":{cn:"安装指定版本",en:"Install a specific version"},installed:{cn:"已安装",en:"installed"},"installed adapters":{cn:"Filter adapters with existing instances",en:"Filter adapters with existing instances"},instance:{cn:"实例",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:"物联网",en:"IoT systems"},"iot-systems_group":{cn:"物联网系统",en:"IoT Systems"},keywords:{cn:"关键字",en:"keywords"},lc:{cn:"Last change",en:"Last change"},less:{cn:"精简",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 here.',en:'This are settings for Let\'s Encrypt account. To get the free certificates for your domain. You can read more here.'},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:"许可",en:"license"},"license agreement":{cn:"许可协议",en:"license agreement"},"license not agree":{cn:"不同意!",en:"Do not agree with the license!"},license_checkbox:{cn:"同意全部的许可条款",en:"I agree with the collection of anonymous statistics.
    (This can be disabled in settings)"},lighting_group:{cn:"照明",en:"Lighting"},link:{cn:"link",en:"link"},list:{cn:"list",en:"list"},"list operation":{cn:"list elements",en:"list elements"},logic_group:{cn:"逻辑",en:"Logic"},loglevel:{cn:"loglevel",en:"loglevel"},media_group:{cn:"媒体",en:"Media"},members:{cn:"members",en:"members"},memlimit:{cn:"RAM limit",en:"RAM limit"},message:{cn:"消息",en:"message"},messaging_group:{cn:"信使",en:"Messaging"},"misc-data_group":{cn:"Misc. data",en:"Misc. data"},mixed:{cn:"mixed",en:"mixed"},mode:{cn:"mode",en:"mode"},more:{cn:"详细",en:"more"},multi:{cn:"multistate",en:"multistate"},multimedia_group:{cn:"多媒体",en:"Multimedia"},name:{cn:"名称",en:"name"},native:{cn:"native",en:"native"},network_group:{cn:"网络",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:"新建用户",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:"不同意",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:"/",en:"of"},ok:{cn:"确定",en:"Ok"},"open web page":{cn:"Open web page of adapter",en:"Open web page of adapter"},os:{cn:"OS",en:"operating system"},"other permissions":{cn:"Other permissions",en:"Other permissions"},"parent name":{cn:"parent name",en:"parent name"},password:{cn:"密码",en:"Password"},permissionError:{cn:"Permission error",en:"Permission error"},planned:{cn:"planned",en:"planned"},platform:{cn:"平台",en:"platform"},point:{cn:"point",en:"point"},process:{cn:"process",en:"process"},protocols_group:{cn:"协议",en:"Protocols"},raw:{cn:"Raw (开发)",en:"Raw (experts only)"},read:{cn:"read",en:"read"},"read operation":{cn:"read",en:"read"},readme:{cn:"readme",en:"readme"},reload:{cn:"刷新",en:"reload"},"reload instance":{cn:"reload instance",en:"reload instance"},rest:{cn:"REST (read only)",en:"rest (read only)"},restart:{cn:"重启",en:"auto restart"},"restart script":{cn:"重启脚本",en:"restart script"},role:{cn:"角色",en:"role"},save:{cn:"保存",en:"save"},schedule_group:{cn:"计划",en:"Schedule"},script_group:{cn:"逻辑和脚本",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:"安防",en:"severity"},stable:{cn:"stable",en:"stable"},state:{cn:"state",en:"state"},"state permissions":{cn:"状态许可",en:"State permissions"},storage_group:{cn:"存储",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:"第三方",en:"Third party"},"this adapter does not allow multiple instances":{cn:"这个适配器不允许运行多个实例",en:"This adapter does not allow multiple instances"},title:{cn:"标题",en:"title"},today:{cn:"今日",en:"today"},true:{cn:"true",en:"true"},ts:{cn:"时间",en:"Timestamp"},type:{cn:"type",en:"type"},unit:{cn:"unit",en:"unit"},update:{cn:"更新",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:"已更新",en:"updated"},updates:{cn:"updates",en:"updates"},upload:{cn:"上传",en:"Upload"},"user permissions":{cn:"用户权限",en:"user permissions"},users:{cn:"用户",en:"users"},"users permissions":{cn:"用户权限",en:"User permissions"},utility_group:{cn:"公用",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:"版本",en:"version"},vis_group:{cn:"yunkong2.vis",en:"yunkong2.vis"},visualisation_group:{cn:"可视化",en:"Visualisation"},"visualization-icons_group":{cn:"可视化 图标",en:"Visualization Icons"},"visualization-widgets_group":{cn:"可视化 部件",en:"Visualization Widgets"},visualization_group:{cn:"可视化",en:"Visualisation"},warn:{cn:"warn",en:"warn"},weather_group:{cn:"天气",en:"Weather"},wetty:{cn:"Wetty",en:"Wetty"},write:{cn:"write",en:"write"},"write operation":{cn:"write",en:"write"},yesterday:{cn:"昨天",en:"yesterday"},Speed:{cn:"主频",en:"Speed"},"%s object(s) processed":{cn:"%s objects were processed",en:"%s objects were processed"},"%s was imported":{cn:"%s was imported",en:"%s was imported"},"Ignore warning":{cn:"Ignore warning",en:"Ignore warning"},Filter:{cn:"查找",en:"Filter"},Afghanistan:{cn:"Afghanistan",en:"Afghanistan"},Albania:{cn:"Albania",en:"Albania"},Algeria:{cn:"Algeria",en:"Algeria"},"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"},Argentina:{cn:"Argentina",en:"Argentina"},Armenia:{cn:"Armenia",en:"Armenia"},Aruba:{cn:"Aruba",en:"Aruba"},Australia:{cn:"Australia",en:"Australia"},Austria:{cn:"Austria",en:"Austria"},"Authentication was deactivated":{cn:"Authentication was deactivated",en:"Authentication was deactivated"},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"},Cambodia:{cn:"Cambodia",en:"Cambodia"},Cameroon:{cn:"Cameroon",en:"Cameroon"},Canada:{cn:"Canada",en:"Canada"},"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"},Chad:{cn:"Chad",en:"Chad"},Chile:{cn:"Chile",en:"Chile"},"Christmas Island":{cn:"Christmas Island",en:"Christmas Island"},"Cocos Islands":{cn:"Cocos Islands",en:"Cocos Islands"},Colombia:{cn:"Colombia",en:"Colombia"},Comoros:{cn:"Comoros",en:"Comoros"},Congo:{cn:"Congo",en:"Congo"},"Cook Islands":{cn:"Cook Islands",en:"Cook Islands"},"Costa Rica":{cn:"Costa Rica",en:"Costa Rica"},Cuba:{cn:"Cuba",en:"Cuba"},Cyprus:{cn:"Cyprus",en:"Cyprus"},"Czech Republic":{cn:"Czech Republic",en:"Czech Republic"},"Disable authentication":{cn:"Disable authentication",en:"Disable authentication"},Djibouti:{cn:"Djibouti",en:"Djibouti"},"Dominican Republic":{cn:"Dominican Republic",en:"Dominican Republic"},"East Timor":{cn:"East Timor",en:"East Timor"},"Enabled:":{cn:"Enabled",en:"Enabled"},"Equatorial Guinea":{cn:"Equatorial Guinea",en:"Equatorial Guinea"},Eritrea:{cn:"Eritrea",en:"Eritrea"},Estonia:{cn:"Estonia",en:"Estonia"},Ethiopia:{cn:"Ethiopia",en:"Ethiopia"},Fiji:{cn:"Fiji",en:"Fiji"},Finland:{cn:"Finland",en:"Finland"},France:{cn:"France",en:"France"},"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"},Gabon:{cn:"Gabon",en:"Gabon"},Gambia:{cn:"Gambia",en:"Gambia"},Georgia:{cn:"Georgia",en:"Georgia"},Germany:{cn:"Germany",en:"Germany"},Ghana:{cn:"Ghana",en:"Ghana"},Gibraltar:{cn:"Gibraltar",en:"Gibraltar"},Greece:{cn:"Greece",en:"Greece"},Greenland:{cn:"Greenland",en:"Greenland"},Grenada:{cn:"Grenada",en:"Grenada"},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"},Honduras:{cn:"Honduras",en:"Honduras"},Hungary:{cn:"Hungary",en:"Hungary"},Iceland:{cn:"Iceland",en:"Iceland"},India:{cn:"India",en:"India"},Indonesia:{cn:"Indonesia",en:"Indonesia"},Iran:{cn:"Iran",en:"Iran"},Iraq:{cn:"Iraq",en:"Iraq"},Ireland:{cn:"Ireland",en:"Ireland"},"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"},Japan:{cn:"Japan",en:"Japan"},Jersey:{cn:"Jersey",en:"Jersey"},Jordan:{cn:"Jordan",en:"Jordan"},Kazakhstan:{cn:"Kazakhstan",en:"Kazakhstan"},Kenya:{cn:"Kenya",en:"Kenya"},Kiribati:{cn:"Kiribati",en:"Kiribati"},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"},Latvia:{cn:"Latvia",en:"Latvia"},Lebanon:{cn:"Lebanon",en:"Lebanon"},Lesotho:{cn:"Lesotho",en:"Lesotho"},Liberia:{cn:"Liberia",en:"Liberia"},"Libyan Arab Jamahiriya":{cn:"Libyan Arab Jamahiriya",en:"Libyan Arab Jamahiriya"},Liechtenstein:{cn:"Liechtenstein",en:"Liechtenstein"},Lithuania:{cn:"Lithuania",en:"Lithuania"},Luxembourg:{cn:"Luxembourg",en:"Luxembourg"},Macau:{cn:"Macau",en:"Macau"},Macedonia:{cn:"Macedonia",en:"Macedonia"},Madagascar:{cn:"Madagascar",en:"Madagascar"},Mai:{cn:"Mai",en:"Mai"},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"},"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"},Mexico:{cn:"Mexico",en:"Mexico"},Micronesia:{cn:"Micronesia",en:"Micronesia"},Moldova:{cn:"Moldova",en:"Moldova"},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"},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 Caledonia":{cn:"New Caledonia",en:"New Caledonia"},"New Zealand":{cn:"New Zealand",en:"New Zealand"},Nicaragua:{cn:"Nicaragua",en:"Nicaragua"},Niger:{cn:"Niger",en:"Niger"},Nigeria:{cn:"Nigeria",en:"Nigeria"},Niue:{cn:"Niue",en:"Niue"},"Norfolk Island":{cn:"Norfolk Island",en:"Norfolk Island"},"Northern Mariana Islands":{cn:"Northern Mariana Islands",en:"Northern Mariana Islands"},Oman:{cn:"Oman",en:"Oman"},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"},Peru:{cn:"Peru",en:"Peru"},Philippines:{cn:"Philippines",en:"Philippines"},Pitcairn:{cn:"Pitcairn",en:"Pitcairn"},Poland:{cn:"Poland",en:"Poland"},Popular:{cn:"Popular",en:"Popular"},"Popular first":{cn:"Popular first",en:"Popular first"},Portugal:{cn:"Portugal",en:"Portugal"},"Puerto Rico":{cn:"Puerto Rico",en:"Puerto Rico"},Qatar:{cn:"Qatar",en:"Qatar"},Reunion:{cn:"Reunion",en:"Reunion"},Romania:{cn:"Romania",en:"Romania"},"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"},"Saudi Arabia":{cn:"Saudi Arabia",en:"Saudi Arabia"},Senegal:{cn:"Senegal",en:"Senegal"},Serbia:{cn:"Serbia",en:"Serbia"},Slovakia:{cn:"Slovakia",en:"Slovakia"},Slovenia:{cn:"Slovenia",en:"Slovenia"},"Solomon Islands":{cn:"Solomon Islands",en:"Solomon Islands"},Somalia:{cn:"Somalia",en:"Somalia"},"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"},"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"},Sudan:{cn:"Sudan",en:"Sudan"},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"},Tajikistan:{cn:"Tajikistan",en:"Tajikistan"},Tanzania:{cn:"Tanzania",en:"Tanzania"},Thailand:{cn:"Thailand",en:"Thailand"},Togo:{cn:"Togo",en:"Togo"},Tokelau:{cn:"Tokelau",en:"Tokelau"},Tonga:{cn:"Tonga",en:"Tonga"},"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"},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"},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)!"},Uzbekistan:{cn:"Uzbekistan",en:"Uzbekistan"},Vanuatu:{cn:"Vanuatu",en:"Vanuatu"},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!"},"Western Sahara":{cn:"Western Sahara",en:"Western Sahara"},Yemen:{cn:"Yemen",en:"Yemen"},Zaire:{cn:"Zaire",en:"Zaire"},Zambia:{cn:"Zambia",en:"Zambia"},Zimbabwe:{cn:"Zimbabwe",en:"Zimbabwe"},silly:{cn:"silly",en:"silly"},Seychelles:{en:"Seychelles"},"Sierra Leone":{en:"Sierra Leone"},Singapore:{en:"Singapore"},"Size: %s, Free: %s":{en:"Size: %s, Available: %s"},"edit enums":{en:"Edit enumerations for"},"place here":{en:"place the files here"},popular:{en:"popular"}}; //# sourceMappingURL=app.js.map diff --git a/www/js/app.js.map b/www/js/app.js.map index c838909..8486770 100644 --- a/www/js/app.js.map +++ b/www/js/app.js.map @@ -1 +1 @@ -{"version":3,"sources":["admin.js","adminAdapters.js","adminConfig.js","adminCustoms.js","adminEditObject.js","adminEnums.js","adminEvents.js","adminFileUtils.js","adminHosts.js","adminInstances.js","adminIntro.js","adminIssue.js","adminLogs.js","adminMenuEdit.js","adminObjects.js","adminReadme.js","adminSystem.js","adminUsers.js","license.js","listHeader.js","tableEditor.js","translate.js","treeTable.js","words.js"],"names":["Array","prototype","remove","what","ax","a","arguments","L","length","this","indexOf","splice","console","debug","log","Number","obj","parseFloat","Object","assign","$","extend","$iframeDialog","configNotSaved","showConfig","defaults","customPostInits","FORBIDDEN_CHARS","adapterRedirect","redirect","timeout","setTimeout","document","location","pathname","hash","href","gMain","detectIE","ua","window","navigator","userAgent","msie","parseInt","substring","rv","edge","Adapters","main","that","prepareTable","$grid","show","$tiles","html","hide","$tab","find","data","fancytree","extensions","checkbox","strings","noData","_","table","indentation","currentId","filter","onSuccess","sortTree","source","tree","renderColumns","event","node","$tdList","tr","key","ellipsis","txt","eq","css","overflow","white-space","idx","desc","substr","attr","position","font-weight","bold","setHtml","keywords","installed","version","license","install","initButtons","isCollapsed","group","saveConfig","JSON","stringify","c","k","children","no","gridnav","autofocusInput","handleCursorKeys","mode","autoApply","collapse","off","on","visit","filterVals","match","subMatch","setExpanded","$processAdapters","isList","addClass","removeClass","_postInit","trigger","prepareTiles","onOnlyUpdatableChanged","onlyUpdatable","onExpertmodeChanged","config","expertMode","filterTiles","anyVisible","currentFilter","each","$this","currentType","hasClass","customFilter","is","title","systemLang","en","name","toLowerCase","getNews","actualVersion","adapter","text","news","v","hasOwnProperty","checkDependencies","dependencies","adapters","b","semver","satisfies","objects","currentHost","common","installedVersion","getInterval","time","todayText","yesterdayText","x1DayAgoText","x2DaysAgoText","x5DaysAgoText","now","Date","interval","getTime","days","Math","floor","getDate","replace","t","tt","showUploadProgress","percent","curRepository","curRepoLastUpdate","curInstalled","curRepoLastHost","list","$installDialog","urls","groupImages","common adapters_group","general_group","hardware_group","lighting_group","energy_group","household_group","iot-systems_group","climate-control_group","infrastructure_group","garden_group","alarm_group","script_group","logic_group","media_group","multimedia_group","communication_group","protocols_group","network_group","messaging_group","visualisation_group","visualization_group","visualization-icons_group","visualization-widgets_group","storage_group","weather_group","schedule_group","vis_group","date-and-time_group","geoposition_group","utility_group","misc-data_group","service_group","third-party_group","inited","onlyInstalled","isTiles","types","occ","prepare","url","order","push","sort","o","user","val","adaptersGithub","modal","username","password","startsWith","endsWith","prop","parts","split","cmdExec","exitCode","init","showError","select","$input","prev","mtabs","nShow","tab","adaptersInstallTab","noSelect","confirmMessage","result","updateExpertMode","tabs","instances","which","undefined","adaptersIsTiles","adaptersIsList","adaptersOnlyInstalled","adaptersOnlyUpdatable","adaptersCurrentFilter","adaptersCurrentType","currentOrder","adaptersCurrentOrder","adaptersIsCollapsed","parse","browser","browserVersion","filterTimer","clearTimeout","target","filterNodes","getAdaptersInfo","host","update","updateRepo","callback","curRunning","socket","emit","repo","systemConfig","activeRepo","_repository","error","_installed","enableColResize","fn","colResizable","liveDrag","sortChildren","c1","c2","inst1","ret","t1","titleLang","t2","repository","installedList","rawVersion","adaptersToUpdate","listInstalled","listNonInstalled","nowObj","localTexts","add instance","upload","Available version:","Active instances","Installed version","readme","delete adapter","install specific version","all","Last update","Installations counter","today","yesterday","1 %d days ago","2 %d days ago","5 %d days ago","controller","versionDate","nogit","meta","getVersionString","updatable","updatableError","color","tmp","getVersionClass","i","rawInstalled","icon","extIcon","_instances","_enabled","upToDate","z","enabled","type","states","image","stat","join","highlight","licenseUrl","iGroup","jj","folder","expanded","igroup","j","akeys","keys","newData","u","ad","tTypes","g","$types","dropdown","constrainWidth","gutter","reload","width","height","round","left","$big","insertAfter","h","top","innerHeight","documentElement","clientHeight","big","classes","updateCounter","restoreScroll","saveScroll","scrollTop","counter","$updates","appendTo","objectsLoaded","subscribeObjects","subscribeStates","hosts","getHosts","destroy","unsubscribeObjects","unsubscribeStates","$dialogAddInstance","min","used","index","m","e","dismissible","complete","showAddInstanceDialog","$dialogLicense","response","body","z-index","toString","showLicenseDialog","isAgree","navigate","dialog","params","aName","waitForRestart","$button","versions","id","menu","nnews","$adaptersMenu","first","objectChange","_isInited","stateChange","state","$adapter","opacity","Config","$dialog","$configFrame","navigateGetParams","materialize","allStored","frames","changed","close","configId","shift","Customs","$table","$outer","hdr","lastHistoryTimeStamp","$tableDateFrom","$tableDateTo","$tableTimeFrom","$tableTimeTo","$chartDateFrom","$chartDateTo","$historyTableInstance","$historyChartInstance","STR_DIFFERENT","updateTable","delay","historyTimeout","loadHistoryTable","getCustomTemplate","ajax","headers","Accept","cache","success","_data","jqXHR","responseText","onButtonSave","stopPropagation","preventDefault","$tabs","ids","currentCustoms","wordDifferent","instance","field","indeterminate","f","custom","_default","found","custom_","inst","setCustoms","loadHistoryChart","initTab","customEnabled","check","supportCustoms","initCustomsTabs","$customTabs","collapsed","commons","role","sett","_attr","img","def","append","toUpperCase","prepend","$headerActive","showCustomsData","translateAll","collapsible","onOpenEnd","el","_collapsed","pos","onCloseEnd","M","updateTextFields","resizeHistory","isSilent","isDownload","request","aggregate","from","ack","q","fileName","dateFrom","Datepicker","getInstance","timeFrom","dateTo","timeTo","empty","setHours","setMinutes","setSeconds","setMilliseconds","end","part__","start","count","toISOString","err","res","filename","element","csv","ts","formatDate","lc","installColResize","IobListHeader","colWidthOffset","prefix","add","partialRefresh","marginLeft","postbackSafe","onResize","syncHeader","createElement","setAttribute","encodeURIComponent","style","display","appendChild","click","removeChild","port","chart","isSecure","native","secure","$chart","linkTemplate","hostname","encodeURI","isFloatComma","pop","showMessage","$iFrame","_ids","isUpdate","warn","$historyTableInstanceBtn","$historyTableDownloadBtn","$historyChartInstanceBtn","insta","setDate","i18n","clear","done","months","monthsShort","weekdaysShort","weekdays","weekdaysAbbrev","n","datepicker","defaultDate","showDaysInNextAndPreviousMonths","minYear","maxYear","setDefaultDate","firstDay","onSelect","date","timepicker","defaultTime","twelveHour","doneText","clearText","cancelText","autoClose","onShow","EditObject","loadObjectFields","selector","object","part","objectType","systemDictionary","saveObjectFields","$htmlId","write","read","max","d","duration","isError","showToast","$dialogNewField","prepared","$dialogSave","iconVal","_prepare","save","editor","setValue","$name","focus","mautocomplete","unit","minLength","keypress","ace","edit","getSession","setMode","$blockScrolling","saveFromTabs","_obj","getValue","load","trim","installFileUpload","isSetDefaultState","users","translateName","groups","_id","acl","owner","ownerGroup","getIconFromObj","$color","parent","colorpicker","component","container","toHex","saveFromRaw","cb","Enums","$gridEnum","$gridList","updateTimers","editMode","tasks","standardEnums","enum.rooms","cn","members","dontDelete","enum.functions","enum.favorites","standardGroups","enum.rooms.living_room","enum.rooms.sleeping_room","enum.rooms.kitchen","enum.rooms.office","enum.rooms.nursery","enum.rooms.wc","enum.rooms.garage","enum.functions.light","enum.functions.blinds","enum.functions.weather","enum.functions.heating","enum.functions.backlight","enum.functions.household","enum.functions.audio","enum.functions.security","selectId","bind","apply","enumRename","oldId","newId","newCommon","task","_enumRename","nondeletable","len","_rev","prepareNewEnum","getName","createOrEditEnum","drawEnum","$page","se","invertColor","getIcon","$filter","eid","$btn","limit","initFilter","drawEnumsTiles","$tableBody","$items","droppable","deleteEnum","removeMember","switchEditMode","drawEnumsTable","setupDroppableTiles","treeTable","root","columns","colors","icons","widths","buttonsWidth","buttons","primary","_delObjects","panelButtons","enumEdit","onChange","onReady","setupDroppableTable","items","regex","RegExp","test","getEnumsChildren","addMember","$treetable","accept","over","ui","timer","out","tolerance","drop","draggable","$collection","parentId","idChanged","nameVal","idVal","originalIdVal","colorVal","isIdEditable","$id","$modal","scrollHeight","isEnabled","$editButton","_initObjectTree","_$items","$trs","enumIsTiles","settings","noDialog","expertModeRegEx","texts","cancel","ID","room","function","value","selectid","wait","ok","with","without","copyToClipboard","refresh","button","sortable","connectWith","refreshPositions","helper","$target","zIndex","revert","scroll","$prev","item","stop","after","disableSelection","setupDraggable","permissions","unshift","action","Events","$header","$pause","isRemote","pause","$counterSpan","columnResizeInit","doFilter","filterEvents","defineProperty","selectedVal","toLocaleLowerCase","enumerateble","widthSet","updateResizersHeight","getValues","isShow","stateOrObj","isMessage","isState","checkAddOption","getElementById","outerHTML","visible","isNaN","fileHandler","file","dataTransfer","files","$dz","size","reader","FileReader","onload","evt","readAsDataURL","$dropZone","ondragover","ondragleave","ondrop","Hosts","showUpdateInfo","path","platform","applyFilter","someVisible","showOneHostRow","alive","getHostIcon","os","showOneHostTile","words","hostsIsTiles","$hostsFilter","filterTimeout","hostsFilter","titleVal","editHost","infoTimeout","hostsToUpdate","availableVersion","showHostsTile","showHostsTable","runningVersion","addHost","addr","hardware","networkInterfaces","eth","num","internal","address","initHostsList","updateTimer","Instances","getLinkVar","_var","link","resolveLink","vars","links","adptr","firtsLink","updateLed","instanceId","$led","webExtension","webInstance","hover","calculateTotalRam","processes","mem","$totalRam","$running_processes","calculateFreeMem","memState","totalmem","$freeMem","strVal","tdp","calculateDiskMem","diskSize","diskFree","diskWarning","$diskFree","formatBytes","calculateRam","memoryLimitMB","toFixed","showOneAdapter","rootElem","form","justContent","localLinks","localLink","replaceInLink","__first","isRun","onlyWWW","noConfig","hostsText","schedule","restartSchedule","loglevel","onQuickEditField","_instanceId","setupCron","alert","showCronDialog","newValue","invisible","reg","filterHost","_isShow","options","oldVal","innerHTML","textAlign","opt","blur","$gridHead","x","nachkomma","$filterClear","instancesFilter","instancesFilterHost","replaceLink","elem","_replaceLink","_replaceLinks","arg","showTip","l","instanceForm","getInstances","last","$mem","$e","onEdit","_link","https","$instancesMenu","mouseleave","open","resize","Intro","formatSeconds","seconds","hours","minutes","$template","formatInfo","Uptime","System uptime","RAM","bytes","GB","MB","Speed","mhz","Disk size","Disk free","execCommand","buildInfoCard","$card","clone","removeAttr","intro","hasWarning","replaceWith","clippy","item_","formatted","buildOneCard","welcomeScreen","web","urlText","noIntro","_first","showTiles","$cards","editActive","aa","aaa","welcomeUrl","welcomeScreenPro","getCards","values","actual","updateConfig","startkey","endkey","doc","rows","updateTimeout","Issue","$dialogIssue","showdown","setFlavor","getJSON","bug","issue","$issueElement","html_url","login","Converter","makeHtml","issueDate","created_at","toLocaleDateString","weekday","year","month","day","hour","minute","second","labels","Logs","filters","severity","message","lines","doSubscribe","line","charCodeAt","subscribeLogs","reverse","ll","name_","$tabLogs","isReload","Objects","subscribes","syncEnum","enumName","newArray","enums","toCheck","_syncEnum","enumIds","enumId","requestStates","pattern","unsubscribeAll","loadObjects","objs","$dialogNewObject","stype","reinit","dialogs","customs","stats","useValues","useHistory","showButtonsForNotExistingObjects","expand","editDialog","States","toggleValues","expandedCallback","childrenCount","hasStates","subscribe","collapsedCallback","unsubscribe","material-icon","delObject","history.0","input","addEventListener","r","contents","json","readAsText","handleFileSelect","map","search","quickEdit","quickEditCallback","oldValue","newAck","typ","customButtonFilter","subscribeAll","Readme","md2html","mainUrl","trimArr","$divReadme","$divChangeLog","$divLicense","$divLogo","adapterName","localStorage","getItem","setItem","fillDiv","removeItem","get","orgUrl","logo","changeLog","splitReadMe","lastIndexOf","$elemId","animate","offset","initMap","system","mapLoaded","updateMap","System","mapTimer","mapInited","longitude","latitude","systemRepos","systemCerts","useOpenLayers","string2cert","str","p","addCert","table2values","newText","certificate","values2table","initRepoGrid","repositories","$system_activeRepo","selectedRepo","isFound","updateRepoListSelect","nonEdit","$repos","languageChanged","activeRepoChanged","defaultNewAcl","old","finishEditingRights","language","diag","certificates","letsEncrypt","toast","label","immediately","ol","point","proj","fromLonLat","OSM","markerSource","Vector","markerStyle","Style","Icon","anchor","anchorXUnits","anchorYUnits","src","oMap","Map","layers","layer","Tile","view","View","center","zoom","marker","Feature","geometry","geom","Point","addFeature","lonLat","toLonLat","coordinate","getView","getZoom","setGeometry","setView","google","maps","lat","lng","Marker","$system_defaultHistory","dataType","initRights","cert","atob","_m","initCertsGrid","errRepo","errCerts","certs","errConfig","Users","synchronizeUser","userId","userGroups","showMessageInDialog","firstUpper","deleteUser","delUserFromGroups","updateUser","passwordRep","oldObj","shortId","getUserGroups","idShort","fillAcl","gg","aclGroups","operation","checkValidId","createOrEdit","isGroupOrId","prevId","isGroup","updateGroup","ops","pp","buildUserList","usersGroups","getUsersGroups","tGroups","gId","gName","inverted","$gridUsers","buildGroupsList","tUsers","uName","uId","$gridGroups","ready","stdout","allTabs","currentTab","currentDialog","currentUser","subscribesStates","subscribesObjects","subscribesLogs","io","connect","ignoreJSupdate","addEventMessage","events","storage","set","saveTabs","_new","cmd","$stdout","$dialogCommand","$adminSideMain","$dialogCommandProgress","activeCmdId","random","cmdCallback","$dialogConfirm","tButtons","$dialogMessage","jQuery","parentSelector","displayLength","dateObj","justTime","getFullYear","getMonth","getHours","getMinutes","getSeconds","getMilliseconds","updateWizard","$wizard","wizard","licenseConfirmed","getUser","auth","_lastTimer","monitor","_timer","_delObject","idOrList","isArray","doIt","rootId","isAll","$tree","leaf","logs","editobject","$adminSideMenu","firstConnect","maxTouchPoints","globalClickHandler","initHtmlTabs","elements","tabsInfo","adminTab","toggleClass","initSideNav","tabsInited","$menu","panelSelector","$panel","$iframe","currentHash","navigateDo","$versionBtn","offs","tid","initTabs","onhashchange","addTabs","instanceObj","singleton","materializeTab","buttonName","isReplace","materilizeTab","div","countLink","loadTimeout","getObjects","slice","history","checkNodeJsVersions","major","ignoreConfigUpdate","getIconHtml","alt","isCommon","isFirstInit","$selHosts","curId","$selBtn","resubscribeStates","resubscribeObjects","resubscribeLogs","patterns","s","isSubscribe","navigateCheckDialog","decodeURI","decodeURIComponent","$adminBody","$actualTab","$oldPanel","$iframe_","not","imgPath","abs","units","hex","tab-intro","tab-adapters","tab-instances","tab-objects","tab-enums","tab-logs","tab-scenes","tab-events","tab-users","tab-javascript","tab-text2command-0","tab-text2command-1","tab-text2command-2","tab-node-red-0","tab-node-red-1","tab-node-red-2","tab-hosts","tab-fullcalendar-0","tab-fullcalendar-1","tab-fullcalendar-2","$backButton","isActive","vendor","admin","noCustomInstall","sideNavUser","sideNavMenu","header","rules","styles","city","country","userLanguage","translateWord","tempUnit","currency","dateFormat","defaultHistory","translateCron","initGridLanguage","progressClose","progressMore","addAll2FilterCombobox","$headerThs","$listTds","tagName","resizeTimer","selectIdOffset","setList","_list","$tds","y","selectOptions","fis","fisId","noAll","option","addOption","eventFilterTimeout","$btnClear","divId","maxRaw","$div","names","$add","getEnums","trRooms","nnames","trFuncs","class","readOnly","tdstyle","vals","btn","idName","$lines","command","tableEvents","$select","lang","dictionary","$selector","transText","arg1","arg2","arg3","methods","buildTable","call","Storage","exIDs","treetable","row","reInit","_elem","_$table","method","nodeExpand","nodeCollapse","buildList","noButtons","parents","current","isNotFolder","$dlg","$buttons","$list","axis","currentFolder","processMoveTasks","moveId","buttonTag","ch","rootEx","_class","engine","ppp","realChildren","mm","ccommon","ccb","vval","instSelect","aattr","ii","vall","buttonsStyle","$treeTable","expandable","clickableNodeNames","expanderTemplate","indenterTemplate","onNodeExpand","onNodeCollapse","stringCollapse","stringExpand","$tbody","zz","$zz","word","branch","isOneVisible","nameFilter","Username:","Password:"," for %s","%s added to %s","%s processes","(without prefix)","A-Z","Access control","Access control list","Acknowledged","Activated. Click to stop.","Active repository:","Adapter configuration","Adapter settings for %s states","Adapters from this Group installed","Add","Add Objecttree from JSON File","Add certificate from file","Add instance...","Add member","Add new child object to selected parent","Add new field","Add new issue","Add new object: ","Add new object: %s","Address:","Admin is not enabled in cloud settings!","Administrator","All","Apr","April","Architecture","Are you sure to delete %s?","Are you sure to delete all children of %s?","Are you sure to delete all children of %s?","Are you sure to delete script %s?","Are you sure you want to delete adapter %s?","Are you sure you want to delete the instance %s?","Are you sure?","Are you sure? Changes are not saved.","Aug","August","Available","CPUs","Calendar","Cancel","Cannot create user: ","Cannot delete user: ","Cannot disable admin!","Cannot read file!","Cannot read version from NPM","Cannot set password: ","Certificates","Change","Changelog","Channel","Chart","Chart for %s","Check all","China","City:","Clear","Clear list","Clear log","Clear on disk permanent","Click do activate events again, or just wait one minute","Click on icon","Close","Collapse all nodes","Color","Configuration not saved.","Connected to %s: ","Connected to host: ","Copy log","Copy to clipboard","Country:","Create","Create new category","Create new category, like %s","Create new enum","Create new enum, like %s","Create new group","Create new user","Created","Croatia","Cron expression","Currency:","Custom","D$ecember","DD.MM.YY","DD.MM.YYYY","DD/MM/YYYY","Date From","Date To","Date format:","Deactivated. Click to start.","Debug outputs:","Dec","December","Default ACL","Default history instance:","Delete attribute","Delete category","Delete enum","Delete member","Delete object","Denmark","Description","Device","Device discovery","Disk free:","Do you want to delete just one object or all children of %s too?","Do you want to upgrade all adapters?","Domains:","Dominica","Done with error: %s","Download log","Drop the files here","Drop the icons here","Ecuador","Edit","Edit category","Edit enum","Edit in dialog","Edit object","Egypt","El Salvador","Email for account:","Error","Event","Everyone","Expand all nodes","Failed to open JSON File","Falkland Islands (Malvinas)","Faroe Islands","Feb","February","File is too big!","File rights","Filter:","Filtered out","Find coordinates...","Float divider:","Free RAM:","Fri","From","From github","Function","Generated ID:","Go to Github...","Group","Groups","Has no permission to %s %s %s","Heard and Mc Donald Islands","Heartbeat: ","Hong Kong","Host","Host %s is offline","Host:","Icon upload","In background","Info","Insert","Install","Install adapter from URL","Install adapter from github","Install from custom URL","Install or update from URL...","Installation counter","Installed","Installed from group","Installed instances","Instructions","Invalid version of %s","Invalid version of %s. Required %s","Is yet in the list","Jan","January","Jul","July","Jun","June","Known bugs for","Last changed","Latitude:","Let's Encrypt settings","Let's encrypt SSL","License","License terms","Listen on all IPs","Loading...","Log","Log file will be deleted. Are you sure?","Log size:","Login timeout(sec):","Logout","Longitude:","Main","Main settings","Manually created","Mar","March","Members","Message","Message buffer overflow. Losing oldest","Model","Mon","NPM","Name","Name:","New","New category","New enum","New group","New object","New objekt","New user","No data","No states selected!","No version of %s","Node.js","Norway","Not exists","Note:","Nov","November","OS","Object \"%s\" does not exists. Update the page.","Object may not be deleted","Object rights","Oct","October","Ok","Only one","Open original","Owner","Owner group","Owner user","Parent","Parse error","Password","Password and confirmation are not equal!","Password cannot be empty!","Password repeat","Path to storage:","Pause output","Platform","Please confirm","Port to check the domain:","Preserve ID","Preview","Processing...","RAM total usage:","RAM usage","Rebuild tree","Recently updated","Refresh log","Removed","Removing of adapter...","Removing of instance...","Rename","Repositories","Rights","Role","Room","Running: ","Sao Tome and Principe","Sat","Save","Save Objecttree as JSON File","Save Objecttree is not possible","Save configuration","Script","Scripts","Select","Select ID","Select adapter:","Select language","Select options","Sent data:","Sep","September","Set","Set CRON","Set CRON schedule for restarts","Settings","Settings for %s","Show instances only for current host","Show values of instance","Show...","Size: %s, Available: %s","Some data are not stored. Discard?","Sort alphabetically","Started...","State","State type","States rights","Statistics","Statistics:","Storage of %s","Storage of %s states","Success!","Suggestion","Sun","System language:","System settings","Table","Taiwan","Temperature units:","This version of node.js \"%s\" on \"%s\" is deprecated. Please install node.js 6, 8 or newer","Thu","Time","Time From","Time To","Time stamp","Title","To","Today","Toggle expert mode","Toggle states view","Too many events","Total count in group","Trigger event","Type","URL or file path:","Unknown file format!","Unsupported image format","Update","Update objects","Update states","Updated","Upgrade all adapters","Upload","Upload admin started","Upload started...","Uruguay","Use Lets Encrypt certificates:","Use this instance for automatic update:","User","User deleted","User does not exist","User yet exists","Value","Values of %s","Vatican City State","Wed","With","Without","You are going to add new instance: ","You can check changelog here","You can drag&drop the devices, channels and states to enums","You can drag&drop users to groups","You can't see events via cloud","Your home","_All","_Toggle expert mode","__different__","a-z","actions","active","adapter with updates","adapters count","add children","add repository","agree","alpha","array","auto","available","beta","boolean","cert_path_note","change view mode","channel","close on ready","collapse all","comma","command execution","common_color","common_def","common_desc","common_icon","common_max","common_min","common_read","common_role","common_states","common_type","common_unit","common_write","config instance","confirm password","connected","copy","copy note","create operation","custom enum","custom group","daemon","daysShortText","delete","delete group","delete instance","delete operation","delete script","delete user","description","device","diag-note","edit enum","edit file","edit group","edit instance","edit script","edit user","edit value","engine type","execute operation","expand all","extended","false","file permissions","history data","http operation","info","installed adapters","instance number","yunkong2 Enums","yunkong2 States","yunkong2 adapter instances","yunkong2 adapter scripts","yunkong2 adapters","yunkong2 certificates","yunkong2 groups","yunkong2 hosts","yunkong2 repositories","yunkong2 users","iot-system_group","less","letsnecrypt_help","letsnecrypt_help_domains","letsnecrypt_help_email","letsnecrypt_help_path","license agreement","license not agree","license_checkbox","list operation","memlimit","mixed","more","multi","new certificate","new group","new script","new user","newObject","no-city","node-red","none","normal","not ack","not agree","npm error","number","object permissions","of","open web page","other permissions","parent name","permissionError","planned","process","raw","read operation","reload instance","rest","restart","restart script","select member by double click","sendto operation","stable","state permissions","string","switch","terminal","this adapter does not allow multiple instances","true","update adapter information","update-part1","updated","updates","user permissions","users permissions","value.from","value.lc","value.q","value.ts","value.val","wetty","write operation","%s object(s) processed","%s was imported","Ignore warning","Filter","Afghanistan","Albania","Algeria","American Samoa","Andorra","Angola","Anguilla","Antarctica","Antigua and Barbuda","Argentina","Armenia","Aruba","Australia","Austria","Authentication was deactivated","Azerbaijan","Background","Background color of the login screen","Background image","Bahamas","Bahrain","Bangladesh","Barbados","Belarus","Belgium","Belize","Benin","Bermuda","Bhutan","Bolivia","Bosnia and Herzegovina","Botswana","Bouvet Island","Brazil","British Indian Ocean Territory","Brunei Darussalam","Bulgaria","Burkina Faso","Burundi","Cambodia","Cameroon","Canada","Cape Verde","Cayman Islands","Central African Republic","Chad","Chile","Christmas Island","Cocos Islands","Colombia","Comoros","Congo","Cook Islands","Costa Rica","Cuba","Cyprus","Czech Republic","Disable authentication","Djibouti","Dominican Republic","East Timor","Enabled:","Equatorial Guinea","Eritrea","Estonia","Ethiopia","Fiji","Finland","France","French Guiana","French Polynesia","French Southern Territories","Gabon","Gambia","Georgia","Germany","Ghana","Gibraltar","Greece","Greenland","Grenada","Guadeloupe","Guam","Guatemala","Guernsey","Guinea","Guinea-Bissau","Guyana","Haiti","Honduras","Hungary","Iceland","India","Indonesia","Iran","Iraq","Ireland","Isle of Man","Israel","Italy","Ivory Coast","Jamaica","Japan","Jersey","Jordan","Kazakhstan","Kenya","Kiribati","Korea","Kosovo","Kuwait","Kyrgyzstan","Lao People's Democratic Republic","Latvia","Lebanon","Lesotho","Liberia","Libyan Arab Jamahiriya","Liechtenstein","Lithuania","Luxembourg","Macau","Macedonia","Madagascar","Mai","Malawi","Malaysia","Maldives","Mali","Malta","Marshall Islands","Martinique","Mauritania","Mauritius","Mayotte","Mexico","Micronesia","Moldova","Monaco","Mongolia","Montenegro","Montserrat","Morocco","Mozambique","Myanmar","Namibia","Nauru","Nepal","Netherlands","Netherlands Antilles","New Caledonia","New Zealand","Nicaragua","Niger","Nigeria","Niue","Norfolk Island","Northern Mariana Islands","Oman","Pakistan","Palau","Palestine","Panama","Papua New Guinea","Paraguay","Peru","Philippines","Pitcairn","Poland","Popular","Popular first","Portugal","Puerto Rico","Qatar","Reunion","Romania","Russian Federation","Rwanda","Saint Kitts and Nevis","Saint Lucia","Saint Vincent and the Grenadines","Samoa","San Marino","Saudi Arabia","Senegal","Serbia","Slovakia","Slovenia","Solomon Islands","Somalia","South Africa","South Georgia South Sandwich Islands","Spain","Sri Lanka","St. Helena","St. Pierre and Miquelon","Sudan","Suriname","Svalbard and Jan Mayen Islands","Swaziland","Sweden","Switzerland","Syrian Arab Republic","Tajikistan","Tanzania","Thailand","Togo","Tokelau","Tonga","Trinidad and Tobago","Tue","Tunisia","Turkey","Turkmenistan","Turks and Caicos Islands","Tuvalu","Uganda","Ukraine","Uncheck All","United Arab Emirates","United Kingdom","United States","United States minor outlying islands","Unsecure_Auth","Uzbekistan","Vanuatu","Venezuela","Vietnam","Virgin Islands (British)","Virgin Islands (U.S.)","Wallis and Futuna Islands","Warning!","Western Sahara","Yemen","Zaire","Zambia","Zimbabwe","silly","Seychelles","Sierra Leone","Singapore","Size: %s, Free: %s","edit enums","place here","popular"],"mappings":"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","file":"app.js","sourcesContent":["/* jshint -W097 */\n/* jshint strict:true */\n/* jslint vars: true */\n/* global io:false */\n/* global jQuery:false */\n/* jslint browser:true */\n/* jshint browser:true */\n/* global _ */\n/* global ace */\n/* global console */\n/* global alert */\n/* global confirm */\n/* global systemLang: true */\n/* global license */\n/* global translateAll */\n/* global initGridLanguage */\n'use strict';\n\n//if (typeof Worker === 'undefined') alert('your browser does not support WebWorkers :-(');\n\nArray.prototype.remove = function () {\n var what;\n var a = arguments;\n var L = a.length;\n var ax;\n while (L && this.length) {\n what = a[--L];\n while ((ax = this.indexOf(what)) !== -1) {\n this.splice(ax, 1);\n }\n }\n return this;\n};\n// for IE\nif (!console.debug) {\n console.debug = console.log;\n}\nif (typeof Number === 'undefined') {\n console.log('define Number');\n Number = function (obj) {\n return parseFloat(obj);\n }\n}\nif (!Object.assign) {\n Object.assign = $.extend;\n}\n\n\nvar $iframeDialog = null; // used in adapter settings window\nvar configNotSaved = null; // used in adapter settings window\nvar showConfig = null; // used in adapter settings window\nvar defaults = {};\nvar customPostInits = {};\nvar FORBIDDEN_CHARS = /[\\]\\[*,;'\"`<>\\\\\\s?]/g;\n\n// used in adapter settings window\nvar adapterRedirect = function (redirect, timeout) {\n if (redirect) {\n setTimeout(function () {\n redirect += document.location.pathname;\n redirect += document.location.hash;\n document.location.href = redirect;\n }, timeout || 5000);\n }\n};\nvar gMain = null; // for google maps\n\nfunction detectIE() {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // Edge (IE 12+) => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n\n // other browser\n return false;\n}\n\n(function ($) {\n$(document).ready(function () {\n var path = location.pathname + 'socket.io';\n if (location.pathname.match(/^\\/admin\\//)) {\n path = '/socket.io';\n }\n\n var allTabs = {};\n\n var main = {\n objects: {},\n states: {},\n currentHost: '',\n currentTab: null,\n currentDialog: null,\n currentUser: '',\n subscribesStates: {},\n subscribesObjects: {},\n subscribesLogs: 0,\n socket: io.connect('/', {path: path}),\n systemConfig: null,\n instances: null,\n objectsLoaded: false,\n waitForRestart: false,\n tabs: null,\n dialogs: {},\n selectId: null,\n config: {},\n ignoreJSupdate: false, // set to true after some global script updated and till system.adapter.javascript.x updated\n addEventMessage: function (id, stateOrObj, isMessage, isState) {\n // cannot directly use tabs.events.add, because to init time not available.\n tabs.events.add(id, stateOrObj, isMessage, isState);\n },\n saveConfig: function (attr, value) {\n if (attr) main.config[attr] = value;\n\n if (typeof storage !== 'undefined') {\n storage.set('adminConfig', JSON.stringify(main.config));\n }\n },\n saveTabs: function () {\n this.socket.emit ('setObject', 'system.config', this.systemConfig, function (err) {\n if (err) {\n this.showError (err);\n }\n })\n },\n\n // Helper methods\n upToDate: function (_new, old) {\n _new = _new.split('.');\n old = old.split('.');\n _new[0] = parseInt(_new[0], 10);\n old[0] = parseInt(old[0], 10);\n if (_new[0] > old[0]) {\n return false;\n } else if (_new[0] === old[0]) {\n _new[1] = parseInt(_new[1], 10);\n old[1] = parseInt(old[1], 10);\n if (_new[1] > old[1]) {\n return false;\n } else if (_new[1] === old[1]) {\n _new[2] = parseInt(_new[2], 10);\n old[2] = parseInt(old[2], 10);\n return (_new[2] <= old[2]);\n } else {\n return true;\n }\n } else {\n return true;\n }\n },\n\n // Methods\n cmdExec: function (host, cmd, callback) {\n host = host || main.currentHost;\n $stdout.val('');\n\n $dialogCommand.modal('open');\n\n stdout = '$ ./yunkong2 ' + cmd;\n $dialogCommand.data('finished', false).find('.btn').html(_('In background'));\n $dialogCommand.find('.command').html(stdout);\n $dialogCommand.find('.progress-dont-close').removeClass('disabled');\n $adminSideMain.find('.button-command').removeClass('error').addClass('in-progress');\n $dialogCommand.data('max', null);\n $dialogCommand.data('error', '');\n $dialogCommandProgress.addClass('indeterminate').removeClass('determinate');\n\n if (cmd.match(/^upload /)) {\n $dialogCommand.find('.progress-text').html(_('Upload started...')).removeClass('error');\n } else if (cmd.match(/^del [-_\\w\\d]+\\.[\\d]+$/)) {\n $dialogCommand.find('.progress-text').html(_('Removing of instance...')).removeClass('error');\n } else if (cmd.match(/^del /)) {\n $dialogCommand.find('.progress-text').html(_('Removing of adapter...')).removeClass('error');\n } else if (cmd.match(/^url /)) {\n $dialogCommand.find('.progress-text').html(_('Install or update from URL...')).removeClass('error');\n } else if (cmd.match(/^add /)) {\n $dialogCommand.find('.progress-text').html(_('Add instance...')).removeClass('error');\n } else{\n $dialogCommand.find('.progress-text').html(_('Started...')).removeClass('error');\n }\n\n $stdout.val(stdout);\n // generate the unique id to coordinate the outputs\n activeCmdId = Math.floor(Math.random() * 0xFFFFFFE) + 1;\n cmdCallback = callback;\n main.socket.emit('cmdExec', host, activeCmdId, cmd, function (err) {\n if (err) {\n stdout += '\\n' + _(err);\n $stdout.val(stdout);\n cmdCallback = null;\n callback(err);\n } else {\n if (callback) callback();\n }\n });\n },\n confirmMessage: function (message, title, icon, buttons, callback) {\n // if standard buttons\n if (typeof buttons === 'function') {\n callback = buttons;\n $dialogConfirm.find('.modal-footer').html(\n '' + _('Ok') + '' +\n '' + _('Cancel') + '');\n $dialogConfirm.find('.modal-footer .modal-action').on('click', function () {\n var cb = $dialogConfirm.data('callback');\n cb && cb($(this).data('result'));\n });\n } else if (typeof buttons === 'object') {\n var tButtons = '';\n for (var b = buttons.length - 1; b >= 0; b--) {\n tButtons += '' + buttons[b] + '';\n }\n $dialogConfirm.find('.modal-footer').html(tButtons);\n $dialogConfirm.find('.modal-footer .modal-action').on('click', function () {\n var cb = $dialogConfirm.data('callback');\n cb && cb($(this).data('id'));\n });\n }\n\n $dialogConfirm.find('.dialog-title').text(title || _('Please confirm'));\n if (icon) {\n $dialogConfirm.find('.dialog-icon')\n .show()\n .html(icon);\n } else {\n $dialogConfirm.find('.dialog-icon').hide();\n }\n $dialogConfirm.find('.dialog-text').html(message);\n $dialogConfirm.data('callback', callback);\n $dialogConfirm.modal('open');\n },\n showMessage: function (message, title, icon) {\n $dialogMessage.find('.dialog-title').text(title || _('Message'));\n if (icon) {\n $dialogMessage.find('.dialog-icon')\n .show()\n .html(icon);\n } else {\n $dialogMessage.find('.dialog-icon').hide();\n }\n $dialogMessage.find('.dialog-text').html(message);\n $dialogMessage.modal('open');\n },\n showError: function (error) {\n main.showMessage(_(error), _('Error'), 'error_outline');\n },\n showToast: function (parent, message, icon, duration, isError, classes) {\n if (parent && parent instanceof jQuery) {\n parent = parent[0];\n }\n classes = classes || [];\n\n if (typeof classes === 'string') {\n classes = [classes];\n }\n isError && classes.push('dropZone-error');\n\n M.toast({\n parentSelector: parent || $('body')[0],\n html: message + (icon ? '' + icon + '' : ''),\n displayLength: duration || 3000,\n classes: classes\n });\n },\n formatDate: function (dateObj, justTime) {\n //return dateObj.getFullYear() + '-' +\n // (\"0\" + (dateObj.getMonth() + 1).toString(10)).slice(-2) + '-' +\n // (\"0\" + (dateObj.getDate()).toString(10)).slice(-2) + ' ' +\n // (\"0\" + (dateObj.getHours()).toString(10)).slice(-2) + ':' +\n // (\"0\" + (dateObj.getMinutes()).toString(10)).slice(-2) + ':' +\n // (\"0\" + (dateObj.getSeconds()).toString(10)).slice(-2);\n // Following implementation is 5 times faster\n if (!dateObj) return '';\n var text = typeof dateObj;\n if (text === 'string') {\n if (justTime) {\n return dateObj.substring(8);\n } else {\n return dateObj;\n }\n }\n // if less 2000.01.01 00:00:00\n if (text !== 'object') dateObj = dateObj < 946681200000 ? new Date(dateObj * 1000) : new Date(dateObj);\n\n var v;\n if (!justTime) {\n text = dateObj.getFullYear();\n v = dateObj.getMonth() + 1;\n if (v < 10) {\n text += '-0' + v;\n } else {\n text += '-' + v;\n }\n\n v = dateObj.getDate();\n if (v < 10) {\n text += '-0' + v;\n } else {\n text += '-' + v;\n }\n } else {\n v = dateObj.getDate();\n if (v < 10) {\n text = '0' + v;\n } else {\n text = v;\n }\n }\n\n v = dateObj.getHours();\n if (v < 10) {\n text += ' 0' + v;\n } else {\n text += ' ' + v;\n }\n v = dateObj.getMinutes();\n if (v < 10) {\n text += ':0' + v;\n } else {\n text += ':' + v;\n }\n\n v = dateObj.getSeconds();\n if (v < 10) {\n text += ':0' + v;\n } else {\n text += ':' + v;\n }\n\n v = dateObj.getMilliseconds();\n if (v < 10) {\n text += '.00' + v;\n } else if (v < 100) {\n text += '.0' + v;\n } else {\n text += '.' + v;\n }\n\n return text;\n },\n /*initSelectId: function () {\n if (main.selectId) return main.selectId;\n main.selectId = $('#dialog-select-member').selectId('init', {\n objects: main.objects,\n states: main.states,\n filter: {type: 'state'},\n name: 'admin-select-member',\n texts: {\n select: _('Select'),\n cancel: _('Cancel'),\n all: _('All'),\n id: _('ID'),\n name: _('Name'),\n role: _('Role'),\n room: _('Room'),\n value: _('Value'),\n selectid: _('Select ID'),\n from: _('From'),\n lc: _('Last changed'),\n ts: _('Time stamp'),\n wait: _('Processing...'),\n ack: _('Acknowledged')\n },\n columns: ['image', 'name', 'role', 'room', 'value']\n });\n return main.selectId;\n },*/\n updateWizard: function () {\n var $wizard = $('#button-wizard');\n if (main.objects['system.adapter.discovery.0']) {\n if (!$wizard.data('inited')) {\n $wizard.data('inited', true);\n $wizard/*.button({\n icons: {primary: ' ui-icon-search'},\n text: false\n })*/.on('click', function () {\n // open configuration dialog\n main.navigate({\n tab: 'instances',\n dialog: 'config',\n params: 'system.adapter.discovery.0'\n });\n }).attr('title', _('Device discovery'));\n }\n $wizard.show();\n\n // Show wizard dialog\n if (!main.systemConfig.common.wizard && main.systemConfig.common.licenseConfirmed) {\n $wizard.trigger('click');\n }\n } else {\n $wizard.hide();\n }\n },\n getUser: function () {\n if (!main.currentUser) {\n main.socket.emit('authEnabled', function (auth, user) {\n main.currentUser = 'system.user.' + user;\n if (!auth) {\n $('#button-logout').remove();\n } else {\n main._lastTimer = (new Date()).getTime();\n monitor();\n }\n });\n } else if (main.objects[main.currentUser]) {\n var obj = main.objects[main.currentUser];\n var name = '';\n if (!obj || !obj.common || !obj.common.name) {\n name = main.currentUser.replace(/^system\\.user\\./);\n name = name[0].toUpperCase() + name.substring(1).toLowerCase();\n } else {\n name = translateName(obj.common.name);\n }\n if (obj && obj.common && obj.common.icon) {\n var objs = {};\n objs[main.currentUser] = obj;\n $('#current-user-icon').html(main.getIcon(main.currentUser, null, objs));\n } else {\n $('#current-user-icon').html('account_circle');\n }\n $('#current-user').html(name);\n var groups = [];\n for (var i = 0; i < tabs.users.groups.length; i++) {\n var group = main.objects[tabs.users.groups[i]];\n if (group && group.common && group.common.members && group.common.members.indexOf(main.currentUser) !== -1) {\n groups.push(_(translateName(group.common.name)));\n }\n }\n $('#current-group').html(groups.join(', '));\n }\n },\n\n // Delete objects\n _delObject: function (idOrList, callback) {\n var id;\n if (!Array.isArray(idOrList)) {\n if (typeof idOrList !== 'string') return callback && callback('invalid idOrList parameter');\n idOrList = [idOrList];\n }\n\n function doIt() {\n if (idOrList.length === 0) {\n return callback && setTimeout(callback, 0, null, id);\n }\n id = idOrList.pop();\n if (main.objects[id] && main.objects[id].common && (main.objects[id].common['object-non-deletable'] || main.objects[id].common.dontDelete)) {\n main.showMessage (_ ('Cannot delete \"%s\" because not allowed', id), '', 'notifications');\n setTimeout(doIt, 0);\n } else {\n var obj = main.objects[id];\n main.socket.emit('delObject', id, function (err) {\n if (err && err !== 'Not exists') {\n main.showError (err);\n return callback(err);\n }\n if (obj && obj.type === 'state') {\n main.socket.emit ('delState', id, function (err) {\n if (err && err !== 'Not exists') {\n main.showError (err);\n return callback(err);\n }\n setTimeout(doIt, 0);\n });\n } else {\n setTimeout(doIt, 0);\n }\n });\n }\n }\n doIt();\n },\n /*_delObject_old: function (idOrList, callback) {*\n var id;\n if (typeof idOrList === 'object') {\n if (!idOrList || !idOrList.length) {\n if (callback) callback(null);\n return;\n }\n id = idOrList.pop();\n } else {\n id = idOrList;\n }\n\n if (main.objects[id] && main.objects[id].common && (main.objects[id].common['object-non-deletable'] || main.objects[id].common.dontDelete)) {\n main.showMessage(_('Cannot delete \"%s\" because not allowed', id), '', 'notice');\n if (typeof idOrList === 'object') {\n setTimeout(function () {\n this._delObject(idOrList, callback);\n }.bind(this), 0);\n } else {\n if (callback) {\n setTimeout(function () {\n callback(null, idOrList);\n }, 0);\n }\n }\n } else {\n var obj = main.objects[id];\n main.socket.emit('delObject', id, function (err) {\n if (err && err !=='Not exists') {\n main.showError(err);\n return;\n }\n if (obj && obj.type === 'state') {\n main.socket.emit('delState', id, function (err) {\n if (err && err !=='Not exists') {\n main.showError(err);\n return;\n }\n if (typeof idOrList === 'object') {\n setTimeout(function () {\n this._delObject(idOrList, callback);\n }.bind(this), 0);\n } else {\n if (callback) {\n setTimeout(function () {\n callback(null, idOrList);\n }, 0);\n }\n }\n }.bind(this));\n } else {\n if (typeof idOrList === 'object') {\n setTimeout(function () {\n this._delObject(idOrList, callback);\n }.bind(this), 0);\n } else {\n if (callback) {\n setTimeout(function () {\n callback(null, idOrList);\n }, 0);\n }\n }\n }\n }.bind(this));\n }\n },*/\n _delObjects: function (rootId, isAll, callback) {\n if (!isAll) {\n this._delObject(rootId, callback);\n } else {\n var list = [];\n for (var id in main.objects) {\n if (main.objects.hasOwnProperty(id) && id.substring(0, rootId.length + 1) === rootId + '.') {\n list.push(id);\n }\n }\n list.push(rootId);\n list.sort();\n\n this._delObject(list, function () {\n if (callback) callback();\n });\n }\n },\n delObject: function ($tree, id, callback) {\n var leaf = $tree ? $tree.selectId('getTreeInfo', id) : null;\n if (main.objects[id]) {\n if (leaf && leaf.children) {\n // ask if only object must be deleted or just this one\n main.confirmMessage(_('Do you want to delete just one object or all children of %s too?', id), null, 'help_outline', [_('_All'), _('Only one'), _('Cancel')], function (result) {\n // If all\n if (result === 0) {\n main._delObjects(id, true, callback);\n } else\n // if only one object\n if (result === 1) {\n main._delObjects(id, false, callback);\n } // else do nothing\n });\n } else {\n main.confirmMessage(_('Are you sure to delete %s?', id), null, 'help_outline', function (result) {\n // If all\n if (result) main._delObjects(id, true, callback);\n });\n }\n } else if (leaf && leaf.children) {\n main.confirmMessage(_('Are you sure to delete all children of %s?', id), null, 'help_outline', function (result) {\n // If all\n if (result) main._delObjects(id, true, callback);\n });\n } else {\n main.showMessage(_('Object \"%s\" does not exists. Update the page.', id), _('Error'), 'help_outline', function (result) {\n // If all\n if (result) main._delObjects(id, true, callback);\n });\n }\n }\n };\n\n gMain = main; // for google maps\n\n var tabs = {\n hosts: new Hosts(main), // must be first to read the list of hosts\n objects: new Objects(main),\n adapters: new Adapters(main),\n instances: new Instances(main),\n users: new Users(main),\n //groups: new Groups(main),\n enums: new Enums(main),\n events: new Events(main),\n logs: new Logs(main),\n states: null,\n intro: new Intro(main)\n };\n\n if (typeof States !== 'undefined') {\n tabs.states = new States(main);\n }\n\n main.instances = tabs.instances.list;\n main.tabs = tabs;\n main.dialogs = {\n system: new System(main),\n customs: new Customs(main),\n config: new Config(main),\n editobject: new EditObject(main),\n issue: new Issue(main),\n readme: new Readme(main)\n };\n\n var stdout;\n var cmdCallback = null;\n var activeCmdId = null;\n var $stdout = $('#stdout');\n\n var $dialogCommand = $('#dialog-command');\n var $dialogLicense = $('#dialog-license-main');\n var $dialogMessage = $('#dialog-message');\n var $dialogConfirm = $('#dialog-confirm');\n var $dialogCommandProgress = $dialogCommand.find('.progress div');\n\n var $adminSideMenu = $('#admin_sidemenu_menu');\n var $adminSideMain = $('#admin_sidemenu_main');\n\n var firstConnect = true;\n\n // detect touch devices\n if (!('ontouchstart' in window || navigator.maxTouchPoints)) {\n $('body').addClass('desktop-screen');\n }\n if (navigator.userAgent.indexOf('Safari') !== -1 &&\n navigator.userAgent.indexOf('Chrome') === -1 &&\n navigator.userAgent.indexOf('Android') === -1) {\n $('body').addClass('safari');\n main.browser = 'safari';\n main.noSelect = true;\n } else if (detectIE()) {\n $('body').addClass('ie');\n // workaround\n main.browser = 'ie';\n main.browserVersion = detectIE();\n main.noSelect = true;\n $('#host-adapters-btn').css('margin-top', '10px');\n }\n\n // Read all positions, selected widgets for every view,\n // Selected view, selected menu page,\n // Selected widget or view page\n // Selected filter\n if (typeof storage !== 'undefined') {\n try {\n main.config = storage.get('adminConfig');\n if (main.config) {\n main.config = JSON.parse(main.config);\n } else {\n main.config = {};\n }\n } catch (e) {\n console.log('Cannot load edit config');\n main.config = {};\n }\n }\n\n function globalClickHandler(event){\n $('#admin_sidemenu_dialog').html('');\n $('html').off('click', globalClickHandler);\n }\n\n function initHtmlButtons() {\n main.socket.emit('getVersion', function (err, version) {\n\t\t\tvar $versionBtn = $('.button-version');\n\t if (!$versionBtn.hasClass('vendor')) {\n\t $versionBtn.text('yunkong2.admin ' + version);\n\t }\n });\n\n $('.choose-tabs-config-button').off('click').on('click', function(event) {\n var $dialog = $('#admin_sidemenu_dialog');\n var html = $dialog.html();\n if (html) {\n $dialog.html('');\n // disable global handler\n $('html').off('click', globalClickHandler);\n return;\n }\n setTimeout(function () {\n // enable global handler\n $('html').on('click', globalClickHandler);\n }, 100);\n var $e = $(event.target);\n var offs = $e.offset();\n offs.top += $e.height() - 2;\n\n var text =\n '' + // style=\"overflow: visible; z-index: 999; \">'\n '
    ' +\n '
      ';\n\n var $lis = $adminSideMenu;\n for (var tid in allTabs) {\n var name = allTabs[tid];\n var found = $adminSideMenu.find('.admin-sidemenu-items[data-tab=\"' + tid + '\"]').length;\n // TABS\n /*$adminSideMenu.each(function (i, e) {\n if (tid === $(e).attr('aria-controls')) {\n found = $(e);\n return false;\n }\n });*/\n var id = 'chk-' + tid;\n text +=\n '
    • ' +\n '' + _(name) + '';\n }\n text += '' +\n '
    ' +\n '
    ' +\n '
    ';\n $dialog.append(text);\n\n $dialog.find('.chk-tab').off('change').on('change', function (event) {\n var id = $(this).attr('id').substr(4);\n if ($(this).prop('checked')) {\n main.systemConfig.common.tabs.push(id);\n } else {\n var pos = main.systemConfig.common.tabs.indexOf(id);\n if (id !== -1) {\n main.systemConfig.common.tabs.splice(pos, 1);\n }\n }\n main.saveTabs();\n initTabs();\n });\n // workaround for materialize checkbox problem\n $dialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n });\n\n main.updateWizard();\n\n $('#button-logout').on('click', function () {\n window.location.href = '/logout/';\n });\n\n window.onhashchange = function () {\n main.navigateDo();\n };\n main.navigateDo();\n }\n\n function initHtmlTabs() {\n // jQuery UI initializations\n initSideNav();\n\n if (!main.tabsInited) {\n main.tabsInited = true;\n\n initHtmlButtons();\n\n $('#events_threshold').on('click', function () {\n main.socket.emit('eventsThreshold', false);\n });\n } else {\n var $menu = $adminSideMenu;\n var panelSelector = $menu.data('problem-link');\n if (panelSelector) {\n var $panel = $(panelSelector);\n // Init source for iframe\n if ($panel.length) {\n var link = $panel.data('src');\n if (link && link.indexOf('%') === -1) {\n var $iframe = $panel.find('iframe');\n if ($iframe.length && !$iframe.attr('src')) {\n $iframe.attr('src', link);\n $menu.data('problem-link', null);\n }\n }\n }\n }\n // show current tab\n main.currentHash = null;\n main.navigateDo();\n }\n }\n\n function initTabs() {\n // extract all additional instances\n var text = '';\n var list = [];\n var addTabs = [];\n\n allTabs = {};\n for (var i = 0; i < main.instances.length; i++) {\n var instance = main.instances[i];\n var instanceObj = main.objects[instance];\n if (!instanceObj.common || !instanceObj.common.adminTab) continue;\n if (instanceObj.common.adminTab.singleton) {\n var isFound = false;\n var inst1 = instance.replace(/\\.(\\d+)$/, '.');\n for (var j = 0; j < addTabs.length; j++) {\n var inst2 = addTabs[j].replace(/\\.(\\d+)$/, '.');\n if (inst1 === inst2) {\n isFound = true;\n break;\n }\n }\n if (!isFound) addTabs.push(instance);\n } else {\n addTabs.push(instance);\n }\n }\n\n // Build the standard tabs together\n $('.admin-tab').each(function () {\n var $this = $(this);\n var id = $this.attr('id');\n list.push(id);\n allTabs[id] = $this.data('name');\n });\n\n // Look for adapter tabs\n for (var a = 0; a < addTabs.length; a++) {\n var tab = main.objects[addTabs[a]];\n var name = 'tab-' + tab.common.name;\n\n var link = tab.common.adminTab.link || '/adapter/' + tab.common.name + '/tab.html';\n if (tab.common.materializeTab) {\n link = tab.common.adminTab.link || '/adapter/' + tab.common.name + '/tab_m.html';\n }\n\n var parts = addTabs[a].split('.');\n var buttonName;\n\n if (tab.common.adminTab.name) {\n if (typeof tab.common.adminTab.name === 'object') {\n if (tab.common.adminTab.name[systemLang]) {\n buttonName = tab.common.adminTab.name[systemLang];\n } else if (tab.common.adminTab.name.en) {\n buttonName = _(tab.common.adminTab.name.en);\n } else {\n buttonName = _(tab.common.name);\n }\n } else {\n buttonName = _(tab.common.adminTab.name);\n }\n } else {\n buttonName = _(tab.common.name);\n }\n\n // if (main.objects[addTabs[a]].common.adminTab.name) {\n // if (typeof main.objects[addTabs[a]].common.adminTab.name === 'object') {\n // if (main.objects[addTabs[a]].common.adminTab.name[systemLang]) {\n // buttonName = main.objects[addTabs[a]].common.adminTab.name[systemLang];\n // } else if (main.objects[addTabs[a]].common.adminTab.name.en) {\n // buttonName = _(main.objects[addTabs[a]].common.adminTab.name.en);\n // } else {\n // buttonName = _(main.objects[addTabs[a]].common.name);\n // }\n // } else {\n // buttonName = _(main.objects[addTabs[a]].common.adminTab.name);\n // }\n // } else {\n // buttonName = _(main.objects[addTabs[a]].common.name);\n // }\n\n if (!tab.common.adminTab.singleton) {\n if (link.indexOf('?') !== -1) {\n link += '&instance=' + parts[3];\n } else {\n link += '?instance=' + parts[3];\n }\n buttonName += '.' + parts[3];\n name += '-' + parts[3];\n } else {\n parts[3] = 0;\n }\n\n list.push(name);\n allTabs[name] = buttonName;\n\n if (!main.systemConfig.common.tabs || main.systemConfig.common.tabs.indexOf(name) !==-1) {\n var isReplace = false;\n if (!link) {\n link = '/adapter/' + parts[2] + '/tab.html';\n if (tab.common.materilizeTab) {\n link = '/adapter/' + parts[2] + '/tab_m.html';\n }\n } else {\n // convert \"http://%ip%:%port%\" to \"http://localhost:1880\"\n /*main.tabs.instances._replaceLinks(link, parts[2], parts[3], name, function (link, adapter, instance, arg) {\n $('#' + arg).data('src', link);\n });*/\n isReplace = link.indexOf('%') !== -1;\n }\n\n text += '
  • ' + buttonName + '
  • \\n';\n\n // noinspection JSJQueryEfficiency\n if (!$('#' + name).length) {\n var div = '
    ' +\n '
    ';\n $(div).hide().appendTo($('body'));\n\n // TODO: temporary, until other tab will be adapted\n $('#' + name).find ('.iframe-in-tab').on('load', function () {\n var elem = $ (this).contents ().find('body>header');\n if (!elem || !elem.length) elem = $(this).contents ().find('head');\n if (elem && elem.length) elem.append('');\n });\n } else {\n $('#' + name).hide().appendTo($('body'));\n }\n } else {\n $('#' + name).hide().appendTo($('body'));\n }\n }\n $('.tab-custom').each(function () {\n if (list.indexOf($(this).attr('id')) === -1) {\n $('#' + $(this).attr('id')).remove();\n }\n });\n\n if (!main.systemConfig.common.tabs) main.systemConfig.common.tabs = list;\n\n if ($('.link-replace').length) {\n var countLink = 0;\n\n // If some objects cannot be read => go by timeout\n var loadTimeout = setTimeout(function() {\n loadTimeout = null;\n initHtmlTabs(/*showTabs*/);\n }, 100);\n\n $('.link-replace').each(function () {\n // convert \"http://%ip%:%port%\" to \"http://localhost:1880\"\n countLink++;\n main.tabs.instances._replaceLinks($(this).data('src'), $(this).data('adapter'), $(this).data('instance'), $(this).attr('id'), function (link, adapter, instance, arg) {\n $('#' + arg).data('src', link).removeClass('link-replace');\n if (!--countLink) {\n if (loadTimeout) {\n clearTimeout(loadTimeout);\n loadTimeout = null;\n initHtmlTabs(/*showTabs*/);\n }\n }\n });\n });\n } else {\n initHtmlTabs();\n }\n }\n\n main.initHostsList = function (isFirstInit) {\n // fill the host list (select) on adapter tab\n var $selHosts = $('#host-adapters');\n if (isFirstInit && $selHosts.data('inited')) {\n return\n }\n\n $selHosts.data('inited', true);\n\n main.currentHost = main.currentHost || main.config.currentHost || '';\n\n var lines = [];\n var color;\n var curId;\n for (var i = 0; i < main.tabs.hosts.list.length; i++) {\n lines.push('
  • ' + main.getHostIcon(main.objects[main.tabs.hosts.list[i].id], 'imgHost left') + main.tabs.hosts.list[i].name + '
  • ');\n if (!main.currentHost) {\n main.currentHost = main.tabs.hosts.list[i].name;\n }\n if (main.currentHost === main.tabs.hosts.list[i].name) {\n curId = main.tabs.hosts.list[i].id;\n }\n }\n $selHosts.html(lines);\n\n var $selBtn = $('#host-adapters-btn').show();\n $selBtn\n .text(_('Host:') + ' ' + main.currentHost)\n .dropdown();\n\n if (main.objects[curId] && main.objects[curId].common) {\n color = main.objects[curId].common.color;\n }\n\n $selBtn.append($(main.getHostIcon(main.objects[curId], 'imgHost left')));\n if (color) {\n // set color of button\n }\n\n if (main.tabs.hosts.list.length < 2) {\n $selBtn.addClass('disabled');\n } else {\n $selBtn.removeClass('disabled');\n }\n\n // host selector\n $selHosts.find('a').on('click', function () {\n var val = $(this).data('value');\n var id = 'system.host.' + val + '.alive';\n if (!main.states[id] || !main.states[id].val || main.states[id].val === 'null') {\n main.showMessage(_('Host %s is offline', $(this).val()));\n return;\n }\n\n main.currentHost = val;\n\n $('#host-adapters-btn')\n .text(_('Host:') + ' ' + main.currentHost)\n .append($(this).find('.imgHost').clone());\n // destroy current view and load anew\n console.log(main.currentTab);\n if (tabsInfo['tab-' + main.currentTab] && tabsInfo['tab-' + main.currentTab].host) {\n // destroy actual tab\n if (main.tabs[main.currentTab] && typeof main.tabs[main.currentTab].destroy === 'function') {\n main.tabs[main.currentTab].destroy();\n }\n\n // init new tab\n if (main.tabs[main.currentTab] && typeof main.tabs[main.currentTab].init === 'function') {\n main.tabs[main.currentTab].init();\n }\n }\n\n main.saveConfig('currentHost', main.currentHost);\n });\n };\n\n // Use the function for this because it must be done after the language was read\n function initAllDialogs() {\n // todo delete it because jqgrid does not used any more\n if (typeof initGridLanguage === 'function') {\n initGridLanguage(main.systemConfig.common.language);\n }\n\n $dialogCommand.modal({\n dismissible: false\n });\n $dialogMessage.modal();\n $dialogConfirm.modal({\n dismissible: false\n });\n\n $dialogCommand.find('.progress-show-more').off('change').on('change', function () {\n var val = $(this).prop('checked');\n main.saveConfig('progressMore', val);\n if (val) {\n $dialogCommand.find('.textarea').show();\n } else {\n $dialogCommand.find('.textarea').hide();\n }\n });\n if (main.config.progressClose === undefined) {\n main.config.progressClose = true;\n }\n $dialogCommand.find('.progress-dont-close input').on('change', function () {\n main.saveConfig('progressClose', $(this).prop('checked'));\n });\n // workaround for materialize checkbox problem\n $dialogCommand.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n // ignore switch\n if ($input.parent().parent().hasClass('switch')) return;\n\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n $dialogCommand.find('.progress-dont-close input').prop('checked', main.config.progressClose);\n $dialogCommand.find('.progress-show-more').prop('checked', !!main.config.progressMore).trigger('change');\n $dialogCommand.find('.btn').on('click', function () {\n if ($dialogCommand.data('finished')) {\n $adminSideMain.find('.button-command').hide();\n } else {\n $adminSideMain.find('.button-command').show();\n }\n });\n\n $adminSideMain.find('.button-command').on('click', function () {\n $dialogCommand.modal('open');\n });\n }\n\n function checkNodeJsVersions(hosts, index) {\n index = index || 0;\n if (hosts && index < hosts.length) {\n main.socket.emit('sendToHost', hosts[index].name, 'getHostInfo', null, function (result) {\n if (result && result['Node.js']) {\n var major = parseInt(result['Node.js'].split('.').shift().replace('v', ''), 10);\n if (major < 6 || major === 7 || major === 9 ) { // we allow 6, 8 and 10+\n main.showMessage(_('This version of node.js \"%s\" on \"%s\" is deprecated. Please install node.js 6, 8 or newer', result['Node.js'], hosts[index].name), _('Suggestion'), 'error_outline');\n }\n }\n setTimeout(function () {\n checkNodeJsVersions(hosts, index + 1);\n }, 100);\n });\n }\n }\n\n // ----------------------------- Objects show and Edit ------------------------------------------------\n function getObjects(callback) {\n main.socket.emit('getAllObjects', function (err, res) {\n if (err) {\n // following errors are possible\n // permissionError\n // Admin is not enabled in cloud settings!\n window.alert(_(err));\n return;\n }\n\n setTimeout(function () {\n var obj;\n main.objects = res;\n for (var id in main.objects) {\n if (!main.objects.hasOwnProperty(id) || id.slice(0, 7) === '_design') continue;\n\n obj = main.objects[id];\n\n if (obj.type === 'instance') main.instances.push(id);\n if (obj.type === 'enum') tabs.enums.list.push(id);\n if (obj.type === 'user') tabs.users.list.push(id);\n if (obj.type === 'group') tabs.users.groups.push(id);\n if (obj.type === 'adapter') tabs.adapters.list.push(id);\n if (obj.type === 'host') tabs.hosts.addHost(obj);\n\n // convert obj.history into obj.custom\n if (obj.common && obj.common.history) {\n obj.common.custom = JSON.parse(JSON.stringify(obj.common.history));\n delete obj.common.history;\n }\n }\n main.objectsLoaded = true;\n main.initHostsList(true);\n\n initTabs();\n // init dialogs\n for (var dialog in main.dialogs) {\n if (main.dialogs.hasOwnProperty(dialog) && typeof main.dialogs[dialog].prepare === 'function') {\n main.dialogs[dialog].prepare();\n }\n }\n\n // Detect node.js version\n checkNodeJsVersions(tabs.hosts.list);\n\n main.getUser();\n\n if (typeof callback === 'function') callback();\n }, 0);\n });\n }\n // ----------------------------- States show and Edit ------------------------------------------------\n\n function getStates(callback) {\n if (tabs.states) tabs.states.clear();\n main.socket.emit('getStates', function (err, res) {\n main.states = res;\n if (typeof callback === 'function') {\n setTimeout(function () {\n callback();\n }, 0);\n }\n });\n }\n\n function stateChange(id, state) {\n id = id ? id.replace(/\\s/g, '_') : '';\n\n if (!id || !id.match(/\\.messagebox$/)) {\n if (tabs.states) {\n tabs.states.stateChange(id, state);\n }\n tabs.objects.stateChange(id, state);\n tabs.hosts.stateChange(id, state);\n\n // Update alive and connected of main.instances\n tabs.instances.stateChange(id, state);\n tabs.adapters.stateChange(id, state);\n main.dialogs.customs.stateChange(id, state);\n\n if (main.selectId) {\n main.selectId.selectId('state', id, state);\n }\n main.addEventMessage(id, state, false, true);\n } else {\n main.addEventMessage(id, state, true, true);\n }\n }\n\n function objectChange(id, obj) {\n //var changed = false;\n //var oldObj = null;\n var action = 'update';\n\n // update main.objects cache\n if (obj) {\n if (obj._rev && main.objects[id]) main.objects[id]._rev = obj._rev;\n if (!main.objects[id]) {\n action = 'add';\n }\n if (action === 'add' || JSON.stringify(main.objects[id]) !== JSON.stringify(obj)) {\n main.objects[id] = obj;\n }\n } else if (main.objects[id]) {\n action = 'delete';\n delete main.objects[id];\n }\n\n // update to event table\n main.addEventMessage(id, obj, false, false);\n\n tabs.objects.objectChange(id, obj, action);\n\n main.selectId && main.selectId.selectId('object', id, obj, action);\n\n tabs.enums.objectChange(id, obj, action);\n tabs.intro.objectChange(id, obj, action);\n\n // If system config updated\n if (id === 'system.config') {\n // Check language\n if (main.systemConfig.common.language !== obj.common.language) {\n window.location.reload();\n }\n\n main.systemConfig = obj;\n initTabs();\n }\n\n if (id === 'system.adapter.discovery.0') {\n main.updateWizard();\n }\n\n if (id.match(/^system\\.host\\.[-\\w]+$/)) {\n main.initHostsList();\n }\n\n tabs.instances.objectChange(id, obj, action);\n\n if (id.match(/^script\\.js\\.global\\..*/)) {\n main.ignoreJSupdate = true;\n }\n\n if (obj && id.match(/^system\\.adapter\\.[\\w-]+\\.[0-9]+$/)) {\n if (obj.common &&\n obj.common.adminTab &&\n !obj.common.adminTab.ignoreConfigUpdate\n ) {\n // one exception for javascript. To able work with global scripts normally\n if (!id.match(/^system\\.adapter\\.javascript\\.[0-9]+$/) || !main.ignoreJSupdate) {\n initTabs();\n } else {\n main.ignoreJSupdate = false;\n }\n }\n\n if (obj && obj.type === 'instance' && obj.common.supportCustoms) {\n // Update all states if customs enabled or disabled\n tabs.objects.reinit();\n }\n }\n\n tabs.hosts.objectChange(id, obj, action);\n\n // Update users\n tabs.users.objectChange(id, obj, action);\n\n // update user in side menu\n if (id === main.currentUser) {\n main.getUser();\n }\n }\n\n function monitor() {\n if (main._timer) return;\n var ts = (new Date()).getTime();\n if (ts - main._lastTimer > 30000) {\n // It seems, that PC was in a sleep => Reload page to request authentication anew\n location.reload();\n } else {\n main._lastTimer = ts;\n }\n main._timer = setTimeout(function () {\n main._timer = null;\n monitor();\n }, 10000);\n }\n\n // ---------------------------- Subscribes ---------------------------------------------\n main.resubscribeStates = function () {\n for (var pattern in main.subscribesStates) {\n if (main.subscribesStates.hasOwnProperty(pattern) && main.subscribesStates[pattern]) {\n console.debug('Re-Subscribe: ' + pattern);\n main.socket.emit('subscribe', pattern);\n }\n }\n };\n\n main.resubscribeObjects = function () {\n for (var pattern in main.subscribesObjects) {\n if (main.subscribesObjects.hasOwnProperty(pattern) && main.subscribesObjects[pattern]) {\n main.socket.emit('subscribeObjects', pattern);\n }\n }\n };\n\n main.resubscribeLogs = function () {\n if (main.subscribesLogs) {\n console.debug('Subscribe LOG');\n main.socket.emit('requireLog', true);\n }\n };\n\n main.subscribeStates = function (patterns) {\n if (!patterns) return;\n if (typeof patterns === 'object') {\n for (var s = 0; s < patterns.length; s++) {\n main.subscribesStates[patterns[s]] = main.subscribesStates[patterns[s]] || 0;\n main.subscribesStates[patterns[s]]++;\n if (main.subscribesStates[patterns[s]] === 1) {\n console.debug('Subscribe: ' + patterns[s]);\n main.socket.emit('subscribe', patterns[s]);\n }\n }\n } else {\n main.subscribesStates[patterns] = main.subscribesStates[patterns] || 0;\n main.subscribesStates[patterns]++;\n if (main.subscribesStates[patterns] === 1) {\n console.debug('Subscribe: ' + patterns);\n main.socket.emit('subscribe', patterns);\n }\n }\n };\n\n main.unsubscribeStates = function (patterns) {\n if (!patterns) return;\n if (typeof patterns === 'object') {\n for (var s = 0; s < patterns.length; s++) {\n if (main.subscribesStates[patterns[s]]) {\n main.subscribesStates[patterns[s]]--;\n }\n if (main.subscribesStates[patterns[s]] === 0) {\n console.debug('Unsibscribe: ' + patterns[s]);\n main.socket.emit('unsubscribe', patterns[s]);\n delete main.subscribesStates[patterns[s]];\n }\n }\n } else {\n if (main.subscribesStates[patterns]) {\n main.subscribesStates[patterns]--;\n }\n if (main.subscribesStates[patterns] === 0) {\n console.debug('Unsibscribe: ' + patterns);\n main.socket.emit('unsubscribe', patterns);\n delete main.subscribesStates[patterns];\n }\n }\n };\n\n main.subscribeObjects = function (patterns) {\n if (!patterns) return;\n if (typeof patterns === 'object') {\n for (var s = 0; s < patterns.length; s++) {\n main.subscribesObjects[patterns[s]] = main.subscribesObjects[patterns[s]] || 0;\n main.subscribesObjects[patterns[s]]++;\n if (main.subscribesObjects[patterns[s]] === 1) {\n main.socket.emit('subscribeObjects', patterns[s]);\n }\n }\n } else {\n main.subscribesObjects[patterns] = main.subscribesObjects[patterns] || 0;\n main.subscribesObjects[patterns]++;\n if (main.subscribesObjects[patterns] === 1) {\n main.socket.emit('subscribeObjects', patterns);\n }\n }\n };\n\n main.unsubscribeObjects = function (patterns) {\n if (!patterns) return;\n if (typeof patterns === 'object') {\n for (var s = 0; s < patterns.length; s++) {\n if (main.subscribesObjects[patterns[s]]) {\n main.subscribesObjects[patterns[s]]--;\n }\n if (main.subscribesObjects[patterns[s]] === 0) {\n main.socket.emit('unsubscribeObjects', patterns[s]);\n delete main.subscribesObjects[patterns[s]];\n }\n }\n } else {\n if (main.subscribesObjects[patterns]) {\n main.subscribesObjects[patterns]--;\n }\n if (main.subscribesObjects[patterns] === 0) {\n main.socket.emit('unsubscribeObjects', patterns);\n delete main.subscribesObjects[patterns];\n }\n }\n };\n\n main.subscribeLogs = function (isSubscribe) {\n if (isSubscribe) {\n main.subscribesLogs++;\n if (main.subscribesLogs === 1) {\n console.debug('Subscribe Logs');\n main.socket.emit('requireLog', true);\n }\n } else {\n main.subscribesLogs--;\n if (main.subscribesLogs <= 0) {\n main.subscribesLogs = 0;\n console.debug('Unsubscribe Logs');\n main.socket.emit('requireLog', false);\n }\n }\n };\n\n // ---------------------------- Navigation ---------------------------------------------\n main.navigateCheckDialog = function (callback) {\n if (main.currentDialog && main.dialogs[main.currentDialog] && typeof main.dialogs[main.currentDialog].allStored === 'function') {\n if (main.dialogs[main.currentDialog].allStored() === false) {\n return main.confirmMessage(_('Some data are not stored. Discard?'), _('Please confirm'), null, function (result) {\n callback(!result);\n });\n }\n } else {\n if (configNotSaved) {\n return main.confirmMessage(_('Some data are not stored. Discard?'), _('Please confirm'), null, function (result) {\n callback(!result);\n });\n }\n }\n callback(false);\n };\n\n main.navigateGetParams = function () {\n var parts = decodeURI(window.location.hash).split('/');\n return parts[2] ? decodeURIComponent(parts[2]) : null;\n };\n\n main.navigate = function (options) {\n if (!options) {\n options = {};\n }\n if (typeof options === 'string') {\n options = {\n tab: options,\n dialog: '',\n params: ''\n };\n }\n\n // get actual tab\n if (!options.tab) {\n var parts = decodeURI(window.location.hash).split('/');\n options.tab = parts[0].replace(/^#/, '').replace(/^tab-/, '');\n }\n\n window.location.hash = '#tab-' + encodeURIComponent(options.tab) + (options.dialog ? '/' + options.dialog + (options.params ? '/' + encodeURIComponent(options.params) : '') : '');\n };\n\n // Router\n main.navigateDo = function () {\n // ignore if hash not changed\n if (window.location.hash === main.currentHash) {\n return;\n }\n // if config dialog opened and has some unsaved data\n main.navigateCheckDialog(function (err) {\n if (!err) {\n configNotSaved = null;\n main.currentHash = window.location.hash;\n // hash has following structure => #tabName/dialogName/ids\n var parts = main.currentHash.split('/');\n var tab = parts[0].replace(/^#/, '').replace(/^tab-/, '');\n var dialog = parts[1];\n var params = decodeURIComponent(parts[2]);\n\n // set default page\n if (!tab || tab === '!') {\n if (!main.systemConfig.common.tabs || main.systemConfig.common.tabs.indexOf('tab-intro') !== -1) {\n tab = 'intro';\n } else if (main.systemConfig.common.tabs.indexOf('tab-adapters') !== -1) {\n tab = 'adapters';\n } else {\n tab = main.systemConfig.common.tabs[0].replace(/^#/, '').replace(/^tab-/, '');\n }\n }\n // do tab is not found\n\n var $adminBody = $('.admin-sidemenu-body');\n var $actualTab = $adminBody.find('.admin-sidemenu-body-content');\n var $panel = $('#tab-' + tab);\n\n $adminBody.find('.admin-preloader').remove();\n\n if (!$panel.length) {\n tab = 'intro';\n }\n\n // if tab was changed\n if (main.currentTab !== tab || !$actualTab.length) {\n var link;\n // destroy actual tab\n if (main.currentTab && tabs[main.currentTab] && typeof tabs[main.currentTab].destroy === 'function') {\n tabs[main.currentTab].destroy();\n } else if (main.currentTab) {\n var $oldPanel = $('#tab-' + main.currentTab);\n // destroy current iframe\n if ($oldPanel.length && (link = $oldPanel.data('src'))) {\n var $iframe_ = $oldPanel.find('>iframe');\n if ($iframe_.attr('src')) {\n console.log('clear');\n $iframe_.attr('src', '');\n }\n }\n }\n main.currentTab = tab;\n\n $actualTab.hide().appendTo('body');\n if (!dialog) {\n $panel.addClass('admin-sidemenu-body-content').show().appendTo($adminBody);\n $actualTab = $panel;\n }\n\n // init new tab\n if (tabs[tab] && typeof tabs[tab].init === 'function') {\n tabs[tab].init();\n }\n\n // if iframe like node-red\n if ($panel.length && (link = $panel.data('src'))) {\n if (link.indexOf('%') === -1) {\n var $iframe = $panel.find('>iframe');\n if ($iframe.length && !$iframe.attr('src')) {\n $iframe.attr('src', link);\n }\n } else {\n $adminSideMenu.data('problem-link', 'tab-' + tab);\n }\n }\n }\n\n // select menu element\n var $tab = $adminSideMenu.find('.admin-sidemenu-items[data-tab=\"tab-' + tab + '\"]');\n $adminSideMenu.find('.admin-sidemenu-items').not($tab).removeClass('admin-sidemenu-active');\n $tab.addClass('admin-sidemenu-active');\n\n if (tabsInfo['tab-' + tab] && tabsInfo['tab-' + tab].host) {\n $('#host-adapters-btn').css('opacity', 1);\n } else {\n $('#host-adapters-btn').css('opacity', 0.3);\n }\n document.title = '云控2 - ' + tab;\n // if some dialog opened or must be shown\n if (main.currentDialog !== dialog) {\n // destroy it\n if (main.dialogs[main.currentDialog] && typeof main.dialogs[main.currentDialog].destroy === 'function') {\n main.dialogs[main.currentDialog].destroy();\n }\n main.currentDialog = dialog;\n if (dialog && main.dialogs[dialog]) {\n if (typeof main.dialogs[dialog].init === 'function') {\n main.dialogs[dialog].init(params ? params.split(',') : undefined);\n }\n tabs[main.currentTab] && tabs[main.currentTab].saveScroll && tabs[main.currentTab].saveScroll();\n $actualTab.hide().appendTo('body');\n $('#dialog-' + dialog).addClass('admin-sidemenu-body-content').show().appendTo($adminBody);\n } else if ($actualTab.attr('id') !== $panel.attr('id')) {\n $actualTab.hide().appendTo('body');\n $panel.addClass('admin-sidemenu-body-content').show().appendTo($adminBody);\n tabs[main.currentTab] && tabs[main.currentTab].restoreScroll && tabs[main.currentTab].restoreScroll();\n }\n }\n } else {\n // restore hash link\n window.location.hash = main.currentHash || '';\n }\n });\n };\n\n function getIconHtml(obj, classes) {\n var icon;\n var alt;\n var isCommon = obj && obj.common;\n\n if (isCommon.icon) {\n if (!isCommon.icon.match(/^data:image\\//)) {\n if (isCommon.icon.indexOf('.') !== -1) {\n var instance;\n if (obj.type === 'instance') {\n icon = '/adapter/' + obj.common.name + '/' + obj.common.icon;\n } else if (obj._id.match(/^system\\.adapter\\./)) {\n instance = obj._id.split('.', 3);\n if (isCommon.icon[0] === '/') {\n instance[2] += isCommon.icon;\n } else {\n instance[2] += '/' + isCommon.icon;\n }\n icon = '/adapter/' + instance[2];\n } else {\n instance = obj._id.split('.', 2);\n if (isCommon.icon[0] === '/') {\n instance[0] += isCommon.icon;\n } else {\n instance[0] += '/' + isCommon.icon;\n }\n icon = '/adapter/' + instance[0];\n }\n } else {\n return '' + isCommon.icon + '';\n }\n\n } else {\n icon = isCommon.icon;\n }\n alt = obj.type;\n }\n return {icon: icon, alt: alt}\n }\n\n main.getIconFromObj = function (obj, imgPath, classes) {\n var icon = '';\n var alt = '';\n if (obj && obj.common) {\n if (obj.common.icon) {\n var result = getIconHtml(obj);\n icon = result.icon;\n alt = result.alt;\n } else {\n imgPath = imgPath || 'lib/css/fancytree/';\n if (obj.type === 'device') {\n icon = imgPath + 'device.png';\n alt = 'device';\n } else if (obj.type === 'channel') {\n icon = imgPath + 'channel.png';\n alt = 'channel';\n } else if (obj.type === 'state') {\n icon = imgPath + 'state.png';\n alt = 'state';\n }\n }\n }\n\n if (icon) return '\"'';\n return '';\n };\n\n // static, just used from many places\n main.getIcon = function(id, imgPath, objects, classes) {\n return main.getIconFromObj((objects || main.objects)[id], imgPath, classes);\n };\n\n main.getHostIcon = function (obj, classes) {\n var icon = '';\n var alt = '';\n\n if (obj && obj.common && obj.common.icon) {\n var result = getIconHtml(obj);\n icon = result.icon;\n alt = result.alt;\n }\n icon = icon || 'img/no-image.png';\n alt = alt || '';\n\n return '\"'';\n };\n\n main.formatBytes = function (bytes) {\n if (Math.abs(bytes) < 1024) {\n return bytes + ' B';\n }\n var units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n var u = -1;\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n return bytes.toFixed(1) + ' ' + units[u];\n };\n\n // https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n main.invertColor = function (hex) {\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n return false;\n }\n var r = parseInt(hex.slice(0, 2), 16),\n g = parseInt(hex.slice(2, 4), 16),\n b = parseInt(hex.slice(4, 6), 16);\n // http://stackoverflow.com/a/3943023/112731\n return (r * 0.299 + g * 0.587 + b * 0.114) <= 186;\n };\n\n var tabsInfo = {\n 'tab-intro': {order: 1, icon: 'apps'},\n 'tab-adapters': {order: 2, icon: 'store', host: true},\n 'tab-instances': {order: 3, icon: 'subtitles', host: true},\n 'tab-objects': {order: 4, icon: 'view_list'},\n 'tab-enums': {order: 5, icon: 'art_track'},\n 'tab-logs': {order: 6, icon: 'view_headline', host: true},\n 'tab-scenes': {order: 7, icon: 'subscriptions'},\n 'tab-events': {order: 8, icon: 'flash_on'},\n 'tab-users': {order: 10, icon: 'person_outline'},\n 'tab-javascript': {order: 11, icon: 'code'},\n 'tab-text2command-0': {order: 12, icon: 'ac_unit'},\n 'tab-text2command-1': {order: 12, icon: 'ac_unit'},\n 'tab-text2command-2': {order: 12, icon: 'ac_unit'},\n 'tab-node-red-0': {order: 20, icon: 'device_hub'},\n 'tab-node-red-1': {order: 21, icon: 'device_hub'},\n 'tab-node-red-2': {order: 22, icon: 'device_hub'},\n 'tab-hosts': {order: 100, icon: 'storage'},\n 'tab-fullcalendar-0': {order: 30, icon: 'perm_contact_calendar'},\n 'tab-fullcalendar-1': {order: 31, icon: 'perm_contact_calendar'},\n 'tab-fullcalendar-2': {order: 32, icon: 'perm_contact_calendar'}\n };\n\n function initSideNav() {\n var lines = '';\n\n var elements = [];\n $('.admin-tab').each(function () {\n var id = $(this).attr('id');\n if (!main.systemConfig.common.tabs || main.systemConfig.common.tabs.indexOf(id) !== -1) {\n elements.push({\n line: '
  • ' +\n (tabsInfo[id] && tabsInfo[id].icon ? '' + tabsInfo[id].icon + '' : 'live_help') +\n _($(this).data('name')) + '
  • ',\n id: id\n });\n }\n });\n $('.tab-custom').each(function () {\n var id = $(this).attr('id');\n if (!main.systemConfig.common.tabs || main.systemConfig.common.tabs.indexOf(id) !== -1) {\n var icon;\n if (tabsInfo[id] && tabsInfo[id].icon) {\n icon = tabsInfo[id].icon;\n } else {\n var _id = 'system.adapter.' + id.substring(4);\n if (main.objects[_id] && main.objects[_id].adminTab && main.objects[_id]['fa-icon']) {\n icon = main.objects[_id]['fa-icon'];\n }\n }\n\n elements.push({\n line: '
  • ' +\n (icon ? '' + icon + '' : 'live_help') +\n $(this).data('name') + '
  • ',\n id: id\n });\n }\n });\n\n elements.sort(function (a, b) {\n if (!tabsInfo[a.id] && !tabsInfo[b.id]) return 0;\n if (!tabsInfo[a.id]) return 1;\n if (!tabsInfo[b.id]) return -1;\n if (tabsInfo[a.id].order < tabsInfo[b.id].order) return -1;\n if (tabsInfo[a.id].order > tabsInfo[b.id].order) return 1;\n return 0;\n });\n\n for (var e = 0; e < elements.length; e++) {\n lines += elements[e].line;\n }\n $adminSideMenu.find('.admin-sidemenu-menu').html(lines);\n\n $('.admin-sidemenu-close').off('click').on('click', function () {\n $adminSideMain.toggleClass('admin-sidemenu-closed');\n $adminSideMenu.toggleClass('admin-sidemenu-closed');\n $('.admin-sidemenu-close i').toggleClass('hide');\n\n setTimeout(function () {\n //resizeGrids();\n $(window).trigger('resize');\n }, 400);\n });\n\n $('.admin-sidemenu-items').off('click').on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n window.location.hash = '#' + $(this).data('tab');\n });\n $('.admin-sidemenu-items a').off('click').on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n window.location.hash = '#' + $(this).parent().data('tab');\n });\n\n // Show if update available\n tabs.hosts.updateCounter();\n tabs.adapters.updateCounter();\n }\n\n // ---------------------------- Socket.io methods ---------------------------------------------\n main.socket.on('log', function (message) {\n tabs.logs.add(message);\n });\n main.socket.on('error', function (error) {\n console.log(error);\n });\n main.socket.on('permissionError', function (err) {\n main.showMessage(_('Has no permission to %s %s %s', err.operation, err.type, (err.id || '')));\n });\n main.socket.on('stateChange', function (id, obj) {\n setTimeout(stateChange, 0, id, obj);\n });\n main.socket.on('objectChange', function (id, obj) {\n setTimeout(objectChange, 0, id, obj);\n });\n main.socket.on('cmdStdout', function (_id, text) {\n if (activeCmdId === _id) {\n var m = text.match(/^upload \\[(\\d+)]/);\n if (m) {\n if ($dialogCommand.data('max') === null) {\n $dialogCommand.data('max', parseInt(m[1], 10));\n $dialogCommandProgress.removeClass('indeterminate').addClass('determinate');\n }\n var max = $dialogCommand.data('max');\n var value = parseInt(m[1], 10);\n $dialogCommandProgress.css('width', (100 - Math.round((value / max) * 100)) + '%');\n } else {\n m = text.match(/^got [-_:\\/\\\\.\\w\\d]+\\/admin$/);\n if (m) {\n // upload of admin\n $dialogCommand.find('.progress-text').html(_('Upload admin started'));\n $dialogCommand.data('max', null);\n } else {\n // got ..../www\n m = text.match(/^got [-_:\\/\\\\.\\w\\d]+\\/www$/);\n if (m) {\n // upload of www\n $dialogCommand.find('.progress-text').html(_('Upload www started'));\n $dialogCommand.data('max', null);\n } else {\n\n }\n }\n }\n\n stdout += '\\n' + text;\n $stdout.val(stdout);\n $stdout.scrollTop($stdout[0].scrollHeight - $stdout.height());\n }\n });\n main.socket.on('cmdStderr', function (_id, text) {\n if (activeCmdId === _id) {\n if (!$dialogCommand.data('error')) {\n $dialogCommand.data('error', text);\n }\n stdout += '\\nERROR: ' + text;\n $stdout.val(stdout);\n $stdout.scrollTop($stdout[0].scrollHeight - $stdout.height());\n }\n });\n main.socket.on('cmdExit', function (_id, exitCode) {\n if (activeCmdId === _id) {\n\n exitCode = parseInt(exitCode, 10);\n stdout += '\\n' + (exitCode !== 0 ? 'ERROR: ' : '') + 'process exited with code ' + exitCode;\n $stdout.val(stdout);\n $stdout.scrollTop($stdout[0].scrollHeight - $stdout.height());\n\n $dialogCommand.find('.progress-dont-close').addClass('disabled');\n $dialogCommandProgress.removeClass('indeterminate').css({'width': '100%'});\n $dialogCommand.find('.btn').html(_('Close'));\n $dialogCommand.data('finished', true);\n $dialogCommand.data('max', true);\n var $backButton = $adminSideMain.find('.button-command');\n $backButton.removeClass('in-progress');\n\n if (!exitCode) {\n $dialogCommand.find('.progress-text').html(_('Success!'));\n $backButton.hide();\n if ($dialogCommand.find('.progress-dont-close input').prop('checked')) {\n setTimeout(function () {\n $dialogCommand.modal('close');\n }, 1500);\n }\n } else {\n var error = $dialogCommand.data('error');\n if (error) {\n var m = error.match(/error: (.*)$/);\n if (m) {\n error = m[1];\n }\n\n $dialogCommand.find('.progress-text').html(_('Done with error: %s', _(error))).addClass('error');\n } else {\n $dialogCommand.find('.progress-text').html(_('Done with error')).addClass('error');\n }\n $backButton.addClass('error');\n $backButton.show();\n }\n if (cmdCallback) {\n cmdCallback(exitCode);\n cmdCallback = null;\n }\n }\n });\n main.socket.on('eventsThreshold', function (isActive) {\n if (isActive) {\n $('#events_threshold').show();\n } else {\n $('#events_threshold').hide();\n }\n });\n main.socket.on('connect', function () {\n $('#connecting').hide();\n if (firstConnect) {\n firstConnect = false;\n\n main.getUser();\n\n main.socket.emit('getUserPermissions', function (err, acl) {\n main.acl = acl;\n // Read system configuration\n main.socket.emit('getObject', 'system.config', function (errConfig, data) {\n main.systemConfig = data;\n\n // set logo and set branding\n if (data && data.native && data.native.vendor) {\n var vendor = data.native.vendor;\n if (vendor.icon) {\n $('.admin-sidemenu-header .button-icon img').attr('src', data.native.vendor.icon);\n }\n if (vendor.name) {\n $('.admin-sidemenu-header .button-version').html(data.native.vendor.name).addClass('vendor');\n }\n if (vendor.admin && vendor.admin.noCustomInstall) {\n $('#btn_filter_custom_url').hide();\n }\n if (vendor.admin && vendor.admin.css) {\n if (vendor.admin.css.sideNavUser) {\n $('.side-nav .user-view').css(vendor.admin.css.sideNavUser);\n }\n if (vendor.admin.css.sideNavMenu) {\n $('.side-nav').css(vendor.admin.css.sideNavMenu);\n }\n if (vendor.admin.css.header) {\n $adminSideMain.find('.admin-sidemenu-header nav').css(vendor.admin.css.header);\n }\n // apply rules\n if (vendor.admin.css.rules) {\n for (var r = 0; r < vendor.admin.css.rules.length; r++) {\n $(vendor.admin.css.rules[r].selector).css(vendor.admin.css.rules[r].css);\n }\n }\n if (vendor.admin.styles) {\n $('head').append('');\n }\n }\n }\n\n // rename log => logs (back compatibility)\n if (main.systemConfig && main.systemConfig.common && main.systemConfig.common.tabs) {\n var pos = main.systemConfig.common.tabs.indexOf('tab-log');\n if (pos !== -1) {\n main.systemConfig.common.tabs[pos] = 'tab-logs';\n }\n }\n\n main.socket.emit('getObject', 'system.repositories', function (errRepo, repo) {\n main.dialogs.system.systemRepos = repo;\n main.socket.emit('getObject', 'system.certificates', function (errCerts, certs) {\n setTimeout(function () {\n main.dialogs.system.systemCerts = certs;\n if (errConfig === 'permissionError') {\n main.systemConfig = {common: {language: systemLang}, error: 'permissionError'};\n } else {\n if (!errConfig && main.systemConfig && main.systemConfig.common) {\n systemLang = main.systemConfig.common.language || systemLang;\n main.systemConfig.common.city = main.systemConfig.common.city || '';\n main.systemConfig.common.country = main.systemConfig.common.country || '';\n main.systemConfig.common.longitude = main.systemConfig.common.longitude || '';\n main.systemConfig.common.latitude = main.systemConfig.common.latitude || '';\n\n if (!main.systemConfig.common.licenseConfirmed) {\n // Show license agreement\n var language = (main.systemConfig.common.language || window.navigator.userLanguage || window.navigator.language || '').substring(0, 2);\n if (language !== 'en') language = 'cn';\n\n systemLang = language;\n\n $dialogLicense.find('.license_text').html(license[language] || license.en);\n\n $dialogLicense.find('.license_checkbox').prop('checked', false);\n\n // on language change\n $dialogLicense.find('.license_language')\n .data('licenseConfirmed', false)\n .val(language)\n .on('change', function () {\n language = $(this).val();\n $dialogLicense.find('.license_language_label').html(translateWord('Select language', language));\n $dialogLicense.find('.license_text').html(license[language] || license.en);\n $dialogLicense.find('.license_checkbox').html(translateWord('license_checkbox', language));\n $dialogLicense.find('.license_agree .translate').html(translateWord('agree', language));\n $dialogLicense.find('.license_non_agree .translate').html(translateWord('not agree', language));\n $dialogLicense.find('.license_terms').html(translateWord('License terms', language));\n $dialogLicense.find('.license_agreement_label').html(translateWord('license agreement', language));\n }).select();\n\n $dialogLicense.find('.license_diag').on('change', function () {\n if ($(this).prop('checked')) {\n $dialogLicense.find('.license_agree').removeClass('disabled');\n } else {\n $dialogLicense.find('.license_agree').addClass('disabled');\n }\n });\n\n // workaround for materialize checkbox problem\n $dialogLicense.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n\n $dialogLicense.modal({\n dismissible: false,\n complete: function () {\n $dialogLicense.find('.license_text').html('');\n location.reload();\n }\n }).modal('open');\n\n $dialogLicense.find('.license_agree').addClass('disabled').off('click').on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n main.socket.emit('getObject', 'system.config', function (err, obj) {\n if (err || !obj) {\n main.showError(_('Cannot confirm: ' + err));\n return;\n }\n obj.common = obj.common || {};\n obj.common.licenseConfirmed = true;\n obj.common.language = language;\n main.socket.emit('setObject', 'system.config', obj, function (err) {\n if (err) {\n main.showError(err);\n }\n $dialogLicense.modal('close');\n $dialogLicense.find('.license_agree').off('click');\n $dialogLicense.find('.license_non_agree').off('click');\n });\n });\n });\n $dialogLicense.find('.license_non_agree').off('click').on('click', function (e) {\n location.reload();\n });\n }\n } else {\n main.systemConfig = {\n type: 'config',\n common: {\n name: 'system.config',\n city: '', // City for weather\n country: '', // Country for weather\n longitude: '', // longitude for javascript\n latitude: '', // longitude for javascript\n language: '', // Default language for adapters. Adapters can use different values.\n tempUnit: '°C', // Default temperature units.\n currency: '', // Default currency sign.\n dateFormat: 'DD.MM.YYYY', // Default date format.\n isFloatComma: true, // Default float divider ('.' - false, ',' - true)\n licenseConfirmed: false, // If license agreement confirmed,\n defaultHistory: '', // Default history instance\n tabs: [ // Show by default only these tabs\n 'tab-intro',\n 'tab-adapters',\n 'tab-instances',\n 'tab-objects',\n 'tab-logs',\n 'tab-scenes',\n 'tab-javascript',\n 'tab-text2command-0'\n ]\n }\n };\n main.systemConfig.common.language = window.navigator.userLanguage || window.navigator.language;\n\n if (main.systemConfig.common.language !== 'en' ) {\n main.systemConfig.common.language = 'cn';\n }\n }\n }\n\n translateCron();\n translateAll();\n\n // Here we go!\n initAllDialogs();\n // call prepare\n for (var t in tabs) {\n if (tabs.hasOwnProperty(t) && tabs[t] && typeof tabs[t].prepare === 'function') {\n tabs[t].prepare();\n }\n }\n // TABS\n // resizeGrids();\n\n getStates(getObjects);\n }, 0);\n });\n });\n });\n });\n } else {\n main.resubscribeStates();\n main.resubscribeObjects();\n main.resubscribeLogs();\n }\n if (main.waitForRestart) {\n location.reload();\n }\n });\n main.socket.on('disconnect', function () {\n $('#connecting').show();\n });\n main.socket.on('reconnect', function () {\n $('#connecting').hide();\n if (main.waitForRestart) {\n location.reload();\n }\n });\n main.socket.on('repoUpdated', function () {\n setTimeout(function () {\n tabs.adapters.init(true);\n }, 0);\n });\n main.socket.on('reauthenticate', function () {\n location.reload();\n });\n\n /*function resizeGrids() {\n var x = $(window).width();\n var y = $(window).height();\n if (x < 720) {\n x = 720;\n }\n if (y < 480) {\n y = 480;\n }\n for (var tab in tabs.events) {\n if (tabs.events.hasOwnProperty(tab) && tabs[tab] && tabs[tab].resize) {\n tabs[tab].resize(x, y);\n }\n }\n }\n\n $(window).resize(resizeGrids);\n */\n});\n})(jQuery);\n","function Adapters(main) {\n 'use strict';\n\n var that = this;\n\n this.curRepository = null;\n this.curRepoLastUpdate = null;\n this.curInstalled = null;\n this.curRepoLastHost = null;\n\n this.list = [];\n this.$tab = $('#tab-adapters');\n this.$grid = this.$tab.find('#grid-adapters');\n this.$tiles = this.$tab.find('#grid-adapters-tiles');\n this.$installDialog = $('#dialog-install-url');\n this.main = main;\n this.tree = [];\n this.data = {};\n this.urls = {};\n this.groupImages = {\n 'common adapters_group': 'img/common.png',\n 'general_group': 'img/common.png',\n 'hardware_group': 'img/hardware.png',\n 'lighting_group': 'img/hardware.png',\n 'energy_group': 'img/hardware.png',\n 'household_group': 'img/hardware.png',\n 'iot-systems_group': 'img/hardware.png',\n 'climate-control_group': 'img/hardware.png',\n 'infrastructure_group': 'img/hardware.png',\n 'garden_group': 'img/hardware.png',\n 'alarm_group': 'img/hardware.png',\n 'script_group': 'img/script.png',\n 'logic_group': 'img/script.png',\n 'media_group': 'img/media.png',\n 'multimedia_group': 'img/media.png',\n 'communication_group': 'img/communication.png',\n 'protocols_group': 'img/communication.png',\n 'network_group': 'img/communication.png',\n 'messaging_group': 'img/communication.png',\n 'visualisation_group': 'img/visualisation.png',\n 'visualization_group': 'img/visualisation.png',\n 'visualization-icons_group': 'img/visualisation.png',\n 'visualization-widgets_group': 'img/visualisation.png',\n 'storage_group': 'img/storage.png',\n 'weather_group': 'img/weather.png',\n 'schedule_group': 'img/schedule.png',\n 'vis_group': 'img/vis.png',\n 'date-and-time_group': 'img/service.png',\n 'geoposition_group': 'img/service.png',\n 'utility_group': 'img/service.png',\n 'misc-data_group': 'img/service.png',\n 'service_group': 'img/service.png',\n 'third-party_group': 'img/service.png'\n };\n this.inited = false;\n\n this.isList = false;\n this.filterVals = {length: 0};\n this.onlyInstalled = false;\n this.onlyUpdatable = false;\n this.currentFilter = '';\n this.currentType = '';\n this.isCollapsed = {};\n this.isTiles = true;\n\n this.types = {\n occ: 'schedule'\n };\n\n function getVersionClass(version) {\n if (version) {\n var tmp = version.split ('.');\n if (tmp[0] === '0' && tmp[1] === '0' && tmp[2] === '0') {\n version = 'planned';\n } else if (tmp[0] === '0' && tmp[1] === '0') {\n version = 'alpha';\n } else if (tmp[0] === '0') {\n version = 'beta'\n } else if (version === 'npm error') {\n version = 'error';\n } else {\n version = 'stable';\n }\n }\n return version;\n }\n\n function prepareTable() {\n that.$grid.show();\n that.$tiles.html('').hide();\n that.$tab.find('#main-toolbar-table-types-btn').hide();\n\n if (!that.$grid.data('inited')) {\n that.$grid.data('inited', true);\n that.$grid.fancytree({\n extensions: ['table', 'gridnav', 'filter', 'themeroller'],\n checkbox: false,\n strings: {\n noData: _('No data')\n },\n table: {\n indentation: 5 // indent 20px per node level\n },\n show: function (currentId, filter, onSuccess) {\n that.sortTree();\n },\n source: that.tree,\n renderColumns: function(event, data) {\n var node = data.node;\n var $tdList = $(node.tr).find('>td');\n var obj = that.data[node.key];\n\n function ellipsis(txt) {\n return '
    ' + txt + '
    ';\n }\n\n if (!obj) {\n $tdList.eq(0).css({'font-weight': 'bold'});\n $tdList.eq(0).find('img').remove();\n $tdList.eq(0).find('span.fancytree-title').attr('style', 'padding-left: 0px !important');\n\n // Calculate total count of adapter and count of installed adapter\n for (var c = 0; c < that.tree.length; c++) {\n if (that.tree[c].key === node.key) {\n $tdList.eq(1).html(that.tree[c].desc || '').css({'overflow': 'hidden', 'white-space': 'nowrap', position: 'relative'});\n var installed = 0;\n for (var k = 0; k < that.tree[c].children.length; k++) {\n if (that.data[that.tree[c].children[k].key].installed) installed++;\n }\n that.tree[c].installed = installed;\n node.data.installed = installed;\n var title;\n //if (!that.onlyInstalled && !that.onlyUpdatable) {\n title = '[' + installed + ' / ' + that.tree[c].children.length + ']';\n $tdList.eq(1).html(ellipsis('' + installed + ' ' + _('of') + ' ' + that.tree[c].children.length + ' ' + _('Adapters from this Group installed')));\n break;\n }\n }\n return;\n }\n\n $tdList.eq(0).css({'overflow': 'hidden', 'white-space': 'nowrap'});\n\n function setHtml(no, html) {\n return $tdList.eq(no).html(ellipsis(html));\n }\n\n var idx = obj.desc.indexOf('= 0 ? obj.desc.substr(0, idx) : obj.desc;\n $tdList.eq(1).html(ellipsis(obj.desc))\n .attr('title', desc)\n .css({'white-space': 'nowrap', position: 'relative', 'font-weight': obj.bold ? 'bold' : null}).find('>div>div')\n .css('height: 22px !important')\n ;\n\n setHtml(2, obj.keywords).attr('title', obj.keywords);\n\n $tdList.eq(3).html(obj.installed);\n $tdList.eq(4).html(obj.version); //.css({ position: 'relative'});\n\n // setHtml(5, obj.platform);// actually there is only one platform\n setHtml(5, obj.license);\n setHtml(6, obj.install);\n\n that.initButtons(node.key);\n // If we render this element, that means it is expanded\n if (that.isCollapsed[obj.group]) {\n that.isCollapsed[obj.group] = false;\n that.main.saveConfig('adaptersIsCollapsed', JSON.stringify(that.isCollapsed));\n }\n },\n gridnav: {\n autofocusInput: false,\n handleCursorKeys: true\n },\n filter: {\n mode: 'hide',\n autoApply: true\n },\n collapse: function(event, data) {\n if (that.isCollapsed[data.node.key]) return;\n that.isCollapsed[data.node.key] = true;\n that.main.saveConfig('adaptersIsCollapsed', JSON.stringify(that.isCollapsed));\n }\n });\n\n that.$tab.find('#btn_collapse_adapters').show().off('click').on('click', function () {\n that.$tab.find('.process-adapters').show();\n setTimeout(function () {\n that.$grid.fancytree('getRootNode').visit(function (node) {\n if (!that.filterVals.length || node.match || node.subMatch) node.setExpanded(false);\n });\n that.$tab.find('.process-adapters').hide();\n }, 100);\n });\n\n that.$tab.find('#btn_expand_adapters').show().off('click').on('click', function () {\n that.$tab.find('.process-adapters').show();\n setTimeout(function () {\n that.$grid.fancytree('getRootNode').visit(function (node) {\n if (!that.filterVals.length || node.match || node.subMatch)\n node.setExpanded(true);\n });\n that.$tab.find('.process-adapters').hide();\n }, 100);\n });\n\n that.$tab.find('#btn_list_adapters').show().off('click').on('click', function () {\n var $processAdapters = that.$tab.find('.process-adapters');\n $processAdapters.show();\n that.isList = !that.isList;\n if (that.isList) {\n that.$tab.find('#btn_list_adapters').addClass('red lighten-3');\n that.$tab.find('#btn_expand_adapters').hide();\n that.$tab.find('#btn_collapse_adapters').hide();\n $(this).attr('title', _('list'));\n } else {\n that.$tab.find('#btn_list_adapters').removeClass('red lighten-3');\n that.$tab.find('#btn_expand_adapters').show();\n that.$tab.find('#btn_collapse_adapters').show();\n $(this).attr('title', _('tree'));\n }\n that.main.saveConfig('adaptersIsList', that.isList);\n $processAdapters.show();\n\n setTimeout(function () {\n that._postInit(true);\n $processAdapters.hide();\n }, 200);\n });\n } else {\n that.$tab.find('#btn_collapse_adapters').show();\n that.$tab.find('#btn_expand_adapters').show();\n that.$tab.find('#btn_list_adapters').show();\n }\n\n if (that.isList) {\n that.$tab.find('#btn_list_adapters').addClass('red lighten-3').attr('title', _('tree'));\n that.$tab.find('#btn_expand_adapters').hide();\n that.$tab.find('#btn_collapse_adapters').hide();\n } else {\n that.$tab.find('#btn_list_adapters').removeClass('red lighten-3').attr('title', _('list'));\n that.$tab.find('#btn_expand_adapters').show();\n that.$tab.find('#btn_collapse_adapters').show();\n }\n\n that.$tab.find('.filter-input').trigger('change');\n }\n\n function prepareTiles() {\n that.$grid.hide();\n that.$tiles.show();\n that.$tab.find('#main-toolbar-table-types-btn').show();\n that.$tab.find('#btn_list_adapters').hide();\n that.$tab.find('#btn_collapse_adapters').hide();\n that.$tab.find('#btn_expand_adapters').hide();\n that.$tab.find('.filter-input').trigger('change');\n }\n\n function onOnlyUpdatableChanged() {\n if (that.onlyUpdatable) {\n that.$tab.find('#btn_filter_updates').addClass('red lighten-3');\n that.$tab.find('#btn_upgrade_all').show();\n } else {\n that.$tab.find('#btn_upgrade_all').hide();\n that.$tab.find('#btn_filter_updates').removeClass('red lighten-3');\n }\n }\n\n function onExpertmodeChanged() {\n if (that.main.config.expertMode) {\n that.$tab.find('#btn_adapters_expert_mode').addClass('red lighten-3');\n that.$tab.find('#btn_upgrade_all').show();\n } else {\n that.$tab.find('#btn_adapters_expert_mode').removeClass('red lighten-3');\n onOnlyUpdatableChanged();\n }\n }\n\n function filterTiles() {\n var anyVisible = false;\n // filter\n if (that.currentFilter) {\n that.$tiles.find('.tile').each(function () {\n var $this = $(this);\n if (that.currentType && !$this.hasClass('class-' + that.currentType)) {\n $this.hide();\n return;\n }\n\n if (customFilter({key: $this.data('id')})) {\n anyVisible = true;\n $this.show();\n } else {\n $this.hide();\n }\n });\n } else {\n if (!that.currentType) {\n that.$tiles.find('.tile')\n .show()\n .each(function () {\n if ($(this).is(':visible')) {\n anyVisible = true;\n return false;\n }\n });\n } else {\n that.$tiles.find('.tile').hide();\n that.$tiles.find('.class-' + that.currentType).show();\n that.$tiles.find('.tile').each(function () {\n if ($(this).is(':visible')) {\n anyVisible = true;\n return false;\n }\n });\n }\n }\n\n if (anyVisible) {\n that.$tiles.find('.filtered-out').hide();\n } else {\n that.$tiles.find('.filtered-out').show();\n }\n }\n\n this.prepare = function () {\n this.$tab.find('#btn_switch_adapters').off('click').on('click', function () {\n that.$tab.find('.process-adapters').show();\n that.isTiles = !that.isTiles;\n\n if (that.isTiles) {\n that.$tab.removeClass('view-table').addClass('view-tiles');\n $(this).find('i').text('view_list');\n } else {\n $(this).find('i').text('view_module');\n that.$tab.removeClass('view-tiles').addClass('view-table');\n }\n\n that.main.saveConfig('adaptersIsTiles', that.isTiles);\n\n setTimeout(function () {\n if (that.isTiles) {\n prepareTiles();\n } else {\n prepareTable();\n }\n that._postInit(true);\n that.$tab.find('.process-adapters').hide();\n }, 50);\n });\n\n this.$tab.find('#btn_filter_adapters').off('click').on('click', function () {\n that.$tab.find('.process-adapters').show();\n that.onlyInstalled = !that.onlyInstalled;\n if (that.onlyInstalled) {\n that.$tab.find('#btn_filter_adapters').addClass('red lighten-3');\n } else {\n that.$tab.find('#btn_filter_adapters').removeClass('red lighten-3');\n }\n that.main.saveConfig('adaptersOnlyInstalled', that.onlyInstalled);\n\n setTimeout(function () {\n that._postInit(true);\n that.$tab.find('.process-adapters').hide();\n }, 50);\n });\n\n this.$tab.find('#btn_filter_updates').off('click').on('click', function () {\n that.$tab.find('.process-adapters').show();\n that.onlyUpdatable = !that.onlyUpdatable;\n onOnlyUpdatableChanged();\n\n that.main.saveConfig('adaptersOnlyUpdatable', that.onlyUpdatable);\n\n setTimeout(function () {\n that._postInit(true);\n that.$tab.find('.process-adapters').hide();\n }, 200);\n });\n\n this.$tab.find('#btn_filter_custom_url')\n .off('click')\n .on('click', function () {\n // prepare adapters\n var text = '';\n var order = [];\n var url;\n for (url in that.urls) {\n if (that.urls.hasOwnProperty(url)) {\n order.push(url);\n }\n }\n order.sort();\n\n for (var o = 0; o < order.length; o++) {\n var user = that.urls[order[o]].match(/\\.com\\/([-_$§A-Za-z0-9]+)\\/([-._$§A-Za-z0-9]+)\\//);\n if (user && user.length >= 2 && (that.main.config.expertMode || order[o].indexOf('js-controller') === -1)) {\n text += '';\n }\n }\n that.$installDialog.find('#install-github-link').html(text).val(that.main.config.adaptersGithub || '');\n\n that.$installDialog.modal();\n\n that.$installDialog.find('.btn-install').off('click').on('click', function () {\n var isCustom = !that.$installDialog.find('a[href=\"#tabs-install-github\"]').hasClass('active');//!!that.$installDialog.find('#tabs-install').tabs('option', 'active');\n var url;\n var debug;\n var adapter;\n var username;\n var password;\n if (isCustom) {\n url = that.$installDialog.find('#install-url-link').val();\n \n username = that.$installDialog.find('#install-url-link-username').val();\n \n password = that.$installDialog.find('#install-url-link-password').val();\n \n if (username) {\n\n url = url.replace('https://','https://' +username + ':' + password + '@') + ' --production';\n }\n \n if (url.startsWith(\"http\") && url.endsWith(\".git\")) url = \"git+\" + url;\n \n debug = that.$installDialog.find('#install-url-debug').prop('checked') ? ' --debug' : '';\n adapter = '';\n } else {\n var parts = that.$installDialog.find('#install-github-link').val().split(' ');\n url = parts[0];\n debug = that.$installDialog.find('#install-github-debug').prop('checked') ? ' --debug' : '';\n adapter = ' ' + parts[1];\n }\n\n if (!url) {\n that.main.showError(_('Invalid link'));\n return;\n }\n\n that.main.cmdExec(null, 'url \"' + url + '\"' + adapter + debug, function (exitCode) {\n if (!exitCode) {\n that.init(true, true);\n }\n });\n });\n that.$installDialog.find('#install-github-link').select();\n // workaround for materialize checkbox problem\n that.$installDialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n that.$installDialog.modal('open');\n that.$installDialog.find('.tabs').mtabs({\n nShow: function (tab) {\n if (!tab) return;\n that.main.saveConfig('adaptersInstallTab', $(tab).attr('id'));\n }\n });\n\n if (that.main.config.adaptersInstallTab && !that.main.noSelect) {\n that.$installDialog.find('.tabs').mtabs('select', that.main.config.adaptersInstallTab);\n }\n });\n\n this.$tab.find('#btn_upgrade_all').off('click').on('click', function () {\n that.main.confirmMessage(_('Do you want to upgrade all adapters?'), _('Please confirm'), 'help', function (result) {\n if (result) {\n that.main.cmdExec(null, 'upgrade', function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n }\n });\n });\n\n this.$tab.find('#btn_adapters_expert_mode').on('click', function () {\n that.main.config.expertMode = !that.main.config.expertMode;\n that.main.saveConfig('expertMode', that.main.config.expertMode);\n that.updateExpertMode();\n that.main.tabs.instances.updateExpertMode();\n });\n\n if (that.main.config.expertMode) {\n that.$tab.find('#btn_adapters_expert_mode').addClass('red lighten-3');\n }\n\n // save last selected adapter\n this.$installDialog.find('#install-github-link').on('change', function () {\n that.main.saveConfig('adaptersGithub', $(this).val());\n });\n this.$installDialog.find('#install-url-link').on('keyup', function (event) {\n if (event.which === 13) {\n that.$installDialog.find('#dialog-install-url-button').trigger('click');\n }\n });\n\n // Load settings\n this.isTiles = (this.main.config.adaptersIsTiles !== undefined && this.main.config.adaptersIsTiles !== null) ? this.main.config.adaptersIsTiles : true;\n this.isList = this.main.config.adaptersIsList || false;\n this.onlyInstalled = this.main.config.adaptersOnlyInstalled || false;\n this.onlyUpdatable = this.main.config.adaptersOnlyUpdatable || false;\n this.currentFilter = this.main.config.adaptersCurrentFilter || '';\n this.currentType = this.main.config.adaptersCurrentType || '';\n this.currentOrder = this.main.config.adaptersCurrentOrder || 'a-z';\n this.isCollapsed = this.main.config.adaptersIsCollapsed ? JSON.parse(this.main.config.adaptersIsCollapsed) : {};\n if (this.currentFilter) {\n this.$tab.find('.filter-input').addClass('input-not-empty').val(that.currentFilter);\n this.$tab.find('.filter-clear').show();\n } else {\n this.$tab.find('.filter-clear').hide();\n }\n\n if (this.onlyInstalled) {\n this.$tab.find('#btn_filter_adapters').addClass('red lighten-3');\n } else {\n this.$tab.find('#btn_filter_adapters').removeClass('red lighten-3');\n }\n\n if (this.onlyUpdatable) {\n this.$tab.find('#btn_filter_updates').addClass('red lighten-3');\n } else {\n this.$tab.find('#btn_filter_updates').removeClass('red lighten-3');\n }\n\n // fix for IE\n if (this.main.browser === 'ie' && this.main.browserVersion <= 10) {\n this.isTiles = false;\n this.$tab.find('#btn_switch_adapters').hide();\n }\n\n onExpertmodeChanged();\n\n this.$tab.find('#btn_refresh_adapters').on('click', function () {\n that.init(true, true);\n });\n\n // add filter processing\n this.$tab.find('.filter-input').on('keyup', function () {\n $(this).trigger('change');\n }).on('change', function (event) {\n if (that.filterTimer) {\n clearTimeout(that.filterTimer);\n }\n that.filterTimer = setTimeout(function () {\n that.filterTimer = null;\n that.currentFilter = that.$tab.find('.filter-input').val().toLowerCase();\n event && event.target && $(event.target)[that.currentFilter ? 'addClass' : 'removeClass']('input-not-empty');\n if (that.currentFilter) {\n that.$tab.find('.filter-clear').show();\n } else {\n that.$tab.find('.filter-clear').hide();\n }\n\n that.main.saveConfig('adaptersCurrentFilter', that.currentFilter);\n if (that.isTiles) {\n filterTiles();\n } else {\n that.$grid.fancytree('getTree').filterNodes(customFilter, false);\n }\n }, 400);\n });\n\n this.$tab.find('.filter-clear').on('click', function () {\n that.$tab.find('.filter-input').val('').trigger('change');\n });\n\n if (this.isTiles) {\n this.$tab.find('#btn_switch_adapters').find('i').text('view_list');\n that.$tab.removeClass('view-table').addClass('view-tiles');\n prepareTiles();\n } else {\n that.$tab.removeClass('view-tiles').addClass('view-table');\n prepareTable();\n }\n };\n\n this.updateExpertMode = function () {\n this.init(true);\n onExpertmodeChanged();\n };\n\n function customFilter(node) {\n //if (node.parent && node.parent.match) return true;\n\n if (that.currentFilter) {\n if (!that.data[node.key]) return false;\n\n var title = that.data[node.key].title;\n if (title && typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n var desc = that.data[node.key].desc;\n if (desc && typeof desc === 'object') {\n desc = desc[systemLang] || desc.en;\n }\n\n if ((that.data[node.key].name && that.data[node.key].name.toLowerCase().indexOf(that.currentFilter) !== -1) ||\n (title && title.toLowerCase().indexOf(that.currentFilter) !== -1) ||\n (that.data[node.key].keywords && that.data[node.key].keywords.toLowerCase().indexOf(that.currentFilter) !== -1) ||\n (desc && desc.toLowerCase().indexOf(that.currentFilter) !== -1)){\n return true;\n } else {\n return false;\n }\n } else {\n return true;\n }\n }\n\n this.getAdaptersInfo = function (host, update, updateRepo, callback) {\n if (!host) return;\n\n if (!callback) throw 'Callback cannot be null or undefined';\n if (update) {\n // Do not update too often\n if (!this.curRepoLastUpdate || ((new Date()).getTime() - this.curRepoLastUpdate > 1000)) {\n this.curRepository = null;\n this.curInstalled = null;\n }\n }\n\n if (this.curRunning) {\n this.curRunning.push(callback);\n return;\n }\n\n if (!this.curRepository || this.curRepoLastHost !== host) {\n this.curRepository = null;\n this.main.socket.emit('sendToHost', host, 'getRepository', {repo: this.main.systemConfig.common.activeRepo, update: updateRepo}, function (_repository) {\n if (_repository === 'permissionError') {\n console.error('May not read \"getRepository\"');\n _repository = {};\n }\n\n that.curRepository = _repository || {};\n if (that.curRepository && that.curInstalled && that.curRunning) {\n that.curRepoLastUpdate = (new Date()).getTime();\n setTimeout(function () {\n for (var c = 0; c < that.curRunning.length; c++) {\n that.curRunning[c](that.curRepository, that.curInstalled);\n }\n that.curRunning = null;\n }, 0);\n }\n });\n }\n if (!this.curInstalled || this.curRepoLastHost !== host) {\n this.curInstalled = null;\n this.main.socket.emit('sendToHost', host, 'getInstalled', null, function (_installed) {\n if (_installed === 'permissionError') {\n console.error('May not read \"getInstalled\"');\n _installed = {};\n }\n\n that.curInstalled = _installed || {};\n if (that.curRepository && that.curInstalled) {\n that.curRepoLastUpdate = (new Date()).getTime();\n setTimeout(function () {\n for (var c = 0; c < that.curRunning.length; c++) {\n that.curRunning[c](that.curRepository, that.curInstalled);\n }\n that.curRunning = null;\n }, 0);\n }\n });\n }\n\n this.curRepoLastHost = host;\n\n if (this.curInstalled && this.curRepository) {\n setTimeout(function () {\n if (that.curRunning) {\n for (var c = 0; c < that.curRunning.length; c++) {\n that.curRunning[c](that.curRepository, that.curInstalled);\n }\n that.curRunning = null;\n }\n if (callback) callback(that.curRepository, that.curInstalled);\n }, 0);\n } else {\n this.curRunning = [callback];\n }\n };\n\n this.enableColResize = function () {\n if (!$.fn.colResizable) return;\n if (this.$grid.is(':visible')) {\n this.$grid.colResizable({liveDrag: true});\n }\n };\n\n function getNews(actualVersion, adapter) {\n var text = '';\n if (adapter.news) {\n for (var v in adapter.news) {\n if (adapter.news.hasOwnProperty(v)) {\n if (systemLang === v) text += (text ? '\\n' : '') + adapter.news[v];\n if (v === 'en' || v === 'cn') continue;\n if (v === actualVersion) break;\n text += (text ? '\\n' : '') + (adapter.news[v][systemLang] || adapter.news[v].en);\n }\n }\n }\n return text;\n }\n\n function checkDependencies(dependencies) {\n if (!dependencies) return '';\n // like [{\"js-controller\": \">=0.10.1\"}]\n var adapters;\n if (dependencies instanceof Array) {\n adapters = {};\n for (var a = 0; a < dependencies.length; a++) {\n if (typeof dependencies[a] === 'string') continue;\n for (var b in dependencies[a]) {\n if (dependencies[a].hasOwnProperty(b)) {\n adapters[b] = dependencies[a][b];\n }\n }\n }\n } else {\n adapters = dependencies;\n }\n\n for (var adapter in adapters) {\n if (adapters.hasOwnProperty(adapter)) {\n if (adapter === 'js-controller') {\n if (!semver.satisfies(that.main.objects['system.host.' + that.main.currentHost].common.installedVersion, adapters[adapter])) return _('Invalid version of %s. Required %s', adapter, adapters[adapter]);\n } else {\n if (!that.main.objects['system.adapter.' + adapter] || !that.main.objects['system.adapter.' + adapter].common || !that.main.objects['system.adapter.' + adapter].common.installedVersion) return _('No version of %s', adapter);\n if (!semver.satisfies(that.main.objects['system.adapter.' + adapter].common.installedVersion, adapters[adapter])) return _('Invalid version of %s', adapter);\n }\n }\n }\n return '';\n }\n\n this.sortTree = function() {\n function sort(c1, c2) {\n //var d1 = that.data[c1.key], d2 = that.data[c1.key];\n var inst1 = c1.data.installed || 0, inst2 = c2.data.installed || 0;\n var ret = inst2 - inst1;\n if (ret) return ret;\n var t1 = c1.titleLang || c1.title || '';\n if (typeof t1 === 'object') {\n t1 = t1[systemLang] || t1.en;\n }\n var t2 = c2.titleLang || c2.title || '';\n if (typeof t2 === 'object') {\n t2 = t2[systemLang] || t2.en;\n }\n\n t1 = t1.toLowerCase();\n t2 = t2.toLowerCase();\n if (t1 > t2) return 1;\n if (t1 < t2) return -1;\n return 0;\n }\n that.$grid.fancytree('getRootNode').sortChildren(sort, true);\n };\n\n function getInterval(time, todayText, yesterdayText, x1DayAgoText, x2DaysAgoText, x5DaysAgoText, now) {\n now = now || Date.now();\n if (!time) return '';\n if (typeof time === 'string' || typeof time === 'number') {\n time = new Date(time);\n }\n var interval = now.getTime() - time.getTime();\n var days = Math.floor(interval / (24 * 3600000));\n if (days === 0) {\n if (now.getDate() === time.getDate()) {\n return todayText;\n } else {\n return yesterdayText;\n }\n } else if (days === 1) {\n if (now.getDate() - time.getDate() === 1) {\n return yesterdayText;\n } else {\n return x2DaysAgoText.replace('%d', days + 1);\n }\n } else {\n var t = days % 10;\n var tt = days % 100;\n // 2, 3, 4, 22, 23, 24, 32, 33, 34, 111, ...x2, x3, h4\n if ((tt < 10 || tt > 20) && t >= 2 && t <= 4) {\n return x2DaysAgoText.replace('%d', days);\n } else\n // 1, 21, 31, 41, 121....\n if ((tt < 10 || tt > 20) && t === 1) {\n return x1DayAgoText.replace('%d', days);\n } else {\n return x5DaysAgoText.replace('%d', days);\n }\n }\n }\n\n this._postInit = function (update, updateRepo) {\n if (typeof this.$grid !== 'undefined') {\n\n that.$tab.find('.process-adapters').show();\n\n this.$grid.find('tbody').html('');\n\n this.getAdaptersInfo(this.main.currentHost, update, updateRepo, function (repository, installedList) {\n var obj;\n var version;\n var rawVersion;\n var adapter;\n var adaptersToUpdate = 0;\n\n var listInstalled = [];\n var listNonInstalled = [];\n var nowObj = new Date();\n var localTexts = {\n 'add instance': _('add instance'),\n 'update': _('update'),\n 'upload': _('upload'),\n 'Available version:': _('Available version:'),\n 'Active instances': _('Active instances'),\n 'Installed version': _('Installed version'),\n 'readme': _('readme'),\n 'delete adapter': _('delete adapter'),\n 'install specific version': _('install specific version'),\n 'all': _('all'),\n 'Last update': _('Last update'),\n 'Installations counter': _('Installation counter'),\n 'today': _('today'),\n 'yesterday': _('yesterday'),\n '1 %d days ago': _('1 %d days ago'),\n '2 %d days ago': _('2 %d days ago'),\n '5 %d days ago': _('5 %d days ago')\n };\n\n if (installedList) {\n for (adapter in installedList) {\n if (!installedList.hasOwnProperty(adapter)) continue;\n obj = installedList[adapter];\n if (!obj || obj.controller || adapter === 'hosts') continue;\n listInstalled.push(adapter);\n }\n listInstalled.sort();\n }\n\n that.urls = {};\n // List of adapters for repository\n for (adapter in repository) {\n if (!repository.hasOwnProperty(adapter)) continue;\n if (installedList && installedList[adapter] && !installedList[adapter].versionDate) {\n installedList[adapter].versionDate = repository[adapter].versionDate;\n }\n\n // it is not possible to install this adapter from git\n if (!repository[adapter].nogit) {\n that.urls[adapter] = repository[adapter].meta;\n }\n obj = repository[adapter];\n if (!obj || obj.controller) continue;\n version = '';\n if (installedList && installedList[adapter]) continue;\n listNonInstalled.push(adapter);\n }\n listNonInstalled.sort();\n\n function getVersionString(version, updatable, news, updatableError) {\n //var span = getVersionSpan(version);\n var color = getVersionClass(version);\n var title = color + '\\n\\r' + (news || '');\n //version = '
    ',!x&&i.colors&&s[z].color&&(e+='
    '),!x&&i.icons&&(e+=ne(i.objects[s[z].id],i.imgPath)||'
     
    '),"enabled"===O)e+='";else if("groups"===O)for(var E=0;E'+ne(i.objects[S],null,"")+s[z].groups[E].name+""}else if("instance"===O)if(void 0!==s[z].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[z].instance?"":s[z].instance)+"";else if("icon"===O)e+=ne(i.objects[s[z].id],i.imgPath);else{var Q=s[z][O]||"";Q&&"object"==typeof Q&&Q.en&&(Q=Q[systemLang]||Q.en),e+=""+Q+""}e+="
    ';for(var P="",U=0;U ':(P+="<"+t+' data-id="'+s[z].id+'" class="select-button-'+U+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[z].parent+'" data-children="'+!!s[z].realChildren+'" title="'+(i.buttons[U].title||"")+'">',window.M&&window.M.toast&&(P+=''+(i.buttons[U].icon||"")+""),P+="");e+=P+"
    ' +\n version = //'
    ' +\n '
    ' +\n '' +\n '' +\n '
    ' + version + '';\n if (updatable) { //xxx\n version += '';\n }\n version += '
    ';\n return version;\n }\n\n that.tree = [];\n that.data = {};\n\n // list of the installed adapters\n for (var i = 0; i < listInstalled.length; i++) {\n adapter = listInstalled[i];\n\n obj = installedList ? installedList[adapter] : null;\n\n if (!obj || obj.controller || adapter === 'hosts') continue;\n var installed = '';\n var rawInstalled = '';\n var icon = obj.icon;\n version = '';\n\n if (repository[adapter] && repository[adapter].version) version = repository[adapter].version;\n\n if (repository[adapter] && repository[adapter].extIcon) icon = repository[adapter].extIcon;\n\n var _instances = 0;\n var _enabled = 0;\n if (obj.version) {\n var news = '';\n var updatable = false;\n var updatableError = '';\n if (!that.main.upToDate(version, obj.version)) {\n news = getNews(obj.version, repository[adapter]);\n // check if version is compatible with current adapters and js-controller\n updatable = true;\n updatableError = checkDependencies(repository[adapter].dependencies);\n adaptersToUpdate++;\n }\n // TODO: move style to class\n installed = '' +\n '';\n\n // Show information about installed and enabled instances\n for (var z = 0; z < that.main.instances.length; z++) {\n if (that.main.objects[that.main.instances[z]] &&\n that.main.objects[that.main.instances[z]].common.name === adapter) {\n _instances++;\n if (that.main.objects[that.main.instances[z]].common.enabled) _enabled++;\n }\n }\n\n\n if (_instances) {\n // TODO: move style to class\n installed += '';\n } else {\n // TODO: move style to class\n installed += '';\n }\n // TODO: move style to class\n installed += '';\n rawInstalled = '' + obj.version + '';\n\n //tmp = installed.split('.');\n // if (updatable) { //xxx\n // //TODO\n // // installed += '';\n // // version = version.replace('class=\"', 'class=\"updateReady ');\n // // $('a[href=\"#tab-adapters\"]').addClass('updateReady');\n // } else if (that.onlyUpdatable) {\n // continue;\n // }\n\n installed += '
    ';\n if (_enabled !== _instances) {\n installed += '' + _instances + '';\n if (_enabled) installed += ' ~ ';\n }\n if (_enabled) installed += '' + _enabled + '';\n installed += '' + obj.version + '
    ';\n if (!updatable && that.onlyUpdatable) continue;\n }\n rawVersion = version;\n version = getVersionString(version, updatable, news, updatableError);\n\n var group = (obj.type || that.types[adapter] || 'common adapters') + '_group';\n var desc = (typeof obj.desc === 'object') ? (obj.desc[systemLang] || obj.desc.en) : obj.desc;\n desc = desc || '';\n desc += showUploadProgress(group, adapter, that.main.states['system.adapter.' + adapter + '.upload'] ? that.main.states['system.adapter.' + adapter + '.upload'].val : 0);\n var title = obj.titleLang || obj.title;\n title = (typeof title === 'object') ? (title[systemLang] || title.en) : title;\n\n that.data[adapter] = {\n image: icon ? '' : '',\n icon: icon || '',\n stat: repository[adapter] ? repository[adapter].stat : 0,\n name: adapter,\n title: (title || '').replace('yunkong2 Visualisation - ', ''),\n desc: desc,\n news: news,\n updatableError: updatableError,\n keywords: obj.keywords ? obj.keywords.join(' ') : '',\n version: version,\n installed: installed,\n rawVersion: rawVersion,\n instances: _instances,\n rawInstalled: rawInstalled,\n versionDate: obj.versionDate,\n updatable: updatable,\n bold: obj.highlight || false,\n install: '' +\n '' +\n ((that.main.config.expertMode) ? '' : '') +\n '' +\n ((that.main.config.expertMode) ? '' : ''),\n // platform: obj.platform, actually there is only one platform\n group: group,\n license: obj.license || '',\n licenseUrl: obj.licenseUrl || ''\n };\n\n if (!obj.type) console.log('\"' + adapter + '\": \"common adapters\",');\n if (obj.type && that.types[adapter]) console.log('Adapter \"' + adapter + '\" has own type. Remove from admin.');\n\n if (!that.isList) {\n var iGroup = -1;\n for (var jj = 0; jj < that.tree.length; jj++) {\n if (that.tree[jj].key === that.data[adapter].group) {\n iGroup = jj;\n break;\n }\n }\n if (iGroup < 0) {\n if (!localTexts[that.data[adapter].group]) localTexts[that.data[adapter].group] = _(that.data[adapter].group);\n that.tree.push({\n title: localTexts[that.data[adapter].group],\n desc: showUploadProgress(group),\n key: that.data[adapter].group,\n folder: true,\n expanded: !that.isCollapsed[that.data[adapter].group],\n children: [],\n icon: that.groupImages[that.data[adapter].group]\n });\n iGroup = that.tree.length - 1;\n }\n that.tree[iGroup].children.push({\n icon: icon,\n title: that.data[adapter].title || adapter,\n key: adapter\n });\n } else {\n that.tree.push({\n icon: icon,\n title: that.data[adapter].title || adapter,\n key: adapter\n });\n }\n }\n //that.sortTree();\n\n if (!that.onlyInstalled && !that.onlyUpdatable) {\n for (i = 0; i < listNonInstalled.length; i++) {\n adapter = listNonInstalled[i];\n\n obj = repository[adapter];\n if (!obj || obj.controller) continue;\n version = '';\n if (installedList && installedList[adapter]) continue;\n\n if (obj && obj.version) {\n version = obj.version;\n rawVersion = version;\n version = getVersionString(version);\n }\n\n var group = (obj.type || that.types[adapter] || 'common adapters') + '_group';\n var desc = (typeof obj.desc === 'object') ? (obj.desc[systemLang] || obj.desc.en) : obj.desc;\n desc = desc || '';\n desc += showUploadProgress(group, adapter, that.main.states['system.adapter.' + adapter + '.upload'] ? that.main.states['system.adapter.' + adapter + '.upload'].val : 0);\n\n title = obj.titleLang || obj.title;\n title = (typeof title === 'object') ? (title[systemLang] || title.en) : title;\n\n that.data[adapter] = {\n image: obj.extIcon ? '' : '',\n icon: obj.extIcon,\n stat: obj.stat,\n name: adapter,\n title: (title || '').replace('yunkong2 Visualisation - ', ''),\n desc: desc,\n keywords: obj.keywords ? obj.keywords.join(' ') : '',\n rawVersion: rawVersion,\n version: version,\n bold: obj.highlight,\n installed: '',\n versionDate: obj.versionDate,\n install: '' +\n '' +\n '' +\n ((that.main.config.expertMode) ? '' : ''),\n // TODO do not show adapters not for this platform\n // platform: obj.platform, // actually there is only one platform\n license: obj.license || '',\n licenseUrl: obj.licenseUrl || '',\n group: group\n };\n\n if (!obj.type) console.log('\"' + adapter + '\": \"common adapters\",');\n if (obj.type && that.types[adapter]) console.log('Adapter \"' + adapter + '\" has own type. Remove from admin.');\n\n if (!that.isList) {\n var igroup = -1;\n for (var j = 0; j < that.tree.length; j++){\n if (that.tree[j].key === that.data[adapter].group) {\n igroup = j;\n break;\n }\n }\n if (igroup < 0) {\n if (!localTexts[that.data[adapter].group]) localTexts[that.data[adapter].group] = _(that.data[adapter].group);\n that.tree.push({\n title: localTexts[that.data[adapter].group],\n key: that.data[adapter].group,\n folder: true,\n expanded: !that.isCollapsed[that.data[adapter].group],\n children: [],\n icon: that.groupImages[that.data[adapter].group]\n });\n igroup = that.tree.length - 1;\n }\n that.tree[igroup].children.push({\n title: that.data[adapter].title || adapter,\n icon: obj.extIcon,\n desc: showUploadProgress(group),\n key: adapter\n });\n } else {\n that.tree.push({\n icon: obj.extIcon,\n title: that.data[adapter].title || adapter,\n key: adapter\n });\n }\n }\n }\n\n if (that.currentOrder === 'popular' || that.currentOrder === 'updated') {\n var akeys = Object.keys(that.data);\n\n if (that.currentOrder === 'popular') {\n akeys.sort(function (a, b) {\n if (that.data[a].stat > that.data[b].stat) return -1;\n if (that.data[a].stat < that.data[b].stat) return 1;\n return 0;\n });\n } else if (that.currentOrder === 'updated') {\n akeys.sort(function (a, b) {\n if (that.data[a].versionDate && !that.data[b].versionDate) return -1;\n if (!that.data[a].versionDate && that.data[b].versionDate) return 1;\n if (that.data[a].versionDate > that.data[b].versionDate) return -1;\n if (that.data[a].versionDate < that.data[b].versionDate) return 1;\n if (a > b) return -1;\n if (a < b) return 1;\n return 0;\n });\n }\n var newData = {};\n for (var u = 0; u < akeys.length; u++) {\n newData[akeys[u]] = that.data[akeys[u]];\n }\n that.data = newData;\n }\n\n // build tiles\n if (that.isTiles && (that.main.browser !== 'ie' || that.main.browserVersion > 10)) {\n var text = '';\n var types = [];\n for (var a in that.data) {\n if (!that.data.hasOwnProperty(a)) continue;\n var ad = that.data[a];\n if (types.indexOf(ad.group) === -1) {\n types.push(ad.group);\n }\n// text += '
    ';\n// text += '
    ';\n// text += '
    ' + ad.title + '
    ';\n// if (that.currentOrder === 'popular' && ad.stat) {\n// text += '
    ' + ad.stat + '
    ';\n// } else if (that.currentOrder === 'updated' && ad.versionDate) {\n// text += '
    ' + getInterval(ad.versionDate, localTexts['today'], localTexts['yesterday'], localTexts['1 %d days ago'], localTexts['2 %d days ago'], localTexts['5 %d days ago'], nowObj) + '
    ';\n// }\n// text += '
    ';\n// text += '
    ';\n// text += ' ';\n// text += '
    ' + ad.desc + '
    ';\n// text += '
    ';\n// text += '
    ';\n// text += '
    ' + ad.version + (ad.installed ? '' + ad.rawInstalled : '') + '
    ';\n// text += '
    ' + ad.install + '
    ';\n// text += '
    ';\n// text += '
    ';\n\n text += '
    ';\n text += '
    ';\n text += '
    ';\n text += '
    ';\n text += ' ';\n text += ' ' + ad.title + '';\n text += ' more_vert';\n text += '
      ';\n text += '
    • ' + localTexts['Available version:'] + ' ' + ad.rawVersion + '' +\n (ad.updatable ? '' : '') +\n '
    • ';\n if (ad.installed) {\n text += '
    • ' + localTexts['Installed version'] + ': '+ ad.rawInstalled + '
    • ';\n }\n if (ad.instances) {\n text += '
    • ' + _('Installed instances') + ': ' + ad.instances + '
    • ';\n }\n text += '
    ';\n text += '
    ';\n text += '
    ';\n text += '
    ';\n text += ' close';\n text += '

    ' + ad.desc + '

    ';\n text += '
    ';\n text += ad.install;\n text += '
    ';\n text += '
    ';\n\n if (that.currentOrder === 'popular' && ad.stat) {\n text += '
    ' + ad.stat + '
    ';\n } else if (that.currentOrder === 'updated' && ad.versionDate) {\n text += '
    ' + getInterval(ad.versionDate, localTexts['today'], localTexts['yesterday'], localTexts['1 %d days ago'], localTexts['2 %d days ago'], localTexts['5 %d days ago'], nowObj) + '
    ';\n }\n\n\n text += '
    ';\n text += '
    ';\n }\n\n\n // Add filtered out tile\n text += '
    ';\n text += '
    ';\n text += '
    ';\n text += '
    ';\n //text += ' ';\n text += ' ' + _('Filtered out') + '';\n text += '
    ';\n text += '
    ';\n text += '
    ';\n text += '
    ';\n\n that.$tiles.html(text);\n // init buttons\n for (var b in that.data) {\n if (that.data.hasOwnProperty(b)) {\n that.initButtons(b);\n }\n }\n\n var tTypes = '
  • ' + localTexts['all'] + '
  • \\n';\n for (var g = 0; g < types.length; g++) {\n tTypes += '
  • ' + _(types[g]) + '
  • \\n';\n }\n var $types = that.$tab.find('#main-toolbar-table-types');\n $types.html(tTypes);\n $types.find('.main-toolbar-table-types-item').show().off('click').on('click', function () {\n that.currentType = $(this).data('type') || '';\n filterTiles();\n that.$tab.find('#main-toolbar-table-types-btn').html(_(that.currentType || 'all'));\n that.main.saveConfig('adaptersCurrentType', that.currentType);\n });\n if (that.currentType && !localTexts[that.currentType]) localTexts[that.currentType] = _(that.currentType);\n that.$tab.find('#main-toolbar-table-types-btn').html(localTexts[that.currentType || 'all']).dropdown({\n constrainWidth: false, // Does not change width of dropdown to that of the activator\n // hover: true, // Activate on hover\n gutter: 0\n });\n\n $types = that.$tab.find('#main-toolbar-table-order');\n $types.find('.main-toolbar-table-order-item').off('click').on('click', function () {\n that.currentOrder = $(this).data('type') || '';\n //filterTiles();\n that.$tab.find('#main-toolbar-table-order-btn').html(_(that.currentOrder || 'a-z'));\n that.main.saveConfig('adaptersCurrentOrder', that.currentOrder);\n that._postInit();\n });\n if (that.currentOrder && !localTexts[that.currentOrder]) localTexts[that.currentOrder] = _(that.currentOrder);\n that.$tab.find('#main-toolbar-table-order-btn').show().html(localTexts[that.currentOrder || 'a-z']).dropdown({\n constrainWidth: false, // Does not change width of dropdown to that of the activator\n // hover: true, // Activate on hover\n gutter: 0\n });\n\n filterTiles();\n } else {\n that.$tab.find('#main-toolbar-table-types-btn').hide();\n that.$tab.find('#main-toolbar-table-order-btn').hide();\n // build tree\n that.$grid.fancytree('getTree').reload(that.tree);\n that.$grid.find('.fancytree-icon').each(function () {\n if ($(this).attr('src')) {\n $(this).css({width: 18, height: 18});\n }\n\n $(this).on('hover', function () {\n var text = '
    ';\n var $big = $(text);\n $big.insertAfter($(this));\n $(this).data('big', $big[0]);\n var h = parseFloat($big.height());\n var top = Math.round($(this).position().top - ((h - parseFloat($(this).height())) / 2));\n if (h + top > (window.innerHeight || document.documentElement.clientHeight)) {\n top = (window.innerHeight || document.documentElement.clientHeight) - h;\n }\n $big.css({top: top});\n\n }, function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n });\n });\n\n if (that.currentFilter) {\n that.$grid.fancytree('getTree').filterNodes(customFilter, false);\n }\n\n that.sortTree();\n that.enableColResize();\n var classes = [\n 'tab-adapters-table-name',\n 'tab-adapters-table-description',\n 'tab-adapters-table-keywords',\n 'tab-adapters-table-installed',\n 'tab-adapters-table-available',\n 'tab-adapters-table-license',\n 'tab-adapters-table-install'\n ];\n that.$grid.find('tbody tr').each(function () {\n var i = 0;\n $(this).find('td').each(function () {\n $(this).addClass(classes[i]);\n i++;\n });\n })\n }\n that.$tab.find('.grid-main-div').removeClass('order-a-z order-popular order-updated').addClass(that.currentOrder ? 'order-' + that.currentOrder : '');\n that.$tab.find('.process-adapters').hide();\n that.updateCounter(adaptersToUpdate);\n });\n } else {\n this.enableColResize();\n }\n this.restoreScroll();\n };\n this.saveScroll = function () {\n this.scrollTop = this.$tab.find('.grid-main-div').scrollTop();\n };\n this.restoreScroll = function () {\n if (this.scrollTop) {\n this.$tab.find('.grid-main-div').scrollTop(this.scrollTop);\n }\n };\n\n this.updateCounter = function (counter) {\n if (counter === undefined) {\n this.getAdaptersInfo(this.main.currentHost, false, false, function (repository, installedList) {\n var adaptersToUpdate = 0;\n\n for (var adapter in installedList) {\n if (!installedList.hasOwnProperty(adapter)) continue;\n var obj = installedList ? installedList[adapter] : null;\n if (!obj || obj.controller || adapter === 'hosts') continue;\n\n var version = '';\n if (repository[adapter] && repository[adapter].version) version = repository[adapter].version;\n\n if (obj.version && !that.main.upToDate(version, obj.version)) {\n adaptersToUpdate++;\n }\n }\n that.updateCounter(adaptersToUpdate);\n });\n } else if (counter) {\n var $updates = $('#updates-for-adapters');\n if ($updates.length) {\n $updates.text(counter);\n } else {\n $('' + counter + '').appendTo('.admin-sidemenu-items[data-tab=\"tab-adapters\"] a');\n }\n } else {\n $('#updates-for-adapters').remove();\n }\n };\n\n // ----------------------------- Adapters show and Edit ------------------------------------------------\n this.init = function (update, updateRepo) {\n if (this.inited && !update) {\n return;\n }\n\n if (!this.main.objectsLoaded) {\n setTimeout(function () {\n that.init(update, updateRepo);\n }, 250);\n return;\n }\n\n // update info\n // Required is list of hosts and repository (done in getAdaptersInfo)\n if (!this.inited) {\n this.inited = true;\n this.main.subscribeObjects('system.host.*');\n this.main.subscribeStates('system.host.*');\n }\n this.main.tabs.hosts.getHosts(function () {\n that._postInit(update, updateRepo);\n });\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.saveScroll();\n this.inited = false;\n this.main.unsubscribeObjects('system.host.*');\n this.main.unsubscribeStates('system.host.*');\n }\n };\n\n function showAddInstanceDialog(adapter, desc, callback) {\n if (that.main.tabs.hosts.list.length <= 1 && !that.main.config.expertMode) {\n return callback(true, that.main.currentHost, '');\n }\n\n var $dialogAddInstance = $('#dialog-add-instance');\n $dialogAddInstance.find('.dialog-add-instance-name').html(adapter);\n $dialogAddInstance.find('.dialog-add-description').html(desc);\n\n // fill the hosts\n var text = '';\n for (var h = 0; h < that.main.tabs.hosts.list.length; h++) {\n var host = that.main.tabs.hosts.list[h];\n text += '';\n }\n\n if (that.main.tabs.hosts.list.length <= 1) {\n $dialogAddInstance.find('.dialog-add-instance-host').addClass('disabled').prop('disabled', true);\n } else {\n $dialogAddInstance.find('.dialog-add-instance-host').removeClass('disabled').prop('disabled', false);\n }\n $dialogAddInstance.find('.dialog-add-instance-host').html(text).select();\n\n // find free instance numbers\n var min = -1;\n var used = [];\n for (var i = 0; i < that.main.tabs.instances.list.length; i++) {\n var parts = that.main.tabs.instances.list[i].split('.');\n if (parts[parts.length - 2] === adapter) {\n var index = parseInt(parts[parts.length - 1], 10);\n used.push(index);\n if (index > min) {\n min = index;\n }\n }\n }\n min += 10;\n text = '';\n for (var m = 0; m < min; m++) {\n if (used.indexOf(m) !== -1) continue;\n text += '';\n }\n $dialogAddInstance.find('.dialog-add-instance-number').html(text).select();\n $dialogAddInstance.find('.dialog-add-install-btn').off('click').on('click', function (e) {\n if (callback) {\n callback(true, $dialogAddInstance.find('.dialog-add-instance-host').val(), $dialogAddInstance.find('.dialog-add-instance-number').val());\n callback = null;\n }\n $dialogAddInstance.find('.dialog-add-cancel-btn').off('click');\n $dialogAddInstance.find('.dialog-add-instance-number').off('click');\n });\n\n $dialogAddInstance.find('.dialog-add-cancel-btn').off('click').on('click', function (e) {\n if (callback) {\n callback(false);\n callback = null;\n }\n $dialogAddInstance.find('.dialog-add-cancel-btn').off('click');\n $dialogAddInstance.find('.dialog-add-instance-number').off('click');\n });\n $dialogAddInstance.modal({\n dismissible: false,\n complete: function () {\n $dialogAddInstance.find('.dialog-add-instance-name').html('');\n }\n }).modal('open');\n }\n\n function showLicenseDialog(adapter, callback) {\n var $dialogLicense = $('#dialog-license');\n // Is adapter installed\n if (that.data[adapter].installed || !that.data[adapter].licenseUrl) {\n callback(true);\n return;\n }\n\n var timeout = setTimeout(function () {\n timeout = null;\n callback(true);\n }, 10000);\n\n if (typeof that.data[adapter].licenseUrl === 'object') {\n that.data[adapter].licenseUrl = that.data[adapter].licenseUrl[systemLang] || that.data[adapter].licenseUrl.en;\n }\n\n\n that.main.socket.emit('httpGet', that.data[adapter].licenseUrl, function (error, response, body) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n\n if (!error && body) {\n $dialogLicense.css({'z-index': 200});\n body = body.toString().replace(/\\r\\n/g, '
    ');\n body = body.replace(/\\n/g, '
    ');\n $dialogLicense.find('.license_text').html(body);\n $dialogLicense.find('.license_agreement_name').text(_(' for %s', adapter));\n\n $dialogLicense.modal({\n dismissible: false,\n complete: function () {\n $dialogLicense.find('.license_text').html('');\n }\n }).modal('open');\n\n $dialogLicense.find('.license_agree').off('click').on('click', function (e) {\n if (callback) {\n callback(true);\n callback = null;\n }\n $dialogLicense.find('.license_agree').off('click');\n $dialogLicense.find('.license_non_agree').off('click');\n });\n\n $dialogLicense.find('.license_non_agree').off('click').on('click', function (e) {\n if (callback) {\n callback(false);\n callback = null;\n }\n $dialogLicense.find('.license_agree').off('click');\n $dialogLicense.find('.license_non_agree').off('click');\n });\n } else {\n callback && callback(true);\n callback = null;\n }\n }\n });\n }\n\n this.initButtons = function (adapter) {\n this.$tab.find('.adapter-install-submit[data-adapter-name=\"' + adapter + '\"]').off('click').on('click', function () {\n var adapter = $(this).attr('data-adapter-name');\n var desc = $(this).attr('data-adapter-desc');\n\n // show config dialog\n showAddInstanceDialog(adapter, desc, function (result, host, index) {\n if (!result) return;\n\n that.getAdaptersInfo(host, false, false, function (repo, installed) {\n var obj = repo[adapter];\n\n if (!obj) obj = installed[adapter];\n\n if (!obj) return;\n\n if (obj.license && obj.license !== 'MIT') {\n // Show license dialog!\n showLicenseDialog(adapter, function (isAgree) {\n if (isAgree) {\n that.main.cmdExec(null, 'add ' + adapter + ' ' + index + ' --host ' + host, function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n }\n });\n } else {\n that.main.cmdExec(null, 'add ' + adapter + ' ' + index + ' --host ' + host, function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n }\n });\n });\n });\n\n this.$tab.find('.adapter-delete-submit[data-adapter-name=\"' + adapter + '\"]').off('click').on('click', function () {\n var name = $(this).attr('data-adapter-name');\n that.main.confirmMessage(_('Are you sure you want to delete adapter %s?', name), _('Please confirm'), 'help', function (result) {\n if (result) {\n that.main.cmdExec(null, 'del ' + name, function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n }\n });\n });\n\n this.$tab.find('.adapter-readme-submit[data-adapter-name=\"' + adapter + '\"]').off('click').on('click', function () {\n that.main.navigate({\n tab: 'adapters',\n dialog: 'readme',\n params: $(this).data('adapter-name')\n });\n });\n\n this.$tab.find('.adapter-update-submit[data-adapter-name=\"' + adapter + '\"]').off('click').on('click', function () {\n var aName = $(this).attr('data-adapter-name');\n if (aName === 'admin') that.main.waitForRestart = true;\n\n that.main.cmdExec(null, 'upgrade ' + aName, function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n });\n\n this.$tab.find('.adapter-upload-submit[data-adapter-name=\"' + adapter + '\"]').off('click').on('click', function () {\n var aName = $(this).attr('data-adapter-name');\n\n that.main.cmdExec(null, 'upload ' + aName, function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n });\n\n var $button = this.$tab.find('.adapter-update-custom-submit[data-adapter-name=\"' + adapter + '\"]');\n $button.off('click').on('click', function () {\n var versions = [];\n if (that.main.objects['system.adapter.' + adapter].common.news) {\n var news = that.main.objects['system.adapter.' + adapter].common.news;\n for (var id in news) {\n if (news.hasOwnProperty(id)) {\n versions.push(id);\n }\n }\n } else {\n versions.push(that.main.objects['system.adapter.' + adapter].common.version);\n }\n var menu = '
    ';\n for (var v = 0; v < versions.length; v++) {\n var nnews = (news[versions[v]] ? news[versions[v]][systemLang] || news[versions[v]].en : '');\n menu += '' + versions[v] + ' - ';\n }\n menu += '
    ';\n\n var $adaptersMenu = $('#adapters-menu');\n if (!$adaptersMenu.length) {\n //$adaptersMenu = $('
    ');\n $adaptersMenu = $('
    ' +\n '

    Modal Header

    ');\n $adaptersMenu.appendTo($('.materialize-dialogs').first());\n $adaptersMenu.modal();\n }\n $adaptersMenu.data('trigger', this);\n\n $adaptersMenu.find('p').html(menu);\n $adaptersMenu.find('h4').html(_('Versions of %s', adapter));\n\n $adaptersMenu.find('.adapters-versions-link').off('click').on('click', function () {\n //if ($(this).data('link')) window.open($(this).data('link'), $(this).data('instance-id'));\n $adaptersMenu.modal('close');\n var adapter = $(this).data('adapter-name');\n var version = $(this).data('version');\n if (version && adapter) {\n that.main.cmdExec(null, 'upgrade ' + adapter + '@' + version, function (exitCode) {\n if (!exitCode) that._postInit(true);\n });\n }\n });\n\n /*$(this).dropdown({\n onCloseEnd: function () {\n var $adaptersMenu = $('#adapters-menu');\n var trigger = $adaptersMenu.data('trigger');\n $(trigger).dropdown('close').dropdown('destroy');\n $adaptersMenu.data('trigger', null).hide();\n $adaptersMenu.remove();\n }\n }).dropdown('open');*/\n $adaptersMenu.modal('open');\n\n\n // does not work... must be fixed.\n //$adaptersMenu.find('.tooltipped').tooltip();\n });\n\n if (!that.main.objects['system.adapter.' + adapter]) {\n $button.hide();//addClass('disabled');\n }\n };\n\n this.objectChange = function (id, obj) {\n // Update Adapter Table\n if (id.match(/^system\\.adapter\\.[a-zA-Z0-9-_]+$/)) {\n if (obj) {\n if (this.list.indexOf(id) === -1) this.list.push(id);\n } else {\n var j = this.list.indexOf(id);\n if (j !== -1) {\n this.list.splice(j, 1);\n }\n }\n\n if (typeof this.$grid !== 'undefined' && this.$grid[0]._isInited) {\n this.init(true);\n }\n }\n };\n\n function showUploadProgress(group, adapter, percent) {\n var text = '';\n var opened;\n if (adapter || typeof group === 'string') {\n if (adapter) {\n // text += '
    ';\n opened = true;\n } else {\n percent = group;\n group = null;\n }\n //percent = 80;\n if (percent) {\n text +=\n '' +\n '' +\n '' +\n '' +\n '' +\n '
    '\n ;\n }\n //text += percent ? '
    ' : '';\n\n if (opened) {\n //text += '
    ';\n }\n return text;\n }\n\n this.stateChange = function (id, state) {\n if (id && state) {\n var adapter = id.match(/^system\\.adapter\\.([\\w\\d-]+)\\.upload$/);\n if (adapter) {\n var $adapter = this.$tab.find('.adapter-upload-progress[data-adapter-name=\"' + adapter[1] + '\"]');\n var text = showUploadProgress(state.val);\n $adapter.html(text).css({opacity: state.val ? 0.7 : 0});\n this.$tab.find('.group-upload-progress[data-adapter-group=\"' + $adapter.data('adapter-group') + '\"]').html(text).css({opacity: state.val ? 0.7 : 0});\n }\n }\n };\n}\n","function Config(main) {\n 'use strict';\n var that = this;\n this.$dialog = $('#dialog-config');\n this.$configFrame = this.$dialog.find('#config-iframe');\n this.main = main;\n\n this.prepare = function () {\n // id = 'system.adapter.NAME.X'\n $iframeDialog = this;\n };\n\n this.init = function () {\n if (this.inited) return;\n\n this.inited = true;\n\n\n var id = this.main.navigateGetParams();\n\n var parts = id.split('.');\n if (this.main.objects[id] && this.main.objects[id].common && this.main.objects[id].common.materialize) {\n this.$configFrame.attr('src', 'adapter/' + parts[2] + '/index_m.html?' + parts[3]);\n } else {\n this.$configFrame.attr('src', 'adapter/' + parts[2] + '/?' + parts[3]);\n }\n\n var name = id.replace(/^system\\.adapter\\./, '');\n this.$dialog.data('name', name);\n this.$dialog.find('.title').html(_('Adapter configuration') + ': ' + name);\n };\n\n this.allStored = function () {\n return !window.frames['config-iframe'].changed;\n };\n\n // this function is called by the configuration code in iFrame\n this.close = function () {\n that.main.navigate();\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n this.$configFrame.attr('src', '');\n\n // If after wizard some configurations must be shown\n if (typeof showConfig !== 'undefined' && showConfig && showConfig.length) {\n var configId = showConfig.shift();\n setTimeout(function () {\n that.main.navigate({\n tab: 'instances',\n dialog: 'config',\n params: configId\n });\n }, 1000);\n }\n }\n }\n}","function Customs(main) {\n 'use strict';\n\n var STR_DIFFERENT = '__different__';\n var that = this;\n this.main = main;\n this.$dialog = $('#dialog-customs');\n this.customEnabled = null;\n this.currentCustoms = null; // Id of the currently shown customs dialog\n\n var $table;\n var $outer;\n var hdr;\n var lastHistoryTimeStamp;\n\n var $tableDateFrom;\n var $tableDateTo;\n var $tableTimeFrom;\n var $tableTimeTo;\n\n var $chartDateFrom;\n var $chartDateTo;\n var $chartTimeFrom;\n var $chartTimeTo;\n\n var $historyTableInstance;\n var $historyChartInstance;\n\n // ----------------------------- CUSTOMS ------------------------------------------------\n this.check = function () {\n var found = false;\n for (var u = 0; u < this.main.instances.length; u++) {\n if (this.main.objects[this.main.instances[u]].common &&\n (this.main.objects[this.main.instances[u]].common.type === 'storage' || this.main.objects[this.main.instances[u]].common.supportCustoms) &&\n this.main.objects[this.main.instances[u]].common.enabled) {\n if (this.customEnabled !== null && this.customEnabled !== true) {\n this.customEnabled = true;\n // update customs buttons\n if (this.inited) {\n this.init(null, true);\n }\n } else {\n this.customEnabled = true;\n }\n found = true;\n return;\n }\n }\n if (this.customEnabled !== null && this.customEnabled !== false) {\n this.customEnabled = false;\n // update custom button\n if (this.inited) {\n this.init(null, true);\n }\n } else {\n this.customEnabled = false;\n }\n };\n\n this.stateChange = function (id /*, state */) {\n if (this.currentCustoms === id) {\n updateTable();\n }\n };\n\n this.initCustomsTabs = function (ids, instances) {\n var $customTabs = this.$dialog.find('#customs-tabs');\n ids = ids || [];\n $customTabs.html('');\n var wordDifferent = _(STR_DIFFERENT);\n this.defaults = {};\n var collapsed = this.main.config['object-customs-collapsed'];\n collapsed = collapsed ? collapsed.split(',') : [];\n\n var commons = {};\n var type = null;\n var role = null;\n // calculate common settings\n for (var i = 0; i < instances.length; i++) {\n var inst = instances[i].replace(/^system\\.adapter\\./, '');\n commons[inst] = {};\n for (var id = 0; id < ids.length; id++) {\n var custom = main.objects[ids[id]].common.custom;\n var sett = custom ? custom[inst] : null;\n\n if (main.objects[ids[id]].common) {\n if (type === null) {\n type = main.objects[ids[id]].common.type;\n } else if (type !== '' && type !== main.objects[ids[id]].common.type) {\n type = '';\n }\n if (role === null) {\n role = main.objects[ids[id]].common.role;\n } else if (role !== '' && role !== main.objects[ids[id]].common.role) {\n role = '';\n }\n }\n\n if (sett) {\n for (var _attr in sett) {\n if (!sett.hasOwnProperty(_attr)) continue;\n if (commons[inst][_attr] === undefined) {\n commons[inst][_attr] = sett[_attr];\n } else if (commons[inst][_attr] !== sett[_attr]) {\n commons[inst][_attr] = STR_DIFFERENT;\n }\n }\n } else {\n var a = inst.split('.')[0];\n var _default = null;\n // Try to get default values\n if (defaults[a]) {\n if (typeof defaults[a] === 'function') {\n _default = defaults[a](that.main.objects[ids[id]], that.main.objects['system.adapter.' + inst]);\n } else {\n _default = defaults[a];\n }\n } else {\n _default = this.defaults[a];\n }\n\n for (var attr in _default) {\n if (!_default.hasOwnProperty(attr)) continue;\n if (commons[inst][attr] === undefined) {\n commons[inst][attr] = _default[attr];\n } else if (commons[inst][attr] !== _default[attr]) {\n commons[inst][attr] = STR_DIFFERENT;\n }\n }\n }\n }\n }\n\n // add all tabs to div\n for (var j = 0; j < instances.length; j++) {\n // try to find settings\n var parts = instances[j].split('.');\n var adapter = parts[2];\n var instance = parts[3];\n var data = adapter + '.' + instance;\n var img = this.main.objects['system.adapter.' + adapter].common.icon;\n img = '/adapter/' + adapter + '/' + img;\n var tab =\n '
  • ' +\n '
    ' +\n ' ' + _('Settings for %s', data) +\n ' ' + _('active') + '' +\n '
    ' +\n '
    ' +\n $('script[data-template-name=\"' + adapter + '\"]').html() +\n '
    ' +\n '
  • ';\n\n var $tab = $(tab);\n this.defaults[adapter] = {};\n // set values\n $tab.find('input, select').each(function() {\n var $this = $(this);\n $this.attr('data-instance', adapter + '.' + instance);\n var field = $this.attr('data-field');\n var def = $this.attr('data-default');\n if (def === 'true') def = true;\n if (def === 'false') def = false;\n if (def !== undefined && def.toString().replace(/\\+/, '') === parseFloat(def).toString()) {\n def = parseFloat(def);\n }\n\n that.defaults[adapter][field] = def;\n if (field === 'enabled') {\n $this.on('click', function (event) {\n event.stopPropagation();\n if ($(this).prop('checked')) {\n\n } else {\n\n }\n });\n }\n });\n\n $customTabs.append($tab);\n // post init => add custom logic\n if (customPostInits.hasOwnProperty(adapter) && typeof customPostInits[adapter] === 'function') {\n customPostInits[adapter]($tab, commons[adapter + '.' + instance], that.main.objects['system.adapter.' + adapter + '.' + instance], type, role);\n }\n }\n\n // set values\n $customTabs.find('input, select').each(function() {\n var $this = $(this);\n var instance = $this.data('instance');\n var adapter = instance.split('.')[0];\n var attr = $this.data('field');\n\n if (commons[instance][attr] !== undefined) {\n if ($this.attr('type') === 'checkbox') {\n if (commons[instance][attr] === STR_DIFFERENT) {\n /*$('').insertBefore($this);\n $this.hide().attr('data-field', '').data('field', '');*/\n $this[0].indeterminate = true;\n } else {\n $this.prop('checked', commons[instance][attr]);\n }\n } else {\n if (commons[instance][attr] === STR_DIFFERENT) {\n if ($this.attr('type') === 'number') {\n $this.attr('type', 'text');\n }\n if ($this.prop('tagName').toUpperCase() === 'SELECT'){\n $this.prepend('');\n $this.val(wordDifferent);\n } else {\n $this.val('').attr('placeholder', wordDifferent);\n }\n } else {\n $this.val(commons[instance][attr]);\n }\n }\n } else {\n var def;\n if (that.defaults[adapter] && that.defaults[adapter][attr] !== undefined) {\n def = that.defaults[adapter][attr];\n }\n if (def !== undefined) {\n if ($this.attr('type') === 'checkbox') {\n $this.prop('checked', def);\n } else {\n $this.val(def);\n }\n }\n }\n\n if ($this.attr('type') === 'checkbox') {\n $this.on('change', function () {\n that.$dialog.find('.dialog-system-buttons .btn-save').removeClass('disabled');\n if ($(this).data('field') === 'enabled') {\n var instance = $this.data('instance');\n var $headerActive = $customTabs.find('.activated[data-adapter=\"' + instance + '\"]');\n if ($(this).prop('checked')) {\n $headerActive.css('opacity', 1);\n } else {\n $headerActive.css('opacity', 0);\n }\n }\n });\n } else {\n $this.on('change', function () {\n that.$dialog.find('.dialog-system-buttons .btn-save').removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n }\n });\n\n this.showCustomsData(ids.length > 1 ? null : ids[0]);\n this.$dialog.find('.dialog-system-buttons .btn-save').addClass('disabled');\n translateAll('#dialog-customs');\n var $collapsible = that.$dialog.find('.collapsible');\n $collapsible.collapsible({\n onOpenEnd: function (el) {\n // store settings\n var _collapsed = that.main.config['object-customs-collapsed'];\n _collapsed = _collapsed ? _collapsed.split(',') : [];\n var id = $(el).data('adapter');\n var pos = _collapsed.indexOf(id);\n if (pos !== -1) _collapsed.splice(pos, 1);\n that.main.saveConfig('object-customs-collapsed', _collapsed.join(','));\n },\n onCloseEnd: function (el) {\n // store settings\n var _collapsed = that.main.config['object-customs-collapsed'];\n _collapsed = _collapsed ? _collapsed.split(',') : [];\n var id = $(el).data('adapter');\n var pos = _collapsed.indexOf(id);\n if (pos === -1) _collapsed.push(id);\n that.main.saveConfig('object-customs-collapsed', _collapsed.join(','));\n }\n });\n\n that.$dialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();//.addClass('filled-in');\n if (!$input.prop('disabled')) {\n if ($input[0].indeterminate) {\n $input[0].indeterminate = false;\n $input.prop('checked', true).trigger('change');\n } else {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n }\n });\n $customTabs.find('select').select();\n M.updateTextFields('#dialog-customs');\n\n this.resizeHistory();\n };\n\n function installColResize() {\n if (!$.fn.colResizable) return;\n if ($outer.is(':visible')) {\n if (!$outer.data('inited')) {\n hdr = new IobListHeader('grid-history-header', {list: $outer, colWidthOffset: 1, prefix: 'log-filter'});\n\n // todo define somehow the width of every column\n hdr.add('text', 'val');\n hdr.add('text', 'ack');\n hdr.add('text', 'from');\n hdr.add('text', 'ts');\n hdr.add('text', 'lc');\n }\n\n // Fix somehow, that columns have different widths\n $outer.colResizable({\n liveDrag: true,\n\n partialRefresh: true,\n marginLeft: 5,\n postbackSafe:true,\n\n onResize: function (event) {\n return hdr.syncHeader();\n }\n });\n\n hdr.syncHeader();\n } else {\n setTimeout(function () {\n installColResize();\n }, 200)\n }\n }\n\n function updateTable(delay) {\n // Load data again from adapter\n if (delay) {\n if (that.historyTimeout) {\n clearTimeout(that.historyTimeout)\n }\n } else if (that.historyTimeout) {\n return;\n }\n\n that.historyTimeout = setTimeout(function () {\n that.historyTimeout = null;\n if ($historyTableInstance) {\n that.loadHistoryTable($historyTableInstance.data('id'), true);\n }\n }, delay || 5000);\n }\n\n function download(filename, text) {\n var element = document.createElement('a');\n element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));\n element.setAttribute('download', filename);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n this.loadHistoryTable = function (id, isSilent, isDownload) {\n $outer = $outer || that.$dialog.find('#grid-history');\n $table = $table || that.$dialog.find('#grid-history-body');\n\n if (!isSilent) {\n $table.html('' + _('Loading...') + '');\n }\n\n var request = {\n aggregate: 'none',\n instance: $historyTableInstance.val(),\n from: true,\n ack: true,\n q: true\n };\n\n if (!$tableDateFrom) {\n $tableDateFrom = this.$dialog.find('#tab-customs-table .datepicker.date-from');\n $tableDateTo = this.$dialog.find('#tab-customs-table .datepicker.date-to');\n $tableTimeFrom = this.$dialog.find('#tab-customs-table .timepicker.time-from');\n $tableTimeTo = this.$dialog.find('#tab-customs-table .timepicker.time-to');\n }\n\n var dateFrom = $tableDateFrom.val() ? M.Datepicker.getInstance($tableDateFrom).toString('yyyy.mm.dd') : '';\n var timeFrom = $tableTimeFrom.val();\n var dateTo = $tableDateTo.val() ? M.Datepicker.getInstance($tableDateTo).toString('yyyy.mm.dd') : '';\n var timeTo = $tableTimeTo.val();\n var empty = true;\n if (dateTo) {\n dateTo = new Date(dateTo);\n empty = false;\n dateTo.setHours(23);\n dateTo.setMinutes(59);\n dateTo.setSeconds(59);\n dateTo.setMilliseconds(999);\n } else {\n dateTo = new Date();\n }\n if (timeTo) {\n var parts = timeTo.split(':');\n dateTo.setHours(parts[0]);\n dateTo.setMinutes(parts[1]);\n dateTo.setSeconds(59);\n dateTo.setMilliseconds(999);\n empty = false;\n }\n dateTo = dateTo.getTime();\n if (empty) dateTo += 10000;\n request.end = dateTo;\n\n if (dateFrom || timeFrom) {\n dateFrom = new Date(dateFrom || dateTo);\n if (timeFrom) {\n var part__ = timeFrom.split(':');\n dateFrom.setHours(part__[0]);\n dateFrom.setMinutes(part__[1]);\n } else {\n dateFrom.setHours(0);\n dateFrom.setMinutes(0);\n }\n dateFrom.setSeconds(0);\n dateFrom.setMilliseconds(0);\n request.start = dateFrom.getTime();\n } else {\n request.count = 50;\n }\n var fileName;\n if (isDownload) {\n fileName = new Date(dateTo).toISOString() + '_' + (request.start ? new Date(request.start) : request.count + 'points') + '_' + id + '__' + request.instance + '.csv';\n }\n\n\n main.socket.emit('getHistory', id, request, function (err, res) {\n setTimeout(function () {\n var csv = 'value;acknowledged;from;timestamp;lastchanged;\\n';\n if (!err) {\n var text = '';\n if (res && res.length) {\n for (var i = res.length - 1; i >= 0; i--) {\n var from = (res[i].from || '').replace('system.adapter.', '').replace('system.', '');\n text += ' lastHistoryTimeStamp ? 'highlight' : '') + '\">' +\n ' ' + res[i].val + '' +\n ' ' + res[i].ack + '' +\n ' ' + from + '' +\n ' ' + main.formatDate(res[i].ts) + '' +\n ' ' + main.formatDate(res[i].lc) + '' +\n '\\n';\n\n if (isDownload) {\n csv += res[i].val + ';' + res[i].ack + ';' + (from || '') + ';' + (res[i].ts ? new Date(res[i].ts).toISOString() : '') + ';' + (res[i].lc ? new Date(res[i].lc).toISOString() : '') + ';\\n';\n }\n }\n lastHistoryTimeStamp = res[res.length - 1].ts;\n } else {\n text = '' + _('No data') + ''\n }\n $table.html(text);\n } else {\n console.error(err);\n $table.html('' + err + '');\n }\n installColResize();\n if (isDownload) {\n download(fileName, csv);\n }\n }, 0);\n });\n };\n\n this.loadHistoryChart = function (id) {\n if (!$chartDateFrom) {\n $chartDateFrom = this.$dialog.find('#tab-customs-chart .datepicker.date-from');\n $chartDateTo = this.$dialog.find('#tab-customs-chart .datepicker.date-to');\n }\n\n if (id) {\n var port = 0;\n var chart = false;\n var isSecure = false;\n for (var i = 0; i < this.main.instances.length; i++) {\n if (this.main.objects[main.instances[i]].common.name === 'flot' && this.main.objects[this.main.instances[i]].common.enabled) {\n chart = 'flot';\n } else\n if (!chart && this.main.objects[main.instances[i]].common.name === 'rickshaw' && this.main.objects[this.main.instances[i]].common.enabled) {\n chart = 'rickshaw';\n } else\n if (this.main.objects[this.main.instances[i]].common.name === 'web' && this.main.objects[this.main.instances[i]].common.enabled) {\n port = this.main.objects[this.main.instances[i]].native.port;\n isSecure = this.main.objects[this.main.instances[i]].native.secure;\n }\n if (chart === 'flot' && port) break;\n }\n var $chart = this.$dialog.find('#iframe-history-chart');\n\n var linkTemplate = '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';\n linkTemplate = linkTemplate.replace('{isSecure}', (isSecure ? 's' : ''));\n linkTemplate = linkTemplate.replace('{hostname}', location.hostname);\n linkTemplate = linkTemplate.replace('{port}', port);\n linkTemplate = linkTemplate.replace('{chart}', chart);\n linkTemplate = linkTemplate.replace('{instance}', that.$dialog.find('#tab-customs-chart .select-instance').val());\n linkTemplate = linkTemplate.replace('{id}', encodeURI(id));\n linkTemplate = linkTemplate.replace('{comma}', that.main.systemConfig && that.main.systemConfig.common && that.main.systemConfig.isFloatComma);\n\n // find out\n $chart.attr('src', linkTemplate);//'http' + (isSecure ? 's' : '') + '://' + location.hostname + ':' + port + '/' + chart + '/index.html?range=1440&zoom=true&axeX=lines&axeY=inside&_ids=' + encodeURI(id) + '&width=' + ($chart.width() - 50) + '&hoverDetail=true&height=' + ($chart.height() - 50) + '&aggregate=onchange&chartType=step&live=30&instance=' + that.$dialog.find('#tab-customs-chart .select-instance').val());\n } else {\n this.$dialog.find('#iframe-history-chart').attr('src', '');\n }\n };\n\n this.showCustomsData = function (id) {\n var $tabs = this.$dialog.find('#tabs-customs');\n\n var port = 0;\n var chart = false;\n\n initTab('tab-customs-settings');\n\n if (id) {\n $tabs.data('id', id);\n\n // Check if chart enabled and set\n for (var i = 0; i < main.instances.length; i++) {\n if (main.objects[main.instances[i]].common.name === 'flot' && main.objects[main.instances[i]].common.enabled) {\n chart = 'flot';\n } else\n if (!chart && main.objects[main.instances[i]].common.name === 'rickshaw' && main.objects[main.instances[i]].common.enabled) {\n chart = 'rickshaw';\n } else\n if (main.objects[main.instances[i]].common.name === 'web' && main.objects[main.instances[i]].common.enabled) {\n port = main.objects[main.instances[i]].native.port;\n }\n if (chart === 'flot' && port) break;\n }\n that.loadHistoryTable(id);\n\n $tabs.find('.tabs .tab-table').removeClass('disabled');\n\n if (port && chart && that.currentCustoms) {\n $tabs.find('.tabs .tab-chart').removeClass('disabled');\n } else {\n $tabs.find('.tabs .tab-chart').addClass('disabled');\n }\n } else {\n $tabs.find('.tabs .tab-table').addClass('disabled');\n $tabs.find('.tabs .tab-chart').addClass('disabled');\n }\n };\n\n function getCustomTemplate(adapter, callback) {\n $.ajax({\n headers: {\n Accept: 'text/html'\n },\n cache: true,\n url: '/adapter/' + adapter + '/custom_m.html',\n success: function (_data) {\n callback(null, _data);\n },\n error: function (jqXHR) {\n // todo: remove some days 2017.12.19 (for admin2)\n $.ajax({\n headers: {\n Accept: 'text/html'\n },\n cache: true,\n url: '/adapter/' + adapter + '/custom.html',\n success: function (_data) {\n callback(null, _data);\n },\n error: function (jqXHR) {\n callback(jqXHR.responseText);\n }\n });\n }\n });\n }\n\n // Set modified custom states\n this.setCustoms = function (ids, callback) {\n var id = ids.pop();\n if (id) {\n this.$dialog.find('#tab-customs-settings .title').html(_('Adapter settings for %s states', ids.length));\n\n that.main.socket.emit('setObject', id, this.main.objects[id], function (err) {\n if (err) {\n that.main.showMessage(_(err), _('Error'), 'error_outline');\n } else {\n setTimeout(function () {\n that.setCustoms(ids, callback);\n }, 50);\n }\n });\n } else {\n if (callback) callback();\n }\n };\n\n this.resizeHistory = function () {\n // resize only if chart is visible\n var $iFrame = this.$dialog.find('#iframe-history-chart');\n if ($iFrame.attr('src')) {\n var timeout = $iFrame.data('timeout');\n if (timeout) clearTimeout(timeout);\n\n $iFrame.data('timeout', setTimeout(function () {\n that.$dialog.find('#iframe-history-chart').data('timeout', null);\n that.loadHistoryChart(that.$dialog.find('#tabs-customs').data('id')); // reinit iframe\n }, 1000));\n }\n };\n\n function onButtonSave(e) {\n e.stopPropagation();\n e.preventDefault();\n\n var $tabs = that.$dialog.find('#customs-tabs');\n var ids = $tabs.data('ids');\n\n // do not update charts\n that.currentCustoms = null;\n var wordDifferent = _(STR_DIFFERENT);\n\n // collect default values\n var $inputs = $tabs.find('input, select');\n\n //that.historyIds = ids;\n $inputs.each(function () {\n var instance = $(this).data('instance');\n var field = $(this).data('field');\n if (!field) return;\n\n var val;\n if ($(this).attr('type') === 'checkbox') {\n if (this.indeterminate) return;\n val = $(this).prop('checked');\n } else {\n val = $(this).val();\n }\n // if not changed\n if (val === wordDifferent) return;\n\n if (val === null) val = '';\n if (val === undefined) val = '';\n if (val === 'false') val = false;\n if (val === 'true') val = true;\n var f = parseFloat(val);\n // replace trailing 0 and prefix +\n if (val.toString().replace(/^\\+/, '').replace(/([0-9]+(\\.[0-9]+[1-9])?)(\\.?0+$)/,'$1') === f.toString()) {\n val = f;\n }\n\n for (var i = 0; i < ids.length; i++) {\n var custom = that.main.objects[ids[i]].common.custom;\n custom = that.main.objects[ids[i]].common.custom = custom || {};\n\n if (custom[instance] === undefined) {\n var adapter = instance.split('.')[0];\n var _default;\n // Try to get default values\n if (defaults[adapter]) {\n if (typeof defaults[adapter] === 'function') {\n _default = defaults[adapter](that.main.objects[ids[i]], that.main.objects['system.adapter.' + instance]);\n } else {\n _default = defaults[adapter];\n }\n } else {\n _default = that.defaults[adapter];\n }\n custom[instance] = _default || {};\n }\n custom[instance][field] = val;\n }\n });\n\n\n if (ids) {\n that.$dialog.find('.dialog-system-buttons .btn-save').addClass('disabled');\n\n for (var i = 0; i < ids.length; i++) {\n var found = false;\n var custom_ = that.main.objects[ids[i]].common.custom;\n for (var inst in custom_) {\n if (!custom_.hasOwnProperty(inst)) continue;\n if (!custom_[inst].enabled) {\n delete custom_[inst];\n } else {\n found = true;\n }\n }\n if (!found) {\n that.main.objects[ids[i]].common.custom = null;\n }\n }\n that.setCustoms(ids, function () {\n // disable iframe\n that.loadHistoryChart(); // disable iframe\n that.main.navigate();\n });\n }\n\n }\n\n // return true if all data are stored\n this.allStored = function () {\n return that.$dialog.find('.dialog-system-buttons .btn-save').hasClass('disabled');\n };\n\n function initTab(id) {\n switch (id) {\n case 'tab-customs-settings':\n that.loadHistoryChart(); // disable iframe\n break;\n\n case 'tab-customs-table':\n $historyTableInstance.select();\n that.loadHistoryChart(); // disable iframe\n break;\n\n case 'tab-customs-chart':\n that.$dialog.find('#tab-customs-chart .select-instance').select();\n var $tabs = that.$dialog.find('#tabs-customs');\n that.loadHistoryChart($tabs.data('id')); // init iframe\n break;\n }\n }\n\n this.init = function (_ids, isUpdate) {\n if (this.inited && !isUpdate) {\n return;\n }\n\n var ids = this.main.navigateGetParams();\n\n if (ids) {\n ids = ids.split(',');\n }\n // if the list of IDs is too long, it was saved into this.ids\n if (!ids || !ids.length) {\n ids = this.ids;\n this.ids = undefined;\n }\n var instances = [];\n\n // clear global defaults object\n this.defaults = {};\n\n // collect all custom instances\n var count = 0;\n var data = '';\n var urls = [];\n for (var u = 0; u < this.main.instances.length; u++) {\n var inst = this.main.objects[this.main.instances[u]];\n if (inst && inst.common && (inst.common.type === 'storage' || inst.common.supportCustoms)) {\n instances.push(this.main.instances[u]);\n var url = this.main.instances[u].split('.');\n if (urls.indexOf(url[2]) === -1) {\n urls.push(url[2]);\n count++;\n getCustomTemplate(url[2], function (err, result) {\n if (err) console.error(err);\n if (result) data += result;\n if (!--count) {\n that.$dialog.find('#customs-templates').html(data);\n that.initCustomsTabs(ids, instances);\n }\n });\n }\n }\n }\n var _instances = [];\n if (ids) {\n for (var i = ids.length - 1; i >= 0; i--) {\n if (!this.main.objects[ids[i]]) {\n console.warn('Null object: ' + ids[i]);\n ids.splice(i, 1);\n } else {\n var custom = this.main.objects[ids[i]].common.custom;\n if (custom) {\n var found = false;\n // delete disabled entries\n for (var h in custom) {\n if (!custom.hasOwnProperty(h)) continue;\n if (custom[h].enabled === false) {\n delete custom[h];\n } else {\n if (ids.length === 1) _instances.push(h);\n found = true;\n }\n }\n if (!found) {\n delete this.main.objects[ids[i]].common.custom;\n }\n }\n }\n }\n }\n\n var title;\n $historyTableInstance = this.$dialog.find('#tab-customs-table .select-instance');\n $historyChartInstance = this.$dialog.find('#tab-customs-chart .select-instance');\n var $historyTableInstanceBtn = this.$dialog.find('#tab-customs-table .refresh');\n var $historyTableDownloadBtn = this.$dialog.find('#tab-customs-table .download');\n var $historyChartInstanceBtn = this.$dialog.find('#tab-customs-chart .refresh');\n\n if (ids && ids.length === 1) {\n title = _('Storage of %s', ids[0]);\n this.currentCustoms = _instances.length ? ids[0] : null;\n var text = '';\n for (var k = 0; k < _instances.length; k++) {\n var insta = this.main.objects['system.adapter.' + _instances[k]];\n if (insta && insta.common && (insta.common.enabled ||\n (this.main.states['system.adapter.' + _instances[k] + '.alive'] && this.main.states['system.adapter.' + _instances[k] + '.alive'].val))) {\n text += '\\n';\n }\n }\n if (text) {\n $historyTableInstance\n .data('id', ids[0])\n .html(text)\n .show()\n .off('change')\n .on('change', function () {\n that.main.saveConfig('object-history-table', $historyTableInstance.val());\n that.loadHistoryTable($(this).data('id'));\n }).select();\n\n $historyChartInstance\n .data('id', ids[0])\n .html(text)\n .show()\n .off('change')\n .on('change', function () {\n that.main.saveConfig('object-history-chart', $historyChartInstance.val());\n that.loadHistoryChart($(this).data('id')); // reinit iframe\n }).select();\n\n if (this.main.config['object-history-table'] !== undefined) {\n $historyTableInstance.val(this.main.config['object-history-table'])\n }\n if (this.main.config['object-history-chart'] !== undefined) {\n $historyChartInstance.val(this.main.config['object-history-chart'])\n }\n $historyTableInstanceBtn\n .data('id', ids[0])\n .show()\n .off('click')\n .on('click', function () {\n that.$dialog.find('#grid-history-body').html('');\n that.loadHistoryTable($(this).data('id'));\n });\n $historyChartInstanceBtn\n .data('id', ids[0])\n .show()\n .off('click').on('click', function () {\n that.loadHistoryChart($(this).data('id')); // reinit iframe\n });\n\n $historyTableDownloadBtn\n .data('id', ids[0])\n .show()\n .off('click')\n .on('click', function () {\n that.loadHistoryTable($(this).data('id'), false, true);\n });\n\n var yesterday = new Date();\n yesterday.setDate(yesterday.getDate() - 1);\n var i18n = {\n today: _('Today'),\n clear: _('Clear'),\n done: _('Ok'),\n months : [_('January'),_('February'),_('March'),_('April'),_('May'),_('June'),_('July'),_('August'),_('September'),_('October'),_('November'),_('December')],\n monthsShort : [_('Jan'),_('Feb'),_('Mar'),_('Apr'),_('May'),_('Jun'),_('Jul'),_('Aug'),_('Sep'),_('Oct'),_('Nov'),_('Dec')],\n weekdaysShort : [_('Sun'),_('Mon'),_('Tue'),_('Wed'),_('Thu'),_('Fri'),_('Sat')],\n weekdays : [_('Sunday'),_('Monday'),_('Tuesday'),_('Wednesday'),_('Thursday'),_('Friday'),_('Saturday')],\n weekdaysAbbrev : ['S','M','T','W','T','F','S']\n };\n for (var n = 0; n < i18n.weekdaysAbbrev.length; n++) {\n i18n.weekdaysAbbrev[n] = i18n.weekdaysShort[n][0];\n }\n if (!$tableDateFrom) {\n $tableDateFrom = this.$dialog.find('#tab-customs-table .datepicker.date-from');\n $tableDateTo = this.$dialog.find('#tab-customs-table .datepicker.date-to');\n $tableTimeFrom = this.$dialog.find('#tab-customs-table .timepicker.time-from');\n $tableTimeTo = this.$dialog.find('#tab-customs-table .timepicker.time-to');\n\n $chartDateFrom = this.$dialog.find('#tab-customs-chart .datepicker.date-from');\n $chartDateTo = this.$dialog.find('#tab-customs-chart .datepicker.date-to');\n }\n\n $tableDateFrom.datepicker({\n defaultDate: yesterday,\n showDaysInNextAndPreviousMonths: true,\n minYear: 2014,\n maxYear: 2032,\n i18n: i18n,\n setDefaultDate: true,\n firstDay: 1,\n onSelect: function (date) {\n $tableDateFrom.datepicker('setInputValue');\n $tableDateFrom.datepicker('close');\n }\n });\n $tableDateFrom.on('change', function () {\n updateTable(1000);\n });\n\n $tableTimeFrom.timepicker({\n defaultTime: '00:00',\n twelveHour: false, // TODO\n doneText: _('Ok'),\n clearText: _('Clear'),\n cancelText: _('Cancel'),\n autoClose: true\n });\n $tableTimeFrom.on('change', function () {\n updateTable(1000);\n });\n\n $tableTimeTo.timepicker({\n defaultTime: 'now',\n twelveHour: false, // TODO\n doneText: _('Ok'),\n clearText: _('Clear'),\n cancelText: _('Cancel'),\n autoClose: true\n });\n $tableTimeTo.on('change', function () {\n updateTable(1000);\n });\n\n $tableDateTo.datepicker({\n defaultDate: new Date(),\n showDaysInNextAndPreviousMonths: true,\n minYear: 2014,\n maxYear: 2032,\n i18n: i18n,\n setDefaultDate: true,\n firstDay: 1,\n onSelect: function (date) {\n $tableDateTo.datepicker('setInputValue');\n $tableDateTo.datepicker('close');\n }\n });\n $tableDateTo.on('change', function () {\n updateTable(1000);\n });\n\n\n $chartDateFrom.datepicker({\n defaultDate: yesterday,\n showDaysInNextAndPreviousMonths: true,\n minYear: 2014,\n maxYear: 2032,\n i18n: i18n,\n setDefaultDate: true,\n firstDay: 1,\n onSelect: function (date) {\n $chartDateFrom.datepicker('setInputValue');\n $chartDateFrom.datepicker('close');\n }\n });\n $chartDateFrom.on('change', function () {\n that.loadHistoryChart($historyChartInstance.data('id'));\n });\n $chartDateTo.datepicker({\n defaultDate: new Date(),\n showDaysInNextAndPreviousMonths: true,\n minYear: 2014,\n maxYear: 2032,\n i18n: i18n,\n setDefaultDate: true,\n firstDay: 1,\n onSelect: function (date) {\n $chartDateTo.datepicker('setInputValue');\n $chartDateTo.datepicker('close');\n }\n });\n $chartDateTo.on('change', function () {\n that.loadHistoryChart($historyChartInstance.data('id'));\n });\n } else {\n $historyTableInstance.hide();\n $historyChartInstance.hide();\n $historyTableInstanceBtn.hide();\n $historyChartInstanceBtn.hide();\n $historyTableDownloadBtn.hide();\n }\n if (this.currentCustoms) {\n that.main.subscribeStates(this.currentCustoms);\n }\n this.$dialog.find('#tab-customs-table .title').html(_('Values of %s', ids[0]));\n this.$dialog.find('#tab-customs-chart .title').html(_('Chart for %s', ids[0]));\n } else if (ids) {\n $historyTableInstance.hide();\n $historyChartInstance.hide();\n $historyTableInstanceBtn.hide();\n $historyChartInstanceBtn.hide();\n $historyTableDownloadBtn.hide();\n title = _('Storage of %s states', ids.length);\n this.currentCustoms = null;\n }\n\n this.$dialog.find('#tab-customs-settings .title').html(title);\n\n var $tabs = this.$dialog.find('#tabs-customs');\n $tabs.find('.tabs').mtabs({\n onShow: function (tab) {\n if (!tab) return;\n initTab($(tab).attr('id'));\n }\n });\n this.$dialog.find('#customs-tabs').data('ids', ids);\n that.$dialog.find('.dialog-system-buttons .btn-save').off('click').on('click', onButtonSave);\n that.$dialog.find('.dialog-system-buttons .btn-cancel').off('click').on('click', function (e) {\n e.stopPropagation();\n e.preventDefault();\n if (!that.$dialog.find('.dialog-system-buttons .btn-save').hasClass('disabled')) {\n that.main.confirmMessage(_('Are you sure? Changes are not saved.'), _('Please confirm'), 'error_outline', function (result) {\n if (result) {\n that.$dialog.find('.dialog-system-buttons .btn-save').addClass('disabled');\n // disable iframe\n that.loadHistoryChart();\n that.main.navigate();\n }\n });\n } else {\n // disable iframe\n that.loadHistoryChart();\n that.main.navigate();\n }\n });\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.$dialog.find('.collapsible').collapsible('destroy');\n this.inited = false;\n // disable iframe\n this.loadHistoryChart();\n if (this.currentCustoms) {\n that.main.unsubscribeStates(this.currentCustoms);\n }\n }\n };\n\n return this;\n}\n","function EditObject(main) {\n 'use strict';\n\n var that = this;\n this.$dialog = $('#dialog-editobject');\n this.$dialogNewField = $('#dialog-new-field');\n this.main = main;\n this.prepared = false;\n this.inited = false;\n this.$dialogSave = this.$dialog.find('.dialog-editobject-buttons .btn-save');\n this.iconVal = null;\n\n function loadObjectFields(selector, object, part, objectType) {\n var text = '';\n for (var attr in object) {\n if (!object.hasOwnProperty(attr) || (part === 'common' && (attr === 'name' || attr === 'icon'))) continue;\n\n if (false && objectType === 'state' && part === 'common' && attr === 'role') { // autocomplete is temporally disabled because buggy\n text += '
    ' +\n 'textsms' +\n '';\n } else {\n text += '
    \\n
    \\n';\n if (objectType === 'state' && part === 'common' && attr === 'type') {\n text += '';\n } else if (typeof object[attr] === 'string') {\n text += '\\n';\n } else if (typeof object[attr] === 'number') {\n text += '\\n';\n } else if (typeof object[attr] === 'boolean') {\n text += '\\n';\n } else {\n text += '\\n';\n }\n }\n\n var title = attr;\n // translations\n if (part === 'common' && systemDictionary['common_' + attr] && systemDictionary['common_' + attr][systemLang]) {\n title = _('common_' + attr);\n }\n\n // workaround for materialize\n if (typeof object[attr] === 'boolean') {\n text += '' + title + '\\n';\n } else {\n text += '\\n';\n }\n\n text += '
    \\n\\n';\n text += '
    \\n';\n }\n\n that.$dialog.find(selector).html(text);\n /*that.$dialog.find(selector).find('.autocomplete').each(function () {\n $(this).mautocomplete({\n data: {\n 'state': null,\n 'switch': null,\n 'button': null,\n 'value': null,\n 'level': null,\n 'indicator': null,\n 'value.temperature': null,\n 'value.humidity': null,\n 'level.temperature': null,\n 'level.dimmer': null\n },\n minLength: 0 // The minimum length of the input for the autocomplete to start. Default: 1.\n });\n });*/\n }\n\n function saveObjectFields(selector, object) {\n var $htmlId = that.$dialog.find(selector);\n $htmlId.find('.object-tab-edit-string').each(function () {\n object[$(this).data('attr')] = $(this).val();\n });\n $htmlId.find('.object-tab-edit-number').each(function () {\n object[$(this).data('attr')] = parseFloat($(this).val());\n });\n $htmlId.find('.object-tab-edit-boolean').each(function () {\n object[$(this).data('attr')] = $(this).prop('checked');\n });\n var err = null;\n $htmlId.find('.object-tab-edit-object').each(function () {\n try {\n object[$(this).data('attr')] = JSON.parse($(this).val());\n } catch (e) {\n err = $(this).data('attr');\n return false;\n }\n });\n\n if (object.write !== undefined) {\n if (object.write === 'false' || object.write === '0' || object.write === 0) object.write = false;\n if (object.write === 'true' || object.write === '1' || object.write === 1) object.write = true;\n }\n\n if (object.read !== undefined) {\n if (object.read === 'false' || object.read === '0' || object.read === 0) object.read = false;\n if (object.read === 'true' || object.read === '1' || object.read === 1) object.read = true;\n }\n\n if (object.min === null) {\n delete object.min;\n }\n if (object.min !== undefined) {\n var f = parseFloat(object.min);\n if (f.toString() === object.min.toString()) object.min = f;\n\n if (object.min === 'false') object.min = false;\n if (object.min === 'true') object.min = true;\n }\n if (object.max === null) {\n delete object.max;\n }\n if (object.max !== undefined) {\n var m = parseFloat(object.max);\n if (m.toString() === object.max.toString()) object.max = m;\n\n if (object.max === 'false') object.max = false;\n if (object.max === 'true') object.max = true;\n }\n if (object.def === null) {\n delete object.def;\n }\n\n if (object.def !== undefined) {\n var d = parseFloat(object.def);\n if (d.toString() === object.def.toString()) object.def = d;\n\n if (object.def === 'false') object.def = false;\n if (object.def === 'true') object.def = true;\n }\n\n // common part cannot have \"true\" or \"false\". Only true and false.\n if (selector.indexOf('common') !== -1) {\n for (var attr in object) {\n if (object.hasOwnProperty(attr)) {\n if (object[attr] === 'true') {\n object[attr] = true;\n }\n if (object[attr] === 'false') {\n object[attr] = false;\n }\n if (parseFloat(object[attr]).toString() === object[attr]) {\n object[attr] = parseFloat(object[attr]);\n }\n }\n }\n }\n\n return err;\n }\n\n function showMessage(text, duration, isError) {\n if (typeof duration === 'boolean') {\n isError = duration;\n duration = 3000;\n }\n that.main.showToast(that.$dialog, text, null, duration, isError);\n }\n\n // only init if required\n this._prepare = function () {\n if (this.prepared) {\n return;\n }\n this.prepared = true;\n this.$dialogSave.on('click', function () {\n that.save();\n });\n this.$dialog.find('.dialog-editobject-buttons .btn-cancel').on('click', function () {\n that.editor.setValue('');\n that.$dialogSave.addClass('disabled');\n that.main.navigate();\n });\n\n this.$dialog.find('.btn-add-common').on('click', function () {\n that.$dialogNewField.find('.object-tab-new-icon').show();\n that.$dialogNewField.modal('open');\n var $name = that.$dialogNewField.find('.object-tab-new-name');\n $name.data('type', 'common').focus();\n if (!$name.hasClass('autocomplete')) {\n $name.addClass('autocomplete');\n $name.mautocomplete({\n data: {\n type: null,\n desc: null,\n min: null,\n max: null,\n def: null,\n role: null,\n unit: null,\n read: null,\n write: null,\n states: null\n },\n minLength: 0 // The minimum length of the input for the autocomplete to start. Default: 1.\n });\n }\n $name.focus()\n });\n\n this.$dialog.find('.btn-add-native').on('click', function () {\n that.$dialogNewField.find('.object-tab-new-icon').hide();\n that.$dialogNewField.modal('open');\n var $name = that.$dialogNewField.find('.object-tab-new-name');\n if ($name.hasClass('autocomplete')) {\n $name.mautocomplete('destroy');\n $name.removeClass('autocomplete');\n }\n M.updateTextFields('#dialog-new-field');\n $name.data('type', 'native').focus();\n });\n this.$dialogNewField.find('.object-tab-new-name').keypress(function (e) {\n if (e.which === 13) {\n that.$dialogNewField.find('.btn-add').trigger('click');\n }\n });\n\n if (!this.editor) {\n this.editor = ace.edit('view-object-raw');\n this.editor.getSession().setMode('ace/mode/json');\n this.editor.$blockScrolling = true;\n this.editor.getSession().on('change', function() {\n that.$dialogSave.removeClass('disabled');\n });\n }\n this.$dialogNewField.modal();\n\n this.$dialog.find('.tabs').mtabs({\n onShow: function (tab) {\n if (!tab) return;\n var id = $(tab).attr('id');\n if (id === 'object-tab-common') {\n showMessage(_('Drop the icons here'));\n } else \n if (id === 'object-tab-raw') {\n var obj = that.saveFromTabs();\n\n if (!obj) return false;\n\n that.editor.setValue(JSON.stringify(obj, null, 2));\n } else if (id === 'object-tab-raw') {\n var _obj;\n try {\n _obj = JSON.parse(that.editor.getValue());\n } catch (e) {\n that.main.showMessage(e, _('Parse error'), 'error_outline');\n if (!that.main.noSelect) {\n that.$dialog.find('.tabs').mtabs('select', 'object-tab-raw');\n }\n return false;\n }\n that.load(_obj);\n }\n that.main.saveConfig('object-edit-active', id);\n return true;\n }\n });\n\n this.$dialogNewField.find('.btn-add').on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n var $tab = that.$dialogNewField.find('.object-tab-new-name');\n var type = $tab.data('type') || 'common';\n var field = $tab.val().trim();\n var obj = that.saveFromTabs();\n\n if (!field || field.indexOf(' ') !== -1) {\n that.main.showError(_('Invalid field name: %s', field));\n return;\n }\n if (obj[type][field] !== undefined) {\n that.main.showError(_('Field %s yet exists!', field));\n return;\n }\n\n obj[type][field] = '';\n\n that.load(obj);\n that.$dialogNewField.find('.object-tab-new-name').val('');\n that.$dialogNewField.modal('close');\n that.$dialogSave.removeClass('disabled');\n });\n this.$dialogNewField.find('.btn-cancel').on('click', function (e) {\n that.$dialogNewField.find('.object-tab-new-name').val('');\n });\n this.$dialog.find('.edit-object-name').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n this.$dialog.find('.edit-object-type').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n });\n this.$dialog.find('.object-tab-rights input').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n });\n\n installFileUpload(this.$dialog.find('#object-tab-common'), 50000, function (err, text) {\n if (err) {\n showMessage(err, true);\n } else {\n if (!text.match(/^data:image\\//)) {\n showMessage(_('Unsupported image format'), true);\n return;\n }\n\n that.$dialogSave.removeClass('disabled');\n that.iconVal = text;\n\n var $tab = that.$dialog.find('.icon-editor');\n $tab.find('.icon').show().html('');\n $tab.find('.icon .treetable-icon').attr('src', text);\n }\n });\n this.$dialog.find('.icon-editor .icon-upload').off('click').on('click', function () {\n that.$dialog.find('.drop-file').trigger('click');\n });\n this.$dialog.find('.icon-editor .icon-clear').off('click').on('click', function () {\n if (that.iconVal) {\n that.iconVal = null;\n that.$dialog.find('.icon-editor').hide().appendTo(that.$dialog);\n that.$dialogSave.removeClass('disabled');\n }\n });\n };\n\n this.init = function () {\n this._prepare();\n if (this.inited) {\n return;\n }\n this.inited = true;\n var id = that.main.navigateGetParams();\n var isSetDefaultState = !!(id || '').match(/,def$/);\n id = id.replace(/,def$/, '');\n\n var obj = this.main.objects[id];\n if (!obj) return;\n\n if (this.main.config['object-edit-active'] !== undefined && !that.main.noSelect) {\n this.$dialog.find('.tabs').mtabs('select', this.main.config['object-edit-active']);\n }\n\n // fill users\n var text = '';\n var name;\n for (var u = 0; u < this.main.tabs.users.list.length; u++) {\n name = translateName(this.main.objects[this.main.tabs.users.list[u]].common.name);\n text += '';\n }\n this.$dialog.find('.object-tab-acl-owner').html(text);\n\n // fill groups\n text = '';\n for (u = 0; u < this.main.tabs.users.groups.length; u++) {\n name = translateName(this.main.objects[this.main.tabs.users.groups[u]].common.name);\n text += '';\n }\n this.$dialog.find('.object-tab-acl-group').html(text);\n this.load(obj);\n\n if (isSetDefaultState) {\n this.$dialog.data('cb', function (_obj) {\n if (_obj.type === 'state') {\n // create state\n that.main.socket.emit('getState', _obj._id, function (err, state) {\n if (!state || state.val === null || state.val === undefined) {\n that.main.socket.emit('setState', _obj._id, _obj.common.def === undefined ? null : _obj.common.def, true);\n }\n });\n }\n });\n } else {\n this.$dialog.data('cb', null);\n }\n that.$dialogSave.addClass('disabled');\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n }\n };\n\n this.load = function (obj) {\n if (!obj) return;\n obj.common = obj.common || {};\n obj.native = obj.native || {};\n obj.acl = obj.acl || {};\n this.$dialog.find('.title-id').text(obj._id);\n this.$dialog.find('.edit-object-name').val(obj.common ? translateName(obj.common.name) : obj._id);\n this.$dialog.find('.edit-object-type').val(obj.type);\n this.$dialog.find('.object-tab-acl-owner').val(obj.acl.owner || 'system.user.admin');\n this.$dialog.find('.object-tab-acl-group').val(obj.acl.ownerGroup || 'system.group.administrator');\n\n this.$dialog.find('.icon-editor').hide().appendTo(this.$dialog);\n\n loadObjectFields('.object-tab-common-table', obj.common || {}, 'common', obj.type);\n loadObjectFields('.object-tab-native-table', obj.native || {}, 'native', obj.type);\n\n if (obj.common.icon !== undefined) {\n this.iconVal = obj.common.icon;\n this.$dialog.find('.object-tab-common-table').prepend(this.$dialog.find('.icon-editor').show());\n this.$dialog.find('.icon-editor .icon').html(that.main.getIconFromObj(obj));\n } else {\n this.iconVal = null;\n }\n\n this.$dialog.find('.object-tab-field-delete').on('click', function () {\n var part = $(this).data('part');\n var field = $(this).data('attr');\n that.main.confirmMessage(_('Delete attribute'), _('Please confirm'), 'error_outline', function (result) {\n if (result) {\n var _obj = that.saveFromTabs();\n delete _obj[part][field];\n that.load(_obj);\n }\n });\n });\n\n obj.acl = obj.acl || {};\n if (obj.acl.object === undefined) obj.acl.object = 0x666;\n\n this.$dialog.find('#object-tab-acl-obj-owner-read') .prop('checked', obj.acl.object & 0x400);\n this.$dialog.find('#object-tab-acl-obj-owner-write').prop('checked', obj.acl.object & 0x200);\n this.$dialog.find('#object-tab-acl-obj-group-read'). prop('checked', obj.acl.object & 0x40);\n this.$dialog.find('#object-tab-acl-obj-group-write').prop('checked', obj.acl.object & 0x20);\n this.$dialog.find('#object-tab-acl-obj-every-read'). prop('checked', obj.acl.object & 0x4);\n this.$dialog.find('#object-tab-acl-obj-every-write').prop('checked', obj.acl.object & 0x2);\n\n if (obj.type !== 'state') {\n this.$dialog.find('.object-tab-acl-state').hide();\n } else {\n this.$dialog.find('.object-tab-acl-state').show();\n if (obj.acl.state === undefined) obj.acl.state = 0x666;\n\n this.$dialog.find('#object-tab-acl-state-owner-read') .prop('checked', obj.acl.state & 0x400);\n this.$dialog.find('#object-tab-acl-state-owner-write').prop('checked', obj.acl.state & 0x200);\n this.$dialog.find('#object-tab-acl-state-group-read'). prop('checked', obj.acl.state & 0x40);\n this.$dialog.find('#object-tab-acl-state-group-write').prop('checked', obj.acl.state & 0x20);\n this.$dialog.find('#object-tab-acl-state-every-read'). prop('checked', obj.acl.state & 0x4);\n this.$dialog.find('#object-tab-acl-state-every-write').prop('checked', obj.acl.state & 0x2);\n }\n\n var _obj = JSON.parse(JSON.stringify(obj));\n this.editor.setValue(JSON.stringify(_obj, null, 2));\n if (_obj._id) delete _obj._id;\n if (_obj.common) delete _obj.common;\n if (_obj.type) delete _obj.type;\n if (_obj.native) delete _obj.native;\n if (_obj.acl) delete _obj.acl;\n this.$dialog.find('#view-object-rest').val(JSON.stringify(_obj, null, ' '));\n this.$dialog.find('select').select();\n\n // workaround for materialize checkbox problem\n this.$dialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n // enable save\n this.$dialog.find('input').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n\n this.$dialog.find('select').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n });\n\n this.$dialog.find('textarea').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n\n if (obj.common.color !== undefined) {\n var time = Date.now();\n\n var $color = this.$dialog.find('.object-tab-edit-string[data-attr=\"color\"]').parent();\n $color.prepend('color_lens' + _('Color') + '');\n $color.colorpicker({\n component: '.btn',\n color: $color,\n container: true\n }).colorpicker('setValue', obj.common.color || '#fff').on('showPicker.colorpicker', function (/* event */) {\n }).on('changeColor.colorpicker', function (event){\n if (Date.now() - time > 100) {\n $color.find('input').val(event.color.toHex()).trigger('change');\n }\n });\n }\n\n };\n\n this.saveFromTabs = function () {\n var obj;\n try {\n obj = this.$dialog.find('#view-object-rest').val();\n if (!obj) {\n obj = {};\n } else {\n obj = JSON.parse(obj);\n }\n } catch (err) {\n this.main.showMessage(_('Cannot parse.'), _('Error in %s', err), 'error_outline');\n return false;\n }\n\n obj.common = {};\n obj.native = {};\n obj.acl = {};\n obj._id = this.$dialog.find('.title-id').text();\n obj.common.name = this.$dialog.find('.edit-object-name').val(); // no support of multilanguage if edited\n obj.type = this.$dialog.find('.edit-object-type').val();\n var err = saveObjectFields('.object-tab-common-table', obj.common);\n if (err) {\n this.main.showMessage(_('Cannot parse.'), _('Error in %s', err), 'error_outline');\n return false;\n }\n err = saveObjectFields('.object-tab-native-table', obj.native);\n if (err) {\n this.main.showMessage(_('Cannot parse.'), _('Error in %s', err), 'error_outline');\n return false;\n }\n obj.acl.object = 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-owner-read').prop('checked') ? 0x400 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-owner-write').prop('checked') ? 0x200 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-group-read').prop('checked') ? 0x40 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-group-write').prop('checked') ? 0x20 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-every-read').prop('checked') ? 0x4 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-every-write').prop('checked') ? 0x2 : 0;\n\n obj.acl.owner = this.$dialog.find('.object-tab-acl-owner').val();\n obj.acl.ownerGroup = this.$dialog.find('.object-tab-acl-group').val();\n\n if (obj.type === 'state') {\n obj.acl.state = 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-owner-read').prop('checked') ? 0x400 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-owner-write').prop('checked') ? 0x200 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-group-read').prop('checked') ? 0x40 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-group-write').prop('checked') ? 0x20 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-every-read').prop('checked') ? 0x4 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-every-write').prop('checked') ? 0x2 : 0;\n }\n\n if (this.iconVal !== null && this.iconVal !== undefined) {\n obj.common.icon = this.iconVal;\n }\n\n return obj;\n };\n\n this.saveFromRaw = function () {\n var obj;\n try {\n obj = JSON.parse(this.editor.getValue());\n } catch (e) {\n this.main.showMessage(e, _('Parse error'), 'error_outline');\n if (!that.main.noSelect) {\n this.$dialog.find('.tabs').mtabs('select', 'object-tab-raw');\n }\n return false;\n }\n return obj;\n };\n\n this.save = function () {\n if (this.main.config['object-edit-active'] === 'object-tab-raw') {\n var _obj = this.saveFromRaw();\n if (!_obj) return;\n\n this.main.socket.emit('setObject', _obj._id, _obj, function (err) {\n if (err) {\n that.main.showError(err);\n } else {\n var cb = that.$dialog.data('cb');\n if (cb) cb(_obj);\n that.$dialogSave.addClass('disabled');\n that.main.navigate();\n }\n });\n } else {\n var obj = that.saveFromTabs();\n if (!obj) return;\n this.main.socket.emit('getObject', obj._id, function (err, _obj) {\n if (err) {\n return that.main.showError(err);\n }\n\n _obj.common = obj.common;\n _obj.native = obj.native;\n _obj.acl = obj.acl;\n that.main.socket.emit('setObject', obj._id, _obj, function (err) {\n if (err) {\n that.main.showError(err);\n } else {\n var cb = that.$dialog.data('cb');\n if (cb) cb(obj);\n that.$dialogSave.addClass('disabled');\n that.main.navigate();\n }\n });\n });\n }\n };\n\n this.allStored = function () {\n return that.$dialogSave.hasClass('disabled');\n };\n\n}","function Enums(main) {\n 'use strict';\n\n // enum is first level like enum.function or enum.rooms\n // category is second level like enum.function.light or enum.room.living_room\n\n var that = this;\n\n this.main = main;\n this.list = [];\n this.$gridEnum = $('#tab-enums');\n this.$gridList = this.$gridEnum.find('.tab-enums-list');\n this.$grid = this.$gridEnum.find('.tab-enums-objects');\n this.updateTimers = null;\n this.editMode = false;\n this.isTiles = false;\n\n var tasks = [];\n var standardEnums = {\n 'enum.rooms': {\n \"_id\": \"enum.rooms\",\n \"common\": {\n \"icon\": \"home\",\n \"name\": \"Rooms\",\n \"desc\": {\n \"en\": \"List of the rooms\",\n \"cn\": \"List of the rooms\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\"\n },\n 'enum.functions': {\n \"_id\": \"enum.functions\",\n \"common\": {\n \"icon\": \"lightbulb_outline\",\n \"name\": \"Functions\",\n \"desc\": {\n \"en\": \"List of the functions\",\n \"cn\": \"List of the functions\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\"\n },\n 'enum.favorites': {\n \"_id\": \"enum.favorites\",\n \"common\": {\n \"icon\": \"favorite_border\",\n \"name\": \"Favorites\",\n \"desc\": {\n \"en\": \"List of favorites objects\",\n \"cn\": \"List of favorites objects\"\n },\n \"members\": []\n },\n \"type\": \"enum\"\n }\n };\n\n var standardGroups = {\n 'enum.rooms': {\n \"enum.rooms.living_room\": {\n \"_id\": \"enum.rooms.living_room\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4MC4wNDYgNDgwLjA0NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwLjA0NiA0ODAuMDQ2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PGc+PHBhdGggZD0iTTMyOC4wMzQsMzIwLjA0NmgtMjR2LTg4YzAtNC40MTgtMy41ODItOC04LThoLTI1NmMtNC40MTgsMC04LDMuNTgyLTgsOHY4OGgtMjRjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MTI4YzAsNC40MTgsMy41ODIsOCw4LDhoMjR2MTZoMTZ2LTE2aDI0MHYxNmgxNnYtMTZoMjRjNC40MTgsMCw4LTMuNTgyLDgtOHYtMTI4QzMzNi4wMzQsMzIzLjYyOCwzMzIuNDUyLDMyMC4wNDYsMzI4LjAzNCwzMjAuMDQ2eiBNODAuMDM0LDQ0OC4wNDZoLTY0di0xMTJoNjRWNDQ4LjA0NnogTTI0MC4wMzQsNDQ4LjA0NmgtMTQ0di02NGgxNDRWNDQ4LjA0NnogTTI0MC4wMzQsMzI4LjA0NnY0MGgtMTQ0di00MGMwLTQuNDE4LTMuNTgyLTgtOC04aC00MHYtODBoMjQwdjgwaC00MEMyNDMuNjE1LDMyMC4wNDYsMjQwLjAzNCwzMjMuNjI4LDI0MC4wMzQsMzI4LjA0NnogTTMyMC4wMzQsNDQ4LjA0NmgtNjR2LTExMmg2NFY0NDguMDQ2eiIvPjwvZz48L2c+PGc+PGc+PHBhdGggZD0iTTQ3OS45NTQsMTUxLjE2NmwtMTYtMTQ0Yy0wLjQ0Ny00LjA0MS0zLjg1NC03LjEwNC03LjkyLTcuMTJoLTExMmMtNC4wOTYtMC4wMjUtNy41NDksMy4wNDktOCw3LjEybC0xNiwxNDRjLTAuMjc2LDIuMjU4LDAuNDIyLDQuNTI4LDEuOTIsNi4yNGMxLjU1LDEuNzE4LDMuNzY3LDIuNjgsNi4wOCwyLjY0aDY0djI3MmgtMzJjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MzJjMCw0LjQxOCwzLjU4Miw4LDgsOGg4MGM0LjQxOCwwLDgtMy41ODIsOC04di0zMmMwLTQuNDE4LTMuNTgyLTgtOC04aC0zMnYtMjcyaDY0YzIuMjg1LDAuMDE3LDQuNDY5LTAuOTQzLDYtMi42NEM0NzkuNTMyLDE1NS42OTQsNDgwLjIzLDE1My40MjUsNDc5Ljk1NCwxNTEuMTY2eiBNNDMyLjAzNCw0NDguMDQ2djE2aC02NHYtMTZINDMyLjAzNHogTTMzNi45OTQsMTQ0LjA0NmwxNC4yNC0xMjhoOTcuNmwxNC4yNCwxMjhIMzM2Ljk5NHoiLz48L2c+PC9nPjxnPjxnPjxwYXRoIGQ9Ik0yNzIuMDM0LDQ4LjA0NmgtNTIuNzJsLTQ1LjYtNDUuNjhjLTMuMTExLTMuMTM3LTguMTc3LTMuMTU4LTExLjMxNC0wLjA0NmMtMC4wMTYsMC4wMTUtMC4wMzEsMC4wMzEtMC4wNDYsMC4wNDZsLTQ1LjYsNDUuNjhoLTUyLjcyYy00LjQxOCwwLTgsMy41ODItOCw4djEyOGMwLDQuNDE4LDMuNTgyLDgsOCw4aDIwOGM0LjQxOCwwLDgtMy41ODIsOC04di0xMjhDMjgwLjAzNCw1MS42MjgsMjc2LjQ1Miw0OC4wNDYsMjcyLjAzNCw0OC4wNDZ6IE0xNjguMDM0LDE5LjMyNmwyOC43MiwyOC43MmgtNTcuNDRMMTY4LjAzNCwxOS4zMjZ6IE0yNjQuMDM0LDE3Ni4wNDZoLTE5MnYtMTEyaDE5MlYxNzYuMDQ2eiIvPjwvZz48L2c+PGc+PGc+PHBhdGggZD0iTTg4LjAzNCw4MC4wNDZ2ODBoMTYwdi04MEg4OC4wMzR6IE0yMzIuMDM0LDE0NC4wNDZoLTEyOHYtNDhoMTI4VjE0NC4wNDZ6Ii8+PC9nPjwvZz48L3N2Zz4=\",\n \"name\": \"Living room\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.sleeping_room\": {\n \"_id\": \"enum.rooms.sleeping_room\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2NCwyNjRWODhIMTZ2MTc2SDB2ODBoNDh2NDhoNjR2LTQ4aDI1NnY0OGg2NHYtNDhoNDh2LTgwSDQ2NHogTTMyLDEwNGg0MTZ2MTYwaC0xNnYtMjRjMC0yMi4wOTEtMTcuOTA5LTQwLTQwLTQwDQoJCWgtMTIuNDhjMi45MDgtNC44MzIsNC40NTYtMTAuMzYsNC40OC0xNmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJoLTY0Yy0xNy42NzMsMC0zMiwxNC4zMjctMzIsMzINCgkJYzAuMDI0LDUuNjQsMS41NzIsMTEuMTY4LDQuNDgsMTZoLTQwLjk2YzIuOTA4LTQuODMyLDQuNDU2LTEwLjM2LDQuNDgtMTZjMC0xNy42NzMtMTQuMzI3LTMyLTMyLTMyaC02NA0KCQljLTE3LjY3MywwLTMyLDE0LjMyNy0zMiwzMmMwLjAyNCw1LjY0LDEuNTcyLDExLjE2OCw0LjQ4LDE2SDg4Yy0yMi4wOTEsMC00MCwxNy45MDktNDAsNDB2MjRIMzJWMTA0eiBNMzkyLDIxNg0KCQljMTMuMjU1LDAsMjQsMTAuNzQ1LDI0LDI0djI0SDY0di0yNGMwLTEzLjI1NSwxMC43NDUtMjQsMjQtMjRIMzkyeiBNMTEyLDE4NGMwLTguODM3LDcuMTYzLTE2LDE2LTE2aDY0YzguODM3LDAsMTYsNy4xNjMsMTYsMTYNCgkJcy03LjE2MywxNi0xNiwxNmgtNjRDMTE5LjE2MywyMDAsMTEyLDE5Mi44MzcsMTEyLDE4NHogTTI3MiwxODRjMC04LjgzNyw3LjE2My0xNiwxNi0xNmg2NGM4LjgzNywwLDE2LDcuMTYzLDE2LDE2DQoJCXMtNy4xNjMsMTYtMTYsMTZoLTY0QzI3OS4xNjMsMjAwLDI3MiwxOTIuODM3LDI3MiwxODR6IE05NiwzNzZINjR2LTMyaDMyVjM3NnogTTQxNiwzNzZoLTMydi0zMmgzMlYzNzZ6IE00NjQsMzI4SDE2di00OGg0NDhWMzI4DQoJCXoiLz4NCjwvZz4NCjxnPg0KCTxyZWN0IHg9IjQ4IiB5PSIxMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNDE2IiB5PSIxMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iODAiIHk9IjEyMCIgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNDgiIHk9IjE1MiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjQwIi8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSI0MTYiIHk9IjE1MiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjQwIi8+DQo8L2c+DQoNCjwvc3ZnPg0K\",\n \"name\": \"Sleeping room\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.kitchen\": {\n \"_id\": \"enum.rooms.kitchen\",\n \"common\": {\n \"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=\",\n \"name\": \"Kitchen\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.office\": {\n \"_id\": \"enum.rooms.office\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJCTxwYXRoIGQ9Ik0yMjQsMTIwdjExMmgyMjRWMTIwSDIyNHogTTQzMiwyMTZIMjQwdi04MGgxOTJWMjE2eiIvPg0KPC9nPg0KPGc+DQoJCTxwYXRoIGQ9Ik0zMzYsMTUyYy0xMy4yNTUsMC0yNCwxMC43NDUtMjQsMjRzMTAuNzQ1LDI0LDI0LDI0czI0LTEwLjc0NSwyNC0yNFMzNDkuMjU1LDE1MiwzMzYsMTUyeiBNMzM2LDE4NGMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzM0MC40MTgsMTg0LDMzNiwxODR6Ii8+DQo8L2c+DQo8Zz4NCgkJPHBhdGggZD0iTTE3Niw4OFY0OGMwLTQuNDE4LTMuNTgyLTgtOC04aC04VjE2YzAtNC40MTgtMy41ODItOC04LThINDBjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MjRoLThjLTQuNDE4LDAtOCwzLjU4Mi04LDh2NDBIMHYzODQNCgkJCWgyMDhWMjY0aDIwOHYyMDhoNjRWODhIMTc2eiBNNDgsMjRoOTZ2MTZINDhWMjR6IE0zMiw1NmgxMjh2MzJIMzJWNTZ6IE0xOTIsNDU2SDE2VjIwMGgxNzZWNDU2eiBNMTkyLDE4NEgxNnYtODBoMTc2VjE4NHoNCgkJCSBNNDY0LDQ1NmgtMzJWMjY0aDMyVjQ1NnogTTQ2NCwyNDhIMjA4VjEwNGgyNTZWMjQ4eiIvPg0KPC9nPg0KPGc+DQoJCTxyZWN0IHg9IjgwIiB5PSIxMzYiIHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJCTxwYXRoIGQ9Ik0xNTIsMjE2Yy0xMy4yNTUsMC0yNCwxMC43NDUtMjQsMjRzMTAuNzQ1LDI0LDI0LDI0czI0LTEwLjc0NSwyNC0yNFMxNjUuMjU1LDIxNiwxNTIsMjE2eiBNMTUyLDI0OGMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzE1Ni40MTgsMjQ4LDE1MiwyNDh6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\",\n \"name\": \"Office\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.nursery\": {\n \"_id\": \"enum.rooms.nursery\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQwLDQzMmMtMTMuMjU1LDAtMjQsMTAuNzQ1LTI0LDI0czEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRTNTMuMjU1LDQzMiw0MCw0MzJ6IE00MCw0NjRjLTQuNDE4LDAtOC0zLjU4Mi04LTgNCgkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzQ0LjQxOCw0NjQsNDAsNDY0eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQ0MCw0MzJjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNHMxMC43NDUsMjQsMjQsMjRzMjQtMTAuNzQ1LDI0LTI0UzQ1My4yNTUsNDMyLDQ0MCw0MzJ6IE00NDAsNDY0Yy00LjQxOCwwLTgtMy41ODItOC04DQoJCXMzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOFM0NDQuNDE4LDQ2NCw0NDAsNDY0eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQxNiwxMTJ2NDhINjR2LTQ4SDE2djMyMGg0OHYtNDhoMzUydjQ4aDQ4VjExMkg0MTZ6IE00OCw0MTZIMzJWMTI4aDE2VjQxNnogTTY0LDIwOGgyNHY4MEg2NFYyMDh6IE02NCwzMDRoMjR2MzJINjRWMzA0DQoJCXogTTQxNiwzNjhINjR2LTE2aDM1MlYzNjh6IE0xMjAsMzA0djMyaC0xNnYtMzJIMTIweiBNMTA0LDI4OHYtODBoMTZ2ODBIMTA0eiBNMTUyLDMwNHYzMmgtMTZ2LTMySDE1MnogTTEzNiwyODh2LTgwaDE2djgwSDEzNnoNCgkJIE0xODQsMzA0djMyaC0xNnYtMzJIMTg0eiBNMTY4LDI4OHYtODBoMTZ2ODBIMTY4eiBNMjE2LDMwNHYzMmgtMTZ2LTMySDIxNnogTTIwMCwyODh2LTgwaDE2djgwSDIwMHogTTI0OCwzMDR2MzJoLTE2di0zMkgyNDh6DQoJCSBNMjMyLDI4OHYtODBoMTZ2ODBIMjMyeiBNMjgwLDMwNHYzMmgtMTZ2LTMySDI4MHogTTI2NCwyODh2LTgwaDE2djgwSDI2NHogTTMxMiwzMDR2MzJoLTE2di0zMkgzMTJ6IE0yOTYsMjg4di04MGgxNnY4MEgyOTZ6DQoJCSBNMzQ0LDMwNHYzMmgtMTZ2LTMySDM0NHogTTMyOCwyODh2LTgwaDE2djgwSDMyOHogTTM3NiwzMDR2MzJoLTE2di0zMkgzNzZ6IE0zNjAsMjg4di04MGgxNnY4MEgzNjB6IE00MTYsMzM2aC0yNHYtMzJoMjRWMzM2eg0KCQkgTTQxNiwyODhoLTI0di04MGgyNFYyODh6IE00MTYsMTkySDY0di0xNmgzNTJWMTkyeiBNNDQ4LDQxNmgtMTZWMTI4aDE2VjQxNnoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik0yOTYsNTAuNzJjLTQuNTA5LDAuMDM0LTguOTE3LDEuMzM3LTEyLjcyLDMuNzZjLTEwLjMxMy03LjY4MS0yMi40OTUtMTIuNDYtMzUuMjgtMTMuODRWMGgtMTZ2NDAuNjQNCgkJYy0xMi43ODUsMS4zOC0yNC45NjcsNi4xNTktMzUuMjgsMTMuODRjLTMuODAzLTIuNDIzLTguMjExLTMuNzI2LTEyLjcyLTMuNzZjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNGMwLDEzLjI1NSwxMC43NDUsMjQsMjQsMjQNCgkJczI0LTEwLjc0NSwyNC0yNGMtMC4wMTUtMi43MjMtMC40NzUtNS40MjUtMS4zNi04YzE5Ljg1NS0xNC41NjUsNDYuODY1LTE0LjU2NSw2Ni43MiwwYy0wLjg4NSwyLjU3NS0xLjM0NSw1LjI3Ny0xLjM2LDgNCgkJYzAsMTMuMjU1LDEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRDMzIwLDYxLjQ2NSwzMDkuMjU1LDUwLjcyLDI5Niw1MC43MnogTTE4NCw4Mi43MmMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQljMC00LjQxOCwzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOEMxOTIsNzkuMTM4LDE4OC40MTgsODIuNzIsMTg0LDgyLjcyeiBNMjk2LDgyLjcyYy00LjQxOCwwLTgtMy41ODItOC04YzAtNC40MTgsMy41ODItOCw4LTgNCgkJczgsMy41ODIsOCw4QzMwNCw3OS4xMzgsMzAwLjQxOCw4Mi43MiwyOTYsODIuNzJ6Ii8+DQo8L2c+DQoNCjwvc3ZnPg0K\",\n \"name\": \"Nursery\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.wc\": {\n \"_id\": \"enum.rooms.wc\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjU2cHgiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik00NTEsMzE3di0zMGMwLTI0LjgxMy0yMC4xODctNDUtNDUtNDVIMjI2Yy01LjI1OSwwLTEwLjMwNSwwLjkxNS0xNSwyLjU4Vjg3LjQyYzE3LjQ1OS02LjE5MiwzMC0yMi44NjUsMzAtNDIuNDIgICAgYzAtMjQuODEzLTIwLjE4Ny00NS00NS00NUg3NmMtOC4yODQsMC0xNSw2LjcxNi0xNSwxNWMwLDI3LjcxLDAsMjQ2LjM4NSwwLDI3MmMwLDE5LjU1NSwxMi41NDEsMzYuMjI4LDMwLDQyLjQyVjM3NyAgICBjMCwyNy41MTksMTAuODU1LDUzLjkyNywzMCw3My40ODJWNDk3YzAsOC4yODQsNi43MTYsMTUsMTUsMTVjMTcuMzMsMCwyNTQuODQ2LDAsMjcwLDBjOC4yODQsMCwxNS02LjcxNiwxNS0xNXMtNi43MTYtMTUtMTUtMTUgICAgaC00NXYtMTcuOTkxQzQxNS45ODgsNDM1Ljk0Myw0NTEsMzc5LjI4Myw0NTEsMzE3eiBNMjI2LDI3MmgxODBjOC4yNzEsMCwxNSw2LjcyOSwxNSwxNXYxNUgyMTF2LTE1ICAgIEMyMTEsMjc4LjcyOSwyMTcuNzI5LDI3MiwyMjYsMjcyeiBNOTEsMzBoMTA1YzguMjcxLDAsMTUsNi43MjksMTUsMTVzLTYuNzI5LDE1LTE1LDE1SDkxVjMweiBNMTA2LDMwMmMtOC4yNzEsMC0xNS02LjcyOS0xNS0xNSAgICBWOTBoOTBjMCwxNy4zOSwwLDIwMC4yNzEsMCwyMTJIMTA2eiBNMzM5Ljk5NCw0NDAuNzczYy01LjQ2MywyLjM4Ny04Ljk5NCw3Ljc4My04Ljk5NCwxMy43NDVWNDgySDE1MXYtMzcuOTE3ICAgIGMwLTQuMjY3LTEuODE3LTguMzMyLTQuOTk2LTExLjE3N0MxMzAuMTEzLDQxOC42ODQsMTIxLDM5OC4zMDcsMTIxLDM3N3YtNDUuMWMzNC41MzUsMCwyOTYuNTQ1LDAsMjk5LjE2OCwwICAgIEM0MTQuODY0LDM3OS40OTMsMzg0LjU3NSw0MjEuMjk1LDMzOS45OTQsNDQwLjc3M3oiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\",\n \"name\": \"WC\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.garage\": {\n \"_id\": \"enum.rooms.kitchen\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4MC4wMTMgNDgwLjAxMyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwLjAxMyA0ODAuMDEzOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjI1NnB4IiBoZWlnaHQ9IjI1NnB4Ij4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMzkwLjk5OSwzMTYuOTUybC0zMC4yOTYtMjQuMjMyYy0xLjExMy0wLjg4Ny0xLjk2OS0yLjA1NS0yLjQ4LTMuMzg0bC0xMS42OC01NC40ICAgIGMtMi40MzItMTEuMDItMTIuMTc5LTE4Ljg4My0yMy40NjQtMTguOTI4SDE1Ni44MDdjLTExLjI2OC0wLjA1Mi0yMS4wMzYsNy43ODgtMjMuNDI0LDE4LjhsLTEyLDUzLjk1MiAgICBjLTAuNDAzLDEuNzgzLTEuMzk5LDMuMzc2LTIuODI0LDQuNTJsLTI5LjYsMjMuNjhjLTUuNjg3LDQuNTUyLTguOTg0LDExLjQ1Mi04Ljk1MiwxOC43MzZ2ODAuMzEyICAgIGMwLjAyMSw2Ljc4OCwyLjkzLDEzLjI0Niw4LDE3Ljc2djMwLjI0YzAsOC44MzcsNy4xNjMsMTYsMTYsMTZoMzJjOC44MzcsMCwxNi03LjE2MywxNi0xNnYtMjRoMTc2djI0YzAsOC44MzcsNy4xNjMsMTYsMTYsMTZoMzIgICAgYzguODM3LDAsMTYtNy4xNjMsMTYtMTZ2LTMwLjI0YzUuMDctNC41MTQsNy45NzktMTAuOTcyLDgtMTcuNzZ2LTgwLjMxMkM0MDAuMDI0LDMyOC40LDM5Ni43MDcsMzIxLjQ5NiwzOTAuOTk5LDMxNi45NTJ6ICAgICBNMjE4LjE0MywyMzguMzI4bDAtMC4wMDhsNC4yMDgtNi4zMmgxMDAuNzI4YzMuNzcyLTAuMDAxLDcuMDMyLDIuNjMyLDcuODI0LDYuMzJsMTAuNzA0LDQ5LjY4OEgyMjQuNzAzICAgIGM1Ljg4OC0xMS4wOTgsMy44NzEtMjQuNzM2LTQuOTc2LTMzLjY1NkMyMTUuNDYxLDI1MC4wNjQsMjE0Ljc5OSwyNDMuMzY4LDIxOC4xNDMsMjM4LjMyOHogTTE4NC4wNzksMjM4LjMyOHYtMC4wMDhsNC4yMDgtNi4zMiAgICBoMTUuMTQ0Yy01Ljg4LDExLjEwMS0zLjg2MSwyNC43MzYsNC45ODQsMzMuNjU2YzQuMjU4LDQuMjgsNC45MjYsMTAuOTYyLDEuNiwxNmwtNC4yMDgsNi4zMmgtMTUuMTYgICAgYzUuODgtMTEuMTAxLDMuODYxLTI0LjczNi00Ljk4NC0zMy42NTZDMTgxLjQxNCwyNTAuMDM3LDE4MC43NTMsMjQzLjM2MSwxODQuMDc5LDIzOC4zMjh6IE0xNDkuMDM5LDIzOC4yNjQgICAgYzAuNzkyLTMuNjU1LDQuMDI4LTYuMjYyLDcuNzY4LTYuMjU2aDEyLjU2Yy01Ljg4LDExLjEwMS0zLjg2MSwyNC43MzYsNC45ODQsMzMuNjU2YzQuMjU4LDQuMjgsNC45MjYsMTAuOTYyLDEuNiwxNmwtNC4yMDgsNi4zMiAgICBoLTMzLjc2TDE0OS4wMzksMjM4LjI2NHogTTEzNi4wMDcsNDY0LjAwOGgtMzJ2LTI0aDMyVjQ2NC4wMDh6IE0zNzYuMDA3LDQ2NC4wMDhoLTMydi0yNGgzMlY0NjQuMDA4eiBNMzg0LjAwNyw0MTYuMDA4ICAgIGMwLDQuNDE4LTMuNTgyLDgtOCw4aC0yNzJjLTQuNDE4LDAtOC0zLjU4Mi04LTh2LThoMjg4VjQxNi4wMDh6IE0zODQuMDA3LDM5Mi4wMDhoLTI4OHYtNTYuMzEyICAgIGMtMC4wMDYtMi40MzEsMS4xMDMtNC43MywzLjAwOC02LjI0bDI5LjYtMjMuNjhjMC42NDktMC41NTYsMS4yNjktMS4xNDYsMS44NTYtMS43NjhoMjE4LjkyOGMwLjQzMiwwLjQsMC44LDAuOCwxLjI5NiwxLjIgICAgbDMwLjMwNCwyNC4yNGMxLjksMS41MTcsMy4wMDcsMy44MTYsMy4wMDgsNi4yNDhWMzkyLjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0xMzIuMDA3LDMyOC4wMDhjLTE1LjQ2NCwwLTI4LDEyLjUzNi0yOCwyOGMwLDE1LjQ2NCwxMi41MzYsMjgsMjgsMjhzMjgtMTIuNTM2LDI4LTI4ICAgIEMxNjAuMDA3LDM0MC41NDQsMTQ3LjQ3MSwzMjguMDA4LDEzMi4wMDcsMzI4LjAwOHogTTEzMi4wMDcsMzY4LjAwOGMtNi42MjcsMC0xMi01LjM3My0xMi0xMmMwLTYuNjI3LDUuMzczLTEyLDEyLTEyICAgIGM2LjYyNywwLDEyLDUuMzczLDEyLDEyQzE0NC4wMDcsMzYyLjYzNSwxMzguNjM0LDM2OC4wMDgsMTMyLjAwNywzNjguMDA4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTM0OC4wMDcsMzI4LjAwOGMtMTUuNDY0LDAtMjgsMTIuNTM2LTI4LDI4YzAsMTUuNDY0LDEyLjUzNiwyOCwyOCwyOGMxNS40NjQsMCwyOC0xMi41MzYsMjgtMjggICAgQzM3Ni4wMDcsMzQwLjU0NCwzNjMuNDcxLDMyOC4wMDgsMzQ4LjAwNywzMjguMDA4eiBNMzQ4LjAwNywzNjguMDA4Yy02LjYyNywwLTEyLTUuMzczLTEyLTEyYzAtNi42MjcsNS4zNzMtMTIsMTItMTIgICAgYzYuNjI3LDAsMTIsNS4zNzMsMTIsMTJDMzYwLjAwNywzNjIuNjM1LDM1NC42MzQsMzY4LjAwOCwzNDguMDA3LDM2OC4wMDh6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMjg4LjAwNywzMjguMDA4aC05NmMtOC44MzcsMC0xNiw3LjE2My0xNiwxNnYyNGMwLDguODM3LDcuMTYzLDE2LDE2LDE2aDk2YzguODM3LDAsMTYtNy4xNjMsMTYtMTZ2LTI0ICAgIEMzMDQuMDA3LDMzNS4xNzEsMjk2Ljg0NCwzMjguMDA4LDI4OC4wMDcsMzI4LjAwOHogTTI4OC4wMDcsMzY4LjAwOGgtOTZ2LTI0aDk2VjM2OC4wMDh6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNNDc1Ljg3MSwxMjlsLTIzMi0xMjhjLTIuNDA1LTEuMzI3LTUuMzIzLTEuMzI3LTcuNzI4LDBsLTIzMiwxMjhjLTMuODcsMi4xMzEtNS4yODEsNi45OTYtMy4xNSwxMC44NjYgICAgYzEuNDA3LDIuNTU2LDQuMDk1LDQuMTQ0LDcuMDEzLDQuMTQyaDh2MzM2aDQ4di0yOTZoMzUydjI5Nmg0OHYtMzM2aDhjNC40MTgsMC4wMDMsOC4wMDMtMy41NzYsOC4wMDYtNy45OTUgICAgQzQ4MC4wMTUsMTMzLjA5NSw0NzguNDI3LDEzMC40MDcsNDc1Ljg3MSwxMjl6IE0yNDAuMDA3LDE3LjE1MmwyMDAuOTM2LDExMC44NTZIMzkuMDcxTDI0MC4wMDcsMTcuMTUyeiBNNDQ4LjAwNyw0NjQuMDA4aC0xNiAgICB2LTI5NmgtMzg0djI5NmgtMTZ2LTMyMGg0MTZWNDY0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0xNjguMDA3LDc1LjA2NHY0NC45NDRoNjRWNDMuMDY0TDE2OC4wMDcsNzUuMDY0eiBNMjE2LjAwNywxMDQuMDA4aC0zMlY4NC45NTJsMzItMTZWMTA0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0yNDguMDA3LDQzLjA2NHY3Ni45NDRoNjRWNzUuMDY0TDI0OC4wMDcsNDMuMDY0eiBNMjk2LjAwNywxMDQuMDA4aC0zMlY2OC45NTJsMzIsMTZWMTA0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\",\n \"name\": \"Garage\",\n \"members\": []\n },\n \"type\": \"enum\"\n }\n\n\n // todo\n //\n },\n 'enum.functions': {\n \"enum.functions.light\": {\n \"_id\": \"enum.functions.light\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgJy0vL1czQy8vRFREIFNWRyAxLjEvL0VOJyAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIj4KICA8Zz4KICAgIDxnPgogICAgICA8cGF0aCBkPSJtMjU2LDkyLjNjLTc0LjIsMC0xMjcuOCw1NS4zLTEzNi4zLDExNC43LTUuMywzOS42IDcuNSw3OC4yIDM0LjEsMTA3LjQgMjMuNCwyNSAzNi4yLDU4LjQgMzYuMiw5Mi44bC0uMSw1NC4yYzAsMjEuOSAxOC4xLDM5LjYgNDAuNSwzOS42aDUyLjJjMjIuNCwwIDQwLjUtMTcuNyA0MC41LTM5LjZsLjEtNTQuMmMwLTM1LjQgMTEuNy02Ny44IDM0LjEtOTAuNyAyNC41LTI1IDM3LjMtNTcuMyAzNy4zLTkwLjctMC4xLTc0LjEtNjMtMTMzLjUtMTM4LjYtMTMzLjV6bTQ2LjgsMzY5LjFjMCwxMC40LTguNSwxOC44LTE5LjIsMTguOGgtNTIuMmMtMTAuNywwLTE5LjItOC4zLTE5LjItMTguOHYtMjRoOTAuNXYyNHptMzkuNi0xNTkuNWMtMjYuNiwyNy4xLTQwLjUsNjQuNi00MC41LDEwNS4zdjkuNGgtOTAuNXYtOS40YzAtMzguNi0xNi03Ny4xLTQyLjYtMTA2LjMtMjMuNC0yNS0zMy01Ny4zLTI4LjgtOTAuNyA3LjUtNTAgNTQtOTcgMTE2LjEtOTcgNjUsMCAxMTcuMiw1MS4xIDExNy4yLDExMi42IDAsMjguMS0xMC43LDU1LjItMzAuOSw3Ni4xeiIvPgogICAgICA8cmVjdCB3aWR0aD0iMjEuMyIgeD0iMjQ1LjMiIHk9IjExIiBoZWlnaHQ9IjUwIi8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzg1LjEsMTA3LjQgNDAwLDEyMi4zIDQzNi41LDg3LjIgNDIxLjUsNzIuMyAgICIvPgogICAgICA8cmVjdCB3aWR0aD0iNTIuMiIgeD0iNDQ4LjgiIHk9IjIzNi4yIiBoZWlnaHQ9IjIwLjkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjUyLjIiIHg9IjExIiB5PSIyMzYuMiIgaGVpZ2h0PSIyMC45Ii8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iOTAuMSw3Mi4yIDc1LjEsODcuMSAxMTEuNiwxMjIuMiAxMjYuNSwxMDcuMyAgICIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\",\n \"name\": \"Light\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.blinds\": {\n \"_id\": \"enum.functions.blinds\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJCTxwYXRoIGQ9Ik0wLDB2NTEyaDUxMlYwSDB6IE00ODIsNDgySDMwVjMwaDQ1MlY0ODJ6Ii8+DQo8L2c+DQo8Zz4NCgkJPHBhdGggZD0iTTYwLDYwdjM5MmgzOTJWNjBINjB6IE0yNDEsNDIySDkwVjI3MWgxNTFWNDIyeiBNMjQxLDI0MUg5MFY5MGgxNTFWMjQxeiBNNDIyLDQyMkgyNzFWMjcxaDE1MVY0MjJ6IE00MjIsMjQxSDI3MVY5MGgxNTENCgkJCVYyNDF6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\",\n \"name\": \"Blinds\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.weather\": {\n \"_id\": \"enum.functions.weather\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNjAgNjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYwIDYwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNNTQuOTQ5LDI4LjI1MWMwLjAxOC0wLjA2OSwwLjAzOS0wLjEzNSwwLjA0Mi0wLjIwN0M1NC45OTIsMjguMDI5LDU1LDI4LjAxNiw1NSwyOEM1NSwxNC41NSw0NC4zMjMsMy41NTMsMzEsMy4wMjVWMQ0KCWMwLTAuNTUzLTAuNDQ4LTEtMS0xcy0xLDAuNDQ3LTEsMXYyLjAyNUMxNS42NzcsMy41NTMsNSwxNC41NSw1LDI4YzAsMC4wMTYsMC4wMDgsMC4wMjksMC4wMDksMC4wNDUNCgljMC4wMDMsMC4wNzEsMC4wMjMsMC4xMzcsMC4wNDIsMC4yMDdjMC4wMTYsMC4wNTksMC4wMjUsMC4xMTgsMC4wNSwwLjE3MmMwLjAyNSwwLjA1MywwLjA2NCwwLjA5NywwLjA5OCwwLjE0NQ0KCWMwLjA0MiwwLjA1OSwwLjA4MSwwLjExOCwwLjEzNSwwLjE2N2MwLjAxMSwwLjAxLDAuMDE2LDAuMDI1LDAuMDI4LDAuMDM1YzAuMDM2LDAuMDMsMC4wOCwwLjA0LDAuMTE4LDAuMDY0DQoJYzAuMDU5LDAuMDM3LDAuMTE1LDAuMDc0LDAuMTgyLDAuMDk4YzAuMDcsMC4wMjYsMC4xNDEsMC4wMzQsMC4yMTMsMC4wNDNDNS45MTgsMjguOTgsNS45NTYsMjksNiwyOQ0KCWMwLjAxNSwwLDAuMDI3LTAuMDA4LDAuMDQyLTAuMDA4YzAuMDc2LTAuMDAzLDAuMTQ3LTAuMDI0LDAuMjItMC4wNDRjMC4wNTQtMC4wMTUsMC4xMDktMC4wMjMsMC4xNTgtMC4wNDcNCgljMC4wNTctMC4wMjYsMC4xMDQtMC4wNjgsMC4xNTYtMC4xMDVjMC4wNTUtMC4wNCwwLjExMS0wLjA3NywwLjE1Ny0wLjEyN2MwLjAxMS0wLjAxMiwwLjAyNi0wLjAxNywwLjAzNy0wLjAzDQoJQzguMTgsMjYuOTM3LDEwLjAzOCwyNiwxMiwyNnMzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMTksMC4wMjMsMC4wNDgsMC4wMzIsMC4wNjksMC4wNTNjMC4wMjQsMC4wMjQsMC4wMzYsMC4wNTYsMC4wNjMsMC4wNzgNCgljMC4wNCwwLjAzMywwLjA4OCwwLjA0NSwwLjEzLDAuMDcxYzAuMDUxLDAuMDMxLDAuMDk4LDAuMDYyLDAuMTUyLDAuMDgyYzAuMDgyLDAuMDMyLDAuMTY0LDAuMDQ1LDAuMjQ5LDAuMDU0DQoJQzE3LjkzLDI4Ljk4MSwxNy45NjQsMjksMTgsMjljMC4wMTYsMCwwLjAzMS0wLjAwNywwLjA0Ni0wLjAwOGMwLjA1MS0wLjAwMiwwLjA5OC0wLjAxNSwwLjE0OC0wLjAyNQ0KCWMwLjA2OS0wLjAxNCwwLjEzNS0wLjAzLDAuMi0wLjA1OWMwLjA1LTAuMDIyLDAuMDk1LTAuMDUsMC4xNDEtMC4wODFjMC4wMzMtMC4wMjEsMC4wNy0wLjAzMiwwLjEwMS0wLjA1OA0KCWMwLjAyNC0wLjAyLDAuMDM1LTAuMDQ4LDAuMDU3LTAuMDdjMC4wMjMtMC4wMjMsMC4wNTQtMC4wMzUsMC4wNzUtMC4wNjFDMjAuMTgsMjYuOTM3LDIyLjAzOCwyNiwyNCwyNmMxLjg2LDAsMy42MiwwLjg1LDUsMi4zODZWNTUNCgljMCwxLjY1NC0xLjM0NiwzLTMsM3MtMy0xLjM0Ni0zLTNjMC0wLjU1My0wLjQ0OC0xLTEtMXMtMSwwLjQ0Ny0xLDFjMCwyLjc1NywyLjI0Myw1LDUsNXM1LTIuMjQzLDUtNVYyOC4zODYNCglDMzIuMzgsMjYuODUsMzQuMTQsMjYsMzYsMjZjMS45NjIsMCwzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMTksMC4wMjMsMC4wNDgsMC4wMzIsMC4wNjksMC4wNTMNCgljMC4wMjQsMC4wMjQsMC4wMzYsMC4wNTYsMC4wNjMsMC4wNzhjMC4wNCwwLjAzMywwLjA4OCwwLjA0NCwwLjEzLDAuMDdjMC4wNTEsMC4wMzEsMC4wOTgsMC4wNjIsMC4xNTMsMC4wODMNCgljMC4wODEsMC4wMzEsMC4xNjMsMC4wNDUsMC4yNDksMC4wNTRDNDEuOTMsMjguOTgxLDQxLjk2NCwyOSw0MiwyOWMwLjAxNiwwLDAuMDMxLTAuMDA3LDAuMDQ2LTAuMDA4DQoJYzAuMDUxLTAuMDAyLDAuMDk5LTAuMDE1LDAuMTQ5LTAuMDI2YzAuMDY4LTAuMDE0LDAuMTM0LTAuMDMsMC4xOTktMC4wNThjMC4wNTEtMC4wMjIsMC4wOTYtMC4wNTEsMC4xNDItMC4wODENCgljMC4wMzMtMC4wMjEsMC4wNy0wLjAzMiwwLjEwMS0wLjA1N2MwLjAyNC0wLjAyLDAuMDM1LTAuMDQ4LDAuMDU2LTAuMDdjMC4wMjMtMC4wMjMsMC4wNTQtMC4wMzUsMC4wNzYtMC4wNjENCglDNDQuMTgsMjYuOTM3LDQ2LjAzOCwyNiw0OCwyNnMzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMSwwLjAxMiwwLjAyNCwwLjAxNSwwLjAzNSwwLjAyN2MwLjA3LDAuMDc3LDAuMTU0LDAuMTM1LDAuMjQ1LDAuMTg4DQoJYzAuMDMxLDAuMDE4LDAuMDU1LDAuMDQ1LDAuMDg4LDAuMDU5QzUzLjcyMSwyOC45NjcsNTMuODU2LDI5LDU0LDI5aDBoMGMwLjEyMywwLDAuMjQ1LTAuMDI3LDAuMzYxLTAuMDczDQoJYzAuMDQ1LTAuMDE4LDAuMDgyLTAuMDQ3LDAuMTI0LTAuMDcxYzAuMDUxLTAuMDI5LDAuMTA2LTAuMDQ4LDAuMTUyLTAuMDg3YzAuMDEyLTAuMDEsMC4wMTctMC4wMjQsMC4wMjgtMC4wMzUNCgljMC4wNTQtMC4wNDksMC4wOTItMC4xMDcsMC4xMzUtMC4xNjdjMC4wMzQtMC4wNDgsMC4wNzMtMC4wOTMsMC4wOTgtMC4xNDVDNTQuOTI0LDI4LjM2OSw1NC45MzQsMjguMzEsNTQuOTQ5LDI4LjI1MXogTTQ4LDI0DQoJYy0yLjIxOCwwLTQuMzEyLDAuODk1LTYsMi41MzRDNDAuMzEyLDI0Ljg5NSwzOC4yMTgsMjQsMzYsMjRzLTQuMzEyLDAuODk1LTYsMi41MzRDMjguMzEyLDI0Ljg5NSwyNi4yMTgsMjQsMjQsMjQNCglzLTQuMzEyLDAuODk1LTYsMi41MzRDMTYuMzEyLDI0Ljg5NSwxNC4yMTgsMjQsMTIsMjRjLTEuNzUsMC0zLjQxOCwwLjU2Ni00Ljg3NSwxLjYwNUM4LjMyNywxNC4wNDQsMTguMTI3LDUsMzAsNQ0KCXMyMS42NzMsOS4wNDQsMjIuODc1LDIwLjYwNUM1MS40MTgsMjQuNTY2LDQ5Ljc1LDI0LDQ4LDI0eiIvPg0KPC9zdmc+DQo=\",\n \"name\": \"Weather\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.heating\": {\n \"_id\": \"enum.functions.heating\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ0MC4zNzEsMTU5LjI5MWM4LjA1MSwwLDE1LjQwMy0zLjAzNSwyMC45ODMtOC4wMTZINTA0LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNWMwLTQuMTQyLTMuMzU4LTcuNS03LjUtNy41aC0zMy43NjMNCgkJYzAuNzY0LTIuNzE2LDEuMTgyLTUuNTc2LDEuMTgyLTguNTMzYzAtMi45NTctMC40MTgtNS44MTYtMS4xODItOC41MzJINTA0LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNQ0KCQljMC00LjE0Mi0zLjM1OC03LjUtNy41LTcuNWgtNDMuMTQ2Yy01LjU4LTQuOTgxLTEyLjkzMi04LjAxNi0yMC45ODMtOC4wMTZjLTYuMTMzLDAtMTEuODU5LDEuNzY1LTE2LjcwNyw0LjgwNQ0KCQljLTEuMzQyLTExLjcxMS0xMS4zMDktMjAuODM3LTIzLjM3My0yMC44MzdoLTI0LjA0OWMtMTAuMzU0LDAtMTkuMTYsNi43MjQtMjIuMywxNi4wMzJoLTE5LjUzDQoJCWMtMy4xMzktOS4zMDgtMTEuOTQ2LTE2LjAzMi0yMi4zLTE2LjAzMmgtMjQuMDQ4Yy0xMC4zNTQsMC0xOS4xNiw2LjcyNC0yMi4zLDE2LjAzMmgtMTkuNTMNCgkJYy0zLjEzOS05LjMwOC0xMS45NDYtMTYuMDMyLTIyLjMtMTYuMDMyaC0yNC4wNDhjLTEwLjM1NCwwLTE5LjE2LDYuNzI0LTIyLjMsMTYuMDMyaC0xOS41Mw0KCQljLTMuMTM5LTkuMzA4LTExLjk0Ni0xNi4wMzItMjIuMy0xNi4wMzJoLTI0LjA0OWMtMTAuMzU0LDAtMTkuMTYsNi43MjQtMjIuMywxNi4wMzJINjkuODgNCgkJYy0zLjEzOS05LjMwOC0xMS45NDYtMTYuMDMyLTIyLjMtMTYuMDMySDIzLjUzMkMxMC41NTcsODAuMTYxLDAsOTAuNzE4LDAsMTAzLjY5M3YzMDQuNjEzYzAsMTIuOTc2LDEwLjU1NywyMy41MzIsMjMuNTMyLDIzLjUzMg0KCQlINDcuNThjMTAuMzU0LDAsMTkuMTYtNi43MjQsMjIuMy0xNi4wMzJoMTkuNTNjMy4xMzksOS4zMDgsMTEuOTQ2LDE2LjAzMiwyMi4zLDE2LjAzMmgyNC4wNDljMTAuMzU0LDAsMTkuMTYtNi43MjQsMjIuMy0xNi4wMzINCgkJaDE5LjUzYzMuMTM5LDkuMzA4LDExLjk0NiwxNi4wMzIsMjIuMywxNi4wMzJoMjQuMDQ4YzEwLjM1NCwwLDE5LjE2LTYuNzI0LDIyLjMtMTYuMDMyaDE5LjUzDQoJCWMzLjEzOSw5LjMwOCwxMS45NDYsMTYuMDMyLDIyLjMsMTYuMDMyaDI0LjA0OGMxMC4zNTQsMCwxOS4xNi02LjcyNCwyMi4zLTE2LjAzMmgxOS41M2MzLjEzOSw5LjMwOCwxMS45NDYsMTYuMDMyLDIyLjMsMTYuMDMyDQoJCWgyNC4wNDljMTIuOTc2LDAsMjMuNTMyLTEwLjU1NywyMy41MzItMjMuNTMydi0wLjUxNkg1MDQuNWM0LjE0MiwwLDcuNS0zLjM1OCw3LjUtNy41YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjVoLTgwLjY3N3YtMTcuMDY1DQoJCUg1MDQuNWM0LjE0MiwwLDcuNS0zLjM1OCw3LjUtNy41YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjVoLTgwLjY3N1YxNTQuNTg3QzQyOC42MzcsMTU3LjU2Niw0MzQuMzA2LDE1OS4yOTEsNDQwLjM3MSwxNTkuMjkxeg0KCQkgTTQ0MC4zNzEsMTExLjE5M2M5LjEyNSwwLDE2LjU0OCw3LjQyMywxNi41NDgsMTYuNTQ4cy03LjQyMywxNi41NDktMTYuNTQ4LDE2LjU0OXMtMTYuNTQ4LTcuNDI0LTE2LjU0OC0xNi41NDkNCgkJUzQzMS4yNDYsMTExLjE5Myw0NDAuMzcxLDExMS4xOTN6IE02My42MTMsMzM2LjY3NmMtNC4xNDIsMC03LjUsMy4zNTgtNy41LDcuNXY2NC4xM2MwLDQuNzA1LTMuODI4LDguNTMzLTguNTMyLDguNTMzSDIzLjUzMg0KCQljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTAzLjY5M2MwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMySDQ3LjU4YzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWMzEyLjExDQoJCWMwLDQuMTQyLDMuMzU4LDcuNSw3LjUsNy41YzQuMTQyLDAsNy41LTMuMzU4LDcuNS03LjVWMTU5LjI5aDE3LjA2NHYxOTMuNDE5SDcxLjExM3YtOC41MzMNCgkJQzcxLjExMywzNDAuMDM0LDY3Ljc1NSwzMzYuNjc2LDYzLjYxMywzMzYuNjc2eiBNODguMTc3LDQwMC44MDZINzEuMTEzdi0zMy4wOTdoMTcuMDY0VjQwMC44MDZ6IE04OC4xNzcsMTQ0LjI5SDcxLjExM3YtMzMuMDk3DQoJCWgxNy4wNjRWMTQ0LjI5eiBNMTQ0LjI5LDQwOC4zMDZjMC4wMDEsNC43MDUtMy44MjcsOC41MzMtOC41MzIsOC41MzNoLTI0LjA0OWMtNC43MDUsMC04LjUzMi0zLjgyOC04LjUzMi04LjUzMlYxMDMuNjkzDQoJCWMwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMyaDI0LjA0OWM0LjcwNSwwLDguNTMyLDMuODI4LDguNTMyLDguNTMyVjQwOC4zMDZ6IE0xNzYuMzU1LDQwMC44MDZoLTE3LjA2NHYtMzMuMDk3aDE3LjA2NA0KCQlWNDAwLjgwNnogTTE3Ni4zNTUsMzUyLjcxaC0xNy4wNjRWMTU5LjI5MWgxNy4wNjRWMzUyLjcxeiBNMTc2LjM1NSwxNDQuMjkxaC0xNy4wNjR2LTMzLjA5N2gxNy4wNjRWMTQ0LjI5MXogTTIzMi40NjgsNDA4LjMwNg0KCQljMCw0LjcwNS0zLjgyOCw4LjUzMy04LjUzMiw4LjUzM2gtMjQuMDQ4Yy00LjcwNSwwLTguNTMyLTMuODI4LTguNTMyLTguNTMyVjEwMy42OTNjMC00LjcwNSwzLjgyOC04LjUzMiw4LjUzMi04LjUzMmgyNC4wNDgNCgkJYzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWNDA4LjMwNnogTTI2NC41MzIsNDAwLjgwNmgtMTcuMDY0di0zMy4wOTdoMTcuMDY0VjQwMC44MDZ6IE0yNjQuNTMyLDM1Mi43MWgtMTcuMDY0VjE1OS4yOTENCgkJaDE3LjA2NFYzNTIuNzF6IE0yNjQuNTMyLDE0NC4yOTFoLTE3LjA2NHYtMzMuMDk3aDE3LjA2NFYxNDQuMjkxeiBNMzIwLjY0NSw0MDguMzA2YzAsNC43MDUtMy44MjgsOC41MzMtOC41MzIsOC41MzNoLTI0LjA0OA0KCQljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTAzLjY5M2MwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMyaDI0LjA0OGM0LjcwNSwwLDguNTMyLDMuODI4LDguNTMyLDguNTMyVjQwOC4zMDZ6DQoJCSBNMzM1LjY0NSwxMTEuMTkzaDE3LjA2NHYzMy4wOTdoLTE3LjA2NFYxMTEuMTkzeiBNMzUyLjcwOSw0MDAuODA3aC0xNy4wNjRWMzY3LjcxaDE3LjA2NFY0MDAuODA3eiBNNDA4LjgyMyw0MDguMzA3DQoJCWMwLDQuNzA1LTMuODI4LDguNTMyLTguNTMyLDguNTMyaC0yNC4wNDljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTk5Ljg5YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjUNCgkJYy00LjE0MiwwLTcuNSwzLjM1OC03LjUsNy41djE1Mi44MmgtMTcuMDY0VjE1OS4yOTFoMTcuMDY0djguNTMzYzAsNC4xNDIsMy4zNTgsNy41LDcuNSw3LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNXYtNjQuMTMNCgkJYzAtNC43MDUsMy44MjgtOC41MzIsOC41MzItOC41MzJoMjQuMDQ5YzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWNDA4LjMwN3oiLz4NCjwvZz4NCjwvc3ZnPg0K\",\n \"name\": \"Heating\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.backlight\": {\n \"_id\": \"enum.functions.backlight\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTExLjk5MSA1MTEuOTkxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTEuOTkxIDUxMS45OTE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik05MS40OSwzMzYuNTcybC0yMS4zMzMsNDIuNjY3Yy0yLjYyNCw1LjI2OS0wLjQ5MSwxMS42NjksNC43NzksMTQuMzE1YzEuNTM2LDAuNzQ3LDMuMTU3LDEuMTA5LDQuNzU3LDEuMTA5DQoJCWMzLjkwNCwwLDcuNjU5LTIuMTc2LDkuNTM2LTUuODg4bDIxLjMzMy00Mi42NjdjMi42NDUtNS4yNjksMC41MTItMTEuNjY5LTQuNzU3LTE0LjMxNQ0KCQlDMTAwLjU1NywzMjkuMTY5LDk0LjE1NywzMzEuMzI0LDkxLjQ5LDMzNi41NzJ6Ii8+DQoJPHBhdGggZD0iTTUwNy41NTQsMTgzLjM1NmMtMi43NzMtMi4wMjctNi4zMzYtMi41MzktOS42LTEuNDkzbC00OS40MDgsMTYuNDY5Yy0xMy4wOTksNC4zNzMtMjEuODg4LDE2LjU3Ni0yMS44ODgsMzAuMzc5djM2Ljg4NQ0KCQljLTI0LjMyLTQuOTQ5LTQyLjY2Ny0yNi40OTYtNDIuNjY3LTUyLjI0NXYtODUuMzMzYzAtMzEuMjMyLTEyLjEzOS02MC43MTUtMzQuMzA0LTgzLjExNQ0KCQljLTIyLjMxNS0yMi4xMDEtNTEuNzk3LTM0LjI0LTgzLjAyOS0zNC4yNGMtNjQuNjgzLDAtMTE3LjMzMyw1Mi42NTEtMTE3LjMzMywxMTcuMzMzdjUzLjMzM2gtMzJjLTE3LjY0MywwLTMyLDE0LjM1Ny0zMiwzMg0KCQl2NDAuMTQ5TDEuMTIyLDQyMS45MDVjLTEuNjQzLDMuMzA3LTEuNDcyLDcuMjMyLDAuNDQ4LDEwLjM2OGMxLjk2MywzLjEzNiw1LjM5Nyw1LjA1Niw5LjA4OCw1LjA1Nmg3NS43NTUNCgkJYzUuMjI3LDM2LjA5NiwzNi4wNzUsNjQsNzMuNTc5LDY0czY4LjM1Mi0yNy45MDQsNzMuNTc5LTY0aDc1Ljc1NWMwLjE0OSwwLDAuMzIsMC4wMjEsMC40MjcsMA0KCQljNS44ODgsMCwxMC42NjctNC43NzksMTAuNjY3LTEwLjY2N2MwLTIuNzUyLTEuMDI0LTUuMjQ4LTIuNzMxLTcuMTI1bC04My4wMjktMTY2LjA1OXYtNDAuMTQ5YzAtMTcuNjQzLTE0LjM1Ny0zMi0zMi0zMmgtMzINCgkJdi01My4zMzNjMC01Mi45MjgsNDMuMDcyLTk2LDk2LTk2YzI1LjU1NywwLDQ5LjcyOCw5Ljk2Myw2Ny45NDcsMjcuOTg5YzE4LjA5MSwxOC4yODMsMjguMDUzLDQyLjQ1MywyOC4wNTMsNjguMDExdjg1LjMzMw0KCQljMCwzNy41MDQsMjcuOTA0LDY4LjM1Miw2NCw3My41Nzl2MzkuMDRjMCwxMy43ODEsOC43ODksMjYuMDA1LDIxLjg2NywzMC4zNTdsNDkuNDA4LDE2LjQ2OQ0KCQljMS4xMzEsMC4zNjMsMi4yNjEsMC41NTUsMy4zOTIsMC41NTVjMi4yMTksMCw0LjM5NS0wLjY4Myw2LjIyOS0yLjAyN2MyLjc5NS0xLjk4NCw0LjQzNy01LjIwNSw0LjQzNy04LjY0VjE5MS45OTYNCgkJQzUxMS45OTEsMTg4LjU2MSw1MTAuMzQ5LDE4NS4zNCw1MDcuNTU0LDE4My4zNTZ6IE0xNTkuOTkxLDQ3OS45OTZjLTI1Ljc0OSwwLTQ3LjMxNy0xOC4zNDctNTIuMjY3LTQyLjY2N2gxMDQuNTMzDQoJCUMyMDcuMzA5LDQ2MS42NDksMTg1Ljc0MSw0NzkuOTk2LDE1OS45OTEsNDc5Ljk5NnogTTI5Mi4wODcsNDE1Ljk5NmgtNjguMDk2aC0xMjhIMjcuOTE3bDc0LjY2Ny0xNDkuMzMzaDExNC44MzcNCgkJTDI5Mi4wODcsNDE1Ljk5NnogTTIwMi42NTgsMjAyLjY2MmM1Ljg2NywwLDEwLjY2Nyw0LjgsMTAuNjY3LDEwLjY2N3YzMkgxMDYuNjU4di0zMmMwLTUuODY3LDQuOC0xMC42NjcsMTAuNjY3LTEwLjY2N0gyMDIuNjU4eg0KCQkgTTQ5MC42NTgsMzQ3Ljg3OGwtMzUuMzcxLTExLjgxOWMtNC4zNzMtMS40MjktNy4yOTYtNS41MDQtNy4yOTYtMTAuMTEydi05Ny4yNTljMC00LjYwOCwyLjkyMy04LjY2MSw3LjI5Ni0xMC4xMTINCgkJbDM1LjM3MS0xMS43OTdWMzQ3Ljg3OHoiLz4NCjwvZz4NCjwvc3ZnPg0K\",\n \"name\": \"Backlight\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.household\": {\n \"_id\": \"enum.functions.household\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgJy0vL1czQy8vRFREIFNWRyAxLjEvL0VOJyAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIj4KICA8Zz4KICAgIDxnPgogICAgICA8cGF0aCBkPSJtMjU2LDkyLjNjLTc0LjIsMC0xMjcuOCw1NS4zLTEzNi4zLDExNC43LTUuMywzOS42IDcuNSw3OC4yIDM0LjEsMTA3LjQgMjMuNCwyNSAzNi4yLDU4LjQgMzYuMiw5Mi44bC0uMSw1NC4yYzAsMjEuOSAxOC4xLDM5LjYgNDAuNSwzOS42aDUyLjJjMjIuNCwwIDQwLjUtMTcuNyA0MC41LTM5LjZsLjEtNTQuMmMwLTM1LjQgMTEuNy02Ny44IDM0LjEtOTAuNyAyNC41LTI1IDM3LjMtNTcuMyAzNy4zLTkwLjctMC4xLTc0LjEtNjMtMTMzLjUtMTM4LjYtMTMzLjV6bTQ2LjgsMzY5LjFjMCwxMC40LTguNSwxOC44LTE5LjIsMTguOGgtNTIuMmMtMTAuNywwLTE5LjItOC4zLTE5LjItMTguOHYtMjRoOTAuNXYyNHptMzkuNi0xNTkuNWMtMjYuNiwyNy4xLTQwLjUsNjQuNi00MC41LDEwNS4zdjkuNGgtOTAuNXYtOS40YzAtMzguNi0xNi03Ny4xLTQyLjYtMTA2LjMtMjMuNC0yNS0zMy01Ny4zLTI4LjgtOTAuNyA3LjUtNTAgNTQtOTcgMTE2LjEtOTcgNjUsMCAxMTcuMiw1MS4xIDExNy4yLDExMi42IDAsMjguMS0xMC43LDU1LjItMzAuOSw3Ni4xeiIvPgogICAgICA8cmVjdCB3aWR0aD0iMjEuMyIgeD0iMjQ1LjMiIHk9IjExIiBoZWlnaHQ9IjUwIi8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzg1LjEsMTA3LjQgNDAwLDEyMi4zIDQzNi41LDg3LjIgNDIxLjUsNzIuMyAgICIvPgogICAgICA8cmVjdCB3aWR0aD0iNTIuMiIgeD0iNDQ4LjgiIHk9IjIzNi4yIiBoZWlnaHQ9IjIwLjkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjUyLjIiIHg9IjExIiB5PSIyMzYuMiIgaGVpZ2h0PSIyMC45Ii8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iOTAuMSw3Mi4yIDc1LjEsODcuMSAxMTEuNiwxMjIuMiAxMjYuNSwxMDcuMyAgICIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\",\n \"name\": \"Household\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.audio\": {\n \"_id\": \"enum.functions.audio\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDc3LjIxNiA0NzcuMjE2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NzcuMjE2IDQ3Ny4yMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik00NTMuODU4LDEwNS4xMTZ2LTkxLjZjMC00LjMtMi4xLTguNC01LjUtMTAuOWMtMy41LTIuNS04LTMuMy0xMi4xLTJsLTI3Mi45LDg2LjdjLTUuNiwxLjgtOS40LDctOS40LDEyLjl2OTEuN3YwLjF2MTc1LjMNCgkJYy0xNC4zLTkuOS0zMi42LTE1LjMtNTEuOC0xNS4zYy0yMC4zLDAtMzkuNiw2LjEtNTQuMywxNy4xYy0xNS44LDExLjktMjQuNSwyOC0yNC41LDQ1LjVzOC43LDMzLjYsMjQuNSw0NS41DQoJCWMxNC43LDExLDMzLjksMTcuMSw1NC4zLDE3LjFzMzkuNi02LjEsNTQuMy0xNy4xYzE1LjgtMTEuOSwyNC41LTI4LDI0LjUtNDUuNXYtMjEyLjhsMjQ1LjktNzguMnYxNTYuNg0KCQljLTE0LjMtOS45LTMyLjYtMTUuMy01MS44LTE1LjNjLTIwLjMsMC0zOS42LDYuMS01NC4zLDE3LjFjLTE1LjgsMTEuOS0yNC41LDI4LTI0LjUsNDUuNXM4LjcsMzMuNiwyNC41LDQ1LjUNCgkJYzE0LjcsMTEsMzMuOSwxNy4xLDU0LjMsMTcuMXMzOS42LTYuMSw1NC4zLTE3LjFjMTUuOC0xMS45LDI0LjUtMjgsMjQuNS00NS41di0yMjIuMw0KCQlDNDUzLjg1OCwxMDUuMTE2LDQ1My44NTgsMTA1LjExNiw0NTMuODU4LDEwNS4xMTZ6IE0xMDIuMTU4LDQ1MC4yMTZjLTI4LjEsMC01MS44LTE2LjMtNTEuOC0zNS42YzAtMTkuMywyMy43LTM1LjYsNTEuOC0zNS42DQoJCXM1MS44LDE2LjMsNTEuOCwzNS42QzE1My45NTgsNDM0LjAxNiwxMzAuMjU4LDQ1MC4yMTYsMTAyLjE1OCw0NTAuMjE2eiBNMTgwLjk1OCwxNzMuNDE2di02My40bDI0NS45LTc4LjF2NjMuNEwxODAuOTU4LDE3My40MTZ6DQoJCSBNMzc1LjE1OCwzNjMuMTE2Yy0yOC4xLDAtNTEuOC0xNi4zLTUxLjgtMzUuNmMwLTE5LjMsMjMuNy0zNS42LDUxLjgtMzUuNnM1MS44LDE2LjMsNTEuOCwzNS42DQoJCUM0MjYuODU4LDM0Ni44MTYsNDAzLjE1OCwzNjMuMTE2LDM3NS4xNTgsMzYzLjExNnoiLz4NCjwvZz4NCjwvc3ZnPg0K\",\n \"name\":\"Audio/Music\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.security\": {\n \"_id\": \"enum.functions.security\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTI1Niw0MC4wMWMtNS41MzgsMC05Ljk5LDQuNDYtOS45OSw5Ljk5YzAsNS4xNDcsMy44NzIsOS40Myw4Ljk5LDkuOTM4YzUuOTI1LDAuNTg4LDEwLjk5LTQuMDI3LDEwLjk5LTkuOTM4DQoJCUMyNjUuOTksNDQuNDYyLDI2MS41Myw0MC4wMSwyNTYsNDAuMDF6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNNDU2LDYwYy0yNy41NywwLTUwLTIyLjQzLTUwLTUwYzAtNS41MjItNC40NzgtMTAtMTAtMTBIMTE2Yy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwYzAsMjcuNTctMjIuNDMsNTAtNTAsNTANCgkJYy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwdjE2My4xOWMwLDEyNy4xNzcsODIuODk1LDI0MS4xMzUsMjA3LjEyOCwyNzguMzg5YzAuOTM3LDAuMjgsMS45MDQsMC40MjEsMi44NzIsMC40MjENCgkJYzAuOTY4LDAsMS45MzctMC4xNDEsMi44NzMtMC40MjJDMzgwLjQxNSw0NzUuMTE5LDQ2NiwzNjMuMTQ5LDQ2NiwyMzMuMTlWNzBDNDY2LDY0LjQ3OCw0NjEuNTIyLDYwLDQ1Niw2MHogTTQ0NiwyMzMuMTkNCgkJYzAsMTE5LjQ0OC03Ni4yMjEsMjIyLjg5Mi0xOTAsMjU4LjM1M0MxNDMuMTI4LDQ1Ni4zNjUsNjYsMzUxLjk4NCw2NiwyMzMuMTlWNzkuMjg4Qzk2LjYxMSw3NC44OSwxMjAuODksNTAuNjExLDEyNS4yODgsMjANCgkJaDI2MS40MjRDMzkxLjExLDUwLjYxMSw0MTUuMzg5LDc0Ljg5LDQ0Niw3OS4yODhWMjMzLjE5eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQyMC4wMTIsOTIuNDljLTIwLjg1NC05LjEzMy0zNy4zNjktMjUuNjQ4LTQ2LjUwMi00Ni41MDJDMzcxLjkxNiw0Mi4zNSwzNjguMzIyLDQwLDM2NC4zNSw0MGgtNjguMzcNCgkJYy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwczQuNDc4LDEwLDEwLDEwaDYyLjA0N2MxMC41NjUsMjAuNjgxLDI3LjI5MiwzNy40MDcsNDcuOTczLDQ3Ljk3M1YyMzMuMTkNCgkJYzAsOTcuODYzLTU4Ljc0OSwxODIuMzAzLTE1MCwyMTYuMTA0Yy05MS4yNTEtMzMuODAyLTE1MC0xMTguMjQxLTE1MC0yMTYuMTA0VjEwNy45NzNDMTI2LjY4MSw5Ny40MDcsMTQzLjQwNyw4MC42ODEsMTUzLjk3Myw2MA0KCQloNjIuMDQ3YzUuNTIyLDAsMTAtNC40NzgsMTAtMTBzLTQuNDc4LTEwLTEwLTEwaC02OC4zN2MtMy45NzIsMC03LjU2NiwyLjM1MS05LjE2LDUuOTg4DQoJCWMtOS4xMzMsMjAuODU0LTI1LjY0OCwzNy4zNjktNDYuNTAyLDQ2LjUwMkM4OC4zNTEsOTQuMDg0LDg2LDk3LjY3OSw4NiwxMDEuNjV2MTMxLjU0YzAsMTA3LjIxMyw2Ni4zMTEsMjAwLjY1MywxNjYuNjY0LDIzNi4xNjYNCgkJYzEuMDc5LDAuMzgyLDIuMjA3LDAuNTczLDMuMzM2LDAuNTczYzEuMTI5LDAsMi4yNTctMC4xOTEsMy4zMzYtMC41NzNDMzU5LjYwNSw0MzMuODczLDQyNiwzNDAuNDksNDI2LDIzMy4xOVYxMDEuNjUNCgkJQzQyNiw5Ny42NzgsNDIzLjY0OSw5NC4wODQsNDIwLjAxMiw5Mi40OXoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik0yNTYsMTQ2Yy00OS42MjYsMC05MCw0MC4zNzQtOTAsOTBjMCw0OS42MjYsNDAuMzc0LDkwLDkwLDkwYzQ5LjYyNiwwLDkwLTQwLjM3NCw5MC05MEMzNDYsMTg2LjM3NCwzMDUuNjI2LDE0NiwyNTYsMTQ2eg0KCQkgTTI1NiwzMDZjLTM4LjU5OCwwLTcwLTMxLjQwMi03MC03MGMwLTM4LjU5OCwzMS40MDItNzAsNzAtNzBjMzguNTk4LDAsNzAsMzEuNDAyLDcwLDcwQzMyNiwyNzQuNTk4LDI5NC41OTgsMzA2LDI1NiwzMDZ6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNMzAzLjA3MSwyMDguOTI4Yy0zLjkwNi0zLjkwNC0xMC4yMzYtMy45MDQtMTQuMTQzLDBMMjQ2LDI1MS44NTdsLTEyLjkyOS0xMi45MjhjLTMuOTA2LTMuOTA0LTEwLjIzNi0zLjkwNC0xNC4xNDMsMA0KCQljLTMuOTA1LDMuOTA1LTMuOTA1LDEwLjIzNywwLDE0LjE0M2wyMCwyMEMyNDAuODgyLDI3NS4wMjMsMjQzLjQ0LDI3NiwyNDYsMjc2czUuMTE4LTAuOTc3LDcuMDcxLTIuOTI5bDUwLTUwDQoJCUMzMDYuOTc2LDIxOS4xNjYsMzA2Ljk3NiwyMTIuODM0LDMwMy4wNzEsMjA4LjkyOHoiLz4NCjwvZz4NCg0KPC9zdmc+DQo=\",\n \"name\": \"Security\",\n \"members\": []\n },\n \"type\": \"enum\"\n }\n // todo\n }\n };\n\n var selectId = function () {\n if (!that.$grid || !that.$grid.selectId) return;\n selectId = that.$grid.selectId.bind(that.$grid);\n return that.$grid.selectId.apply(that.$grid, arguments);\n };\n\n function enumRename(oldId, newId, newCommon, callback) {\n if (tasks.length) {\n var task = tasks.shift();\n if (task.name === 'delObject') {\n that.main.socket.emit(task.name, task.id, function () {\n setTimeout(function () {\n enumRename(undefined, undefined, undefined, callback);\n }, 0);\n });\n } else {\n that.main.socket.emit(task.name, task.id, task.obj, function () {\n setTimeout(function () {\n enumRename(undefined, undefined, undefined, callback);\n }, 0);\n });\n }\n } else {\n _enumRename(oldId, newId, newCommon, function () {\n if (tasks.length) {\n enumRename(undefined, undefined, undefined, callback);\n } else {\n if (callback) callback();\n }\n });\n }\n }\n\n function _enumRename(oldId, newId, newCommon, callback) {\n //Check if this name exists\n if (oldId !== newId && that.main.objects[newId]) {\n showMessage(_('Name yet exists!'), true);\n that.init(true);\n if (callback) callback();\n } else {\n if (oldId === newId) {\n if (newCommon && (newCommon.name !== undefined || newCommon.icon !== undefined || newCommon.color !== undefined)) {\n tasks.push({name: 'extendObject', id: oldId, obj: {common: newCommon}});\n }\n if (callback) callback();\n } else if (that.main.objects[oldId] && that.main.objects[oldId].common && that.main.objects[oldId].common.nondeletable) {\n showMessage(_('Change of enum\\'s id \"%s\" is not allowed!', oldId), true);\n that.init(true);\n if (callback) callback();\n } else {\n var len = oldId.length + 1;\n var children = [];\n for (var e = 0; e < that.list.length; e++) {\n if (that.list[e].substring(0, len) === oldId + '.') {\n children.push(that.list[e]);\n }\n }\n\n that.main.socket.emit('getObject', oldId, function (err, obj) {\n setTimeout(function () {\n if (obj) {\n obj._id = newId;\n if (obj._rev) delete obj._rev;\n if (newCommon && newCommon.name !== undefined) obj.common.name = newCommon.name;\n if (newCommon && newCommon.icon !== undefined) obj.common.icon = newCommon.icon;\n if (newCommon && newCommon.color !== undefined) obj.common.color = newCommon.color;\n tasks.push({name: 'delObject', id: oldId});\n tasks.push({name: 'setObject', id: newId, obj: obj});\n // Rename all children\n var count = 0;\n for (var i = 0; i < children.length; i++) {\n var n = children[i].replace(oldId + '.', newId + '.');\n count++;\n _enumRename(children[i], n, null, function () {\n if (!--count && callback) callback();\n });\n }\n if (!children.length && callback) {\n callback();\n }\n }\n }, 0);\n });\n }\n }\n }\n\n function enumAddChild(parent, newId, common, callback) {\n if (that.main.objects[newId]) {\n showMessage(_('Name yet exists!'), true);\n return false;\n }\n\n that.main.socket.emit('setObject', newId, {\n _id: newId,\n common: {\n name: common.name,\n members: [],\n icon: common.icon,\n color: common.color\n },\n type: 'enum'\n }, callback);\n return true;\n }\n\n function prepareNewEnum(parent) {\n var text = '';\n var id;\n if (parent) {\n var name = parent.replace(/[.#\\\\\\/&?]+/g, '-');\n\n if (standardGroups[parent]) {\n for (id in standardGroups[parent]) {\n if (standardGroups[parent].hasOwnProperty(id) && that.list.indexOf(id) === -1) {\n text += '
  • ' + that.main.getIconFromObj(standardGroups[parent][id]) + getName(standardGroups[parent][id]) + '
  • ';\n }\n }\n }\n if (text) {\n text += '
  • ';\n }\n text += '
  • control_point' + _('custom group') + '
  • ';\n\n that.$gridEnum.find('#btn-new-group-' + name).html(text);\n that.$gridEnum.find('.btn-new-group-btn[data-target=\"btn-new-group-' + name + '\"]').dropdown({\n constrainWidth: false\n });\n that.$gridEnum.find('#btn-new-group-' + name).find('.new-group-item').off('click').on('click', function () {\n var id = $(this).data('id');\n var parent = $(this).data('enum');\n if (!id) {\n createOrEditEnum(null, parent);\n } else {\n var name = parent.replace(/[.#\\\\\\/&?]+/g, '-');\n that.main.saveConfig('enums-active', 'enum-' + name);\n that.main.socket.emit('setObject', id, standardGroups[parent][id], function (err) {\n if (err) {\n that.main.showError(err);\n }\n });\n }\n });\n } else {\n for (id in standardEnums) {\n if (standardEnums.hasOwnProperty(id) && that.list.indexOf(id) === -1) {\n text += '
  • ' + that.main.getIconFromObj(standardEnums[id]) + getName(standardEnums[id]) + '
  • ';\n }\n }\n\n if (text) {\n text += '
  • ';\n }\n text += '
  • control_point' + _('custom enum') + '
  • ';\n that.$gridEnum.find('#btn-new-enum').html(text);\n that.$gridEnum.find('.btn-new-enum-btn').dropdown({\n constrainWidth: false\n });\n that.$gridEnum.find('.new-enum-item').off('click').on('click', function () {\n var id = $(this).data('id');\n if (!id) {\n createOrEditEnum(null);\n } else {\n var name = id.replace(/[.#\\\\\\/&?]+/g, '-');\n that.main.saveConfig('enums-active', 'enum-' + name);\n that.main.socket.emit('setObject', id, standardEnums[id], function (err) {\n if (err) {\n that.main.showError(err);\n }\n });\n }\n });\n }\n }\n\n this.prepare = function () {\n this.isTiles = (this.main.config.enumIsTiles !== undefined && this.main.config.enumIsTiles !== null) ? this.main.config.enumIsTiles : true;\n };\n\n function getName(objects, id) {\n var name;\n if (!id) {\n name = objects;\n } else {\n name = objects[id];\n }\n if (name && name.common && name.common.name) {\n name = translateName(name.common.name);\n } else {\n var parts = id.split('.');\n name = parts.pop();\n name = name[0].toUpperCase() + name.substring(1).toLowerCase();\n }\n return name;\n }\n\n function drawChip(id, group) {\n var text = '';\n text += '
    ' +\n that.main.getIcon(id) +\n '' +\n '' + getName(that.main.objects, id) + '' +\n// '' + id + '' +\n '' +\n 'close' +\n '
    ';\n return text;\n }\n\n function drawEnum(id, $page, scrollTop) {\n var obj = that.main.objects[id];\n var name = id.replace(/[.#\\\\\\/&?]+/g, '-');\n var text =\n '
    ' +\n '
    ' +\n ' library_add' +\n '
      ' +\n ' ' +\n ' edit' +\n ' ' +\n ' ' +\n ' delete' +\n ' ' +\n '
      \\n' +\n ' clear
      \\n' +\n '
      ' +\n '
      ';\n\n text += '
        ';\n\n for (var se = 0; se < that.list.length; se++) {\n if (that.list[se].substring(0, id.length + 1) === id + '.') {\n var en = that.main.objects[that.list[se]];\n var inverted;\n var style = '';\n if (en && en.common && en.common.color) {\n style = 'background: ' + en.common.color + '; ';\n if (that.main.invertColor(en.common.color)) {\n inverted = true;\n style += 'color: white;';\n }\n }\n\n text += '
      • ' +\n that.main.getIcon(that.list[se], null, null, 'icon') +\n '' + getName(that.main.objects, that.list[se]) + '' +\n '

        ' + that.list[se] + '


        ';\n\n if (en && en.common && en.common.members && en.common.members.length) {\n for (var m = 0; m < en.common.members.length; m++) {\n text += drawChip(en.common.members[m], that.list[se]);\n }\n }\n text += 'edit';\n text += 'delete';\n text += '
      • ';\n }\n }\n text += '
      ';\n $page.html(text);\n prepareNewEnum(id);\n scrollTop && $page.find('.enum-collection').scrollTop(scrollTop);\n initFilter(id);\n }\n function applyFilter(id, filter) {\n var $tiles = that.$gridList.find('.enum-collection[data-id=\"' + id + '\"] .collection-item');\n if (!filter) {\n $tiles.show();\n } else {\n filter = filter.toLowerCase();\n $tiles.each(function () {\n var $this = $(this);\n var eid = $this.data('id');\n var name = getName(that.main.objects, eid);\n if (name.toLowerCase().indexOf(filter) !== -1) {\n $this.show();\n } else {\n if (eid.substring(id.length).toLowerCase().indexOf(filter) !== -1) {\n $this.show();\n } else {\n $this.hide();\n }\n }\n });\n }\n }\n\n function initFilter(id) {\n var $filter = that.$gridList.find('.enum-buttons[data-id=\"' + id + '\"] .filter-input');\n var data = {};\n for (var se = 0; se < that.list.length; se++) {\n var eid = that.list[se];\n if (eid.substring(0, id.length + 1) === id + '.') {\n var name = getName(that.main.objects, eid);\n var icon = null;\n if (that.main.objects[eid] &&\n that.main.objects[eid].common &&\n that.main.objects[eid].common.icon) {\n icon = that.main.objects[eid].common.icon;\n }\n\n data[name] = icon;\n }\n }\n var $btn = that.$gridList.find('.enum-buttons[data-id=\"' + id + '\"] .filter-clear');\n $filter.mautocomplete({\n data: data,\n minLength: 0,\n limit: 10\n }).on('change', function () {\n var val = $(this).val();\n applyFilter(id, val);\n if ($(this).val()) {\n $btn.show();\n } else {\n $btn.hide();\n }\n that.main.saveConfig('filter-' + id, val);\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n $btn.off('click').on('click', function () {\n $filter.val('').trigger('change');\n });\n if (that.main.config['filter-' + id]) {\n $filter.val(that.main.config['filter-' + id]).trigger('change');\n } else {\n $btn.hide();\n }\n }\n\n function drawEnumsTiles() {\n var $tableBody = that.$gridList.find('.tree-table-body');\n that.$gridList.removeClass('tree-table-list').addClass('tree-table-tiles');\n that.$gridList.find('.tree-table-buttons').remove();\n\n // create buttons for panels\n that.$gridList.prepend('
      \\n' +\n ' view_list\\n' +\n ' note_add\\n' +\n '
        \\n' +\n ' \\n' +\n ' queue_play_next\\n' +\n ' \\n' +\n '
        ');\n\n\n var text = '
        ';\n text += '
          ';\n var parts;\n for (var e = 0; e < that.list.length; e++) {\n parts = that.list[e].split('.');\n if (parts.length !== 2) continue;\n var name = getName(that.main.objects, that.list[e]);\n text += '
        • ' + that.main.getIcon(that.list[e]) + '' + name + '
        • ';\n }\n text += '
        ';\n text += '
        ';\n for (var se = 0; se < that.list.length; se++) {\n parts = that.list[se].split('.');\n if (parts.length !== 2) continue;\n\n text += '
        ';\n text += '
        ';\n }\n var scrollTop = {};\n $tableBody.find('.enum-collection').each(function () {\n // remember actual offset\n scrollTop[$(this).data('id')] = $(this).scrollTop();\n });\n\n // destroy droppable\n try {\n var $items = that.$gridEnum.find('.tree-table-body .collection').find('.collection-item');\n try {\n if ($items.droppable('instance')) {\n $items.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n } catch (e) {\n\n }\n\n $tableBody.html(text);\n\n if ($tableBody.find('.tabs li').length > 0) {\n $tableBody.find('.tabs').mtabs({\n onShow: function (tab) {\n that.main.saveConfig('enums-active', $(tab).attr('id'));\n }\n });\n if (that.main.config['enums-active'] && !that.main.noSelect) {\n $tableBody.find('.tabs').mtabs('select', that.main.config['enums-active']);\n }\n }\n\n\n $tableBody.find('.page').each(function () {\n drawEnum($(this).data('id'), $(this), scrollTop[$(this).data('id')]);\n });\n $tableBody.find('.btn-new-category').on('click', function () {\n createOrEditEnum(null, $(this).data('id'));\n });\n $tableBody.find('.btn-edit-category').on('click', function () {\n createOrEditEnum($(this).data('id'));\n });\n $tableBody.find('.btn-del-category').on('click', function () {\n deleteEnum($(this).data('id'));\n });\n $tableBody.find('.edit-content').on('click', function () {\n createOrEditEnum($(this).data('id'));\n });\n $tableBody.find('.delete-content').on('click', function () {\n deleteEnum($(this).data('id'));\n });\n $tableBody.find('.close').on('click', function () {\n removeMember($(this).data('id'), $(this).data('enum'));\n });\n\n that.$gridList.find('.btn-edit').off('click').on('click', function () {\n switchEditMode(!that.editMode);\n });\n\n that.$gridList.find('.btn-switch-tiles').off('click').on('click', function () {\n that.isTiles = false;\n that.main.saveConfig('enumIsTiles', that.isTiles);\n\n setTimeout(function () {\n drawEnumsTable();\n }, 50);\n });\n prepareNewEnum();\n\n var $collection = that.$gridEnum.find('.tree-table-body .collection');\n setupDroppableTiles($collection);\n }\n\n function drawEnumsTable() {\n try {\n var $items = that.$gridEnum.find('.tree-table-main').find('tbody>tr.treetable-enum');\n if ($items.droppable('instance')) {\n $items.droppable('destroy');\n }\n } catch (e) {\n console.log(e);\n }\n // extract all enums\n that.$gridList.html('').removeClass('tree-table-tiles').addClass('tree-table-list');\n\n that.$gridList.treeTable({\n objects: that.main.objects,\n root: 'enum',\n columns: ['title', 'name'],\n members: true,\n colors: true,\n icons: true,\n widths: ['calc(100% - 250px)', '250px'],\n //classes: ['', 'treetable-center'],\n name: 'enums',\n buttonsWidth: '40px',\n buttons: [\n {\n text: false,\n icons: {\n primary:'ui-icon-trash'\n },\n click: function (id, children, parent) {\n if (that.main.objects[id]) {\n if (that.main.objects[id].type === 'enum') {\n if (children) {\n // ask if only object must be deleted or just this one\n that.main.confirmMessage(_('All sub-enums of %s will be deleted too?', id), null, 'help', function (result) {\n // If all\n if (result) {\n that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } // else do nothing\n });\n } else {\n that.main.confirmMessage(_('Are you sure to delete %s?', id), null, 'help', function (result) {\n // If all\n if (result) that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n });\n }\n } else {\n removeMember(id, parent);\n }\n } else {\n if (that.main.objects[parent] && that.main.objects[parent].type === 'enum') {\n removeMember(id, parent);\n } else {\n showMessage(_('Object \"%s\" does not exists. Update the page.', id));\n }\n }\n },\n width: 26,\n height: 20\n }, {\n text: false,\n icons: {\n primary:'ui-icon-pencil'\n },\n match: function (id) {\n return that.main.objects[id] && that.main.objects[id].type === 'enum';\n },\n click: function (id, children, parent) {\n createOrEditEnum(id);\n },\n width: 26,\n height: 20\n }\n ],\n panelButtons: [\n {\n id: 'tab-enums-btn-switch-tiles',\n title: _('change view mode'),\n icon: 'view_module',\n click: function () {\n that.isTiles = true;\n that.main.saveConfig('enumIsTiles', that.isTiles);\n setTimeout(function () {\n drawEnumsTiles();\n }, 50);\n }\n },\n {\n id: 'tab-enums-list-new-enum',\n title: _('New enum'),\n icon: 'note_add',\n click: function () {\n createOrEditEnum(null);\n }\n },\n {\n id: 'tab-enums-list-new-category',\n title: _('New category'),\n icon: 'library_add',\n click: function () {\n createOrEditEnum(null, that.enumEdit);\n }\n },\n {\n id: 'tab-enums-list-edit',\n title: _('Edit'),\n icon: 'edit',\n click: function () {\n switchEditMode(!that.editMode);\n }\n }\n ],\n onChange: function (id, oldId) {\n if (id !== oldId) {\n that.enumEdit = id;\n var obj = that.main.objects[id];\n if (obj && obj.type === 'enum') {\n $('#tab-enums-list-new-enum').removeClass('disabled').attr('title', _('Create new enum, like %s', 'enum.newCategory'));\n var parts = id.split('.');\n if (parts.length === 2) {\n that.$gridList.find('#tab-enums-list-new-category').removeClass('disabled').attr('title', _('Create new category, like %s', id + '.newEnum'));\n } else {\n that.$gridList.find('#tab-enums-list-new-category').addClass('disabled');\n }\n } else {\n that.$gridList.find('#tab-enums-list-new-enum').addClass('disabled');\n that.$gridList.find('#tab-enums-list-new-category').addClass('disabled');\n }\n }\n },\n onReady: setupDroppableTable\n });//.treeTable('show', currentEnum);\n that.$gridList.find('.tree-table-buttons a').addClass('btn-small');\n that.$gridList.find('#tab-enums-list-new-enum').addClass('disabled');\n that.$gridList.find('#tab-enums-list-new-category').addClass('disabled');\n }\n\n function getEnumsChildren(id) {\n var parts = id.split('.');\n var items = [];\n var regex = new RegExp('^' + id.replace(/\\./g, '\\\\.') + '\\\\.');\n for (var se = 0; se < that.list.length; se++) {\n var _parts = that.list[se].split('.');\n if (_parts.length === parts.length + 1 && regex.test(that.list[se])) {\n items.push(that.list[se]);\n }\n }\n return items;\n }\n \n function deleteEnum(id) {\n if (that.main.objects[id].type === 'enum') {\n var children = getEnumsChildren(id);\n \n if (children && children.length) {\n // ask if only object must be deleted or just this one\n that.main.confirmMessage(_('All sub-enums of %s will be deleted too?', id), null, 'help', function (result) {\n // If all\n if (result) {\n that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } // else do nothing\n });\n } else {\n that.main.confirmMessage(_('Are you sure to delete %s?', id), null, 'help', function (result) {\n // If all\n if (result) that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n });\n }\n }\n }\n \n function removeMember(id, parent) {\n that.main.socket.emit('getObject', parent, function (err, obj) {\n if (obj && obj.common && obj.common.members) {\n var pos = obj.common.members.indexOf(id);\n if (pos !== -1) {\n obj.common.members.splice(pos, 1);\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n if (!err) {\n showMessage(_('Removed'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } else {\n showMessage(_('%s is not in the list'));\n }\n }\n });\n }\n\n function addMember(id, parent) {\n that.main.socket.emit('getObject', parent, function (err, obj) {\n if (obj && obj.common) {\n obj.common.members = obj.common.members || [];\n var pos = obj.common.members.indexOf(id);\n if (pos === -1) {\n obj.common.members.push(id);\n obj.common.members.sort();\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n if (!err) {\n showMessage(_('%s added to %s', id, obj._id));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } else {\n showMessage(_('Is yet in the list'));\n }\n }\n });\n }\n \n function showMessage(text, duration, isError) {\n if (typeof duration === 'boolean') {\n isError = duration;\n duration = 3000;\n }\n that.main.showToast(that.$gridEnum.find('.tree-table-buttons'), text, null, duration, isError);\n }\n\n function setupDraggable() {\n var $trs = that.$gridEnum.find('.fancytree-container>tbody');\n try {\n if ($trs.sortable('instance')) {\n $trs.sortable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n\n that.$gridEnum.find('.fancytree-container>tbody')\n .sortable({\n connectWith: '#tab-enums .tab-enums-list .tree-table-main.treetable',\n items: '.fancytree-type-draggable',\n appendTo: that.$gridEnum,\n refreshPositions: true,\n helper: function (e, $target) {\n return $('
        ' + $target.find('.fancytree-title').text() + '
        ');\n },\n zIndex: 999990,\n revert: false,\n scroll: false,\n start: function (e, ui) {\n var $prev = ui.item.prev();\n // place this item back where it was\n ui.item.data('prev', $prev);\n that.$gridEnum.addClass('dragging');\n },\n stop: function (e, ui) {\n that.$gridEnum.removeClass('dragging');\n },\n update: function (event, ui) {\n // place this item back where it was\n var $prev = ui.item.data('prev');\n if (!$prev || !$prev.length) {\n $(this).prepend(ui.item);\n } else {\n $($prev).after(ui.item);\n }\n }\n })\n .disableSelection();\n }\n\n this._initObjectTree = function () {\n var settings = {\n objects: main.objects,\n noDialog: true,\n draggable: ['device', 'channel', 'state'],\n name: 'enum-objects',\n expertModeRegEx: /^system\\.|^yunkong2\\.|^_|^[\\w-]+$|^enum\\.|^[\\w-]+\\.admin|^script\\./,\n texts: {\n select: _('Select'),\n cancel: _('Cancel'),\n all: _('All'),\n id: _('ID'),\n ID: _('ID'),\n name: _('Name'),\n role: _('Role'),\n room: _('Room'),\n 'function': _('Function'),\n value: _('Value'),\n type: _('Type'),\n selectid: _('Select ID'),\n from: _('From'),\n lc: _('Last changed'),\n ts: _('Time stamp'),\n wait: _('Processing...'),\n ack: _('Acknowledged'),\n edit: _('Edit'),\n push: _('Trigger event'),\n ok: _('Ok'),\n with: _('With'),\n without: _('Without'),\n copyToClipboard: _('Copy to clipboard'),\n expertMode: _('Toggle expert mode'),\n refresh:\t_('Update'),\n sort: _('Sort alphabetically'),\n button: _('Settings'),\n noData: _('No data')\n },\n filter: {\n type: 'state'\n },\n columns: ['ID', 'name', 'type', 'role']\n };\n\n selectId('init', settings)\n .selectId('show');\n\n setupDraggable();\n };\n\n function setupDroppableTable($treetable) {\n if (!that.editMode) return;\n\n if (!$treetable) {\n $treetable = that.$gridEnum.find('.tree-table-main');\n }\n\n $treetable.find('tbody>tr.treetable-enum').droppable({\n accept: '.fancytree-type-draggable',\n over: function (e, ui) {\n $(this).addClass('tab-accept-item');\n if ($(this).hasClass('not-empty') && !$(this).hasClass('expanded')) {\n var id = $(this).data('tt-id');\n var timer;\n if ((timer = $(this).data('timer'))) {\n clearTimeout(timer);\n }\n $(this).data('timer', setTimeout(function () {\n that.$gridList.treeTable('expand', $(this).data('tt-id'));\n }, 1000));\n }\n },\n out: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n var timer;\n if ((timer = $(this).data('timer'))) {\n clearTimeout(timer);\n $(this).data('timer', null);\n }\n },\n tolerance: 'pointer',\n drop: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n var id = ui.draggable.data('id');\n var enumId = $(this).data('tt-id');\n\n addMember(id, enumId);\n }\n });\n }\n\n function setupDroppableTiles($collection) {\n if (!that.editMode) return;\n\n $collection = $collection || that.$gridEnum.find('.tree-table-body .collection');\n\n var $items = $collection.find('.collection-item');\n try {\n if ($items.droppable('instance')) {\n $items.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n\n $items.droppable({\n accept: '.fancytree-type-draggable',\n over: function (e, ui) {\n $(this).addClass('tab-accept-item');\n },\n out: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n },\n tolerance: 'pointer',\n drop: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n var id = ui.draggable.data('id');\n var enumId = $(this).data('id');\n addMember(id, enumId);\n }\n });\n }\n\n function createOrEditEnum(id, parentId) {\n var idChanged = false;\n var $dialog = that.$gridEnum.find('#tab-enums-dialog-new');\n var oldId = '';\n\n var nameVal = '';\n var idVal = '';\n var originalIdVal = '';\n var iconVal = '';\n var colorVal = '';\n\n var isIdEditable = true;\n\n installFileUpload($dialog, 50000, function (err, text) {\n if (err) {\n showMessage(err, true);\n } else {\n if (!text.match(/^data:image\\//)) {\n showMessage(_('Unsupported image format'), true);\n return;\n }\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n iconVal = text;\n\n $dialog.find('.tab-enums-dialog-new-icon').show().html('');\n $dialog.find('.tab-enums-dialog-new-icon img').attr('src', text);\n $dialog.find('.tab-enums-dialog-new-icon-clear').show();\n }\n });\n\n if (id) {\n if (that.main.objects[id] && that.main.objects[id].common) {\n nameVal = translateName(that.main.objects[id].common.name);\n iconVal = that.main.objects[id].common.icon;\n colorVal = that.main.objects[id].common.color;\n }\n oldId = id;\n idVal = id;\n $dialog.find('#tab-enums-dialog-preserve-id').prop('checked', true);\n isIdEditable = false;\n } else {\n $dialog.find('#tab-enums-dialog-preserve-id').prop('checked', false);\n isIdEditable = true;\n }\n\n $dialog.find('.tab-enums-dialog-new-title').text(parentId ? _('Create new category') : (idVal ? _('Rename') : _('Create new enum')));\n\n if (idVal) {\n var parts = idVal.split('.');\n if (parts.length <= 2) {\n id = true;\n }\n idVal = parts.pop();\n parentId = parts.join('.');\n originalIdVal = idVal;\n }\n\n $dialog.find('#tab-enums-dialog-new-name')\n .val(nameVal)\n .off('change')\n .on('change', function () {\n var $id = $dialog.find('#tab-enums-dialog-new-id');\n var id = $id.val();\n var val = $(this).val();\n val = val.replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_').trim().toLowerCase();\n if (isIdEditable && (!id || !idChanged)) {\n $id.val(val);\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + (val || '#'));\n // detect materialize\n M.updateTextFields('#tab-enums-dialog-new');\n }\n if ($id.val() && !$id.val().match(/[.\\s]/)) {\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $id.removeClass('wrong');\n } else {\n $dialog.find('.tab-enums-dialog-create').addClass('disabled');\n $id.addClass('wrong');\n }\n }).off('keyup').on('keyup', function () {\n $(this).trigger('change');\n });\n\n $dialog.find('#tab-enums-dialog-new-id')\n .val(idVal)\n .off('change')\n .on('change', function () {\n if ($dialog.find('#tab-enums-dialog-preserve-id').prop('checked')) return;\n idChanged = true;\n var val = $(this).val();\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + ($(this).val() || '#'));\n M.updateTextFields('#tab-enums-dialog-new');\n\n if (val && !val.match(/[.\\s]/)) {\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $(this).removeClass('wrong');\n } else {\n $dialog.find('.tab-enums-dialog-create').addClass('disabled');\n $(this).addClass('wrong');\n }\n }).off('keyup').on('keyup', function () {\n $(this).trigger('change');\n });\n\n $dialog.find('#tab-enums-dialog-new-id').prop('disabled', !isIdEditable);\n\n $dialog.find('.tab-enums-dialog-create')\n .addClass('disabled')\n .off('click')\n .text(oldId ? _('Change') : _('Create'))\n .on('click', function () {\n if (oldId) {\n var name;\n if ($dialog.find('#tab-enums-dialog-preserve-id').prop('checked')) {\n if (typeof that.main.objects[oldId].common.name === 'object') {\n name = that.main.objects[oldId].common.name;\n } else {\n name = {'en': oldId.split('.').pop()};\n }\n name[systemLang] = $dialog.find('#tab-enums-dialog-new-name').val();\n } else {\n name = $dialog.find('#tab-enums-dialog-new-name').val();\n }\n enumRename(\n oldId,\n parentId + '.' + $dialog.find('#tab-enums-dialog-new-id').val(),\n {\n name: name,\n icon: iconVal,\n color: colorVal\n },\n function (err) {\n if (err) {\n showMessage(_('Error: %s', err), true);\n } else {\n showMessage(_('Updated'));\n }\n }\n );\n } else {\n enumAddChild(\n parentId,\n (parentId || 'enum') + '.' + $dialog.find('#tab-enums-dialog-new-id').val(),\n {\n name: $dialog.find('#tab-enums-dialog-new-name').val(),\n icon: iconVal,\n color: colorVal\n },\n function (err) {\n if (err) {\n showMessage(_('Error: %s', err), true, 5000);\n } else {\n showMessage(_('Updated'));\n }\n });\n }\n });\n\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + (idVal || '#'));\n\n if (iconVal) {\n $dialog.find('.tab-enums-dialog-new-icon').show().html(that.main.getIcon(oldId));\n $dialog.find('.tab-enums-dialog-new-icon-clear').show();\n } else {\n $dialog.find('.tab-enums-dialog-new-icon').hide();\n $dialog.find('.tab-enums-dialog-new-icon-clear').hide();\n }\n colorVal = colorVal || false;\n if (colorVal) {\n $dialog.find('.tab-enums-dialog-new-color').val(colorVal);\n } else {\n $dialog.find('.tab-enums-dialog-new-color').val();\n }\n\n M.updateTextFields('#tab-enums-dialog-new');\n that.main.showToast($dialog, _('Drop the icons here'));\n\n $dialog.find('.tab-enums-dialog-new-upload').off('click').on('click', function () {\n $dialog.find('.drop-file').trigger('click');\n });\n $dialog.find('.tab-enums-dialog-new-icon-clear').off('click').on('click', function () {\n if (iconVal) {\n iconVal = '';\n $dialog.find('.tab-enums-dialog-new-icon').hide();\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $dialog.find('.tab-enums-dialog-new-icon-clear').hide();\n }\n });\n $dialog.find('.tab-enums-dialog-new-color-clear').off('click').on('click', function () {\n if (colorVal) {\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $dialog.find('.tab-enums-dialog-new-color-clear').hide();\n $dialog.find('.tab-enums-dialog-new-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-enums-dialog-new-colorpicker')\n }).colorpicker('setValue', '');\n colorVal = '';\n }\n });\n var time = Date.now();\n try {\n $dialog.find('.tab-enums-dialog-new-colorpicker').colorpicker('destroy');\n } catch (e) {\n\n }\n $dialog.find('.tab-enums-dialog-new-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-enums-dialog-new-colorpicker')\n }).colorpicker('setValue', colorVal).on('showPicker.colorpicker', function (/* event */) {\n //$dialog.find('.tab-enums-dialog-new-colorpicker')[0].scrollIntoView(false);\n var $modal = $dialog.find('.modal-content');\n $modal[0].scrollTop = $modal[0].scrollHeight;\n }).on('changeColor.colorpicker', function (event){\n if (Date.now() - time > 100) {\n colorVal = event.color.toHex();\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $dialog.find('.tab-enums-dialog-new-icon-clear').show();\n }\n });\n if (colorVal) {\n $dialog.find('.tab-enums-dialog-new-color-clear').show();\n } else {\n $dialog.find('.tab-enums-dialog-new-color-clear').hide();\n }\n\n $dialog.find('#tab-enums-dialog-preserve-id').off('change').on('change', function () {\n if ($(this).prop('checked')) {\n $dialog.find('#tab-enums-dialog-new-id').prop('disabled', true)\n .val(originalIdVal);\n idVal = originalIdVal;\n isIdEditable = false;\n } else {\n if (that.main.objects[id] && that.main.objects[id].common) {\n isIdEditable = !that.main.objects[id].common['object-non-deletable'] && !that.main.objects[id].common.dontDelete;\n }\n if (isIdEditable) {\n idVal = $dialog.find('#tab-enums-dialog-new-name').val();\n idVal = idVal.replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_').trim().toLowerCase();\n $dialog.find('#tab-enums-dialog-new-id').prop('disabled', false)\n .val(idVal);\n }\n }\n idChanged = false;\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + (idVal || '#'));\n });\n\n // workaround for materialize checkbox problem\n $dialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n\n $dialog.modal().modal('open');\n }\n\n function switchEditMode(isEnabled) {\n that.editMode = isEnabled;\n var $editButton = that.$gridEnum.find('#tab-enums-list-edit');\n\n if (that.editMode) {\n $editButton.removeClass('blue').addClass('red');\n that.$gridEnum.addClass('tab-enums-edit');\n that._initObjectTree();\n showMessage(_('You can drag&drop the devices, channels and states to enums'));\n if (that.isTiles) {\n setupDroppableTiles();\n } else {\n setupDroppableTable();\n }\n } else {\n selectId('destroy');\n try {\n var _$items = that.$gridEnum.find('.collection-item');\n if (_$items.droppable('instance')) {\n _$items.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n try {\n var $trs = that.$gridEnum.find('tbody>tr.treetable-enum');\n if ($trs.droppable('instance')) {\n $trs.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n\n $editButton.removeClass('red').addClass('blue');\n that.$gridEnum.removeClass('tab-enums-edit');\n }\n }\n\n this._postInit = function () {\n if (typeof this.$gridList !== 'undefined') {\n if (!this.main.objects['enum.rooms']) {\n this.main.objects['enum.rooms'] = {\n \"_id\": \"enum.rooms\",\n \"common\": {\n \"icon\": \"home\",\n \"name\": {\n \"en\": \"Rooms\",\n \"cn\": \"场景\"\n },\n \"desc\": {\n \"en\": \"List of the rooms\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\",\n \"acl\": {\n \"owner\": \"system.user.admin\",\n \"ownerGroup\": \"system.group.administrator\",\n \"permissions\": 1911\n }\n };\n that.main.socket.emit('setObject', 'enum.rooms', this.main.objects['enum.rooms']);\n this.list.unshift('enum.rooms');\n }\n if (!this.main.objects['enum.functions']) {\n this.main.objects['enum.functions'] = {\n \"_id\": \"enum.functions\",\n \"common\": {\n \"icon\": \"lightbulb_outline\",\n \"name\": {\n \"en\": \"Functions\",\n \"cn\": \"功能\"\n },\n \"desc\": {\n \"en\": \"List of the functions\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\",\n \"acl\": {\n \"owner\": \"system.user.admin\",\n \"ownerGroup\": \"system.group.administrator\",\n \"permissions\": 1911\n }\n };\n this.list.unshift('enum.functions');\n that.main.socket.emit('setObject', 'enum.functions', this.main.objects['enum.functions']);\n }\n\n if (this.isTiles) {\n drawEnumsTiles();\n } else {\n drawEnumsTable();\n }\n if (this.editMode) {\n this._initObjectTree();\n } else {\n selectId('destroy');\n }\n }\n };\n\n this.init = function (update) {\n if (this.inited && !update) {\n return;\n }\n if (!this.main || !this.main.objectsLoaded) {\n setTimeout(function () {\n that.init(update);\n }, 250);\n return;\n }\n\n this._postInit();\n\n if (!this.inited) {\n this.inited = true;\n this.main.subscribeObjects('enum.*');\n }\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n // subscribe objects and states\n this.main.unsubscribeObjects('enum.*');\n }\n switchEditMode(false);\n this.$gridList.treeTable('destroy');\n };\n\n this.objectChange = function (id, obj, action) {\n //Update enums\n if (id.match(/^enum\\./)) {\n if (obj) {\n if (this.list.indexOf(id) === -1) this.list.push(id);\n } else {\n var j = this.list.indexOf(id);\n if (j !== -1) this.list.splice(j, 1);\n }\n\n if (this.updateTimers) clearTimeout(this.updateTimers);\n\n this.updateTimers = setTimeout(function () {\n that.updateTimers = null;\n that._postInit();\n }, 200);\n }\n\n if (this.$grid) selectId('object', id, obj, action);\n };\n}\n","function Events(main) {\r\n 'use strict';\r\n\r\n var that = this;\r\n this.main = main;\r\n this.$tab = $('#tab-events'); // body\r\n var isRemote = location.hostname === 'yunkong2.net' || location.hostname === 'yunkong2.pro';\r\n\r\n var list = {\r\n count: 0,\r\n start: 0,\r\n limit: 500 //const\r\n };\r\n var timeout = null;\r\n\r\n var pause = {\r\n list: [],\r\n mode: false,\r\n counter: 0,\r\n overflow: false,\r\n $counterSpan: null\r\n };\r\n\r\n var $header;\r\n var hdr;\r\n var $table;\r\n var $outer;\r\n var $pause;\r\n\r\n var columnResizeInit = {\r\n done: false,\r\n timer: null\r\n };\r\n\r\n this.prepare = function () {\r\n $outer = this.$tab.find('#event-outer');\r\n $table = this.$tab.find('#event-table');\r\n $pause = this.$tab.find('#event-pause');\r\n\r\n // install header\r\n $header = this.$tab.find('#events-table-tr');\r\n hdr = new IobListHeader($header, {list: $outer, colWidthOffset: 1, prefix: 'event-filter'});\r\n hdr.doFilter = filterEvents;\r\n\r\n hdr.add('combobox', 'type');\r\n hdr.add('edit', 'id', 'ID');\r\n //hdr.add('edit', 'val', 'Value');\r\n hdr.add('edit', 'val', 'value');\r\n hdr.add('combobox', 'ack', 'ack', [\r\n {val: '', name: 'all'},\r\n {val: 'true', name: 'ack'},\r\n {val: 'false', name: 'not ack'}\r\n ]);\r\n hdr.add('combobox', 'from', 'from');\r\n hdr.add('text', 'ts');\r\n hdr.add('text', 'lc');\r\n\r\n Object.defineProperty(hdr, 'getValues', {\r\n value: function () {\r\n hdr.ID.selectedVal = hdr.ID.selectedVal.toLocaleLowerCase();\r\n if (hdr.ack.selectedVal === 'true') hdr.ack.selectedVal = true;\r\n if (hdr.ack.selectedVal === 'false') hdr.ack.selectedVal = false;\r\n },\r\n enumerateble: false\r\n });\r\n\r\n $pause.on('click', function () {\r\n that.pause();\r\n });\r\n\r\n // bind \"clear events\" button\r\n var $eventClear = this.$tab.find('#event-clear');\r\n $eventClear\r\n .off('click').on('click', function () {\r\n list.count = 0;\r\n list.start = 0;\r\n that.$tab.find('#event-table').html('');\r\n });\r\n };\r\n\r\n this.init = function () {\r\n if (isRemote) {\r\n that.$tab.find('#grid-events').html(_('You can\\'t see events via cloud') + '
        cloud_off').addClass('no-cloud-events');\r\n return;\r\n }\r\n if (!hdr) return;\r\n\r\n if (this.inited) {\r\n return;\r\n }\r\n \r\n installColResize();\r\n\r\n this.inited = true;\r\n this.main.subscribeObjects('*');\r\n this.main.subscribeStates('*');\r\n };\r\n\r\n this.destroy = function () {\r\n if (this.inited) {\r\n this.inited = false;\r\n this.main.unsubscribeObjects('*');\r\n this.main.unsubscribeStates('*');\r\n }\r\n };\r\n\r\n var widthSet = false;\r\n\r\n function installColResize() {\r\n if (!$.fn.colResizable) return;\r\n if ($outer.is(':visible')) {\r\n $outer.colResizable({\r\n liveDrag: true,\r\n\r\n partialRefresh: true,\r\n marginLeft: 5,\r\n postbackSafe:true,\r\n\r\n onResize: function (event) {\r\n return hdr.syncHeader();\r\n // // read width of data.$tree and set the same width for header\r\n // var thDest = $('#log-outer-header >thead>tr>th');\t//if table headers are specified in its semantically correct tag, are obtained\r\n // var thSrc = $outer.find('>tbody>tr:first>td');\r\n // for (var i = 1; i < thSrc.length; i++) {\r\n // $(thDest[i]).attr('width', $(thSrc[i]).width());\r\n // }\r\n }\r\n });\r\n hdr.syncHeader();\r\n } else {\r\n setTimeout(function () {\r\n installColResize();\r\n }, 200)\r\n }\r\n }\r\n\r\n function updateResizersHeight() {\r\n columnResizeInit.timer = null;\r\n $(window).trigger('resize.JColResizer');\r\n }\r\n\r\n // ----------------------------- Show events ------------------------------------------------\r\n this.add = function (id, stateOrObj, isMessage, isState) {\r\n if (isRemote) return;\r\n\r\n var type = isState ? 'stateChange' : (isMessage ? 'message' : 'objChange');\r\n var value;\r\n var ack;\r\n var from = '';\r\n var ts;\r\n var lc;\r\n if (hdr) {\r\n if (hdr.getValues) {\r\n hdr.getValues();\r\n }\r\n\r\n hdr.type.checkAddOption(type);\r\n }\r\n if (!columnResizeInit.done) {\r\n // if the height not 100%, the column resizer is too short. Wait till the table will be really full and reinit resizer.\r\n // update resizer once and remeber it if the table has full height\r\n if (!columnResizeInit.timer) {\r\n columnResizeInit.timer = setTimeout(updateResizersHeight, 1000);\r\n }\r\n\r\n if (list.count > 20) {\r\n columnResizeInit.done = true;\r\n }\r\n }\r\n\r\n if (!pause.mode) {\r\n if (list.count >= that.limit) {\r\n list.start++;\r\n var e = document.getElementById('event_' + list.start);\r\n if (e) e.outerHTML = '';\r\n } else {\r\n list.count++;\r\n }\r\n }\r\n\r\n // if Object\r\n if (!isMessage && !isState) {\r\n if (!stateOrObj) {\r\n value = 'deleted';\r\n ts = main.formatDate(new Date());\r\n } else {\r\n value = JSON.stringify(stateOrObj, '\\x0A', 2);\r\n if (value !== undefined && value.length > 30) {\r\n value = '' + value.substring(0, 30) + '...';\r\n }\r\n ts = main.formatDate(stateOrObj.ts);\r\n }\r\n } else\r\n // if state\r\n if (isState) {\r\n if (!stateOrObj) {\r\n value = 'deleted';\r\n ts = main.formatDate(new Date());\r\n } else {\r\n stateOrObj.from = stateOrObj.from || '';\r\n stateOrObj.from = stateOrObj.from.replace('system.adapter.', '');\r\n stateOrObj.from = stateOrObj.from.replace('system.', '');\r\n\r\n hdr && hdr.from.checkAddOption(stateOrObj.from, function (o) {\r\n return {val: o.replace(/\\./g, '-'), name: o};\r\n });\r\n\r\n from = stateOrObj.from;\r\n\r\n value = JSON.stringify(stateOrObj.val);\r\n if (value !== undefined && value.length > 30) {\r\n value = '
        ' + value.substring(0, 30) + '...
        ';\r\n }\r\n ack = stateOrObj.ack ? 'true' : 'false';\r\n ts = main.formatDate(stateOrObj.ts);\r\n lc = main.formatDate(stateOrObj.lc);\r\n }\r\n } else\r\n // if message\r\n if (isMessage) {\r\n // todo\r\n }\r\n\r\n var visible = true;\r\n if (hdr) {\r\n if (hdr.type.selectedVal && hdr.type.selectedVal !== type) {\r\n visible = false;\r\n } else if (hdr.ID.selectedVal && id.toLocaleLowerCase().indexOf(hdr.ID.selectedVal) === -1) {\r\n visible = false;\r\n } else if (hdr.value.selectedVal !== '' && value !== null && value !== undefined && value.indexOf(hdr.value.selectedVal) === -1) {\r\n visible = false;\r\n } else if (hdr.ack.selectedVal !== '' && hdr.ack.selectedVal !== ack) {\r\n visible = false;\r\n } else if (hdr.from.selectedVal && hdr.from.selectedVal !== from) {\r\n visible = false;\r\n }\r\n }\r\n\r\n\r\n var text = '';\r\n text += '' + type + '';\r\n text += '' + id + '';\r\n if (isNaN(value)) {\r\n text += '' + (value || '') + '';\r\n } else {\r\n text += '' + (value || '') + '';\r\n }\r\n text += '' + (ack || '') + '';\r\n text += '' + (from || '') + '';\r\n text += '' + (ts || '') + '';\r\n text += '' + (lc || '') + '';\r\n text += '';\r\n\r\n if (pause.mode) {\r\n pause.list.push(text);\r\n pause.counter++;\r\n\r\n if (pause.counter > list.limit) {\r\n if (!pause.overflow) {\r\n $pause.addClass('red lighten3')\r\n .attr('title', _('Message buffer overflow. Losing oldest'));\r\n pause.overflow = true;\r\n }\r\n pause.list.shift();\r\n }\r\n pause.$counterSpan.html(pause.counter);\r\n } else if ($table) {\r\n $table.prepend(text);\r\n if (!widthSet && (window.location.hash === '#tab-events' || window.location.hash === '#events')) {\r\n hdr && hdr.syncHeader();\r\n widthSet = true;\r\n }\r\n }\r\n };\r\n\r\n /*this.onSelected = function () {\r\n hdr && hdr.syncHeader();\r\n };*/\r\n\r\n function filterEvents() {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n if (hdr.getValues) {\r\n hdr.getValues();\r\n }\r\n\r\n $table && $table.find('.event-line').each(function (index) {\r\n var isShow = true;\r\n var $this = $(this);\r\n if (hdr.type.selectedVal && !$this.hasClass('event-type-' + hdr.type.selectedVal)) {\r\n isShow = false;\r\n } else\r\n if (hdr.from.selectedVal && !$this.hasClass('event-from-' + hdr.from.selectedVal)) {\r\n isShow = false;\r\n } else\r\n if (hdr.ack.selectedVal !== '' && !$this.hasClass('event-ack-' + hdr.ack.selectedVal)) {\r\n isShow = false;\r\n } else\r\n if (hdr.ID.selectedVal && $(this).find('td.event-column-id').text().toLocaleLowerCase().indexOf(hdr.ID.selectedVal) === -1) {\r\n isShow = false;\r\n } else\r\n if (hdr.value.selectedVal !== '' && $(this).find('td.event-column-value').text().indexOf(hdr.value.selectedVal) === -1) {\r\n isShow = false;\r\n }\r\n\r\n if (isShow) {\r\n $this.show();\r\n } else {\r\n $this.hide();\r\n }\r\n });\r\n }\r\n\r\n this.pause = function () {\r\n if (!pause.mode) {\r\n $pause.addClass('yellow btn-pause-button-active');\r\n\r\n pause.$counterSpan = $pause;\r\n pause.$counterSpan.html('0');\r\n pause.counter = 0;\r\n pause.mode = true;\r\n } else {\r\n pause.mode = false;\r\n for (var i = 0; i < pause.list.length; i++) {\r\n if (list.count >= 500) {\r\n list.start++;\r\n var e = document.getElementById('event_' + list.start);\r\n if (e) e.outerHTML = '';\r\n } else {\r\n list.count++;\r\n }\r\n $table.prepend(pause.list[i]);\r\n }\r\n pause.overflow = false;\r\n pause.list = [];\r\n pause.counter = 0;\r\n\r\n $pause\r\n .removeClass('yellow btn-pause-button-active')\r\n .html('pause');\r\n }\r\n };\r\n}\r\n\r\n\r\n","function fileHandler(event) {\n event.preventDefault();\n var file = event.dataTransfer ? event.dataTransfer.files[0] : event.target.files[0];\n\n var $dz = $(this).find('.drop-zone');\n var callback = $(this).data('drop-zone-cb');\n var limit = $(this).data('limit');\n if (file.size > (limit || 10000)) {\n callback && callback(_('File is too big!'));\n $dz.hide();\n return false;\n }\n $dz.show();\n var reader = new FileReader();\n reader.onload = function (evt) {\n $dz.hide();\n callback && callback(null, evt.target.result);\n };\n reader.readAsDataURL(file);\n}\n\n/**\n * Install file upload on some div\n * @param {object} $dropZone is jquery object of the div (DOM element) where the drop zone must be installed\n * @param {number} limit is maximal size of file in bytes\n * @param {function} callback is callback in form function (err, fileDataBase64) {}\n*/\nfunction installFileUpload($dropZone, limit, callback) {\n if (typeof window.FileReader !== 'undefined' && !$dropZone.data('installed')) {\n $dropZone.data('installed', true);\n $dropZone.prepend('
        ');\n var $dz = $dropZone.find('.drop-zone');\n $dropZone[0].ondragover = function() {\n $dz.off('click');\n $dz.show();\n return false;\n };\n\n $dz[0].ondragleave = function() {\n $dz.hide();\n return false;\n };\n\n $dz[0].ondrop = fileHandler.bind($dropZone[0]);\n }\n $dropZone.data('drop-zone-cb', callback);\n $dropZone.data('limit', limit);\n $dropZone.find('.drop-file').on('change', fileHandler.bind($dropZone[0]));\n}","function Hosts(main) {\n 'use strict';\n\n var that = this;\n this.main = main;\n this.list = [];\n this.$tab = $('#tab-hosts');\n this.$grid = this.$tab.find('#hosts');\n this.$table = this.$tab.find('#grid-hosts');\n this.inited = false;\n this.isTiles = true;\n this.words = {};\n\n this.prepare = function () {\n this.isTiles = (this.main.config.hostsIsTiles !== undefined && this.main.config.hostsIsTiles !== null) ? this.main.config.hostsIsTiles : true;\n\n // fix for IE\n if (this.main.browser === 'ie' && this.main.browserVersion <= 10) {\n this.isTiles = false;\n this.$tab.find('.btn-switch-tiles').hide();\n }\n\n this.$tab.find('.btn-reload')\n .attr('title', _('Update'))\n .on('click', function () {\n that.init(true);\n });\n\n this.$tab.find('.btn-switch-tiles').off('click').on('click', function () {\n that.isTiles = !that.isTiles;\n\n if (that.isTiles) {\n $(this).find('i').text('view_list');\n } else {\n $(this).find('i').text('view_module');\n }\n\n that.main.saveConfig('hostsIsTiles', that.isTiles);\n\n setTimeout(function () {\n that._postInit();\n }, 50);\n });\n\n if (this.isTiles) {\n this.$tab.find('.btn-switch-tiles').find('i').text('view_list');\n } else {\n this.$tab.find('.btn-switch-tiles').find('i').text('view_module');\n }\n\n this.$tab.find('.filter-clear').on('click', function () {\n that.$tab.find('.filter-input').val('').trigger('change');\n });\n\n var $hostsFilter = this.$tab.find('.filter-input');\n $hostsFilter.on('change', function () {\n var filter = $(this).val();\n if (filter) {\n $(this).addClass('input-not-empty');\n that.$tab.find('.filter-clear').show();\n } else {\n that.$tab.find('.filter-clear').hide();\n $(this).removeClass('input-not-empty');\n }\n\n that.main.saveConfig('hostsFilter', filter);\n applyFilter(filter);\n }).on('keyup', function () {\n if (that.filterTimeout) clearTimeout(that.filterTimeout);\n that.filterTimeout = setTimeout(function () {\n that.$tab.find('.filter-input').trigger('change');\n }, 300);\n });\n\n if (this.main.config.hostsFilter && this.main.config.hostsFilter[0] !== '{') {\n $hostsFilter.val(that.main.config.hostsFilter).addClass('input-not-empty');\n this.$tab.find('.filter-clear').show();\n } else {\n this.$tab.find('.filter-clear').hide();\n }\n\n // cache translations\n this.words['Title'] = _('Title');\n this.words['OS'] = _('OS');\n this.words['Available'] = _('Available');\n this.words['Installed'] = _('Installed');\n this.words['Events'] = _('Events');\n this.words['Title'] = _('Title');\n that.words['Type'] = _('Type');\n };\n\n // ----------------------------- Hosts show and Edit ------------------------------------------------\n this.initButtons = function (id) {\n var selector = id ? '[data-host-id=\"' + id + '\"]' : '';\n\n this.$tab.find('.host-update-submit' + selector).off('click').on('click', function () {\n that.main.cmdExec($(this).attr('data-host-name'), 'upgrade self', function (exitCode) {\n if (!exitCode) that.init(true);\n });\n });\n\n this.$tab.find('.host-restart-submit' + selector).off('click').on('click', function () {\n that.main.waitForRestart = true;\n that.main.cmdExec($(this).attr('data-host-name'), '_restart');\n });\n this.$tab.find('.host-delete' + selector).off('click').on('click', function () {\n that.main.cmdExec(that.main.currentHost, 'host remove ' + $(this).attr('data-host-name'));\n });\n\n this.$tab.find('.host-edit' + selector).off('click').on('click', function () {\n editHost($(this).attr('data-host-id'));\n });\n\n this.$tab.find('.host-update-hint-submit' + selector).off('click').on('click', function () {\n var infoTimeout = setTimeout(function () {\n showUpdateInfo();\n infoTimeout = null;\n }, 1000);\n\n that.main.socket.emit('sendToHost', $(this).attr('data-host-name'), 'getLocationOnDisk', null, function (data) {\n if (infoTimeout) clearTimeout(infoTimeout);\n infoTimeout = null;\n showUpdateInfo(data);\n });\n });\n\n };\n\n function showUpdateInfo(data) {\n var $dialog = $('#dialog-host-update');\n if (data) {\n var path = data.path;\n path = path.replace(/\\\\/g, '/');\n var parts = path.split('/');\n parts.pop(); // js-controller\n parts.pop(); // node_modules\n\n if (data.platform === 'linux' || data.platform === 'darwin' || data.platform === 'freebsd' || data.platform === 'lin') {\n // linux\n $dialog.find('#dialog-host-update-instructions').val('cd ' + parts.join('/') + '\\nsudo yunkong2 stop\\nsudo yunkong2 update\\nsudo yunkong2 upgrade self\\nsudo yunkong2 start')\n } else {\n // windows\n $dialog.find('#dialog-host-update-instructions').val('cd ' + parts.join('\\\\') + '\\nyunkong2 stop\\nyunkong2 update\\nyunkong2 upgrade self\\nyunkong2 start')\n }\n } else {\n $dialog.find('#dialog-host-update-instructions').val('cd /opt/yunkong2\\nsudo yunkong2 stop\\nsudo yunkong2 update\\nsudo yunkong2 upgrade self\\nsudo yunkong2 start')\n }\n\n if (!$dialog.data('inited')) {\n $dialog.data('inited', true);\n $dialog.modal();\n }\n $dialog.modal('open');\n }\n\n function applyFilter(filter) {\n filter = (filter || '').toLowerCase().trim();\n\n if (!filter) {\n that.$tab.find('.hosts-host').show();\n that.$tab.find('.hosts-host-filtered-out').hide();\n } else {\n var someVisible = false;\n that.$tab.find('.hosts-host').each(function () {\n var text = $(this).data('host-filter');\n if (text.toLowerCase().indexOf(filter) !== -1) {\n $(this).show();\n someVisible = true;\n } else {\n $(this).hide();\n }\n });\n if (!someVisible) {\n that.$tab.find('.hosts-host-filtered-out').show();\n } else {\n that.$tab.find('.hosts-host-filtered-out').hide();\n }\n }\n }\n\n function showOneHostRow(index) {\n var obj = that.main.objects[that.list[index].id];\n var alive = that.main.states[obj._id + '.alive'] && that.main.states[obj._id + '.alive'].val && that.main.states[obj._id + '.alive'].val !== 'null';\n obj.common = obj.common || {};\n obj.native = obj.native || {};\n\n var text = '';\n //LED\n text += '
        ';\n // icon\n text += '' + that.main.getHostIcon(obj) + '';\n // name\n text += '' + obj.common.hostname + '';\n // type\n text += '' + obj.common.type + '';\n var title = obj.common.titleLang || obj.common.title;\n if (typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n // description\n text += '' + title + '';\n // platform\n // text += '' + obj.common.platform + ''; // actually only one platform\n // OS\n text += '' + (obj.native.os ? obj.native.os.platform : _('unknown')) + '';\n // Available\n text += '' +\n '' +\n '' +\n '';\n\n // installed\n text += '' + obj.common.installedVersion + '';\n\n // event rates\n if (that.main.states[obj._id + '.inputCount']) {\n text += '⇥' + that.main.states[obj._id + '.inputCount'].val + ' / ↦' + that.main.states[obj._id + '.outputCount'].val + '';\n } else {\n text += ' / ';\n }\n\n // restart button\n text += '';\n\n text += '';\n\n return text;\n }\n\n function showOneHostTile(index) {\n var obj = that.main.objects[that.list[index].id];\n var alive = that.main.states[obj._id + '.alive'] && that.main.states[obj._id + '.alive'].val && that.main.states[obj._id + '.alive'].val !== 'null';\n obj.common = obj.common || {};\n obj.native = obj.native || {};\n\n var color;\n if (obj.common.color) {\n color = that.main.invertColor(obj.common.color);\n }\n\n var text = '
        '+\n '
        ' +\n '
        '+\n ' ' + that.main.getHostIcon(obj, ' ') +\n '
        ' +\n '
        '+\n '
        ' +\n ' ' + obj.common.hostname + '' +\n '
          '+\n '
        • ' + that.words['Type'] + ': ' + obj.common.type + '
        • ' +\n '
        • ' + that.words['Title'] + ': ' + obj.common.title + '
        • ' +\n '
        • ' + that.words['OS'] + ': ' + (obj.native.os ? obj.native.os.platform : _('unknown')) + '
        • ' +\n '
        • ' + that.words['Available'] + ':
        • ' +\n '
        • ' + that.words['Installed'] + ': ' + obj.common.installedVersion + '
        • ';\n\n if (that.main.states[obj._id + '.inputCount']) {\n text += '
        • ' + that.words['Events'] + ': ⇥' + that.main.states[obj._id + '.inputCount'].val + ' / ↦' + that.main.states[obj._id + '.outputCount'].val + '
        • ';\n } else {\n text += '
        • ' + that.words['Events'] + ': /
        • ';\n }\n\n text += '
        '+\n '
        '+\n '
        '+\n ' edit' +\n ' autorenew';\n if (obj.common.hostname !== that.main.currentHost) {\n text += ' delete';\n }\n text += ' refresh' +\n ' refresh' +\n '
        '+\n '
        '+\n '
        ';\n\n return text;\n }\n\n function editHost(id) {\n var $dialog = $('#tab-host-dialog-edit');\n\n var titleVal = '';\n var iconVal = '';\n var colorVal = '';\n\n installFileUpload($dialog, 50000, function (err, text) {\n if (err) {\n that.main.showToast($dialog, err);\n } else {\n if (!text.match(/^data:image\\//)) {\n that.main.showToast($dialog, _('Unsupported image format'));\n return;\n }\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n iconVal = text;\n\n $dialog.find('.tab-host-dialog-edit-icon').show().html('');\n $dialog.find('.tab-host-dialog-edit-icon img').attr('src', text);\n $dialog.find('.tab-host-dialog-edit-icon-clear').show();\n }\n });\n\n if (that.main.objects[id] && that.main.objects[id].common) {\n titleVal = that.main.objects[id].common.title;\n if (typeof titleVal === 'object') {\n titleVal = titleVal[systemLang] || titleVal.en;\n }\n iconVal = that.main.objects[id].common.icon;\n colorVal = that.main.objects[id].common.color;\n }\n\n $dialog.find('#tab-host-dialog-edit-title')\n .val(titleVal)\n .off('change')\n .on('change', function () {\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n }).off('keyup').on('keyup', function () {\n $(this).trigger('change');\n });\n\n $dialog.find('.tab-host-dialog-ok')\n .addClass('disabled')\n .off('click')\n .on('click', function () {\n var obj = JSON.parse(JSON.stringify(that.main.objects[id]));\n obj.common.title = $dialog.find('#tab-host-dialog-edit-title').val();\n obj.common.icon = iconVal;\n obj.common.color = colorVal;\n if (JSON.stringify(obj) !== JSON.stringify(that.main.objects[id])) {\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n that.main.showToast($dialog, _('Updated'));\n });\n } else {\n that.main.showToast($dialog, _('Nothing changed'));\n }\n });\n\n if (iconVal) {\n $dialog.find('.tab-host-dialog-edit-icon').show().html(that.main.getIcon(id));\n $dialog.find('.tab-host-dialog-edit-icon-clear').show();\n } else {\n $dialog.find('.tab-host-dialog-edit-icon').hide();\n $dialog.find('.tab-host-dialog-edit-icon-clear').hide();\n }\n\n colorVal = colorVal || false;\n\n if (colorVal) {\n $dialog.find('.tab-host-dialog-edit-color').val(colorVal);\n } else {\n $dialog.find('.tab-host-dialog-edit-color').val();\n }\n\n M.updateTextFields('#tab-host-dialog-edit');\n that.main.showToast($dialog, _('Drop the icons here'));\n\n $dialog.find('.tab-host-dialog-edit-upload').off('click').on('click', function () {\n $dialog.find('.drop-file').trigger('click');\n });\n\n $dialog.find('.tab-host-dialog-edit-icon-clear').off('click').on('click', function () {\n if (iconVal) {\n iconVal = '';\n $dialog.find('.tab-host-dialog-edit-icon').hide();\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n $dialog.find('.tab-host-dialog-edit-icon-clear').hide();\n }\n });\n $dialog.find('.tab-host-dialog-edit-color-clear').off('click').on('click', function () {\n if (colorVal) {\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n $dialog.find('.tab-host-dialog-edit-color-clear').hide();\n $dialog.find('.tab-host-dialog-edit-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-host-dialog-edit-colorpicker')\n }).colorpicker('setValue', '');\n colorVal = '';\n }\n });\n var time = Date.now();\n try {\n $dialog.find('.tab-host-dialog-edit-colorpicker').colorpicker('destroy');\n } catch (e) {\n\n }\n $dialog.find('.tab-host-dialog-edit-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-host-dialog-edit-colorpicker')\n }).colorpicker('setValue', colorVal).on('showPicker.colorpicker', function (/* event */) {\n //$dialog.find('.tab-host-dialog-edit-colorpicker')[0].scrollIntoView(false);\n var $modal = $dialog.find('.modal-content');\n $modal[0].scrollTop = $modal[0].scrollHeight;\n }).on('changeColor.colorpicker', function (event){\n if (Date.now() - time > 100) {\n colorVal = event.color.toHex();\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n $dialog.find('.tab-host-dialog-edit-icon-clear').show();\n }\n });\n if (colorVal) {\n $dialog.find('.tab-host-dialog-edit-color-clear').show();\n } else {\n $dialog.find('.tab-host-dialog-edit-color-clear').hide();\n }\n\n $dialog.modal().modal('open');\n }\n\n function showHostsTile() {\n var text = '';\n for (var i = 0; i < that.list.length; i++) {\n text += showOneHostTile(i);\n }\n that.$table.html('');\n that.$tab.find('.hosts-table').hide();\n that.$grid.html(text).show();\n that.$grid.append('
        ' + _('Filtered out') + '
        ');\n }\n\n function showHostsTable() {\n var text = '';\n for (var i = 0; i < that.list.length; i++) {\n text += showOneHostRow(i);\n }\n that.$grid.html('').hide();\n that.$table.html(text);\n that.$tab.find('.hosts-table').show();\n that.$table.append('' + _('Filtered out') + '');\n }\n\n this.updateCounter = function (counter) {\n if (counter === undefined) {\n this.main.tabs.adapters.getAdaptersInfo(this.main.currentHost, false, false, function (repository, installedList) {\n var hostsToUpdate = 0;\n if (!installedList || !installedList.hosts) return;\n\n for (var id in installedList.hosts) {\n if (!installedList.hosts.hasOwnProperty(id)) continue;\n var obj = that.main.objects['system.host.' + id];\n if (!obj || !obj.common) continue;\n var installedVersion = obj.common.installedVersion;\n var availableVersion = obj.common ? (repository && repository[obj.common.type] ? repository[obj.common.type].version : '') : '';\n\n if (installedVersion && availableVersion && !that.main.upToDate(availableVersion, installedVersion)) {\n id = 'system.host.' + id.trim().replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_');\n if (that.main.states[id + '.alive'] && that.main.states[id + '.alive'].val && that.main.states[id + '.alive'].val !== 'null') {\n hostsToUpdate++;\n }\n }\n }\n\n that.updateCounter(hostsToUpdate);\n });\n } else if (counter) {\n var $updates = $('#updates-for-hosts');\n if ($updates.length) {\n $updates.text(counter);\n } else {\n $('' + counter + '').appendTo('.admin-sidemenu-items[data-tab=\"tab-hosts\"] a');\n }\n } else {\n $('#updates-for-hosts').remove();\n }\n };\n\n this._postInit = function () {\n if (typeof that.$grid !== 'undefined') {\n if (this.isTiles) {\n showHostsTile();\n } else {\n showHostsTable()\n }\n applyFilter(this.$tab.find('.filter-input').val());\n\n var timer = setTimeout(function () {\n console.warn('Timeout for repository');\n timer = null;\n that.initButtons();\n }, 2000);\n\n var host = that.main.currentHost;\n if (!host) {\n // find alive host\n for (var i = 0; i < that.list.length; i++) {\n if (that.main.states[that.list[i].id + '.alive'] && that.main.states[that.list[i].id + '.alive'].val) {\n host = that.list[i].id;\n break;\n }\n }\n }\n\n that.main.tabs.adapters.getAdaptersInfo(host, true, false, function (repository, installedList) {\n if (!installedList || !installedList.hosts) return;\n\n for (var id in installedList.hosts) {\n if (!installedList.hosts.hasOwnProperty(id)) continue;\n var obj = that.main.objects['system.host.' + id];\n var installed = installedList.hosts[id].version;\n if (installed !== installedList.hosts[id].runningVersion) installed += '(' + _('Running: ') + installedList.hosts[id].runningVersion + ')';\n if (!installed && obj.common && obj.common.installedVersion) installed = obj.common.installedVersion;\n\n id = 'system.host.' + id.trim().replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_');\n that.$tab.find('.hosts-version-installed[data-host-id=\"' + id + '\"]').html(installed);\n }\n\n that.$tab.find('.hosts-host').each(function () {\n var id = $(this).data('host-id');\n var obj = that.main.objects[id];\n var installedVersion = obj.common.installedVersion;\n var availableVersion = obj.common ? (repository && repository[obj.common.type] ? repository[obj.common.type].version : '') : '';\n if (installedVersion && availableVersion) {\n if (!that.main.upToDate(availableVersion, installedVersion)) {\n // show button\n if (that.main.states[id + '.alive'] && that.main.states[id + '.alive'].val && that.main.states[id + '.alive'].val !== 'null') {\n $(this).find('.host-update-submit').show();\n $(this).find('.host-update-hint-submit').show();\n $(this).find('.hosts-version-installed').addClass('updateReady');\n $(this).find('.hosts-version-available').addClass('hosts-version-available-updatable');\n }\n }\n }\n if (availableVersion) {\n $(this).find('.hosts-version-available').html(availableVersion);\n }\n });\n\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n that.initButtons();\n });\n }\n };\n\n this.init = function (update) {\n if (this.inited && !update) {\n return;\n }\n\n this.getHosts(function () {\n that._postInit();\n });\n if (!this.inited) {\n this.inited = true;\n this.main.subscribeObjects('system.host.*');\n this.main.subscribeStates('system.host.*');\n }\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n this.main.unsubscribeObjects('system.host.*');\n this.main.unsubscribeStates('system.host.*');\n }\n };\n\n this.addHost = function (obj) {\n var addr = null;\n // Find first non internal IP and use it as identifier\n if (obj.native.hardware && obj.native.hardware.networkInterfaces) {\n for (var eth in obj.native.hardware.networkInterfaces) {\n if (!obj.native.hardware.networkInterfaces.hasOwnProperty(eth)) continue;\n for (var num = 0; num < obj.native.hardware.networkInterfaces[eth].length; num++) {\n if (!obj.native.hardware.networkInterfaces[eth][num].internal) {\n addr = obj.native.hardware.networkInterfaces[eth][num].address;\n break;\n }\n }\n if (addr) break;\n }\n }\n if (addr) {\n this.list.push({name: obj.common.hostname, address: addr, id: obj._id});\n } else {\n this.list.push({name: obj.common.hostname, address: '127.0.0.1', id: obj._id});\n }\n };\n\n this.getHosts = function (callback) {\n this.main.socket.emit('getForeignObjects', 'system.host.*', 'state', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.objects[id] = res[id];\n }\n that.main.socket.emit('getForeignStates', 'system.host.*', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.states[id] = res[id];\n }\n that.main.socket.emit('getForeignObjects', 'system.host.*', 'host', function (err, res) {\n that.list = [];\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n var obj = res[id];\n\n that.main.objects[id] = obj;\n\n if (obj.type === 'host') {\n that.addHost(obj);\n }\n }\n main.initHostsList();\n if (callback) callback();\n });\n });\n });\n };\n\n this.objectChange = function (id, obj, action) {\n // Update hosts\n if (id.match(/^system\\.host\\.[-\\w]+$/)) {\n var found = false;\n var i;\n for (i = 0; i < this.list.length; i++) {\n if (this.list[i].id === id) {\n found = true;\n break;\n }\n }\n\n if (obj) {\n if (!found) this.list.push({id: id, address: obj.common.address ? obj.common.address[0] : '', name: obj.common.name});\n } else {\n if (found) this.list.splice(i, 1);\n }\n \n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that._postInit();\n }, 200);\n }\n };\n\n this.stateChange = function (id, state) {\n if (id.match(/^system\\.host\\..+\\.alive$/)) {\n id = id.substring(0, id.length - 6);\n if (state && state.val) {\n this.$tab.find('.hosts-led[data-host-id=\"' + id + '\"]').removeClass('led-red').addClass('led-green');\n } else {\n this.$tab.find('.hosts-led[data-host-id=\"' + id + '\"]').removeClass('led-green').addClass('led-red');\n this.$tab.find('.host-update-submit[data-host-id=\"' + id + '\"]').hide();\n this.$tab.find('.host-update-hint-submit[data-host-id=\"' + id + '\"]').hide();\n this.$tab.find('.host-restart-submit[data-host-id=\"' + id + '\"]').hide();\n this.$tab.find('.hosts-version-available[data-host-id=\"' + id + '\"]').removeClass('hosts-version-available-updatable');\n }\n } else if (id.match(/^system\\.host\\..+\\.outputCount$/)) {\n id = id.substring(0, id.length - 12);\n\n this.$tab.find('.host-out[data-host-id=\"' + id + '\"]').html('↦' + state.val + '');\n } else if (id.match(/^system\\.host\\..+\\.inputCount$/)) {\n id = id.substring(0, id.length - 11);\n\n this.$tab.find('.host-in[data-host-id=\"' + id + '\"]').html('↦' + state.val + '');\n }\n };\n}\n\n","function Instances(main) {\n 'use strict';\n\n var that = this;\n\n this.$tab = $('#tab-instances');\n this.$grid = $('#grid-instances');\n this.$gridHead = $('#grid-instances-head');\n\n this.inited = false;\n this.main = main;\n this.list = [];\n this.hostsText = null;\n this.filterHost = false;\n this.memState = 'memAvailable';\n\n if (!window.tdp) {\n window.tdp = function (x, nachkomma) {\n return isNaN(x) ? '' : x.toFixed(nachkomma || 0).replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, \".\");\n }\n }\n\n function getLinkVar(_var, obj, attr, link, instance) {\n if (attr === 'protocol') attr = 'secure';\n\n if (_var === 'ip') {\n link = link.replace('%' + _var + '%', location.hostname);\n } else\n if (_var === 'instance') {\n link = link.replace('%' + _var + '%', instance);\n } else {\n if (obj) {\n if (attr.match(/^native_/)) attr = attr.substring(7);\n\n var val = obj.native[attr];\n if (_var === 'bind' && (!val || val === '0.0.0.0')) val = location.hostname;\n\n if (attr === 'secure') {\n link = link.replace('%' + _var + '%', val ? 'https' : 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', val);\n } else {\n link = link.replace('%' + _var + '%', val);\n }\n }\n } else {\n if (attr === 'secure') {\n link = link.replace('%' + _var + '%', 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', '');\n } else {\n link = link.replace('%' + _var + '%', '');\n }\n }\n }\n }\n return link;\n }\n\n function resolveLink(link, adapter, instance) {\n var vars = link.match(/%(\\w+)%/g);\n var _var;\n var v;\n var parts;\n if (vars) {\n // first replace simple patterns\n for (v = vars.length - 1; v >= 0; v--) {\n _var = vars[v];\n _var = _var.replace(/%/g, '');\n\n parts = _var.split('_');\n // like \"port\"\n if (_var.match(/^native_/)) {\n link = getLinkVar(_var, that.main.objects['system.adapter.' + adapter + '.' + instance], _var, link, instance);\n vars.splice(v, 1);\n } else\n if (parts.length === 1) {\n link = getLinkVar(_var, that.main.objects['system.adapter.' + adapter + '.' + instance], parts[0], link, instance);\n vars.splice(v, 1);\n } else\n // like \"web.0_port\"\n if (parts[0].match(/\\.[0-9]+$/)) {\n link = getLinkVar(_var, that.main.objects['system.adapter.' + parts[0]], parts[1], link, instance);\n vars.splice(v, 1);\n }\n }\n var links = {};\n var instances;\n var adptr = parts[0];\n // process web_port\n for (v = 0; v < vars.length; v++) {\n _var = vars[v];\n _var = _var.replace(/%/g, '');\n if (_var.match(/^native_/)) _var = _var.substring(7);\n\n parts = _var.split('_');\n if (!instances) {\n instances = [];\n for (var inst = 0; inst < 10; inst++) {\n if (that.main.objects['system.adapter.' + adptr + '.' + inst]) instances.push(inst);\n }\n }\n\n for (var i = 0; i < instances.length; i++) {\n links[adptr + '.' + i] = {\n instance: adptr + '.' + i,\n link: getLinkVar(_var, that.main.objects['system.adapter.' + adptr + '.' + i], parts[1], links[adptr + '.' + i] ? links[adptr + '.' + i].link : link, i)\n };\n }\n }\n\n var result;\n if (instances) {\n result = {};\n var count = 0;\n var firtsLink = '';\n for (var d in links) {\n if (links.hasOwnProperty(d)) {\n result[links[d].instance] = links[d].link;\n if (!firtsLink) firtsLink = links[d].link;\n count++;\n }\n }\n if (count < 2) {\n link = firtsLink;\n result = null;\n }\n }\n }\n return result || link;\n }\n\n this.replaceInLink = function (link, adapter, instance) {\n if (typeof link === 'object') {\n var links = JSON.parse(JSON.stringify(link));\n var first;\n for (var v in links) {\n if (links.hasOwnProperty(v)) {\n links[v] = resolveLink(links[v], adapter, instance);\n if (!first) first = links[v];\n }\n }\n links.__first = first;\n return links;\n } else {\n return resolveLink(link, adapter, instance);\n }\n };\n\n function updateLed(instanceId) {\n var tmp = instanceId.split('.');\n var adapter = tmp[2];\n var instance = tmp[3];\n\n var $led = that.$tab.find('.instance-led[data-instance-id=\"' + instanceId + '\"]');\n\n var common = that.main.objects[instanceId] ? that.main.objects[instanceId].common || {} : {};\n var state = (common.mode === 'daemon') ? 'green' : 'blue';\n var title = '';\n if (common.enabled && (!common.webExtension || !that.main.objects[instanceId].native.webInstance)) {\n title = '';\n title += '';\n\n if (that.main.states[adapter + '.' + instance + '.info.connection'] || that.main.objects[adapter + '.' + instance + '.info.connection']) {\n title += '';\n }\n title += '
        ' + _('Connected to host: ') + '';\n\n if (!that.main.states[instanceId + '.connected'] || !that.main.states[instanceId + '.connected'].val) {\n title += ((common.mode === 'daemon') ? '' + _('false') + '' : _('false'));\n state = (common.mode === 'daemon') ? 'red' : 'blue';\n } else {\n title += '' + _('true') + '';\n }\n title += '
        ' + _('Heartbeat: ') + '';\n\n if (!that.main.states[instanceId + '.alive'] || !that.main.states[instanceId + '.alive'].val) {\n title += ((common.mode === 'daemon') ? '' + _('false') + '' : _('false'));\n state = (common.mode === 'daemon') ? 'red' : 'blue';\n } else {\n title += '' + _('true') + '';\n }\n title += '
        ' + _('Connected to %s: ', adapter) + '';\n var val = that.main.states[adapter + '.' + instance + '.info.connection'] ? that.main.states[adapter + '.' + instance + '.info.connection'].val : false;\n if (!val) {\n state = state === 'red' ? 'red' : 'orange';\n title += '' + _('false') + '';\n } else {\n if (val === true) {\n title += '' + _('true') + '';\n } else {\n title += '' + val + '';\n }\n }\n title += '
        ';\n } else {\n state = (common.mode === 'daemon') ? 'gray' : 'blue';\n title = '';\n title += '';\n\n title += '';\n\n if (that.main.states[adapter + '.' + instance + '.info.connection'] || that.main.objects[adapter + '.' + instance + '.info.connection']) {\n title += '';\n }\n title += '
        ' + _('Connected to host: ') + '';\n\n if (!that.main.states[instanceId + '.connected'] || !that.main.states[instanceId + '.connected'].val) {\n title += _('false');\n } else {\n title += '' + _('true') + '';\n }\n title += '
        ' + _('Heartbeat: ') + '';\n if (!that.main.states[instanceId + '.alive'] || !that.main.states[instanceId + '.alive'].val) {\n title += _('false');\n } else {\n title += '' + _('true') + '';\n }\n title += '
        ' + _('Connected to %s: ', adapter) + '';\n var val = that.main.states[adapter + '.' + instance + '.info.connection'] ? that.main.states[adapter + '.' + instance + '.info.connection'].val : false;\n if (!val) {\n title += _('false');\n } else {\n if (val === true) {\n title += '' + _('true') + '';\n } else {\n title += '' + val + '';\n }\n }\n title += '
        ';\n }\n\n state = (state === 'blue') ? '' : state;\n\n $led.removeClass('led-red led-green led-orange led-blue').addClass('led-' + state).data('title', title);\n\n if (!$led.data('inited') && state !== 'gray') {\n $led.data('inited', true);\n\n $led.hover(function () {\n var text = '
        ' + $(this).data('title') + '
        ';\n var $big = $(text);\n\n $big.insertAfter($(this));\n $(this).data('big', $big[0]);\n var h = parseFloat($big.height());\n var top = Math.round($(this).position().top - ((h - parseFloat($(this).height())) / 2));\n if (h + top > (window.innerHeight || document.documentElement.clientHeight)) {\n top = (window.innerHeight || document.documentElement.clientHeight) - h;\n }\n if (top < 0) {\n top = 0;\n }\n $big.css({top: top}).on('click', function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n });\n }, function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n }).on('click', function () {\n $(this).trigger('hover');\n });\n }\n }\n\n /*function _createHead() {\n var text = '';\n // _('name'), _('instance'), _('title'), _('enabled'), _('host'), _('mode'), _('schedule'), '', _('platform'), _('loglevel'), _('memlimit'), _('alive'), _('connected')],\n text += '';\n //text += '';\n text += '';\n text += '' + _('instance') + '';\n text += '';\n text += '' + _('title') + '';\n\n if (that.main.tabs.hosts.list.length > 1) {\n text += '' + _('host') + '';\n }\n\n text += '' + _('schedule_group') + '';\n\n if (that.main.config.expertMode) {\n text += '' + _('restart') + '';\n text += '' + _('loglevel') + '';\n text += '' + _('memlimit') + '';\n text += '' + _('events') + '';\n }\n text += '' + _('RAM usage') + '';\n that.$gridHead.html(text);\n }*/\n\n function createHead() {\n var text = '';\n // _('name'), _('instance'), _('title'), _('enabled'), _('host'), _('mode'), _('schedule'), '', _('platform'), _('loglevel'), _('memlimit'), _('alive'), _('connected')],\n text += '' +\n '' + _('instance') + '' +\n '';\n text += '';\n text += '';\n // disabled, because no one use it\n if (false && that.main.config.expertMode) {\n text += '' + _('actions') + '';\n } else {\n text += '' + _('actions') + '';\n }\n text += '' + _('title') + '';\n\n if (that.main.tabs.hosts.list.length > 1) {\n text += '' + _('host') + '';\n }\n\n text += '' + _('schedule_group') + '';\n\n if (that.main.config.expertMode) {\n text += '' + _('restart') + '';\n text += '' + _('loglevel') + '';\n text += '' + _('memlimit') + '';\n text += '' + _('events') + '';\n }\n text += '' + _('RAM usage') + '';\n that.$gridHead.html(text);\n }\n\n function calculateTotalRam() {\n var host = that.main.states['system.host.' + that.main.currentHost + '.memRss'];\n var processes = 1;\n var mem = host ? host.val : 0;\n for (var i = 0; i < that.list.length; i++) {\n var obj = that.main.objects[that.list[i]];\n if (!obj || !obj.common) continue;\n if (obj.common.host !== that.main.currentHost) continue;\n if (obj.common.enabled && obj.common.mode === 'daemon') {\n var m = that.main.states[obj._id + '.memRss'];\n mem += m ? m.val : 0;\n processes++;\n }\n }\n mem = Math.round(mem);\n var $totalRam = that.$tab.find('#totalRam');\n if (mem.toString() !== $totalRam.text()) {\n $totalRam.html('' + mem + '');\n }\n var text = _('%s processes', processes);\n var $running_processes = that.$tab.find('#running_processes');\n if (text !== $running_processes.text()) {\n $running_processes.html('' + text + '')\n }\n }\n\n function calculateFreeMem() {\n if (that.main.states['system.host.' + that.main.currentHost + '.memAvailable']) {\n that.memState = 'memAvailable';\n } else if (that.main.states['system.host.' + that.main.currentHost + '.freemem']) {\n that.memState = 'freemem';\n }\n\n var host = that.main.states['system.host.' + that.main.currentHost + '.' + that.memState];\n if (host) {\n that.totalmem = that.totalmem || (that.main.objects['system.host.' + that.main.currentHost].native.hardware.totalmem / (1024 * 1024));\n var percent = Math.round((host.val / that.totalmem) * 100);\n var $freeMem = that.$tab.find('#freeMem');\n var strVal = tdp(host.val);\n if (strVal !== $freeMem.text()) {\n $freeMem.html('' + strVal + '');\n that.$tab.find('#freeMemPercent').html('' + percent + '%');\n }\n } else {\n that.$tab.find('.free-mem-label').hide();\n }\n }\n\n function calculateDiskMem() {\n var diskSize = that.main.states['system.host.' + that.main.currentHost + '.diskSize'];\n var diskFree = that.main.states['system.host.' + that.main.currentHost + '.diskFree'];\n var diskWarning = that.main.states['system.host.' + that.main.currentHost + '.diskWarning'];\n\n if (diskFree && diskFree.val && diskSize && diskSize.val) {\n if (diskWarning) {\n diskWarning = parseFloat(diskWarning.val);\n } else {\n diskWarning = 5;\n }\n\n var $diskFree = that.$tab.find('#diskFree');\n var size = (Math.round((diskFree.val / diskSize.val) * 1000) / 10);\n $diskFree.html('' + size + '');\n $diskFree.parent().attr('title', _('Size: %s, Free: %s', that.main.formatBytes(diskSize.val * 1024 * 1024), that.main.formatBytes(diskFree.val * 1024 * 1024)));\n } else {\n that.$tab.find('.tab-instances-info-disk').hide();\n }\n }\n\n function calculateRam(instanceId) {\n var mem;\n var common = that.main.objects[instanceId] ? that.main.objects[instanceId].common || {} : {};\n if (common.enabled && common.mode === 'daemon' && that.main.states[instanceId + '.memRss']) {\n mem = that.main.states[instanceId + '.memRss'].val;\n mem = parseFloat(mem) || 0;\n\n if (common.memoryLimitMB && common.memoryLimitMB <= mem) {\n mem = '' + mem.toFixed(1) + ' MB';\n } else {\n mem = mem.toFixed(1) + ' MB'\n }\n } else {\n mem = '';\n }\n return mem;\n }\n\n function showOneAdapter(rootElem, instanceId, form, justContent) {\n var text;\n var common = that.main.objects[instanceId] ? that.main.objects[instanceId].common || {} : {};\n var tmp = instanceId.split('.');\n var adapter = tmp[2];\n var instance = tmp[3];\n\n if (form === 'tile') {\n text = justContent ? '' : '
        ';\n text += justContent ? '' : '
        ';\n } else {\n // table\n text = justContent ? '' : '';\n\n var link = common.localLinks || common.localLink || '';\n var url = link ? that.replaceInLink(link, adapter, instance) : '';\n if (link) {\n if (typeof url === 'object') {\n link = '';\n } else {\n link = '';\n }\n }\n\n // State -\n // red - adapter is not connected or not alive,\n // orange - adapter is connected and alive, but device is not connected,\n // green - adapter is connected and alive, device is connected or no device,\n text += '
        ';\n\n // icon\n text += '' + (common.icon ? link + '' : '') + (link ? '
        ': '') + '';\n\n // name and instance\n text += '' + adapter + '.' + instance + '';\n\n var isRun = common.onlyWWW || common.enabled;\n // buttons\n text += '' +\n '' +\n '' +\n '';\n // disable, because no one use it\n if (false && that.main.config.expertMode) {\n text += '';\n }\n text += '' +\n (url ? '' : '') +\n '';\n\n var title = common.titleLang || common.title;\n if (typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n\n // title\n text += '' + (title || '') + '';\n\n // host - hide it if only one host\n if (that.main.tabs.hosts.list.length > 1) {\n if (!that.hostsText) {\n that.hostsText = '';\n for (var h = 0; h < that.main.tabs.hosts.list.length; h++) {\n var host = that.main.tabs.hosts.list[h] || '';\n that.hostsText += (that.hostsText ? ';' : '') + host.name;\n }\n }\n text += '' + (common.host || '') + '';\n }\n\n // schedule\n text += '' + (common.mode === 'schedule' ? (common.schedule || '') : '') + '';\n\n // scheduled restart (only experts)\n if (that.main.config.expertMode) {\n text += '' + (common.restartSchedule || '') + '';\n // debug level (only experts)\n text += '' + (common.loglevel || '') + '';\n // Max RAM (only experts)\n text += '' + (common.memoryLimitMB || '') + '';\n // Max RAM (only experts)\n if (isRun && that.main.states[instanceId + '.inputCount'] && that.main.states[instanceId + '.outputCount']) {\n text += '⇥' + that.main.states[instanceId + '.inputCount'].val + ' / ↦' + that.main.states[instanceId + '.outputCount'].val + '';\n } else {\n text += ' / ';\n }\n }\n\n text += '' + calculateRam(instanceId) + '';\n\n text += justContent ? '' : '';\n }\n if (!justContent) {\n rootElem.append(text);\n } else {\n that.$tab.find('.instance-adapter[data-instance-id=\"' + instanceId + '\"]').html(text);\n }\n // init buttons\n that.initButtons(instanceId, url);\n updateLed(instanceId);\n // init links\n that.$tab.find('.instance-editable[data-instance-id=\"' + instanceId + '\"]')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit');\n\n // init schedule editor\n that.$tab.find('.instance-schedule[data-instance-id=\"' + instanceId + '\"]').each(function () {\n if (!$(this).find('button').length) {\n $(this).append('');\n $(this).find('button').on('click', function () {\n var attr = $(this).data('name');\n var _instanceId = $(this).data('instance-id');\n showCronDialog(that.main.objects[_instanceId].common[attr] || '', function (newValue) {\n if (newValue !== null) {\n var obj = {common: {}};\n obj.common[attr] = newValue;\n that.main.socket.emit('extendObject', _instanceId, obj, function (err) {\n if (err) that.main.showError(err);\n });\n }\n })\n });\n }\n });\n\n that.$tab.find('.instance-name[data-instance-id=\"' + instanceId + '\"]').on('click', function () {\n var $btn = that.$tab.find('.instance-settings[data-instance-id=\"' + $(this).data('instance-id') + '\"]');\n if (!$btn.hasClass('small-button-empty')) {\n $btn.trigger('click');\n }\n }).css('cursor', 'pointer');\n }\n\n function applyFilter(filter) {\n if (filter === undefined) {\n filter = that.$tab.find('.instances-filter').val();\n }\n var invisible = [];\n if (filter) {\n var reg = new RegExp(filter);\n\n for (var i = 0; i < that.list.length; i++) {\n var obj = that.main.objects[that.list[i]];\n if (!obj || !obj.common) {\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]').hide();\n continue;\n }\n var isShow = 'hide';\n var title = obj.common.titleLang || obj.common.title;\n if (typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n\n if (obj.common.name && reg.test(obj.common.name)) {\n isShow = 'show';\n } else\n if (title && reg.test(title)) {\n isShow = 'show';\n } else\n if (filter === 'true') {\n isShow = that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]').find('instance-led').hasClass('led-green') ? 'show' : 'hide';\n } else\n if (filter === 'false') {\n isShow = that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]').find('instance-led').hasClass('led-green') ? 'hide' : 'show';\n }\n\n if (isShow === 'show' && that.filterHost && obj.common.host !== that.main.currentHost) isShow = 'hide';\n\n if (isShow === 'hide') invisible.push(that.list[i]);\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]')[isShow]();\n }\n } else {\n if (that.filterHost) {\n for (var j = 0; j < that.list.length; j++) {\n var _obj = that.main.objects[that.list[j]];\n if (!_obj || !_obj.common) {\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[j] + '\"]').hide();\n continue;\n }\n var _isShow = 'hide';\n if (_obj.common.host === that.main.currentHost) _isShow = 'show';\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[j] + '\"]')[_isShow]();\n }\n } else {\n that.$grid.find('.instance-adapter').show();\n }\n }\n var anyVisible = false;\n that.$grid.find('.instance-adapter').each(function () {\n if ($(this).is(':visible')) {\n anyVisible = true;\n return false;\n }\n });\n\n if (anyVisible) {\n that.$grid.find('.filtered-out').hide();\n } else {\n that.$grid.find('.filtered-out').show();\n }\n }\n\n function onQuickEditField(e) {\n var $this = $(this);\n var id = $this.data('instance-id');\n var attr = $this.data('name');\n var options = $this.data('options');\n var oldVal = $this.data('value');\n var innerHTML = this.innerHTML;\n var textAlign = $this.css('text-align');\n $this.css('text-align', 'left');\n\n $this.off('click').removeClass('select-id-quick-edit').css('position', 'relative');\n\n var css = 'cursor: pointer; position: absolute;width: 16px; height: 16px; top: 2px; border-radius: 6px; z-index: 3; background-color: lightgray';\n var type = 'text';\n var text;\n\n if (options) {\n var opt = options.split(';');\n text = '';\n }\n text = text || '';\n\n var timeout = null;\n\n $this.html(text +\n '
        ' +\n '
        ');\n\n var $input = (options) ? $this.find('select') : $this.find('input');\n\n $this.find('.select-id-quick-edit-cancel').off('click').on('click', function (e) {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n e.preventDefault();\n e.stopPropagation();\n $this.html(innerHTML)\n .off('click')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit')\n .css('text-align', textAlign);\n });\n\n $this.find('.select-id-quick-edit-ok').off('click').on('click', function () {\n $this.trigger('blur');\n });\n\n $input.val(oldVal);\n\n $input.blur(function () {\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(function () {\n timeout = null;\n var val = $(this).val();\n\n if (JSON.stringify(val) !== JSON.stringify(oldVal)) {\n that.main.socket.emit('getObject', id, function (err, obj) {\n if (obj) {\n obj.common = obj.common || {};\n obj.common[attr] = val;\n if (attr === 'title' && obj.common.titleLang) {\n delete obj.common.titleLang;\n }\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n if (err) that.main.showError(err);\n });\n } else {\n console.log('Object ' + id + ' does not exist: ' + err);\n }\n });\n oldVal = '' + oldVal + '';\n } else {\n oldVal = innerHTML;\n }\n $this.html(oldVal)\n .off('click')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit')\n .css('text-align', textAlign);\n }.bind(this), 100);\n }).on('keyup', function (e) {\n if (e.which === 13) $(this).trigger('blur');\n if (e.which === 27) {\n if (oldVal === undefined) oldVal = '';\n $this.html(oldVal)\n .off('click')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit')\n .css('text-align', textAlign);\n }\n });\n\n if (typeof e === 'object') {\n e.preventDefault();\n e.stopPropagation();\n }\n\n setTimeout(function () {\n $input.focus();\n }, 100);\n }\n\n function showCronDialog(value, cb) {\n value = (value || '').replace(/\"/g, '').replace(/'/g, '');\n try {\n setupCron(value, cb);\n } catch (e) {\n alert(_('Cannot parse value as cron'));\n }\n }\n\n this.prepare = function () {\n /*this.$dialogCron.dialog({\n autoOpen: false,\n modal: true,\n width: 700,\n height: 550,\n resizable: false,\n title: _('Cron expression'),\n buttons: [\n {\n id: 'dialog_cron_insert',\n text: _('Insert'),\n click: function () {\n var val = $('#div-cron').cron('value');\n that.$dialogCron.dialog('close');\n that.editor.insert('\"' + val + '\"');\n that.editor.focus();\n }\n },\n {\n id: 'dialog_cron_clear',\n text: _('Clear'),\n click: function () {\n $('#div-cron').cron('value', '');\n }\n },\n {\n id: 'dialog_cron_callback',\n text: _('Set CRON'),\n click: function () {\n }\n },\n {\n text: _('Cancel'),\n click: function () {\n that.$dialogCron.dialog('close');\n }\n }\n ]\n });\n\n $('#div-cron').cron({value: ''});\n*/\n var $filter = that.$tab.find('.instances-filter');\n var $filterClear = that.$tab.find('.instances-filter-clear');\n\n $filter.on('change', function () {\n var val = $(this).val();\n if (val) {\n $(this).addClass('input-not-empty');\n $filterClear.show();\n } else {\n $(this).removeClass('input-not-empty');\n $filterClear.hide();\n }\n that.main.saveConfig('instancesFilter', val);\n applyFilter(val);\n }).on('keyup', function () {\n if (that.filterTimeout) clearTimeout(that.filterTimeout);\n that.filterTimeout = setTimeout(function () {\n $filter.trigger('change');\n }, 300);\n });\n if (that.main.config.instancesFilter && that.main.config.instancesFilter[0] !== '{') {\n $filter.addClass('input-not-empty').val(that.main.config.instancesFilter);\n $filterClear.show();\n } else {\n $filterClear.hide();\n }\n\n //$('#load_grid-instances').show();\n that.$tab.find('.btn-instances-expert-mode').on('click', function () {\n that.main.config.expertMode = !that.main.config.expertMode;\n that.main.saveConfig('expertMode', that.main.config.expertMode);\n that.updateExpertMode();\n that.main.tabs.adapters.updateExpertMode();\n });\n\n if (that.main.config.expertMode) {\n that.$tab.find('.btn-instances-expert-mode').addClass('red lighten-3');\n }\n\n that.$tab.find('.btn-instances-reload').on('click', function () {\n that.init(true, true);\n });\n\n /*that.$grid.find('#btn-instances-form').button({\n icons: {primary: 'ui-icon-refresh'},\n text: false\n }).css({width: '1.5em', height: '1.5em'}).attr('title', _('reload')).on('click', function () {\n that.main.config.instanceForm = that.main.config.instanceForm === 'tile' ? 'list' : 'tile';\n that.main.saveCell('expertMode', that.main.config.expertMode);\n that.init(true);\n });*/\n\n $filterClear.on('click', function () {\n $filter.val('').trigger('change');\n });\n\n this.$tab.find('.btn-instances-host').off('click').on('click', function () {\n that.filterHost = !that.filterHost;\n if (that.filterHost) {\n that.$tab.find('.btn-instances-host').addClass('red lighten-3');\n } else {\n that.$tab.find('.btn-instances-host').removeClass('red lighten-3');\n }\n that.main.saveConfig('instancesFilterHost', that.filterHost);\n\n setTimeout(function () {\n applyFilter();\n }, 50);\n });\n\n this.filterHost = this.main.config.instancesFilterHost || false;\n\n if (this.filterHost) {\n this.$tab.find('.btn-instances-host').addClass('red lighten-3');\n } else {\n this.$tab.find('.btn-instances-host').removeClass('red lighten-3');\n }\n };\n\n this.updateExpertMode = function () {\n that.init(true);\n if (that.main.config.expertMode) {\n that.$tab.find('.btn-instances-expert-mode').addClass('red lighten-3');\n } else {\n that.$tab.find('.btn-instances-expert-mode').removeClass('red lighten-3');\n }\n };\n\n this.replaceLink = function (_var, adapter, instance, elem) {\n _var = _var.replace(/%/g, '');\n if (_var.match(/^native_/)) _var = _var.substring(7);\n // like web.0_port\n var parts;\n if (_var.indexOf('_') === -1) {\n parts = [\n adapter + '.' + instance,\n _var\n ]\n } else {\n parts = _var.split('_');\n // add .0 if not defined\n if (!parts[0].match(/\\.[0-9]+$/)) parts[0] += '.0';\n }\n\n if (parts[1] === 'protocol') parts[1] = 'secure';\n\n if (_var === 'instance') {\n setTimeout(function () {\n var link;\n if (elem) {\n link = that.$tab.find('#' + elem).data('src');\n } else {\n link = that.$tab.find('#a_' + adapter + '_' + instance).attr('href');\n }\n\n link = link.replace('%instance%', instance);\n if (elem) {\n that.$tab.find('#' + elem).data('src', link);\n } else {\n that.$tab.find('#a_' + adapter + '_' + instance).attr('href', link);\n }\n }, 0);\n return;\n }\n\n this.main.socket.emit('getObject', 'system.adapter.' + parts[0], function (err, obj) {\n if (obj) {\n setTimeout(function () {\n var link;\n if (elem) {\n link = that.$tab.find('#' + elem).data('src');\n } else {\n link = that.$tab.find('#a_' + adapter + '_' + instance).attr('href');\n }\n if (link) {\n if (parts[1] === 'secure') {\n link = link.replace('%' + _var + '%', obj.native[parts[1]] ? 'https' : 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', obj.native[parts[1]]);\n } else {\n link = link.replace('%' + _var + '%', obj.native[parts[1]]);\n }\n }\n if (elem) {\n that.$tab.find('#' + elem).data('src', link);\n } else {\n that.$tab.find('#a_' + adapter + '_' + instance).attr('href', link);\n }\n }\n }, 0);\n }\n });\n };\n\n /*this.replaceLinks = function (vars, adapter, instance, elem) {\n if (typeof vars !== 'object') vars = [vars];\n for (var t = 0; t < vars.length; t++) {\n this.replaceLink(vars[t], adapter, instance, elem);\n }\n };*/\n\n this._replaceLink = function (link, _var, adapter, instance, callback) {\n // remove %%\n _var = _var.replace(/%/g, '');\n\n if (_var.match(/^native_/)) _var = _var.substring(7);\n // like web.0_port\n var parts;\n if (_var.indexOf('_') === -1) {\n parts = [adapter + '.' + instance, _var];\n } else {\n parts = _var.split('_');\n // add .0 if not defined\n if (!parts[0].match(/\\.[0-9]+$/)) parts[0] += '.0';\n }\n\n if (parts[1] === 'protocol') parts[1] = 'secure';\n\n this.main.socket.emit('getObject', 'system.adapter.' + parts[0], function (err, obj) {\n if (obj && link) {\n if (parts[1] === 'secure') {\n link = link.replace('%' + _var + '%', obj.native[parts[1]] ? 'https' : 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', obj.native[parts[1]]);\n } else {\n link = link.replace('%' + _var + '%', obj.native[parts[1]]);\n }\n }\n } else {\n console.log('Cannot get link ' + parts[1]);\n link = link.replace('%' + _var + '%', '');\n }\n setTimeout(function () {\n callback(link, adapter, instance);\n }, 0);\n });\n };\n\n this._replaceLinks = function (link, adapter, instance, arg, callback) {\n if (!link) {\n return callback(link, adapter, instance, arg);\n }\n var vars = link.match(/%(\\w+)%/g);\n if (!vars) {\n return callback(link, adapter, instance, arg);\n }\n if (vars[0] === '%ip%') {\n link = link.replace('%ip%', location.hostname);\n this._replaceLinks(link, adapter, instance, arg, callback);\n return;\n }\n if (vars[0] === '%instance%') {\n link = link.replace('%instance%', instance);\n this._replaceLinks(link, adapter, instance, arg, callback);\n return;\n }\n this._replaceLink(link, vars[0], adapter, instance, function (link, adapter, instance) {\n this._replaceLinks(link, adapter, instance, arg, callback);\n }.bind(this));\n };\n\n this._postInit = function (update, showTip) {\n if (this.main.currentHost && typeof this.$grid !== 'undefined' && (!this.$grid.data('inited') || update)) {\n this.$grid.data('inited', true);\n this.list.sort();\n var onlyWWW = [];\n // move all adapters with not onlyWWW and noConfig to the bottom\n for (var l = this.list.length - 1; l >= 0; l--) {\n if (this.main.objects[this.list[l]] &&\n this.main.objects[this.list[l]].common &&\n !this.main.objects[this.list[l]].common.localLink &&\n !this.main.objects[this.list[l]].common.localLinks &&\n this.main.objects[this.list[l]].common.noConfig\n ) {\n onlyWWW.push(this.list[l]);\n this.list.splice(l, 1);\n }\n }\n this.list.sort();\n onlyWWW.sort();\n for (l = 0; l < onlyWWW.length; l++) {\n this.list.push(onlyWWW[l]);\n }\n\n createHead();\n this.$grid.html('');\n var ts = Date.now();\n for (var i = 0; i < this.list.length; i++) {\n var obj = this.main.objects[this.list[i]];\n if (!obj) continue;\n showOneAdapter(this.$grid, this.list[i], this.main.config.instanceForm);\n }\n console.log(Date.now() - ts);\n\n this.$grid.append('' + _('Filtered out') + '');\n\n that.$tab.find('#currentHost').html(this.main.currentHost);\n\n if (that.main.tabs.hosts.list.length > 1) {\n this.$tab.find('.btn-instances-host').show();\n } else {\n this.$tab.find('.btn-instances-host').hide();\n this.filterHost = false;\n }\n\n applyFilter();\n\n calculateTotalRam();\n calculateFreeMem();\n calculateDiskMem();\n that.restoreScroll();\n if (showTip) {\n that.main.showToast(that.$tab.find('.main-toolbar-table'), _('Updated'));\n }\n }\n };\n\n this.getInstances = function (callback) {\n this.main.socket.emit('getForeignObjects', 'system.adapter.*', 'state', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.objects[id] = res[id];\n }\n that.main.socket.emit('getForeignStates', '*.info.connection', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.states[id] = res[id];\n }\n\n that.main.socket.emit('getForeignStates', 'system.adapter.*', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.states[id] = res[id];\n }\n\n that.main.socket.emit('getForeignObjects', 'system.adapter.*', 'instance', function (err, res) {\n that.main.instances.splice(0, that.main.instances.length); // because of pointer in admin.main\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n var obj = res[id];\n that.main.objects[id] = obj;\n\n if (obj.type === 'instance') {\n that.main.instances.push(id);\n }\n }\n if (callback) callback();\n });\n\n });\n });\n });\n };\n\n this.init = function (update, showMessage) {\n if (this.inited && !update) {\n return;\n }\n if (!this.main.objectsLoaded) {\n setTimeout(function () {\n that.init(update, showMessage);\n }, 250);\n return;\n }\n var count = 0;\n\n count++;\n this.getInstances(function () {\n if (!--count) that._postInit(update, showMessage);\n });\n count++;\n this.main.tabs.hosts.getHosts(function () {\n if (!--count) that._postInit(update, showMessage);\n });\n\n if (!this.inited) {\n this.inited = true;\n // subscribe objects and states\n this.main.subscribeObjects('system.adapter.*');\n this.main.subscribeStates('system.adapter.*');\n this.main.subscribeObjects('system.host.*');\n this.main.subscribeStates('system.host.*');\n this.main.subscribeStates('*.info.connection');\n }\n };\n\n this.saveScroll = function () {\n this.scrollTop = this.$tab.find('.grid-main-div').scrollTop();\n };\n this.restoreScroll = function () {\n if (this.scrollTop) {\n this.$tab.find('.grid-main-div').scrollTop(this.scrollTop);\n }\n };\n this.destroy = function () {\n if (this.inited) {\n this.saveScroll();\n this.$grid.data('inited', false);\n this.inited = false;\n // subscribe objects and states\n this.main.unsubscribeObjects('system.adapter.*');\n this.main.unsubscribeStates('system.host.*');\n this.main.unsubscribeObjects('system.host.*');\n this.main.unsubscribeStates('system.adapter.*');\n this.main.unsubscribeStates('*.info.connection');\n }\n };\n\n this.stateChange = function (id, state) {\n this.main.states[id] = state;\n if (this.$grid) {\n var parts = id.split('.');\n var last = parts.pop();\n id = parts.join('.');\n\n if (state) {\n if (last === 'diskFree' || last === 'diskWarning') {\n // update disk size\n calculateDiskMem();\n } else if (last === that.memState) {\n // update total ram\n calculateFreeMem();\n } else if (last === 'memRss') {\n // update total ram\n calculateTotalRam();\n // update instance ram\n var $mem = that.$tab.find('.memUsage[data-instance-id=\"' + id + '\"]');\n var mem = calculateRam(id);\n if ($mem.length && $mem.text() !== mem) {\n $mem.html('' + mem + '');\n }\n } else if (last === 'outputCount') {\n // update total ram\n that.$tab.find('.instance-out[data-instance-id=\"' + id + '\"]').html('↦' + state.val + '');\n } else if (last === 'inputCount') {\n that.$tab.find('.instance-in[data-instance-id=\"' + id + '\"]').html('⇥' + state.val + '');\n }\n\n if (this.list.indexOf(id) !== -1) {\n if (last === 'alive' || last === 'connected') {\n updateLed(id);\n }\n return;\n }\n id = 'system.adapter.' + parts[0] + '.' + parts[1];\n if (this.list.indexOf(id) !== -1 && last === 'connection') {\n updateLed(id);\n }\n }\n }\n };\n\n this.objectChange = function (id, obj, action) {\n // Update Instance Table\n if (id.match(/^system\\.adapter\\.[-\\w]+\\.[0-9]+$/)) {\n if (obj) {\n if (this.list.indexOf(id) === -1) {\n // add new instance\n this.list.push(id);\n\n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that.init(true);\n }, 200);\n\n // open automatically config dialog\n if (!obj.common.noConfig) {\n setTimeout(function () {\n if (window.location.hash.indexOf('/config/') === -1) {\n // open configuration dialog\n that.main.navigate({\n tab: 'instances',\n dialog: 'config',\n params: id\n });\n }\n }, 2000);\n }\n } else {\n if (id.indexOf('.web.') !== -1) {\n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that.init(true);\n }, 200);\n } else {\n // update just one line or\n this.$grid.find('.instance-adapter[data-instance-id=\"' + id + '\"]').html(showOneAdapter(this.$grid, id, this.main.config.instanceForm, true));\n }\n }\n } else {\n var i = this.list.indexOf(id);\n if (i !== -1) {\n this.list.splice(i, 1);\n this.$grid.find('.instance-adapter[data-instance-id=\"' + id + '\"]').remove();\n }\n }\n } else\n // update list if some host changed\n if (id.match(/^system\\.host\\.[-\\w]+$/)) {\n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that.init(true);\n }, 200);\n }\n };\n\n this.initButtons = function (id, url) {\n id = id ? '[data-instance-id=\"' + id + '\"]' : '';\n\n var $e = that.$grid.find('.instance-edit' + id).off('click').on('click', function () {\n that.onEdit($(this).attr('data-instance-id'));\n });\n\n //var buttonSize = {width: '2em', height: '2em'}\n\n if (!$e.find('.ui-button-icon-primary').length) {\n $e/*.button({\n icons: {primary: 'ui-icon-pencil'},\n text: false\n }).css({width: '2em', height: '2em'})*/.attr('title', _('edit'));\n }\n\n $e = that.$grid.find('.instance-settings' + id).off('click')\n .on('click', function () {\n that.main.navigate({\n tab: 'instances',\n dialog: 'config',\n params: $(this).data('instance-id')\n });\n });\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-note'}, text: false}).css({width: '2em', height: '2em'}).attr('title', _('config'));\n }*/\n $e.each(function () {\n var _id = $(this).attr('data-instance-id');\n if (main.objects[_id] && main.objects[_id].common && main.objects[_id].common.noConfig) {\n //$(this).button('disable');\n $(this).addClass('disabled');\n }\n });\n\n $e = that.$grid.find('.instance-reload' + id).off('click')\n .on('click', function () {\n that.main.socket.emit('extendObject', $(this).attr('data-instance-id'), {}, function (err) {\n if (err) that.main.showError(err);\n });\n });\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-refresh'}, text: false}).attr('title', _('reload'));\n }*/\n\n $e = that.$grid.find('.instance-del' + id).off('click')\n .on('click', function () {\n var id = $(this).attr('data-instance-id');\n if (that.main.objects[id] && that.main.objects[id].common && that.main.objects[id].common.host) {\n var name = id.replace(/^system\\.adapter\\./, '');\n that.main.confirmMessage(_('Are you sure you want to delete the instance %s?', name), null, 'help', function (result) {\n if (result) {\n that.main.cmdExec(that.main.objects[id].common.host, 'del ' + id.replace('system.adapter.', ''), function (exitCode) {\n if (!exitCode) that.main.tabs.adapters.init(true);\n });\n }\n });\n }\n });\n\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-trash'}, text: false}).attr('title', _('delete'));\n } else {\n //$e.button('enable');\n $e.removeClass('disabled');\n }*/\n $e = that.$grid.find('.instance-issue' + id).off('click')\n .on('click', function () {\n that.main.navigate({\n tab: 'instances',\n dialog: 'issue',\n params: $(this).data('instance-id')\n });\n });\n /*if (!$e.find('.ui-button-icon-primary').length) {\n //$e.button({icons: {primary: 'ui-icon-pin-s'}, text: false}).css({width: '2em', height: '2em'}).attr('title', _('bug'));\n //Material-Hack\n $e.button().attr('title', _('bug')).empty().append('bug_report');\n }*/\n\n that.$grid.find('.instance-image' + id).each(function () {\n if (!$(this).data('installed')) {\n $(this).data('installed', true);\n $(this).hover(function () {\n var text = '
        ';\n var $big = $(text);\n $big.insertAfter($(this));\n $(this).data('big', $big[0]);\n var h = parseFloat($big.height());\n var top = Math.round($(this).position().top - ((h - parseFloat($(this).height())) / 2));\n if (h + top > (window.innerHeight || document.documentElement.clientHeight)) {\n top = (window.innerHeight || document.documentElement.clientHeight) - h;\n }\n if (top < 0) {\n top = 0;\n }\n $big.css({top: top});\n }, function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n });\n }\n });\n $e = that.$grid.find('.instance-stop-run' + id).off('click')\n .on('click', function () {\n var id = $(this).attr('data-instance-id');\n //$(this).button('disable');\n $(this).addClass('disabled');\n that.main.socket.emit('extendObject', id, {common: {enabled: !that.main.objects[id].common.enabled}}, function (err) {\n if (err) that.main.showError(err);\n });\n });\n\n if (!$e.find('.ui-button-icon-primary').length) {\n $e.each(function () {\n var id = $(this).attr('data-instance-id');\n var enabled = that.main.objects[id].common.enabled;\n\n if (enabled) {\n $e\n .addClass('instance-running')\n .attr('title', _('Activated. Click to stop.'))\n .find('i')\n .html('pause');\n } else {\n $e\n .removeClass('instance-running')\n .attr('title', _('Deactivated. Click to start.'))\n .find('i')\n .html('play_arrow');\n }\n\n /*$e.button({icons: {primary: enabled ? 'ui-icon-pause': 'ui-icon-play'}, text: false})\n //.css({'background-color': enabled ? 'lightgreen' : '#FF9999'})\n //.css({'background-color': enabled ? 'rgba(0, 255, 0, 0.15)' : 'rgba(255, 0, 0, 0.15)'})\n .css({'background-color': enabled ? 'rgba(0, 255, 0, 0.3)' : 'rgba(255, 0, 0, 0.3)'})\n .attr('title', enabled ? _('Activated. Click to stop.') : _('Deactivated. Click to start.'));*/\n });\n }\n\n $e = that.$grid.find('.instance-web' + id).off('click')\n .on('click', function () {\n var _link = $(this).data('link');\n if (typeof _link === 'object') {\n var menu = '';\n for (var m in _link) {\n if (!_link.hasOwnProperty(m)) continue;\n if (m === '__first') continue;\n var port = _link[m].match(/^https?:\\/\\/[-.\\w]+:(\\d+)\\/?/);\n var https = _link[m].match(/^https:\\/\\//);\n\n menu += '
      • ' + m + (port ? ' :' + port[1] : '') + (https ? ' - SSL' : '') + '
      • ';\n }\n menu += '
      • ' + _('Close') + '
      • ';\n\n var $instancesMenu = $('#instances-menu');\n if ($instancesMenu.data('inited')) $instancesMenu.menu('destroy');\n\n var pos = $(this).position();\n $instancesMenu.html(menu);\n if (!$instancesMenu.data('inited')) {\n $instancesMenu.data('inited', true);\n $instancesMenu.mouseleave(function () {\n $(this).hide();\n });\n }\n\n $instancesMenu.menu().css({\n left: pos.left,\n top: pos.top\n }).show();\n\n $instancesMenu.find('.instances-menu-link').off('click').on('click', function () {\n if ($(this).data('link')) window.open($(this).data('link'), $(this).data('instance-id'));\n $('#instances-menu').hide();\n });\n\n } else {\n window.open($(this).data('link'), $(this).data('instance-id'));\n }\n });\n if (typeof url === 'object') $e.data('link', url);\n\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-image'}, text: false}).attr('title', _('open web page'));\n } else {\n $e.removeClass('disabled');\n //$e.button('enable');\n }*/\n };\n\n this.resize = function (width, height) {\n //this.$grid.setGridHeight(height - 150).setGridWidth(width);\n };\n}\n","function Intro(main) {\n 'use strict';\n\n var that = this;\n\n this.$tab = $('#tab-intro');\n this.$tiles = this.$tab.find('.tab-intro-cards');\n this.main = main;\n this.inited = false;\n this.$template = $('#intro-template');\n\n function readInstances(callback) {\n that.main.socket.emit('getObjectView', 'system', 'instance', {startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999'}, function (err, doc) {\n if (err) {\n if (callback) callback (err, []);\n } else {\n if (doc.rows.length === 0) {\n if (callback) callback (err, []);\n } else {\n that.main.instances = [];\n for (var i = 0; i < doc.rows.length; i++) {\n that.main.instances.push(doc.rows[i].id);\n that.main.objects[doc.rows[i].id] = doc.rows[i].value;\n }\n if (callback) callback(err, that.main.instances);\n }\n }\n });\n }\n\n /**\n * Format number in seconds to time text\n * @param {!number} seconds\n * @returns {String}\n */\n function formatSeconds(seconds) {\n var days = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n var hours = Math.floor(seconds / 3600);\n if (hours < 10) {\n hours = '0' + hours;\n }\n seconds %= 3600;\n var minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n var text = '';\n if (days) {\n text += days + ' ' + _('daysShortText') + ' ';\n }\n text += hours + ':' + minutes + ':' + seconds;\n\n return text;\n }\n\n /**\n * Format bytes to MB or GB\n * @param {!number} bytes\n * @returns {String}\n */\n function formatRam(bytes) {\n var GB = Math.floor(bytes / (1024 * 1024 * 1024) * 10) / 10;\n bytes %= (1024 * 1024 * 1024);\n var MB = Math.floor(bytes / (1024 * 1024) * 10) / 10;\n var text = '';\n if (GB > 1) {\n text += GB + ' GB ';\n } else {\n text += MB + ' MB ';\n }\n\n return text;\n }\n\n function formatSpeed(mhz) {\n return mhz + ' MHz';\n }\n\n /**\n * FormatObject for host informations\n * @type type\n */\n var formatInfo = {\n 'Uptime': formatSeconds,\n 'System uptime': formatSeconds,\n 'RAM': formatRam,\n 'Speed': formatSpeed,\n 'Disk size': that.main.formatBytes,\n 'Disk free': that.main.formatBytes\n };\n\n function copyToClipboard(e) {\n var $input = $('\\n';\n }\n }\n\n var title = attr;\n // translations\n if (part === 'common' && systemDictionary['common_' + attr] && systemDictionary['common_' + attr][systemLang]) {\n title = _('common_' + attr);\n }\n\n // workaround for materialize\n if (typeof object[attr] === 'boolean') {\n text += '' + title + '\\n';\n } else {\n text += '\\n';\n }\n\n text += '
        \\n\\n';\n text += '
        \\n';\n }\n\n that.$dialog.find(selector).html(text);\n /*that.$dialog.find(selector).find('.autocomplete').each(function () {\n $(this).mautocomplete({\n data: {\n 'state': null,\n 'switch': null,\n 'button': null,\n 'value': null,\n 'level': null,\n 'indicator': null,\n 'value.temperature': null,\n 'value.humidity': null,\n 'level.temperature': null,\n 'level.dimmer': null\n },\n minLength: 0 // The minimum length of the input for the autocomplete to start. Default: 1.\n });\n });*/\n }\n\n function saveObjectFields(selector, object) {\n var $htmlId = that.$dialog.find(selector);\n $htmlId.find('.object-tab-edit-string').each(function () {\n object[$(this).data('attr')] = $(this).val();\n });\n $htmlId.find('.object-tab-edit-number').each(function () {\n object[$(this).data('attr')] = parseFloat($(this).val());\n });\n $htmlId.find('.object-tab-edit-boolean').each(function () {\n object[$(this).data('attr')] = $(this).prop('checked');\n });\n var err = null;\n $htmlId.find('.object-tab-edit-object').each(function () {\n try {\n object[$(this).data('attr')] = JSON.parse($(this).val());\n } catch (e) {\n err = $(this).data('attr');\n return false;\n }\n });\n\n if (object.write !== undefined) {\n if (object.write === 'false' || object.write === '0' || object.write === 0) object.write = false;\n if (object.write === 'true' || object.write === '1' || object.write === 1) object.write = true;\n }\n\n if (object.read !== undefined) {\n if (object.read === 'false' || object.read === '0' || object.read === 0) object.read = false;\n if (object.read === 'true' || object.read === '1' || object.read === 1) object.read = true;\n }\n\n if (object.min === null) {\n delete object.min;\n }\n if (object.min !== undefined) {\n var f = parseFloat(object.min);\n if (f.toString() === object.min.toString()) object.min = f;\n\n if (object.min === 'false') object.min = false;\n if (object.min === 'true') object.min = true;\n }\n if (object.max === null) {\n delete object.max;\n }\n if (object.max !== undefined) {\n var m = parseFloat(object.max);\n if (m.toString() === object.max.toString()) object.max = m;\n\n if (object.max === 'false') object.max = false;\n if (object.max === 'true') object.max = true;\n }\n if (object.def === null) {\n delete object.def;\n }\n\n if (object.def !== undefined) {\n var d = parseFloat(object.def);\n if (d.toString() === object.def.toString()) object.def = d;\n\n if (object.def === 'false') object.def = false;\n if (object.def === 'true') object.def = true;\n }\n\n // common part cannot have \"true\" or \"false\". Only true and false.\n if (selector.indexOf('common') !== -1) {\n for (var attr in object) {\n if (object.hasOwnProperty(attr)) {\n if (object[attr] === 'true') {\n object[attr] = true;\n }\n if (object[attr] === 'false') {\n object[attr] = false;\n }\n if (parseFloat(object[attr]).toString() === object[attr]) {\n object[attr] = parseFloat(object[attr]);\n }\n }\n }\n }\n\n return err;\n }\n\n function showMessage(text, duration, isError) {\n if (typeof duration === 'boolean') {\n isError = duration;\n duration = 3000;\n }\n that.main.showToast(that.$dialog, text, null, duration, isError);\n }\n\n // only init if required\n this._prepare = function () {\n if (this.prepared) {\n return;\n }\n this.prepared = true;\n this.$dialogSave.on('click', function () {\n that.save();\n });\n this.$dialog.find('.dialog-editobject-buttons .btn-cancel').on('click', function () {\n that.editor.setValue('');\n that.$dialogSave.addClass('disabled');\n that.main.navigate();\n });\n\n this.$dialog.find('.btn-add-common').on('click', function () {\n that.$dialogNewField.find('.object-tab-new-icon').show();\n that.$dialogNewField.modal('open');\n var $name = that.$dialogNewField.find('.object-tab-new-name');\n $name.data('type', 'common').focus();\n if (!$name.hasClass('autocomplete')) {\n $name.addClass('autocomplete');\n $name.mautocomplete({\n data: {\n type: null,\n desc: null,\n min: null,\n max: null,\n def: null,\n role: null,\n unit: null,\n read: null,\n write: null,\n states: null\n },\n minLength: 0 // The minimum length of the input for the autocomplete to start. Default: 1.\n });\n }\n $name.focus()\n });\n\n this.$dialog.find('.btn-add-native').on('click', function () {\n that.$dialogNewField.find('.object-tab-new-icon').hide();\n that.$dialogNewField.modal('open');\n var $name = that.$dialogNewField.find('.object-tab-new-name');\n if ($name.hasClass('autocomplete')) {\n $name.mautocomplete('destroy');\n $name.removeClass('autocomplete');\n }\n M.updateTextFields('#dialog-new-field');\n $name.data('type', 'native').focus();\n });\n this.$dialogNewField.find('.object-tab-new-name').keypress(function (e) {\n if (e.which === 13) {\n that.$dialogNewField.find('.btn-add').trigger('click');\n }\n });\n\n if (!this.editor) {\n this.editor = ace.edit('view-object-raw');\n this.editor.getSession().setMode('ace/mode/json');\n this.editor.$blockScrolling = true;\n this.editor.getSession().on('change', function() {\n that.$dialogSave.removeClass('disabled');\n });\n }\n this.$dialogNewField.modal();\n\n this.$dialog.find('.tabs').mtabs({\n onShow: function (tab) {\n if (!tab) return;\n var id = $(tab).attr('id');\n if (id === 'object-tab-common') {\n showMessage(_('Drop the icons here'));\n } else \n if (id === 'object-tab-raw') {\n var obj = that.saveFromTabs();\n\n if (!obj) return false;\n\n that.editor.setValue(JSON.stringify(obj, null, 2));\n } else if (id === 'object-tab-raw') {\n var _obj;\n try {\n _obj = JSON.parse(that.editor.getValue());\n } catch (e) {\n that.main.showMessage(e, _('Parse error'), 'error_outline');\n if (!that.main.noSelect) {\n that.$dialog.find('.tabs').mtabs('select', 'object-tab-raw');\n }\n return false;\n }\n that.load(_obj);\n }\n that.main.saveConfig('object-edit-active', id);\n return true;\n }\n });\n\n this.$dialogNewField.find('.btn-add').on('click', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n var $tab = that.$dialogNewField.find('.object-tab-new-name');\n var type = $tab.data('type') || 'common';\n var field = $tab.val().trim();\n var obj = that.saveFromTabs();\n\n if (!field || field.indexOf(' ') !== -1) {\n that.main.showError(_('Invalid field name: %s', field));\n return;\n }\n if (obj[type][field] !== undefined) {\n that.main.showError(_('Field %s yet exists!', field));\n return;\n }\n\n obj[type][field] = '';\n\n that.load(obj);\n that.$dialogNewField.find('.object-tab-new-name').val('');\n that.$dialogNewField.modal('close');\n that.$dialogSave.removeClass('disabled');\n });\n this.$dialogNewField.find('.btn-cancel').on('click', function (e) {\n that.$dialogNewField.find('.object-tab-new-name').val('');\n });\n this.$dialog.find('.edit-object-name').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n this.$dialog.find('.edit-object-type').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n });\n this.$dialog.find('.object-tab-rights input').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n });\n\n installFileUpload(this.$dialog.find('#object-tab-common'), 50000, function (err, text) {\n if (err) {\n showMessage(err, true);\n } else {\n if (!text.match(/^data:image\\//)) {\n showMessage(_('Unsupported image format'), true);\n return;\n }\n\n that.$dialogSave.removeClass('disabled');\n that.iconVal = text;\n\n var $tab = that.$dialog.find('.icon-editor');\n $tab.find('.icon').show().html('');\n $tab.find('.icon .treetable-icon').attr('src', text);\n }\n });\n this.$dialog.find('.icon-editor .icon-upload').off('click').on('click', function () {\n that.$dialog.find('.drop-file').trigger('click');\n });\n this.$dialog.find('.icon-editor .icon-clear').off('click').on('click', function () {\n if (that.iconVal) {\n that.iconVal = null;\n that.$dialog.find('.icon-editor').hide().appendTo(that.$dialog);\n that.$dialogSave.removeClass('disabled');\n }\n });\n };\n\n this.init = function () {\n this._prepare();\n if (this.inited) {\n return;\n }\n this.inited = true;\n var id = that.main.navigateGetParams();\n var isSetDefaultState = !!(id || '').match(/,def$/);\n id = id.replace(/,def$/, '');\n\n var obj = this.main.objects[id];\n if (!obj) return;\n\n if (this.main.config['object-edit-active'] !== undefined && !that.main.noSelect) {\n this.$dialog.find('.tabs').mtabs('select', this.main.config['object-edit-active']);\n }\n\n // fill users\n var text = '';\n var name;\n for (var u = 0; u < this.main.tabs.users.list.length; u++) {\n name = translateName(this.main.objects[this.main.tabs.users.list[u]].common.name);\n text += '';\n }\n this.$dialog.find('.object-tab-acl-owner').html(text);\n\n // fill groups\n text = '';\n for (u = 0; u < this.main.tabs.users.groups.length; u++) {\n name = translateName(this.main.objects[this.main.tabs.users.groups[u]].common.name);\n text += '';\n }\n this.$dialog.find('.object-tab-acl-group').html(text);\n this.load(obj);\n\n if (isSetDefaultState) {\n this.$dialog.data('cb', function (_obj) {\n if (_obj.type === 'state') {\n // create state\n that.main.socket.emit('getState', _obj._id, function (err, state) {\n if (!state || state.val === null || state.val === undefined) {\n that.main.socket.emit('setState', _obj._id, _obj.common.def === undefined ? null : _obj.common.def, true);\n }\n });\n }\n });\n } else {\n this.$dialog.data('cb', null);\n }\n that.$dialogSave.addClass('disabled');\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n }\n };\n\n this.load = function (obj) {\n if (!obj) return;\n obj.common = obj.common || {};\n obj.native = obj.native || {};\n obj.acl = obj.acl || {};\n this.$dialog.find('.title-id').text(obj._id);\n this.$dialog.find('.edit-object-name').val(obj.common ? translateName(obj.common.name) : obj._id);\n this.$dialog.find('.edit-object-type').val(obj.type);\n this.$dialog.find('.object-tab-acl-owner').val(obj.acl.owner || 'system.user.admin');\n this.$dialog.find('.object-tab-acl-group').val(obj.acl.ownerGroup || 'system.group.administrator');\n\n this.$dialog.find('.icon-editor').hide().appendTo(this.$dialog);\n\n loadObjectFields('.object-tab-common-table', obj.common || {}, 'common', obj.type);\n loadObjectFields('.object-tab-native-table', obj.native || {}, 'native', obj.type);\n\n if (obj.common.icon !== undefined) {\n this.iconVal = obj.common.icon;\n this.$dialog.find('.object-tab-common-table').prepend(this.$dialog.find('.icon-editor').show());\n this.$dialog.find('.icon-editor .icon').html(that.main.getIconFromObj(obj));\n } else {\n this.iconVal = null;\n }\n\n this.$dialog.find('.object-tab-field-delete').on('click', function () {\n var part = $(this).data('part');\n var field = $(this).data('attr');\n that.main.confirmMessage(_('Delete attribute'), _('Please confirm'), 'error_outline', function (result) {\n if (result) {\n var _obj = that.saveFromTabs();\n delete _obj[part][field];\n that.load(_obj);\n }\n });\n });\n\n obj.acl = obj.acl || {};\n if (obj.acl.object === undefined) obj.acl.object = 0x666;\n\n this.$dialog.find('#object-tab-acl-obj-owner-read') .prop('checked', obj.acl.object & 0x400);\n this.$dialog.find('#object-tab-acl-obj-owner-write').prop('checked', obj.acl.object & 0x200);\n this.$dialog.find('#object-tab-acl-obj-group-read'). prop('checked', obj.acl.object & 0x40);\n this.$dialog.find('#object-tab-acl-obj-group-write').prop('checked', obj.acl.object & 0x20);\n this.$dialog.find('#object-tab-acl-obj-every-read'). prop('checked', obj.acl.object & 0x4);\n this.$dialog.find('#object-tab-acl-obj-every-write').prop('checked', obj.acl.object & 0x2);\n\n if (obj.type !== 'state') {\n this.$dialog.find('.object-tab-acl-state').hide();\n } else {\n this.$dialog.find('.object-tab-acl-state').show();\n if (obj.acl.state === undefined) obj.acl.state = 0x666;\n\n this.$dialog.find('#object-tab-acl-state-owner-read') .prop('checked', obj.acl.state & 0x400);\n this.$dialog.find('#object-tab-acl-state-owner-write').prop('checked', obj.acl.state & 0x200);\n this.$dialog.find('#object-tab-acl-state-group-read'). prop('checked', obj.acl.state & 0x40);\n this.$dialog.find('#object-tab-acl-state-group-write').prop('checked', obj.acl.state & 0x20);\n this.$dialog.find('#object-tab-acl-state-every-read'). prop('checked', obj.acl.state & 0x4);\n this.$dialog.find('#object-tab-acl-state-every-write').prop('checked', obj.acl.state & 0x2);\n }\n\n var _obj = JSON.parse(JSON.stringify(obj));\n this.editor.setValue(JSON.stringify(_obj, null, 2));\n if (_obj._id) delete _obj._id;\n if (_obj.common) delete _obj.common;\n if (_obj.type) delete _obj.type;\n if (_obj.native) delete _obj.native;\n if (_obj.acl) delete _obj.acl;\n this.$dialog.find('#view-object-rest').val(JSON.stringify(_obj, null, ' '));\n this.$dialog.find('select').select();\n\n // workaround for materialize checkbox problem\n this.$dialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n // enable save\n this.$dialog.find('input').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n\n this.$dialog.find('select').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n });\n\n this.$dialog.find('textarea').on('change', function () {\n that.$dialogSave.removeClass('disabled');\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n\n if (obj.common.color !== undefined) {\n var time = Date.now();\n\n var $color = this.$dialog.find('.object-tab-edit-string[data-attr=\"color\"]').parent();\n $color.prepend('color_lens' + _('Color') + '');\n $color.colorpicker({\n component: '.btn',\n color: $color,\n container: true\n }).colorpicker('setValue', obj.common.color || '#fff').on('showPicker.colorpicker', function (/* event */) {\n }).on('changeColor.colorpicker', function (event){\n if (Date.now() - time > 100) {\n $color.find('input').val(event.color.toHex()).trigger('change');\n }\n });\n }\n\n };\n\n this.saveFromTabs = function () {\n var obj;\n try {\n obj = this.$dialog.find('#view-object-rest').val();\n if (!obj) {\n obj = {};\n } else {\n obj = JSON.parse(obj);\n }\n } catch (err) {\n this.main.showMessage(_('Cannot parse.'), _('Error in %s', err), 'error_outline');\n return false;\n }\n\n obj.common = {};\n obj.native = {};\n obj.acl = {};\n obj._id = this.$dialog.find('.title-id').text();\n obj.common.name = this.$dialog.find('.edit-object-name').val(); // no support of multilanguage if edited\n obj.type = this.$dialog.find('.edit-object-type').val();\n var err = saveObjectFields('.object-tab-common-table', obj.common);\n if (err) {\n this.main.showMessage(_('Cannot parse.'), _('Error in %s', err), 'error_outline');\n return false;\n }\n err = saveObjectFields('.object-tab-native-table', obj.native);\n if (err) {\n this.main.showMessage(_('Cannot parse.'), _('Error in %s', err), 'error_outline');\n return false;\n }\n obj.acl.object = 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-owner-read').prop('checked') ? 0x400 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-owner-write').prop('checked') ? 0x200 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-group-read').prop('checked') ? 0x40 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-group-write').prop('checked') ? 0x20 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-every-read').prop('checked') ? 0x4 : 0;\n obj.acl.object |= this.$dialog.find('#object-tab-acl-obj-every-write').prop('checked') ? 0x2 : 0;\n\n obj.acl.owner = this.$dialog.find('.object-tab-acl-owner').val();\n obj.acl.ownerGroup = this.$dialog.find('.object-tab-acl-group').val();\n\n if (obj.type === 'state') {\n obj.acl.state = 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-owner-read').prop('checked') ? 0x400 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-owner-write').prop('checked') ? 0x200 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-group-read').prop('checked') ? 0x40 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-group-write').prop('checked') ? 0x20 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-every-read').prop('checked') ? 0x4 : 0;\n obj.acl.state |= this.$dialog.find('#object-tab-acl-state-every-write').prop('checked') ? 0x2 : 0;\n }\n\n if (this.iconVal !== null && this.iconVal !== undefined) {\n obj.common.icon = this.iconVal;\n }\n\n return obj;\n };\n\n this.saveFromRaw = function () {\n var obj;\n try {\n obj = JSON.parse(this.editor.getValue());\n } catch (e) {\n this.main.showMessage(e, _('Parse error'), 'error_outline');\n if (!that.main.noSelect) {\n this.$dialog.find('.tabs').mtabs('select', 'object-tab-raw');\n }\n return false;\n }\n return obj;\n };\n\n this.save = function () {\n if (this.main.config['object-edit-active'] === 'object-tab-raw') {\n var _obj = this.saveFromRaw();\n if (!_obj) return;\n\n this.main.socket.emit('setObject', _obj._id, _obj, function (err) {\n if (err) {\n that.main.showError(err);\n } else {\n var cb = that.$dialog.data('cb');\n if (cb) cb(_obj);\n that.$dialogSave.addClass('disabled');\n that.main.navigate();\n }\n });\n } else {\n var obj = that.saveFromTabs();\n if (!obj) return;\n this.main.socket.emit('getObject', obj._id, function (err, _obj) {\n if (err) {\n return that.main.showError(err);\n }\n\n _obj.common = obj.common;\n _obj.native = obj.native;\n _obj.acl = obj.acl;\n that.main.socket.emit('setObject', obj._id, _obj, function (err) {\n if (err) {\n that.main.showError(err);\n } else {\n var cb = that.$dialog.data('cb');\n if (cb) cb(obj);\n that.$dialogSave.addClass('disabled');\n that.main.navigate();\n }\n });\n });\n }\n };\n\n this.allStored = function () {\n return that.$dialogSave.hasClass('disabled');\n };\n\n}","function Enums(main) {\n 'use strict';\n\n // enum is first level like enum.function or enum.rooms\n // category is second level like enum.function.light or enum.room.living_room\n\n var that = this;\n\n this.main = main;\n this.list = [];\n this.$gridEnum = $('#tab-enums');\n this.$gridList = this.$gridEnum.find('.tab-enums-list');\n this.$grid = this.$gridEnum.find('.tab-enums-objects');\n this.updateTimers = null;\n this.editMode = false;\n this.isTiles = false;\n\n var tasks = [];\n var standardEnums = {\n 'enum.rooms': {\n \"_id\": \"enum.rooms\",\n \"common\": {\n \"icon\": \"home\",\n \"name\": \"Rooms\",\n \"desc\": {\n \"en\": \"List of the rooms\",\n \"cn\": \"List of the rooms\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\"\n },\n 'enum.functions': {\n \"_id\": \"enum.functions\",\n \"common\": {\n \"icon\": \"lightbulb_outline\",\n \"name\": \"Functions\",\n \"desc\": {\n \"en\": \"List of the functions\",\n \"cn\": \"List of the functions\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\"\n },\n 'enum.favorites': {\n \"_id\": \"enum.favorites\",\n \"common\": {\n \"icon\": \"favorite_border\",\n \"name\": \"Favorites\",\n \"desc\": {\n \"en\": \"List of favorites objects\",\n \"cn\": \"List of favorites objects\"\n },\n \"members\": []\n },\n \"type\": \"enum\"\n }\n };\n\n var standardGroups = {\n 'enum.rooms': {\n \"enum.rooms.living_room\": {\n \"_id\": \"enum.rooms.living_room\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/PjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4MC4wNDYgNDgwLjA0NiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwLjA0NiA0ODAuMDQ2OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PGc+PGc+PHBhdGggZD0iTTMyOC4wMzQsMzIwLjA0NmgtMjR2LTg4YzAtNC40MTgtMy41ODItOC04LThoLTI1NmMtNC40MTgsMC04LDMuNTgyLTgsOHY4OGgtMjRjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MTI4YzAsNC40MTgsMy41ODIsOCw4LDhoMjR2MTZoMTZ2LTE2aDI0MHYxNmgxNnYtMTZoMjRjNC40MTgsMCw4LTMuNTgyLDgtOHYtMTI4QzMzNi4wMzQsMzIzLjYyOCwzMzIuNDUyLDMyMC4wNDYsMzI4LjAzNCwzMjAuMDQ2eiBNODAuMDM0LDQ0OC4wNDZoLTY0di0xMTJoNjRWNDQ4LjA0NnogTTI0MC4wMzQsNDQ4LjA0NmgtMTQ0di02NGgxNDRWNDQ4LjA0NnogTTI0MC4wMzQsMzI4LjA0NnY0MGgtMTQ0di00MGMwLTQuNDE4LTMuNTgyLTgtOC04aC00MHYtODBoMjQwdjgwaC00MEMyNDMuNjE1LDMyMC4wNDYsMjQwLjAzNCwzMjMuNjI4LDI0MC4wMzQsMzI4LjA0NnogTTMyMC4wMzQsNDQ4LjA0NmgtNjR2LTExMmg2NFY0NDguMDQ2eiIvPjwvZz48L2c+PGc+PGc+PHBhdGggZD0iTTQ3OS45NTQsMTUxLjE2NmwtMTYtMTQ0Yy0wLjQ0Ny00LjA0MS0zLjg1NC03LjEwNC03LjkyLTcuMTJoLTExMmMtNC4wOTYtMC4wMjUtNy41NDksMy4wNDktOCw3LjEybC0xNiwxNDRjLTAuMjc2LDIuMjU4LDAuNDIyLDQuNTI4LDEuOTIsNi4yNGMxLjU1LDEuNzE4LDMuNzY3LDIuNjgsNi4wOCwyLjY0aDY0djI3MmgtMzJjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MzJjMCw0LjQxOCwzLjU4Miw4LDgsOGg4MGM0LjQxOCwwLDgtMy41ODIsOC04di0zMmMwLTQuNDE4LTMuNTgyLTgtOC04aC0zMnYtMjcyaDY0YzIuMjg1LDAuMDE3LDQuNDY5LTAuOTQzLDYtMi42NEM0NzkuNTMyLDE1NS42OTQsNDgwLjIzLDE1My40MjUsNDc5Ljk1NCwxNTEuMTY2eiBNNDMyLjAzNCw0NDguMDQ2djE2aC02NHYtMTZINDMyLjAzNHogTTMzNi45OTQsMTQ0LjA0NmwxNC4yNC0xMjhoOTcuNmwxNC4yNCwxMjhIMzM2Ljk5NHoiLz48L2c+PC9nPjxnPjxnPjxwYXRoIGQ9Ik0yNzIuMDM0LDQ4LjA0NmgtNTIuNzJsLTQ1LjYtNDUuNjhjLTMuMTExLTMuMTM3LTguMTc3LTMuMTU4LTExLjMxNC0wLjA0NmMtMC4wMTYsMC4wMTUtMC4wMzEsMC4wMzEtMC4wNDYsMC4wNDZsLTQ1LjYsNDUuNjhoLTUyLjcyYy00LjQxOCwwLTgsMy41ODItOCw4djEyOGMwLDQuNDE4LDMuNTgyLDgsOCw4aDIwOGM0LjQxOCwwLDgtMy41ODIsOC04di0xMjhDMjgwLjAzNCw1MS42MjgsMjc2LjQ1Miw0OC4wNDYsMjcyLjAzNCw0OC4wNDZ6IE0xNjguMDM0LDE5LjMyNmwyOC43MiwyOC43MmgtNTcuNDRMMTY4LjAzNCwxOS4zMjZ6IE0yNjQuMDM0LDE3Ni4wNDZoLTE5MnYtMTEyaDE5MlYxNzYuMDQ2eiIvPjwvZz48L2c+PGc+PGc+PHBhdGggZD0iTTg4LjAzNCw4MC4wNDZ2ODBoMTYwdi04MEg4OC4wMzR6IE0yMzIuMDM0LDE0NC4wNDZoLTEyOHYtNDhoMTI4VjE0NC4wNDZ6Ii8+PC9nPjwvZz48L3N2Zz4=\",\n \"name\": \"Living room\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.sleeping_room\": {\n \"_id\": \"enum.rooms.sleeping_room\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ2NCwyNjRWODhIMTZ2MTc2SDB2ODBoNDh2NDhoNjR2LTQ4aDI1NnY0OGg2NHYtNDhoNDh2LTgwSDQ2NHogTTMyLDEwNGg0MTZ2MTYwaC0xNnYtMjRjMC0yMi4wOTEtMTcuOTA5LTQwLTQwLTQwDQoJCWgtMTIuNDhjMi45MDgtNC44MzIsNC40NTYtMTAuMzYsNC40OC0xNmMwLTE3LjY3My0xNC4zMjctMzItMzItMzJoLTY0Yy0xNy42NzMsMC0zMiwxNC4zMjctMzIsMzINCgkJYzAuMDI0LDUuNjQsMS41NzIsMTEuMTY4LDQuNDgsMTZoLTQwLjk2YzIuOTA4LTQuODMyLDQuNDU2LTEwLjM2LDQuNDgtMTZjMC0xNy42NzMtMTQuMzI3LTMyLTMyLTMyaC02NA0KCQljLTE3LjY3MywwLTMyLDE0LjMyNy0zMiwzMmMwLjAyNCw1LjY0LDEuNTcyLDExLjE2OCw0LjQ4LDE2SDg4Yy0yMi4wOTEsMC00MCwxNy45MDktNDAsNDB2MjRIMzJWMTA0eiBNMzkyLDIxNg0KCQljMTMuMjU1LDAsMjQsMTAuNzQ1LDI0LDI0djI0SDY0di0yNGMwLTEzLjI1NSwxMC43NDUtMjQsMjQtMjRIMzkyeiBNMTEyLDE4NGMwLTguODM3LDcuMTYzLTE2LDE2LTE2aDY0YzguODM3LDAsMTYsNy4xNjMsMTYsMTYNCgkJcy03LjE2MywxNi0xNiwxNmgtNjRDMTE5LjE2MywyMDAsMTEyLDE5Mi44MzcsMTEyLDE4NHogTTI3MiwxODRjMC04LjgzNyw3LjE2My0xNiwxNi0xNmg2NGM4LjgzNywwLDE2LDcuMTYzLDE2LDE2DQoJCXMtNy4xNjMsMTYtMTYsMTZoLTY0QzI3OS4xNjMsMjAwLDI3MiwxOTIuODM3LDI3MiwxODR6IE05NiwzNzZINjR2LTMyaDMyVjM3NnogTTQxNiwzNzZoLTMydi0zMmgzMlYzNzZ6IE00NjQsMzI4SDE2di00OGg0NDhWMzI4DQoJCXoiLz4NCjwvZz4NCjxnPg0KCTxyZWN0IHg9IjQ4IiB5PSIxMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNDE2IiB5PSIxMjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iODAiIHk9IjEyMCIgd2lkdGg9IjMyMCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJPHJlY3QgeD0iNDgiIHk9IjE1MiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjQwIi8+DQo8L2c+DQo8Zz4NCgk8cmVjdCB4PSI0MTYiIHk9IjE1MiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjQwIi8+DQo8L2c+DQoNCjwvc3ZnPg0K\",\n \"name\": \"Sleeping room\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.kitchen\": {\n \"_id\": \"enum.rooms.kitchen\",\n \"common\": {\n \"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=\",\n \"name\": \"Kitchen\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.office\": {\n \"_id\": \"enum.rooms.office\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJCTxwYXRoIGQ9Ik0yMjQsMTIwdjExMmgyMjRWMTIwSDIyNHogTTQzMiwyMTZIMjQwdi04MGgxOTJWMjE2eiIvPg0KPC9nPg0KPGc+DQoJCTxwYXRoIGQ9Ik0zMzYsMTUyYy0xMy4yNTUsMC0yNCwxMC43NDUtMjQsMjRzMTAuNzQ1LDI0LDI0LDI0czI0LTEwLjc0NSwyNC0yNFMzNDkuMjU1LDE1MiwzMzYsMTUyeiBNMzM2LDE4NGMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzM0MC40MTgsMTg0LDMzNiwxODR6Ii8+DQo8L2c+DQo8Zz4NCgkJPHBhdGggZD0iTTE3Niw4OFY0OGMwLTQuNDE4LTMuNTgyLTgtOC04aC04VjE2YzAtNC40MTgtMy41ODItOC04LThINDBjLTQuNDE4LDAtOCwzLjU4Mi04LDh2MjRoLThjLTQuNDE4LDAtOCwzLjU4Mi04LDh2NDBIMHYzODQNCgkJCWgyMDhWMjY0aDIwOHYyMDhoNjRWODhIMTc2eiBNNDgsMjRoOTZ2MTZINDhWMjR6IE0zMiw1NmgxMjh2MzJIMzJWNTZ6IE0xOTIsNDU2SDE2VjIwMGgxNzZWNDU2eiBNMTkyLDE4NEgxNnYtODBoMTc2VjE4NHoNCgkJCSBNNDY0LDQ1NmgtMzJWMjY0aDMyVjQ1NnogTTQ2NCwyNDhIMjA4VjEwNGgyNTZWMjQ4eiIvPg0KPC9nPg0KPGc+DQoJCTxyZWN0IHg9IjgwIiB5PSIxMzYiIHdpZHRoPSI0OCIgaGVpZ2h0PSIxNiIvPg0KPC9nPg0KPGc+DQoJCTxwYXRoIGQ9Ik0xNTIsMjE2Yy0xMy4yNTUsMC0yNCwxMC43NDUtMjQsMjRzMTAuNzQ1LDI0LDI0LDI0czI0LTEwLjc0NSwyNC0yNFMxNjUuMjU1LDIxNiwxNTIsMjE2eiBNMTUyLDI0OGMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzE1Ni40MTgsMjQ4LDE1MiwyNDh6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\",\n \"name\": \"Office\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.nursery\": {\n \"_id\": \"enum.rooms.nursery\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDgwIDQ4MCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwIDQ4MDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQwLDQzMmMtMTMuMjU1LDAtMjQsMTAuNzQ1LTI0LDI0czEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRTNTMuMjU1LDQzMiw0MCw0MzJ6IE00MCw0NjRjLTQuNDE4LDAtOC0zLjU4Mi04LTgNCgkJczMuNTgyLTgsOC04czgsMy41ODIsOCw4UzQ0LjQxOCw0NjQsNDAsNDY0eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQ0MCw0MzJjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNHMxMC43NDUsMjQsMjQsMjRzMjQtMTAuNzQ1LDI0LTI0UzQ1My4yNTUsNDMyLDQ0MCw0MzJ6IE00NDAsNDY0Yy00LjQxOCwwLTgtMy41ODItOC04DQoJCXMzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOFM0NDQuNDE4LDQ2NCw0NDAsNDY0eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQxNiwxMTJ2NDhINjR2LTQ4SDE2djMyMGg0OHYtNDhoMzUydjQ4aDQ4VjExMkg0MTZ6IE00OCw0MTZIMzJWMTI4aDE2VjQxNnogTTY0LDIwOGgyNHY4MEg2NFYyMDh6IE02NCwzMDRoMjR2MzJINjRWMzA0DQoJCXogTTQxNiwzNjhINjR2LTE2aDM1MlYzNjh6IE0xMjAsMzA0djMyaC0xNnYtMzJIMTIweiBNMTA0LDI4OHYtODBoMTZ2ODBIMTA0eiBNMTUyLDMwNHYzMmgtMTZ2LTMySDE1MnogTTEzNiwyODh2LTgwaDE2djgwSDEzNnoNCgkJIE0xODQsMzA0djMyaC0xNnYtMzJIMTg0eiBNMTY4LDI4OHYtODBoMTZ2ODBIMTY4eiBNMjE2LDMwNHYzMmgtMTZ2LTMySDIxNnogTTIwMCwyODh2LTgwaDE2djgwSDIwMHogTTI0OCwzMDR2MzJoLTE2di0zMkgyNDh6DQoJCSBNMjMyLDI4OHYtODBoMTZ2ODBIMjMyeiBNMjgwLDMwNHYzMmgtMTZ2LTMySDI4MHogTTI2NCwyODh2LTgwaDE2djgwSDI2NHogTTMxMiwzMDR2MzJoLTE2di0zMkgzMTJ6IE0yOTYsMjg4di04MGgxNnY4MEgyOTZ6DQoJCSBNMzQ0LDMwNHYzMmgtMTZ2LTMySDM0NHogTTMyOCwyODh2LTgwaDE2djgwSDMyOHogTTM3NiwzMDR2MzJoLTE2di0zMkgzNzZ6IE0zNjAsMjg4di04MGgxNnY4MEgzNjB6IE00MTYsMzM2aC0yNHYtMzJoMjRWMzM2eg0KCQkgTTQxNiwyODhoLTI0di04MGgyNFYyODh6IE00MTYsMTkySDY0di0xNmgzNTJWMTkyeiBNNDQ4LDQxNmgtMTZWMTI4aDE2VjQxNnoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik0yOTYsNTAuNzJjLTQuNTA5LDAuMDM0LTguOTE3LDEuMzM3LTEyLjcyLDMuNzZjLTEwLjMxMy03LjY4MS0yMi40OTUtMTIuNDYtMzUuMjgtMTMuODRWMGgtMTZ2NDAuNjQNCgkJYy0xMi43ODUsMS4zOC0yNC45NjcsNi4xNTktMzUuMjgsMTMuODRjLTMuODAzLTIuNDIzLTguMjExLTMuNzI2LTEyLjcyLTMuNzZjLTEzLjI1NSwwLTI0LDEwLjc0NS0yNCwyNGMwLDEzLjI1NSwxMC43NDUsMjQsMjQsMjQNCgkJczI0LTEwLjc0NSwyNC0yNGMtMC4wMTUtMi43MjMtMC40NzUtNS40MjUtMS4zNi04YzE5Ljg1NS0xNC41NjUsNDYuODY1LTE0LjU2NSw2Ni43MiwwYy0wLjg4NSwyLjU3NS0xLjM0NSw1LjI3Ny0xLjM2LDgNCgkJYzAsMTMuMjU1LDEwLjc0NSwyNCwyNCwyNHMyNC0xMC43NDUsMjQtMjRDMzIwLDYxLjQ2NSwzMDkuMjU1LDUwLjcyLDI5Niw1MC43MnogTTE4NCw4Mi43MmMtNC40MTgsMC04LTMuNTgyLTgtOA0KCQljMC00LjQxOCwzLjU4Mi04LDgtOHM4LDMuNTgyLDgsOEMxOTIsNzkuMTM4LDE4OC40MTgsODIuNzIsMTg0LDgyLjcyeiBNMjk2LDgyLjcyYy00LjQxOCwwLTgtMy41ODItOC04YzAtNC40MTgsMy41ODItOCw4LTgNCgkJczgsMy41ODIsOCw4QzMwNCw3OS4xMzgsMzAwLjQxOCw4Mi43MiwyOTYsODIuNzJ6Ii8+DQo8L2c+DQoNCjwvc3ZnPg0K\",\n \"name\": \"Nursery\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.wc\": {\n \"_id\": \"enum.rooms.wc\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIiB3aWR0aD0iMjU2cHgiIGhlaWdodD0iMjU2cHgiPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik00NTEsMzE3di0zMGMwLTI0LjgxMy0yMC4xODctNDUtNDUtNDVIMjI2Yy01LjI1OSwwLTEwLjMwNSwwLjkxNS0xNSwyLjU4Vjg3LjQyYzE3LjQ1OS02LjE5MiwzMC0yMi44NjUsMzAtNDIuNDIgICAgYzAtMjQuODEzLTIwLjE4Ny00NS00NS00NUg3NmMtOC4yODQsMC0xNSw2LjcxNi0xNSwxNWMwLDI3LjcxLDAsMjQ2LjM4NSwwLDI3MmMwLDE5LjU1NSwxMi41NDEsMzYuMjI4LDMwLDQyLjQyVjM3NyAgICBjMCwyNy41MTksMTAuODU1LDUzLjkyNywzMCw3My40ODJWNDk3YzAsOC4yODQsNi43MTYsMTUsMTUsMTVjMTcuMzMsMCwyNTQuODQ2LDAsMjcwLDBjOC4yODQsMCwxNS02LjcxNiwxNS0xNXMtNi43MTYtMTUtMTUtMTUgICAgaC00NXYtMTcuOTkxQzQxNS45ODgsNDM1Ljk0Myw0NTEsMzc5LjI4Myw0NTEsMzE3eiBNMjI2LDI3MmgxODBjOC4yNzEsMCwxNSw2LjcyOSwxNSwxNXYxNUgyMTF2LTE1ICAgIEMyMTEsMjc4LjcyOSwyMTcuNzI5LDI3MiwyMjYsMjcyeiBNOTEsMzBoMTA1YzguMjcxLDAsMTUsNi43MjksMTUsMTVzLTYuNzI5LDE1LTE1LDE1SDkxVjMweiBNMTA2LDMwMmMtOC4yNzEsMC0xNS02LjcyOS0xNS0xNSAgICBWOTBoOTBjMCwxNy4zOSwwLDIwMC4yNzEsMCwyMTJIMTA2eiBNMzM5Ljk5NCw0NDAuNzczYy01LjQ2MywyLjM4Ny04Ljk5NCw3Ljc4My04Ljk5NCwxMy43NDVWNDgySDE1MXYtMzcuOTE3ICAgIGMwLTQuMjY3LTEuODE3LTguMzMyLTQuOTk2LTExLjE3N0MxMzAuMTEzLDQxOC42ODQsMTIxLDM5OC4zMDcsMTIxLDM3N3YtNDUuMWMzNC41MzUsMCwyOTYuNTQ1LDAsMjk5LjE2OCwwICAgIEM0MTQuODY0LDM3OS40OTMsMzg0LjU3NSw0MjEuMjk1LDMzOS45OTQsNDQwLjc3M3oiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\",\n \"name\": \"WC\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.rooms.garage\": {\n \"_id\": \"enum.rooms.kitchen\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ4MC4wMTMgNDgwLjAxMyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDgwLjAxMyA0ODAuMDEzOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjI1NnB4IiBoZWlnaHQ9IjI1NnB4Ij4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMzkwLjk5OSwzMTYuOTUybC0zMC4yOTYtMjQuMjMyYy0xLjExMy0wLjg4Ny0xLjk2OS0yLjA1NS0yLjQ4LTMuMzg0bC0xMS42OC01NC40ICAgIGMtMi40MzItMTEuMDItMTIuMTc5LTE4Ljg4My0yMy40NjQtMTguOTI4SDE1Ni44MDdjLTExLjI2OC0wLjA1Mi0yMS4wMzYsNy43ODgtMjMuNDI0LDE4LjhsLTEyLDUzLjk1MiAgICBjLTAuNDAzLDEuNzgzLTEuMzk5LDMuMzc2LTIuODI0LDQuNTJsLTI5LjYsMjMuNjhjLTUuNjg3LDQuNTUyLTguOTg0LDExLjQ1Mi04Ljk1MiwxOC43MzZ2ODAuMzEyICAgIGMwLjAyMSw2Ljc4OCwyLjkzLDEzLjI0Niw4LDE3Ljc2djMwLjI0YzAsOC44MzcsNy4xNjMsMTYsMTYsMTZoMzJjOC44MzcsMCwxNi03LjE2MywxNi0xNnYtMjRoMTc2djI0YzAsOC44MzcsNy4xNjMsMTYsMTYsMTZoMzIgICAgYzguODM3LDAsMTYtNy4xNjMsMTYtMTZ2LTMwLjI0YzUuMDctNC41MTQsNy45NzktMTAuOTcyLDgtMTcuNzZ2LTgwLjMxMkM0MDAuMDI0LDMyOC40LDM5Ni43MDcsMzIxLjQ5NiwzOTAuOTk5LDMxNi45NTJ6ICAgICBNMjE4LjE0MywyMzguMzI4bDAtMC4wMDhsNC4yMDgtNi4zMmgxMDAuNzI4YzMuNzcyLTAuMDAxLDcuMDMyLDIuNjMyLDcuODI0LDYuMzJsMTAuNzA0LDQ5LjY4OEgyMjQuNzAzICAgIGM1Ljg4OC0xMS4wOTgsMy44NzEtMjQuNzM2LTQuOTc2LTMzLjY1NkMyMTUuNDYxLDI1MC4wNjQsMjE0Ljc5OSwyNDMuMzY4LDIxOC4xNDMsMjM4LjMyOHogTTE4NC4wNzksMjM4LjMyOHYtMC4wMDhsNC4yMDgtNi4zMiAgICBoMTUuMTQ0Yy01Ljg4LDExLjEwMS0zLjg2MSwyNC43MzYsNC45ODQsMzMuNjU2YzQuMjU4LDQuMjgsNC45MjYsMTAuOTYyLDEuNiwxNmwtNC4yMDgsNi4zMmgtMTUuMTYgICAgYzUuODgtMTEuMTAxLDMuODYxLTI0LjczNi00Ljk4NC0zMy42NTZDMTgxLjQxNCwyNTAuMDM3LDE4MC43NTMsMjQzLjM2MSwxODQuMDc5LDIzOC4zMjh6IE0xNDkuMDM5LDIzOC4yNjQgICAgYzAuNzkyLTMuNjU1LDQuMDI4LTYuMjYyLDcuNzY4LTYuMjU2aDEyLjU2Yy01Ljg4LDExLjEwMS0zLjg2MSwyNC43MzYsNC45ODQsMzMuNjU2YzQuMjU4LDQuMjgsNC45MjYsMTAuOTYyLDEuNiwxNmwtNC4yMDgsNi4zMiAgICBoLTMzLjc2TDE0OS4wMzksMjM4LjI2NHogTTEzNi4wMDcsNDY0LjAwOGgtMzJ2LTI0aDMyVjQ2NC4wMDh6IE0zNzYuMDA3LDQ2NC4wMDhoLTMydi0yNGgzMlY0NjQuMDA4eiBNMzg0LjAwNyw0MTYuMDA4ICAgIGMwLDQuNDE4LTMuNTgyLDgtOCw4aC0yNzJjLTQuNDE4LDAtOC0zLjU4Mi04LTh2LThoMjg4VjQxNi4wMDh6IE0zODQuMDA3LDM5Mi4wMDhoLTI4OHYtNTYuMzEyICAgIGMtMC4wMDYtMi40MzEsMS4xMDMtNC43MywzLjAwOC02LjI0bDI5LjYtMjMuNjhjMC42NDktMC41NTYsMS4yNjktMS4xNDYsMS44NTYtMS43NjhoMjE4LjkyOGMwLjQzMiwwLjQsMC44LDAuOCwxLjI5NiwxLjIgICAgbDMwLjMwNCwyNC4yNGMxLjksMS41MTcsMy4wMDcsMy44MTYsMy4wMDgsNi4yNDhWMzkyLjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0xMzIuMDA3LDMyOC4wMDhjLTE1LjQ2NCwwLTI4LDEyLjUzNi0yOCwyOGMwLDE1LjQ2NCwxMi41MzYsMjgsMjgsMjhzMjgtMTIuNTM2LDI4LTI4ICAgIEMxNjAuMDA3LDM0MC41NDQsMTQ3LjQ3MSwzMjguMDA4LDEzMi4wMDcsMzI4LjAwOHogTTEzMi4wMDcsMzY4LjAwOGMtNi42MjcsMC0xMi01LjM3My0xMi0xMmMwLTYuNjI3LDUuMzczLTEyLDEyLTEyICAgIGM2LjYyNywwLDEyLDUuMzczLDEyLDEyQzE0NC4wMDcsMzYyLjYzNSwxMzguNjM0LDM2OC4wMDgsMTMyLjAwNywzNjguMDA4eiIgZmlsbD0iIzAwMDAwMCIvPgoJPC9nPgo8L2c+CjxnPgoJPGc+CgkJPHBhdGggZD0iTTM0OC4wMDcsMzI4LjAwOGMtMTUuNDY0LDAtMjgsMTIuNTM2LTI4LDI4YzAsMTUuNDY0LDEyLjUzNiwyOCwyOCwyOGMxNS40NjQsMCwyOC0xMi41MzYsMjgtMjggICAgQzM3Ni4wMDcsMzQwLjU0NCwzNjMuNDcxLDMyOC4wMDgsMzQ4LjAwNywzMjguMDA4eiBNMzQ4LjAwNywzNjguMDA4Yy02LjYyNywwLTEyLTUuMzczLTEyLTEyYzAtNi42MjcsNS4zNzMtMTIsMTItMTIgICAgYzYuNjI3LDAsMTIsNS4zNzMsMTIsMTJDMzYwLjAwNywzNjIuNjM1LDM1NC42MzQsMzY4LjAwOCwzNDguMDA3LDM2OC4wMDh6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNMjg4LjAwNywzMjguMDA4aC05NmMtOC44MzcsMC0xNiw3LjE2My0xNiwxNnYyNGMwLDguODM3LDcuMTYzLDE2LDE2LDE2aDk2YzguODM3LDAsMTYtNy4xNjMsMTYtMTZ2LTI0ICAgIEMzMDQuMDA3LDMzNS4xNzEsMjk2Ljg0NCwzMjguMDA4LDI4OC4wMDcsMzI4LjAwOHogTTI4OC4wMDcsMzY4LjAwOGgtOTZ2LTI0aDk2VjM2OC4wMDh6IiBmaWxsPSIjMDAwMDAwIi8+Cgk8L2c+CjwvZz4KPGc+Cgk8Zz4KCQk8cGF0aCBkPSJNNDc1Ljg3MSwxMjlsLTIzMi0xMjhjLTIuNDA1LTEuMzI3LTUuMzIzLTEuMzI3LTcuNzI4LDBsLTIzMiwxMjhjLTMuODcsMi4xMzEtNS4yODEsNi45OTYtMy4xNSwxMC44NjYgICAgYzEuNDA3LDIuNTU2LDQuMDk1LDQuMTQ0LDcuMDEzLDQuMTQyaDh2MzM2aDQ4di0yOTZoMzUydjI5Nmg0OHYtMzM2aDhjNC40MTgsMC4wMDMsOC4wMDMtMy41NzYsOC4wMDYtNy45OTUgICAgQzQ4MC4wMTUsMTMzLjA5NSw0NzguNDI3LDEzMC40MDcsNDc1Ljg3MSwxMjl6IE0yNDAuMDA3LDE3LjE1MmwyMDAuOTM2LDExMC44NTZIMzkuMDcxTDI0MC4wMDcsMTcuMTUyeiBNNDQ4LjAwNyw0NjQuMDA4aC0xNiAgICB2LTI5NmgtMzg0djI5NmgtMTZ2LTMyMGg0MTZWNDY0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0xNjguMDA3LDc1LjA2NHY0NC45NDRoNjRWNDMuMDY0TDE2OC4wMDcsNzUuMDY0eiBNMjE2LjAwNywxMDQuMDA4aC0zMlY4NC45NTJsMzItMTZWMTA0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KCTxnPgoJCTxwYXRoIGQ9Ik0yNDguMDA3LDQzLjA2NHY3Ni45NDRoNjRWNzUuMDY0TDI0OC4wMDcsNDMuMDY0eiBNMjk2LjAwNywxMDQuMDA4aC0zMlY2OC45NTJsMzIsMTZWMTA0LjAwOHoiIGZpbGw9IiMwMDAwMDAiLz4KCTwvZz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K\",\n \"name\": \"Garage\",\n \"members\": []\n },\n \"type\": \"enum\"\n }\n\n\n // todo\n //\n },\n 'enum.functions': {\n \"enum.functions.light\": {\n \"_id\": \"enum.functions.light\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgJy0vL1czQy8vRFREIFNWRyAxLjEvL0VOJyAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIj4KICA8Zz4KICAgIDxnPgogICAgICA8cGF0aCBkPSJtMjU2LDkyLjNjLTc0LjIsMC0xMjcuOCw1NS4zLTEzNi4zLDExNC43LTUuMywzOS42IDcuNSw3OC4yIDM0LjEsMTA3LjQgMjMuNCwyNSAzNi4yLDU4LjQgMzYuMiw5Mi44bC0uMSw1NC4yYzAsMjEuOSAxOC4xLDM5LjYgNDAuNSwzOS42aDUyLjJjMjIuNCwwIDQwLjUtMTcuNyA0MC41LTM5LjZsLjEtNTQuMmMwLTM1LjQgMTEuNy02Ny44IDM0LjEtOTAuNyAyNC41LTI1IDM3LjMtNTcuMyAzNy4zLTkwLjctMC4xLTc0LjEtNjMtMTMzLjUtMTM4LjYtMTMzLjV6bTQ2LjgsMzY5LjFjMCwxMC40LTguNSwxOC44LTE5LjIsMTguOGgtNTIuMmMtMTAuNywwLTE5LjItOC4zLTE5LjItMTguOHYtMjRoOTAuNXYyNHptMzkuNi0xNTkuNWMtMjYuNiwyNy4xLTQwLjUsNjQuNi00MC41LDEwNS4zdjkuNGgtOTAuNXYtOS40YzAtMzguNi0xNi03Ny4xLTQyLjYtMTA2LjMtMjMuNC0yNS0zMy01Ny4zLTI4LjgtOTAuNyA3LjUtNTAgNTQtOTcgMTE2LjEtOTcgNjUsMCAxMTcuMiw1MS4xIDExNy4yLDExMi42IDAsMjguMS0xMC43LDU1LjItMzAuOSw3Ni4xeiIvPgogICAgICA8cmVjdCB3aWR0aD0iMjEuMyIgeD0iMjQ1LjMiIHk9IjExIiBoZWlnaHQ9IjUwIi8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzg1LjEsMTA3LjQgNDAwLDEyMi4zIDQzNi41LDg3LjIgNDIxLjUsNzIuMyAgICIvPgogICAgICA8cmVjdCB3aWR0aD0iNTIuMiIgeD0iNDQ4LjgiIHk9IjIzNi4yIiBoZWlnaHQ9IjIwLjkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjUyLjIiIHg9IjExIiB5PSIyMzYuMiIgaGVpZ2h0PSIyMC45Ii8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iOTAuMSw3Mi4yIDc1LjEsODcuMSAxMTEuNiwxMjIuMiAxMjYuNSwxMDcuMyAgICIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\",\n \"name\": \"Light\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.blinds\": {\n \"_id\": \"enum.functions.blinds\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJCTxwYXRoIGQ9Ik0wLDB2NTEyaDUxMlYwSDB6IE00ODIsNDgySDMwVjMwaDQ1MlY0ODJ6Ii8+DQo8L2c+DQo8Zz4NCgkJPHBhdGggZD0iTTYwLDYwdjM5MmgzOTJWNjBINjB6IE0yNDEsNDIySDkwVjI3MWgxNTFWNDIyeiBNMjQxLDI0MUg5MFY5MGgxNTFWMjQxeiBNNDIyLDQyMkgyNzFWMjcxaDE1MVY0MjJ6IE00MjIsMjQxSDI3MVY5MGgxNTENCgkJCVYyNDF6Ii8+DQo8L2c+DQo8L3N2Zz4NCg==\",\n \"name\": \"Blinds\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.weather\": {\n \"_id\": \"enum.functions.weather\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNjAgNjAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDYwIDYwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNNTQuOTQ5LDI4LjI1MWMwLjAxOC0wLjA2OSwwLjAzOS0wLjEzNSwwLjA0Mi0wLjIwN0M1NC45OTIsMjguMDI5LDU1LDI4LjAxNiw1NSwyOEM1NSwxNC41NSw0NC4zMjMsMy41NTMsMzEsMy4wMjVWMQ0KCWMwLTAuNTUzLTAuNDQ4LTEtMS0xcy0xLDAuNDQ3LTEsMXYyLjAyNUMxNS42NzcsMy41NTMsNSwxNC41NSw1LDI4YzAsMC4wMTYsMC4wMDgsMC4wMjksMC4wMDksMC4wNDUNCgljMC4wMDMsMC4wNzEsMC4wMjMsMC4xMzcsMC4wNDIsMC4yMDdjMC4wMTYsMC4wNTksMC4wMjUsMC4xMTgsMC4wNSwwLjE3MmMwLjAyNSwwLjA1MywwLjA2NCwwLjA5NywwLjA5OCwwLjE0NQ0KCWMwLjA0MiwwLjA1OSwwLjA4MSwwLjExOCwwLjEzNSwwLjE2N2MwLjAxMSwwLjAxLDAuMDE2LDAuMDI1LDAuMDI4LDAuMDM1YzAuMDM2LDAuMDMsMC4wOCwwLjA0LDAuMTE4LDAuMDY0DQoJYzAuMDU5LDAuMDM3LDAuMTE1LDAuMDc0LDAuMTgyLDAuMDk4YzAuMDcsMC4wMjYsMC4xNDEsMC4wMzQsMC4yMTMsMC4wNDNDNS45MTgsMjguOTgsNS45NTYsMjksNiwyOQ0KCWMwLjAxNSwwLDAuMDI3LTAuMDA4LDAuMDQyLTAuMDA4YzAuMDc2LTAuMDAzLDAuMTQ3LTAuMDI0LDAuMjItMC4wNDRjMC4wNTQtMC4wMTUsMC4xMDktMC4wMjMsMC4xNTgtMC4wNDcNCgljMC4wNTctMC4wMjYsMC4xMDQtMC4wNjgsMC4xNTYtMC4xMDVjMC4wNTUtMC4wNCwwLjExMS0wLjA3NywwLjE1Ny0wLjEyN2MwLjAxMS0wLjAxMiwwLjAyNi0wLjAxNywwLjAzNy0wLjAzDQoJQzguMTgsMjYuOTM3LDEwLjAzOCwyNiwxMiwyNnMzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMTksMC4wMjMsMC4wNDgsMC4wMzIsMC4wNjksMC4wNTNjMC4wMjQsMC4wMjQsMC4wMzYsMC4wNTYsMC4wNjMsMC4wNzgNCgljMC4wNCwwLjAzMywwLjA4OCwwLjA0NSwwLjEzLDAuMDcxYzAuMDUxLDAuMDMxLDAuMDk4LDAuMDYyLDAuMTUyLDAuMDgyYzAuMDgyLDAuMDMyLDAuMTY0LDAuMDQ1LDAuMjQ5LDAuMDU0DQoJQzE3LjkzLDI4Ljk4MSwxNy45NjQsMjksMTgsMjljMC4wMTYsMCwwLjAzMS0wLjAwNywwLjA0Ni0wLjAwOGMwLjA1MS0wLjAwMiwwLjA5OC0wLjAxNSwwLjE0OC0wLjAyNQ0KCWMwLjA2OS0wLjAxNCwwLjEzNS0wLjAzLDAuMi0wLjA1OWMwLjA1LTAuMDIyLDAuMDk1LTAuMDUsMC4xNDEtMC4wODFjMC4wMzMtMC4wMjEsMC4wNy0wLjAzMiwwLjEwMS0wLjA1OA0KCWMwLjAyNC0wLjAyLDAuMDM1LTAuMDQ4LDAuMDU3LTAuMDdjMC4wMjMtMC4wMjMsMC4wNTQtMC4wMzUsMC4wNzUtMC4wNjFDMjAuMTgsMjYuOTM3LDIyLjAzOCwyNiwyNCwyNmMxLjg2LDAsMy42MiwwLjg1LDUsMi4zODZWNTUNCgljMCwxLjY1NC0xLjM0NiwzLTMsM3MtMy0xLjM0Ni0zLTNjMC0wLjU1My0wLjQ0OC0xLTEtMXMtMSwwLjQ0Ny0xLDFjMCwyLjc1NywyLjI0Myw1LDUsNXM1LTIuMjQzLDUtNVYyOC4zODYNCglDMzIuMzgsMjYuODUsMzQuMTQsMjYsMzYsMjZjMS45NjIsMCwzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMTksMC4wMjMsMC4wNDgsMC4wMzIsMC4wNjksMC4wNTMNCgljMC4wMjQsMC4wMjQsMC4wMzYsMC4wNTYsMC4wNjMsMC4wNzhjMC4wNCwwLjAzMywwLjA4OCwwLjA0NCwwLjEzLDAuMDdjMC4wNTEsMC4wMzEsMC4wOTgsMC4wNjIsMC4xNTMsMC4wODMNCgljMC4wODEsMC4wMzEsMC4xNjMsMC4wNDUsMC4yNDksMC4wNTRDNDEuOTMsMjguOTgxLDQxLjk2NCwyOSw0MiwyOWMwLjAxNiwwLDAuMDMxLTAuMDA3LDAuMDQ2LTAuMDA4DQoJYzAuMDUxLTAuMDAyLDAuMDk5LTAuMDE1LDAuMTQ5LTAuMDI2YzAuMDY4LTAuMDE0LDAuMTM0LTAuMDMsMC4xOTktMC4wNThjMC4wNTEtMC4wMjIsMC4wOTYtMC4wNTEsMC4xNDItMC4wODENCgljMC4wMzMtMC4wMjEsMC4wNy0wLjAzMiwwLjEwMS0wLjA1N2MwLjAyNC0wLjAyLDAuMDM1LTAuMDQ4LDAuMDU2LTAuMDdjMC4wMjMtMC4wMjMsMC4wNTQtMC4wMzUsMC4wNzYtMC4wNjENCglDNDQuMTgsMjYuOTM3LDQ2LjAzOCwyNiw0OCwyNnMzLjgyLDAuOTM3LDUuMjMsMi42MzljMC4wMSwwLjAxMiwwLjAyNCwwLjAxNSwwLjAzNSwwLjAyN2MwLjA3LDAuMDc3LDAuMTU0LDAuMTM1LDAuMjQ1LDAuMTg4DQoJYzAuMDMxLDAuMDE4LDAuMDU1LDAuMDQ1LDAuMDg4LDAuMDU5QzUzLjcyMSwyOC45NjcsNTMuODU2LDI5LDU0LDI5aDBoMGMwLjEyMywwLDAuMjQ1LTAuMDI3LDAuMzYxLTAuMDczDQoJYzAuMDQ1LTAuMDE4LDAuMDgyLTAuMDQ3LDAuMTI0LTAuMDcxYzAuMDUxLTAuMDI5LDAuMTA2LTAuMDQ4LDAuMTUyLTAuMDg3YzAuMDEyLTAuMDEsMC4wMTctMC4wMjQsMC4wMjgtMC4wMzUNCgljMC4wNTQtMC4wNDksMC4wOTItMC4xMDcsMC4xMzUtMC4xNjdjMC4wMzQtMC4wNDgsMC4wNzMtMC4wOTMsMC4wOTgtMC4xNDVDNTQuOTI0LDI4LjM2OSw1NC45MzQsMjguMzEsNTQuOTQ5LDI4LjI1MXogTTQ4LDI0DQoJYy0yLjIxOCwwLTQuMzEyLDAuODk1LTYsMi41MzRDNDAuMzEyLDI0Ljg5NSwzOC4yMTgsMjQsMzYsMjRzLTQuMzEyLDAuODk1LTYsMi41MzRDMjguMzEyLDI0Ljg5NSwyNi4yMTgsMjQsMjQsMjQNCglzLTQuMzEyLDAuODk1LTYsMi41MzRDMTYuMzEyLDI0Ljg5NSwxNC4yMTgsMjQsMTIsMjRjLTEuNzUsMC0zLjQxOCwwLjU2Ni00Ljg3NSwxLjYwNUM4LjMyNywxNC4wNDQsMTguMTI3LDUsMzAsNQ0KCXMyMS42NzMsOS4wNDQsMjIuODc1LDIwLjYwNUM1MS40MTgsMjQuNTY2LDQ5Ljc1LDI0LDQ4LDI0eiIvPg0KPC9zdmc+DQo=\",\n \"name\": \"Weather\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.heating\": {\n \"_id\": \"enum.functions.heating\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTQ0MC4zNzEsMTU5LjI5MWM4LjA1MSwwLDE1LjQwMy0zLjAzNSwyMC45ODMtOC4wMTZINTA0LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNWMwLTQuMTQyLTMuMzU4LTcuNS03LjUtNy41aC0zMy43NjMNCgkJYzAuNzY0LTIuNzE2LDEuMTgyLTUuNTc2LDEuMTgyLTguNTMzYzAtMi45NTctMC40MTgtNS44MTYtMS4xODItOC41MzJINTA0LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNQ0KCQljMC00LjE0Mi0zLjM1OC03LjUtNy41LTcuNWgtNDMuMTQ2Yy01LjU4LTQuOTgxLTEyLjkzMi04LjAxNi0yMC45ODMtOC4wMTZjLTYuMTMzLDAtMTEuODU5LDEuNzY1LTE2LjcwNyw0LjgwNQ0KCQljLTEuMzQyLTExLjcxMS0xMS4zMDktMjAuODM3LTIzLjM3My0yMC44MzdoLTI0LjA0OWMtMTAuMzU0LDAtMTkuMTYsNi43MjQtMjIuMywxNi4wMzJoLTE5LjUzDQoJCWMtMy4xMzktOS4zMDgtMTEuOTQ2LTE2LjAzMi0yMi4zLTE2LjAzMmgtMjQuMDQ4Yy0xMC4zNTQsMC0xOS4xNiw2LjcyNC0yMi4zLDE2LjAzMmgtMTkuNTMNCgkJYy0zLjEzOS05LjMwOC0xMS45NDYtMTYuMDMyLTIyLjMtMTYuMDMyaC0yNC4wNDhjLTEwLjM1NCwwLTE5LjE2LDYuNzI0LTIyLjMsMTYuMDMyaC0xOS41Mw0KCQljLTMuMTM5LTkuMzA4LTExLjk0Ni0xNi4wMzItMjIuMy0xNi4wMzJoLTI0LjA0OWMtMTAuMzU0LDAtMTkuMTYsNi43MjQtMjIuMywxNi4wMzJINjkuODgNCgkJYy0zLjEzOS05LjMwOC0xMS45NDYtMTYuMDMyLTIyLjMtMTYuMDMySDIzLjUzMkMxMC41NTcsODAuMTYxLDAsOTAuNzE4LDAsMTAzLjY5M3YzMDQuNjEzYzAsMTIuOTc2LDEwLjU1NywyMy41MzIsMjMuNTMyLDIzLjUzMg0KCQlINDcuNThjMTAuMzU0LDAsMTkuMTYtNi43MjQsMjIuMy0xNi4wMzJoMTkuNTNjMy4xMzksOS4zMDgsMTEuOTQ2LDE2LjAzMiwyMi4zLDE2LjAzMmgyNC4wNDljMTAuMzU0LDAsMTkuMTYtNi43MjQsMjIuMy0xNi4wMzINCgkJaDE5LjUzYzMuMTM5LDkuMzA4LDExLjk0NiwxNi4wMzIsMjIuMywxNi4wMzJoMjQuMDQ4YzEwLjM1NCwwLDE5LjE2LTYuNzI0LDIyLjMtMTYuMDMyaDE5LjUzDQoJCWMzLjEzOSw5LjMwOCwxMS45NDYsMTYuMDMyLDIyLjMsMTYuMDMyaDI0LjA0OGMxMC4zNTQsMCwxOS4xNi02LjcyNCwyMi4zLTE2LjAzMmgxOS41M2MzLjEzOSw5LjMwOCwxMS45NDYsMTYuMDMyLDIyLjMsMTYuMDMyDQoJCWgyNC4wNDljMTIuOTc2LDAsMjMuNTMyLTEwLjU1NywyMy41MzItMjMuNTMydi0wLjUxNkg1MDQuNWM0LjE0MiwwLDcuNS0zLjM1OCw3LjUtNy41YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjVoLTgwLjY3N3YtMTcuMDY1DQoJCUg1MDQuNWM0LjE0MiwwLDcuNS0zLjM1OCw3LjUtNy41YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjVoLTgwLjY3N1YxNTQuNTg3QzQyOC42MzcsMTU3LjU2Niw0MzQuMzA2LDE1OS4yOTEsNDQwLjM3MSwxNTkuMjkxeg0KCQkgTTQ0MC4zNzEsMTExLjE5M2M5LjEyNSwwLDE2LjU0OCw3LjQyMywxNi41NDgsMTYuNTQ4cy03LjQyMywxNi41NDktMTYuNTQ4LDE2LjU0OXMtMTYuNTQ4LTcuNDI0LTE2LjU0OC0xNi41NDkNCgkJUzQzMS4yNDYsMTExLjE5Myw0NDAuMzcxLDExMS4xOTN6IE02My42MTMsMzM2LjY3NmMtNC4xNDIsMC03LjUsMy4zNTgtNy41LDcuNXY2NC4xM2MwLDQuNzA1LTMuODI4LDguNTMzLTguNTMyLDguNTMzSDIzLjUzMg0KCQljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTAzLjY5M2MwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMySDQ3LjU4YzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWMzEyLjExDQoJCWMwLDQuMTQyLDMuMzU4LDcuNSw3LjUsNy41YzQuMTQyLDAsNy41LTMuMzU4LDcuNS03LjVWMTU5LjI5aDE3LjA2NHYxOTMuNDE5SDcxLjExM3YtOC41MzMNCgkJQzcxLjExMywzNDAuMDM0LDY3Ljc1NSwzMzYuNjc2LDYzLjYxMywzMzYuNjc2eiBNODguMTc3LDQwMC44MDZINzEuMTEzdi0zMy4wOTdoMTcuMDY0VjQwMC44MDZ6IE04OC4xNzcsMTQ0LjI5SDcxLjExM3YtMzMuMDk3DQoJCWgxNy4wNjRWMTQ0LjI5eiBNMTQ0LjI5LDQwOC4zMDZjMC4wMDEsNC43MDUtMy44MjcsOC41MzMtOC41MzIsOC41MzNoLTI0LjA0OWMtNC43MDUsMC04LjUzMi0zLjgyOC04LjUzMi04LjUzMlYxMDMuNjkzDQoJCWMwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMyaDI0LjA0OWM0LjcwNSwwLDguNTMyLDMuODI4LDguNTMyLDguNTMyVjQwOC4zMDZ6IE0xNzYuMzU1LDQwMC44MDZoLTE3LjA2NHYtMzMuMDk3aDE3LjA2NA0KCQlWNDAwLjgwNnogTTE3Ni4zNTUsMzUyLjcxaC0xNy4wNjRWMTU5LjI5MWgxNy4wNjRWMzUyLjcxeiBNMTc2LjM1NSwxNDQuMjkxaC0xNy4wNjR2LTMzLjA5N2gxNy4wNjRWMTQ0LjI5MXogTTIzMi40NjgsNDA4LjMwNg0KCQljMCw0LjcwNS0zLjgyOCw4LjUzMy04LjUzMiw4LjUzM2gtMjQuMDQ4Yy00LjcwNSwwLTguNTMyLTMuODI4LTguNTMyLTguNTMyVjEwMy42OTNjMC00LjcwNSwzLjgyOC04LjUzMiw4LjUzMi04LjUzMmgyNC4wNDgNCgkJYzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWNDA4LjMwNnogTTI2NC41MzIsNDAwLjgwNmgtMTcuMDY0di0zMy4wOTdoMTcuMDY0VjQwMC44MDZ6IE0yNjQuNTMyLDM1Mi43MWgtMTcuMDY0VjE1OS4yOTENCgkJaDE3LjA2NFYzNTIuNzF6IE0yNjQuNTMyLDE0NC4yOTFoLTE3LjA2NHYtMzMuMDk3aDE3LjA2NFYxNDQuMjkxeiBNMzIwLjY0NSw0MDguMzA2YzAsNC43MDUtMy44MjgsOC41MzMtOC41MzIsOC41MzNoLTI0LjA0OA0KCQljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTAzLjY5M2MwLTQuNzA1LDMuODI4LTguNTMyLDguNTMyLTguNTMyaDI0LjA0OGM0LjcwNSwwLDguNTMyLDMuODI4LDguNTMyLDguNTMyVjQwOC4zMDZ6DQoJCSBNMzM1LjY0NSwxMTEuMTkzaDE3LjA2NHYzMy4wOTdoLTE3LjA2NFYxMTEuMTkzeiBNMzUyLjcwOSw0MDAuODA3aC0xNy4wNjRWMzY3LjcxaDE3LjA2NFY0MDAuODA3eiBNNDA4LjgyMyw0MDguMzA3DQoJCWMwLDQuNzA1LTMuODI4LDguNTMyLTguNTMyLDguNTMyaC0yNC4wNDljLTQuNzA1LDAtOC41MzItMy44MjgtOC41MzItOC41MzJWMTk5Ljg5YzAtNC4xNDItMy4zNTgtNy41LTcuNS03LjUNCgkJYy00LjE0MiwwLTcuNSwzLjM1OC03LjUsNy41djE1Mi44MmgtMTcuMDY0VjE1OS4yOTFoMTcuMDY0djguNTMzYzAsNC4xNDIsMy4zNTgsNy41LDcuNSw3LjVjNC4xNDIsMCw3LjUtMy4zNTgsNy41LTcuNXYtNjQuMTMNCgkJYzAtNC43MDUsMy44MjgtOC41MzIsOC41MzItOC41MzJoMjQuMDQ5YzQuNzA1LDAsOC41MzIsMy44MjgsOC41MzIsOC41MzJWNDA4LjMwN3oiLz4NCjwvZz4NCjwvc3ZnPg0K\",\n \"name\": \"Heating\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.backlight\": {\n \"_id\": \"enum.functions.backlight\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTExLjk5MSA1MTEuOTkxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTEuOTkxIDUxMS45OTE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik05MS40OSwzMzYuNTcybC0yMS4zMzMsNDIuNjY3Yy0yLjYyNCw1LjI2OS0wLjQ5MSwxMS42NjksNC43NzksMTQuMzE1YzEuNTM2LDAuNzQ3LDMuMTU3LDEuMTA5LDQuNzU3LDEuMTA5DQoJCWMzLjkwNCwwLDcuNjU5LTIuMTc2LDkuNTM2LTUuODg4bDIxLjMzMy00Mi42NjdjMi42NDUtNS4yNjksMC41MTItMTEuNjY5LTQuNzU3LTE0LjMxNQ0KCQlDMTAwLjU1NywzMjkuMTY5LDk0LjE1NywzMzEuMzI0LDkxLjQ5LDMzNi41NzJ6Ii8+DQoJPHBhdGggZD0iTTUwNy41NTQsMTgzLjM1NmMtMi43NzMtMi4wMjctNi4zMzYtMi41MzktOS42LTEuNDkzbC00OS40MDgsMTYuNDY5Yy0xMy4wOTksNC4zNzMtMjEuODg4LDE2LjU3Ni0yMS44ODgsMzAuMzc5djM2Ljg4NQ0KCQljLTI0LjMyLTQuOTQ5LTQyLjY2Ny0yNi40OTYtNDIuNjY3LTUyLjI0NXYtODUuMzMzYzAtMzEuMjMyLTEyLjEzOS02MC43MTUtMzQuMzA0LTgzLjExNQ0KCQljLTIyLjMxNS0yMi4xMDEtNTEuNzk3LTM0LjI0LTgzLjAyOS0zNC4yNGMtNjQuNjgzLDAtMTE3LjMzMyw1Mi42NTEtMTE3LjMzMywxMTcuMzMzdjUzLjMzM2gtMzJjLTE3LjY0MywwLTMyLDE0LjM1Ny0zMiwzMg0KCQl2NDAuMTQ5TDEuMTIyLDQyMS45MDVjLTEuNjQzLDMuMzA3LTEuNDcyLDcuMjMyLDAuNDQ4LDEwLjM2OGMxLjk2MywzLjEzNiw1LjM5Nyw1LjA1Niw5LjA4OCw1LjA1Nmg3NS43NTUNCgkJYzUuMjI3LDM2LjA5NiwzNi4wNzUsNjQsNzMuNTc5LDY0czY4LjM1Mi0yNy45MDQsNzMuNTc5LTY0aDc1Ljc1NWMwLjE0OSwwLDAuMzIsMC4wMjEsMC40MjcsMA0KCQljNS44ODgsMCwxMC42NjctNC43NzksMTAuNjY3LTEwLjY2N2MwLTIuNzUyLTEuMDI0LTUuMjQ4LTIuNzMxLTcuMTI1bC04My4wMjktMTY2LjA1OXYtNDAuMTQ5YzAtMTcuNjQzLTE0LjM1Ny0zMi0zMi0zMmgtMzINCgkJdi01My4zMzNjMC01Mi45MjgsNDMuMDcyLTk2LDk2LTk2YzI1LjU1NywwLDQ5LjcyOCw5Ljk2Myw2Ny45NDcsMjcuOTg5YzE4LjA5MSwxOC4yODMsMjguMDUzLDQyLjQ1MywyOC4wNTMsNjguMDExdjg1LjMzMw0KCQljMCwzNy41MDQsMjcuOTA0LDY4LjM1Miw2NCw3My41Nzl2MzkuMDRjMCwxMy43ODEsOC43ODksMjYuMDA1LDIxLjg2NywzMC4zNTdsNDkuNDA4LDE2LjQ2OQ0KCQljMS4xMzEsMC4zNjMsMi4yNjEsMC41NTUsMy4zOTIsMC41NTVjMi4yMTksMCw0LjM5NS0wLjY4Myw2LjIyOS0yLjAyN2MyLjc5NS0xLjk4NCw0LjQzNy01LjIwNSw0LjQzNy04LjY0VjE5MS45OTYNCgkJQzUxMS45OTEsMTg4LjU2MSw1MTAuMzQ5LDE4NS4zNCw1MDcuNTU0LDE4My4zNTZ6IE0xNTkuOTkxLDQ3OS45OTZjLTI1Ljc0OSwwLTQ3LjMxNy0xOC4zNDctNTIuMjY3LTQyLjY2N2gxMDQuNTMzDQoJCUMyMDcuMzA5LDQ2MS42NDksMTg1Ljc0MSw0NzkuOTk2LDE1OS45OTEsNDc5Ljk5NnogTTI5Mi4wODcsNDE1Ljk5NmgtNjguMDk2aC0xMjhIMjcuOTE3bDc0LjY2Ny0xNDkuMzMzaDExNC44MzcNCgkJTDI5Mi4wODcsNDE1Ljk5NnogTTIwMi42NTgsMjAyLjY2MmM1Ljg2NywwLDEwLjY2Nyw0LjgsMTAuNjY3LDEwLjY2N3YzMkgxMDYuNjU4di0zMmMwLTUuODY3LDQuOC0xMC42NjcsMTAuNjY3LTEwLjY2N0gyMDIuNjU4eg0KCQkgTTQ5MC42NTgsMzQ3Ljg3OGwtMzUuMzcxLTExLjgxOWMtNC4zNzMtMS40MjktNy4yOTYtNS41MDQtNy4yOTYtMTAuMTEydi05Ny4yNTljMC00LjYwOCwyLjkyMy04LjY2MSw3LjI5Ni0xMC4xMTINCgkJbDM1LjM3MS0xMS43OTdWMzQ3Ljg3OHoiLz4NCjwvZz4NCjwvc3ZnPg0K\",\n \"name\": \"Backlight\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.household\": {\n \"_id\": \"enum.functions.household\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXRmLTgnPz4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgJy0vL1czQy8vRFREIFNWRyAxLjEvL0VOJyAnaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkJz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIj4KICA8Zz4KICAgIDxnPgogICAgICA8cGF0aCBkPSJtMjU2LDkyLjNjLTc0LjIsMC0xMjcuOCw1NS4zLTEzNi4zLDExNC43LTUuMywzOS42IDcuNSw3OC4yIDM0LjEsMTA3LjQgMjMuNCwyNSAzNi4yLDU4LjQgMzYuMiw5Mi44bC0uMSw1NC4yYzAsMjEuOSAxOC4xLDM5LjYgNDAuNSwzOS42aDUyLjJjMjIuNCwwIDQwLjUtMTcuNyA0MC41LTM5LjZsLjEtNTQuMmMwLTM1LjQgMTEuNy02Ny44IDM0LjEtOTAuNyAyNC41LTI1IDM3LjMtNTcuMyAzNy4zLTkwLjctMC4xLTc0LjEtNjMtMTMzLjUtMTM4LjYtMTMzLjV6bTQ2LjgsMzY5LjFjMCwxMC40LTguNSwxOC44LTE5LjIsMTguOGgtNTIuMmMtMTAuNywwLTE5LjItOC4zLTE5LjItMTguOHYtMjRoOTAuNXYyNHptMzkuNi0xNTkuNWMtMjYuNiwyNy4xLTQwLjUsNjQuNi00MC41LDEwNS4zdjkuNGgtOTAuNXYtOS40YzAtMzguNi0xNi03Ny4xLTQyLjYtMTA2LjMtMjMuNC0yNS0zMy01Ny4zLTI4LjgtOTAuNyA3LjUtNTAgNTQtOTcgMTE2LjEtOTcgNjUsMCAxMTcuMiw1MS4xIDExNy4yLDExMi42IDAsMjguMS0xMC43LDU1LjItMzAuOSw3Ni4xeiIvPgogICAgICA8cmVjdCB3aWR0aD0iMjEuMyIgeD0iMjQ1LjMiIHk9IjExIiBoZWlnaHQ9IjUwIi8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzg1LjEsMTA3LjQgNDAwLDEyMi4zIDQzNi41LDg3LjIgNDIxLjUsNzIuMyAgICIvPgogICAgICA8cmVjdCB3aWR0aD0iNTIuMiIgeD0iNDQ4LjgiIHk9IjIzNi4yIiBoZWlnaHQ9IjIwLjkiLz4KICAgICAgPHJlY3Qgd2lkdGg9IjUyLjIiIHg9IjExIiB5PSIyMzYuMiIgaGVpZ2h0PSIyMC45Ii8+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iOTAuMSw3Mi4yIDc1LjEsODcuMSAxMTEuNiwxMjIuMiAxMjYuNSwxMDcuMyAgICIvPgogICAgPC9nPgogIDwvZz4KPC9zdmc+Cg==\",\n \"name\": \"Household\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.audio\": {\n \"_id\": \"enum.functions.audio\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDc3LjIxNiA0NzcuMjE2IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NzcuMjE2IDQ3Ny4yMTY7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik00NTMuODU4LDEwNS4xMTZ2LTkxLjZjMC00LjMtMi4xLTguNC01LjUtMTAuOWMtMy41LTIuNS04LTMuMy0xMi4xLTJsLTI3Mi45LDg2LjdjLTUuNiwxLjgtOS40LDctOS40LDEyLjl2OTEuN3YwLjF2MTc1LjMNCgkJYy0xNC4zLTkuOS0zMi42LTE1LjMtNTEuOC0xNS4zYy0yMC4zLDAtMzkuNiw2LjEtNTQuMywxNy4xYy0xNS44LDExLjktMjQuNSwyOC0yNC41LDQ1LjVzOC43LDMzLjYsMjQuNSw0NS41DQoJCWMxNC43LDExLDMzLjksMTcuMSw1NC4zLDE3LjFzMzkuNi02LjEsNTQuMy0xNy4xYzE1LjgtMTEuOSwyNC41LTI4LDI0LjUtNDUuNXYtMjEyLjhsMjQ1LjktNzguMnYxNTYuNg0KCQljLTE0LjMtOS45LTMyLjYtMTUuMy01MS44LTE1LjNjLTIwLjMsMC0zOS42LDYuMS01NC4zLDE3LjFjLTE1LjgsMTEuOS0yNC41LDI4LTI0LjUsNDUuNXM4LjcsMzMuNiwyNC41LDQ1LjUNCgkJYzE0LjcsMTEsMzMuOSwxNy4xLDU0LjMsMTcuMXMzOS42LTYuMSw1NC4zLTE3LjFjMTUuOC0xMS45LDI0LjUtMjgsMjQuNS00NS41di0yMjIuMw0KCQlDNDUzLjg1OCwxMDUuMTE2LDQ1My44NTgsMTA1LjExNiw0NTMuODU4LDEwNS4xMTZ6IE0xMDIuMTU4LDQ1MC4yMTZjLTI4LjEsMC01MS44LTE2LjMtNTEuOC0zNS42YzAtMTkuMywyMy43LTM1LjYsNTEuOC0zNS42DQoJCXM1MS44LDE2LjMsNTEuOCwzNS42QzE1My45NTgsNDM0LjAxNiwxMzAuMjU4LDQ1MC4yMTYsMTAyLjE1OCw0NTAuMjE2eiBNMTgwLjk1OCwxNzMuNDE2di02My40bDI0NS45LTc4LjF2NjMuNEwxODAuOTU4LDE3My40MTZ6DQoJCSBNMzc1LjE1OCwzNjMuMTE2Yy0yOC4xLDAtNTEuOC0xNi4zLTUxLjgtMzUuNmMwLTE5LjMsMjMuNy0zNS42LDUxLjgtMzUuNnM1MS44LDE2LjMsNTEuOCwzNS42DQoJCUM0MjYuODU4LDM0Ni44MTYsNDAzLjE1OCwzNjMuMTE2LDM3NS4xNTgsMzYzLjExNnoiLz4NCjwvZz4NCjwvc3ZnPg0K\",\n \"name\":\"Audio/Music\",\n \"members\": []\n },\n \"type\": \"enum\"\n },\n \"enum.functions.security\": {\n \"_id\": \"enum.functions.security\",\n \"common\": {\n \"icon\": \"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPHBhdGggZD0iTTI1Niw0MC4wMWMtNS41MzgsMC05Ljk5LDQuNDYtOS45OSw5Ljk5YzAsNS4xNDcsMy44NzIsOS40Myw4Ljk5LDkuOTM4YzUuOTI1LDAuNTg4LDEwLjk5LTQuMDI3LDEwLjk5LTkuOTM4DQoJCUMyNjUuOTksNDQuNDYyLDI2MS41Myw0MC4wMSwyNTYsNDAuMDF6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNNDU2LDYwYy0yNy41NywwLTUwLTIyLjQzLTUwLTUwYzAtNS41MjItNC40NzgtMTAtMTAtMTBIMTE2Yy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwYzAsMjcuNTctMjIuNDMsNTAtNTAsNTANCgkJYy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwdjE2My4xOWMwLDEyNy4xNzcsODIuODk1LDI0MS4xMzUsMjA3LjEyOCwyNzguMzg5YzAuOTM3LDAuMjgsMS45MDQsMC40MjEsMi44NzIsMC40MjENCgkJYzAuOTY4LDAsMS45MzctMC4xNDEsMi44NzMtMC40MjJDMzgwLjQxNSw0NzUuMTE5LDQ2NiwzNjMuMTQ5LDQ2NiwyMzMuMTlWNzBDNDY2LDY0LjQ3OCw0NjEuNTIyLDYwLDQ1Niw2MHogTTQ0NiwyMzMuMTkNCgkJYzAsMTE5LjQ0OC03Ni4yMjEsMjIyLjg5Mi0xOTAsMjU4LjM1M0MxNDMuMTI4LDQ1Ni4zNjUsNjYsMzUxLjk4NCw2NiwyMzMuMTlWNzkuMjg4Qzk2LjYxMSw3NC44OSwxMjAuODksNTAuNjExLDEyNS4yODgsMjANCgkJaDI2MS40MjRDMzkxLjExLDUwLjYxMSw0MTUuMzg5LDc0Ljg5LDQ0Niw3OS4yODhWMjMzLjE5eiIvPg0KPC9nPg0KPGc+DQoJPHBhdGggZD0iTTQyMC4wMTIsOTIuNDljLTIwLjg1NC05LjEzMy0zNy4zNjktMjUuNjQ4LTQ2LjUwMi00Ni41MDJDMzcxLjkxNiw0Mi4zNSwzNjguMzIyLDQwLDM2NC4zNSw0MGgtNjguMzcNCgkJYy01LjUyMiwwLTEwLDQuNDc4LTEwLDEwczQuNDc4LDEwLDEwLDEwaDYyLjA0N2MxMC41NjUsMjAuNjgxLDI3LjI5MiwzNy40MDcsNDcuOTczLDQ3Ljk3M1YyMzMuMTkNCgkJYzAsOTcuODYzLTU4Ljc0OSwxODIuMzAzLTE1MCwyMTYuMTA0Yy05MS4yNTEtMzMuODAyLTE1MC0xMTguMjQxLTE1MC0yMTYuMTA0VjEwNy45NzNDMTI2LjY4MSw5Ny40MDcsMTQzLjQwNyw4MC42ODEsMTUzLjk3Myw2MA0KCQloNjIuMDQ3YzUuNTIyLDAsMTAtNC40NzgsMTAtMTBzLTQuNDc4LTEwLTEwLTEwaC02OC4zN2MtMy45NzIsMC03LjU2NiwyLjM1MS05LjE2LDUuOTg4DQoJCWMtOS4xMzMsMjAuODU0LTI1LjY0OCwzNy4zNjktNDYuNTAyLDQ2LjUwMkM4OC4zNTEsOTQuMDg0LDg2LDk3LjY3OSw4NiwxMDEuNjV2MTMxLjU0YzAsMTA3LjIxMyw2Ni4zMTEsMjAwLjY1MywxNjYuNjY0LDIzNi4xNjYNCgkJYzEuMDc5LDAuMzgyLDIuMjA3LDAuNTczLDMuMzM2LDAuNTczYzEuMTI5LDAsMi4yNTctMC4xOTEsMy4zMzYtMC41NzNDMzU5LjYwNSw0MzMuODczLDQyNiwzNDAuNDksNDI2LDIzMy4xOVYxMDEuNjUNCgkJQzQyNiw5Ny42NzgsNDIzLjY0OSw5NC4wODQsNDIwLjAxMiw5Mi40OXoiLz4NCjwvZz4NCjxnPg0KCTxwYXRoIGQ9Ik0yNTYsMTQ2Yy00OS42MjYsMC05MCw0MC4zNzQtOTAsOTBjMCw0OS42MjYsNDAuMzc0LDkwLDkwLDkwYzQ5LjYyNiwwLDkwLTQwLjM3NCw5MC05MEMzNDYsMTg2LjM3NCwzMDUuNjI2LDE0NiwyNTYsMTQ2eg0KCQkgTTI1NiwzMDZjLTM4LjU5OCwwLTcwLTMxLjQwMi03MC03MGMwLTM4LjU5OCwzMS40MDItNzAsNzAtNzBjMzguNTk4LDAsNzAsMzEuNDAyLDcwLDcwQzMyNiwyNzQuNTk4LDI5NC41OTgsMzA2LDI1NiwzMDZ6Ii8+DQo8L2c+DQo8Zz4NCgk8cGF0aCBkPSJNMzAzLjA3MSwyMDguOTI4Yy0zLjkwNi0zLjkwNC0xMC4yMzYtMy45MDQtMTQuMTQzLDBMMjQ2LDI1MS44NTdsLTEyLjkyOS0xMi45MjhjLTMuOTA2LTMuOTA0LTEwLjIzNi0zLjkwNC0xNC4xNDMsMA0KCQljLTMuOTA1LDMuOTA1LTMuOTA1LDEwLjIzNywwLDE0LjE0M2wyMCwyMEMyNDAuODgyLDI3NS4wMjMsMjQzLjQ0LDI3NiwyNDYsMjc2czUuMTE4LTAuOTc3LDcuMDcxLTIuOTI5bDUwLTUwDQoJCUMzMDYuOTc2LDIxOS4xNjYsMzA2Ljk3NiwyMTIuODM0LDMwMy4wNzEsMjA4LjkyOHoiLz4NCjwvZz4NCg0KPC9zdmc+DQo=\",\n \"name\": \"Security\",\n \"members\": []\n },\n \"type\": \"enum\"\n }\n // todo\n }\n };\n\n var selectId = function () {\n if (!that.$grid || !that.$grid.selectId) return;\n selectId = that.$grid.selectId.bind(that.$grid);\n return that.$grid.selectId.apply(that.$grid, arguments);\n };\n\n function enumRename(oldId, newId, newCommon, callback) {\n if (tasks.length) {\n var task = tasks.shift();\n if (task.name === 'delObject') {\n that.main.socket.emit(task.name, task.id, function () {\n setTimeout(function () {\n enumRename(undefined, undefined, undefined, callback);\n }, 0);\n });\n } else {\n that.main.socket.emit(task.name, task.id, task.obj, function () {\n setTimeout(function () {\n enumRename(undefined, undefined, undefined, callback);\n }, 0);\n });\n }\n } else {\n _enumRename(oldId, newId, newCommon, function () {\n if (tasks.length) {\n enumRename(undefined, undefined, undefined, callback);\n } else {\n if (callback) callback();\n }\n });\n }\n }\n\n function _enumRename(oldId, newId, newCommon, callback) {\n //Check if this name exists\n if (oldId !== newId && that.main.objects[newId]) {\n showMessage(_('Name yet exists!'), true);\n that.init(true);\n if (callback) callback();\n } else {\n if (oldId === newId) {\n if (newCommon && (newCommon.name !== undefined || newCommon.icon !== undefined || newCommon.color !== undefined)) {\n tasks.push({name: 'extendObject', id: oldId, obj: {common: newCommon}});\n }\n if (callback) callback();\n } else if (that.main.objects[oldId] && that.main.objects[oldId].common && that.main.objects[oldId].common.nondeletable) {\n showMessage(_('Change of enum\\'s id \"%s\" is not allowed!', oldId), true);\n that.init(true);\n if (callback) callback();\n } else {\n var len = oldId.length + 1;\n var children = [];\n for (var e = 0; e < that.list.length; e++) {\n if (that.list[e].substring(0, len) === oldId + '.') {\n children.push(that.list[e]);\n }\n }\n\n that.main.socket.emit('getObject', oldId, function (err, obj) {\n setTimeout(function () {\n if (obj) {\n obj._id = newId;\n if (obj._rev) delete obj._rev;\n if (newCommon && newCommon.name !== undefined) obj.common.name = newCommon.name;\n if (newCommon && newCommon.icon !== undefined) obj.common.icon = newCommon.icon;\n if (newCommon && newCommon.color !== undefined) obj.common.color = newCommon.color;\n tasks.push({name: 'delObject', id: oldId});\n tasks.push({name: 'setObject', id: newId, obj: obj});\n // Rename all children\n var count = 0;\n for (var i = 0; i < children.length; i++) {\n var n = children[i].replace(oldId + '.', newId + '.');\n count++;\n _enumRename(children[i], n, null, function () {\n if (!--count && callback) callback();\n });\n }\n if (!children.length && callback) {\n callback();\n }\n }\n }, 0);\n });\n }\n }\n }\n\n function enumAddChild(parent, newId, common, callback) {\n if (that.main.objects[newId]) {\n showMessage(_('Name yet exists!'), true);\n return false;\n }\n\n that.main.socket.emit('setObject', newId, {\n _id: newId,\n common: {\n name: common.name,\n members: [],\n icon: common.icon,\n color: common.color\n },\n type: 'enum'\n }, callback);\n return true;\n }\n\n function prepareNewEnum(parent) {\n var text = '';\n var id;\n if (parent) {\n var name = parent.replace(/[.#\\\\\\/&?]+/g, '-');\n\n if (standardGroups[parent]) {\n for (id in standardGroups[parent]) {\n if (standardGroups[parent].hasOwnProperty(id) && that.list.indexOf(id) === -1) {\n text += '
      • ' + that.main.getIconFromObj(standardGroups[parent][id]) + getName(standardGroups[parent][id]) + '
      • ';\n }\n }\n }\n if (text) {\n text += '
      • ';\n }\n text += '
      • control_point' + _('custom group') + '
      • ';\n\n that.$gridEnum.find('#btn-new-group-' + name).html(text);\n that.$gridEnum.find('.btn-new-group-btn[data-target=\"btn-new-group-' + name + '\"]').dropdown({\n constrainWidth: false\n });\n that.$gridEnum.find('#btn-new-group-' + name).find('.new-group-item').off('click').on('click', function () {\n var id = $(this).data('id');\n var parent = $(this).data('enum');\n if (!id) {\n createOrEditEnum(null, parent);\n } else {\n var name = parent.replace(/[.#\\\\\\/&?]+/g, '-');\n that.main.saveConfig('enums-active', 'enum-' + name);\n that.main.socket.emit('setObject', id, standardGroups[parent][id], function (err) {\n if (err) {\n that.main.showError(err);\n }\n });\n }\n });\n } else {\n for (id in standardEnums) {\n if (standardEnums.hasOwnProperty(id) && that.list.indexOf(id) === -1) {\n text += '
      • ' + that.main.getIconFromObj(standardEnums[id]) + getName(standardEnums[id]) + '
      • ';\n }\n }\n\n if (text) {\n text += '
      • ';\n }\n text += '
      • control_point' + _('custom enum') + '
      • ';\n that.$gridEnum.find('#btn-new-enum').html(text);\n that.$gridEnum.find('.btn-new-enum-btn').dropdown({\n constrainWidth: false\n });\n that.$gridEnum.find('.new-enum-item').off('click').on('click', function () {\n var id = $(this).data('id');\n if (!id) {\n createOrEditEnum(null);\n } else {\n var name = id.replace(/[.#\\\\\\/&?]+/g, '-');\n that.main.saveConfig('enums-active', 'enum-' + name);\n that.main.socket.emit('setObject', id, standardEnums[id], function (err) {\n if (err) {\n that.main.showError(err);\n }\n });\n }\n });\n }\n }\n\n this.prepare = function () {\n this.isTiles = (this.main.config.enumIsTiles !== undefined && this.main.config.enumIsTiles !== null) ? this.main.config.enumIsTiles : true;\n };\n\n function getName(objects, id) {\n var name;\n if (!id) {\n name = objects;\n } else {\n name = objects[id];\n }\n if (name && name.common && name.common.name) {\n name = translateName(name.common.name);\n } else {\n var parts = id.split('.');\n name = parts.pop();\n name = name[0].toUpperCase() + name.substring(1).toLowerCase();\n }\n return name;\n }\n\n function drawChip(id, group) {\n var text = '';\n text += '
        ' +\n that.main.getIcon(id) +\n '' +\n '' + getName(that.main.objects, id) + '' +\n// '' + id + '' +\n '' +\n 'close' +\n '
        ';\n return text;\n }\n\n function drawEnum(id, $page, scrollTop) {\n var obj = that.main.objects[id];\n var name = id.replace(/[.#\\\\\\/&?]+/g, '-');\n var text =\n '
        ' +\n '
        ' +\n ' library_add' +\n '
          ' +\n ' ' +\n ' edit' +\n ' ' +\n ' ' +\n ' delete' +\n ' ' +\n '
          \\n' +\n ' clear
          \\n' +\n '
          ' +\n '
          ';\n\n text += '
            ';\n\n for (var se = 0; se < that.list.length; se++) {\n if (that.list[se].substring(0, id.length + 1) === id + '.') {\n var en = that.main.objects[that.list[se]];\n var inverted;\n var style = '';\n if (en && en.common && en.common.color) {\n style = 'background: ' + en.common.color + '; ';\n if (that.main.invertColor(en.common.color)) {\n inverted = true;\n style += 'color: white;';\n }\n }\n\n text += '
          • ' +\n that.main.getIcon(that.list[se], null, null, 'icon') +\n '' + getName(that.main.objects, that.list[se]) + '' +\n '

            ' + that.list[se] + '


            ';\n\n if (en && en.common && en.common.members && en.common.members.length) {\n for (var m = 0; m < en.common.members.length; m++) {\n text += drawChip(en.common.members[m], that.list[se]);\n }\n }\n text += 'edit';\n text += 'delete';\n text += '
          • ';\n }\n }\n text += '
          ';\n $page.html(text);\n prepareNewEnum(id);\n scrollTop && $page.find('.enum-collection').scrollTop(scrollTop);\n initFilter(id);\n }\n function applyFilter(id, filter) {\n var $tiles = that.$gridList.find('.enum-collection[data-id=\"' + id + '\"] .collection-item');\n if (!filter) {\n $tiles.show();\n } else {\n filter = filter.toLowerCase();\n $tiles.each(function () {\n var $this = $(this);\n var eid = $this.data('id');\n var name = getName(that.main.objects, eid);\n if (name.toLowerCase().indexOf(filter) !== -1) {\n $this.show();\n } else {\n if (eid.substring(id.length).toLowerCase().indexOf(filter) !== -1) {\n $this.show();\n } else {\n $this.hide();\n }\n }\n });\n }\n }\n\n function initFilter(id) {\n var $filter = that.$gridList.find('.enum-buttons[data-id=\"' + id + '\"] .filter-input');\n var data = {};\n for (var se = 0; se < that.list.length; se++) {\n var eid = that.list[se];\n if (eid.substring(0, id.length + 1) === id + '.') {\n var name = getName(that.main.objects, eid);\n var icon = null;\n if (that.main.objects[eid] &&\n that.main.objects[eid].common &&\n that.main.objects[eid].common.icon) {\n icon = that.main.objects[eid].common.icon;\n }\n\n data[name] = icon;\n }\n }\n var $btn = that.$gridList.find('.enum-buttons[data-id=\"' + id + '\"] .filter-clear');\n $filter.mautocomplete({\n data: data,\n minLength: 0,\n limit: 10\n }).on('change', function () {\n var val = $(this).val();\n applyFilter(id, val);\n if ($(this).val()) {\n $btn.show();\n } else {\n $btn.hide();\n }\n that.main.saveConfig('filter-' + id, val);\n }).on('keyup', function () {\n $(this).trigger('change');\n });\n $btn.off('click').on('click', function () {\n $filter.val('').trigger('change');\n });\n if (that.main.config['filter-' + id]) {\n $filter.val(that.main.config['filter-' + id]).trigger('change');\n } else {\n $btn.hide();\n }\n }\n\n function drawEnumsTiles() {\n var $tableBody = that.$gridList.find('.tree-table-body');\n that.$gridList.removeClass('tree-table-list').addClass('tree-table-tiles');\n that.$gridList.find('.tree-table-buttons').remove();\n\n // create buttons for panels\n that.$gridList.prepend('
          \\n' +\n ' view_list\\n' +\n ' note_add\\n' +\n '
            \\n' +\n ' \\n' +\n ' queue_play_next\\n' +\n ' \\n' +\n '
            ');\n\n\n var text = '
            ';\n text += '
              ';\n var parts;\n for (var e = 0; e < that.list.length; e++) {\n parts = that.list[e].split('.');\n if (parts.length !== 2) continue;\n var name = getName(that.main.objects, that.list[e]);\n text += '
            • ' + that.main.getIcon(that.list[e]) + '' + name + '
            • ';\n }\n text += '
            ';\n text += '
            ';\n for (var se = 0; se < that.list.length; se++) {\n parts = that.list[se].split('.');\n if (parts.length !== 2) continue;\n\n text += '
            ';\n text += '
            ';\n }\n var scrollTop = {};\n $tableBody.find('.enum-collection').each(function () {\n // remember actual offset\n scrollTop[$(this).data('id')] = $(this).scrollTop();\n });\n\n // destroy droppable\n try {\n var $items = that.$gridEnum.find('.tree-table-body .collection').find('.collection-item');\n try {\n if ($items.droppable('instance')) {\n $items.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n } catch (e) {\n\n }\n\n $tableBody.html(text);\n\n if ($tableBody.find('.tabs li').length > 0) {\n $tableBody.find('.tabs').mtabs({\n onShow: function (tab) {\n that.main.saveConfig('enums-active', $(tab).attr('id'));\n }\n });\n if (that.main.config['enums-active'] && !that.main.noSelect) {\n $tableBody.find('.tabs').mtabs('select', that.main.config['enums-active']);\n }\n }\n\n\n $tableBody.find('.page').each(function () {\n drawEnum($(this).data('id'), $(this), scrollTop[$(this).data('id')]);\n });\n $tableBody.find('.btn-new-category').on('click', function () {\n createOrEditEnum(null, $(this).data('id'));\n });\n $tableBody.find('.btn-edit-category').on('click', function () {\n createOrEditEnum($(this).data('id'));\n });\n $tableBody.find('.btn-del-category').on('click', function () {\n deleteEnum($(this).data('id'));\n });\n $tableBody.find('.edit-content').on('click', function () {\n createOrEditEnum($(this).data('id'));\n });\n $tableBody.find('.delete-content').on('click', function () {\n deleteEnum($(this).data('id'));\n });\n $tableBody.find('.close').on('click', function () {\n removeMember($(this).data('id'), $(this).data('enum'));\n });\n\n that.$gridList.find('.btn-edit').off('click').on('click', function () {\n switchEditMode(!that.editMode);\n });\n\n that.$gridList.find('.btn-switch-tiles').off('click').on('click', function () {\n that.isTiles = false;\n that.main.saveConfig('enumIsTiles', that.isTiles);\n\n setTimeout(function () {\n drawEnumsTable();\n }, 50);\n });\n prepareNewEnum();\n\n var $collection = that.$gridEnum.find('.tree-table-body .collection');\n setupDroppableTiles($collection);\n }\n\n function drawEnumsTable() {\n try {\n var $items = that.$gridEnum.find('.tree-table-main').find('tbody>tr.treetable-enum');\n if ($items.droppable('instance')) {\n $items.droppable('destroy');\n }\n } catch (e) {\n console.log(e);\n }\n // extract all enums\n that.$gridList.html('').removeClass('tree-table-tiles').addClass('tree-table-list');\n\n that.$gridList.treeTable({\n objects: that.main.objects,\n root: 'enum',\n columns: ['title', 'name'],\n members: true,\n colors: true,\n icons: true,\n widths: ['calc(100% - 250px)', '250px'],\n //classes: ['', 'treetable-center'],\n name: 'enums',\n buttonsWidth: '40px',\n buttons: [\n {\n text: false,\n icons: {\n primary:'ui-icon-trash'\n },\n click: function (id, children, parent) {\n if (that.main.objects[id]) {\n if (that.main.objects[id].type === 'enum') {\n if (children) {\n // ask if only object must be deleted or just this one\n that.main.confirmMessage(_('All sub-enums of %s will be deleted too?', id), null, 'help', function (result) {\n // If all\n if (result) {\n that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } // else do nothing\n });\n } else {\n that.main.confirmMessage(_('Are you sure to delete %s?', id), null, 'help', function (result) {\n // If all\n if (result) that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n });\n }\n } else {\n removeMember(id, parent);\n }\n } else {\n if (that.main.objects[parent] && that.main.objects[parent].type === 'enum') {\n removeMember(id, parent);\n } else {\n showMessage(_('Object \"%s\" does not exists. Update the page.', id));\n }\n }\n },\n width: 26,\n height: 20\n }, {\n text: false,\n icons: {\n primary:'ui-icon-pencil'\n },\n match: function (id) {\n return that.main.objects[id] && that.main.objects[id].type === 'enum';\n },\n click: function (id, children, parent) {\n createOrEditEnum(id);\n },\n width: 26,\n height: 20\n }\n ],\n panelButtons: [\n {\n id: 'tab-enums-btn-switch-tiles',\n title: _('change view mode'),\n icon: 'view_module',\n click: function () {\n that.isTiles = true;\n that.main.saveConfig('enumIsTiles', that.isTiles);\n setTimeout(function () {\n drawEnumsTiles();\n }, 50);\n }\n },\n {\n id: 'tab-enums-list-new-enum',\n title: _('New enum'),\n icon: 'note_add',\n click: function () {\n createOrEditEnum(null);\n }\n },\n {\n id: 'tab-enums-list-new-category',\n title: _('New category'),\n icon: 'library_add',\n click: function () {\n createOrEditEnum(null, that.enumEdit);\n }\n },\n {\n id: 'tab-enums-list-edit',\n title: _('Edit'),\n icon: 'edit',\n click: function () {\n switchEditMode(!that.editMode);\n }\n }\n ],\n onChange: function (id, oldId) {\n if (id !== oldId) {\n that.enumEdit = id;\n var obj = that.main.objects[id];\n if (obj && obj.type === 'enum') {\n $('#tab-enums-list-new-enum').removeClass('disabled').attr('title', _('Create new enum, like %s', 'enum.newCategory'));\n var parts = id.split('.');\n if (parts.length === 2) {\n that.$gridList.find('#tab-enums-list-new-category').removeClass('disabled').attr('title', _('Create new category, like %s', id + '.newEnum'));\n } else {\n that.$gridList.find('#tab-enums-list-new-category').addClass('disabled');\n }\n } else {\n that.$gridList.find('#tab-enums-list-new-enum').addClass('disabled');\n that.$gridList.find('#tab-enums-list-new-category').addClass('disabled');\n }\n }\n },\n onReady: setupDroppableTable\n });//.treeTable('show', currentEnum);\n that.$gridList.find('.tree-table-buttons a').addClass('btn-small');\n that.$gridList.find('#tab-enums-list-new-enum').addClass('disabled');\n that.$gridList.find('#tab-enums-list-new-category').addClass('disabled');\n }\n\n function getEnumsChildren(id) {\n var parts = id.split('.');\n var items = [];\n var regex = new RegExp('^' + id.replace(/\\./g, '\\\\.') + '\\\\.');\n for (var se = 0; se < that.list.length; se++) {\n var _parts = that.list[se].split('.');\n if (_parts.length === parts.length + 1 && regex.test(that.list[se])) {\n items.push(that.list[se]);\n }\n }\n return items;\n }\n \n function deleteEnum(id) {\n if (that.main.objects[id].type === 'enum') {\n var children = getEnumsChildren(id);\n \n if (children && children.length) {\n // ask if only object must be deleted or just this one\n that.main.confirmMessage(_('All sub-enums of %s will be deleted too?', id), null, 'help', function (result) {\n // If all\n if (result) {\n that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } // else do nothing\n });\n } else {\n that.main.confirmMessage(_('Are you sure to delete %s?', id), null, 'help', function (result) {\n // If all\n if (result) that.main._delObjects(id, true, function (err) {\n if (!err) {\n showMessage(_('Deleted'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n });\n }\n }\n }\n \n function removeMember(id, parent) {\n that.main.socket.emit('getObject', parent, function (err, obj) {\n if (obj && obj.common && obj.common.members) {\n var pos = obj.common.members.indexOf(id);\n if (pos !== -1) {\n obj.common.members.splice(pos, 1);\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n if (!err) {\n showMessage(_('Removed'));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } else {\n showMessage(_('%s is not in the list'));\n }\n }\n });\n }\n\n function addMember(id, parent) {\n that.main.socket.emit('getObject', parent, function (err, obj) {\n if (obj && obj.common) {\n obj.common.members = obj.common.members || [];\n var pos = obj.common.members.indexOf(id);\n if (pos === -1) {\n obj.common.members.push(id);\n obj.common.members.sort();\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n if (!err) {\n showMessage(_('%s added to %s', id, obj._id));\n } else {\n showMessage(_('Error: %s', err), true);\n }\n });\n } else {\n showMessage(_('Is yet in the list'));\n }\n }\n });\n }\n \n function showMessage(text, duration, isError) {\n if (typeof duration === 'boolean') {\n isError = duration;\n duration = 3000;\n }\n that.main.showToast(that.$gridEnum.find('.tree-table-buttons'), text, null, duration, isError);\n }\n\n function setupDraggable() {\n var $trs = that.$gridEnum.find('.fancytree-container>tbody');\n try {\n if ($trs.sortable('instance')) {\n $trs.sortable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n\n that.$gridEnum.find('.fancytree-container>tbody')\n .sortable({\n connectWith: '#tab-enums .tab-enums-list .tree-table-main.treetable',\n items: '.fancytree-type-draggable',\n appendTo: that.$gridEnum,\n refreshPositions: true,\n helper: function (e, $target) {\n return $('
            ' + $target.find('.fancytree-title').text() + '
            ');\n },\n zIndex: 999990,\n revert: false,\n scroll: false,\n start: function (e, ui) {\n var $prev = ui.item.prev();\n // place this item back where it was\n ui.item.data('prev', $prev);\n that.$gridEnum.addClass('dragging');\n },\n stop: function (e, ui) {\n that.$gridEnum.removeClass('dragging');\n },\n update: function (event, ui) {\n // place this item back where it was\n var $prev = ui.item.data('prev');\n if (!$prev || !$prev.length) {\n $(this).prepend(ui.item);\n } else {\n $($prev).after(ui.item);\n }\n }\n })\n .disableSelection();\n }\n\n this._initObjectTree = function () {\n var settings = {\n objects: main.objects,\n noDialog: true,\n draggable: ['device', 'channel', 'state'],\n name: 'enum-objects',\n expertModeRegEx: /^system\\.|^yunkong2\\.|^_|^[\\w-]+$|^enum\\.|^[\\w-]+\\.admin|^script\\./,\n texts: {\n select: _('Select'),\n cancel: _('Cancel'),\n all: _('All'),\n id: _('ID'),\n ID: _('ID'),\n name: _('Name'),\n role: _('Role'),\n room: _('Room'),\n 'function': _('Function'),\n value: _('Value'),\n type: _('Type'),\n selectid: _('Select ID'),\n from: _('From'),\n lc: _('Last changed'),\n ts: _('Time stamp'),\n wait: _('Processing...'),\n ack: _('Acknowledged'),\n edit: _('Edit'),\n push: _('Trigger event'),\n ok: _('Ok'),\n with: _('With'),\n without: _('Without'),\n copyToClipboard: _('Copy to clipboard'),\n expertMode: _('Toggle expert mode'),\n refresh:\t_('Update'),\n sort: _('Sort alphabetically'),\n button: _('Settings'),\n noData: _('No data')\n },\n filter: {\n type: 'state'\n },\n columns: ['ID', 'name', 'type', 'role']\n };\n\n selectId('init', settings)\n .selectId('show');\n\n setupDraggable();\n };\n\n function setupDroppableTable($treetable) {\n if (!that.editMode) return;\n\n if (!$treetable) {\n $treetable = that.$gridEnum.find('.tree-table-main');\n }\n\n $treetable.find('tbody>tr.treetable-enum').droppable({\n accept: '.fancytree-type-draggable',\n over: function (e, ui) {\n $(this).addClass('tab-accept-item');\n if ($(this).hasClass('not-empty') && !$(this).hasClass('expanded')) {\n var id = $(this).data('tt-id');\n var timer;\n if ((timer = $(this).data('timer'))) {\n clearTimeout(timer);\n }\n $(this).data('timer', setTimeout(function () {\n that.$gridList.treeTable('expand', $(this).data('tt-id'));\n }, 1000));\n }\n },\n out: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n var timer;\n if ((timer = $(this).data('timer'))) {\n clearTimeout(timer);\n $(this).data('timer', null);\n }\n },\n tolerance: 'pointer',\n drop: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n var id = ui.draggable.data('id');\n var enumId = $(this).data('tt-id');\n\n addMember(id, enumId);\n }\n });\n }\n\n function setupDroppableTiles($collection) {\n if (!that.editMode) return;\n\n $collection = $collection || that.$gridEnum.find('.tree-table-body .collection');\n\n var $items = $collection.find('.collection-item');\n try {\n if ($items.droppable('instance')) {\n $items.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n\n $items.droppable({\n accept: '.fancytree-type-draggable',\n over: function (e, ui) {\n $(this).addClass('tab-accept-item');\n },\n out: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n },\n tolerance: 'pointer',\n drop: function (e, ui) {\n $(this).removeClass('tab-accept-item');\n var id = ui.draggable.data('id');\n var enumId = $(this).data('id');\n addMember(id, enumId);\n }\n });\n }\n\n function createOrEditEnum(id, parentId) {\n var idChanged = false;\n var $dialog = that.$gridEnum.find('#tab-enums-dialog-new');\n var oldId = '';\n\n var nameVal = '';\n var idVal = '';\n var originalIdVal = '';\n var iconVal = '';\n var colorVal = '';\n\n var isIdEditable = true;\n\n installFileUpload($dialog, 50000, function (err, text) {\n if (err) {\n showMessage(err, true);\n } else {\n if (!text.match(/^data:image\\//)) {\n showMessage(_('Unsupported image format'), true);\n return;\n }\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n iconVal = text;\n\n $dialog.find('.tab-enums-dialog-new-icon').show().html('');\n $dialog.find('.tab-enums-dialog-new-icon img').attr('src', text);\n $dialog.find('.tab-enums-dialog-new-icon-clear').show();\n }\n });\n\n if (id) {\n if (that.main.objects[id] && that.main.objects[id].common) {\n nameVal = translateName(that.main.objects[id].common.name);\n iconVal = that.main.objects[id].common.icon;\n colorVal = that.main.objects[id].common.color;\n }\n oldId = id;\n idVal = id;\n $dialog.find('#tab-enums-dialog-preserve-id').prop('checked', true);\n isIdEditable = false;\n } else {\n $dialog.find('#tab-enums-dialog-preserve-id').prop('checked', false);\n isIdEditable = true;\n }\n\n $dialog.find('.tab-enums-dialog-new-title').text(parentId ? _('Create new category') : (idVal ? _('Rename') : _('Create new enum')));\n\n if (idVal) {\n var parts = idVal.split('.');\n if (parts.length <= 2) {\n id = true;\n }\n idVal = parts.pop();\n parentId = parts.join('.');\n originalIdVal = idVal;\n }\n\n $dialog.find('#tab-enums-dialog-new-name')\n .val(nameVal)\n .off('change')\n .on('change', function () {\n var $id = $dialog.find('#tab-enums-dialog-new-id');\n var id = $id.val();\n var val = $(this).val();\n val = val.replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_').trim().toLowerCase();\n if (isIdEditable && (!id || !idChanged)) {\n $id.val(val);\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + (val || '#'));\n // detect materialize\n M.updateTextFields('#tab-enums-dialog-new');\n }\n if ($id.val() && !$id.val().match(/[.\\s]/)) {\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $id.removeClass('wrong');\n } else {\n $dialog.find('.tab-enums-dialog-create').addClass('disabled');\n $id.addClass('wrong');\n }\n }).off('keyup').on('keyup', function () {\n $(this).trigger('change');\n });\n\n $dialog.find('#tab-enums-dialog-new-id')\n .val(idVal)\n .off('change')\n .on('change', function () {\n if ($dialog.find('#tab-enums-dialog-preserve-id').prop('checked')) return;\n idChanged = true;\n var val = $(this).val();\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + ($(this).val() || '#'));\n M.updateTextFields('#tab-enums-dialog-new');\n\n if (val && !val.match(/[.\\s]/)) {\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $(this).removeClass('wrong');\n } else {\n $dialog.find('.tab-enums-dialog-create').addClass('disabled');\n $(this).addClass('wrong');\n }\n }).off('keyup').on('keyup', function () {\n $(this).trigger('change');\n });\n\n $dialog.find('#tab-enums-dialog-new-id').prop('disabled', !isIdEditable);\n\n $dialog.find('.tab-enums-dialog-create')\n .addClass('disabled')\n .off('click')\n .text(oldId ? _('Change') : _('Create'))\n .on('click', function () {\n if (oldId) {\n var name;\n if ($dialog.find('#tab-enums-dialog-preserve-id').prop('checked')) {\n if (typeof that.main.objects[oldId].common.name === 'object') {\n name = that.main.objects[oldId].common.name;\n } else {\n name = {'en': oldId.split('.').pop()};\n }\n name[systemLang] = $dialog.find('#tab-enums-dialog-new-name').val();\n } else {\n name = $dialog.find('#tab-enums-dialog-new-name').val();\n }\n enumRename(\n oldId,\n parentId + '.' + $dialog.find('#tab-enums-dialog-new-id').val(),\n {\n name: name,\n icon: iconVal,\n color: colorVal\n },\n function (err) {\n if (err) {\n showMessage(_('Error: %s', err), true);\n } else {\n showMessage(_('Updated'));\n }\n }\n );\n } else {\n enumAddChild(\n parentId,\n (parentId || 'enum') + '.' + $dialog.find('#tab-enums-dialog-new-id').val(),\n {\n name: $dialog.find('#tab-enums-dialog-new-name').val(),\n icon: iconVal,\n color: colorVal\n },\n function (err) {\n if (err) {\n showMessage(_('Error: %s', err), true, 5000);\n } else {\n showMessage(_('Updated'));\n }\n });\n }\n });\n\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + (idVal || '#'));\n\n if (iconVal) {\n $dialog.find('.tab-enums-dialog-new-icon').show().html(that.main.getIcon(oldId));\n $dialog.find('.tab-enums-dialog-new-icon-clear').show();\n } else {\n $dialog.find('.tab-enums-dialog-new-icon').hide();\n $dialog.find('.tab-enums-dialog-new-icon-clear').hide();\n }\n colorVal = colorVal || false;\n if (colorVal) {\n $dialog.find('.tab-enums-dialog-new-color').val(colorVal);\n } else {\n $dialog.find('.tab-enums-dialog-new-color').val();\n }\n\n M.updateTextFields('#tab-enums-dialog-new');\n that.main.showToast($dialog, _('Drop the icons here'));\n\n $dialog.find('.tab-enums-dialog-new-upload').off('click').on('click', function () {\n $dialog.find('.drop-file').trigger('click');\n });\n $dialog.find('.tab-enums-dialog-new-icon-clear').off('click').on('click', function () {\n if (iconVal) {\n iconVal = '';\n $dialog.find('.tab-enums-dialog-new-icon').hide();\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $dialog.find('.tab-enums-dialog-new-icon-clear').hide();\n }\n });\n $dialog.find('.tab-enums-dialog-new-color-clear').off('click').on('click', function () {\n if (colorVal) {\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $dialog.find('.tab-enums-dialog-new-color-clear').hide();\n $dialog.find('.tab-enums-dialog-new-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-enums-dialog-new-colorpicker')\n }).colorpicker('setValue', '');\n colorVal = '';\n }\n });\n var time = Date.now();\n try {\n $dialog.find('.tab-enums-dialog-new-colorpicker').colorpicker('destroy');\n } catch (e) {\n\n }\n $dialog.find('.tab-enums-dialog-new-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-enums-dialog-new-colorpicker')\n }).colorpicker('setValue', colorVal).on('showPicker.colorpicker', function (/* event */) {\n //$dialog.find('.tab-enums-dialog-new-colorpicker')[0].scrollIntoView(false);\n var $modal = $dialog.find('.modal-content');\n $modal[0].scrollTop = $modal[0].scrollHeight;\n }).on('changeColor.colorpicker', function (event){\n if (Date.now() - time > 100) {\n colorVal = event.color.toHex();\n $dialog.find('.tab-enums-dialog-create').removeClass('disabled');\n $dialog.find('.tab-enums-dialog-new-icon-clear').show();\n }\n });\n if (colorVal) {\n $dialog.find('.tab-enums-dialog-new-color-clear').show();\n } else {\n $dialog.find('.tab-enums-dialog-new-color-clear').hide();\n }\n\n $dialog.find('#tab-enums-dialog-preserve-id').off('change').on('change', function () {\n if ($(this).prop('checked')) {\n $dialog.find('#tab-enums-dialog-new-id').prop('disabled', true)\n .val(originalIdVal);\n idVal = originalIdVal;\n isIdEditable = false;\n } else {\n if (that.main.objects[id] && that.main.objects[id].common) {\n isIdEditable = !that.main.objects[id].common['object-non-deletable'] && !that.main.objects[id].common.dontDelete;\n }\n if (isIdEditable) {\n idVal = $dialog.find('#tab-enums-dialog-new-name').val();\n idVal = idVal.replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_').trim().toLowerCase();\n $dialog.find('#tab-enums-dialog-new-id').prop('disabled', false)\n .val(idVal);\n }\n }\n idChanged = false;\n $dialog.find('#tab-enums-dialog-new-preview').val((parentId || 'enum') + '.' + (idVal || '#'));\n });\n\n // workaround for materialize checkbox problem\n $dialog.find('input[type=\"checkbox\"]+span').off('click').on('click', function () {\n var $input = $(this).prev();\n if (!$input.prop('disabled')) {\n $input.prop('checked', !$input.prop('checked')).trigger('change');\n }\n });\n\n $dialog.modal().modal('open');\n }\n\n function switchEditMode(isEnabled) {\n that.editMode = isEnabled;\n var $editButton = that.$gridEnum.find('#tab-enums-list-edit');\n\n if (that.editMode) {\n $editButton.removeClass('blue').addClass('red');\n that.$gridEnum.addClass('tab-enums-edit');\n that._initObjectTree();\n showMessage(_('You can drag&drop the devices, channels and states to enums'));\n if (that.isTiles) {\n setupDroppableTiles();\n } else {\n setupDroppableTable();\n }\n } else {\n selectId('destroy');\n try {\n var _$items = that.$gridEnum.find('.collection-item');\n if (_$items.droppable('instance')) {\n _$items.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n try {\n var $trs = that.$gridEnum.find('tbody>tr.treetable-enum');\n if ($trs.droppable('instance')) {\n $trs.droppable('destroy');\n }\n } catch (e) {\n console.error(e);\n }\n\n $editButton.removeClass('red').addClass('blue');\n that.$gridEnum.removeClass('tab-enums-edit');\n }\n }\n\n this._postInit = function () {\n if (typeof this.$gridList !== 'undefined') {\n if (!this.main.objects['enum.rooms']) {\n this.main.objects['enum.rooms'] = {\n \"_id\": \"enum.rooms\",\n \"common\": {\n \"icon\": \"home\",\n \"name\": {\n \"en\": \"Rooms\",\n \"cn\": \"场景\"\n },\n \"desc\": {\n \"en\": \"List of the rooms\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\",\n \"acl\": {\n \"owner\": \"system.user.admin\",\n \"ownerGroup\": \"system.group.administrator\",\n \"permissions\": 1911\n }\n };\n that.main.socket.emit('setObject', 'enum.rooms', this.main.objects['enum.rooms']);\n this.list.unshift('enum.rooms');\n }\n if (!this.main.objects['enum.functions']) {\n this.main.objects['enum.functions'] = {\n \"_id\": \"enum.functions\",\n \"common\": {\n \"icon\": \"lightbulb_outline\",\n \"name\": {\n \"en\": \"Functions\",\n \"cn\": \"功能\"\n },\n \"desc\": {\n \"en\": \"List of the functions\"\n },\n \"members\": [],\n \"dontDelete\": true\n },\n \"type\": \"enum\",\n \"acl\": {\n \"owner\": \"system.user.admin\",\n \"ownerGroup\": \"system.group.administrator\",\n \"permissions\": 1911\n }\n };\n this.list.unshift('enum.functions');\n that.main.socket.emit('setObject', 'enum.functions', this.main.objects['enum.functions']);\n }\n\n if (this.isTiles) {\n drawEnumsTiles();\n } else {\n drawEnumsTable();\n }\n if (this.editMode) {\n this._initObjectTree();\n } else {\n selectId('destroy');\n }\n }\n };\n\n this.init = function (update) {\n if (this.inited && !update) {\n return;\n }\n if (!this.main || !this.main.objectsLoaded) {\n setTimeout(function () {\n that.init(update);\n }, 250);\n return;\n }\n\n this._postInit();\n\n if (!this.inited) {\n this.inited = true;\n this.main.subscribeObjects('enum.*');\n }\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n // subscribe objects and states\n this.main.unsubscribeObjects('enum.*');\n }\n switchEditMode(false);\n this.$gridList.treeTable('destroy');\n };\n\n this.objectChange = function (id, obj, action) {\n //Update enums\n if (id.match(/^enum\\./)) {\n if (obj) {\n if (this.list.indexOf(id) === -1) this.list.push(id);\n } else {\n var j = this.list.indexOf(id);\n if (j !== -1) this.list.splice(j, 1);\n }\n\n if (this.updateTimers) clearTimeout(this.updateTimers);\n\n this.updateTimers = setTimeout(function () {\n that.updateTimers = null;\n that._postInit();\n }, 200);\n }\n\n if (this.$grid) selectId('object', id, obj, action);\n };\n}\n","function Events(main) {\r\n 'use strict';\r\n\r\n var that = this;\r\n this.main = main;\r\n this.$tab = $('#tab-events'); // body\r\n var isRemote = location.hostname === 'yunkong2.net' || location.hostname === 'yunkong2.pro';\r\n\r\n var list = {\r\n count: 0,\r\n start: 0,\r\n limit: 500 //const\r\n };\r\n var timeout = null;\r\n\r\n var pause = {\r\n list: [],\r\n mode: false,\r\n counter: 0,\r\n overflow: false,\r\n $counterSpan: null\r\n };\r\n\r\n var $header;\r\n var hdr;\r\n var $table;\r\n var $outer;\r\n var $pause;\r\n\r\n var columnResizeInit = {\r\n done: false,\r\n timer: null\r\n };\r\n\r\n this.prepare = function () {\r\n $outer = this.$tab.find('#event-outer');\r\n $table = this.$tab.find('#event-table');\r\n $pause = this.$tab.find('#event-pause');\r\n\r\n // install header\r\n $header = this.$tab.find('#events-table-tr');\r\n hdr = new IobListHeader($header, {list: $outer, colWidthOffset: 1, prefix: 'event-filter'});\r\n hdr.doFilter = filterEvents;\r\n\r\n hdr.add('combobox', 'type');\r\n hdr.add('edit', 'id', 'ID');\r\n //hdr.add('edit', 'val', 'Value');\r\n hdr.add('edit', 'val', 'value');\r\n hdr.add('combobox', 'ack', 'ack', [\r\n {val: '', name: 'all'},\r\n {val: 'true', name: 'ack'},\r\n {val: 'false', name: 'not ack'}\r\n ]);\r\n hdr.add('combobox', 'from', 'from');\r\n hdr.add('text', 'ts');\r\n hdr.add('text', 'lc');\r\n\r\n Object.defineProperty(hdr, 'getValues', {\r\n value: function () {\r\n hdr.ID.selectedVal = hdr.ID.selectedVal.toLocaleLowerCase();\r\n if (hdr.ack.selectedVal === 'true') hdr.ack.selectedVal = true;\r\n if (hdr.ack.selectedVal === 'false') hdr.ack.selectedVal = false;\r\n },\r\n enumerateble: false\r\n });\r\n\r\n $pause.on('click', function () {\r\n that.pause();\r\n });\r\n\r\n // bind \"clear events\" button\r\n var $eventClear = this.$tab.find('#event-clear');\r\n $eventClear\r\n .off('click').on('click', function () {\r\n list.count = 0;\r\n list.start = 0;\r\n that.$tab.find('#event-table').html('');\r\n });\r\n };\r\n\r\n this.init = function () {\r\n if (isRemote) {\r\n that.$tab.find('#grid-events').html(_('You can\\'t see events via cloud') + '
            cloud_off').addClass('no-cloud-events');\r\n return;\r\n }\r\n if (!hdr) return;\r\n\r\n if (this.inited) {\r\n return;\r\n }\r\n \r\n installColResize();\r\n\r\n this.inited = true;\r\n this.main.subscribeObjects('*');\r\n this.main.subscribeStates('*');\r\n };\r\n\r\n this.destroy = function () {\r\n if (this.inited) {\r\n this.inited = false;\r\n this.main.unsubscribeObjects('*');\r\n this.main.unsubscribeStates('*');\r\n }\r\n };\r\n\r\n var widthSet = false;\r\n\r\n function installColResize() {\r\n if (!$.fn.colResizable) return;\r\n if ($outer.is(':visible')) {\r\n $outer.colResizable({\r\n liveDrag: true,\r\n\r\n partialRefresh: true,\r\n marginLeft: 5,\r\n postbackSafe:true,\r\n\r\n onResize: function (event) {\r\n return hdr.syncHeader();\r\n // // read width of data.$tree and set the same width for header\r\n // var thDest = $('#log-outer-header >thead>tr>th');\t//if table headers are specified in its semantically correct tag, are obtained\r\n // var thSrc = $outer.find('>tbody>tr:first>td');\r\n // for (var i = 1; i < thSrc.length; i++) {\r\n // $(thDest[i]).attr('width', $(thSrc[i]).width());\r\n // }\r\n }\r\n });\r\n hdr.syncHeader();\r\n } else {\r\n setTimeout(function () {\r\n installColResize();\r\n }, 200)\r\n }\r\n }\r\n\r\n function updateResizersHeight() {\r\n columnResizeInit.timer = null;\r\n $(window).trigger('resize.JColResizer');\r\n }\r\n\r\n // ----------------------------- Show events ------------------------------------------------\r\n this.add = function (id, stateOrObj, isMessage, isState) {\r\n if (isRemote) return;\r\n\r\n var type = isState ? 'stateChange' : (isMessage ? 'message' : 'objChange');\r\n var value;\r\n var ack;\r\n var from = '';\r\n var ts;\r\n var lc;\r\n if (hdr) {\r\n if (hdr.getValues) {\r\n hdr.getValues();\r\n }\r\n\r\n hdr.type.checkAddOption(type);\r\n }\r\n if (!columnResizeInit.done) {\r\n // if the height not 100%, the column resizer is too short. Wait till the table will be really full and reinit resizer.\r\n // update resizer once and remeber it if the table has full height\r\n if (!columnResizeInit.timer) {\r\n columnResizeInit.timer = setTimeout(updateResizersHeight, 1000);\r\n }\r\n\r\n if (list.count > 20) {\r\n columnResizeInit.done = true;\r\n }\r\n }\r\n\r\n if (!pause.mode) {\r\n if (list.count >= that.limit) {\r\n list.start++;\r\n var e = document.getElementById('event_' + list.start);\r\n if (e) e.outerHTML = '';\r\n } else {\r\n list.count++;\r\n }\r\n }\r\n\r\n // if Object\r\n if (!isMessage && !isState) {\r\n if (!stateOrObj) {\r\n value = 'deleted';\r\n ts = main.formatDate(new Date());\r\n } else {\r\n value = JSON.stringify(stateOrObj, '\\x0A', 2);\r\n if (value !== undefined && value.length > 30) {\r\n value = '' + value.substring(0, 30) + '...';\r\n }\r\n ts = main.formatDate(stateOrObj.ts);\r\n }\r\n } else\r\n // if state\r\n if (isState) {\r\n if (!stateOrObj) {\r\n value = 'deleted';\r\n ts = main.formatDate(new Date());\r\n } else {\r\n stateOrObj.from = stateOrObj.from || '';\r\n stateOrObj.from = stateOrObj.from.replace('system.adapter.', '');\r\n stateOrObj.from = stateOrObj.from.replace('system.', '');\r\n\r\n hdr && hdr.from.checkAddOption(stateOrObj.from, function (o) {\r\n return {val: o.replace(/\\./g, '-'), name: o};\r\n });\r\n\r\n from = stateOrObj.from;\r\n\r\n value = JSON.stringify(stateOrObj.val);\r\n if (value !== undefined && value.length > 30) {\r\n value = '
            ' + value.substring(0, 30) + '...
            ';\r\n }\r\n ack = stateOrObj.ack ? 'true' : 'false';\r\n ts = main.formatDate(stateOrObj.ts);\r\n lc = main.formatDate(stateOrObj.lc);\r\n }\r\n } else\r\n // if message\r\n if (isMessage) {\r\n // todo\r\n }\r\n\r\n var visible = true;\r\n if (hdr) {\r\n if (hdr.type.selectedVal && hdr.type.selectedVal !== type) {\r\n visible = false;\r\n } else if (hdr.ID.selectedVal && id.toLocaleLowerCase().indexOf(hdr.ID.selectedVal) === -1) {\r\n visible = false;\r\n } else if (hdr.value.selectedVal !== '' && value !== null && value !== undefined && value.indexOf(hdr.value.selectedVal) === -1) {\r\n visible = false;\r\n } else if (hdr.ack.selectedVal !== '' && hdr.ack.selectedVal !== ack) {\r\n visible = false;\r\n } else if (hdr.from.selectedVal && hdr.from.selectedVal !== from) {\r\n visible = false;\r\n }\r\n }\r\n\r\n\r\n var text = '';\r\n text += '' + type + '';\r\n text += '' + id + '';\r\n if (isNaN(value)) {\r\n text += '' + (value || '') + '';\r\n } else {\r\n text += '' + (value || '') + '';\r\n }\r\n text += '' + (ack || '') + '';\r\n text += '' + (from || '') + '';\r\n text += '' + (ts || '') + '';\r\n text += '' + (lc || '') + '';\r\n text += '';\r\n\r\n if (pause.mode) {\r\n pause.list.push(text);\r\n pause.counter++;\r\n\r\n if (pause.counter > list.limit) {\r\n if (!pause.overflow) {\r\n $pause.addClass('red lighten3')\r\n .attr('title', _('Message buffer overflow. Losing oldest'));\r\n pause.overflow = true;\r\n }\r\n pause.list.shift();\r\n }\r\n pause.$counterSpan.html(pause.counter);\r\n } else if ($table) {\r\n $table.prepend(text);\r\n if (!widthSet && (window.location.hash === '#tab-events' || window.location.hash === '#events')) {\r\n hdr && hdr.syncHeader();\r\n widthSet = true;\r\n }\r\n }\r\n };\r\n\r\n /*this.onSelected = function () {\r\n hdr && hdr.syncHeader();\r\n };*/\r\n\r\n function filterEvents() {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n if (hdr.getValues) {\r\n hdr.getValues();\r\n }\r\n\r\n $table && $table.find('.event-line').each(function (index) {\r\n var isShow = true;\r\n var $this = $(this);\r\n if (hdr.type.selectedVal && !$this.hasClass('event-type-' + hdr.type.selectedVal)) {\r\n isShow = false;\r\n } else\r\n if (hdr.from.selectedVal && !$this.hasClass('event-from-' + hdr.from.selectedVal)) {\r\n isShow = false;\r\n } else\r\n if (hdr.ack.selectedVal !== '' && !$this.hasClass('event-ack-' + hdr.ack.selectedVal)) {\r\n isShow = false;\r\n } else\r\n if (hdr.ID.selectedVal && $(this).find('td.event-column-id').text().toLocaleLowerCase().indexOf(hdr.ID.selectedVal) === -1) {\r\n isShow = false;\r\n } else\r\n if (hdr.value.selectedVal !== '' && $(this).find('td.event-column-value').text().indexOf(hdr.value.selectedVal) === -1) {\r\n isShow = false;\r\n }\r\n\r\n if (isShow) {\r\n $this.show();\r\n } else {\r\n $this.hide();\r\n }\r\n });\r\n }\r\n\r\n this.pause = function () {\r\n if (!pause.mode) {\r\n $pause.addClass('yellow btn-pause-button-active');\r\n\r\n pause.$counterSpan = $pause;\r\n pause.$counterSpan.html('0');\r\n pause.counter = 0;\r\n pause.mode = true;\r\n } else {\r\n pause.mode = false;\r\n for (var i = 0; i < pause.list.length; i++) {\r\n if (list.count >= 500) {\r\n list.start++;\r\n var e = document.getElementById('event_' + list.start);\r\n if (e) e.outerHTML = '';\r\n } else {\r\n list.count++;\r\n }\r\n $table.prepend(pause.list[i]);\r\n }\r\n pause.overflow = false;\r\n pause.list = [];\r\n pause.counter = 0;\r\n\r\n $pause\r\n .removeClass('yellow btn-pause-button-active')\r\n .html('pause');\r\n }\r\n };\r\n}\r\n\r\n\r\n","function fileHandler(event) {\n event.preventDefault();\n var file = event.dataTransfer ? event.dataTransfer.files[0] : event.target.files[0];\n\n var $dz = $(this).find('.drop-zone');\n var callback = $(this).data('drop-zone-cb');\n var limit = $(this).data('limit');\n if (file.size > (limit || 10000)) {\n callback && callback(_('File is too big!'));\n $dz.hide();\n return false;\n }\n $dz.show();\n var reader = new FileReader();\n reader.onload = function (evt) {\n $dz.hide();\n callback && callback(null, evt.target.result);\n };\n reader.readAsDataURL(file);\n}\n\n/**\n * Install file upload on some div\n * @param {object} $dropZone is jquery object of the div (DOM element) where the drop zone must be installed\n * @param {number} limit is maximal size of file in bytes\n * @param {function} callback is callback in form function (err, fileDataBase64) {}\n*/\nfunction installFileUpload($dropZone, limit, callback) {\n if (typeof window.FileReader !== 'undefined' && !$dropZone.data('installed')) {\n $dropZone.data('installed', true);\n $dropZone.prepend('
            ');\n var $dz = $dropZone.find('.drop-zone');\n $dropZone[0].ondragover = function() {\n $dz.off('click');\n $dz.show();\n return false;\n };\n\n $dz[0].ondragleave = function() {\n $dz.hide();\n return false;\n };\n\n $dz[0].ondrop = fileHandler.bind($dropZone[0]);\n }\n $dropZone.data('drop-zone-cb', callback);\n $dropZone.data('limit', limit);\n $dropZone.find('.drop-file').on('change', fileHandler.bind($dropZone[0]));\n}","function Hosts(main) {\n 'use strict';\n\n var that = this;\n this.main = main;\n this.list = [];\n this.$tab = $('#tab-hosts');\n this.$grid = this.$tab.find('#hosts');\n this.$table = this.$tab.find('#grid-hosts');\n this.inited = false;\n this.isTiles = true;\n this.words = {};\n\n this.prepare = function () {\n this.isTiles = (this.main.config.hostsIsTiles !== undefined && this.main.config.hostsIsTiles !== null) ? this.main.config.hostsIsTiles : true;\n\n // fix for IE\n if (this.main.browser === 'ie' && this.main.browserVersion <= 10) {\n this.isTiles = false;\n this.$tab.find('.btn-switch-tiles').hide();\n }\n\n this.$tab.find('.btn-reload')\n .attr('title', _('Update'))\n .on('click', function () {\n that.init(true);\n });\n\n this.$tab.find('.btn-switch-tiles').off('click').on('click', function () {\n that.isTiles = !that.isTiles;\n\n if (that.isTiles) {\n $(this).find('i').text('view_list');\n } else {\n $(this).find('i').text('view_module');\n }\n\n that.main.saveConfig('hostsIsTiles', that.isTiles);\n\n setTimeout(function () {\n that._postInit();\n }, 50);\n });\n\n if (this.isTiles) {\n this.$tab.find('.btn-switch-tiles').find('i').text('view_list');\n } else {\n this.$tab.find('.btn-switch-tiles').find('i').text('view_module');\n }\n\n this.$tab.find('.filter-clear').on('click', function () {\n that.$tab.find('.filter-input').val('').trigger('change');\n });\n\n var $hostsFilter = this.$tab.find('.filter-input');\n $hostsFilter.on('change', function () {\n var filter = $(this).val();\n if (filter) {\n $(this).addClass('input-not-empty');\n that.$tab.find('.filter-clear').show();\n } else {\n that.$tab.find('.filter-clear').hide();\n $(this).removeClass('input-not-empty');\n }\n\n that.main.saveConfig('hostsFilter', filter);\n applyFilter(filter);\n }).on('keyup', function () {\n if (that.filterTimeout) clearTimeout(that.filterTimeout);\n that.filterTimeout = setTimeout(function () {\n that.$tab.find('.filter-input').trigger('change');\n }, 300);\n });\n\n if (this.main.config.hostsFilter && this.main.config.hostsFilter[0] !== '{') {\n $hostsFilter.val(that.main.config.hostsFilter).addClass('input-not-empty');\n this.$tab.find('.filter-clear').show();\n } else {\n this.$tab.find('.filter-clear').hide();\n }\n\n // cache translations\n this.words['Title'] = _('Title');\n this.words['OS'] = _('OS');\n this.words['Available'] = _('Available');\n this.words['Installed'] = _('Installed');\n this.words['Events'] = _('Events');\n this.words['Title'] = _('Title');\n that.words['Type'] = _('Type');\n };\n\n // ----------------------------- Hosts show and Edit ------------------------------------------------\n this.initButtons = function (id) {\n var selector = id ? '[data-host-id=\"' + id + '\"]' : '';\n\n this.$tab.find('.host-update-submit' + selector).off('click').on('click', function () {\n that.main.cmdExec($(this).attr('data-host-name'), 'upgrade self', function (exitCode) {\n if (!exitCode) that.init(true);\n });\n });\n\n this.$tab.find('.host-restart-submit' + selector).off('click').on('click', function () {\n that.main.waitForRestart = true;\n that.main.cmdExec($(this).attr('data-host-name'), '_restart');\n });\n this.$tab.find('.host-delete' + selector).off('click').on('click', function () {\n that.main.cmdExec(that.main.currentHost, 'host remove ' + $(this).attr('data-host-name'));\n });\n\n this.$tab.find('.host-edit' + selector).off('click').on('click', function () {\n editHost($(this).attr('data-host-id'));\n });\n\n this.$tab.find('.host-update-hint-submit' + selector).off('click').on('click', function () {\n var infoTimeout = setTimeout(function () {\n showUpdateInfo();\n infoTimeout = null;\n }, 1000);\n\n that.main.socket.emit('sendToHost', $(this).attr('data-host-name'), 'getLocationOnDisk', null, function (data) {\n if (infoTimeout) clearTimeout(infoTimeout);\n infoTimeout = null;\n showUpdateInfo(data);\n });\n });\n\n };\n\n function showUpdateInfo(data) {\n var $dialog = $('#dialog-host-update');\n if (data) {\n var path = data.path;\n path = path.replace(/\\\\/g, '/');\n var parts = path.split('/');\n parts.pop(); // js-controller\n parts.pop(); // node_modules\n\n if (data.platform === 'linux' || data.platform === 'darwin' || data.platform === 'freebsd' || data.platform === 'lin') {\n // linux\n $dialog.find('#dialog-host-update-instructions').val('cd ' + parts.join('/') + '\\nsudo yunkong2 stop\\nsudo yunkong2 update\\nsudo yunkong2 upgrade self\\nsudo yunkong2 start')\n } else {\n // windows\n $dialog.find('#dialog-host-update-instructions').val('cd ' + parts.join('\\\\') + '\\nyunkong2 stop\\nyunkong2 update\\nyunkong2 upgrade self\\nyunkong2 start')\n }\n } else {\n $dialog.find('#dialog-host-update-instructions').val('cd /opt/yunkong2\\nsudo yunkong2 stop\\nsudo yunkong2 update\\nsudo yunkong2 upgrade self\\nsudo yunkong2 start')\n }\n\n if (!$dialog.data('inited')) {\n $dialog.data('inited', true);\n $dialog.modal();\n }\n $dialog.modal('open');\n }\n\n function applyFilter(filter) {\n filter = (filter || '').toLowerCase().trim();\n\n if (!filter) {\n that.$tab.find('.hosts-host').show();\n that.$tab.find('.hosts-host-filtered-out').hide();\n } else {\n var someVisible = false;\n that.$tab.find('.hosts-host').each(function () {\n var text = $(this).data('host-filter');\n if (text.toLowerCase().indexOf(filter) !== -1) {\n $(this).show();\n someVisible = true;\n } else {\n $(this).hide();\n }\n });\n if (!someVisible) {\n that.$tab.find('.hosts-host-filtered-out').show();\n } else {\n that.$tab.find('.hosts-host-filtered-out').hide();\n }\n }\n }\n\n function showOneHostRow(index) {\n var obj = that.main.objects[that.list[index].id];\n var alive = that.main.states[obj._id + '.alive'] && that.main.states[obj._id + '.alive'].val && that.main.states[obj._id + '.alive'].val !== 'null';\n obj.common = obj.common || {};\n obj.native = obj.native || {};\n\n var text = '';\n //LED\n text += '
            ';\n // icon\n text += '' + that.main.getHostIcon(obj) + '';\n // name\n text += '' + obj.common.hostname + '';\n // type\n text += '' + obj.common.type + '';\n var title = obj.common.titleLang || obj.common.title;\n if (typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n // description\n text += '' + title + '';\n // platform\n // text += '' + obj.common.platform + ''; // actually only one platform\n // OS\n text += '' + (obj.native.os ? obj.native.os.platform : _('unknown')) + '';\n // Available\n text += '' +\n '' +\n '' +\n '';\n\n // installed\n text += '' + obj.common.installedVersion + '';\n\n // event rates\n if (that.main.states[obj._id + '.inputCount']) {\n text += '⇥' + that.main.states[obj._id + '.inputCount'].val + ' / ↦' + that.main.states[obj._id + '.outputCount'].val + '';\n } else {\n text += ' / ';\n }\n\n // restart button\n text += '';\n\n text += '';\n\n return text;\n }\n\n function showOneHostTile(index) {\n var obj = that.main.objects[that.list[index].id];\n var alive = that.main.states[obj._id + '.alive'] && that.main.states[obj._id + '.alive'].val && that.main.states[obj._id + '.alive'].val !== 'null';\n obj.common = obj.common || {};\n obj.native = obj.native || {};\n\n var color;\n if (obj.common.color) {\n color = that.main.invertColor(obj.common.color);\n }\n\n var text = '
            '+\n '
            ' +\n '
            '+\n ' ' + that.main.getHostIcon(obj, ' ') +\n '
            ' +\n '
            '+\n '
            ' +\n ' ' + obj.common.hostname + '' +\n '
              '+\n '
            • ' + that.words['Type'] + ': ' + obj.common.type + '
            • ' +\n '
            • ' + that.words['Title'] + ': ' + obj.common.title + '
            • ' +\n '
            • ' + that.words['OS'] + ': ' + (obj.native.os ? obj.native.os.platform : _('unknown')) + '
            • ' +\n '
            • ' + that.words['Available'] + ':
            • ' +\n '
            • ' + that.words['Installed'] + ': ' + obj.common.installedVersion + '
            • ';\n\n if (that.main.states[obj._id + '.inputCount']) {\n text += '
            • ' + that.words['Events'] + ': ⇥' + that.main.states[obj._id + '.inputCount'].val + ' / ↦' + that.main.states[obj._id + '.outputCount'].val + '
            • ';\n } else {\n text += '
            • ' + that.words['Events'] + ': /
            • ';\n }\n\n text += '
            '+\n '
            '+\n '
            '+\n ' edit' +\n ' autorenew';\n if (obj.common.hostname !== that.main.currentHost) {\n text += ' delete';\n }\n text += ' refresh' +\n ' refresh' +\n '
            '+\n '
            '+\n '
            ';\n\n return text;\n }\n\n function editHost(id) {\n var $dialog = $('#tab-host-dialog-edit');\n\n var titleVal = '';\n var iconVal = '';\n var colorVal = '';\n\n installFileUpload($dialog, 50000, function (err, text) {\n if (err) {\n that.main.showToast($dialog, err);\n } else {\n if (!text.match(/^data:image\\//)) {\n that.main.showToast($dialog, _('Unsupported image format'));\n return;\n }\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n iconVal = text;\n\n $dialog.find('.tab-host-dialog-edit-icon').show().html('');\n $dialog.find('.tab-host-dialog-edit-icon img').attr('src', text);\n $dialog.find('.tab-host-dialog-edit-icon-clear').show();\n }\n });\n\n if (that.main.objects[id] && that.main.objects[id].common) {\n titleVal = that.main.objects[id].common.title;\n if (typeof titleVal === 'object') {\n titleVal = titleVal[systemLang] || titleVal.en;\n }\n iconVal = that.main.objects[id].common.icon;\n colorVal = that.main.objects[id].common.color;\n }\n\n $dialog.find('#tab-host-dialog-edit-title')\n .val(titleVal)\n .off('change')\n .on('change', function () {\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n }).off('keyup').on('keyup', function () {\n $(this).trigger('change');\n });\n\n $dialog.find('.tab-host-dialog-ok')\n .addClass('disabled')\n .off('click')\n .on('click', function () {\n var obj = JSON.parse(JSON.stringify(that.main.objects[id]));\n obj.common.title = $dialog.find('#tab-host-dialog-edit-title').val();\n obj.common.icon = iconVal;\n obj.common.color = colorVal;\n if (JSON.stringify(obj) !== JSON.stringify(that.main.objects[id])) {\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n that.main.showToast($dialog, _('Updated'));\n });\n } else {\n that.main.showToast($dialog, _('Nothing changed'));\n }\n });\n\n if (iconVal) {\n $dialog.find('.tab-host-dialog-edit-icon').show().html(that.main.getIcon(id));\n $dialog.find('.tab-host-dialog-edit-icon-clear').show();\n } else {\n $dialog.find('.tab-host-dialog-edit-icon').hide();\n $dialog.find('.tab-host-dialog-edit-icon-clear').hide();\n }\n\n colorVal = colorVal || false;\n\n if (colorVal) {\n $dialog.find('.tab-host-dialog-edit-color').val(colorVal);\n } else {\n $dialog.find('.tab-host-dialog-edit-color').val();\n }\n\n M.updateTextFields('#tab-host-dialog-edit');\n that.main.showToast($dialog, _('Drop the icons here'));\n\n $dialog.find('.tab-host-dialog-edit-upload').off('click').on('click', function () {\n $dialog.find('.drop-file').trigger('click');\n });\n\n $dialog.find('.tab-host-dialog-edit-icon-clear').off('click').on('click', function () {\n if (iconVal) {\n iconVal = '';\n $dialog.find('.tab-host-dialog-edit-icon').hide();\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n $dialog.find('.tab-host-dialog-edit-icon-clear').hide();\n }\n });\n $dialog.find('.tab-host-dialog-edit-color-clear').off('click').on('click', function () {\n if (colorVal) {\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n $dialog.find('.tab-host-dialog-edit-color-clear').hide();\n $dialog.find('.tab-host-dialog-edit-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-host-dialog-edit-colorpicker')\n }).colorpicker('setValue', '');\n colorVal = '';\n }\n });\n var time = Date.now();\n try {\n $dialog.find('.tab-host-dialog-edit-colorpicker').colorpicker('destroy');\n } catch (e) {\n\n }\n $dialog.find('.tab-host-dialog-edit-colorpicker').colorpicker({\n component: '.btn',\n color: colorVal,\n container: $dialog.find('.tab-host-dialog-edit-colorpicker')\n }).colorpicker('setValue', colorVal).on('showPicker.colorpicker', function (/* event */) {\n //$dialog.find('.tab-host-dialog-edit-colorpicker')[0].scrollIntoView(false);\n var $modal = $dialog.find('.modal-content');\n $modal[0].scrollTop = $modal[0].scrollHeight;\n }).on('changeColor.colorpicker', function (event){\n if (Date.now() - time > 100) {\n colorVal = event.color.toHex();\n $dialog.find('.tab-host-dialog-ok').removeClass('disabled');\n $dialog.find('.tab-host-dialog-edit-icon-clear').show();\n }\n });\n if (colorVal) {\n $dialog.find('.tab-host-dialog-edit-color-clear').show();\n } else {\n $dialog.find('.tab-host-dialog-edit-color-clear').hide();\n }\n\n $dialog.modal().modal('open');\n }\n\n function showHostsTile() {\n var text = '';\n for (var i = 0; i < that.list.length; i++) {\n text += showOneHostTile(i);\n }\n that.$table.html('');\n that.$tab.find('.hosts-table').hide();\n that.$grid.html(text).show();\n that.$grid.append('
            ' + _('Filtered out') + '
            ');\n }\n\n function showHostsTable() {\n var text = '';\n for (var i = 0; i < that.list.length; i++) {\n text += showOneHostRow(i);\n }\n that.$grid.html('').hide();\n that.$table.html(text);\n that.$tab.find('.hosts-table').show();\n that.$table.append('' + _('Filtered out') + '');\n }\n\n this.updateCounter = function (counter) {\n if (counter === undefined) {\n this.main.tabs.adapters.getAdaptersInfo(this.main.currentHost, false, false, function (repository, installedList) {\n var hostsToUpdate = 0;\n if (!installedList || !installedList.hosts) return;\n\n for (var id in installedList.hosts) {\n if (!installedList.hosts.hasOwnProperty(id)) continue;\n var obj = that.main.objects['system.host.' + id];\n if (!obj || !obj.common) continue;\n var installedVersion = obj.common.installedVersion;\n var availableVersion = obj.common ? (repository && repository[obj.common.type] ? repository[obj.common.type].version : '') : '';\n\n if (installedVersion && availableVersion && !that.main.upToDate(availableVersion, installedVersion)) {\n id = 'system.host.' + id.trim().replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_');\n if (that.main.states[id + '.alive'] && that.main.states[id + '.alive'].val && that.main.states[id + '.alive'].val !== 'null') {\n hostsToUpdate++;\n }\n }\n }\n\n that.updateCounter(hostsToUpdate);\n });\n } else if (counter) {\n var $updates = $('#updates-for-hosts');\n if ($updates.length) {\n $updates.text(counter);\n } else {\n $('' + counter + '').appendTo('.admin-sidemenu-items[data-tab=\"tab-hosts\"] a');\n }\n } else {\n $('#updates-for-hosts').remove();\n }\n };\n\n this._postInit = function () {\n if (typeof that.$grid !== 'undefined') {\n if (this.isTiles) {\n showHostsTile();\n } else {\n showHostsTable()\n }\n applyFilter(this.$tab.find('.filter-input').val());\n\n var timer = setTimeout(function () {\n console.warn('Timeout for repository');\n timer = null;\n that.initButtons();\n }, 2000);\n\n var host = that.main.currentHost;\n if (!host) {\n // find alive host\n for (var i = 0; i < that.list.length; i++) {\n if (that.main.states[that.list[i].id + '.alive'] && that.main.states[that.list[i].id + '.alive'].val) {\n host = that.list[i].id;\n break;\n }\n }\n }\n\n that.main.tabs.adapters.getAdaptersInfo(host, true, false, function (repository, installedList) {\n if (!installedList || !installedList.hosts) return;\n\n for (var id in installedList.hosts) {\n if (!installedList.hosts.hasOwnProperty(id)) continue;\n var obj = that.main.objects['system.host.' + id];\n var installed = installedList.hosts[id].version;\n if (installed !== installedList.hosts[id].runningVersion) installed += '(' + _('Running: ') + installedList.hosts[id].runningVersion + ')';\n if (!installed && obj.common && obj.common.installedVersion) installed = obj.common.installedVersion;\n\n id = 'system.host.' + id.trim().replace(FORBIDDEN_CHARS, '_').replace(/\\./g, '_');\n that.$tab.find('.hosts-version-installed[data-host-id=\"' + id + '\"]').html(installed);\n }\n\n that.$tab.find('.hosts-host').each(function () {\n var id = $(this).data('host-id');\n var obj = that.main.objects[id];\n var installedVersion = obj.common.installedVersion;\n var availableVersion = obj.common ? (repository && repository[obj.common.type] ? repository[obj.common.type].version : '') : '';\n if (installedVersion && availableVersion) {\n if (!that.main.upToDate(availableVersion, installedVersion)) {\n // show button\n if (that.main.states[id + '.alive'] && that.main.states[id + '.alive'].val && that.main.states[id + '.alive'].val !== 'null') {\n $(this).find('.host-update-submit').show();\n $(this).find('.host-update-hint-submit').show();\n $(this).find('.hosts-version-installed').addClass('updateReady');\n $(this).find('.hosts-version-available').addClass('hosts-version-available-updatable');\n }\n }\n }\n if (availableVersion) {\n $(this).find('.hosts-version-available').html(availableVersion);\n }\n });\n\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n that.initButtons();\n });\n }\n };\n\n this.init = function (update) {\n if (this.inited && !update) {\n return;\n }\n\n this.getHosts(function () {\n that._postInit();\n });\n if (!this.inited) {\n this.inited = true;\n this.main.subscribeObjects('system.host.*');\n this.main.subscribeStates('system.host.*');\n }\n };\n\n this.destroy = function () {\n if (this.inited) {\n this.inited = false;\n this.main.unsubscribeObjects('system.host.*');\n this.main.unsubscribeStates('system.host.*');\n }\n };\n\n this.addHost = function (obj) {\n var addr = null;\n // Find first non internal IP and use it as identifier\n if (obj.native.hardware && obj.native.hardware.networkInterfaces) {\n for (var eth in obj.native.hardware.networkInterfaces) {\n if (!obj.native.hardware.networkInterfaces.hasOwnProperty(eth)) continue;\n for (var num = 0; num < obj.native.hardware.networkInterfaces[eth].length; num++) {\n if (!obj.native.hardware.networkInterfaces[eth][num].internal) {\n addr = obj.native.hardware.networkInterfaces[eth][num].address;\n break;\n }\n }\n if (addr) break;\n }\n }\n if (addr) {\n this.list.push({name: obj.common.hostname, address: addr, id: obj._id});\n } else {\n this.list.push({name: obj.common.hostname, address: '127.0.0.1', id: obj._id});\n }\n };\n\n this.getHosts = function (callback) {\n this.main.socket.emit('getForeignObjects', 'system.host.*', 'state', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.objects[id] = res[id];\n }\n that.main.socket.emit('getForeignStates', 'system.host.*', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.states[id] = res[id];\n }\n that.main.socket.emit('getForeignObjects', 'system.host.*', 'host', function (err, res) {\n that.list = [];\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n var obj = res[id];\n\n that.main.objects[id] = obj;\n\n if (obj.type === 'host') {\n that.addHost(obj);\n }\n }\n main.initHostsList();\n if (callback) callback();\n });\n });\n });\n };\n\n this.objectChange = function (id, obj, action) {\n // Update hosts\n if (id.match(/^system\\.host\\.[-\\w]+$/)) {\n var found = false;\n var i;\n for (i = 0; i < this.list.length; i++) {\n if (this.list[i].id === id) {\n found = true;\n break;\n }\n }\n\n if (obj) {\n if (!found) this.list.push({id: id, address: obj.common.address ? obj.common.address[0] : '', name: obj.common.name});\n } else {\n if (found) this.list.splice(i, 1);\n }\n \n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that._postInit();\n }, 200);\n }\n };\n\n this.stateChange = function (id, state) {\n if (id.match(/^system\\.host\\..+\\.alive$/)) {\n id = id.substring(0, id.length - 6);\n if (state && state.val) {\n this.$tab.find('.hosts-led[data-host-id=\"' + id + '\"]').removeClass('led-red').addClass('led-green');\n } else {\n this.$tab.find('.hosts-led[data-host-id=\"' + id + '\"]').removeClass('led-green').addClass('led-red');\n this.$tab.find('.host-update-submit[data-host-id=\"' + id + '\"]').hide();\n this.$tab.find('.host-update-hint-submit[data-host-id=\"' + id + '\"]').hide();\n this.$tab.find('.host-restart-submit[data-host-id=\"' + id + '\"]').hide();\n this.$tab.find('.hosts-version-available[data-host-id=\"' + id + '\"]').removeClass('hosts-version-available-updatable');\n }\n } else if (id.match(/^system\\.host\\..+\\.outputCount$/)) {\n id = id.substring(0, id.length - 12);\n\n this.$tab.find('.host-out[data-host-id=\"' + id + '\"]').html('↦' + state.val + '');\n } else if (id.match(/^system\\.host\\..+\\.inputCount$/)) {\n id = id.substring(0, id.length - 11);\n\n this.$tab.find('.host-in[data-host-id=\"' + id + '\"]').html('↦' + state.val + '');\n }\n };\n}\n\n","function Instances(main) {\n 'use strict';\n\n var that = this;\n\n this.$tab = $('#tab-instances');\n this.$grid = $('#grid-instances');\n this.$gridHead = $('#grid-instances-head');\n\n this.inited = false;\n this.main = main;\n this.list = [];\n this.hostsText = null;\n this.filterHost = false;\n this.memState = 'memAvailable';\n\n if (!window.tdp) {\n window.tdp = function (x, nachkomma) {\n return isNaN(x) ? '' : x.toFixed(nachkomma || 0).replace('.', ',').replace(/\\B(?=(\\d{3})+(?!\\d))/g, \".\");\n }\n }\n\n function getLinkVar(_var, obj, attr, link, instance) {\n if (attr === 'protocol') attr = 'secure';\n\n if (_var === 'ip') {\n link = link.replace('%' + _var + '%', location.hostname);\n } else\n if (_var === 'instance') {\n link = link.replace('%' + _var + '%', instance);\n } else {\n if (obj) {\n if (attr.match(/^native_/)) attr = attr.substring(7);\n\n var val = obj.native[attr];\n if (_var === 'bind' && (!val || val === '0.0.0.0')) val = location.hostname;\n\n if (attr === 'secure') {\n link = link.replace('%' + _var + '%', val ? 'https' : 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', val);\n } else {\n link = link.replace('%' + _var + '%', val);\n }\n }\n } else {\n if (attr === 'secure') {\n link = link.replace('%' + _var + '%', 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', '');\n } else {\n link = link.replace('%' + _var + '%', '');\n }\n }\n }\n }\n return link;\n }\n\n function resolveLink(link, adapter, instance) {\n var vars = link.match(/%(\\w+)%/g);\n var _var;\n var v;\n var parts;\n if (vars) {\n // first replace simple patterns\n for (v = vars.length - 1; v >= 0; v--) {\n _var = vars[v];\n _var = _var.replace(/%/g, '');\n\n parts = _var.split('_');\n // like \"port\"\n if (_var.match(/^native_/)) {\n link = getLinkVar(_var, that.main.objects['system.adapter.' + adapter + '.' + instance], _var, link, instance);\n vars.splice(v, 1);\n } else\n if (parts.length === 1) {\n link = getLinkVar(_var, that.main.objects['system.adapter.' + adapter + '.' + instance], parts[0], link, instance);\n vars.splice(v, 1);\n } else\n // like \"web.0_port\"\n if (parts[0].match(/\\.[0-9]+$/)) {\n link = getLinkVar(_var, that.main.objects['system.adapter.' + parts[0]], parts[1], link, instance);\n vars.splice(v, 1);\n }\n }\n var links = {};\n var instances;\n var adptr = parts[0];\n // process web_port\n for (v = 0; v < vars.length; v++) {\n _var = vars[v];\n _var = _var.replace(/%/g, '');\n if (_var.match(/^native_/)) _var = _var.substring(7);\n\n parts = _var.split('_');\n if (!instances) {\n instances = [];\n for (var inst = 0; inst < 10; inst++) {\n if (that.main.objects['system.adapter.' + adptr + '.' + inst]) instances.push(inst);\n }\n }\n\n for (var i = 0; i < instances.length; i++) {\n links[adptr + '.' + i] = {\n instance: adptr + '.' + i,\n link: getLinkVar(_var, that.main.objects['system.adapter.' + adptr + '.' + i], parts[1], links[adptr + '.' + i] ? links[adptr + '.' + i].link : link, i)\n };\n }\n }\n\n var result;\n if (instances) {\n result = {};\n var count = 0;\n var firtsLink = '';\n for (var d in links) {\n if (links.hasOwnProperty(d)) {\n result[links[d].instance] = links[d].link;\n if (!firtsLink) firtsLink = links[d].link;\n count++;\n }\n }\n if (count < 2) {\n link = firtsLink;\n result = null;\n }\n }\n }\n return result || link;\n }\n\n this.replaceInLink = function (link, adapter, instance) {\n if (typeof link === 'object') {\n var links = JSON.parse(JSON.stringify(link));\n var first;\n for (var v in links) {\n if (links.hasOwnProperty(v)) {\n links[v] = resolveLink(links[v], adapter, instance);\n if (!first) first = links[v];\n }\n }\n links.__first = first;\n return links;\n } else {\n return resolveLink(link, adapter, instance);\n }\n };\n\n function updateLed(instanceId) {\n var tmp = instanceId.split('.');\n var adapter = tmp[2];\n var instance = tmp[3];\n\n var $led = that.$tab.find('.instance-led[data-instance-id=\"' + instanceId + '\"]');\n\n var common = that.main.objects[instanceId] ? that.main.objects[instanceId].common || {} : {};\n var state = (common.mode === 'daemon') ? 'green' : 'blue';\n var title = '';\n if (common.enabled && (!common.webExtension || !that.main.objects[instanceId].native.webInstance)) {\n title = '';\n title += '';\n\n if (that.main.states[adapter + '.' + instance + '.info.connection'] || that.main.objects[adapter + '.' + instance + '.info.connection']) {\n title += '';\n }\n title += '
            ' + _('Connected to host: ') + '';\n\n if (!that.main.states[instanceId + '.connected'] || !that.main.states[instanceId + '.connected'].val) {\n title += ((common.mode === 'daemon') ? '' + _('false') + '' : _('false'));\n state = (common.mode === 'daemon') ? 'red' : 'blue';\n } else {\n title += '' + _('true') + '';\n }\n title += '
            ' + _('Heartbeat: ') + '';\n\n if (!that.main.states[instanceId + '.alive'] || !that.main.states[instanceId + '.alive'].val) {\n title += ((common.mode === 'daemon') ? '' + _('false') + '' : _('false'));\n state = (common.mode === 'daemon') ? 'red' : 'blue';\n } else {\n title += '' + _('true') + '';\n }\n title += '
            ' + _('Connected to %s: ', adapter) + '';\n var val = that.main.states[adapter + '.' + instance + '.info.connection'] ? that.main.states[adapter + '.' + instance + '.info.connection'].val : false;\n if (!val) {\n state = state === 'red' ? 'red' : 'orange';\n title += '' + _('false') + '';\n } else {\n if (val === true) {\n title += '' + _('true') + '';\n } else {\n title += '' + val + '';\n }\n }\n title += '
            ';\n } else {\n state = (common.mode === 'daemon') ? 'gray' : 'blue';\n title = '';\n title += '';\n\n title += '';\n\n if (that.main.states[adapter + '.' + instance + '.info.connection'] || that.main.objects[adapter + '.' + instance + '.info.connection']) {\n title += '';\n }\n title += '
            ' + _('Connected to host: ') + '';\n\n if (!that.main.states[instanceId + '.connected'] || !that.main.states[instanceId + '.connected'].val) {\n title += _('false');\n } else {\n title += '' + _('true') + '';\n }\n title += '
            ' + _('Heartbeat: ') + '';\n if (!that.main.states[instanceId + '.alive'] || !that.main.states[instanceId + '.alive'].val) {\n title += _('false');\n } else {\n title += '' + _('true') + '';\n }\n title += '
            ' + _('Connected to %s: ', adapter) + '';\n var val = that.main.states[adapter + '.' + instance + '.info.connection'] ? that.main.states[adapter + '.' + instance + '.info.connection'].val : false;\n if (!val) {\n title += _('false');\n } else {\n if (val === true) {\n title += '' + _('true') + '';\n } else {\n title += '' + val + '';\n }\n }\n title += '
            ';\n }\n\n state = (state === 'blue') ? '' : state;\n\n $led.removeClass('led-red led-green led-orange led-blue').addClass('led-' + state).data('title', title);\n\n if (!$led.data('inited') && state !== 'gray') {\n $led.data('inited', true);\n\n $led.hover(function () {\n var text = '
            ' + $(this).data('title') + '
            ';\n var $big = $(text);\n\n $big.insertAfter($(this));\n $(this).data('big', $big[0]);\n var h = parseFloat($big.height());\n var top = Math.round($(this).position().top - ((h - parseFloat($(this).height())) / 2));\n if (h + top > (window.innerHeight || document.documentElement.clientHeight)) {\n top = (window.innerHeight || document.documentElement.clientHeight) - h;\n }\n if (top < 0) {\n top = 0;\n }\n $big.css({top: top}).on('click', function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n });\n }, function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n }).on('click', function () {\n $(this).trigger('hover');\n });\n }\n }\n\n /*function _createHead() {\n var text = '';\n // _('name'), _('instance'), _('title'), _('enabled'), _('host'), _('mode'), _('schedule'), '', _('platform'), _('loglevel'), _('memlimit'), _('alive'), _('connected')],\n text += '';\n //text += '';\n text += '';\n text += '' + _('instance') + '';\n text += '';\n text += '' + _('title') + '';\n\n if (that.main.tabs.hosts.list.length > 1) {\n text += '' + _('host') + '';\n }\n\n text += '' + _('schedule_group') + '';\n\n if (that.main.config.expertMode) {\n text += '' + _('restart') + '';\n text += '' + _('loglevel') + '';\n text += '' + _('memlimit') + '';\n text += '' + _('events') + '';\n }\n text += '' + _('RAM usage') + '';\n that.$gridHead.html(text);\n }*/\n\n function createHead() {\n var text = '';\n // _('name'), _('instance'), _('title'), _('enabled'), _('host'), _('mode'), _('schedule'), '', _('platform'), _('loglevel'), _('memlimit'), _('alive'), _('connected')],\n text += '' +\n '' + _('instance') + '' +\n '';\n text += '';\n text += '';\n // disabled, because no one use it\n if (false && that.main.config.expertMode) {\n text += '' + _('actions') + '';\n } else {\n text += '' + _('actions') + '';\n }\n text += '' + _('title') + '';\n\n if (that.main.tabs.hosts.list.length > 1) {\n text += '' + _('host') + '';\n }\n\n text += '' + _('schedule_group') + '';\n\n if (that.main.config.expertMode) {\n text += '' + _('restart') + '';\n text += '' + _('loglevel') + '';\n text += '' + _('memlimit') + '';\n text += '' + _('events') + '';\n }\n text += '' + _('RAM usage') + '';\n that.$gridHead.html(text);\n }\n\n function calculateTotalRam() {\n var host = that.main.states['system.host.' + that.main.currentHost + '.memRss'];\n var processes = 1;\n var mem = host ? host.val : 0;\n for (var i = 0; i < that.list.length; i++) {\n var obj = that.main.objects[that.list[i]];\n if (!obj || !obj.common) continue;\n if (obj.common.host !== that.main.currentHost) continue;\n if (obj.common.enabled && obj.common.mode === 'daemon') {\n var m = that.main.states[obj._id + '.memRss'];\n mem += m ? m.val : 0;\n processes++;\n }\n }\n mem = Math.round(mem);\n var $totalRam = that.$tab.find('#totalRam');\n if (mem.toString() !== $totalRam.text()) {\n $totalRam.html('' + mem + '');\n }\n var text = _('%s processes', processes);\n var $running_processes = that.$tab.find('#running_processes');\n if (text !== $running_processes.text()) {\n $running_processes.html('' + text + '')\n }\n }\n\n function calculateFreeMem() {\n if (that.main.states['system.host.' + that.main.currentHost + '.memAvailable']) {\n that.memState = 'memAvailable';\n } else if (that.main.states['system.host.' + that.main.currentHost + '.freemem']) {\n that.memState = 'freemem';\n }\n\n var host = that.main.states['system.host.' + that.main.currentHost + '.' + that.memState];\n if (host) {\n that.totalmem = that.totalmem || (that.main.objects['system.host.' + that.main.currentHost].native.hardware.totalmem / (1024 * 1024));\n var percent = Math.round((host.val / that.totalmem) * 100);\n var $freeMem = that.$tab.find('#freeMem');\n var strVal = tdp(host.val);\n if (strVal !== $freeMem.text()) {\n $freeMem.html('' + strVal + '');\n that.$tab.find('#freeMemPercent').html('' + percent + '%');\n }\n } else {\n that.$tab.find('.free-mem-label').hide();\n }\n }\n\n function calculateDiskMem() {\n var diskSize = that.main.states['system.host.' + that.main.currentHost + '.diskSize'];\n var diskFree = that.main.states['system.host.' + that.main.currentHost + '.diskFree'];\n var diskWarning = that.main.states['system.host.' + that.main.currentHost + '.diskWarning'];\n\n if (diskFree && diskFree.val && diskSize && diskSize.val) {\n if (diskWarning) {\n diskWarning = parseFloat(diskWarning.val);\n } else {\n diskWarning = 5;\n }\n\n var $diskFree = that.$tab.find('#diskFree');\n var size = (Math.round((diskFree.val / diskSize.val) * 1000) / 10);\n $diskFree.html('' + size + '');\n $diskFree.parent().attr('title', _('Size: %s, Free: %s', that.main.formatBytes(diskSize.val * 1024 * 1024), that.main.formatBytes(diskFree.val * 1024 * 1024)));\n } else {\n that.$tab.find('.tab-instances-info-disk').hide();\n }\n }\n\n function calculateRam(instanceId) {\n var mem;\n var common = that.main.objects[instanceId] ? that.main.objects[instanceId].common || {} : {};\n if (common.enabled && common.mode === 'daemon' && that.main.states[instanceId + '.memRss']) {\n mem = that.main.states[instanceId + '.memRss'].val;\n mem = parseFloat(mem) || 0;\n\n if (common.memoryLimitMB && common.memoryLimitMB <= mem) {\n mem = '' + mem.toFixed(1) + ' MB';\n } else {\n mem = mem.toFixed(1) + ' MB'\n }\n } else {\n mem = '';\n }\n return mem;\n }\n\n function showOneAdapter(rootElem, instanceId, form, justContent) {\n var text;\n var common = that.main.objects[instanceId] ? that.main.objects[instanceId].common || {} : {};\n var tmp = instanceId.split('.');\n var adapter = tmp[2];\n var instance = tmp[3];\n\n if (form === 'tile') {\n text = justContent ? '' : '
            ';\n text += justContent ? '' : '
            ';\n } else {\n // table\n text = justContent ? '' : '';\n\n var link = common.localLinks || common.localLink || '';\n var url = link ? that.replaceInLink(link, adapter, instance) : '';\n if (link) {\n if (typeof url === 'object') {\n link = '';\n } else {\n link = '';\n }\n }\n\n // State -\n // red - adapter is not connected or not alive,\n // orange - adapter is connected and alive, but device is not connected,\n // green - adapter is connected and alive, device is connected or no device,\n text += '
            ';\n\n // icon\n text += '' + (common.icon ? link + '' : '') + (link ? '
            ': '') + '';\n\n // name and instance\n text += '' + adapter + '.' + instance + '';\n\n var isRun = common.onlyWWW || common.enabled;\n // buttons\n text += '' +\n '' +\n '' +\n '';\n // disable, because no one use it\n if (false && that.main.config.expertMode) {\n text += '';\n }\n text += '' +\n (url ? '' : '') +\n '';\n\n var title = common.titleLang || common.title;\n if (typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n\n // title\n text += '' + (title || '') + '';\n\n // host - hide it if only one host\n if (that.main.tabs.hosts.list.length > 1) {\n if (!that.hostsText) {\n that.hostsText = '';\n for (var h = 0; h < that.main.tabs.hosts.list.length; h++) {\n var host = that.main.tabs.hosts.list[h] || '';\n that.hostsText += (that.hostsText ? ';' : '') + host.name;\n }\n }\n text += '' + (common.host || '') + '';\n }\n\n // schedule\n text += '' + (common.mode === 'schedule' ? (common.schedule || '') : '') + '';\n\n // scheduled restart (only experts)\n if (that.main.config.expertMode) {\n text += '' + (common.restartSchedule || '') + '';\n // debug level (only experts)\n text += '' + (common.loglevel || '') + '';\n // Max RAM (only experts)\n text += '' + (common.memoryLimitMB || '') + '';\n // Max RAM (only experts)\n if (isRun && that.main.states[instanceId + '.inputCount'] && that.main.states[instanceId + '.outputCount']) {\n text += '⇥' + that.main.states[instanceId + '.inputCount'].val + ' / ↦' + that.main.states[instanceId + '.outputCount'].val + '';\n } else {\n text += ' / ';\n }\n }\n\n text += '' + calculateRam(instanceId) + '';\n\n text += justContent ? '' : '';\n }\n if (!justContent) {\n rootElem.append(text);\n } else {\n that.$tab.find('.instance-adapter[data-instance-id=\"' + instanceId + '\"]').html(text);\n }\n // init buttons\n that.initButtons(instanceId, url);\n updateLed(instanceId);\n // init links\n that.$tab.find('.instance-editable[data-instance-id=\"' + instanceId + '\"]')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit');\n\n // init schedule editor\n that.$tab.find('.instance-schedule[data-instance-id=\"' + instanceId + '\"]').each(function () {\n if (!$(this).find('button').length) {\n $(this).append('');\n $(this).find('button').on('click', function () {\n var attr = $(this).data('name');\n var _instanceId = $(this).data('instance-id');\n showCronDialog(that.main.objects[_instanceId].common[attr] || '', function (newValue) {\n if (newValue !== null) {\n var obj = {common: {}};\n obj.common[attr] = newValue;\n that.main.socket.emit('extendObject', _instanceId, obj, function (err) {\n if (err) that.main.showError(err);\n });\n }\n })\n });\n }\n });\n\n that.$tab.find('.instance-name[data-instance-id=\"' + instanceId + '\"]').on('click', function () {\n var $btn = that.$tab.find('.instance-settings[data-instance-id=\"' + $(this).data('instance-id') + '\"]');\n if (!$btn.hasClass('small-button-empty')) {\n $btn.trigger('click');\n }\n }).css('cursor', 'pointer');\n }\n\n function applyFilter(filter) {\n if (filter === undefined) {\n filter = that.$tab.find('.instances-filter').val();\n }\n var invisible = [];\n if (filter) {\n var reg = new RegExp(filter);\n\n for (var i = 0; i < that.list.length; i++) {\n var obj = that.main.objects[that.list[i]];\n if (!obj || !obj.common) {\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]').hide();\n continue;\n }\n var isShow = 'hide';\n var title = obj.common.titleLang || obj.common.title;\n if (typeof title === 'object') {\n title = title[systemLang] || title.en;\n }\n\n if (obj.common.name && reg.test(obj.common.name)) {\n isShow = 'show';\n } else\n if (title && reg.test(title)) {\n isShow = 'show';\n } else\n if (filter === 'true') {\n isShow = that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]').find('instance-led').hasClass('led-green') ? 'show' : 'hide';\n } else\n if (filter === 'false') {\n isShow = that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]').find('instance-led').hasClass('led-green') ? 'hide' : 'show';\n }\n\n if (isShow === 'show' && that.filterHost && obj.common.host !== that.main.currentHost) isShow = 'hide';\n\n if (isShow === 'hide') invisible.push(that.list[i]);\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[i] + '\"]')[isShow]();\n }\n } else {\n if (that.filterHost) {\n for (var j = 0; j < that.list.length; j++) {\n var _obj = that.main.objects[that.list[j]];\n if (!_obj || !_obj.common) {\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[j] + '\"]').hide();\n continue;\n }\n var _isShow = 'hide';\n if (_obj.common.host === that.main.currentHost) _isShow = 'show';\n that.$grid.find('.instance-adapter[data-instance-id=\"' + that.list[j] + '\"]')[_isShow]();\n }\n } else {\n that.$grid.find('.instance-adapter').show();\n }\n }\n var anyVisible = false;\n that.$grid.find('.instance-adapter').each(function () {\n if ($(this).is(':visible')) {\n anyVisible = true;\n return false;\n }\n });\n\n if (anyVisible) {\n that.$grid.find('.filtered-out').hide();\n } else {\n that.$grid.find('.filtered-out').show();\n }\n }\n\n function onQuickEditField(e) {\n var $this = $(this);\n var id = $this.data('instance-id');\n var attr = $this.data('name');\n var options = $this.data('options');\n var oldVal = $this.data('value');\n var innerHTML = this.innerHTML;\n var textAlign = $this.css('text-align');\n $this.css('text-align', 'left');\n\n $this.off('click').removeClass('select-id-quick-edit').css('position', 'relative');\n\n var css = 'cursor: pointer; position: absolute;width: 16px; height: 16px; top: 2px; border-radius: 6px; z-index: 3; background-color: lightgray';\n var type = 'text';\n var text;\n\n if (options) {\n var opt = options.split(';');\n text = '';\n }\n text = text || '';\n\n var timeout = null;\n\n $this.html(text +\n '
            ' +\n '
            ');\n\n var $input = (options) ? $this.find('select') : $this.find('input');\n\n $this.find('.select-id-quick-edit-cancel').off('click').on('click', function (e) {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n e.preventDefault();\n e.stopPropagation();\n $this.html(innerHTML)\n .off('click')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit')\n .css('text-align', textAlign);\n });\n\n $this.find('.select-id-quick-edit-ok').off('click').on('click', function () {\n $this.trigger('blur');\n });\n\n $input.val(oldVal);\n\n $input.blur(function () {\n if (timeout) clearTimeout(timeout);\n\n timeout = setTimeout(function () {\n timeout = null;\n var val = $(this).val();\n\n if (JSON.stringify(val) !== JSON.stringify(oldVal)) {\n that.main.socket.emit('getObject', id, function (err, obj) {\n if (obj) {\n obj.common = obj.common || {};\n obj.common[attr] = val;\n if (attr === 'title' && obj.common.titleLang) {\n delete obj.common.titleLang;\n }\n that.main.socket.emit('setObject', obj._id, obj, function (err) {\n if (err) that.main.showError(err);\n });\n } else {\n console.log('Object ' + id + ' does not exist: ' + err);\n }\n });\n oldVal = '' + oldVal + '';\n } else {\n oldVal = innerHTML;\n }\n $this.html(oldVal)\n .off('click')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit')\n .css('text-align', textAlign);\n }.bind(this), 100);\n }).on('keyup', function (e) {\n if (e.which === 13) $(this).trigger('blur');\n if (e.which === 27) {\n if (oldVal === undefined) oldVal = '';\n $this.html(oldVal)\n .off('click')\n .on('click', onQuickEditField)\n .addClass('select-id-quick-edit')\n .css('text-align', textAlign);\n }\n });\n\n if (typeof e === 'object') {\n e.preventDefault();\n e.stopPropagation();\n }\n\n setTimeout(function () {\n $input.focus();\n }, 100);\n }\n\n function showCronDialog(value, cb) {\n value = (value || '').replace(/\"/g, '').replace(/'/g, '');\n try {\n setupCron(value, cb);\n } catch (e) {\n alert(_('Cannot parse value as cron'));\n }\n }\n\n this.prepare = function () {\n /*this.$dialogCron.dialog({\n autoOpen: false,\n modal: true,\n width: 700,\n height: 550,\n resizable: false,\n title: _('Cron expression'),\n buttons: [\n {\n id: 'dialog_cron_insert',\n text: _('Insert'),\n click: function () {\n var val = $('#div-cron').cron('value');\n that.$dialogCron.dialog('close');\n that.editor.insert('\"' + val + '\"');\n that.editor.focus();\n }\n },\n {\n id: 'dialog_cron_clear',\n text: _('Clear'),\n click: function () {\n $('#div-cron').cron('value', '');\n }\n },\n {\n id: 'dialog_cron_callback',\n text: _('Set CRON'),\n click: function () {\n }\n },\n {\n text: _('Cancel'),\n click: function () {\n that.$dialogCron.dialog('close');\n }\n }\n ]\n });\n\n $('#div-cron').cron({value: ''});\n*/\n var $filter = that.$tab.find('.instances-filter');\n var $filterClear = that.$tab.find('.instances-filter-clear');\n\n $filter.on('change', function () {\n var val = $(this).val();\n if (val) {\n $(this).addClass('input-not-empty');\n $filterClear.show();\n } else {\n $(this).removeClass('input-not-empty');\n $filterClear.hide();\n }\n that.main.saveConfig('instancesFilter', val);\n applyFilter(val);\n }).on('keyup', function () {\n if (that.filterTimeout) clearTimeout(that.filterTimeout);\n that.filterTimeout = setTimeout(function () {\n $filter.trigger('change');\n }, 300);\n });\n if (that.main.config.instancesFilter && that.main.config.instancesFilter[0] !== '{') {\n $filter.addClass('input-not-empty').val(that.main.config.instancesFilter);\n $filterClear.show();\n } else {\n $filterClear.hide();\n }\n\n //$('#load_grid-instances').show();\n that.$tab.find('.btn-instances-expert-mode').on('click', function () {\n that.main.config.expertMode = !that.main.config.expertMode;\n that.main.saveConfig('expertMode', that.main.config.expertMode);\n that.updateExpertMode();\n that.main.tabs.adapters.updateExpertMode();\n });\n\n if (that.main.config.expertMode) {\n that.$tab.find('.btn-instances-expert-mode').addClass('red lighten-3');\n }\n\n that.$tab.find('.btn-instances-reload').on('click', function () {\n that.init(true, true);\n });\n\n /*that.$grid.find('#btn-instances-form').button({\n icons: {primary: 'ui-icon-refresh'},\n text: false\n }).css({width: '1.5em', height: '1.5em'}).attr('title', _('reload')).on('click', function () {\n that.main.config.instanceForm = that.main.config.instanceForm === 'tile' ? 'list' : 'tile';\n that.main.saveCell('expertMode', that.main.config.expertMode);\n that.init(true);\n });*/\n\n $filterClear.on('click', function () {\n $filter.val('').trigger('change');\n });\n\n this.$tab.find('.btn-instances-host').off('click').on('click', function () {\n that.filterHost = !that.filterHost;\n if (that.filterHost) {\n that.$tab.find('.btn-instances-host').addClass('red lighten-3');\n } else {\n that.$tab.find('.btn-instances-host').removeClass('red lighten-3');\n }\n that.main.saveConfig('instancesFilterHost', that.filterHost);\n\n setTimeout(function () {\n applyFilter();\n }, 50);\n });\n\n this.filterHost = this.main.config.instancesFilterHost || false;\n\n if (this.filterHost) {\n this.$tab.find('.btn-instances-host').addClass('red lighten-3');\n } else {\n this.$tab.find('.btn-instances-host').removeClass('red lighten-3');\n }\n };\n\n this.updateExpertMode = function () {\n that.init(true);\n if (that.main.config.expertMode) {\n that.$tab.find('.btn-instances-expert-mode').addClass('red lighten-3');\n } else {\n that.$tab.find('.btn-instances-expert-mode').removeClass('red lighten-3');\n }\n };\n\n this.replaceLink = function (_var, adapter, instance, elem) {\n _var = _var.replace(/%/g, '');\n if (_var.match(/^native_/)) _var = _var.substring(7);\n // like web.0_port\n var parts;\n if (_var.indexOf('_') === -1) {\n parts = [\n adapter + '.' + instance,\n _var\n ]\n } else {\n parts = _var.split('_');\n // add .0 if not defined\n if (!parts[0].match(/\\.[0-9]+$/)) parts[0] += '.0';\n }\n\n if (parts[1] === 'protocol') parts[1] = 'secure';\n\n if (_var === 'instance') {\n setTimeout(function () {\n var link;\n if (elem) {\n link = that.$tab.find('#' + elem).data('src');\n } else {\n link = that.$tab.find('#a_' + adapter + '_' + instance).attr('href');\n }\n\n link = link.replace('%instance%', instance);\n if (elem) {\n that.$tab.find('#' + elem).data('src', link);\n } else {\n that.$tab.find('#a_' + adapter + '_' + instance).attr('href', link);\n }\n }, 0);\n return;\n }\n\n this.main.socket.emit('getObject', 'system.adapter.' + parts[0], function (err, obj) {\n if (obj) {\n setTimeout(function () {\n var link;\n if (elem) {\n link = that.$tab.find('#' + elem).data('src');\n } else {\n link = that.$tab.find('#a_' + adapter + '_' + instance).attr('href');\n }\n if (link) {\n if (parts[1] === 'secure') {\n link = link.replace('%' + _var + '%', obj.native[parts[1]] ? 'https' : 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', obj.native[parts[1]]);\n } else {\n link = link.replace('%' + _var + '%', obj.native[parts[1]]);\n }\n }\n if (elem) {\n that.$tab.find('#' + elem).data('src', link);\n } else {\n that.$tab.find('#a_' + adapter + '_' + instance).attr('href', link);\n }\n }\n }, 0);\n }\n });\n };\n\n /*this.replaceLinks = function (vars, adapter, instance, elem) {\n if (typeof vars !== 'object') vars = [vars];\n for (var t = 0; t < vars.length; t++) {\n this.replaceLink(vars[t], adapter, instance, elem);\n }\n };*/\n\n this._replaceLink = function (link, _var, adapter, instance, callback) {\n // remove %%\n _var = _var.replace(/%/g, '');\n\n if (_var.match(/^native_/)) _var = _var.substring(7);\n // like web.0_port\n var parts;\n if (_var.indexOf('_') === -1) {\n parts = [adapter + '.' + instance, _var];\n } else {\n parts = _var.split('_');\n // add .0 if not defined\n if (!parts[0].match(/\\.[0-9]+$/)) parts[0] += '.0';\n }\n\n if (parts[1] === 'protocol') parts[1] = 'secure';\n\n this.main.socket.emit('getObject', 'system.adapter.' + parts[0], function (err, obj) {\n if (obj && link) {\n if (parts[1] === 'secure') {\n link = link.replace('%' + _var + '%', obj.native[parts[1]] ? 'https' : 'http');\n } else {\n if (link.indexOf('%' + _var + '%') === -1) {\n link = link.replace('%native_' + _var + '%', obj.native[parts[1]]);\n } else {\n link = link.replace('%' + _var + '%', obj.native[parts[1]]);\n }\n }\n } else {\n console.log('Cannot get link ' + parts[1]);\n link = link.replace('%' + _var + '%', '');\n }\n setTimeout(function () {\n callback(link, adapter, instance);\n }, 0);\n });\n };\n\n this._replaceLinks = function (link, adapter, instance, arg, callback) {\n if (!link) {\n return callback(link, adapter, instance, arg);\n }\n var vars = link.match(/%(\\w+)%/g);\n if (!vars) {\n return callback(link, adapter, instance, arg);\n }\n if (vars[0] === '%ip%') {\n link = link.replace('%ip%', location.hostname);\n this._replaceLinks(link, adapter, instance, arg, callback);\n return;\n }\n if (vars[0] === '%instance%') {\n link = link.replace('%instance%', instance);\n this._replaceLinks(link, adapter, instance, arg, callback);\n return;\n }\n this._replaceLink(link, vars[0], adapter, instance, function (link, adapter, instance) {\n this._replaceLinks(link, adapter, instance, arg, callback);\n }.bind(this));\n };\n\n this._postInit = function (update, showTip) {\n if (this.main.currentHost && typeof this.$grid !== 'undefined' && (!this.$grid.data('inited') || update)) {\n this.$grid.data('inited', true);\n this.list.sort();\n var onlyWWW = [];\n // move all adapters with not onlyWWW and noConfig to the bottom\n for (var l = this.list.length - 1; l >= 0; l--) {\n if (this.main.objects[this.list[l]] &&\n this.main.objects[this.list[l]].common &&\n !this.main.objects[this.list[l]].common.localLink &&\n !this.main.objects[this.list[l]].common.localLinks &&\n this.main.objects[this.list[l]].common.noConfig\n ) {\n onlyWWW.push(this.list[l]);\n this.list.splice(l, 1);\n }\n }\n this.list.sort();\n onlyWWW.sort();\n for (l = 0; l < onlyWWW.length; l++) {\n this.list.push(onlyWWW[l]);\n }\n\n createHead();\n this.$grid.html('');\n var ts = Date.now();\n for (var i = 0; i < this.list.length; i++) {\n var obj = this.main.objects[this.list[i]];\n if (!obj) continue;\n showOneAdapter(this.$grid, this.list[i], this.main.config.instanceForm);\n }\n console.log(Date.now() - ts);\n\n this.$grid.append('' + _('Filtered out') + '');\n\n that.$tab.find('#currentHost').html(this.main.currentHost);\n\n if (that.main.tabs.hosts.list.length > 1) {\n this.$tab.find('.btn-instances-host').show();\n } else {\n this.$tab.find('.btn-instances-host').hide();\n this.filterHost = false;\n }\n\n applyFilter();\n\n calculateTotalRam();\n calculateFreeMem();\n calculateDiskMem();\n that.restoreScroll();\n if (showTip) {\n that.main.showToast(that.$tab.find('.main-toolbar-table'), _('Updated'));\n }\n }\n };\n\n this.getInstances = function (callback) {\n this.main.socket.emit('getForeignObjects', 'system.adapter.*', 'state', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.objects[id] = res[id];\n }\n that.main.socket.emit('getForeignStates', '*.info.connection', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.states[id] = res[id];\n }\n\n that.main.socket.emit('getForeignStates', 'system.adapter.*', function (err, res) {\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n that.main.states[id] = res[id];\n }\n\n that.main.socket.emit('getForeignObjects', 'system.adapter.*', 'instance', function (err, res) {\n that.main.instances.splice(0, that.main.instances.length); // because of pointer in admin.main\n for (var id in res) {\n if (!res.hasOwnProperty(id)) continue;\n var obj = res[id];\n that.main.objects[id] = obj;\n\n if (obj.type === 'instance') {\n that.main.instances.push(id);\n }\n }\n if (callback) callback();\n });\n\n });\n });\n });\n };\n\n this.init = function (update, showMessage) {\n if (this.inited && !update) {\n return;\n }\n if (!this.main.objectsLoaded) {\n setTimeout(function () {\n that.init(update, showMessage);\n }, 250);\n return;\n }\n var count = 0;\n\n count++;\n this.getInstances(function () {\n if (!--count) that._postInit(update, showMessage);\n });\n count++;\n this.main.tabs.hosts.getHosts(function () {\n if (!--count) that._postInit(update, showMessage);\n });\n\n if (!this.inited) {\n this.inited = true;\n // subscribe objects and states\n this.main.subscribeObjects('system.adapter.*');\n this.main.subscribeStates('system.adapter.*');\n this.main.subscribeObjects('system.host.*');\n this.main.subscribeStates('system.host.*');\n this.main.subscribeStates('*.info.connection');\n }\n };\n\n this.saveScroll = function () {\n this.scrollTop = this.$tab.find('.grid-main-div').scrollTop();\n };\n this.restoreScroll = function () {\n if (this.scrollTop) {\n this.$tab.find('.grid-main-div').scrollTop(this.scrollTop);\n }\n };\n this.destroy = function () {\n if (this.inited) {\n this.saveScroll();\n this.$grid.data('inited', false);\n this.inited = false;\n // subscribe objects and states\n this.main.unsubscribeObjects('system.adapter.*');\n this.main.unsubscribeStates('system.host.*');\n this.main.unsubscribeObjects('system.host.*');\n this.main.unsubscribeStates('system.adapter.*');\n this.main.unsubscribeStates('*.info.connection');\n }\n };\n\n this.stateChange = function (id, state) {\n this.main.states[id] = state;\n if (this.$grid) {\n var parts = id.split('.');\n var last = parts.pop();\n id = parts.join('.');\n\n if (state) {\n if (last === 'diskFree' || last === 'diskWarning') {\n // update disk size\n calculateDiskMem();\n } else if (last === that.memState) {\n // update total ram\n calculateFreeMem();\n } else if (last === 'memRss') {\n // update total ram\n calculateTotalRam();\n // update instance ram\n var $mem = that.$tab.find('.memUsage[data-instance-id=\"' + id + '\"]');\n var mem = calculateRam(id);\n if ($mem.length && $mem.text() !== mem) {\n $mem.html('' + mem + '');\n }\n } else if (last === 'outputCount') {\n // update total ram\n that.$tab.find('.instance-out[data-instance-id=\"' + id + '\"]').html('↦' + state.val + '');\n } else if (last === 'inputCount') {\n that.$tab.find('.instance-in[data-instance-id=\"' + id + '\"]').html('⇥' + state.val + '');\n }\n\n if (this.list.indexOf(id) !== -1) {\n if (last === 'alive' || last === 'connected') {\n updateLed(id);\n }\n return;\n }\n id = 'system.adapter.' + parts[0] + '.' + parts[1];\n if (this.list.indexOf(id) !== -1 && last === 'connection') {\n updateLed(id);\n }\n }\n }\n };\n\n this.objectChange = function (id, obj, action) {\n // Update Instance Table\n if (id.match(/^system\\.adapter\\.[-\\w]+\\.[0-9]+$/)) {\n if (obj) {\n if (this.list.indexOf(id) === -1) {\n // add new instance\n this.list.push(id);\n\n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that.init(true);\n }, 200);\n\n // open automatically config dialog\n if (!obj.common.noConfig) {\n setTimeout(function () {\n if (window.location.hash.indexOf('/config/') === -1) {\n // open configuration dialog\n that.main.navigate({\n tab: 'instances',\n dialog: 'config',\n params: id\n });\n }\n }, 2000);\n }\n } else {\n if (id.indexOf('.web.') !== -1) {\n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that.init(true);\n }, 200);\n } else {\n // update just one line or\n this.$grid.find('.instance-adapter[data-instance-id=\"' + id + '\"]').html(showOneAdapter(this.$grid, id, this.main.config.instanceForm, true));\n }\n }\n } else {\n var i = this.list.indexOf(id);\n if (i !== -1) {\n this.list.splice(i, 1);\n this.$grid.find('.instance-adapter[data-instance-id=\"' + id + '\"]').remove();\n }\n }\n } else\n // update list if some host changed\n if (id.match(/^system\\.host\\.[-\\w]+$/)) {\n if (this.updateTimer) clearTimeout(this.updateTimer);\n\n this.updateTimer = setTimeout(function () {\n that.updateTimer = null;\n that.init(true);\n }, 200);\n }\n };\n\n this.initButtons = function (id, url) {\n id = id ? '[data-instance-id=\"' + id + '\"]' : '';\n\n var $e = that.$grid.find('.instance-edit' + id).off('click').on('click', function () {\n that.onEdit($(this).attr('data-instance-id'));\n });\n\n //var buttonSize = {width: '2em', height: '2em'}\n\n if (!$e.find('.ui-button-icon-primary').length) {\n $e/*.button({\n icons: {primary: 'ui-icon-pencil'},\n text: false\n }).css({width: '2em', height: '2em'})*/.attr('title', _('edit'));\n }\n\n $e = that.$grid.find('.instance-settings' + id).off('click')\n .on('click', function () {\n that.main.navigate({\n tab: 'instances',\n dialog: 'config',\n params: $(this).data('instance-id')\n });\n });\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-note'}, text: false}).css({width: '2em', height: '2em'}).attr('title', _('config'));\n }*/\n $e.each(function () {\n var _id = $(this).attr('data-instance-id');\n if (main.objects[_id] && main.objects[_id].common && main.objects[_id].common.noConfig) {\n //$(this).button('disable');\n $(this).addClass('disabled');\n }\n });\n\n $e = that.$grid.find('.instance-reload' + id).off('click')\n .on('click', function () {\n that.main.socket.emit('extendObject', $(this).attr('data-instance-id'), {}, function (err) {\n if (err) that.main.showError(err);\n });\n });\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-refresh'}, text: false}).attr('title', _('reload'));\n }*/\n\n $e = that.$grid.find('.instance-del' + id).off('click')\n .on('click', function () {\n var id = $(this).attr('data-instance-id');\n if (that.main.objects[id] && that.main.objects[id].common && that.main.objects[id].common.host) {\n var name = id.replace(/^system\\.adapter\\./, '');\n that.main.confirmMessage(_('Are you sure you want to delete the instance %s?', name), null, 'help', function (result) {\n if (result) {\n that.main.cmdExec(that.main.objects[id].common.host, 'del ' + id.replace('system.adapter.', ''), function (exitCode) {\n if (!exitCode) that.main.tabs.adapters.init(true);\n });\n }\n });\n }\n });\n\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-trash'}, text: false}).attr('title', _('delete'));\n } else {\n //$e.button('enable');\n $e.removeClass('disabled');\n }*/\n $e = that.$grid.find('.instance-issue' + id).off('click')\n .on('click', function () {\n that.main.navigate({\n tab: 'instances',\n dialog: 'issue',\n params: $(this).data('instance-id')\n });\n });\n /*if (!$e.find('.ui-button-icon-primary').length) {\n //$e.button({icons: {primary: 'ui-icon-pin-s'}, text: false}).css({width: '2em', height: '2em'}).attr('title', _('bug'));\n //Material-Hack\n $e.button().attr('title', _('bug')).empty().append('bug_report');\n }*/\n\n that.$grid.find('.instance-image' + id).each(function () {\n if (!$(this).data('installed')) {\n $(this).data('installed', true);\n $(this).hover(function () {\n var text = '
            ';\n var $big = $(text);\n $big.insertAfter($(this));\n $(this).data('big', $big[0]);\n var h = parseFloat($big.height());\n var top = Math.round($(this).position().top - ((h - parseFloat($(this).height())) / 2));\n if (h + top > (window.innerHeight || document.documentElement.clientHeight)) {\n top = (window.innerHeight || document.documentElement.clientHeight) - h;\n }\n if (top < 0) {\n top = 0;\n }\n $big.css({top: top});\n }, function () {\n var big = $(this).data('big');\n $(big).remove();\n $(this).data('big', undefined);\n });\n }\n });\n $e = that.$grid.find('.instance-stop-run' + id).off('click')\n .on('click', function () {\n var id = $(this).attr('data-instance-id');\n //$(this).button('disable');\n $(this).addClass('disabled');\n that.main.socket.emit('extendObject', id, {common: {enabled: !that.main.objects[id].common.enabled}}, function (err) {\n if (err) that.main.showError(err);\n });\n });\n\n if (!$e.find('.ui-button-icon-primary').length) {\n $e.each(function () {\n var id = $(this).attr('data-instance-id');\n var enabled = that.main.objects[id].common.enabled;\n\n if (enabled) {\n $e\n .addClass('instance-running')\n .attr('title', _('Activated. Click to stop.'))\n .find('i')\n .html('pause');\n } else {\n $e\n .removeClass('instance-running')\n .attr('title', _('Deactivated. Click to start.'))\n .find('i')\n .html('play_arrow');\n }\n\n /*$e.button({icons: {primary: enabled ? 'ui-icon-pause': 'ui-icon-play'}, text: false})\n //.css({'background-color': enabled ? 'lightgreen' : '#FF9999'})\n //.css({'background-color': enabled ? 'rgba(0, 255, 0, 0.15)' : 'rgba(255, 0, 0, 0.15)'})\n .css({'background-color': enabled ? 'rgba(0, 255, 0, 0.3)' : 'rgba(255, 0, 0, 0.3)'})\n .attr('title', enabled ? _('Activated. Click to stop.') : _('Deactivated. Click to start.'));*/\n });\n }\n\n $e = that.$grid.find('.instance-web' + id).off('click')\n .on('click', function () {\n var _link = $(this).data('link');\n if (typeof _link === 'object') {\n var menu = '';\n for (var m in _link) {\n if (!_link.hasOwnProperty(m)) continue;\n if (m === '__first') continue;\n var port = _link[m].match(/^https?:\\/\\/[-.\\w]+:(\\d+)\\/?/);\n var https = _link[m].match(/^https:\\/\\//);\n\n menu += '
          • ' + m + (port ? ' :' + port[1] : '') + (https ? ' - SSL' : '') + '
          • ';\n }\n menu += '
          • ' + _('Close') + '
          • ';\n\n var $instancesMenu = $('#instances-menu');\n if ($instancesMenu.data('inited')) $instancesMenu.menu('destroy');\n\n var pos = $(this).position();\n $instancesMenu.html(menu);\n if (!$instancesMenu.data('inited')) {\n $instancesMenu.data('inited', true);\n $instancesMenu.mouseleave(function () {\n $(this).hide();\n });\n }\n\n $instancesMenu.menu().css({\n left: pos.left,\n top: pos.top\n }).show();\n\n $instancesMenu.find('.instances-menu-link').off('click').on('click', function () {\n if ($(this).data('link')) window.open($(this).data('link'), $(this).data('instance-id'));\n $('#instances-menu').hide();\n });\n\n } else {\n window.open($(this).data('link'), $(this).data('instance-id'));\n }\n });\n if (typeof url === 'object') $e.data('link', url);\n\n /*if (!$e.find('.ui-button-icon-primary').length) {\n $e.button({icons: {primary: 'ui-icon-image'}, text: false}).attr('title', _('open web page'));\n } else {\n $e.removeClass('disabled');\n //$e.button('enable');\n }*/\n };\n\n this.resize = function (width, height) {\n //this.$grid.setGridHeight(height - 150).setGridWidth(width);\n };\n}\n","function Intro(main) {\n 'use strict';\n\n var that = this;\n\n this.$tab = $('#tab-intro');\n this.$tiles = this.$tab.find('.tab-intro-cards');\n this.main = main;\n this.inited = false;\n this.$template = $('#intro-template');\n\n function readInstances(callback) {\n that.main.socket.emit('getObjectView', 'system', 'instance', {startkey: 'system.adapter.', endkey: 'system.adapter.\\u9999'}, function (err, doc) {\n if (err) {\n if (callback) callback (err, []);\n } else {\n if (doc.rows.length === 0) {\n if (callback) callback (err, []);\n } else {\n that.main.instances = [];\n for (var i = 0; i < doc.rows.length; i++) {\n that.main.instances.push(doc.rows[i].id);\n that.main.objects[doc.rows[i].id] = doc.rows[i].value;\n }\n if (callback) callback(err, that.main.instances);\n }\n }\n });\n }\n\n /**\n * Format number in seconds to time text\n * @param {!number} seconds\n * @returns {String}\n */\n function formatSeconds(seconds) {\n var days = Math.floor(seconds / (3600 * 24));\n seconds %= 3600 * 24;\n var hours = Math.floor(seconds / 3600);\n if (hours < 10) {\n hours = '0' + hours;\n }\n seconds %= 3600;\n var minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n var text = '';\n if (days) {\n text += days + ' ' + _('daysShortText') + ' ';\n }\n text += hours + ':' + minutes + ':' + seconds;\n\n return text;\n }\n\n /**\n * Format bytes to MB or GB\n * @param {!number} bytes\n * @returns {String}\n */\n function formatRam(bytes) {\n var GB = Math.floor(bytes / (1024 * 1024 * 1024) * 10) / 10;\n bytes %= (1024 * 1024 * 1024);\n var MB = Math.floor(bytes / (1024 * 1024) * 10) / 10;\n var text = '';\n if (GB > 1) {\n text += GB + ' GB ';\n } else {\n text += MB + ' MB ';\n }\n\n return text;\n }\n\n function formatSpeed(mhz) {\n return mhz + ' MHz';\n }\n\n /**\n * FormatObject for host informations\n * @type type\n */\n var formatInfo = {\n 'Uptime': formatSeconds,\n 'System uptime': formatSeconds,\n 'RAM': formatRam,\n 'Speed': formatSpeed,\n 'Disk size': that.main.formatBytes,\n 'Disk free': that.main.formatBytes\n };\n\n function copyToClipboard(e) {\n var $input = $('