From 60b2b76e95ef337c61b7b24034da2bd0b8cbf87c Mon Sep 17 00:00:00 2001 From: zhongjin Date: Fri, 14 Sep 2018 23:34:36 +0800 Subject: [PATCH] new --- admin/words.js | 20 +++---- www/js/adapter-settings.js | 118 +++++++++---------------------------- www/js/app.js | 2 +- www/js/app.js.map | 2 +- www/js/translate.js | 2 +- 5 files changed, 40 insertions(+), 104 deletions(-) diff --git a/admin/words.js b/admin/words.js index 4c26d96..395efff 100644 --- a/admin/words.js +++ b/admin/words.js @@ -5,25 +5,25 @@ systemDictionary = { "Admin adapter settings": { "cn": "The settings for the admin adapter", "en": "The settings for the admin adapter"}, "Authentication was deactivated": { "cn": "Authentication was deactivated", "en": "Authentication was deactivated"}, - "Authentication:": { "cn": "Authentication", "en": "Authentication"}, - "Auto update:": { "cn": "Check for updates", "en": "Check for updates"}, - "Background": { "cn": "Background", "en": "Background"}, + "Authentication:": { "cn": "认证", "en": "Authentication"}, + "Auto update:": { "cn": "自动更新", "en": "Check for updates"}, + "Background": { "cn": "背景", "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"}, + "Background image": { "cn": "背景图片", "en": "Background image"}, "Cache:": { "cn": "Cache", "en": "Cache"}, "Chained certificate:": { "cn": "Chained certificate", "en": "Chained certificate"}, "Disable authentication": { "cn": "Disable authentication", "en": "Disable authentication"}, "Enabled:": { "cn": "Enabled", "en": "Enabled"}, "Events threshold value:": { "cn": "Events threshold value", "en": "Events threshold value"}, - "Hide logo": { "cn": "Hide logo", "en": "Hide logo"}, + "Hide logo": { "cn": "隐藏图标", "en": "Hide logo"}, "IP:": { "cn": "IP", "en": "IP"}, "Ignore warning": { "cn": "Ignore warning", "en": "Ignore warning"}, "Let's Encrypt settings": { "cn": "Let's Encrypt settings", "en": "Let's Encrypt settings"}, "Listen on all IPs": { "cn": "Listen on all IPs", "en": "Listen on all IPs"}, - "Login timeout(sec):": { "cn": "Login timeout(sec)", "en": "Login timeout(sec)"}, + "Login timeout(sec):": { "cn": "登录超时(秒)", "en": "Login timeout(sec)"}, "Own motto": { "cn": "Own motto", "en": "Own motto"}, "Port to check the domain:": { "cn": "Port to check the domain", "en": "Port to check the domain"}, - "Port:": { "cn": "Port", "en": "Port"}, + "Port:": { "cn": "端口", "en": "Port"}, "Private certificate:": { "cn": "Private certificate", "en": "Private certificate"}, "Public certificate:": { "cn": "Public certificate", "en": "Public certificate"}, "Run as:": { "cn": "Run as", "en": "Run as"}, @@ -39,9 +39,9 @@ systemDictionary = { "every 3 days": { "cn": "every 3 days", "en": "every 3 days"}, "every day": { "cn": "every day", "en": "every day"}, "every week": { "cn": "every week", "en": "every week"}, - "manually": { "cn": "manually", "en": "manually"}, - "monthly": { "cn": "monthly", "en": "monthly"}, - "place here": { "cn": "place the files here", "en": "place the files here"}, + "manually": { "cn": "手动", "en": "manually"}, + "monthly": { "cn": "手动", "en": "monthly"}, + "place here": { "cn": "拖放文件到这里", "en": "place the files here"}, "tooltip_auth": { "cn": "Require a login and a password to access the admin page. This can be managed on the users tab.", "en": "Require a login and a password to access the admin page. This can be managed on the users tab."}, "tooltip_autoUpdate": { "cn": "Check periodically for updates of adapter", "en": "Check periodically for updates of adapter"}, "tooltip_bind": { "cn": "IP address where the admin will listen on", "en": "IP address where the admin will listen on"}, diff --git a/www/js/adapter-settings.js b/www/js/adapter-settings.js index c825483..a75c557 100644 --- a/www/js/adapter-settings.js +++ b/www/js/adapter-settings.js @@ -27,123 +27,59 @@ function preInit () { // Extend dictionary with standard words for adapter if (typeof systemDictionary === 'undefined') systemDictionary = {}; - systemDictionary.save = {"en": "Save", "fr": "Sauvegarder", "nl": "Opslaan", "es": "Salvar", "pt": "Salve", "it": "Salvare", "de": "Speichern", "pl": "Zapisać", "ru": "Сохранить"}; - systemDictionary.saveclose = {"en": "Save and close", "fr": "Sauver et fermer", "nl": "Opslaan en afsluiten","es": "Guardar y cerrar", "pt": "Salvar e fechar", "it": "Salva e chiudi", "de": "Speichern und schließen", "pl": "Zapisz i zamknij", "ru": "Сохранить и выйти"}; - systemDictionary.none = {"en": "none", "fr": "aucun", "nl": "geen", "es": "ninguna", "pt": "Nenhum", "it": "nessuna", "de": "keins", "pl": "Żaden", "ru": ""}; - systemDictionary.nonerooms = {"en": "", "fr": "", "nl": "", "es": "", "pt": "", "it": "", "de": "", "pl": "", "ru": ""}; - systemDictionary.nonefunctions = {"en": "", "fr": "", "nl": "", "es": "", "pt": "", "it": "", "de": "", "pl": "", "ru": ""}; - systemDictionary.all = {"en": "all", "fr": "tout", "nl": "alle", "es": "todas", "pt": "todos", "it": "tutti", "de": "alle", "pl": "wszystko", "ru": "все"}; - systemDictionary['Device list'] = {"en": "Device list", "fr": "Liste des périphériques", "nl": "Lijst met apparaten", "es": "Lista de dispositivos", "pt": "Lista de dispositivos", "it": "Elenco dispositivi", "de": "Geräteliste", "pl": "Lista urządzeń", "ru": "Список устройств"}; - systemDictionary['new device'] = {"en": "new device", "fr": "nouvel appareil", "nl": "nieuw apparaat", "es": "Nuevo dispositivo", "pt": "Novo dispositivo", "it": "nuovo dispositivo", "de": "Neues Gerät", "pl": "nowe urządzenie", "ru": "Новое устройство"}; - systemDictionary.edit = {"en": "edit", "fr": "modifier", "nl": "Bewerk", "es": "editar", "pt": "editar", "it": "modificare", "de": "Ändern", "pl": "edytować", "ru": "Изменить"}; - systemDictionary.delete = {"en": "delete", "fr": "effacer", "nl": "Delete", "es": "borrar", "pt": "excluir", "it": "Elimina", "de": "Löschen", "pl": "kasować", "ru": "Удалить"}; - systemDictionary.pair = {"en": "pair", "fr": "paire", "nl": "paar", "es": "par", "pt": "par", "it": "paio", "de": "Verbinden", "pl": "para", "ru": "Связать"}; - systemDictionary.unpair = {"en": "unpair", "fr": "unpair", "nl": "Unpair", "es": "desvincular", "pt": "unpair", "it": "Disaccoppia", "de": "Trennen", "pl": "unpair", "ru": "Разорвать связь"}; - systemDictionary.ok = {"en": "Ok", "fr": "D'accord", "nl": "OK", "es": "De acuerdo", "pt": "Está bem", "it": "Ok", "de": "Ok", "pl": "Ok", "ru": "Ok"}; - systemDictionary.cancel = {"en": "Cancel", "fr": "Annuler", "nl": "Annuleer", "es": "Cancelar", "pt": "Cancelar", "it": "Annulla", "de": "Abbrechen", "pl": "Anuluj", "ru": "Отмена"}; - systemDictionary.Message = {"en": "Message", "fr": "Message", "nl": "Bericht", "es": "Mensaje", "pt": "Mensagem", "it": "Messaggio", "de": "Mitteilung", "pl": "Wiadomość", "ru": "Сообщение"}; - systemDictionary.close = {"en": "Close", "fr": "Fermer", "nl": "Dichtbij", "es": "Cerca", "pt": "Fechar", "it": "Vicino", "de": "Schließen", "pl": "Blisko", "ru": "Закрыть"}; - systemDictionary.htooltip = {"en": "Click for help", "fr": "Cliquez pour obtenir de l'aide", "nl": "Klik voor hulp", "es": "Haz clic para obtener ayuda", "pt": "Clique para ajuda", "it": "Fai clic per chiedere aiuto", "de": "Anklicken", "pl": "Kliknij, aby uzyskać pomoc", "ru": "Перейти по ссылке"}; + systemDictionary.save = {"en": "Save", "cn": "保存", "nl": "Opslaan", "es": "Salvar", "pt": "Salve", "it": "Salvare", "de": "Speichern", "pl": "Zapisać", "ru": "Сохранить"}; + systemDictionary.saveclose = {"en": "Save and close", "cn": "保存并退出", "nl": "Opslaan en afsluiten","es": "Guardar y cerrar", "pt": "Salvar e fechar", "it": "Salva e chiudi", "de": "Speichern und schließen", "pl": "Zapisz i zamknij", "ru": "Сохранить и выйти"}; + systemDictionary.none = {"en": "none", "cn": "none", "nl": "geen", "es": "ninguna", "pt": "Nenhum", "it": "nessuna", "de": "keins", "pl": "Żaden", "ru": ""}; + systemDictionary.nonerooms = {"en": "", "cn": "", "nl": "", "es": "", "pt": "", "it": "", "de": "", "pl": "", "ru": ""}; + systemDictionary.nonefunctions = {"en": "", "cn": "", "nl": "", "es": "", "pt": "", "it": "", "de": "", "pl": "", "ru": ""}; + systemDictionary.all = {"en": "all", "cn": "全部", "nl": "alle", "es": "todas", "pt": "todos", "it": "tutti", "de": "alle", "pl": "wszystko", "ru": "все"}; + systemDictionary['Device list'] = {"en": "Device list", "cn": "设备列表", "nl": "Lijst met apparaten", "es": "Lista de dispositivos", "pt": "Lista de dispositivos", "it": "Elenco dispositivi", "de": "Geräteliste", "pl": "Lista urządzeń", "ru": "Список устройств"}; + systemDictionary['new device'] = {"en": "new device", "cn": "新设备", "nl": "nieuw apparaat", "es": "Nuevo dispositivo", "pt": "Novo dispositivo", "it": "nuovo dispositivo", "de": "Neues Gerät", "pl": "nowe urządzenie", "ru": "Новое устройство"}; + systemDictionary.edit = {"en": "edit", "cn": "编辑", "nl": "Bewerk", "es": "editar", "pt": "editar", "it": "modificare", "de": "Ändern", "pl": "edytować", "ru": "Изменить"}; + systemDictionary.delete = {"en": "delete", "cn": "删除", "nl": "Delete", "es": "borrar", "pt": "excluir", "it": "Elimina", "de": "Löschen", "pl": "kasować", "ru": "Удалить"}; + systemDictionary.pair = {"en": "pair", "cn": "paire", "nl": "paar", "es": "par", "pt": "par", "it": "paio", "de": "Verbinden", "pl": "para", "ru": "Связать"}; + systemDictionary.unpair = {"en": "unpair", "cn": "unpair", "nl": "Unpair", "es": "desvincular", "pt": "unpair", "it": "Disaccoppia", "de": "Trennen", "pl": "unpair", "ru": "Разорвать связь"}; + systemDictionary.ok = {"en": "Ok", "cn": "确认", "nl": "OK", "es": "De acuerdo", "pt": "Está bem", "it": "Ok", "de": "Ok", "pl": "Ok", "ru": "Ok"}; + systemDictionary.cancel = {"en": "Cancel", "cn": "取消", "nl": "Annuleer", "es": "Cancelar", "pt": "Cancelar", "it": "Annulla", "de": "Abbrechen", "pl": "Anuluj", "ru": "Отмена"}; + systemDictionary.Message = {"en": "Message", "cn": "信息", "nl": "Bericht", "es": "Mensaje", "pt": "Mensagem", "it": "Messaggio", "de": "Mitteilung", "pl": "Wiadomość", "ru": "Сообщение"}; + systemDictionary.close = {"en": "Close", "cn": "关闭", "nl": "Dichtbij", "es": "Cerca", "pt": "Fechar", "it": "Vicino", "de": "Schließen", "pl": "Blisko", "ru": "Закрыть"}; + systemDictionary.htooltip = {"en": "Click for help", "cn": "帮助", "nl": "Klik voor hulp", "es": "Haz clic para obtener ayuda", "pt": "Clique para ajuda", "it": "Fai clic per chiedere aiuto", "de": "Anklicken", "pl": "Kliknij, aby uzyskać pomoc", "ru": "Перейти по ссылке"}; systemDictionary.saveConfig = { "en": "Save configuration to file", - "de": "Speichern Sie die Konfiguration in der Datei", - "ru": "Сохранить конфигурацию в файл", - "pt": "Salvar configuração no arquivo", - "nl": "Sla configuratie op naar bestand", - "fr": "Enregistrer la configuration dans un fichier", - "it": "Salva la configurazione nel file", - "es": "Guardar configuración en archivo", - "pl": "Zapisz konfigurację do pliku" + "cn": "Save configuration to file" }; systemDictionary.loadConfig = { "en": "Load configuration from file", - "de": "Laden Sie die Konfiguration aus der Datei", - "ru": "Загрузить конфигурацию из файла", - "pt": "Carregar configuração do arquivo", - "nl": "Laad de configuratie uit het bestand", - "fr": "Charger la configuration à partir du fichier", - "it": "Carica la configurazione dal file", - "es": "Cargar configuración desde archivo", - "pl": "Załaduj konfigurację z pliku" + "cn": "Load configuration from file" }; systemDictionary.otherConfig = { "en": "Configuration from other adapter %s", - "de": "Konfiguration von anderem Adapter %s", - "ru": "Конфигурация из другого адаптера %s", - "pt": "Configuração de outro adaptador %s", - "nl": "Configuratie vanaf andere adapter %s", - "fr": "Configuration à partir d'un autre adaptateur %s", - "it": "Configurazione da altro adattatore %s", - "es": "Configuración desde otro adaptador %s", - "pl": "Konfiguracja z innego adaptera %s" + "cn": "Configuration from other adapter %s" }; systemDictionary.invalidConfig = { - "en": "Invalid JSON file", - "de": "Ungültige JSON-Datei", - "ru": "Недопустимый файл JSON", - "pt": "Arquivo JSON inválido", - "nl": "Ongeldig JSON-bestand", - "fr": "Fichier JSON non valide", - "it": "File JSON non valido", - "es": "Archivo JSON no válido", - "pl": "Nieprawidłowy plik JSON" + "en": "Invalid JSON file" }; systemDictionary.configLoaded = { "en": "Configuration was successfully loaded", - "de": "Die Konfiguration wurde erfolgreich geladen", - "ru": "Конфигурация успешно загружена", - "pt": "Configuração foi carregada com sucesso", - "nl": "Configuratie is succesvol geladen", - "fr": "La configuration a été chargée avec succès", - "it": "La configurazione è stata caricata correttamente", - "es": "La configuración se cargó correctamente", - "pl": "Konfiguracja została pomyślnie załadowana" + "cn": "Configuration was successfully loaded" }; systemDictionary.maxTableRaw = { "en": "Maximum number of allowed raws", - "de": "Maximale Anzahl von erlaubten Tabellenzeilen", - "ru": "Достигнуто максимальное число строк", - "it": "Numero massimo di raw consentiti", - "fr": "Nombre maximum de raw autorisés", - "nl": "Maximumaantal toegestane raws", - "pt": "Número máximo de raias permitidas", - "es": "Número máximo de raws permitidos", - "pl": "Maksymalna liczba dozwolonych surowców" + "cn": "Maximum number of allowed raws" }; - systemDictionary.maxTableRawInfo = {"en": "Warning", "de": "Warnung", "ru": "Внимание", "pt": "Atenção", "nl": "Waarschuwing", "fr": "Attention", "it": "avvertimento", "es": "Advertencia", "pl": "Ostrzeżenie"}; + systemDictionary.maxTableRawInfo = {"en": "Warning", "cn": "提示"}; systemDictionary["Main settings"] = { "en": "Main settings", - "de": "Haupteinstellungen", - "ru": "Основные настройки", - "pt": "Configurações principais", - "nl": "Belangrijkste instellingen", - "fr": "Réglages principaux", - "it": "Impostazioni principali", - "es": "Ajustes principales", - "pl": "Ustawienia główne" + "cn": "基本设置" }; systemDictionary["Let's Encrypt SSL"] = { "en": "Let's Encrypt Certificates", - "de": "Let's Encrypt Zertifikate", - "ru": "Let's Encrypt Сертификаты", - "pt": "Let's Encrypt Certificados", - "nl": "Let's Encrypt certificaten", - "fr": "Let's Encrypt Certificats", - "it": "Let's Encrypt certificati", - "es": "Let's Encrypt Certificados", - "pl": "Let's Encrypt certyfikaty" + "cn": "Let's Encrypt Certificates" }; systemDictionary["Please activate secure communication"] = { "en": "Please activate secure communication", - "de": "Bitte sichere Kommunikation aktivieren", - "ru": "Включите безопасную связь", - "pt": "Active a comunicação segura", - "nl": "Activeer alstublieft beveiligde communicatie", - "fr": "Veuillez activer la communication sécurisée", - "it": "Si prega di attivare la comunicazione sicura", - "es": "Por favor active la comunicación segura", - "pl": "Aktywuj bezpieczną komunikację" + "cn": "Please activate secure communication" }; //socket.on('connection', function () { loadSystemConfig(function () { diff --git a/www/js/app.js b/www/js/app.js index 238030a..a4dd5c6 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 G(){var t=!1;H.currentFilter?H.$tiles.find(".tile").each(function(){var e=$(this);(!H.currentType||e.hasClass("class-"+H.currentType))&&B({key:e.data("id")})?(t=!0,e.show()):e.hide()}):H.currentType?(H.$tiles.find(".tile").hide(),H.$tiles.find(".class-"+H.currentType).show(),H.$tiles.find(".tile").each(function(){if($(this).is(":visible"))return!(t=!0)})):H.$tiles.find(".tile").show().each(function(){if($(this).is(":visible"))return!(t=!0)}),t?H.$tiles.find(".filtered-out").hide():H.$tiles.find(".filtered-out").show()}function B(e){if(H.currentFilter){if(!H.data[e.key])return!1;var t=H.data[e.key].title;t&&"object"==typeof t&&(t=t[systemLang]||t.en);var n=H.data[e.key].desc;return n&&"object"==typeof n&&(n=n[systemLang]||n.en),!!(H.data[e.key].name&&-1!==H.data[e.key].name.toLowerCase().indexOf(H.currentFilter)||t&&-1!==t.toLowerCase().indexOf(H.currentFilter)||H.data[e.key].keywords&&-1!==H.data[e.key].keywords.toLowerCase().indexOf(H.currentFilter)||n&&-1!==n.toLowerCase().indexOf(H.currentFilter))}return!0}function F(e,t){var n="";if(t.news)for(var i in t.news)if(t.news.hasOwnProperty(i)){if(systemLang===i&&(n+=(n?"\n":"")+t.news[i]),"en"===i||"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;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))e=H.$installDialog.find("#install-url-link").val(),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var i=H.$installDialog.find("#install-github-link").val().split(" ");e=i[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+i[1]}e?H.main.cmdExec(null,'url "'+e+'"'+n+t,function(e){e||H.init(!0,!0)}):H.main.showError(_("Invalid link"))}),H.$installDialog.find("#install-github-link").select(),H.$installDialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),H.$installDialog.modal("open"),H.$installDialog.find(".tabs").mtabs({nShow:function(e){e&&H.main.saveConfig("adaptersInstallTab",$(e).attr("id"))}}),H.main.config.adaptersInstallTab&&!H.main.noSelect&&H.$installDialog.find(".tabs").mtabs("select",H.main.config.adaptersInstallTab)}),this.$tab.find("#btn_upgrade_all").off("click").on("click",function(){H.main.confirmMessage(_("Do you want to upgrade all adapters?"),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"upgrade",function(e){e||H._postInit(!0)})})}),this.$tab.find("#btn_adapters_expert_mode").on("click",function(){H.main.config.expertMode=!H.main.config.expertMode,H.main.saveConfig("expertMode",H.main.config.expertMode),H.updateExpertMode(),H.main.tabs.instances.updateExpertMode()}),H.main.config.expertMode&&H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),this.$installDialog.find("#install-github-link").on("change",function(){H.main.saveConfig("adaptersGithub",$(this).val())}),this.$installDialog.find("#install-url-link").on("keyup",function(e){13===e.which&&H.$installDialog.find("#dialog-install-url-button").trigger("click")}),this.isTiles=void 0===this.main.config.adaptersIsTiles||null===this.main.config.adaptersIsTiles||this.main.config.adaptersIsTiles,this.isList=this.main.config.adaptersIsList||!1,this.onlyInstalled=this.main.config.adaptersOnlyInstalled||!1,this.onlyUpdatable=this.main.config.adaptersOnlyUpdatable||!1,this.currentFilter=this.main.config.adaptersCurrentFilter||"",this.currentType=this.main.config.adaptersCurrentType||"",this.currentOrder=this.main.config.adaptersCurrentOrder||"a-z",this.isCollapsed=this.main.config.adaptersIsCollapsed?JSON.parse(this.main.config.adaptersIsCollapsed):{},this.currentFilter?(this.$tab.find(".filter-input").addClass("input-not-empty").val(H.currentFilter),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.onlyInstalled?this.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):this.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),this.onlyUpdatable?this.$tab.find("#btn_filter_updates").addClass("red lighten-3"):this.$tab.find("#btn_filter_updates").removeClass("red lighten-3"),"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find("#btn_switch_adapters").hide()),a(),this.$tab.find("#btn_refresh_adapters").on("click",function(){H.init(!0,!0)}),this.$tab.find(".filter-input").on("keyup",function(){$(this).trigger("change")}).on("change",function(e){H.filterTimer&&clearTimeout(H.filterTimer),H.filterTimer=setTimeout(function(){H.filterTimer=null,H.currentFilter=H.$tab.find(".filter-input").val().toLowerCase(),e&&e.target&&$(e.target)[H.currentFilter?"addClass":"removeClass"]("input-not-empty"),H.currentFilter?H.$tab.find(".filter-clear").show():H.$tab.find(".filter-clear").hide(),H.main.saveConfig("adaptersCurrentFilter",H.currentFilter),H.isTiles?G():H.$grid.fancytree("getTree").filterNodes(B,!1)},400)}),this.$tab.find(".filter-clear").on("click",function(){H.$tab.find(".filter-input").val("").trigger("change")}),this.isTiles?(this.$tab.find("#btn_switch_adapters").find("i").text("view_list"),H.$tab.removeClass("view-table").addClass("view-tiles"),n()):(H.$tab.removeClass("view-tiles").addClass("view-table"),t())},this.updateExpertMode=function(){this.init(!0),a()},this.getAdaptersInfo=function(e,t,n,i){if(e){if(!i)throw"Callback cannot be null or undefined";t&&(!this.curRepoLastUpdate||1e3<(new Date).getTime()-this.curRepoLastUpdate)&&(this.curRepository=null,this.curInstalled=null),this.curRunning?this.curRunning.push(i):(this.curRepository&&this.curRepoLastHost===e||(this.curRepository=null,this.main.socket.emit("sendToHost",e,"getRepository",{repo:this.main.systemConfig.common.activeRepo,update:n},function(e){"permissionError"===e&&(console.error('May not read "getRepository"'),e={}),H.curRepository=e||{},H.curRepository&&H.curInstalled&&H.curRunning&&(H.curRepoLastUpdate=(new Date).getTime(),setTimeout(function(){for(var e=0;e'+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 N=n.titleLang||n.title;if(N="object"==typeof N?N[systemLang]||N.en:N,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:''+(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 L=-1,T=0;T':"",icon:n.extIcon,stat:n.stat,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(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',z+='
',z+='
',z+='
',z+=' ',z+=' '+S.title+"",z+=' more_vert',z+='
    ',z+="
  • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
  • ",S.installed&&(z+="
  • "+d["Installed version"]+': '+S.rawInstalled+"
  • "),S.instances&&(z+="
  • "+_("Installed instances")+': '+S.instances+"
  • "),z+="
",z+="
",z+=' ',z+='
',z+=' close',z+="

"+S.desc+"

",z+='
',z+=S.install,z+="
",z+="
","popular"===H.currentOrder&&S.stat?z+='
'+S.stat+"
":"updated"===H.currentOrder&&S.versionDate&&(z+='
'+J(S.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"
"),z+="
",z+=""}for(var Y in z+='
',z+='
',z+='
',z+='
',z+=' '+_("Filtered out")+"",z+="
",z+=' ',z+="
",z+="
",H.$tiles.html(z),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var R='
  • '+d.all+"
  • \n",Q=0;Q'+_(A[Q])+"\n";var P=H.$tab.find("#main-toolbar-table-types");P.html(R),P.find(".main-toolbar-table-types-item").show().off("click").on("click",function(){H.currentType=$(this).data("type")||"",G(),H.$tab.find("#main-toolbar-table-types-btn").html(_(H.currentType||"all")),H.main.saveConfig("adaptersCurrentType",H.currentType)}),H.currentType&&!d[H.currentType]&&(d[H.currentType]=_(H.currentType)),H.$tab.find("#main-toolbar-table-types-btn").html(d[H.currentType||"all"]).dropdown({constrainWidth:!1,gutter:0}),(P=H.$tab.find("#main-toolbar-table-order")).find(".main-toolbar-table-order-item").off("click").on("click",function(){H.currentOrder=$(this).data("type")||"",H.$tab.find("#main-toolbar-table-order-btn").html(_(H.currentOrder||"a-z")),H.main.saveConfig("adaptersCurrentOrder",H.currentOrder),H._postInit()}),H.currentOrder&&!d[H.currentOrder]&&(d[H.currentOrder]=_(H.currentOrder)),H.$tab.find("#main-toolbar-table-order-btn").show().html(d[H.currentOrder||"a-z"]).dropdown({constrainWidth:!1,gutter:0}),G()}else{H.$tab.find("#main-toolbar-table-types-btn").hide(),H.$tab.find("#main-toolbar-table-order-btn").hide(),H.$grid.fancytree("getTree").reload(H.tree),H.$grid.find(".fancytree-icon").each(function(){$(this).attr("src")&&$(this).css({width:18,height:18}),$(this).on("hover",function(){var e='
    ',t=$(e);t.insertAfter($(this)),$(this).data("big",t[0]);var n=parseFloat(t.height()),i=Math.round($(this).position().top-(n-parseFloat($(this).height()))/2);n+i>(window.innerHeight||document.documentElement.clientHeight)&&(i=(window.innerHeight||document.documentElement.clientHeight)-n),t.css({top:i})},function(){var e=$(this).data("big");$(e).remove(),$(this).data("big",void 0)})}),H.currentFilter&&H.$grid.fancytree("getTree").filterNodes(B,!1),H.sortTree(),H.enableColResize();var U=["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(U[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);H.data[i].licenseUrl||(H.data[i].licenseUrl="https://raw.githubusercontent.com/yunkong2/yunkong2."+(H.data[i].name||i)+"/master/LICENSE"),"object"==typeof H.data[i].licenseUrl&&(H.data[i].licenseUrl=H.data[i].licenseUrl[systemLang]||H.data[i].licenseUrl.en),-1!==H.data[i].licenseUrl.indexOf("github.com")&&(H.data[i].licenseUrl=H.data[i].licenseUrl.replace("github.com","raw.githubusercontent.com").replace("/blob/","/")),H.main.socket.emit("httpGet",H.data[i].licenseUrl,function(e,t,n){o&&(clearTimeout(o),o=null,!e&&n?(s.css({"z-index":200}),n=(n=n.toString().replace(/\r\n/g,"
    ")).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,O,E,z,A,x="__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,z&&S.loadHistoryTable(z.data("id"),!0)},e||5e3)}function R(t,n){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom_m.html",success:function(e){n(null,e)},error:function(e){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom.html",success:function(e){n(null,e)},error:function(e){n(e.responseText)}})}})}function Q(e){e.stopPropagation(),e.preventDefault();var t=S.$dialog.find("#customs-tabs"),c=t.data("ids");S.currentCustoms=null;var l=_(x);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=$(L);this.defaults[v]={},T.find("input, select").each(function(){var e=$(this);e.attr("data-instance",v+"."+w);var t=e.attr("data-field"),n=e.attr("data-default");"true"===n&&(n=!0),"false"===n&&(n=!1),void 0!==n&&n.toString().replace(/\+/,"")===parseFloat(n).toString()&&(n=parseFloat(n)),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]===x?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===x?("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:z.val(),from:!0,ack:!0,q:!0};T||(T=this.$dialog.find("#tab-customs-table .datepicker.date-from"),D=this.$dialog.find("#tab-customs-table .datepicker.date-to"),I=this.$dialog.find("#tab-customs-table .timepicker.time-from"),k=this.$dialog.find("#tab-customs-table .timepicker.time-to"));var d,i=T.val()?M.Datepicker.getInstance(T).toString("yyyy.mm.dd"):"",a=I.val(),s=D.val()?M.Datepicker.getInstance(D).toString("yyyy.mm.dd"):"",o=k.val(),r=!0;if(s?(r=!1,(s=new Date(s)).setHours(23),s.setMinutes(59),s.setSeconds(59),s.setMilliseconds(999)):s=new Date,o){var c=o.split(":");s.setHours(c[0]),s.setMinutes(c[1]),s.setSeconds(59),s.setMilliseconds(999),r=!1}if(s=s.getTime(),r&&(s+=1e4),n.end=s,i||a){if(i=new Date(i||s),a){var u=a.split(":");i.setHours(u[0]),i.setMinutes(u[1])}else i.setHours(0),i.setMinutes(0);i.setSeconds(0),i.setMilliseconds(0),n.start=i.getTime()}else n.count=50;l&&(d=new Date(s).toISOString()+"_"+(n.start?new Date(n.start):n.count+"points")+"_"+e+"__"+n.instance+".csv"),C.socket.emit("getHistory",e,n,function(r,c){setTimeout(function(){var e,t,n,i="value;acknowledged;from;timestamp;lastchanged;\n";if(r)console.error(r),m.html(''+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(O||(O=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),E=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a"+u[v]+"\n")}if(y){z.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-table",z.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"]&&z.val(this.main.config["object-history-table"]),void 0!==this.main.config["object-history-chart"]&&A.val(this.main.config["object-history-chart"]),p.data("id",n[0]).show().off("click").on("click",function(){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 N={today:_("Today"),clear:_("Clear"),done:_("Ok"),months:[_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December")],monthsShort:[_("Jan"),_("Feb"),_("Mar"),_("Apr"),_("May"),_("Jun"),_("Jul"),_("Aug"),_("Sep"),_("Oct"),_("Nov"),_("Dec")],weekdaysShort:[_("Sun"),_("Mon"),_("Tue"),_("Wed"),_("Thu"),_("Fri"),_("Sat")],weekdays:[_("Sunday"),_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday")],weekdaysAbbrev:["S","M","T","W","T","F","S"]},L=0;L\n
    \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",de:"Räume",ru:"Комнаты",pt:"Quartos",nl:"Kamers",fr:"Pièces",it:"Camere",es:"Habitaciones",pl:"Pokoje"},desc:{en:"List of the rooms",de:"Liste der Räumen",ru:"Список комнат",pt:"Lista dos quartos",nl:"Lijst met kamers",fr:"Liste des chambres",it:"Elenco delle stanze",es:"Lista de las habitaciones",pl:"Lista pokoi"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},g.main.socket.emit("setObject","enum.rooms",this.main.objects["enum.rooms"]),this.list.unshift("enum.rooms")),this.main.objects["enum.functions"]||(this.main.objects["enum.functions"]={_id:"enum.functions",common:{icon:"lightbulb_outline",name:{en:"Functions",de:"Funktionen",ru:"функции",pt:"Funções",nl:"functies",fr:"Les fonctions",it:"funzioni",es:"Funciones",pl:"Funkcje"},desc:{en:"List of the functions",de:"Liste der Funktionen",ru:"Список функций",pt:"Lista das funções",nl:"Lijst met functies",fr:"Liste des fonctions",it:"Elenco delle funzioni",es:"Lista de las funciones",pl:"Lista funkcji"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},this.list.unshift("enum.functions"),g.main.socket.emit("setObject","enum.functions",this.main.objects["enum.functions"])),this.isTiles?n():c(),this.editMode?this._initObjectTree():o("destroy"))},this.init=function(e){this.inited&&!e||(this.main&&this.main.objectsLoaded?(this._postInit(),this.inited||(this.inited=!0,this.main.subscribeObjects("enum.*"))):setTimeout(function(){g.init(e)},250))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("enum.*")),w(!1),this.$gridList.treeTable("destroy")},this.objectChange=function(e,t,n){if(e.match(/^enum\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.updateTimers&&clearTimeout(this.updateTimers),this.updateTimers=setTimeout(function(){g.updateTimers=null,g._postInit()},200)}this.$grid&&o("object",e,t,n)}}function Events(g){var h=this;this.main=g,this.$tab=$("#tab-events");var e,f,p,t,b,M="yunkong2.net"===location.hostname||"yunkong2.pro"===location.hostname,y={count:0,start:0,limit:500},n=null,v={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null},w={done:!1,timer:null};this.prepare=function(){t=this.$tab.find("#event-outer"),p=this.$tab.find("#event-table"),b=this.$tab.find("#event-pause"),e=this.$tab.find("#events-table-tr"),(f=new IobListHeader(e,{list:t,colWidthOffset:1,prefix:"event-filter"})).doFilter=i,f.add("combobox","type"),f.add("edit","id","ID"),f.add("edit","val","value"),f.add("combobox","ack","ack",[{val:"",name:"all"},{val:"true",name:"ack"},{val:"false",name:"not ack"}]),f.add("combobox","from","from"),f.add("text","ts"),f.add("text","lc"),Object.defineProperty(f,"getValues",{value:function(){f.ID.selectedVal=f.ID.selectedVal.toLocaleLowerCase(),"true"===f.ack.selectedVal&&(f.ack.selectedVal=!0),"false"===f.ack.selectedVal&&(f.ack.selectedVal=!1)},enumerateble:!1}),b.on("click",function(){h.pause()}),this.$tab.find("#event-clear").off("click").on("click",function(){y.count=0,y.start=0,h.$tab.find("#event-table").html("")})},this.init=function(){M?h.$tab.find("#grid-events").html(_("You can't see events via cloud")+'
    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 N(){w.timer=null,$(window).trigger("resize.JColResizer")}function i(){n&&(clearTimeout(n),n=null),f.getValues&&f.getValues(),p&&p.find(".event-line").each(function(e){var t=!0,n=$(this);f.type.selectedVal&&!n.hasClass("event-type-"+f.type.selectedVal)?t=!1:f.from.selectedVal&&!n.hasClass("event-from-"+f.from.selectedVal)?t=!1:""===f.ack.selectedVal||n.hasClass("event-ack-"+f.ack.selectedVal)?f.ID.selectedVal&&-1===$(this).find("td.event-column-id").text().toLocaleLowerCase().indexOf(f.ID.selectedVal)?t=!1:""!==f.value.selectedVal&&-1===$(this).find("td.event-column-value").text().indexOf(f.value.selectedVal)&&(t=!1):t=!1,t?n.show():n.hide()})}this.add=function(e,t,n,i){if(!M){var a,s,o,r,c=i?"stateChange":n?"message":"objChange",l="";if(f&&(f.getValues&&f.getValues(),f.type.checkAddOption(c)),w.done||(w.timer||(w.timer=setTimeout(N,1e3)),20=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 N(a){v.socket.emit("getAllObjects",function(e,i){e?window.alert(_(e)):setTimeout(function(){var e;for(var t in v.objects=i,v.objects)v.objects.hasOwnProperty(t)&&"_design"!==t.slice(0,7)&&("instance"===(e=v.objects[t]).type&&v.instances.push(t),"enum"===e.type&&g.enums.list.push(t),"user"===e.type&&g.users.list.push(t),"group"===e.type&&g.users.groups.push(t),"adapter"===e.type&&g.adapters.list.push(t),"host"===e.type&&g.hosts.addHost(e),e.common&&e.common.history&&(e.common.custom=JSON.parse(JSON.stringify(e.common.history)),delete e.common.history));for(var n in v.objectsLoaded=!0,v.initHostsList(!0),j(),v.dialogs)v.dialogs.hasOwnProperty(n)&&"function"==typeof v.dialogs[n].prepare&&v.dialogs[n].prepare();!function n(i,a){a=a||0,i&&a'+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=n+" - yunkong2",v.currentDialog!==i&&(v.dialogs[v.currentDialog]&&"function"==typeof v.dialogs[v.currentDialog].destroy&&v.dialogs[v.currentDialog].destroy(),(v.currentDialog=i)&&v.dialogs[i]?("function"==typeof v.dialogs[i].init&&v.dialogs[i].init(a?a.split(","):void 0),g[v.currentTab]&&g[v.currentTab].saveScroll&&g[v.currentTab].saveScroll(),o.hide().appendTo("body"),C("#dialog-"+i).addClass("admin-sidemenu-body-content").show().appendTo(s)):o.attr("id")!==r.attr("id")&&(o.hide().appendTo("body"),r.addClass("admin-sidemenu-body-content").show().appendTo(s),g[v.currentTab]&&g[v.currentTab].restoreScroll&&g[v.currentTab].restoreScroll()))}})},v.getIconFromObj=function(e,t,n){var i="",a="";if(e&&e.common)if(e.common.icon){var s=L(e);i=s.icon,a=s.alt}else t=t||"lib/css/fancytree/","device"===e.type?(i=t+"device.png",a="device"):"channel"===e.type?(i=t+"channel.png",a="channel"):"state"===e.type&&(i=t+"state.png",a="state");return i?''+(a||':""},v.getIcon=function(e,t,n,i){return v.getIconFromObj((n||v.objects)[e],t,i)},v.getHostIcon=function(e,t){var n="",i="";if(e&&e.common&&e.common.icon){var a=L(e);n=a.icon,i=a.alt}return''+(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=N,g.states&&g.states.clear(),v.socket.emit("getStates",function(e,t){v.states=t,"function"==typeof i&&setTimeout(function(){i()},0)})},0)})})})})):(v.resubscribeStates(),v.resubscribeObjects(),v.resubscribeLogs()),v.waitForRestart&&location.reload()}),v.socket.on("disconnect",function(){C("#connecting").show()}),v.socket.on("reconnect",function(){C("#connecting").hide(),v.waitForRestart&&location.reload()}),v.socket.on("repoUpdated",function(){setTimeout(function(){g.adapters.init(!0)},0)}),v.socket.on("reauthenticate",function(){location.reload()})})}(jQuery);var license={en:'The MIT License (MIT)

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',de:'MIT-Lizenz (MIT)

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:
    Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.
    DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',ru:"Лицензия MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
    Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
    ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.",it:'Licenza MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Si concede gratuitamente l\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:
    l\'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.
    IL SOFTWARE VIENE FORNITO "COSÌ COM\'È" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',fr:'Licence MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',pt:'Licença MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',nl:'MIT-licentie

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',es:'Licencia MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el "Software"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:
    El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
    EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',pl:'Licencja MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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+'", "de": "'+e+'", "ru": "'+e+'", "pt": "'+e+'", "nl": "'+e+'", "fr": "'+e+'", "es": "'+e+'", "pl": "'+e+'", "it": "'+e+'"},');return e}function translateAll(e,i,a){i=i||systemLang,a=a||systemDictionary,e||(e="body");var t=$(e);t.find(".translate").each(function(e){var t=$(this).attr("data-lang");t||(t=$(this).html(),$(this).attr("data-lang",t));var n=translateWord(t,i,a);n&&$(this).html(n)}),t.find(".translateV").each(function(e){var t=$(this).attr("data-lang-value");t||(t=$(this).attr("value"),$(this).attr("data-lang-value",t));var n=translateWord(t,i,a);n&&$(this).attr("value",n)}),t.find(".translateT").each(function(e){var t=$(this).attr("data-lang-title");t||(t=$(this).attr("title"),$(this).attr("data-lang-title",t));var n=translateWord(t,i,a);n&&$(this).attr("title",n)}),t.find(".translateP").each(function(e){var t=$(this).attr("data-lang-placeholder");t||(t=$(this).attr("placeholder"),$(this).attr("data-lang-placeholder",t));var n=translateWord(t,i,a);n&&$(this).attr("placeholder",n)})}function translateName(e){return e&&"object"==typeof e?e[systemLang]||e.en:e}var _=function(e,t,n,i){var a=(e=translateWord(e)).indexOf("%s");return-1===a||-1===(a=(e=e.replace("%s",t)).indexOf("%s"))||-1!==(a=(e=e.replace("%s",n)).indexOf("%s"))&&(e=e.replace("%s",i)),e};!function(X){if(!X.fn.treeTable){var t={init:function(e){e.imgPath=e.imgPath||"lib/css/fancytree/";for(var t=0;t';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[O].children&&s[O].children.length&&(e+=''+s[O].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var U=X(this),H=X(e);U.find("span:first-child").remove(),U.find(".treetablelist-buttons").remove(),U.find(".treetable-list").remove(),U.find(".tree-table-buttons").remove(),U.find(".tree-table-main").remove(),U.prepend(H),i.rows=s;var G=X(H[1]).find(">table"),B=X(H[0]);G.data("options",i),G.treetable({expandable:!0,clickableNodeNames:!0,expanderTemplate:"",indenterTemplate:'',onNodeExpand:q,onNodeCollapse:ee,stringCollapse:_("collapse"),stringExpand:_("expand")});var F=G.find("tbody");if(F.on("click","tr",function(){X(".selected").not(this).removeClass("selected"),X(this).addClass("selected");var e=X(this).parent().parent().data("options"),t=X(this).data("tt-id");e.onChange&&e.onChange(X(this).data("tt-id"),e.oldId),e.oldId=t}),i.buttons)for(var Z=0;Z"%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:"Available",en:"Available"},"Available version:":{cn:"Available version",en:"Available version"},CPUs:{cn:"CPUs",en:"CPUs"},Calendar:{cn:"Calendar",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:"Click on icon to open a link",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:"Create new category",en:"Create new category"},"Create new category, like %s":{cn:"Create new category, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"创建新的枚举",en:"Create new enum"},"Create new enum, like %s":{cn:"Create new enum, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"Create new group",en:"Create new group"},"Create new user":{cn:"创建新用户",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:"File is too big!",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:"空闲:",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:"Group",en:"Group"},Groups:{cn:"Groups",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:"Host %s is offline",en:"Host %s is offline"},"Host:":{cn:"Host",en:"Host"},Hosts:{cn:"Hosts",en:"Hosts"},ID:{cn:"ID",en:"ID"},"Icon upload":{cn:"Icon upload",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:"Model",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:"Parent",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:"总内存使用:",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:"Save objects tree as JSON file",en:"Save objects tree as JSON file"},"Save Objecttree is not possible":{cn:"Saving the objects tree is not possible",en:"Saving the objects tree is not possible"},"Save configuration":{cn:"保存配置",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"},Seychelles:{cn:"Seychelles",en:"Seychelles"},"Show instances only for current host":{cn:"Show instances only for current host",en:"Show instances only for current host"},"Show values of instance":{cn:"Show values of instance",en:"Show values of instance"},"Show...":{cn:"显示...",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:"System uptime",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:"Unknown file format!",en:"Unknown file format!"},"Unsupported image format":{cn:"Unsupported image format",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:"Upload of configuration is started",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:"You are going to add new instance: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"You can drag&drop the devices, channels and states to enums",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"You can drag&drop users to groups",en:"You can drag&drop users to groups"},"You can't see events via cloud":{cn:"You can't see events via cloud",en:"You can't see events via cloud"},"Your home":{cn:"Your home",en:"Your home"},_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:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop",en:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"},certificate:{cn:"certificate",en:"certificate"},"change view mode":{cn:"模式",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:"原生",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:"复位 (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"},"%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:"Filter",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"},Speed:{cn:"Speed",en:"Speed"},"Sri Lanka":{cn:"Sri Lanka",en:"Sri Lanka"},"St. Helena":{cn:"St. Helena",en:"St. Helena"},"St. Pierre and Miquelon":{cn:"St. Pierre and Miquelon",en:"St. Pierre and Miquelon"},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"},"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
    ',!E&&i.colors&&s[O].color&&(e+='
    '),!E&&i.icons&&(e+=ne(i.objects[s[O].id],i.imgPath)||'
     
    '),"enabled"===z)e+='";else if("groups"===z)for(var S=0;S'+ne(i.objects[$],null,"")+s[O].groups[S].name+""}else if("instance"===z)if(void 0!==s[O].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[O].instance?"":s[O].instance)+"";else if("icon"===z)e+=ne(i.objects[s[O].id],i.imgPath);else{var R=s[O][z]||"";R&&"object"==typeof R&&R.en&&(R=R[systemLang]||R.en),e+=""+R+""}e+="
    ';for(var Q="",P=0;P ':(Q+="<"+t+' data-id="'+s[O].id+'" class="select-button-'+P+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[O].parent+'" data-children="'+!!s[O].realChildren+'" title="'+(i.buttons[P].title||"")+'">',window.M&&window.M.toast&&(Q+=''+(i.buttons[P].icon||"")+""),Q+="");e+=Q+"
    '),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;if(!H.$installDialog.find('a[href="#tabs-install-github"]').hasClass("active"))(e=H.$installDialog.find("#install-url-link").val()).startsWith("http")&&e.endsWith(".git")&&(e="git+"+e),t=H.$installDialog.find("#install-url-debug").prop("checked")?" --debug":"",n="";else{var i=H.$installDialog.find("#install-github-link").val().split(" ");e=i[0],t=H.$installDialog.find("#install-github-debug").prop("checked")?" --debug":"",n=" "+i[1]}e?H.main.cmdExec(null,'url "'+e+'"'+n+t,function(e){e||H.init(!0,!0)}):H.main.showError(_("Invalid link"))}),H.$installDialog.find("#install-github-link").select(),H.$installDialog.find('input[type="checkbox"]+span').off("click").on("click",function(){var e=$(this).prev();e.prop("disabled")||e.prop("checked",!e.prop("checked")).trigger("change")}),H.$installDialog.modal("open"),H.$installDialog.find(".tabs").mtabs({nShow:function(e){e&&H.main.saveConfig("adaptersInstallTab",$(e).attr("id"))}}),H.main.config.adaptersInstallTab&&!H.main.noSelect&&H.$installDialog.find(".tabs").mtabs("select",H.main.config.adaptersInstallTab)}),this.$tab.find("#btn_upgrade_all").off("click").on("click",function(){H.main.confirmMessage(_("Do you want to upgrade all adapters?"),_("Please confirm"),"help",function(e){e&&H.main.cmdExec(null,"upgrade",function(e){e||H._postInit(!0)})})}),this.$tab.find("#btn_adapters_expert_mode").on("click",function(){H.main.config.expertMode=!H.main.config.expertMode,H.main.saveConfig("expertMode",H.main.config.expertMode),H.updateExpertMode(),H.main.tabs.instances.updateExpertMode()}),H.main.config.expertMode&&H.$tab.find("#btn_adapters_expert_mode").addClass("red lighten-3"),this.$installDialog.find("#install-github-link").on("change",function(){H.main.saveConfig("adaptersGithub",$(this).val())}),this.$installDialog.find("#install-url-link").on("keyup",function(e){13===e.which&&H.$installDialog.find("#dialog-install-url-button").trigger("click")}),this.isTiles=void 0===this.main.config.adaptersIsTiles||null===this.main.config.adaptersIsTiles||this.main.config.adaptersIsTiles,this.isList=this.main.config.adaptersIsList||!1,this.onlyInstalled=this.main.config.adaptersOnlyInstalled||!1,this.onlyUpdatable=this.main.config.adaptersOnlyUpdatable||!1,this.currentFilter=this.main.config.adaptersCurrentFilter||"",this.currentType=this.main.config.adaptersCurrentType||"",this.currentOrder=this.main.config.adaptersCurrentOrder||"a-z",this.isCollapsed=this.main.config.adaptersIsCollapsed?JSON.parse(this.main.config.adaptersIsCollapsed):{},this.currentFilter?(this.$tab.find(".filter-input").addClass("input-not-empty").val(H.currentFilter),this.$tab.find(".filter-clear").show()):this.$tab.find(".filter-clear").hide(),this.onlyInstalled?this.$tab.find("#btn_filter_adapters").addClass("red lighten-3"):this.$tab.find("#btn_filter_adapters").removeClass("red lighten-3"),this.onlyUpdatable?this.$tab.find("#btn_filter_updates").addClass("red lighten-3"):this.$tab.find("#btn_filter_updates").removeClass("red lighten-3"),"ie"===this.main.browser&&this.main.browserVersion<=10&&(this.isTiles=!1,this.$tab.find("#btn_switch_adapters").hide()),a(),this.$tab.find("#btn_refresh_adapters").on("click",function(){H.init(!0,!0)}),this.$tab.find(".filter-input").on("keyup",function(){$(this).trigger("change")}).on("change",function(e){H.filterTimer&&clearTimeout(H.filterTimer),H.filterTimer=setTimeout(function(){H.filterTimer=null,H.currentFilter=H.$tab.find(".filter-input").val().toLowerCase(),e&&e.target&&$(e.target)[H.currentFilter?"addClass":"removeClass"]("input-not-empty"),H.currentFilter?H.$tab.find(".filter-clear").show():H.$tab.find(".filter-clear").hide(),H.main.saveConfig("adaptersCurrentFilter",H.currentFilter),H.isTiles?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 N=n.titleLang||n.title;if(N="object"==typeof N?N[systemLang]||N.en:N,H.data[o]={image:f?'':"",icon:f||"",stat:e[o]?e[o].stat:0,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,news:M,updatableError:v,keywords:n.keywords?n.keywords.join(" "):"",version:i,installed:g,rawVersion:a,instances:p,rawInstalled:h,versionDate:n.versionDate,updatable:y,bold:n.highlight||!1,install:''+(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 T=-1,L=0;L':"",icon:n.extIcon,stat:n.stat,name:o,title:(N||"").replace("yunkong2 Visualisation - ",""),desc:C,keywords:n.keywords?n.keywords.join(" "):"",rawVersion:a,version:i,bold:n.highlight,installed:"",versionDate:n.versionDate,install:''+(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',z+='
    ',z+='
    ',z+='
    ',z+=' ',z+=' '+S.title+"",z+=' more_vert',z+='
      ',z+="
    • "+d["Available version:"]+' "+S.rawVersion+""+(S.updatable?'':"")+"
    • ",S.installed&&(z+="
    • "+d["Installed version"]+': '+S.rawInstalled+"
    • "),S.instances&&(z+="
    • "+_("Installed instances")+': '+S.instances+"
    • "),z+="
    ",z+="
    ",z+=' ',z+='
    ',z+=' close',z+="

    "+S.desc+"

    ",z+='
    ',z+=S.install,z+="
    ",z+="
    ","popular"===H.currentOrder&&S.stat?z+='
    '+S.stat+"
    ":"updated"===H.currentOrder&&S.versionDate&&(z+='
    '+J(S.versionDate,d.today,d.yesterday,d["1 %d days ago"],d["2 %d days ago"],d["5 %d days ago"],l)+"
    "),z+="
    ",z+="
    "}for(var Y in z+='
    ',z+='
    ',z+='
    ',z+='
    ',z+=' '+_("Filtered out")+"",z+="
    ",z+=' ',z+="
    ",z+="
    ",H.$tiles.html(z),H.data)H.data.hasOwnProperty(Y)&&H.initButtons(Y);for(var R='
  • '+d.all+"
  • \n",Q=0;Q'+_(A[Q])+"\n";var P=H.$tab.find("#main-toolbar-table-types");P.html(R),P.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}),(P=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 U=["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(U[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,L,D,I,k,O,E,z,A,x="__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,z&&S.loadHistoryTable(z.data("id"),!0)},e||5e3)}function R(t,n){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom_m.html",success:function(e){n(null,e)},error:function(e){$.ajax({headers:{Accept:"text/html"},cache:!0,url:"/adapter/"+t+"/custom.html",success:function(e){n(null,e)},error:function(e){n(e.responseText)}})}})}function Q(e){e.stopPropagation(),e.preventDefault();var t=S.$dialog.find("#customs-tabs"),c=t.data("ids");S.currentCustoms=null;var l=_(x);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()+"
    ",L=$(T);this.defaults[v]={},L.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(L),customPostInits.hasOwnProperty(v)&&"function"==typeof customPostInits[v]&&customPostInits[v](L,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]===x?n[0].indeterminate=!0:n.prop("checked",r[t][a]):r[t][a]===x?("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:z.val(),from:!0,ack:!0,q:!0};L||(L=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=L.val()?M.Datepicker.getInstance(L).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(O||(O=this.$dialog.find("#tab-customs-chart .datepicker.date-from"),E=this.$dialog.find("#tab-customs-chart .datepicker.date-to")),e){for(var t=0,n=!1,i=!1,a=0;a"+u[v]+"\n")}if(y){z.data("id",n[0]).html(y).show().off("change").on("change",function(){S.main.saveConfig("object-history-table",z.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"]&&z.val(this.main.config["object-history-table"]),void 0!==this.main.config["object-history-chart"]&&A.val(this.main.config["object-history-chart"]),p.data("id",n[0]).show().off("click").on("click",function(){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 N={today:_("Today"),clear:_("Clear"),done:_("Ok"),months:[_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December")],monthsShort:[_("Jan"),_("Feb"),_("Mar"),_("Apr"),_("May"),_("Jun"),_("Jul"),_("Aug"),_("Sep"),_("Oct"),_("Nov"),_("Dec")],weekdaysShort:[_("Sun"),_("Mon"),_("Tue"),_("Wed"),_("Thu"),_("Fri"),_("Sat")],weekdays:[_("Sunday"),_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday")],weekdaysAbbrev:["S","M","T","W","T","F","S"]},T=0;T\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",de:"Räume",ru:"Комнаты",pt:"Quartos",nl:"Kamers",fr:"Pièces",it:"Camere",es:"Habitaciones",pl:"Pokoje"},desc:{en:"List of the rooms",de:"Liste der Räumen",ru:"Список комнат",pt:"Lista dos quartos",nl:"Lijst met kamers",fr:"Liste des chambres",it:"Elenco delle stanze",es:"Lista de las habitaciones",pl:"Lista pokoi"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},g.main.socket.emit("setObject","enum.rooms",this.main.objects["enum.rooms"]),this.list.unshift("enum.rooms")),this.main.objects["enum.functions"]||(this.main.objects["enum.functions"]={_id:"enum.functions",common:{icon:"lightbulb_outline",name:{en:"Functions",de:"Funktionen",ru:"функции",pt:"Funções",nl:"functies",fr:"Les fonctions",it:"funzioni",es:"Funciones",pl:"Funkcje"},desc:{en:"List of the functions",de:"Liste der Funktionen",ru:"Список функций",pt:"Lista das funções",nl:"Lijst met functies",fr:"Liste des fonctions",it:"Elenco delle funzioni",es:"Lista de las funciones",pl:"Lista funkcji"},members:[],dontDelete:!0},type:"enum",acl:{owner:"system.user.admin",ownerGroup:"system.group.administrator",permissions:1911}},this.list.unshift("enum.functions"),g.main.socket.emit("setObject","enum.functions",this.main.objects["enum.functions"])),this.isTiles?n():c(),this.editMode?this._initObjectTree():o("destroy"))},this.init=function(e){this.inited&&!e||(this.main&&this.main.objectsLoaded?(this._postInit(),this.inited||(this.inited=!0,this.main.subscribeObjects("enum.*"))):setTimeout(function(){g.init(e)},250))},this.destroy=function(){this.inited&&(this.inited=!1,this.main.unsubscribeObjects("enum.*")),w(!1),this.$gridList.treeTable("destroy")},this.objectChange=function(e,t,n){if(e.match(/^enum\./)){if(t)-1===this.list.indexOf(e)&&this.list.push(e);else{var i=this.list.indexOf(e);-1!==i&&this.list.splice(i,1)}this.updateTimers&&clearTimeout(this.updateTimers),this.updateTimers=setTimeout(function(){g.updateTimers=null,g._postInit()},200)}this.$grid&&o("object",e,t,n)}}function Events(g){var h=this;this.main=g,this.$tab=$("#tab-events");var e,f,p,t,b,M="yunkong2.net"===location.hostname||"yunkong2.pro"===location.hostname,y={count:0,start:0,limit:500},n=null,v={list:[],mode:!1,counter:0,overflow:!1,$counterSpan:null},w={done:!1,timer:null};this.prepare=function(){t=this.$tab.find("#event-outer"),p=this.$tab.find("#event-table"),b=this.$tab.find("#event-pause"),e=this.$tab.find("#events-table-tr"),(f=new IobListHeader(e,{list:t,colWidthOffset:1,prefix:"event-filter"})).doFilter=i,f.add("combobox","type"),f.add("edit","id","ID"),f.add("edit","val","value"),f.add("combobox","ack","ack",[{val:"",name:"all"},{val:"true",name:"ack"},{val:"false",name:"not ack"}]),f.add("combobox","from","from"),f.add("text","ts"),f.add("text","lc"),Object.defineProperty(f,"getValues",{value:function(){f.ID.selectedVal=f.ID.selectedVal.toLocaleLowerCase(),"true"===f.ack.selectedVal&&(f.ack.selectedVal=!0),"false"===f.ack.selectedVal&&(f.ack.selectedVal=!1)},enumerateble:!1}),b.on("click",function(){h.pause()}),this.$tab.find("#event-clear").off("click").on("click",function(){y.count=0,y.start=0,h.$tab.find("#event-table").html("")})},this.init=function(){M?h.$tab.find("#grid-events").html(_("You can't see events via cloud")+'
    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 N(){w.timer=null,$(window).trigger("resize.JColResizer")}function i(){n&&(clearTimeout(n),n=null),f.getValues&&f.getValues(),p&&p.find(".event-line").each(function(e){var t=!0,n=$(this);f.type.selectedVal&&!n.hasClass("event-type-"+f.type.selectedVal)?t=!1:f.from.selectedVal&&!n.hasClass("event-from-"+f.from.selectedVal)?t=!1:""===f.ack.selectedVal||n.hasClass("event-ack-"+f.ack.selectedVal)?f.ID.selectedVal&&-1===$(this).find("td.event-column-id").text().toLocaleLowerCase().indexOf(f.ID.selectedVal)?t=!1:""!==f.value.selectedVal&&-1===$(this).find("td.event-column-value").text().indexOf(f.value.selectedVal)&&(t=!1):t=!1,t?n.show():n.hide()})}this.add=function(e,t,n,i){if(!M){var a,s,o,r,c=i?"stateChange":n?"message":"objChange",l="";if(f&&(f.getValues&&f.getValues(),f.type.checkAddOption(c)),w.done||(w.timer||(w.timer=setTimeout(N,1e3)),20=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 L=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(),L.main.showToast(L.$tiles,_("copied"))}function C(e){var t,c=L.$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===L.main.systemConfig.common.intro[e.id]){if(!L.$tab.hasClass("edit-active"))return null;c.addClass("card-disabled").find(".btn-card-enabled").removeClass("blue").addClass("gray").find("i").text("close")}L.main.objects[e.id]&&L.main.objects[e.id].common&&(t=L.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"]||L.main.formatBytes,d["Disk free"]=d["Disk size"]||L.main.formatBytes,L.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=L.main.states["system.host."+L.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)),L.$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=L.$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(){L.$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=L.main.objects[e]&&L.main.objects[e].common,t=(t=L.main.objects[t]&&L.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:'
  • '+(L[e]&&L[e].icon?''+L[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(L[e]&&L[e].icon)t=L[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 L[e.id]||L[t.id]?L[e.id]?L[t.id]?L[e.id].orderL[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 N(a){v.socket.emit("getAllObjects",function(e,i){e?window.alert(_(e)):setTimeout(function(){var e;for(var t in v.objects=i,v.objects)v.objects.hasOwnProperty(t)&&"_design"!==t.slice(0,7)&&("instance"===(e=v.objects[t]).type&&v.instances.push(t),"enum"===e.type&&g.enums.list.push(t),"user"===e.type&&g.users.list.push(t),"group"===e.type&&g.users.groups.push(t),"adapter"===e.type&&g.adapters.list.push(t),"host"===e.type&&g.hosts.addHost(e),e.common&&e.common.history&&(e.common.custom=JSON.parse(JSON.stringify(e.common.history)),delete e.common.history));for(var n in v.objectsLoaded=!0,v.initHostsList(!0),j(),v.dialogs)v.dialogs.hasOwnProperty(n)&&"function"==typeof v.dialogs[n].prepare&&v.dialogs[n].prepare();!function n(i,a){a=a||0,i&&a'+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),L["tab-"+v.currentTab]&&L["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"),L["tab-"+n]&&L["tab-"+n].host?C("#host-adapters-btn").css("opacity",1):C("#host-adapters-btn").css("opacity",.3),document.title=n+" - yunkong2",v.currentDialog!==i&&(v.dialogs[v.currentDialog]&&"function"==typeof v.dialogs[v.currentDialog].destroy&&v.dialogs[v.currentDialog].destroy(),(v.currentDialog=i)&&v.dialogs[i]?("function"==typeof v.dialogs[i].init&&v.dialogs[i].init(a?a.split(","):void 0),g[v.currentTab]&&g[v.currentTab].saveScroll&&g[v.currentTab].saveScroll(),o.hide().appendTo("body"),C("#dialog-"+i).addClass("admin-sidemenu-body-content").show().appendTo(s)):o.attr("id")!==r.attr("id")&&(o.hide().appendTo("body"),r.addClass("admin-sidemenu-body-content").show().appendTo(s),g[v.currentTab]&&g[v.currentTab].restoreScroll&&g[v.currentTab].restoreScroll()))}})},v.getIconFromObj=function(e,t,n){var i="",a="";if(e&&e.common)if(e.common.icon){var s=T(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=T(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=N,g.states&&g.states.clear(),v.socket.emit("getStates",function(e,t){v.states=t,"function"==typeof i&&setTimeout(function(){i()},0)})},0)})})})})):(v.resubscribeStates(),v.resubscribeObjects(),v.resubscribeLogs()),v.waitForRestart&&location.reload()}),v.socket.on("disconnect",function(){C("#connecting").show()}),v.socket.on("reconnect",function(){C("#connecting").hide(),v.waitForRestart&&location.reload()}),v.socket.on("repoUpdated",function(){setTimeout(function(){g.adapters.init(!0)},0)}),v.socket.on("reauthenticate",function(){location.reload()})})}(jQuery);var license={en:'The MIT License (MIT)

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',de:'MIT-Lizenz (MIT)

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:
    Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.
    DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',ru:"Лицензия MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:
    Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.
    ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.",it:'Licenza MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Si concede gratuitamente l\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:
    l\'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.
    IL SOFTWARE VIENE FORNITO "COSÌ COM\'È" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',fr:'Licence MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',pt:'Licença MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',nl:'MIT-licentie

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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.
    ',es:'Licencia MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el "Software"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:
    El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
    EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',pl:'Licencja MIT

    Copyright © 2014-2018 bluefox, 2014 hobbyquaker

    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[O].children&&s[O].children.length&&(e+=''+s[O].children.length+"")):e+='"}if(i.buttons){e+='"}e+=""}e+="";var U=X(this),H=X(e);U.find("span:first-child").remove(),U.find(".treetablelist-buttons").remove(),U.find(".treetable-list").remove(),U.find(".tree-table-buttons").remove(),U.find(".tree-table-main").remove(),U.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:"Available",en:"Available"},"Available version:":{cn:"Available version",en:"Available version"},CPUs:{cn:"CPUs",en:"CPUs"},Calendar:{cn:"Calendar",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:"Click on icon to open a link",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:"Create new category",en:"Create new category"},"Create new category, like %s":{cn:"Create new category, like %s",en:"Create new category, like %s"},"Create new enum":{cn:"创建新的枚举",en:"Create new enum"},"Create new enum, like %s":{cn:"Create new enum, like %s",en:"Create new enum, like %s"},"Create new group":{cn:"Create new group",en:"Create new group"},"Create new user":{cn:"创建新用户",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:"File is too big!",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:"空闲:",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:"Group",en:"Group"},Groups:{cn:"Groups",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:"Host %s is offline",en:"Host %s is offline"},"Host:":{cn:"Host",en:"Host"},Hosts:{cn:"Hosts",en:"Hosts"},ID:{cn:"ID",en:"ID"},"Icon upload":{cn:"Icon upload",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:"Model",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:"Parent",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:"总内存使用:",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:"Save objects tree as JSON file",en:"Save objects tree as JSON file"},"Save Objecttree is not possible":{cn:"Saving the objects tree is not possible",en:"Saving the objects tree is not possible"},"Save configuration":{cn:"保存配置",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"},Seychelles:{cn:"Seychelles",en:"Seychelles"},"Show instances only for current host":{cn:"Show instances only for current host",en:"Show instances only for current host"},"Show values of instance":{cn:"Show values of instance",en:"Show values of instance"},"Show...":{cn:"显示...",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:"System uptime",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:"Unknown file format!",en:"Unknown file format!"},"Unsupported image format":{cn:"Unsupported image format",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:"Upload of configuration is started",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:"You are going to add new instance: ",en:"You are going to add new instance: "},"You can check changelog here":{cn:'You can check the changelog here',en:'You can check the changelog here'},"You can drag&drop the devices, channels and states to enums":{cn:"You can drag&drop the devices, channels and states to enums",en:"You can drag&drop the devices, channels and states to enums"},"You can drag&drop users to groups":{cn:"You can drag&drop users to groups",en:"You can drag&drop users to groups"},"You can't see events via cloud":{cn:"You can't see events via cloud",en:"You can't see events via cloud"},"Your home":{cn:"Your home",en:"Your home"},_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:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop",en:"You can use an absolute path to the certificate, like '/opt/certs/cert.pem', or just upload it per drag&drop"},certificate:{cn:"certificate",en:"certificate"},"change view mode":{cn:"模式",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:"原生",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:"复位 (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"},"%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:"Filter",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"},Speed:{cn:"Speed",en:"Speed"},"Sri Lanka":{cn:"Sri Lanka",en:"Sri Lanka"},"St. Helena":{cn:"St. Helena",en:"St. Helena"},"St. Pierre and Miquelon":{cn:"St. Pierre and Miquelon",en:"St. Pierre and Miquelon"},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"},"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 af7d5a6..12e97dd 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","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","de","ru","pt","nl","fr","it","es","members","dontDelete","enum.functions","enum.favorites","standardGroups","enum.rooms.living_room","enum.rooms.sleeping_room","pl","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","password","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"," for %s","cn","%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","Seychelles","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","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 = tab + ' - yunkong2';\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 if (isCustom) {\n url = that.$installDialog.find('#install-url-link').val();\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 = '
    ',!E&&i.colors&&s[O].color&&(e+='
    '),!E&&i.icons&&(e+=ne(i.objects[s[O].id],i.imgPath)||'
     
    '),"enabled"===z)e+='";else if("groups"===z)for(var S=0;S'+ne(i.objects[$],null,"")+s[O].groups[S].name+""}else if("instance"===z)if(void 0!==s[O].instance&&1';for(var Y=0;Y"+r[Y]+"";e+=k+=""}else e+=""+(void 0===s[O].instance?"":s[O].instance)+"";else if("icon"===z)e+=ne(i.objects[s[O].id],i.imgPath);else{var R=s[O][z]||"";R&&"object"==typeof R&&R.en&&(R=R[systemLang]||R.en),e+=""+R+""}e+="
    ';for(var Q="",P=0;P ':(Q+="<"+t+' data-id="'+s[O].id+'" class="select-button-'+P+' select-button-custom td-button" style="margin-right: 3px;" data-parent="'+s[O].parent+'" data-children="'+!!s[O].realChildren+'" title="'+(i.buttons[P].title||"")+'">',window.M&&window.M.toast&&(Q+=''+(i.buttons[P].icon||"")+""),Q+="");e+=Q+"
    ' +\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 (!that.data[adapter].licenseUrl) {\n that.data[adapter].licenseUrl = 'https://raw.githubusercontent.com/yunkong2/yunkong2.' + (that.data[adapter].name || adapter) + '/master/LICENSE';\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 // Workaround\n // https://github.com/yunkong2/yunkong2.vis/blob/master/LICENSE =>\n // https://raw.githubusercontent.com/yunkong2/yunkong2.vis/master/LICENSE\n if (that.data[adapter].licenseUrl.indexOf('github.com') !== -1) {\n that.data[adapter].licenseUrl = that.data[adapter].licenseUrl.replace('github.com', 'raw.githubusercontent.com').replace('/blob/', '/');\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\": {\n \"en\": \"Rooms\",\n \"de\": \"Räume\",\n \"ru\": \"Комнаты\",\n \"pt\": \"Quartos\",\n \"nl\": \"Kamers\",\n \"fr\": \"Pièces\",\n \"it\": \"Camere\",\n \"es\": \"Habitaciones\"\n },\n \"desc\": {\n \"en\": \"List of the rooms\",\n \"de\": \"Liste der Räumen\",\n \"ru\": \"Список комнат\",\n \"pt\": \"Lista dos quartos\",\n \"nl\": \"Lijst met kamers\",\n \"fr\": \"Liste des chambres\",\n \"it\": \"Elenco delle stanze\",\n \"es\": \"Lista de las habitaciones\"\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\": {\n \"en\": \"Functions\",\n \"de\": \"Funktionen\",\n \"ru\": \"функции\",\n \"pt\": \"Funções\",\n \"nl\": \"functies\",\n \"fr\": \"Les fonctions\",\n \"it\": \"funzioni\",\n \"es\": \"Funciones\"\n },\n \"desc\": {\n \"en\": \"List of the functions\",\n \"de\": \"Liste der Funktionen\",\n \"ru\": \"Список функций\",\n \"pt\": \"Lista das funções\",\n \"nl\": \"Lijst met functies\",\n \"fr\": \"Liste des fonctions\",\n \"it\": \"Elenco delle funzioni\",\n \"es\": \"Lista de las funciones\"\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\": {\n \"en\": \"Favorites\",\n \"de\": \"Favoriten\",\n \"ru\": \"Избранные\",\n \"pt\": \"Favoritos\",\n \"nl\": \"favorieten\",\n \"fr\": \"Favoris\",\n \"it\": \"Preferiti\",\n \"es\": \"Favoritos\"\n },\n \"desc\": {\n \"en\": \"List of favorites objects\",\n \"de\": \"Liste der Favoritenobjekte\",\n \"ru\": \"Список избранных объектов\",\n \"pt\": \"Lista de objetos favoritos\",\n \"nl\": \"Lijst met favorietenobjecten\",\n \"fr\": \"Liste des objets favoris\",\n \"it\": \"Elenco di oggetti preferiti\",\n \"es\": \"Lista de objetos favoritos\"\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\": {\n \"en\": \"Living room\",\n \"de\": \"Wohnzimmer\",\n \"ru\": \"Гостиная\",\n \"pt\": \"Sala de estar\",\n \"nl\": \"Woonkamer\",\n \"fr\": \"Salon\",\n \"it\": \"Soggiorno\",\n \"es\": \"Sala\"\n },\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\": {\n \"en\": \"Sleeping room\",\n \"de\": \"Schlafzimmer\",\n \"ru\": \"Спальня\",\n \"pt\": \"Quarto de dormir\",\n \"nl\": \"Slaapkamer\",\n \"fr\": \"Chambre à coucher\",\n \"it\": \"Camera da letto\",\n \"es\": \"Dormitorio\",\n \"pl\": \"Sypialnia\"\n },\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\": {\n \"en\": \"Kitchen\",\n \"de\": \"Küche\",\n \"ru\": \"Кухня\",\n \"pt\": \"Cozinha\",\n \"nl\": \"Keuken\",\n \"fr\": \"Cuisine\",\n \"it\": \"Cucina\",\n \"es\": \"Cocina\",\n \"pl\": \"Kuchnia\"\n },\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\": {\n \"en\": \"Office\",\n \"de\": \"Büro\",\n \"ru\": \"офис\",\n \"pt\": \"Escritório\",\n \"nl\": \"Kantoor\",\n \"fr\": \"Bureau\",\n \"it\": \"Ufficio\",\n \"es\": \"Oficina\",\n \"pl\": \"Gabinet\"\n },\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\": {\n \"en\": \"Nursery\",\n \"de\": \"Kinderzimmer\",\n \"ru\": \"Детская\",\n \"pt\": \"Berçário\",\n \"nl\": \"Kwekerij\",\n \"fr\": \"Garderie\",\n \"it\": \"Asilo nido\",\n \"es\": \"Guardería\",\n \"pl\": \"Żłobek\"\n },\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\": {\n \"en\": \"WC\",\n \"de\": \"Toilette\",\n \"ru\": \"Туалет\",\n \"pt\": \"Banheiro\",\n \"nl\": \"WC\",\n \"fr\": \"Toilettes\",\n \"it\": \"Bagno\",\n \"es\": \"Baño\",\n \"pl\": \"Toaleta\"\n },\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\": {\n \"en\": \"Garage\",\n \"de\": \"Garage\",\n \"ru\": \"Гараж\",\n \"pt\": \"Garagem\",\n \"nl\": \"Garage\",\n \"fr\": \"Garage\",\n \"it\": \"Box auto\",\n \"es\": \"Garaje\",\n \"pl\": \"Garaż\"\n },\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\": {\n \"en\": \"Light\",\n \"de\": \"Licht\",\n \"ru\": \"Свет\",\n \"pt\": \"Luz\",\n \"nl\": \"Licht\",\n \"fr\": \"Lumière\",\n \"it\": \"Soggiorno\",\n \"es\": \"Luz\"\n },\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\": {\n \"en\": \"Blinds\",\n \"de\": \"Rollladen\",\n \"ru\": \"Жалюзи\",\n \"pt\": \"Cortinas\",\n \"nl\": \"blinds\",\n \"fr\": \"Stores\",\n \"it\": \"blinds\",\n \"es\": \"Persianas\",\n \"pl\": \"Żaluzje\"\n },\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\": {\n \"en\": \"Weather\",\n \"de\": \"Wetter\",\n \"ru\": \"Погода\",\n \"pt\": \"Clima\",\n \"nl\": \"Weer\",\n \"fr\": \"Météo\",\n \"it\": \"Tempo metereologico\",\n \"es\": \"Clima\",\n \"pl\": \"Pogoda\"\n },\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\": {\n \"en\": \"Heating\",\n \"de\": \"Heizung\",\n \"ru\": \"Отопление\",\n \"pt\": \"Aquecimento\",\n \"nl\": \"Verwarming\",\n \"fr\": \"Chauffage\",\n \"it\": \"Riscaldamento\",\n \"es\": \"Calefacción\",\n \"pl\": \"Ogrzewanie\"\n },\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\": {\n \"en\": \"Backlight\",\n \"de\": \"Hintergrundbeleuchtung\",\n \"ru\": \"Подсветка\",\n \"pt\": \"Luz de fundo\",\n \"nl\": \"Backlight\",\n \"fr\": \"Rétro-éclairage\",\n \"it\": \"Controluce\",\n \"es\": \"Iluminar desde el fondo\",\n \"pl\": \"Podświetlenie\"\n },\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\": {\n \"en\": \"Household\",\n \"de\": \"Haushalt\",\n \"ru\": \"Домашнее хозяйство\",\n \"pt\": \"Casa\",\n \"nl\": \"Huishouden\",\n \"fr\": \"Ménage\",\n \"it\": \"Domestico\",\n \"es\": \"Casa\",\n \"pl\": \"Gospodarstwo domowe\"\n },\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\": {\n \"en\": \"Audio/Music\",\n \"de\": \"Audio/Musik\",\n \"ru\": \"Аудио/Музыка\",\n \"pt\": \"Áudio/Música\",\n \"nl\": \"Audio/Muziek\",\n \"fr\": \"Audio/Musique\",\n \"it\": \"Audio/Musica\",\n \"es\": \"Audio/Música\",\n \"pl\": \"Audio/Muzyka\"\n },\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\": {\n \"en\": \"Security\",\n \"de\": \"Sicherheit\",\n \"ru\": \"Безопасность\",\n \"pt\": \"Segurança\",\n \"nl\": \"Veiligheid\",\n \"fr\": \"Sécurité\",\n \"it\": \"Sicurezza\",\n \"es\": \"Seguridad\",\n \"pl\": \"Bezpieczeństwo\"\n },\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 \"de\": \"Räume\",\n \"ru\": \"Комнаты\",\n \"pt\": \"Quartos\",\n \"nl\": \"Kamers\",\n \"fr\": \"Pièces\",\n \"it\": \"Camere\",\n \"es\": \"Habitaciones\",\n \"pl\": \"Pokoje\"\n },\n \"desc\": {\n \"en\": \"List of the rooms\",\n \"de\": \"Liste der Räumen\",\n \"ru\": \"Список комнат\",\n \"pt\": \"Lista dos quartos\",\n \"nl\": \"Lijst met kamers\",\n \"fr\": \"Liste des chambres\",\n \"it\": \"Elenco delle stanze\",\n \"es\": \"Lista de las habitaciones\",\n \"pl\": \"Lista pokoi\"\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 \"de\": \"Funktionen\",\n \"ru\": \"функции\",\n \"pt\": \"Funções\",\n \"nl\": \"functies\",\n \"fr\": \"Les fonctions\",\n \"it\": \"funzioni\",\n \"es\": \"Funciones\",\n \"pl\": \"Funkcje\"\n },\n \"desc\": {\n \"en\": \"List of the functions\",\n \"de\": \"Liste der Funktionen\",\n \"ru\": \"Список функций\",\n \"pt\": \"Lista das funções\",\n \"nl\": \"Lijst met functies\",\n \"fr\": \"Liste des fonctions\",\n \"it\": \"Elenco delle funzioni\",\n \"es\": \"Lista de las funciones\",\n \"pl\": \"Lista funkcji\"\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\": {\n \"en\": \"Rooms\",\n \"cn\": \"场景\"\n },\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\": {\n \"en\": \"Functions\",\n \"cn\": \"功能\"\n },\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\": {\n \"en\": \"Favorites\",\n \"cn\": \"收藏\"\n },\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\": {\n \"en\": \"Living room\"\n },\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\": {\n \"en\": \"Sleeping room\"\n },\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\": {\n \"en\": \"Kitchen\"\n },\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\": {\n \"en\": \"Office\"\n },\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\": {\n \"en\": \"Nursery\"\n },\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\": {\n \"en\": \"WC\"\n },\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\": {\n \"en\": \"Garage\"\n },\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\": {\n \"en\": \"Light\"\n },\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\": {\n \"en\": \"Blinds\"\n },\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\": {\n \"en\": \"Weather\"\n },\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\": {\n \"en\": \"Heating\"\n },\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\": {\n \"en\": \"Backlight\"\n },\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\": {\n \"en\": \"Household\"\n },\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\": {\n \"en\": \"Audio/Music\"\n },\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\": {\n \"en\": \"Security\"\n },\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 \"de\": \"Räume\",\n \"ru\": \"Комнаты\",\n \"pt\": \"Quartos\",\n \"nl\": \"Kamers\",\n \"fr\": \"Pièces\",\n \"it\": \"Camere\",\n \"es\": \"Habitaciones\",\n \"pl\": \"Pokoje\"\n },\n \"desc\": {\n \"en\": \"List of the rooms\",\n \"de\": \"Liste der Räumen\",\n \"ru\": \"Список комнат\",\n \"pt\": \"Lista dos quartos\",\n \"nl\": \"Lijst met kamers\",\n \"fr\": \"Liste des chambres\",\n \"it\": \"Elenco delle stanze\",\n \"es\": \"Lista de las habitaciones\",\n \"pl\": \"Lista pokoi\"\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 \"de\": \"Funktionen\",\n \"ru\": \"функции\",\n \"pt\": \"Funções\",\n \"nl\": \"functies\",\n \"fr\": \"Les fonctions\",\n \"it\": \"funzioni\",\n \"es\": \"Funciones\",\n \"pl\": \"Funkcje\"\n },\n \"desc\": {\n \"en\": \"List of the functions\",\n \"de\": \"Liste der Funktionen\",\n \"ru\": \"Список функций\",\n \"pt\": \"Lista das funções\",\n \"nl\": \"Lijst met functies\",\n \"fr\": \"Liste des fonctions\",\n \"it\": \"Elenco delle funzioni\",\n \"es\": \"Lista de las funciones\",\n \"pl\": \"Lista funkcji\"\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 = $('